always return audio pin to 0 on ARM (#24503)
This commit is contained in:
		
							parent
							
								
									d5a0424987
								
							
						
					
					
						commit
						8157b37438
					
				
					 2 changed files with 13 additions and 10 deletions
				
			
		| 
						 | 
					@ -41,18 +41,19 @@ static float channel_1_frequency = 0.0f;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void channel_1_set_frequency(float freq) {
 | 
					void channel_1_set_frequency(float freq) {
 | 
				
			||||||
    channel_1_frequency = freq;
 | 
					    channel_1_frequency = freq;
 | 
				
			||||||
 | 
					    pwmcnt_t period;
 | 
				
			||||||
 | 
					    pwmcnt_t width;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (freq <= 0.0) {
 | 
					    if (freq <= 0.0) {
 | 
				
			||||||
        // a pause/rest has freq=0
 | 
					        period = 2;
 | 
				
			||||||
        return;
 | 
					        width  = 0;
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					        period = (pwmCFG.frequency / freq);
 | 
				
			||||||
 | 
					        width  = (pwmcnt_t)(((period) * (pwmcnt_t)((100 - note_timbre) * 100)) / (pwmcnt_t)(10000));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					 | 
				
			||||||
    pwmcnt_t period = (pwmCFG.frequency / freq);
 | 
					 | 
				
			||||||
    chSysLockFromISR();
 | 
					    chSysLockFromISR();
 | 
				
			||||||
    pwmChangePeriodI(&AUDIO_PWM_DRIVER, period);
 | 
					    pwmChangePeriodI(&AUDIO_PWM_DRIVER, period);
 | 
				
			||||||
    pwmEnableChannelI(&AUDIO_PWM_DRIVER, AUDIO_PWM_CHANNEL - 1,
 | 
					    pwmEnableChannelI(&AUDIO_PWM_DRIVER, AUDIO_PWM_CHANNEL - 1, width);
 | 
				
			||||||
                      // adjust the duty-cycle so that the output is for 'note_timbre' duration HIGH
 | 
					 | 
				
			||||||
                      PWM_PERCENTAGE_TO_WIDTH(&AUDIO_PWM_DRIVER, (100 - note_timbre) * 100));
 | 
					 | 
				
			||||||
    chSysUnlockFromISR();
 | 
					    chSysUnlockFromISR();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -67,6 +68,9 @@ void channel_1_start(void) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void channel_1_stop(void) {
 | 
					void channel_1_stop(void) {
 | 
				
			||||||
    pwmStop(&AUDIO_PWM_DRIVER);
 | 
					    pwmStop(&AUDIO_PWM_DRIVER);
 | 
				
			||||||
 | 
					    pwmStart(&AUDIO_PWM_DRIVER, &pwmCFG);
 | 
				
			||||||
 | 
					    pwmEnableChannel(&AUDIO_PWM_DRIVER, AUDIO_PWM_CHANNEL - 1, 0);
 | 
				
			||||||
 | 
					    pwmStop(&AUDIO_PWM_DRIVER);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static virtual_timer_t audio_vt;
 | 
					static virtual_timer_t audio_vt;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -258,11 +258,10 @@ void audio_stop_tone(float pitch) {
 | 
				
			||||||
        for (int i = AUDIO_TONE_STACKSIZE - 1; i >= 0; i--) {
 | 
					        for (int i = AUDIO_TONE_STACKSIZE - 1; i >= 0; i--) {
 | 
				
			||||||
            found = (tones[i].pitch == pitch);
 | 
					            found = (tones[i].pitch == pitch);
 | 
				
			||||||
            if (found) {
 | 
					            if (found) {
 | 
				
			||||||
                tones[i] = (musical_tone_t){.time_started = 0, .pitch = -1.0f, .duration = 0};
 | 
					 | 
				
			||||||
                for (int j = i; (j < AUDIO_TONE_STACKSIZE - 1); j++) {
 | 
					                for (int j = i; (j < AUDIO_TONE_STACKSIZE - 1); j++) {
 | 
				
			||||||
                    tones[j]     = tones[j + 1];
 | 
					                    tones[j] = tones[j + 1];
 | 
				
			||||||
                    tones[j + 1] = (musical_tone_t){.time_started = 0, .pitch = -1.0f, .duration = 0};
 | 
					 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					                tones[AUDIO_TONE_STACKSIZE - 1] = (musical_tone_t){.time_started = 0, .pitch = -1.0f, .duration = 0};
 | 
				
			||||||
                break;
 | 
					                break;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue