#include "time.h" #include "../msp/uartx.h" #include "../bsp/bsp_btn.h" #define D_TIMER_COUNT(t,clk,timeInUs) (U16)(65536 - 1.0 * (clk) / 1000 * (1.0 * timeInUs / 1000) / t) //#define D_TIMER_COUNT(t,clk,timeInUs) (U16)(65536 - (clk) / 1000 * timeInUs / 1000 / t) /*************初始化定时器0由 stc-isp v6.86L定时器计算器生成******************/ void L0_timer0_Init(void) { U16 val = D_TIMER_COUNT(12,D_sys_MainFre,D_sys_Jiffies * 1000); AUXR &= 0x7F; //定时器时钟12T模式 TMOD &= 0xF0; //设置定时器模式 //TL0 = 0x00; //设置定时初值 //TH0 = 0x4C; //设置定时初值 TL0 = val; //设置定时初值 TH0 = val >> 8; //设置定时初值 TF0 = 0; //清除TF0标志 TR0 = 1; //定时器0开始计时 ET0 = 1; //add by cc } //10---87 10s /********************** Timer0中断函数************************/ /// 和 L0_timer0_Init 关联,需要配置 bsp_config.h中的 D_sys_MainFre /// 默认10ms 作为TTSS系统的定时引擎 void timer0_isrHandle (void) D_SERVE_TIMER0 { U8 i = 0; NOP(); NOP(); NOP(); TF0 = 0; #if 0 /// 65535*65535 /3600/24/365=139nian/s=1.39nian/10ms ///相当于1.39年后t_10ms 溢出,对于电池供电的系统而言 完全可以满足 // 4,294,836,225 = 65535*65535 ;3600*24*60*60 = 31,536,000秒/年 s_nos_tick.t_10ms ++;//D_led_D1_REV(); 20160522 验证 #else L1_tick_tick(); ///系统中的1sflag 和以10ms为颗粒的延时使用 为tdelay服务 Key_Scan(); //串口回调 for(i = 0; i < SERIAL_MAX_NUM; i++) { if(ts_uart[i].tp_handler != NULL) { ts_uart[i].tp_handler(ts_uart[i].uartx); } } #endif /// BITN_1(DR_who_wakeup, DRB_who_wakeup_timer0); NOP(); NOP(); NOP(); } void L0_timer1_Init() //600微秒@11.0592MHz { #if 0 AUXR |= 0x40; //定时器时钟1T模式 TMOD &= 0x0F; //设置定时器模式 TL1 = 0x14; //设置定时初值 TH1 = 0xE6; //设置定时初值 TF1 = 0; //清除TF1标志 TR1 = 1; //定时器1开始计时 ET1 = 1; //add by cc #else U16 val = D_TIMER_COUNT(1,D_sys_MainFre,600); AUXR |= 0x40; //定时器时钟1T模式 TMOD &= 0x0F; //设置定时器模式 //TL1 = 0xCD; //设置定时初始值 //TH1 = 0xD4; //设置定时初始值 TL1 = val; //设置定时初值 TH1 = val >>8; //设置定时初值 TF1 = 0; //清除TF1标志 TR1 = 1; //定时器1开始计时 ET1 = 1; //add by cc #endif } //#define D_modbus_ot 6000 //#define D_modbus_ot 600 void L0_timer1_restart() //600微秒 { U16 val = D_TIMER_COUNT(1,D_sys_MainFre,600); TR1 = 0; //先关闭,否则会重复中断,起不到resetart效果 #if 1 AUXR |= 0x40; //定时器时钟1T模式 TMOD &= 0x0F; //设置定时器模式 //TL1 = 0x14; //设置定时初值 //TH1 = 0xE6; //设置定时初值 TL1 = val; //设置定时初值 TH1 = val >>8; //设置定时初值 TF1 = 0; //清除TF1标志 TR1 = 1; //定时器1开始计时,每隔1ms加1 ET1 = 1; //add by cc 打开定时器中断 #else AUXR |= 0x40; //定时器时钟1T模式 TMOD &= 0x0F; //设置定时器模式 TL1 = 0xCD; //设置定时初始值 TH1 = 0xD4; //设置定时初始值 TF1 = 0; //清除TF1标志 TR1 = 1; //定时器1开始计时 ET1 = 1; //add by cc #endif // TR1 = 0; // AUXR &= 0xBF; //定时器时钟12T模式 //5ms // TMOD &= 0x0F; //设置定时器模式 // TL1 = 0x00; //设置定时初始值 // TH1 = 0xDC; //设置定时初始值 // TF1 = 0; //清除TF1标志 // TR1 = 1; //定时器1开始计时 // ET1 = 1; //add by cc } void L0_timer1_stop(void) { TR1 = 0; TF1 = 0; } void L0_timer3_restart() //600@22MHz { // LED0 ^= 1; // T4T3M = 0x00; // T4T3M = 0xDD; //定时器时钟12T模式 // T3L = 0x00; //设置定时初始值 // T3H = 0x94; //设置定时初始值 // AUXINTIF&=~T3IF; // T4T3M =0x08; //定时器3开始计时 // IE2=ET3; T4T3M &= ~(0x08); //定时器3停止 T4T3M &= 0xFD; //定时器时钟12T模式 T3L = 0xAE; //设置定时初值 T3H = 0xFB; //设置定时初值 T4T3M |= 0x08; //定时器3开始开始 IE2 |= ET3; //开启定时器3中断 } void L0_timer3_stop(void) { //LED0 ^= 1; // T4T3M = 0xD1; // AUXINTIF&=~T3IF; T4T3M &= ~(0x08); } void L0_timer4_start(void) //600微 { // U16 val = D_TIMER_COUNT(12,D_sys_MainFre,1); T4T3M &= ~(0x80); //定时器4停止 T4T3M &= 0xDF; //定时器时钟12T模式 T4L = 0xAE; //设置定时初值 T4H = 0xFB; //设置定时初值 // T4L = val; //设置定时初值 // T4H = val >> 8; //设置定时初值 T4T3M |= 0x80; //定时器4开始计时 IE2 |= ET4; //开启定时器4中断 } void L0_timer4_stop(void) //1ms { T4T3M &= ~(0x80); //定时器4停止 } /******************************END*********************************/