ADSP-BF533定时器之定时功能实现(原创)
0赞通过之前的学习,对于ADSP-BF533的定时器算是有一个基本的了解吧,今天打算对如何实现定时器的定时功能进行试验。
BF533的定时器没有单独的计时功能,所以如果要实现计时功能,可以采用 PWM_OUT 模式,利用定时器的溢出中断来进行计时。
一、下面说一下定时器实现定时功能的步骤,这里以定时器0为例:
1. 设置定时器的工作模式,设置成PWM_OUT模式;
2. 设置定时器的周期和脉冲宽度,脉冲宽度可以随便设置,只要小于周期就行,而周期是根据我们定时的长度来设置的,具体的计算可参照我的博客“ADSP-BF533定时器入门(原创)”,里面有详细介绍;
3. 使能定时器0,因为是设置Timer0,所以使能定时器0;
4. 配置定时器0的中断等级,在SIC_IAR2寄存器中进行设置;
5. 注册中断等级,中断等级为第4步中设置的值;
6. 使能定时器0中断,这是每一种中断都必须要的步骤。
二、下面的程序解析:
1.定时器初始化
void Init_Timers(void)
{
*pTIMER0_CONFIG= 0x0019;//配置定时器0工作模式为PWM_OUT模式
*pTIMER0_PERIOD= 0x00800000;//设置定时器0周期和脉冲宽度
*pTIMER0_WIDTH= 0x00400000;
*pTIMER_ENABLE= 0x0001;//使能定时器0
}
2.定时器中断初始化:
void Init_Interrupts(void)
{
*pSIC_IAR0 = 0xffffffff;
*pSIC_IAR1 = 0xffffffff;
*pSIC_IAR2 = 0xfffffff4;//定时器0的中断等级设置位于SIC_IAR2的0~3位
register_handler(ik_ivg11, TIMER0_ISR);//注册中断等级为11,标识符为TIMER0_ISR
*pSIC_IMASK = 0x00010000;//使能定时器0中断
}
3.定时器中断处理程序:
EX_INTERRUPT_HANDLER(TIMER0_ISR)
{
*pTIMER_STATUS = 0x0001;//注意必须在中断程序清除中断标志位TIMIL0
printf("timer0 interrupt !\n");//然后每进一次定时中断就打印一次字符串
}
三、最后给出试验结果,如下图:

呵呵,是不是很酷呢,如需完整详细程序,请留下邮箱。。。
