众多的主控芯片都有定时器,定时器的运用也无非是设置定时时间,到时间了产生中断,然后在中断里干一件事情。如果按这种思路说起来,好像C6000的定时器也跳不出这个定式。当然C6000的定时器还可以计数外来事件个数,和产生脉冲信号。让定时器干什么事情的区别,就在于控制寄存器的配置状况,按照功能需求和所能完成的事项来配置。
在我的项目里也是当做一个普通的定时器来使用,没有开发出他如此多的功能,实现方式如下:
首先要对其初始化,初始化的过程在上一节里面已经介绍了,代码如下:
void TIMER_Init(void)
{
TIMER_Config myTimerConfig;
hTimer = TIMER_open(TIMER_DEV0, TIMER_OPEN_RESET);
TIMER_getConfig( hTimer, &myTimerConfig);
myTimerConfig.ctl &= 0xff3f;
myTimerConfig.ctl |= 0x3c0;
myTimerConfig.prd = 0x200;
myTimerConfig.cnt = 0x00000000;
TIMER_config(hTimer, &myTimerConfig);
IRQ_enable(TIMER_getEventId(hTimer));
}
定时周期寄存器prd,可以根据需要,修改定时周期。
然后在定时中断interrupt void timer0_isr()中完成需要完成的事项。
最后需要注意的是在中断向量列表中要添加上这个中断。
在主控芯片中,定时器中断是一个重要的内容,但是在C6000中实现起来,好像也没有这么麻烦,但是如果想看中断效果,使用printf会有一定的时间延迟,如果还周到系统中其他因素的影响,则中断时间就更不仅仅是受prd的影响了。具体的情况还要在实际的程序中体现。
|