/*********************************************************************************************************** 测试tim2定时器: 说明: *1.系统主频为FRC/2.波形输出引脚:P10 *3.定时模式, 16位定时器定时1ms,中断一次 ***********************************************************************************************************/ #include #include "TM52F1386_bsp.h" #include #include "time2.h" #include "GLOBAL.h" #include "gpio_ctrl.h" #define FRC_HZ 18432000 #define FRC_DIV 2 #define CLK_US 1000 // 1ms #define TIME2_RELOAD (unsigned int)(65536 - (((FRC_HZ / FRC_DIV) / 2 / 1000) * CLK_US / 1000)) // 精度更高 /********************************************************************************************************** **函数名称 :tim2_init **函数描述 :定时器初始化 **输 入 :None **输 出 :None **********************************************************************************************************/ void tim2_init(void) { CT2N = 0; // 定时器模式 CPRL2N = 0; // 重载模式 TH2 = (TIME2_RELOAD) / 256; TL2 = (TIME2_RELOAD) % 256; RCP2H = (TIME2_RELOAD) / 256; RCP2L = (TIME2_RELOAD) % 256; TR2 = 1; ET2 = 1; } /****************************************************************************************** ** 函数名称: time2_irq ** 函数描述: time2中断处理函数 ** 输入参数: 无 ** 输出参数: 无 *******************************************************************************************/ void time2_irq() interrupt 5 { int i=0; if (TF2) { TF2 = 0; // 除了用作串口的时基外,其他应用必须清零 // key_led_ctl(); // if (++sysTickfor10ms >= 10) // 10ms { for(i=0;i<6;i++) { ledTimer[i].ticket++;//1ms控制按键背光灯,PWM基准周期1ms } sysTickfor10ms = 0; sys10msFlag = 1; tickcount++; switchState.buttonPressTime++; // 长按键计数器 ledTimerAll.ticket++; // 背光闪烁用 } } }