LPC1768在系统滴答定时器和通用定时器之外还引入了一个定时器,叫做重复定时器RIT,该定时器只能用于定时操作,带有一个中断,我个人的感觉,这似乎是为了延时函数设计的一个定时器
那么使用该定时器时遵循什么流程?
第一,打开时钟
第二,我们要确定定时器从pclk分频数值,这要靠另外一个寄存器
第三,先关闭定时器
第四 设置寄存器比较值
第五 清空或者屏蔽一些特定的比较屏蔽位
最后打开中断,启动定时器
#define RIT_INT_POSITION 0
#define RIT_ENCLR_POSITION 1
#define RIT_ENBR_POSITION 2
#define RIT_EN_POSITION 3
void RitInit(u32 count)
{
LPC_SC->PCONP |=(1<<16); //打开时钟 sys中四分频 25M
LPC_RIT->RICTRL &= ~(1<<3);
LPC_RIT->RICOMPVAL = count;
// LPC_RIT->RIMASK = count;
LPC_RIT->RIMASK = 0x80000000;
LPC_RIT->RICOUNTER = 0;
NVIC_EnableIRQ(RIT_IRQn); /* enable irq in nvic */
LPC_RIT->RICTRL = (1<<RIT_INT_POSITION)|(1<<RIT_ENCLR_POSITION)|(1<<RIT_ENBR_POSITION)|(1<<RIT_EN_POSITION);
}
最后,我们需要在rit的中断函数中响应中断,如下
void RIT_IRQHandler()
{
u8 state = LPC_RIT->RICTRL;
if(state&0x01) //有中断发生
{
RitStop();
LPC_RIT->RICOUNTER = 0;
LPC_RIT->RICTRL |= 0x01; //清除中断
RIT_INT_CALLBACK;
RitStart();
}
}