示例#1
0
extern void __analogWrite(uint8_t pin, int value)
{
    bool start_timer = false;
    if(value == 0) {
        digitalWrite(pin, LOW);
        prep_pwm_steps();
        return;
    }
    if((pwm_mask & (1 << pin)) == 0) {
        if(pwm_mask == 0) {
            memset(&_pwm_isr_data, 0, sizeof(struct pwm_isr_data*));
            start_timer = true;
        }
        pinMode(pin, OUTPUT);
        digitalWrite(pin, LOW);
        pwm_mask |= (1 << pin);
    }
    if((F_CPU / ESP8266_CLOCK) == 1) {
        value = (value+1) / 2;
    }
    pwm_values[pin] = value % (pwm_range + 1);
    prep_pwm_steps();
    if(start_timer) {
        pwm_start_timer();
    }
}
示例#2
0
void esc_init(void)
{
	/* init timer2 with a period of 20ms */
	//     pwm_init_timer(&RCC_APB1ENR, RCC_APB1ENR_TIM2EN, LED_TIM, PWM_PRESCALE, PWM_PERIOD);
	pwm_init_timer(&RCC_APB1ENR, RCC_APB1ENR_TIM4EN, ESC_TIMER, PWM_PRESCALE, ESC_PWM_PERIOD);

	/* init output of channel2 of timer2 */
	//     pwm_init_output_channel(LED_TIM, LED_CH1, &RCC_APB2ENR, RCC_APB2ENR_IOPAEN, GPIOA, GPIO_TIM2_CH2);
	pwm_init_output_channel(ESC_TIMER, ESC_CHANNEL1, &RCC_APB2ENR, RCC_APB2ENR_IOPBEN, GPIOB, GPIO_TIM4_CH1);
	pwm_init_output_channel(ESC_TIMER, ESC_CHANNEL2, &RCC_APB2ENR, RCC_APB2ENR_IOPBEN, GPIOB, GPIO_TIM4_CH2);


	pwm_set_pulse_width(ESC_TIMER, ESC_CHANNEL1, ESC_LOW);
	pwm_set_pulse_width(ESC_TIMER, ESC_CHANNEL2, ESC_LOW);

	/* start timer1 */
	//     pwm_start_timer(TIM2);
	pwm_start_timer(ESC_TIMER);

}
示例#3
0
extern void __analogWrite(uint8_t pin, int value) {
	bool start_timer = false;
	if(value == 0){
		pwm_mask &= ~(1 << pin);
		prep_pwm_steps();
		digitalWrite(pin, LOW);
		if(pwm_mask == 0) timer1_disable();
		return;
	}
	if((pwm_mask & (1 << pin)) == 0){
		if(pwm_mask == 0) start_timer = true;
		pwm_mask |= (1 << pin);
		pinMode(pin, OUTPUT);
		digitalWrite(pin, LOW);
	}
	pwm_values[pin] = value % (pwm_range + 1);
	prep_pwm_steps();
	if(start_timer){
		pwm_start_timer();
	}
}