LPC1788定時(shí)器使用
#ifndef __TIM_H_
#define __TIM_H_
#include "common.h"
extern u8 tim1_mr0_flag;
void tim0_ch0_count_int_init(u32 pr,u32 count);//定時(shí)器0 通道0 計(jì)數(shù)模式 中斷模式 初始化
#endif
#include "tim.h"
u8 tim1_mr0_flag=0;
void tim0_ch0_count_int_init(u32 pr,u32 count) //定時(shí)器0 通道0 計(jì)數(shù)模式 中斷模式 初始化
{
//打開TIM0時(shí)鐘
LPC_SC->PCONP|=(1<<1);//打開時(shí)鐘
LPC_TIM0->TCR|=(1<<1);//復(fù)位定時(shí)器 因?yàn)榇颂帍?fù)位了寄存器,所以系統(tǒng)中使用多個(gè)定時(shí)器通道的時(shí)候這一位一定要改
LPC_TIM0->TCR=0x00;//禁止定時(shí)器 退出復(fù)位
LPC_TIM0->PR=pr;//設(shè)置預(yù)分頻值
LPC_TIM0->MR0=count;//預(yù)設(shè)計(jì)數(shù)值
LPC_TIM0->MCR|=(1<<1)|(1<<0);//mr0 匹配時(shí)復(fù)位 并且中斷打開
LPC_TIM0->CTCR&=~(3<<0);//工作在計(jì)數(shù)模式
//此時(shí),需要配置中斷
NVIC_SetPriority(TIMER0_IRQn,NVIC_EncodePriority(PriorityGroup2,TIM0_PreemptPriority,TIM0_SubPriority));
LPC_TIM0->IR|=(1<<0);//清除中斷
NVIC_ClearPendingIRQ(TIMER0_IRQn);//清除中斷
NVIC_EnableIRQ(TIMER0_IRQn);//打開中斷通道
//打開定時(shí)器
LPC_TIM0->TCR|=(1<<0);
}
void TIMER0_IRQHandler(void)
{
if((LPC_TIM0->IR&0x01))//如果是通道1發(fā)生中斷
{
LPC_TIM0->IR|=(1<<0);//清除中斷
NVIC_ClearPendingIRQ(TIMER0_IRQn);//清除中斷
tim1_mr0_flag=1;
}
else
{
//現(xiàn)在還沒做其他的通道的中斷
LPC_TIM0->IR=0xff;//清除中斷
NVIC_ClearPendingIRQ(TIMER0_IRQn);//清除中斷
}
}