#include "Register_Bit.h" //包含位定义文件
#define TIMER1_DIV1 (uint8_t)1
#define TIMER1_DIV5 (uint8_t)5
#define TIMER1_DIV10 (uint8_t)10
#define TIMER1_DIV12 (uint8_t)12
#define TIMER1_DIV50 (uint8_t)50
#define TIMER1_IEN_ENB TCSR1 |= (1<<29) //定时器中断使能
#define TIMER1_IEN_DIS TCSR1 &= ~(1<<29) //定时器中断使能
#define TIMER1_CNT_ENB TCSR1 |= (1<<30) //定时器计数使能
#define TIMER1_CNT_DIS TCSR1 &= ~(1<<30) //定时器计数使能
//*************************************
// 函数名称:Init_timer0
// 函数功能:TIMER0初始化
// 入口参数:psc 分频系数 范围为1-255 Tcon 为计数个数
// 出口参数:无
//***************************************/
void Init_Timer1(uint8_t psc,uint32_t Tcon) //SYSCLK =
{
/* Reset TMR1 IP 外设先复位再使能 */
IPRSTC2 |= TMR1_RST;
IPRSTC2 &= ~TMR1_RST;
/* Enable Timer1 clock source */
APBCLK |= TMR1_CLKEN;
NVIC_ISER |= TMR1_INT; //开TIMER1中断
// NVIC_IPR2 |= (0<<0) ; //设置中断优先级为0 ->最高优先级
/* Select Timer1 clock source as external 12M */
CLKSEL1 = (CLKSEL1 & (~TM1_CLK)) | TM1_12M_32K;
/* Reset the timer/counter1, after set, this bit will be clear by H/W */
TCSR1 |= CRST;
/* Pre-Scaler */
TCSR1 &= ~(0XFF) ;
TCSR1 |= ((psc-1)<<0) ; //时钟分频
TCSR1 |= (1<<16) ; //读取数据使能
TCSR1 &= ~(1<<24) ; //计数模式使能位 --不使能
TCSR1 |= (1<<27) ; //定时器设置为周期模式
TISR1 |= (1<<0) ; //中断状态标志清0
/* Timer1 interrupt enable */
// TCSR1 |= TMR_IE;
TCMPR1 = Tcon ; //计数个数
TDR1 = 0 ; //计数器清0
}
//*************************************
// 函数名称:Timer0_Cmd
// 函数功能:TIMER0使能
// 入口参数:使能参数
// 出口参数:无
//***************************************/
void Timer1_Cmd(uint8_t en)
{
if(en == ENB)
{
TDR1 = 0 ; //计数器清0
TIMER1_IEN_ENB ; //定时器中断使能
TIMER1_CNT_ENB ; //定时器计数使能
}
else
{
TIMER1_IEN_DIS ; //定时器中断使能
TIMER1_CNT_DIS ; //定时器计数使能
}
}
//---实例应用-------
//定时器1初始化设置
Init_Timer1(TIMER0_DIV1,1500) ; //12M 共计125U
Timer1_Cmd(ENB) ;
|