LPC1788定时器使用
扫描二维码
随时随地手机看文章
#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);//清除中断
}
}