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.
233 lines
7.3 KiB
233 lines
7.3 KiB
/*****************************************************************************
|
|
* uart.h: Header file for NXP LPC17xx Family Microprocessors
|
|
*
|
|
* Copyright (c) 2023 CCSENS
|
|
* All rights reserved.
|
|
*
|
|
* History
|
|
* 2009.05.27 ver 1.00 Prelimnary version, first Release
|
|
*2017.01.10 ver 1.10 rename TTSS_tick.h tick.c
|
|
*2021.12.12 ver 2.10 detail
|
|
*2022.02.15 ver 2.20 stm32 version
|
|
******************************************************************************/
|
|
/*****************************************************
|
|
*============================================================================
|
|
* 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 "bsp_config.h"
|
|
#define D_use_tick_fum
|
|
|
|
|
|
typedef struct
|
|
{
|
|
vU32 jiffies; // noos系统定时器最小技术单元
|
|
vU32 t_1s;
|
|
vU32 stamp;
|
|
vU8 t1s_heartbeat; //noos 系统定时器整秒时刻标志,需要软件清除
|
|
vtype print_heartbeat;
|
|
void (*uart1_overtime_callback)(void);///需要哪个注册哪个 必备步骤1(method step 1)
|
|
void (*uart2_overtime_callback)(void);///需要哪个注册哪个 必备步骤1(method step 1)
|
|
void (*uart3_overtime_callback)(void);///需要哪个注册哪个 必备步骤1(method step 1)
|
|
void (*uart4_overtime_callback)(void);///需要哪个注册哪个 必备步骤1(method step 1)
|
|
|
|
|
|
///vtype (*uart3_ overtime_fun)(void);///需要哪个注册哪个 必备步骤1(method step 1)
|
|
///vtype (*uart4_ overtime_fun)(void);///需要哪个注册哪个 必备步骤1(method step 1)
|
|
}TS_nos_tick_;
|
|
extern TS_nos_tick_ s_nos_tick;
|
|
|
|
#if(TYPE_JIFFIES_5MS == D_sys_Jiffies)
|
|
#define HZ 200L
|
|
#elif(TYPE_JIFFIES_10MS == D_sys_Jiffies)
|
|
#define HZ 100L
|
|
#elif(TYPE_JIFFIES_12MS == D_sys_Jiffies)
|
|
#define HZ 80L
|
|
#elif(TYPE_JIFFIES_25MS == D_sys_Jiffies)
|
|
#define HZ 50L
|
|
#endif
|
|
#define JIFFIES (1000L/HZ)
|
|
|
|
#define D_sys_now (s_nos_tick.jiffies)
|
|
//D_sys_delay_msec以jiffies为最小计时单位,jiffies是10ms为例,参数n=12ms时,最终延时了20ms
|
|
#define D_sys_delay_msec(n) do{ \
|
|
if(n>0) \
|
|
{ \
|
|
U32 mstmp = D_sys_now; \
|
|
while(D_sys_now - mstmp < (((n)-1)/JIFFIES) + 1); \
|
|
} \
|
|
}while(0)
|
|
|
|
|
|
///12.5ms 1000/12.5 = 80
|
|
#define D_Tdelay_Msec(n) (((n)-1) / JIFFIES + 1)
|
|
#define D_Tdelay_Sec(n) (((n)*1000-1) /JIFFIES + 1)
|
|
#define D_Tdelay_5ms ((5-1) / JIFFIES + 1)
|
|
#define D_Tdelay_10ms ((10-1) / JIFFIES + 1)
|
|
#define D_Tdelay_20ms ((20-1) / JIFFIES + 1)
|
|
#define D_Tdelay_30ms ((30-1) / JIFFIES + 1)
|
|
#define D_Tdelay_40ms ((40-1) / JIFFIES + 1)
|
|
#define D_Tdelay_50ms ((50-1) / JIFFIES + 1)
|
|
|
|
#define D_Tdelay_100ms ((100-1) / JIFFIES + 1)
|
|
#define D_Tdelay_200ms ((200-1) / JIFFIES+ 1)
|
|
#define D_Tdelay_300ms ((300-1) / JIFFIES + 1)
|
|
#define D_Tdelay_400ms ((400-1) / JIFFIES + 1)
|
|
#define D_Tdelay_500ms ((500-1) / JIFFIES + 1)
|
|
|
|
#define D_Tdelay_1s (1L * HZ)
|
|
#define D_Tdelay_2s (2L * HZ)
|
|
#define D_Tdelay_3s (3L * HZ)
|
|
#define D_Tdelay_4s (4L * HZ)
|
|
#define D_Tdelay_5s (5L * HZ)
|
|
#define D_Tdelay_10s (10L * HZ)
|
|
#define D_Tdelay_15s (15L * HZ)
|
|
#define D_Tdelay_30s (30L * HZ)
|
|
|
|
#define D_Tdelay_1min (1 * 60 * HZ)
|
|
#define D_Tdelay_3min (3 * 60 * HZ)
|
|
#define D_Tdelay_10min (10 * 60 * HZ)
|
|
#define D_Tdelay_1h (60 * 60 * HZ)
|
|
#define D_Tdelay_1day (24 * 60 * 60 * HZ)
|
|
|
|
#define D_COUNT_JIFFIES(N) ((N - 1) / JIFFIES + 1)
|
|
|
|
|
|
|
|
|
|
#if (D_CPUfamily_32bits == D_CPUfamily_type)
|
|
|
|
#define TTSS_GetTick() HAL_GetTick()
|
|
#define TTSS_GetTick_1s() HAL_GetTick1S()///fixme
|
|
#else
|
|
|
|
#define TTSS_GetTick() (s_nos_tick.jiffies)
|
|
#define TTSS_GetTick_1s() (s_nos_tick.t_1s)
|
|
#endif
|
|
|
|
|
|
//>> 定时器: 初始化 间隔时间到
|
|
// L0_nos_tick10ms_start(s->times); 开始初始化s->times 以10ms为一个单位
|
|
// if( L0_nos_tick10ms_interval(s->times) < 20)// s->times 执行了20次后,也就是 定时20*10m到达
|
|
|
|
////使用是必须常数 + L 例如100L
|
|
|
|
//必须配对
|
|
#define L0_nos_tick10ms_start(start_n) start_n = TTSS_GetTick()
|
|
#define L0_nos_tick10ms_interval(start_n) (TTSS_GetTick() - start_n)
|
|
|
|
|
|
|
|
#define L0_nos_tick1s_start(start_n) start_n = HAL_GetTick1S()
|
|
#define L0_nos_tick1s_interval(start_n) (HAL_GetTick1S() - start_n)
|
|
|
|
#define L2_tick_time_space(times) (0 == (TTSS_GetTick()%times))////有bug 如果循环的间隔小于tick间隔,会重复执行
|
|
|
|
|
|
|
|
//>>>//必须配对
|
|
#define L2_tick_time_stamp(time_stamp) time_stamp = TTSS_GetTick();
|
|
#define L2_tick_time_interval(time_stamp,time_overflow) (( TTSS_GetTick() - time_stamp) > time_overflow)
|
|
|
|
|
|
|
|
////#define L3_tick_interval(x) L2_tick_time_interval(s_nos_tick.n_stamp,(U32)x)
|
|
///#define L3_tick_interval(x) (( TTSS_GetTick() - s_nos_tick.n_stamp) > x)////L2_tick_time_interval(s_nos_tick.n_stamp,(U32)x)
|
|
#define L2_tick_stamp() L2_tick_time_stamp(s_nos_tick.n_stamp);
|
|
|
|
|
|
#define L3_tick_interval(x) L2_tick_time_interval(s_nos_tick.n_stamp,x)////x的后面必须添加L,使用(u32)(vu32)均不可
|
|
|
|
|
|
#define D_print_heartbeat_nexttimes(); s_nos_tick.print_heartbeat = 1;//下一次再打印心跳
|
|
#define D_print_heartbeat_close(); s_nos_tick.print_heartbeat = 0;//停止打印心跳
|
|
#define D_print_heartbeat_ok() (1 == s_nos_tick.print_heartbeat)//允许打印心跳
|
|
#define D_print_heartbeat_disable() (0 == s_nos_tick.print_heartbeat)//允许打印心跳
|
|
|
|
#define D_print_heartbeat() \
|
|
if(D_print_heartbeat_disable()){\
|
|
D_print_heartbeat_nexttimes();\
|
|
}else
|
|
|
|
|
|
|
|
|
|
////L3_tick_interval(x)///计时时间到
|
|
|
|
////L2_tick_stamp() ///时间清零
|
|
|
|
//>>>示例如下:
|
|
#if 0
|
|
|
|
if(L3_tick_interval(10))
|
|
{
|
|
L2_tick_stamp();
|
|
}
|
|
{
|
|
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_task_tick_init(void);
|
|
extern void L1_task_tick_callback (void);
|
|
|
|
#else
|
|
|
|
|
|
#define L1_task_tick_init()
|
|
#define L1_task_tick_callback() 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
|
|
******************************************************************************/
|
|
|