#ifndef __TIM_H_
#define __TIM_H_
#include "common.h"
extern u8 tim1_mr0_flag;
void tim0_ch0_count_int_init(u32 pr,u32 count);//定時器0 通道0 計數(shù)模式 中斷模式 初始化
#endif
#include "tim.h"
u8 tim1_mr0_flag=0;
void tim0_ch0_count_int_init(u32 pr,u32 count) //定時器0 通道0 計數(shù)模式 中斷模式 初始化
{
//打開TIM0時鐘
LPC_SC->PCONP|=(1<<1);//打開時鐘
LPC_TIM0->TCR|=(1<<1);//復(fù)位定時器 因為此處復(fù)位了寄存器,所以系統(tǒng)中使用多個定時器通道的時候這一位一定要改
LPC_TIM0->TCR=0x00;//禁止定時器 退出復(fù)位
LPC_TIM0->PR=pr;//設(shè)置預(yù)分頻值
LPC_TIM0->MR0=count;//預(yù)設(shè)計數(shù)值
LPC_TIM0->MCR|=(1<<1)|(1<<0);//mr0 匹配時復(fù)位 并且中斷打開
LPC_TIM0->CTCR&=~(3<<0);//工作在計數(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);//打開中斷通道
//打開定時器
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);//清除中斷
}
}