DA14580有两个TIMER,TIMER0和TIMER2,TIMER0有两路PWM,TIMER2有三路PWM。TIMER0和TIMER2的区别就是TIMER0是16位的,有PWM0和PWM1,而且这两个PWM是一起的。TIMER2是14位的,有PWM2、PWM3和PWM4,是三个独立的PWM,可分别设置占空比。
下面介绍如何用PWM做一个呼吸灯。
1.先定义一个IO口
#define PWM_PORT GPIO_PORT_1
#define PWM_PIN GPIO_PIN_0
2.初始化IO口,PID类型为PWM0,因为要用到timer0
GPIO_ConfigurePin( PWM_PORT, PWM_PIN, OUTPUT, PID_PWM0, false );
3.timer0的初始化如下
void pwm_timer0_init(uint16_t h, uint16_t l)
{
//Enables TIMER0 clock
set_tmr_enable(CLK_PER_REG_TMR_ENABLED);
//Sets TIMER0 clock division factor to 1
set_tmr_div(CLK_PER_REG_TMR_DIV_1);
timer0_init(TIM0_CLK_FAST, PWM_MODE_ONE, TIM0_CLK_NO_DIV);
timer0_set(1000,h,l);
timer0_start();
}
这里设置timer0时钟为系统时钟16MHz,不分频。
说下void timer0_set(uint16_t pwm_on, uint16_t pwm_high, uint16_t pwm_low)这个函数里的三个