MCU

ADSP-BF533定时器之定时功能实现(原创)

0
阅读(3545)

通过之前的学习,对于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");//然后每进一次定时中断就打印一次字符串

}

三、最后给出试验结果,如下图:

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