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