#include "Register_Bit.h" //包含位定义文件 #define TIMER0_ARR (uint32_t)70000 #define TIMER0_DIV1 (uint8_t)1 #define TIMER0_DIV3 (uint8_t)3 #define TIMER0_DIV4 (uint8_t)4 #define TIMER0_DIV5 (uint8_t)5 #define TIMER0_DIV10 (uint8_t)10 #define TIMER0_DIV12 (uint8_t)12 #define TIMER0_DIV50 (uint8_t)50 #define TIMER0_IEN_ENB TCSR0 |= (1<<29) //定时器中断使能 #define TIMER0_IEN_DIS TCSR0 &= ~(1<<29) //定时器中断使能 #define TIMER0_CNT_ENB TCSR0 |= (1<<30) //定时器计数使能 #define TIMER0_CNT_DIS TCSR0 &= ~(1<<30) //定时器计数使能 #define TIMER0_EXI_ENB TEXCON0 |= TEXI_EN //外部中断使能 #define TIMER0_EXI_DIS TEXCON0 &= ~TEXI_EN //************************************* // 函数名称:Init_timer0 // 函数功能:TIMER0初始化 // 入口参数:psc 分频系数 范围为1-255 Tcon 为计数个数 // 出口参数:无 //*************************************** void Init_Timer0(uint8_t psc,uint32_t Tcon) //SYSCLK = { /* Reset TMR0 IP 外设先复位再使能 */ IPRSTC2 |= TMR0_RST; IPRSTC2 &= ~TMR0_RST; /* Enable Timer0 clock source */ APBCLK |= TMR0_CLKEN; NVIC_ISER |= TMR0_INT; //开TIMER0中断 // NVIC_IPR2 |= (0<<0) ; //设置中断优先级为0 ->最高优先级 /* Select Timer0 clock source as external 12M */ CLKSEL1 = (CLKSEL1 & (~TM0_CLK)) | TM0_12M_32K; /* Reset the timer/counter0, after set, this bit will be clear by H/W */ // TCSR0 |= CRST; /* Pre-Scaler */ TCSR0 &= ~(0XFF) ; TCSR0 |= ((psc-1)<<0) ; //时钟分频 /* Enable TDR0 update. */ TCSR0 |= TDR_EN ; //更新TDR数据使能 TCSR0 &= ~(1<<24) ; //计数模式使能位 --不使能 TCSR0 |= (1<<27) ; //定时器设置为周期模式 TISR0 |= (1<<0) ; //中断状态标志清0 /* Timer0 interrupt enable */ // TCSR0 |= TMR_IE; TCMPR0 = Tcon ; //计数个数 TDR0 = 0 ; //计数器清0 /* Reset the timer/counter0, after set, this bit will be clear by H/W */ TCSR0 |= CRST; } //************************************* // 函数名称:Timer0_Cmd // 函数功能:TIMER0使能 // 入口参数:使能参数 // 出口参数:无 //*************************************** void Timer0_Cmd(uint8_t en) { if(en == ENB) { TDR0 = 0 ; //计数器清0 TIMER0_IEN_ENB ; //定时器中断使能 TIMER0_CNT_ENB ; //定时器计数使能 } else { TIMER0_IEN_DIS ; //定时器中断使能 TIMER0_CNT_DIS ; //定时器计数使能 } } //************************************* // 函数名称:Timer0_InputCap_Init // 函数功能:定时器0捕捉功能初始化 // 入口参数:无 // 出口参数:无 //*************************************** void Timer0_InputCap_Init(void) { /* Set P3.2 as timer0 external capture0 function */ P3_MFP = P3_MFP & (~P32_MFSEL) | P32_T0EX; /* // Set timer capture trigger-counting mode. TEXCON0 |= MODE_CAP_EN; */ //以下两位设置外部捕捉为 自由计数模式 TEXCON0 &= ~MODE_CAP_EN ; /* T0EX transition is used as timer capture function. */ TEXCON0 &= TMR_CAP; /* T0EX pin enable. */ TEXCON0 |= TEX_EN; /* Set falling edge on T0EX pin will be detected. */ TEXCON0 = TEXCON0 & (~TEX_EDGE) | TEX_EDGE_BOTH; //双边沿 /* Enable timer0 external capture pin de-bounce function. */ TEXCON0 |= TEXDB_EN; //使能外部引脚防反弹功能 /* DISEnable timer0 external capture interrupt */ TEXCON0 &= ~TEXI_EN; /* Reset timer0 counter */ TCSR0 |= CRST; /* Clear timer0 interrupt flag */ TEXISR0 |= TEX_IF; } //************************************* // 函数名称:Timer0_InputCap_Cmd // 函数功能:定时器0捕捉功能控制 // 入口参数:捕捉使能参数 // 出口参数:无 //*************************************** void Timer0_InputCap_Cmd(uint8_t en) { if(en == ENB) { TDR0 = 0 ; //计数器清0 TIMER0_EXI_ENB ; //外部中断使能 TIMER0_CNT_ENB ; //定时器计数使能 } else { TIMER0_EXI_DIS ; TIMER0_CNT_DIS ; //定时器计数使能 } } //----实例应用 初始化设置------ //定时器应用初始化 // Init_Timer0(TIMER0_DIV4,375) ; //12M/4=3M 共计125U // Timer0_Cmd(ENB) ; //定时器捕捉功能初始化 Init_Timer0(TIMER0_DIV4,TIMER0_ARR) ; //12M/4=3M Timer0_InputCap_Init() ; //输入捕捉初始化 Timer0_InputCap_Cmd(ENB) ; //捕捉使能
举报
本版积分规则 发表回复 回帖并转播 回帖后跳转到最后一页
36
363
1
扫码关注 21ic 官方微信
扫码关注嵌入式微处理器
扫码关注电源系统设计
扫码关注21ic项目外包
扫码浏览21ic手机版
本站介绍 | 申请友情链接 | 欢迎投稿 | 隐私声明 | 广告业务 | 网站地图 | 联系我们 | 诚聘英才
京公网安备 11010802024343号