Fix LEDC channels above 8 not properly clearing
Fixes: https://github.com/espressif/arduino-esp32/issues/2660
This commit is contained in:
		
							parent
							
								
									1efcd21ba9
								
							
						
					
					
						commit
						6dab3f6777
					
				@ -167,7 +167,7 @@ static void _ledcSetupChannel(uint8_t chan, uint8_t idle_level)
 | 
				
			|||||||
    LEDC_CHAN(group, channel).conf0.sig_out_en = 0;//This is the output enable control bit for channel
 | 
					    LEDC_CHAN(group, channel).conf0.sig_out_en = 0;//This is the output enable control bit for channel
 | 
				
			||||||
    LEDC_CHAN(group, channel).conf1.duty_start = 0;//When duty_num duty_cycle and duty_scale has been configured. these register won't take effect until set duty_start. this bit is automatically cleared by hardware.
 | 
					    LEDC_CHAN(group, channel).conf1.duty_start = 0;//When duty_num duty_cycle and duty_scale has been configured. these register won't take effect until set duty_start. this bit is automatically cleared by hardware.
 | 
				
			||||||
    if(group) {
 | 
					    if(group) {
 | 
				
			||||||
        LEDC_CHAN(group, channel).conf0.val &= ~BIT(4);
 | 
					        LEDC_CHAN(group, channel).conf0.low_speed_update = 1;
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
        LEDC_CHAN(group, channel).conf0.clk_en = 0;
 | 
					        LEDC_CHAN(group, channel).conf0.clk_en = 0;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@ -196,7 +196,7 @@ void ledcWrite(uint8_t chan, uint32_t duty)
 | 
				
			|||||||
        LEDC_CHAN(group, channel).conf0.sig_out_en = 1;//This is the output enable control bit for channel
 | 
					        LEDC_CHAN(group, channel).conf0.sig_out_en = 1;//This is the output enable control bit for channel
 | 
				
			||||||
        LEDC_CHAN(group, channel).conf1.duty_start = 1;//When duty_num duty_cycle and duty_scale has been configured. these register won't take effect until set duty_start. this bit is automatically cleared by hardware.
 | 
					        LEDC_CHAN(group, channel).conf1.duty_start = 1;//When duty_num duty_cycle and duty_scale has been configured. these register won't take effect until set duty_start. this bit is automatically cleared by hardware.
 | 
				
			||||||
        if(group) {
 | 
					        if(group) {
 | 
				
			||||||
            LEDC_CHAN(group, channel).conf0.val |= BIT(4);
 | 
					            LEDC_CHAN(group, channel).conf0.low_speed_update = 1;
 | 
				
			||||||
        } else {
 | 
					        } else {
 | 
				
			||||||
            LEDC_CHAN(group, channel).conf0.clk_en = 1;
 | 
					            LEDC_CHAN(group, channel).conf0.clk_en = 1;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@ -204,7 +204,7 @@ void ledcWrite(uint8_t chan, uint32_t duty)
 | 
				
			|||||||
        LEDC_CHAN(group, channel).conf0.sig_out_en = 0;//This is the output enable control bit for channel
 | 
					        LEDC_CHAN(group, channel).conf0.sig_out_en = 0;//This is the output enable control bit for channel
 | 
				
			||||||
        LEDC_CHAN(group, channel).conf1.duty_start = 0;//When duty_num duty_cycle and duty_scale has been configured. these register won't take effect until set duty_start. this bit is automatically cleared by hardware.
 | 
					        LEDC_CHAN(group, channel).conf1.duty_start = 0;//When duty_num duty_cycle and duty_scale has been configured. these register won't take effect until set duty_start. this bit is automatically cleared by hardware.
 | 
				
			||||||
        if(group) {
 | 
					        if(group) {
 | 
				
			||||||
            LEDC_CHAN(group, channel).conf0.val &= ~BIT(4);
 | 
					            LEDC_CHAN(group, channel).conf0.low_speed_update = 1;
 | 
				
			||||||
        } else {
 | 
					        } else {
 | 
				
			||||||
            LEDC_CHAN(group, channel).conf0.clk_en = 0;
 | 
					            LEDC_CHAN(group, channel).conf0.clk_en = 0;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user