標籤:
#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 計數模式 中斷模式 初始化
#endif
#include "tim.h"
u8 tim1_mr0_flag = 0;
void tim0_ch0_count_int_init(u32 pr,u32 count) //定時器0 通道0 計數模式 中斷模式 初始化
{
//開啟TIM0時鐘
LPC_SC->PCONP |= (1<<1);//開啟時鐘
LPC_TIM0->TCR |= (1<<1);//複位定時器 因為此處複位了寄存器,所以系統中使用多個定時器通道的時候這一位一定要改
LPC_TIM0->TCR = 0x00;//禁止定時器 退出複位
LPC_TIM0->PR = pr;//設定預分頻值
LPC_TIM0->MR0 = count;//預設計數值
LPC_TIM0->MCR |= (1<<1)|(1<<0);//mr0 匹配時複位 並且中斷開啟
LPC_TIM0->CTCR &= ~(3<<0);//工作在計數模式
//此時,需要配置中斷
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發生中斷
{
LPC_TIM0->IR |= (1<<0);//清除中斷
NVIC_ClearPendingIRQ(TIMER0_IRQn);//清除中斷
tim1_mr0_flag = 1;
}
else
{
//現在還沒做其他的通道的中斷
LPC_TIM0->IR = 0xff;//清除中斷
NVIC_ClearPendingIRQ(TIMER0_IRQn);//清除中斷
}
}
LPC1788定時器使用