簡單記錄LPC1788定時器匹配中斷設置--通過寄存器直接操作
#include "timer_lpc1788.h"
#include "uart_lpc1788.h"
void TIMER0_IRQHandler(void) //TIMER0中斷函數
{
if(((LPC_TIM0->IR) &(1<<0))==(1<<0)) //匹配中斷發(fā)生
{
UARTSendStr("CLOSrn");
}
LPC_TIM0->IR |=(1<<0);//清除匹配中斷標志位
}
void TIMER0_Init(uint32_t clk, uint32_t howtime)
{
LPC_SC->PCONP|=(1<<1);//打開TIMER0外設時鐘
LPC_TIM0->CTCR &=(~0x03);//計數控制寄存器
LPC_TIM0->CTCR |=0x00;//定時器模式
//----PC=PR-----TC++
LPC_TIM0->TC =0;//定時計數器
LPC_TIM0->PR =0;//預分頻寄存器
LPC_TIM0->PC =0;//預分頻計數器
LPC_TIM0->TCR |=(1<<1); //定時器控制寄存器--復位定時器
LPC_TIM0->TCR &=~(1<<1); //清除復位
LPC_TIM0->PR =(clk/1000000-1);//預分頻寄存器--系統外設時鐘/1000000=1us需要的PC值
LPC_TIM0->IR=0xFFFFFFFF; //清除中斷
//--------------------
LPC_TIM0->MR0=howtime;//匹配寄存器---多少個1us將匹配
LPC_TIM0->MCR &=~(0x07); //匹配控制寄存器--禁止匹配-復位-停止產生的中斷
LPC_TIM0->MCR |=(1<<0);//允許匹配中斷
LPC_TIM0->MCR |=(1<<1);//允許復位中斷--匹配時TC復位-重新計數
NVIC_SetPriority(TIMER0_IRQn, ((0x01<<3)|0x01)); //設置定時器中斷優(yōu)先級
NVIC_EnableIRQ(TIMER0_IRQn); //定時器中斷使能
LPC_TIM0->TCR |=(1<<0);; //啟動定時器
}