ADSP-BF53x上有3个通用定时器,每个定时器有三种模式:
1. 脉冲宽度调制模式(PWM_OUT)
2. 脉冲宽度计数捕获模式(WDTH_CAP)
3. 外部事件模式(EXT_CLK)
寄存器 | 功能 |
TIMERx_CONFIG | 定时器配置寄存器,用于设置定时器工作模式 |
TIMERx_WIDTH | 定时器宽度寄存器,设置输出波形脉冲宽度 |
TIMERx_PERIOD | 定时器周期寄存器,设置输出波形的周期 |
TIMERx_COUNTER | 定时器计数寄存器,读取捕获的脉冲数量 |
TIMER_ENABLE | 定时器使能寄存器 |
TIMER_DISABLE | 定时器关闭寄存器 |
TIMER_STATUS | 定时器状态寄存器 |
*pTIMER0_CONFIG = 0x0019; //配置定时器为PWM模式
*pTIMER0_PERIOD = 0x00800000; //设置周期为0x00800000个系统时钟
*pTIMER0_WIDTH = 0x00400000; //设置脉宽为0x00400000个系统时钟
*pTIMER_ENABLE = 0x0001; //使能Timer0
*pSIC_IAR0 = 0xffffffff;
*pSIC_IAR1 = 0xffffffff;
*pSIC_IAR2 = 0xfffffff4; //配置中断等级数据为4
register_handler(ik_ivg11, TIMER0_ISR); //注册中断等级为11,标识符为TIMER0_ISR
*pSIC_IMASK = 0x00010000;
EX_INTERRUPT_HANDLER(TIMER0_ISR) //标识符为TIMER0_ISR的中断函数
{
*pTIMER_STATUS = 0x0001; //清除定时器中断标志
printf("timer0 interrupt !\n"); //打印信息
}
代码实现了将定时器配置为PWM_OUT模式,通过定时器中断来定时一个0x00800000个系统的时间长度,定时完成后,在中断内打印信息。
定时器没有单独的计时功能,所以如果计时,可以采用PWM_OUT模式,利用定时器中断来进行计时,同时在芯片的TIMER0管脚上,会有PWM波形输出。