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) {
 | 
			
		||||
    channel_1_frequency = freq;
 | 
			
		||||
    pwmcnt_t period;
 | 
			
		||||
    pwmcnt_t width;
 | 
			
		||||
 | 
			
		||||
    if (freq <= 0.0) {
 | 
			
		||||
        // a pause/rest has freq=0
 | 
			
		||||
        return;
 | 
			
		||||
        period = 2;
 | 
			
		||||
        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();
 | 
			
		||||
    pwmChangePeriodI(&AUDIO_PWM_DRIVER, period);
 | 
			
		||||
    pwmEnableChannelI(&AUDIO_PWM_DRIVER, AUDIO_PWM_CHANNEL - 1,
 | 
			
		||||
                      // 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));
 | 
			
		||||
    pwmEnableChannelI(&AUDIO_PWM_DRIVER, AUDIO_PWM_CHANNEL - 1, width);
 | 
			
		||||
    chSysUnlockFromISR();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -67,6 +68,9 @@ void channel_1_start(void) {
 | 
			
		|||
 | 
			
		||||
void channel_1_stop(void) {
 | 
			
		||||
    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;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -258,11 +258,10 @@ void audio_stop_tone(float pitch) {
 | 
			
		|||
        for (int i = AUDIO_TONE_STACKSIZE - 1; i >= 0; i--) {
 | 
			
		||||
            found = (tones[i].pitch == pitch);
 | 
			
		||||
            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++) {
 | 
			
		||||
                    tones[j]     = tones[j + 1];
 | 
			
		||||
                    tones[j + 1] = (musical_tone_t){.time_started = 0, .pitch = -1.0f, .duration = 0};
 | 
			
		||||
                    tones[j] = tones[j + 1];
 | 
			
		||||
                }
 | 
			
		||||
                tones[AUDIO_TONE_STACKSIZE - 1] = (musical_tone_t){.time_started = 0, .pitch = -1.0f, .duration = 0};
 | 
			
		||||
                break;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue