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.
210 lines
6.0 KiB
210 lines
6.0 KiB
/*****************************************************************************
|
|
* uart.h: Header file for NXP LPC17xx Family Microprocessors
|
|
*
|
|
* Copyright(C) 2017,SensorControl
|
|
* All rights reserved.
|
|
*
|
|
* History
|
|
* 2009.05.27 ver 1.00 Prelimnary version, first Release
|
|
*2017.01.10 ver 1.10 rename tick.h tick.c
|
|
******************************************************************************/
|
|
/*****************************************************
|
|
*============================================================================
|
|
* HISTORY
|
|
* Below this line, this part is controlled by TSTS. DO NOT MODIFY!!
|
|
伪时间片嵌入式平台(Task Step by Step Turn by Turn Structure,简称TSTS)
|
|
*============================================================================
|
|
****************************************************************************/
|
|
#ifndef __tick_H
|
|
#define __tick_H
|
|
#include "../clib/Type.h"
|
|
//#include "../bsp/type_hs.h"
|
|
#include "../msp/time.h"
|
|
#define D_use_tick_fum
|
|
|
|
|
|
struct _s_nos_tick_
|
|
{
|
|
vU32 tp_count; //最后一次接收数据时间到目前的tick数量
|
|
/// vU32 sys_clock;
|
|
// vU32 t_n; // noos系统定时器最小技术单元
|
|
vU32 t_10ms; // noos 系统定时器10m技术
|
|
#ifdef D_use_tick_fum
|
|
|
|
|
|
//volatile INT32U t_100ms;
|
|
vU32 t_1s;
|
|
/// vU32 t_10s;
|
|
// vU32 t_60s;
|
|
vU8 flag_1s;
|
|
vU8 flag_1s2;
|
|
/// volatile INT32U tmp;
|
|
/// volatile INT32U time_left;
|
|
/// volatile INT32U h;
|
|
/// volatile INT32U m;
|
|
vU32 n_stamp;
|
|
// vU32 t1s_flag[6]; //fixme: INT32U 根据不同的系统来决定
|
|
//volatile unsigned char t1s_flag;
|
|
/// vU8 ts_flag;
|
|
vU32 n_stamp3;
|
|
#endif
|
|
vU8 t1s_heatbeart; //noos 系统定时器整秒时刻标志,需要软件清除
|
|
};
|
|
extern struct _s_nos_tick_ s_nos_tick;
|
|
|
|
#ifdef D_timer0_10ms
|
|
//10ms 不能使用,10ms是最小颗粒时长,存在误差,无法使用
|
|
#define D_Tdelay_ms D_TIMER0_10MS_COUNT//D_TIMER0_10MS_COUNT
|
|
#define D_Tdelay_10ms 2
|
|
#define D_Tdelay_20ms (2+D_Tdelay_ms)
|
|
#define D_Tdelay_30ms (3+D_Tdelay_ms)
|
|
#define D_Tdelay_40ms (4+D_Tdelay_ms)
|
|
#define D_Tdelay_50ms (5+D_Tdelay_ms)
|
|
#define D_Tdelay_60ms (6+D_Tdelay_ms)
|
|
|
|
#define D_Tdelay_80ms (8+D_Tdelay_ms)
|
|
|
|
|
|
#define D_Tdelay_100ms (10+D_Tdelay_ms)
|
|
|
|
#else
|
|
//10ms 不能使用,10ms是最小颗粒时长,存在误差,无法使用
|
|
#define D_Tdelay_ms D_TIMER0_10MS_COUNT//D_TIMER0_10MS_COUNT
|
|
#define D_Tdelay_10ms 1
|
|
#define D_Tdelay_20ms (0+D_Tdelay_ms)
|
|
#define D_Tdelay_30ms (0+D_Tdelay_ms)
|
|
#define D_Tdelay_40ms (2+D_Tdelay_ms)
|
|
#define D_Tdelay_50ms (2+D_Tdelay_ms)
|
|
#define D_Tdelay_60ms (2+D_Tdelay_ms)
|
|
|
|
#define D_Tdelay_80ms (3+D_Tdelay_ms)
|
|
|
|
#define D_Tdelay_100ms (4+D_Tdelay_ms)
|
|
|
|
#endif
|
|
|
|
|
|
#define D_Tdelay_200ms (D_Tdelay_100ms*2)
|
|
#define D_Tdelay_300ms (D_Tdelay_100ms*3)
|
|
#define D_Tdelay_400ms (D_Tdelay_100ms*4)
|
|
#define D_Tdelay_500ms (D_Tdelay_100ms*5)
|
|
|
|
#define D_Tdelay_600ms (D_Tdelay_100ms*6)
|
|
#define D_Tdelay_700ms (D_Tdelay_100ms*7)
|
|
#define D_Tdelay_800ms (D_Tdelay_100ms*8)
|
|
#define D_Tdelay_900ms (D_Tdelay_100ms*9)
|
|
|
|
|
|
#define D_Tdelay_1s (D_Tdelay_100ms*10)
|
|
#define D_Tdelay_1s2 (D_Tdelay_100ms*12)
|
|
#define D_Tdelay_1s5 (D_Tdelay_100ms*15)
|
|
#define D_Tdelay_2s (D_Tdelay_100ms*20)
|
|
#define D_Tdelay_2s5 (D_Tdelay_100ms*25)
|
|
#define D_Tdelay_3s (D_Tdelay_100ms*30)
|
|
#define D_Tdelay_5s (D_Tdelay_100ms*50)
|
|
#define D_Tdelay_8s (D_Tdelay_100ms*80)
|
|
#define D_Tdelay_9s (D_Tdelay_100ms*90)
|
|
#define D_Tdelay_10s (D_Tdelay_100ms*100)
|
|
|
|
#define D_Tdelay_1min (D_Tdelay_1s*60)
|
|
#define D_Tdelay_1h (D_Tdelay_1min*60)
|
|
#define D_Tdelay_1day (D_Tdelay_1h*24)
|
|
#define D_TIMER0_1S_COUNT 100
|
|
//#define D_10mS 1//D_TIMER0_10MS_COUNT
|
|
//#define D_100mS (D_10mS*10)
|
|
//#define D_1S (D_10mS*100)
|
|
|
|
|
|
|
|
|
|
//>> 定时器: 初始化 间隔时间到
|
|
// L0_nos_tick10ms_start(s->times); 开始初始化s->times 以10ms为一个单位
|
|
// if( L0_nos_tick10ms_interval(s->times) < 20)// s->times 执行了20次后,也就是 定时20*10m到达
|
|
|
|
|
|
//必须配对
|
|
#define L0_nos_tick10ms_start(start_n) start_n = s_nos_tick.t_10ms
|
|
#define L0_nos_tick10ms_interval(start_n) (s_nos_tick.t_10ms - start_n)
|
|
|
|
|
|
|
|
#define L0_nos_tick1s_start(start_n) start_n = s_nos_tick.t_1s
|
|
#define L0_nos_tick1s_interval(start_n) (s_nos_tick.t_1s - start_n)
|
|
|
|
|
|
|
|
//>>>//必须配对
|
|
#define L2_tick_time_stamp(time_stamp) time_stamp = s_nos_tick.t_10ms;
|
|
#define L2_tick_time_interval(time_stamp,time_overflow) (( s_nos_tick.t_10ms - time_stamp) > time_overflow)
|
|
|
|
|
|
#define L3_tick_interval(x) L2_tick_time_interval(s_nos_tick.n_stamp,x)
|
|
#define L2_tick_stamp() L2_tick_time_stamp(s_nos_tick.n_stamp);
|
|
|
|
|
|
//>>>示例如下:
|
|
#if 0
|
|
{
|
|
case D_task_init://
|
|
Lc_print_buf(" \r\n YL_ init");
|
|
s->step = D_AT;
|
|
L0_esp_open();
|
|
L2_task_go(D_task_YL_ready);
|
|
s_uart0_rec.ok = 0;
|
|
L2_tick_time_stamp(s->t_stamp);
|
|
// L1_task_Tdelay(1*D_Tdelay_1s); //大约6s
|
|
break;
|
|
case D_task_YL_ready:
|
|
if(1 == s_uart0_rec.ok)
|
|
{
|
|
if(strstr(s_uart0_rec.array,"ready") != NULL)
|
|
{
|
|
|
|
Ldi_print("ready..\r\n");
|
|
s->step = D_AT;
|
|
L2_task_go(D_task_YL_ask);
|
|
}
|
|
s_uart0_rec.ok = 0;
|
|
}
|
|
if(L2_tick_time_stamp(s->t_stamp,1*D_Tdelay_1s))
|
|
{// 时间溢出
|
|
L0_esp_close();
|
|
Ldi_print("fail esp restart.\r\n");
|
|
L2_task_go(D_task_init);
|
|
L1_task_Tdelay(2*D_Tdelay_1s);
|
|
}
|
|
break;
|
|
}
|
|
#endif
|
|
|
|
// 他和t_10ms 关联,如果t_10ms递增为1时间隔为(D_TIMER0_10MS_COUNT*定时器间隔)
|
|
/// #define D_TIMER0_10MS_COUNT 1 //定时器为 10ms一中断
|
|
#ifdef D_use_tick_fum
|
|
extern void L1_tick_init(void);
|
|
extern void L1_tick_tick (void);
|
|
|
|
#else
|
|
|
|
|
|
#define L1_tick_init()
|
|
#define L1_tick_tick() s_nos_tick.t_10ms ++;
|
|
|
|
#endif
|
|
|
|
|
|
|
|
//L2_time_beat_heart(D_TBH_ch1,2,'t')
|
|
#define D_TBH_ch0 0
|
|
#define D_TBH_ch1 1
|
|
#define D_TBH_ch2 2
|
|
#define D_TBH_ch3 3
|
|
#define D_TBH_ch4 4
|
|
#define D_TBH_ch5 5
|
|
extern void L2_time_beat_heart(vU32 ch,U8 invent,U8 s);
|
|
//void L2_time_beat_heart_fun(INT32U ch,unsigned char invent,void *fun(void));
|
|
extern void L2_time_beat_heart_fun(vU32 ch,U8 invent,void (*fun)(void));
|
|
|
|
#endif /* end __tick_H */
|
|
/*****************************************************************************
|
|
** End Of File
|
|
******************************************************************************/
|
|
|