You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
173 lines
4.6 KiB
173 lines
4.6 KiB
4 years ago
|
#include "time.h"
|
||
4 months ago
|
#include "../msp/uartx.h"
|
||
|
|
||
4 years ago
|
#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
|
||
4 months ago
|
{
|
||
|
U8 i = 0;
|
||
4 years ago
|
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服务
|
||
|
|
||
4 months ago
|
//串口回调
|
||
|
for(i=0; i< SERIAL_MAX_NUM; i++)
|
||
|
{
|
||
|
if(ts_uart[i].tp_handler != NULL)
|
||
|
{
|
||
|
ts_uart[i].tp_handler(ts_uart[i].uartx);
|
||
|
}
|
||
|
}
|
||
|
|
||
4 years ago
|
#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*********************************/
|
||
|
|
||
|
|
||
|
|
||
|
|