diff --git a/keilp/cc_as_stc02_ps5ws.uvprojx b/keilp/cc_as_stc02_ps5ws.uvprojx
index b131346..69341ff 100644
--- a/keilp/cc_as_stc02_ps5ws.uvprojx
+++ b/keilp/cc_as_stc02_ps5ws.uvprojx
@@ -387,6 +387,11 @@
1
..\source\bsp\w600.c
+
+ bsp_oid.c
+ 1
+ ..\source\bsp\bsp_oid.c
+
@@ -403,19 +408,24 @@
..\source\msp\eeprom.c
- uart_x.c
+ msp_uart2.C
1
- ..\source\msp\uart_x.c
+ ..\source\msp\msp_uart2.C
- uart0.c
+ msp_uart0.C
1
- ..\source\msp\uart0.c
+ ..\source\msp\msp_uart0.C
- uart2.c
+ msp_uart_x.c
1
- ..\source\msp\uart2.c
+ ..\source\msp\msp_uart_x.c
+
+
+ msp_uart3.c
+ 1
+ ..\source\msp\nouse\msp_uart3.c
@@ -474,6 +484,16 @@
+
+ asp
+
+
+ asp_oid.c
+ 1
+ ..\source\asp\asp_oid.c
+
+
+
diff --git a/si4/ps5ws.si4project/soft_ps5ws.sip_sym b/si4/ps5ws.si4project/soft_ps5ws.sip_sym
index bd5b0ed..606a81c 100644
Binary files a/si4/ps5ws.si4project/soft_ps5ws.sip_sym and b/si4/ps5ws.si4project/soft_ps5ws.sip_sym differ
diff --git a/si4/ps5ws.si4project/soft_ps5ws.sip_xab b/si4/ps5ws.si4project/soft_ps5ws.sip_xab
index 7f04d0b..cf2857c 100644
Binary files a/si4/ps5ws.si4project/soft_ps5ws.sip_xab and b/si4/ps5ws.si4project/soft_ps5ws.sip_xab differ
diff --git a/si4/ps5ws.si4project/soft_ps5ws.sip_xad b/si4/ps5ws.si4project/soft_ps5ws.sip_xad
index 7b602f6..b7cef3c 100644
Binary files a/si4/ps5ws.si4project/soft_ps5ws.sip_xad and b/si4/ps5ws.si4project/soft_ps5ws.sip_xad differ
diff --git a/si4/ps5ws.si4project/soft_ps5ws.sip_xc b/si4/ps5ws.si4project/soft_ps5ws.sip_xc
index b9d5911..763fdeb 100644
Binary files a/si4/ps5ws.si4project/soft_ps5ws.sip_xc and b/si4/ps5ws.si4project/soft_ps5ws.sip_xc differ
diff --git a/si4/ps5ws.si4project/soft_ps5ws.sip_xf b/si4/ps5ws.si4project/soft_ps5ws.sip_xf
index 5139dad..c8f5940 100644
Binary files a/si4/ps5ws.si4project/soft_ps5ws.sip_xf and b/si4/ps5ws.si4project/soft_ps5ws.sip_xf differ
diff --git a/si4/ps5ws.si4project/soft_ps5ws.sip_xm b/si4/ps5ws.si4project/soft_ps5ws.sip_xm
index 53c354e..87a6aa3 100644
Binary files a/si4/ps5ws.si4project/soft_ps5ws.sip_xm and b/si4/ps5ws.si4project/soft_ps5ws.sip_xm differ
diff --git a/si4/ps5ws.si4project/soft_ps5ws.sip_xr b/si4/ps5ws.si4project/soft_ps5ws.sip_xr
index fecb06f..37940e2 100644
Binary files a/si4/ps5ws.si4project/soft_ps5ws.sip_xr and b/si4/ps5ws.si4project/soft_ps5ws.sip_xr differ
diff --git a/si4/ps5ws.si4project/soft_ps5ws.sip_xsb b/si4/ps5ws.si4project/soft_ps5ws.sip_xsb
index e7394d4..8e6dd37 100644
Binary files a/si4/ps5ws.si4project/soft_ps5ws.sip_xsb and b/si4/ps5ws.si4project/soft_ps5ws.sip_xsb differ
diff --git a/si4/ps5ws.si4project/soft_ps5ws.sip_xsd b/si4/ps5ws.si4project/soft_ps5ws.sip_xsd
index bef1f5c..2dd9b56 100644
Binary files a/si4/ps5ws.si4project/soft_ps5ws.sip_xsd and b/si4/ps5ws.si4project/soft_ps5ws.sip_xsd differ
diff --git a/si4/ps5ws.si4project/soft_ps5ws.siproj b/si4/ps5ws.si4project/soft_ps5ws.siproj
index 5d040f0..4878576 100644
Binary files a/si4/ps5ws.si4project/soft_ps5ws.siproj and b/si4/ps5ws.si4project/soft_ps5ws.siproj differ
diff --git a/source/app/app_config.c b/source/app/app_config.c
index b7c64be..d6264ec 100644
--- a/source/app/app_config.c
+++ b/source/app/app_config.c
@@ -1,5 +1,5 @@
#include "app_config.h"
-#include "../bsp/cs1232.h"
+///#include "../bsp/cs1232.h"
#include "../bsp/chipid.h"
#include "../msp/eeprom.h"
#include "../clib/clib.h"
@@ -12,7 +12,7 @@ WR_Buf wr_buf;
void L3_param_init(void)
{
- U8 i;
+ //U8 i;
G.debug = 1;
//station模式状态
G.st_status = 0; //0:none 1:wifi_ok 2:tcp_connect_ok
@@ -26,13 +26,15 @@ void L3_param_init(void)
Lc_strcpy(G.ap_sid,"cc_pen_ap");
//ap模式pwd
Lc_strcpy(G.ap_pwd,"ccsens123");
-
- wr_buf.wIndex = wr_buf.rIndex = 0;
+
+ #if 0
+ wr_buf.wIndex = wr_buf.rIndex = 0;
wr_buf.maxsize = sizeof(wr_buf.buf)/sizeof(PenPoint);
for(i=0;irIndex+1)%(p->maxsize) == p->wIndex)
@@ -183,6 +195,7 @@ U16 Lc_write_cyc_buf(PenPoint *wbuf ,WR_Buf *wp ,U16 wlen)
else
{
//L0_uart0_sendstr("X");
+ wp->full = 1;
return 0;
}
@@ -208,7 +221,8 @@ U16 Lc_read_cyc_buf(PenPoint *rbuf ,WR_Buf *rp ,U16 rlen)
}
else
{
+ rp->null = 1;
return 0;
}
}
-
+#endif
diff --git a/source/app/app_config.h b/source/app/app_config.h
index beb6e7a..a667af1 100644
--- a/source/app/app_config.h
+++ b/source/app/app_config.h
@@ -5,6 +5,7 @@
#include "../bsp/bsp_config.h"
#include "../tpc/ccmodbus.h"
#include "../tpc/modbus.h"
+//#include "../asp/asp_oid.h"
#define APP_VERSION 0x10
@@ -13,7 +14,7 @@
#define D_COUNT_WEIGHT(adc) (U32)((adc) / D_ADS1213_GAIN_VAL / R.p.lmd * R.p.weight_max * 1000 / (2 * 0x7FFFFF / 1000 ))
#define D_COUNT_ADC(wInG) (U32)((wInG) * D_ADS1213_GAIN_VAL * R.p.lmd * (2 * 0x7FFFFF / 1000) / R.p.weight_max / 1000)
-#define POINT_LEN 48
+
//STEP 1 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>Register CONFIG
@@ -22,12 +23,13 @@
//#define D_blur_threshold_2_1(threshold) (U32) ( 1.0 * threshold *(2 * 0x7FFFFF / 1000 * D_ADS1213_GAIN_VAL * R.p.lmd) / (1000.0 * R.p.weight_max ))
-#define CCMD_SLAVER_INFO_MAX 3
+#define CCMD_SLAVER_INFO_MAX 2
typedef struct pen_point
{
U16 x_axis;//横坐标
U16 y_axis;//纵坐标
U32 time;//时间
+ U16 angle;//角度
}PenPoint;
typedef struct global_register
{
@@ -41,10 +43,10 @@ typedef struct global_register
U16 null[25];
- U16 pack_order;//包序号
- U16 frame_order;//帧序号
- U16 pack_mask;//包标志
- PenPoint points[POINT_LEN];
+ //U16 pack_order;//包序号
+ //U16 frame_order;//帧序号
+ //U16 pack_mask;//包标志
+ //Ts_OID_frame_xy_ points[POINT_LEN];
}GlobalRegister;
extern GlobalRegister R;
@@ -86,12 +88,17 @@ typedef struct global_param
vU32 modbusstmp;
U16 authed;
U16 flowStartVal;
- U16 datapack;
U8 mcu_id[7];
U8 pen_up;
-
- CCMD_SLAVER_INFO ccmd_slaver_info[CCMD_SLAVER_INFO_MAX];
+ U8 pen_down;
+ U8 pen_hold;
+ U8 pen_end;
+ U8 pen_t;
+ U8 oid_p;
+ U8 oid_x;
+ U8 datapkg;
+ CCMD_SLAVER_INFO ccmd_slaver_info[CCMD_SLAVER_INFO_MAX];///16*3
}GlobalParam;
extern GlobalParam G;
@@ -99,12 +106,14 @@ extern GlobalParam G;
typedef struct
{
vU8 rIndex;//读标志
+ vU8 Index;//读标志
vU8 wIndex;//写标志
vU8 full;//缓冲区满标志位
+ vU8 null;//缓冲区空标志位
vU8 maxsize;//数组最大长度
vU8 readdr;//缓冲区读写结束新地址
vU8 relen;//从缓冲区头开始的新长度
- PenPoint buf[POINT_LEN * 2];
+ //PenPoint buf[POINT_LEN+6];//8*48*2
}WR_Buf;
extern WR_Buf wr_buf;
extern void L3_param_init(void);
diff --git a/source/app/app_task_speech.c b/source/app/app_task_speech.c
new file mode 100644
index 0000000..04c4b18
--- /dev/null
+++ b/source/app/app_task_speech.c
@@ -0,0 +1,55 @@
+#include "app_task_speech.h"
+#define START_CODE 0x7E
+#define END_CODE 0xEF
+TS_TASK_SPEECH ts_speech;
+
+void L3_task_speech_init(void)
+{
+ U8 i;
+ L1_task_init(&ts_speech.task);
+ L3_task_s_go(ts_speech,D_task_init);
+ for(i=0;istart = START_CODE;
+ pspeech->num = 0x07;
+ pspeech->oper = SPEECH_NAME_PLAY;
+ pspeech->title = 0x43;
+ name = hexToDec(&tcp_buf);
+ tcp_buf[0] = (int)(name/100);
+ tcp_buf[1] = (int)((name%100)/10);
+ tcp_buf[2] = (int)(name%10);
+ Lc_hex2ascii(&tcp_buf,&pspeech->buf,3);
+ pspeech->crc = (pspeech->num + pspeech->oper + pspeech->buf[0] + pspeech->buf[1] + pspeech->buf[2] + pspeech->buf[3])>> 0 & 0xFF//累加和校验
+ pspeech->end = END_CODE;
+
+ return bufsize;
+}
+U8 L3_pack_ccmodbus(TS_SPEECH *pspeech , CC_SPEECH_INFO *speech_info)
+{
+ U16 pkglen = 0;
+ switch(speech_info->oper)
+ {
+ case SPEECH_NAME_PLAY:
+ pkglen = L3_pack_ccmodbus_03(pspeech,tcp_buf,speech_info->buf);
+ break;
+ default:
+ break;
+ }
+ pccmodbus->num = pkglen;
+ return pkglen + 3;
+}
+
diff --git a/source/app/app_task_speech.h b/source/app/app_task_speech.h
new file mode 100644
index 0000000..db8dab6
--- /dev/null
+++ b/source/app/app_task_speech.h
@@ -0,0 +1,47 @@
+#ifndef _APP_TASK_SPEECH_H
+#define _APP_TASK_SPEECH_H
+#define CC_SPEECH_INFO_MAX 1
+#define D_s_TS_speech_max 32
+
+enum SPEECH_OPER
+{
+ SPEECH_NAME_PLAY 0xA3;
+};
+
+typedef struct
+{
+ vU8 start;
+ vU8 num;
+ vU8 oper;
+ vU8 title;
+ vU8 buf[D_s_TS_speech_max - 3];
+ vU8 crc;
+ vU8 end;
+}TS_SPEECH;
+
+typedef struct
+{
+ U16 slaver;
+ U16 oper;
+ U16 reg;
+ U16 regnum;
+ U16 bytes;
+ U8 *buf;
+ U16 mask;
+}CC_SPEECH_INFO;
+
+typedef struct
+{
+ TS_task task;
+ U16 slaverIndex;
+ U16 pkglen;
+ CC_SPEECH_INFO cc_speech_info[CC_SPEECH_INFO_MAX];
+}TS_TASK_SPEECH;
+
+extern TS_TASK_SPEECH ts_speech;
+
+
+
+
+#endif
+
diff --git a/source/app/app_task_tcp.c b/source/app/app_task_tcp.c
index 9e8c5db..183420c 100644
--- a/source/app/app_task_tcp.c
+++ b/source/app/app_task_tcp.c
@@ -1,12 +1,10 @@
#include "app_task_tcp.h"
-#include "../msp/uart0.h"
-#include "../msp/uart2.h"
+#include "../msp/msp_uart0.h"
+#include "../msp/msp_uart2.h"
#include "../app/task_w600.h"
#include "../app/app_config.h"
-#define MODBUS_SLAVER_DW20_REG_START 0x02
-#define MODBUS_SLAVER_DW20_REG_NUM 0x02
-#define MODBUS_SLAVER_RETRY_MAX_TIME 1
+
TS_tcp ts_tcp;
@@ -28,8 +26,7 @@ void L3_task_tcp_init(void)
void L3_task_tcp_handle(TS_tcp *s)
{
TTSS_Task_init()
- L2_task_go(D_task_tcp_constructor_modbus_pkg);
-
+ L2_task_go(D_task_tcp_constructor_modbus_pkg);
TTSS_Task_step(D_task_tcp_constructor_modbus_pkg) //构造包
if(G.ccmd_slaver_info[s->slaverIndex].mask > 0)
{
@@ -44,74 +41,68 @@ void L3_task_tcp_handle(TS_tcp *s)
}
TTSS_Task_step(D_task_tcp_send_modbus_pkg) //发送包
- L3_gm35_send_data((U8*)&s->loopPkg,s->pkglen);
- s->sendStamp = s_nos_tick.t_1s;
if(G.ccmd_slaver_info[s->slaverIndex].mask == 1)
{
G.ccmd_slaver_info[s->slaverIndex].mask = 0;
+ L3_gm35_send_data((U8*)&s->loopPkg,s->pkglen);
+ //L0_uart2_sendArray((U8*)&s->loopPkg,s->pkglen);
+ //L0_uart2_sendArray((U8 *)&points,ts_task_oid.extra);
+ s->sendStamp = s_nos_tick.t_1s;
+ L2_task_go(D_task_tcp_wait_modbus_ack);
}
- L2_task_go(D_task_tcp_wait_modbus_ack);
+
TTSS_Task_step(D_task_tcp_wait_modbus_ack) //等待ack
- //L0_uart0_uc(s_uart2_tcp_rec.ok + '0');
- if(s_uart2_tcp_rec.ok)
+ if((s->slaverIndex) == 0)
{
- s_uart2_tcp_rec.ok = 0;
- s_task_gm35_flow.tcp_last_recv_stmp = s_nos_tick.t_1s;
- s->pAckPkg = (TS_PH3_ccmodbus*)(s_uart2_tcp_rec.sp);
- L3_gm35_rcv_data((U8*)s->pAckPkg,s->pAckPkg->num);
- if(s->pAckPkg->slaver == G.ccmd_slaver_info[s->slaverIndex].slaver)
+ if(s_uart2_tcp_rec.ok)
{
- s->ackFlag = 1;
-
- switch(s->slaverIndex)
+ s_uart2_tcp_rec.ok = 0;
+ s_task_gm35_flow.tcp_last_recv_stmp = s_nos_tick.t_1s;
+ s->pAckPkg = (TS_PH3_ccmodbus*)(s_uart2_tcp_rec.sp);
+ //L3_gm35_rcv_data((U8*)s->pAckPkg,s->pAckPkg->num);
+ if(s->pAckPkg->slaver == G.ccmd_slaver_info[s->slaverIndex].slaver)
{
- case 0://如果oper == 90:成功,91 == 不成功
- switch(G.ccmd_slaver_info[s->slaverIndex].oper)
- {
- case 0x90:
- //L0_uart0_sendstr("11111");
- G.authed = 1;
- break;
- case 0x91:
- G.authed = 0;
- break;
- }
- #if 0
- if(G.ccmd_slaver_info[s->slaverIndex].oper == 0x90)
+ s->ackFlag = 1;
+
+ switch(s->slaverIndex)
{
- L0_uart0_sendstr("111");
- G.authed = 1;
- G.au_succ = 1;
- }
- else
- {
- L0_uart0_sendstr("222");
- G.authed = 0;
- G.au_fail = 1;
+ case 0://如果oper == 90:成功,91 == 不成功
+ switch(G.ccmd_slaver_info[s->slaverIndex].oper)
+ {
+ case 0x90:
+ //L0_uart0_sendstr("11111");
+ G.authed = 1;
+ break;
+ case 0x91:
+ G.authed = 0;
+ break;
+ }
+ break;
+ case 1:
+ break;
+ default:
+ break;
}
- #endif
- break;
- case 2:
- break;
- default:
- break;
}
- }
-
- L2_task_go(D_task_tcp_switch_next_slaver);
- }
- else if(s_nos_tick.t_1s - s->sendStamp >= 5) //重发
- {
- if(++s->retryTimes < 3)
- {
- L2_task_go(D_task_tcp_send_modbus_pkg);
- }
- else
- {
L2_task_go(D_task_tcp_switch_next_slaver);
}
+ else if(s_nos_tick.t_1s - s->sendStamp >= 5) //重发
+ {
+ if(++s->retryTimes < 3)
+ {
+ L2_task_go(D_task_tcp_send_modbus_pkg);
+ }
+ else
+ {
+ L2_task_go(D_task_tcp_switch_next_slaver);
+ }
+ }
}
+ else
+ {
+ L2_task_go(D_task_tcp_switch_next_slaver);
+ }
//L0_uart0_uc(s->ackFlag);
TTSS_Task_step(D_task_tcp_switch_next_slaver) //切换下一个
diff --git a/source/app/app_task_tcp.h b/source/app/app_task_tcp.h
index 429e097..3471da4 100644
--- a/source/app/app_task_tcp.h
+++ b/source/app/app_task_tcp.h
@@ -4,6 +4,8 @@
#include "../ctask/task.h"
#include "../tpc/ccmodbus.h"
#include "../app/app_config.h"
+#include "../asp/asp_oid.h"
+
#define U485_TIMEOUT 3 //3 x 100ms = 300ms
typedef struct
@@ -11,8 +13,8 @@ typedef struct
TS_task task;
TS_PH3_ccmodbus loopPkg;
TS_PH3_ccmodbus *pAckPkg;
- U8 slaverIndex;
- U8 pkglen;
+ U16 slaverIndex;
+ U16 pkglen;
U32 sendStamp;
U8 retryTimes;
U8 ackFlag;
diff --git a/source/app/app_task_tcp_control.c b/source/app/app_task_tcp_control.c
index 59437ba..6b66ab9 100644
--- a/source/app/app_task_tcp_control.c
+++ b/source/app/app_task_tcp_control.c
@@ -1,7 +1,8 @@
#include "app_task_tcp_control.h"
-#include "../msp/uart0.h"
+#include "../msp/msp_uart0.h"
#include "../app/task_w600.h"
#include "../app/app_task_tcp.h"
+#include "../asp/asp_oid.h"
TS_tcp_control ts_tcp_control;
@@ -15,7 +16,6 @@ void L3_task_tcp_control_init(void)
#define D_task_tcp_control_01 0x51
#define D_task_tcp_control_02 0x52
-#define D_task_tcp_control_03 0x53
void L3_task_tcp_control_handle(TS_tcp_control *s)//判定是否抬笔/缓冲区满,调用读函数读取一段,从G->R, R.extra num 动态修改数量
@@ -33,45 +33,22 @@ void L3_task_tcp_control_handle(TS_tcp_control *s)//判定是否抬笔/缓冲区
TTSS_Task_step(D_task_tcp_control_02)//是否发认证包
if(s_task_gm35_flow.conn_ok)
{
- //3s一次发送数据包
- if(s_nos_tick.t_1s - ts_tcp_control.tcp_send_stmp >= 3)
- {
- if(!G.authed)//authed == 0
- {
- //L0_uart0_sendstr("111");
- //发送认证包
- G.ccmd_slaver_info[0].mask = 1;
- }
- else //authed == 1
- {
- G.ccmd_slaver_info[2].mask = 1;
- }
- ts_tcp_control.tcp_send_stmp = s_nos_tick.t_1s;
- }
- else if(s_nos_tick.t_1s - ts_tcp_control.tcp_send_stmp >= 60)
+ if(!G.authed)//authed == 0
{
+ //发送认证包
+ G.ccmd_slaver_info[0].mask = 1;
+ }
+ else if(ts_task_oid.can_send)
+ {
+ ts_task_oid.can_send = 0;
+ G.ccmd_slaver_info[1].buf = (U8*)&points;
+ G.ccmd_slaver_info[1].extra_num = (ts_task_oid.extra)*5;
+ //L0_uart2_sendArray((U8 *)&points,ts_task_oid.extra*10);
+ ts_task_oid.extra = 0;
G.ccmd_slaver_info[1].mask = 1;
- ts_tcp_control.tcp_send_stmp = s_nos_tick.t_1s;
}
-
}
L2_task_go(D_task_tcp_control_01);
- #if 0
- TTSS_Task_step(D_task_tcp_control_03)
- if(wr_buf.full == 1)
- {
- wr_buf.full = 0;
- Lc_read_cyc_buf(&R.points ,&wr_buf ,POINT_LEN);
- G.ccmd_slaver_info[2].mask = 1;
- L2_task_go(D_task_tcp_control_01);
- }
- else if(G.pen_up == 1)
- {
- Lc_read_cyc_buf(&R.points ,&wr_buf ,sizeof(wr_buf.buf)/2);
- G.ccmd_slaver_info[2].mask = 1;
- L2_task_go(D_task_tcp_control_01);
- }
- #endif
TTSS_Task_end();
}
diff --git a/source/app/main.c b/source/app/main.c
index ff8cd22..99a5313 100644
--- a/source/app/main.c
+++ b/source/app/main.c
@@ -22,7 +22,7 @@
//
//20170608 cc_as_stc01_main
//
-//20180903 cc_gsm_PD03SM_vh03_m10_debug01
+//20180903 cc_gsm_PD03SM_vh03_m10_debug01
//
//
/// @version 1.3 CCsens technology
@@ -85,8 +85,15 @@ void L0_main_init(void)
//开启全局中断
EA = 1;
+ L0_uart0_sendstr("\r\nasV1.a");
+ #if 0
+ L1_oid_init();
+ printf(" ok\r\n");
+ while(9)
+ {L1_Oid_readoid();}
+ #endif
//系统时钟初始化
- L0_timer0_Init();
+ L0_timer0_Init();
//L0_key_init();
//G初始化
L3_param_init();
@@ -96,13 +103,14 @@ void L0_main_init(void)
L2_485_init();
//寄存器监听任务初始化
- L3_task_reglisten_init();
+ //L3_task_reglisten_init();
//w600任务初始化
L3_task_gm35_flow_init(W600_ST);
+ //按键任务初始化
+ //L0_key_init();
//笔头任务初始化
- L3_task_pen_head_write_init();
- L3_task_pen_head_read_init();
+ L1_oid_init();
//tcp轮询任务初始化
L3_task_tcp_init();
@@ -123,34 +131,82 @@ void main(void)
while(1)
{
- if(1 == s_nos_tick.t1s_heatbeart)
+
+ L1_Oid_readoid();
+
+ if(1 == s_nos_tick.t1s_heartbeat)//1s
+ {
+ s_nos_tick.t1s_heartbeat = 0;//置0清空
+
+ D_print_heartbeat()
+ {///这个地方可以放置心跳的打印信息
+ ///如果其他的打印存在,并且关闭了这个打印的话,这个打印会临时被关闭,下一次打开
+
+ L0_uart0_uc('.');
+
+ }
+ }
+
+ if(L3_tick_interval(100L))/////10ms
+ {L2_tick_stamp();
+ D_print_heartbeat_close();
+
+ /// L1_as_readA(0);//读取倾角传感器数据
+ /// Lc_buf_copy_uc(s_uart1_rec.buf,s_as[0].d,8);
+ // s_uart1_rec.buf= 传感器数据
+ /// ff 08 xh xl yh yl zh zl
+ /// s_uart1_rec.ok =1;
+ }
+ /// L2_sd_save();
+
+/////////////////////////////////////////
+ #if 0
+ if(s_uart0_rec.ok)
{
- s_nos_tick.t1s_heatbeart = 0;
- //LED0 ^= 1;
+ //// buf 0 1 2 3 4 5 6 7
+ //// FA 0D 36 20 10 55 05 06
+ s_uart0_rec.ok = 0;
+ L1_uart0_uchexArray(s_uart0_rec.buf,s_uart0_rec.num);
+
+ switch(s_uart0_rec.buf[1])
+ {
+ case 0x0d:
+ /// L1_sd_debug(&s_uart0_rec.buf[2]);
+ break;
+ case 0x00:
+ L1_oid_debug(&s_uart0_rec.buf[2]);
+ break;
+ default:
+ break;
+ }
}
-
+
+ #endif
+
//WIFI
- //L3_uart2_exp_protocol(&s_uart2_at);
- //L2_task_gm35_flow_handle(&s_task_gm35_flow);
+ L3_uart2_exp_protocol(&s_uart2_at);
+ L2_task_gm35_flow_handle(&s_task_gm35_flow);
//笔头数据采集
- L3_task_pen_head_write_handle(&s_task_pen_write);
- L3_task_pen_head_read_handle(&s_task_pen_read);
+ L3_task_oid_handle(&ts_task_oid);
//寄存器值监控
//L3_task_reglisten_handle(&s_task_reglisten);
//输出,响应485协议
//L3_task_modbus_handler(&s_uart0_rec);
+ //语音模块
+
+
//按键处理
//L3_task_key_handle(&s_task_key_handle);
//L3_task_modbus_handler2(&s_uart2_rec);
//tcp发送
- //L3_task_tcp_handle(&ts_tcp);
+ L3_task_tcp_handle(&ts_tcp);
//tcp master->slaver发送逻辑控制
- //L3_task_tcp_control_handle(&ts_tcp_control);
+ L3_task_tcp_control_handle(&ts_tcp_control);
}
}
//end main
diff --git a/source/app/main.h b/source/app/main.h
index 6038f04..a4f449c 100644
--- a/source/app/main.h
+++ b/source/app/main.h
@@ -37,28 +37,32 @@
#ifndef _MAIN_H
#define _MAIN_H
-#include "../msp/uart0.h"
-#include "../msp/uart2.h"
+#include "../msp/msp_uart0.h"
+#include "../msp/msp_uart2.h"
+//#include "../msp/msp_uart3.h"
#include "../msp/eeprom.h"
#include "../bsp/bsp_config.h"
#include "../bsp/chipid.h"
-#include "../bsp/cs1232.h"
+///#include "../bsp/cs1232.h"
#include "../bsp/rs485.h"
#include "../app/app_config.h"
#include "../app/task_modbus.h"
-#include "../app/task_adc.h"
-#include "../app/task_debug.h"
+///#include "../app/task_adc.h"
+///#include "../app/task_debug.h"
#include "../app/task_register.h"
#include "../app/task_encrypt.h"
#include "../app/task_w600.h"
#include "../app/task_key.h"
-#include "../app/task_pen_head.h"
#include "../app/app_task_tcp.h"
#include "../app/app_task_tcp_control.h"
+#include "../asp/asp_oid.h"
+#include "../ctask/tick.h"
+#include
+
//////////////////////////////////////////////////////////////////
diff --git a/source/app/task_adc.c b/source/app/nouse/task_adc.c
similarity index 100%
rename from source/app/task_adc.c
rename to source/app/nouse/task_adc.c
diff --git a/source/app/task_adc.h b/source/app/nouse/task_adc.h
similarity index 100%
rename from source/app/task_adc.h
rename to source/app/nouse/task_adc.h
diff --git a/source/app/task_debug.c b/source/app/nouse/task_debug.c
similarity index 100%
rename from source/app/task_debug.c
rename to source/app/nouse/task_debug.c
diff --git a/source/app/task_debug.h b/source/app/nouse/task_debug.h
similarity index 100%
rename from source/app/task_debug.h
rename to source/app/nouse/task_debug.h
diff --git a/source/app/task_key b/source/app/nouse/task_key
similarity index 100%
rename from source/app/task_key
rename to source/app/nouse/task_key
diff --git a/source/app/task_key.c b/source/app/task_key.c
index 7c97085..e6ba1e3 100644
--- a/source/app/task_key.c
+++ b/source/app/task_key.c
@@ -78,7 +78,17 @@ void L3_task_key_handle(struct _s_task_key_ *p)
}
else
{
- LED2 = ~LED2;
+ //LED2 = ~LED2;
+ U8 i;
+ U8 mu[9];
+ U16 music[9] = {0x7E,0x07,0xA3,0x43,0x30,0x30,0x39,0x86,0xEF};
+ //7E 07 A3 43 30 30 39 86 EF
+ for(i = 0;i<9;i++)
+ {
+ mu[i] = music[i]>> 0 & 0xFF;
+ }
+ L0_uart3_sendArray((U8 *)&mu, 9);
+ L0_uart0_sendArray((U8 *)&mu, 9);
}
p->key1_ok = 0;
p->time1=0;
diff --git a/source/app/task_key.h b/source/app/task_key.h
index 7635f4e..4b14944 100644
--- a/source/app/task_key.h
+++ b/source/app/task_key.h
@@ -14,7 +14,9 @@
#define _app_task_key_H
#include "../bsp/bsp_config.h"
#include "../ctask/task.h"
+#include "../msp/msp_uart0.h"
+#include "../msp/msp_uart3.h"
struct _s_task_key_
{
diff --git a/source/app/task_pen_head.c b/source/app/task_pen_head.c
index b4a287c..551706e 100644
--- a/source/app/task_pen_head.c
+++ b/source/app/task_pen_head.c
@@ -1,5 +1,7 @@
#include "task_pen_head.h"
-#include "../msp/uart0.h"
+#include "../clib/clib.h"
+#include "../bsp/bsp_oid.h"
+#include "../msp/msp_uart2.h"
struct _s_task_pen_head_ s_task_pen_write;
struct _s_task_pen_head_ s_task_pen_read;
@@ -9,7 +11,6 @@ void L3_task_pen_head_write_init(void)
{
L1_task_init(&s_task_pen_write.task);
L3_task_s_go(s_task_pen_write,D_task_init);
- s_task_pen_write.full = 0;
}
void L3_task_pen_head_read_init(void)
{
@@ -17,16 +18,72 @@ void L3_task_pen_head_read_init(void)
L3_task_s_go(s_task_pen_read,D_task_init);
}
-#define TTSS_TASK_HEAD_DATA_WRITE 0x01
-#define TTSS_TASK_HEAD_DATA 0x02
+#define TTSS_TASK_HEAD_DATA_GET 0x01
+#define TTSS_TASK_HEAD_DATA_WRITE 0x02
+#define TTSS_TASK_HEAD_DATA_END 0x03
+#define TTSS_TASK_HEAD_DATA_WRITE_TO 0x04
-U8 i = 0;
+
+#if 0
+
+///U8 i = 0;
U8 j ;
void L3_task_pen_head_write_handle(struct _s_task_pen_head_ *s)
{
TTSS_Task_init()
- L2_task_go_Tdelay(TTSS_TASK_HEAD_DATA_WRITE,0);
- TTSS_Task_step(TTSS_TASK_HEAD_DATA_WRITE)
+ L2_task_go(TTSS_TASK_HEAD_DATA_GET);
+ TTSS_Task_step(TTSS_TASK_HEAD_DATA_GET)
+ if(G.oid_x)
+ {
+ G.oid_x = 0;
+ s->point.x_axis = (U16)(U32)ts_oid.x *10.0;
+ s->point.y_axis = (U16)(U32)ts_oid.y *10.0;
+ s->point.time = ts_oid.time;
+ s->point.angle = (U16)ts_oid.angle>>1;
+ L2_task_go(TTSS_TASK_HEAD_DATA_WRITE);
+ }
+ else
+ {
+ L2_task_go(TTSS_TASK_HEAD_DATA_END);
+ }
+ TTSS_Task_step(TTSS_TASK_HEAD_DATA_WRITE)////判断
+ if(G.pen_down)
+ {
+ G.pen_down= 0;
+ s->point.x_axis += (U16)16384;
+ L2_task_go(TTSS_TASK_HEAD_DATA_WRITE_TO);
+ }
+ else if(G.pen_hold)
+ {
+ G.pen_hold = 0;
+ s->point.x_axis += (U16)32768;
+ L2_task_go(TTSS_TASK_HEAD_DATA_WRITE_TO);
+ }
+ TTSS_Task_step(TTSS_TASK_HEAD_DATA_END)
+ if(G.pen_up && G.pen_t)
+ {
+ G.pen_up = 0;
+ G.pen_end = 1;
+ s->point.x_axis += (U16)16384;
+ s->point.time = D_sys_now;
+ ts_oid.x = 0;
+ ts_oid.y = 0;
+ ts_oid.time = 0;
+ ts_oid.angle = 0;
+ L2_task_go(TTSS_TASK_HEAD_DATA_WRITE_TO);
+ }
+ else
+ {
+ L2_task_go(TTSS_TASK_HEAD_DATA_GET);
+ }
+ TTSS_Task_step(TTSS_TASK_HEAD_DATA_WRITE_TO)
+ L0_uart2_ushex(s->point.x_axis);
+ //Lc_buf_copy_uc((U8 *)&wr_buf.buf[i],(U8 *)&s->point,(U16)10);
+ Lc_buf_copy_uc((U8 *)&wr_buf.buf[wr_buf.Index],(U8 *)&s->point,10);
+ wr_buf.Index ++;
+ ////L2_task_go_Tdelay(TTSS_TASK_HEAD_DATA_GET,D_Tdelay_40ms);
+ L2_task_go(TTSS_TASK_HEAD_DATA_GET);
+ #if 0
s->point.x_axis = i;
s->point.y_axis = i;
s->point.time = D_sys_now;
@@ -55,14 +112,17 @@ void L3_task_pen_head_write_handle(struct _s_task_pen_head_ *s)
L0_uart0_ushex(R.points[j].x_axis);
L0_uart0_uc(' ');
L0_uart0_ushex(R.points[j].y_axis);
- L0_uart0_uc(' ');
+
L0_uart0_ulhex(R.points[j].time);
L0_uart0_0d0a();
}//Lc_buf_full(&wr_buf);
}
#endif
L2_task_go_Tdelay(TTSS_TASK_HEAD_DATA_WRITE,D_Tdelay_100ms);
+ #endif
+
TTSS_Task_end();
+
}
#define TTSS_TASK_HEAD_DATA_READ 0x21
@@ -70,26 +130,18 @@ void L3_task_pen_head_write_handle(struct _s_task_pen_head_ *s)
void L3_task_pen_head_read_handle(struct _s_task_pen_head_ *s)
{
TTSS_Task_init()
- L2_task_go_Tdelay(TTSS_TASK_HEAD_DATA_READ,0);
+ L2_task_go(TTSS_TASK_HEAD_DATA_READ);
TTSS_Task_step(TTSS_TASK_HEAD_DATA_READ)
- if(s_task_pen_write.full)
+ if(wr_buf.Index >= POINT_LEN-1)
{
- s_task_pen_write.full = 0;
- Lc_read_cyc_buf(R.points,&wr_buf, 10);
- //G.ccmd_slaver_info[2].extra_num = sizeof(R.points)/2;
- for(j = 0;j<10;j++)
- {
- L0_uart0_ushex(R.points[j].x_axis);
- L0_uart0_uc(' ');
- L0_uart0_ushex(R.points[j].y_axis);
- L0_uart0_uc(' ');
- L0_uart0_ulhex(R.points[j].time);
- L0_uart0_0d0a();
- }
+ wr_buf.Index = 0;
+ G.datapkg = 1;
+ Lc_buf_copy_uc((U8 *)&R.points,(U8 *)&wr_buf.buf,(U16)POINT_LEN*10);
+
+ //G.ccmd_slaver_info[2].extra_num = POINT_LEN *5;
}
-
- L2_task_go_Tdelay(TTSS_TASK_HEAD_DATA_READ,D_Tdelay_50ms);
+ L2_task_go_Tdelay(TTSS_TASK_HEAD_DATA_READ,D_Tdelay_300ms);
TTSS_Task_end();
}
-
+#endif
diff --git a/source/app/task_pen_head.h b/source/app/task_pen_head.h
index dbb391b..15bf132 100644
--- a/source/app/task_pen_head.h
+++ b/source/app/task_pen_head.h
@@ -2,21 +2,15 @@
#define _app_task_pen_head_H
#include "../bsp/bsp_config.h"
-#include "../bsp/w600.h"
+//#include "../bsp/w600.h"
#include "../ctask/task.h"
-#include "../tpc/at0d0a.h"
-#include "../tpc/ccmodbus.h"
#include "../app/app_config.h"
struct _s_task_pen_head_
{
TS_task task;
- vU32 last_write_time;
- vU32 now_write_time;
- vU32 time_lag;
- vU8 full;
- vU8 null;
+ U8 index;
PenPoint point;
};
extern struct _s_task_pen_head_ s_task_pen_write;
diff --git a/source/app/task_register.c b/source/app/task_register.c
index 1499c64..7abb600 100644
--- a/source/app/task_register.c
+++ b/source/app/task_register.c
@@ -13,7 +13,7 @@
#include "task_register.h"
#include "../app/app_config.h"
#include "../bsp/bsp_config.h"
-#include "../msp/uart0.h"
+#include "../msp/msp_uart0.h"
#include "task_w600.h"
//=============================================
diff --git a/source/app/task_w600.c b/source/app/task_w600.c
index d3871a4..05c4ea8 100644
--- a/source/app/task_w600.c
+++ b/source/app/task_w600.c
@@ -13,8 +13,9 @@
#include "task_w600.h"
#include "app_config.h"
-#include "../msp/uart2.h"
-#include "../msp/uart0.h"
+#include "../msp/msp_uart2.h"
+#include "../msp/msp_uart0.h"
+#include "../asp/asp_oid.h"
struct _s_task_gm35_gprs_ s_task_gm35_flow;
//TS_tcp_control ts_tcp_control;
@@ -46,7 +47,7 @@ void L3_gm35_send_str(U8 *str)
}
//将数据放入gm35待发送缓冲区
-void L3_gm35_send_data(U8 *buf , U8 len)
+void L3_gm35_send_data(U8 *buf , U16 len)
{
//L3_gm35_send_str(_cipsend_hex(len));
L0_uart2_sendArray(buf,len);
@@ -235,7 +236,7 @@ void L3_task_gm35_flow_init(U8 mode)
void L2_task_gm35_flow_handle(struct _s_task_gm35_gprs_ *s)
{
TTSS_Task_init()
- L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ATEQV,D_Tdelay_10s);//上电等待10s
+ L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ATEQV,D_Tdelay_3s);//上电等待10s
TTSS_Task_step(TTSS_TASK_GM35_FLOW_ATEQV)
if(s->send == 0)
{//发送
@@ -374,7 +375,7 @@ void L2_task_gm35_flow_handle(struct _s_task_gm35_gprs_ *s)
TTSS_Task_step(TTSS_TASK_GM35_FLOW_ST_DATA)
//L0_uart2_sendstr("abcdefg");
s_task_gm35_flow.conn_ok = 1;
- L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_DATA,D_Tdelay_1s);
+ L2_task_go(TTSS_TASK_GM35_FLOW_ST_DATA);
diff --git a/source/app/task_w600.h b/source/app/task_w600.h
index 20c869d..4636483 100644
--- a/source/app/task_w600.h
+++ b/source/app/task_w600.h
@@ -1,4 +1,4 @@
-////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
///-------------------------------------------------------------------------
/// @file bsp_gc6133.c.h
@@ -25,7 +25,7 @@
#define AT_INS_ST "AT+CWMODE=1\r\n" //进入station模式
//#define AT_INS_ST_WIFI "AT+CWJAP_DEF=\"ccsens\",\"ccsens123\"\r\n" //网络查询指令
#define AT_INS_ST_CIPMUX0 "AT+CIPMUX=0\r\n" //GPRS操作指令
-#define AT_INS_ST_TCP "AT+CIPSTART=\"TCP\",\"192.168.0.83\",4001\r\n" //连接服务器
+#define AT_INS_ST_TCP "AT+CIPSTART=\"TCP\",\"192.168.0.81\",4001\r\n" //连接服务器
#define AT_INS_ST_CIPMODE1 "AT+CIPMODE=1\r\n" //发送数据
#define AT_INS_ST_CIPSEND "AT+CIPSEND\r\n" //主动关闭连接
#define AT_INS_ST_CIPMODE0 "AT+CIPMODE=0\r\n" //查询连接状态
diff --git a/source/asp/asp readme.txt b/source/asp/asp readme.txt
new file mode 100644
index 0000000..1d99412
--- /dev/null
+++ b/source/asp/asp readme.txt
@@ -0,0 +1,16 @@
+板级到app还有对芯片功能应用配置的一层
+
+20210124 发现传统的TTSS架构中总是欠缺点
+例如一个外设芯片,因为不是mcu固有的外设,所以应该归到BSP(板级支持里面)
+其读写寄存器等基本功能放在BSP中,但是其和app应用相关的模式却发现并不适合
+直接放到BSP中,也不适合放到APP中,因为实际的应用只是使用外设获得IO数据
+而已。故而修正
+
+main:
+app:
+asp:基于mcu外设或者板级外设芯片的功能,这些功能为app服务,但是功能配置复杂,单独列出,方便移植。
+bsp:外设芯片自身功能,如果芯片为app服务的函数功能比较单一,不像无线芯片一样配置复杂的话那么也可以放在bsp中
+msp:mcu自身的外设功能,如果特别复杂,比如类似MAC驱动等,可以把一部分接近app的功能放到asp中
+clib:
+ctask:
+tpc:协议相关
\ No newline at end of file
diff --git a/source/asp/asp_SDX1.H b/source/asp/asp_SDX1.H
new file mode 100644
index 0000000..4e24cee
--- /dev/null
+++ b/source/asp/asp_SDX1.H
@@ -0,0 +1,82 @@
+#ifndef __SDX1_H__
+#define __SDX1_H__
+
+/*★★★★★★★★★★★★★★★★★★★★★★★★
+ 《振南的znFAT--嵌入式FAT32文件系统设计与实现》
+ 一书[上下册]已经由北航出版社正式出版发行。
+ 此书是振南历经3年多时间潜心编著,是现今市面上唯
+ 一一套讲述FAT32文件系统、SD卡等嵌入式存储技术的
+ 专著。书中还介绍了大量的编程技巧与振南的开发经验。
+ 请在各大网络销售平台搜索“znFAT”,即可购买。
+ 在全国各大书店也有售。
+ 振南的ZN-X开发板,支持51、AVR、STM32(M0/M3/M4)等
+ CPU。此板可与书配套,板上各种精彩的实验实例请详见
+ 振南网站www.znmcu.cn
+ ★★★★★★★★★★★★★★★★★★★★★★★★*/
+
+/***************************************************************************************
+ ★程序模块:【振南ZN-X开发板】上『SD卡1』驱动程序 〖STC51部分:STC15L2K60S2〗
+ ★功能描述:实现了SD卡的扇区读写、多扇区读写、扇区擦除、读取总物理扇区数等功能
+ 此驱动可支持几乎所有的SD卡,包括MMC/SD/SDHC
+ ★配套教程与参考资料:
+ ●《振南的znFAT--嵌入式FAT32文件系统设计与实验》一书 下册 第11章《SD卡物理驱动》
+ ●《振南的单片机高级外设系列视频教程》之《SD卡专辑》
+****************************************************************************************/
+
+
+#include "../bsp/bsp_config.h"///#include "sd_type.h"
+#include "znfat.h"///#include "sd_type.h"
+
+////#include
+
+sbit SD1_CS =P5^5; //SD卡片选 输入
+
+
+#define D_FILE_SECTOR 65544
+
+
+#define SET_SD1_CS_PIN(val) (SD1_CS =val)
+
+#define TRY_TIME 200 //向SD卡写入命令之后,读取SD卡的回应次数,即读TRY_TIME次,如果在TRY_TIME次中读不到回应,产生超时错误,命令写入失败
+
+#define TRY_TIME2 200 //add by cc
+//相关宏定义
+//-------------------------------------------------------------
+#define SD_VER_ERR 0X00
+#define SD_VER_MMC 0X01
+#define SD_VER_V1 0X02
+#define SD_VER_V2 0X03
+#define SD_VER_V2HC 0X04
+
+#define INIT_ERROR 0x01 //初始化错误
+#define INIT_CMD0_ERROR 0x02 //CMD0错误
+#define INIT_CMD1_ERROR 0x03 //CMD1错误
+#define INIT_SDV2_ACMD41_ERROR 0x04 //ACMD41错误
+#define INIT_SDV1_ACMD41_ERROR 0x05 //ACMD41错误
+
+#define WRITE_CMD24_ERROR 0x06 //写块时产生CMD24错误
+#define WRITE_BLOCK_ERROR 0x07 //写块错误
+
+#define READ_BLOCK_ERROR 0x08 //读块错误
+
+#define WRITE_CMD25_ERROR 0x09 //在连续多块写时产生CMD25错误
+#define WRITE_NBLOCK_ERROR 0x0A //连续多块写失败
+
+#define READ_CMD18_ERROR 0x0B //在连续多块读时产生CMD18错误
+
+#define GET_CSD_ERROR 0x0C //读CSD失败
+
+//-------------------------------------------------------------
+UINT8 SD1_Init(); //SD卡初始化
+
+UINT8 L1_SD_Wsector(UINT32 addr,UINT8 *buffer); //将buffer数据缓冲区中的数据写入地址为addr的扇区中
+UINT8 L1_SD_Rsector(UINT32 addr,UINT8 *buffer); //从地址为addr的扇区中读取数据到buffer数据缓冲区中
+UINT8 SD1_Write_nSector(UINT32 nsec,UINT32 addr,UINT8 *buffer); //将buffer数据缓冲区中的数据写入起始地址为addr的nsec个连续扇区中
+UINT8 SD1_Read_nSector(UINT32 nsec,UINT32 addr,UINT8 *buffer); //将buffer数据缓冲区中的数据写入起始地址为addr的nsec个连续扇区中
+UINT8 SD1_Erase_nSector(UINT32 addr_sta,UINT32 addr_end);
+UINT32 SD1_GetTotalSec(void); //获取SD卡的总扇区数
+UINT8 L2_SD_Rsector(UINT16 addr,UINT8 *buffer);////从
+UINT8 L2_SD_Wsector(UINT16 addr,UINT8 *buffer);
+UINT8 L2_SD_Erase_nSector(UINT16 addr_sta,UINT16 addr_end);
+
+#endif
diff --git a/source/asp/asp_oid.c b/source/asp/asp_oid.c
new file mode 100644
index 0000000..cefdf51
--- /dev/null
+++ b/source/asp/asp_oid.c
@@ -0,0 +1,278 @@
+#include "asp_oid.h"
+
+TS_task_oid_ ts_task_oid;
+
+Ts_OID_frame_xy_ oid_buf[POINT_LEN+10];
+Ts_OID_frame_xy_ points[POINT_LEN+10];
+
+
+
+
+#define D_TASK_OID_t1 0x11
+#define D_TASK_OID_XY 0x12
+#define TTSS_TASK_OID_STA 0x13
+#define D_TASK_PEN_UP 0x14
+#define TTSS_TASK_OID_WRITE 0x15
+#define TTSS_TASK_OID_SEND 0x16
+
+
+void L3_task_oid_handle(TS_task_oid_ *s)
+{
+
+ TTSS_Task_init();
+ TTSS_Alarm_init(s->tts,1000);
+ ///(X) = s_nos_tick.t_10ms + delay;
+ L2_task_go(D_TASK_OID_t1);
+ TTSS_Task_step(D_TASK_OID_t1)
+ if(TTSS_Alarm_AT(s->tts))
+ {///if( (X) < s_nos_tick.jiffies)
+ TTSS_Alarm_init(s->tts,1000);
+ s->p_ok = 1;
+ s->ts_frame.flag.sta = D_PEN_none;//超时没有数据
+ s->ts_frame.cd.xy100.x100 = 0;
+ s->ts_frame.cd.xy100.y100 = 0;
+ s->ts_frame.flag.angle= 0;
+ s->ts_frame.time= D_sys_now;
+ L2_task_go(TTSS_TASK_OID_WRITE);
+ }
+ else if(ts_oid.oid_p)
+ {
+ ts_oid.oid_p = 0;
+ TTSS_Alarm_init(s->tts,1000);
+ s->ts_frame.flag.sta = D_PEN_gcode;
+ s->ts_frame.cd.gcode = ts_oid.gCode;
+ s->ts_frame.time= D_sys_now;
+ //L0_uart2_sendArray((U8 *)&s->ts_frame,(U16)10);
+ //Lc_buf_copy_uc((U8 *)&R.points[0],(U8 *)&s->ts_frame,(U16)10);
+ //s->extra = 1;
+ //s->can_send = 1;
+ s->send_p = 1;
+ L2_task_go(TTSS_TASK_OID_WRITE);
+ }
+ else
+ {
+ L2_task_go(D_TASK_OID_XY);
+ }
+ TTSS_Task_step(D_TASK_OID_XY)
+ if(ts_oid.oid_x)
+ {
+ ts_oid.oid_x = 0;
+ TTSS_Alarm_init(s->tts,1000);
+ s->ts_frame.cd.xy100.x100 = ts_oid.X100;
+ s->ts_frame.cd.xy100.y100 = ts_oid.Y100;
+ s->ts_frame.flag.packageNo = 0;
+ s->ts_frame.flag.angle = ts_oid.angle;
+ s->ts_frame.time = ts_oid.time;
+ L2_task_go(TTSS_TASK_OID_STA);
+ }
+ else
+ {
+ L2_task_go(D_TASK_PEN_UP);
+ }
+ TTSS_Task_step(TTSS_TASK_OID_STA)
+ if(ts_oid.pre_x == 0 && ts_oid.pre_y == 0 && ts_oid.X100 != 0 &&ts_oid.Y100 != 0)
+ {
+ s->ts_frame.flag.sta = D_PEN_down;
+ L2_task_go(TTSS_TASK_OID_WRITE);
+ }
+ else if(ts_oid.pre_x != 0 && ts_oid.pre_y != 0&& ts_oid.X100 != 0 &&ts_oid.Y100 != 0)
+ {
+ s->ts_frame.flag.sta = D_PEN_normal;
+ L2_task_go(TTSS_TASK_OID_WRITE);
+ }
+ TTSS_Task_step(D_TASK_PEN_UP)
+ if(G.pen_up && G.pen_t)
+ {
+ G.pen_up = 0;
+ s->send_t =1;
+ TTSS_Alarm_init(s->tts,1000);
+ s->ts_frame.flag.sta = D_PEN_up;
+ s->ts_frame.time = D_sys_now;
+ ts_oid.X100 = 0;
+ ts_oid.Y100 = 0;
+ ts_oid.time = 0;
+ ts_oid.angle = 0;
+ L2_task_go(TTSS_TASK_OID_WRITE);
+ }
+ else
+ {
+ L2_task_go(D_TASK_OID_t1);
+ }
+ TTSS_Task_step(TTSS_TASK_OID_WRITE)
+ //L0_uart2_sendArray((U8 *)&s->ts_frame,(U16)10);
+ Lc_buf_copy_uc((U8 *)&oid_buf[s->point],(U8 *)&s->ts_frame,(U16)10);
+ s->point ++;
+ L2_task_go(TTSS_TASK_OID_SEND);
+ TTSS_Task_step(TTSS_TASK_OID_SEND)
+ if(((s->point) > (POINT_LEN - 1))|| s->send_t||s->p_ok||s->send_p)
+ {
+ U8 j;
+ U16 k;
+ s->extra = s->point;
+ s->point = 0;
+ s->p_ok = 0;
+ s->send_p = 0;
+ s->send_t = 0;
+ for(j = 0;jextra;j++)
+ {
+ Lc_buf_copy_uc((U8 *)&points[j],(U8 *)&oid_buf[j],(U16)10);
+ //L0_uart2_sendArray((U8 *)&points[j],(U16)10);
+ }
+ //G.ccmd_slaver_info[1].buf = (U8*)&points;
+ //G.ccmd_slaver_info[1].extra_num = (s->extra)*5;
+ //L0_uart2_sendArray((U8 *)&points,(s->extra)*10);
+ //s->extra = 0;
+ s->can_send = 1;
+ #if 0
+ for(j = 0;jcmd)
+ {
+ case UDCMD_wakeup:
+ L0_uart0_sendstr("\r\nL1_OID_WakeUp ");
+ L1_OID_WakeUp();
+ break;
+ case UDCMD_cmdsend:
+ ///fa 00 22 cmd 42 53 64 75
+ ///fa 00 |22 cmd 42 53 64 75
+ L0_uart0_sendstr("\r\ncmd:");
+ L0_uart0_uchex(t->dat);L0_uart0_0d0a();
+ L1_oid_TransCmd(t->dat);
+ break;
+ case UDCMD_log:
+ L0_uart0_sendstr("\r\nLogRegister");
+ /// LogRegister();
+ break;
+ case UDCMD_CheckVersion:
+ L0_uart0_sendstr("\r\n CheckVersion");
+/// L1_oid_CheckVersionAndInit(eAppDevice);
+ // while(1)
+ {
+ // OidTaskLoop();
+ }
+ break;
+ case UDCMD_get:
+ L0_uart0_sendstr("\r\n UDCMD_get");
+ while(9)
+ {
+ L1_Oid_readoid();
+
+ }
+
+ break;
+ case UDCMD_readreg:
+
+ ///fa 00 22 cmd 42 53 64 75
+ ///fa 00 |22 cmd 42 53 64 75
+ r = L1_oidReadRegister (t->reg);
+
+ L0_uart0_sendstr("\r\n read reg:");
+ L0_uart0_ushex(t->reg);
+ Lc_delay_ms(1);
+ L0_uart0_sendstr(" = ");
+ L0_uart0_ulhex(r);
+
+ L0_uart0_uc(0x09);
+ break;
+ #if 0
+ case UDCMD_testtime_us:
+ L0_uart0_sendstr("\r\nUDCMD_testtime_us");
+ L0_uart0_uchex(t->dat);L0_uart0_0d0a();
+ while(9)
+ {
+ /// delay_us(t->dat);
+ D_IO_LEDkey1_ON();
+ // delay_us(t->dat);
+ D_IO_LEDkey1_OFF();
+ }
+ break;
+
+ case UDCMD_testtime_ms:
+ L0_uart0_sendstr("\r\nUDCMD_testtime_ms");
+ L0_uart0_uchex(t->dat);L0_uart0_0d0a();
+
+ while(9)
+ {
+ /// delay_ms(t->dat);
+ D_IO_LEDkey1_ON();
+ // delay_ms(t->dat);
+ D_IO_LEDkey1_OFF();
+ }
+ break;
+ #endif
+ default:
+ L0_uart0_sendstr("\r\ncmd error!!");
+ L0_uart0_0d0a();
+ break;
+ }
+ ET0 = 1;
+}
+
+
diff --git a/source/asp/asp_oid.h b/source/asp/asp_oid.h
new file mode 100644
index 0000000..54043bc
--- /dev/null
+++ b/source/asp/asp_oid.h
@@ -0,0 +1,139 @@
+#ifndef __asp_oid_H__
+#define __asp_oid_H__
+
+/**************************************************************************************
+ asp_oid.c
+****************************************************************************************/
+
+#include "../bsp/bsp_oid.h"
+
+#include "msp_uart0.h"
+
+#include "../ctask/task.h"
+#include "../app/app_config.h"
+
+/**********
+
+ ``````` `\___________________/` ` ` ` ` ` ` `````````\___________________/````````
+ 222222 2 21000000000000000000032 2 2 2 2 2 2 222222221000000000000000000032222222
+package no 0 1 2 3 0 1 2 3
+package no 0 1 2 3 4 5 6 7
+packageNo 00000111112222233333xxxxx xxxxxxxxxxx00000111112222233333xxxxx
+
+ 111111111 12222222
+ 123456789012345678 901234567890
+
+gcode收到固定码
+坐标码
+ 按下开始,
+ 个数累计到了,
+ 或者抬起
+都要发送
+
+寄存器模式: 一般指的是单个变量的保存,写入和读取按寄存器号读取即可
+缓存模式:数据连续放入某个缓存,然后进行批量读取,缓存号(地址)可以作为寄存器
+
+
+************/
+/*******************.
+
+write to uart -->send
+
+Layer3: app tcp
+
+s->ts_frame.cd->R.point
+
+-----------------------------
+状态判断,数据缓存
+
+Layer2: asp asp_oid
+
+ts.oid ->s->ts_frame.cd
+
+-------------------------
+ L1_Oid_readoid
+
+Layer1: bsp: bsp_oid 最底层的点的采样
+
+*******************/
+#define POINT_LEN 20///cc fixme
+
+typedef struct
+{///6Byte
+ U16 x100;
+ U16 y100;
+}TS_xy100;
+typedef union{
+ TS_xy100 xy100;
+ U32 gcode;
+}TU_code;
+
+#define D_PEN_normal 0
+#define D_PEN_down 1
+#define D_PEN_none 2
+#define D_PEN_up 3
+#define D_PEN_gcode 4
+typedef struct
+{
+ U16 angle:9;///360
+ U16 packageNo:4; ///0-2^5
+ U16 sta:3; /// =0 nomal =1 按下 =3 抬起 =2 没有按下 =4 gcode
+}Oid_flag;
+////一帧数据,也是一个点
+typedef struct
+{
+ Oid_flag flag;
+ TU_code cd;
+ TtimeStamp time; ///最好一个包一个时间戳 一个点(一帧)一个时间戳有点浪费
+ /// 前提1 是采样的点是固定间隔而且连续
+ ////时间戳甚至是相对的 甚至误差相对于采样而言也比较大
+}Ts_OID_frame_xy_;///8Bytes
+
+typedef struct _s_task_oid_
+{
+ TS_task task;
+
+ vU8 can_send;///
+ U16 p_ok;///
+ U16 send_t;
+ TtimeStamp tts;
+ U16 point;
+ U16 extra;
+ U16 send_p;
+ Ts_OID_frame_xy_ ts_frame;
+/// Ts_OID_out_ out;
+
+}TS_task_oid_;
+extern TS_task_oid_ ts_task_oid;
+extern void L3_task_oid_handle(TS_task_oid_ *s);
+extern Ts_OID_frame_xy_ oid_buf[POINT_LEN+10];
+extern Ts_OID_frame_xy_ points[POINT_LEN+10];
+
+
+
+//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>for debug
+typedef struct _ts_debug_oid_cmd_
+{///6bytes 去掉了filter和命令字
+ U8 cmd;
+ /// U8 rw; /// 写还是读: =1 读,=0写
+ U8 dat; ///数据
+ U16 reg; ///
+ U16 end; ///
+}TS_oid_cmd;
+
+#define UDCMD_wakeup 0x11 ///
+#define UDCMD_cmdsend 0x22 ///
+#define UDCMD_readreg 0x23 ///
+#define UDCMD_log 0x33 ///
+#define UDCMD_get 0x44 ///
+#define UDCMD_CheckVersion 0x45 ///
+#define UDCMD_testtime_us 0x55 ///
+#define UDCMD_testtime_ms 0x66 ///
+
+///<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<=200)
+ {
+ L0_uart0_uc('E');
+ L0_uart0_0d0a();
+ SET_SD1_CS_PIN(1);
+ return(INIT_CMD0_ERROR);//CMD0写入失败
+ }
+ }
+ //将6字节的命令序列写入SD卡
+ SD1_SPI_WByte(pcmd[0]);
+ SD1_SPI_WByte(pcmd[1]);
+ SD1_SPI_WByte(pcmd[2]);
+ SD1_SPI_WByte(pcmd[3]);
+ SD1_SPI_WByte(pcmd[4]);
+ SD1_SPI_WByte(pcmd[5]);
+
+ if(pcmd[0]==0X1C) SD1_SPI_RByte(); //如果是停止命令,跳过多余的字节
+
+ do
+ {
+ r=SD1_SPI_RByte();
+ time++;
+ }while((r&0X80)&&(time= TRY_TIME2)
+ {
+ L0_uart0_uc(0x09);
+ L0_uart0_uc('R');
+ L0_uart0_uc(0x09);
+ return(INIT_CMD0_ERROR);//CMD0写入失败
+ }
+ }while(r!=0x01);
+ L0_uart0_uc(0x09);
+ L0_uart0_uc('6');
+ L0_uart0_uc(0x09);
+
+ if(1==SD1_Write_Cmd(pCMD8))//写入CMD8,如果返回值为1,则SD卡版本为2.0
+ {
+ L0_uart0_sendstr("SDver:2.0\r\n");/////4g卡
+ rbuf[0]=SD1_SPI_RByte(); rbuf[1]=SD1_SPI_RByte(); //读取4个字节的R7回应,通过它可知此SD卡是否支持2.7~3.6V的工作电压
+ rbuf[2]=SD1_SPI_RByte(); rbuf[3]=SD1_SPI_RByte();
+
+ if(rbuf[2]==0X01 && rbuf[3]==0XAA)//SD卡是否支持2.7~3.6V
+ {
+ L0_uart0_sendstr("2.7~3.6V=");/////4g卡
+
+ time=0;
+ do
+ {
+ SD1_Write_Cmd(pCMD55);//写入CMD55
+ r=SD1_Write_Cmd(pACMD41H);//写入ACMD41,针对SD2.0
+ time++;
+ if(time>=TRY_TIME)
+ {
+ return(INIT_SDV2_ACMD41_ERROR);//对SD2.0使用ACMD41进行初始化时产生错误
+ }
+ }while(r!=0);
+
+ if(0==SD1_Write_Cmd(pCMD58)) //写入CMD58,开始鉴别SD2.0
+ {
+ rbuf[0]=SD1_SPI_RByte(); rbuf[1]=SD1_SPI_RByte(); //读取4个字节的OCR,其中CCS指明了是SDHC还是普通的SD
+ rbuf[2]=SD1_SPI_RByte(); rbuf[3]=SD1_SPI_RByte();
+
+ if(rbuf[0]&0x40)
+ {
+ SD1_Ver=SD_VER_V2HC; //SDHC卡
+ SD1_Addr_Mode=1; //SDHC卡的扇区寻址方式是扇区地址
+ }
+ else SD1_Ver=SD_VER_V2; //普通的SD卡,2.0的卡包含SDHC和一些普通的卡
+
+ }
+
+ if(!SD1_Addr_Mode)
+ {
+ //addr = addr * 512 将块地址(扇区地址)转为字节地址
+ L0_uart0_uc(0x30+SD1_Addr_Mode);
+ L0_uart0_sendstr("<<9 \r\n");/////4g卡
+ }
+ else
+ {
+ L0_uart0_uc(0x30+SD1_Addr_Mode);
+ L0_uart0_sendstr("1 mass adr \r\n");/////4g卡
+ }
+
+ }
+ }
+ else //SD V1.0或MMC
+ {
+ L0_uart0_sendstr("SD V1.0 or MMC \r\n");
+ //SD卡使用ACMD41进行初始化,而MMC使用CMD1来进行初始化,依此来进一步判断是SD还是MMC
+ SD1_Write_Cmd(pCMD55);//写入CMD55
+ r=SD1_Write_Cmd(pACMD41S);//写入ACMD41,针对SD1.0
+
+ if(r<=1) //检查返回值是否正确,如果正确,说明ACMD41命令被接受,即为SD卡
+ {
+ SD1_Ver=SD_VER_V1; //普通的SD1.0卡,一般来说容量不会超过2G
+
+ time=0;
+ do
+ {
+ SD1_Write_Cmd(pCMD55);//写入CMD55
+ r=SD1_Write_Cmd(pACMD41S);//写入ACMD41,针对SD1.0
+ time++;
+ if(time>=TRY_TIME)
+ {
+ return(INIT_SDV1_ACMD41_ERROR);//对SD1.0使用ACMD41进行初始化时产生错误
+ }
+ }while(r!=0);
+ }
+ else //否则为MMC
+ {
+ SD1_Ver=SD_VER_MMC; //MMC卡,它不支持ACMD41命令,而是使用CMD1进行初始化
+
+ time=0;
+ do
+ {
+ r=SD1_Write_Cmd(pCMD1);//写入CMD1
+ time++;
+ if(time>=TRY_TIME)
+ {
+ return(INIT_CMD1_ERROR);//MMC卡使用CMD1命令进行初始化中产生错误
+ }
+ }while(r!=0);
+ }
+ }
+
+ if(0!=SD1_Write_Cmd(pCMD16)) //SD卡的块大小必须为512字节
+ {
+ SD1_Ver=SD_VER_ERR; //如果不成功,则此卡为无法识别的卡
+ return INIT_ERROR;
+ }
+
+ SET_SD1_CS_PIN(1);
+ SD1_SPI_WByte(0xFF); //按照SD卡的操作时序在这里补8个时钟
+
+ SD1_SPI_SPEED_HIGH(); //SPI切到高速
+
+ return 0;//返回0,说明复位操作成功
+}
+
+/******************************************************************
+ - 功能描述:对SD卡若干个扇区进行擦除,擦除后扇区中的数据大部分情况
+ 下为全0(有些卡擦除后为全0XFF,如要使用此函数,请确认)
+ - 参数说明:addr_sta:开始扇区地址 addr_end:结束扇区地址
+ - 返回说明:调用成功,返回0x00,否则返回错误码
+
+ add by cc 如果addr_sta=addr_end 命令无效,一次至少擦除两个扇区
+ CMD32 ERASE_WR_BLK_START Mandatory
+
+CMD33 ERASE_WR_BLK_END Mandatory
+
+CMD38 ERASE Mandatory
+
+ Class5 (擦除卡命令集):
+
+ CMD32:设置擦除块的起始地址.
+
+ CMD33:设置擦除块的终止地址.
+
+ CMD38: 擦除所选择的块.
+
+
+ ******************************************************************/
+
+UINT8 SD1_Erase_nSector(UINT32 addr_sta,UINT32 addr_end)
+{
+ UINT8 r,time;
+ UINT8 i=0;
+ UINT8 pCMD32[]={0x60,0x00,0x00,0x00,0x00,0xff}; //设置擦除的开始扇区地址
+ UINT8 pCMD33[]={0x61,0x00,0x00,0x00,0x00,0xff}; //设置擦除的结束扇区地址
+ UINT8 pCMD38[]={0x66,0x00,0x00,0x00,0x00,0xff}; //擦除扇区
+
+ if(!SD1_Addr_Mode)
+ {
+ addr_sta<<=9;addr_end<<=9;
+ //addr = addr * 512 将块地址(扇区地址)转为字节地址
+
+ }
+
+ pCMD32[1]=addr_sta>>24; //将开始地址写入到CMD32字节序列中
+ pCMD32[2]=addr_sta>>16;
+ pCMD32[3]=addr_sta>>8;
+ pCMD32[4]=addr_sta;
+
+ pCMD33[1]=addr_end>>24; //将开始地址写入到CMD32字节序列中
+ pCMD33[2]=addr_end>>16;
+ pCMD33[3]=addr_end>>8;
+ pCMD33[4]=addr_end;
+
+ time=0;
+ do
+ {
+ r=SD1_Write_Cmd(pCMD32);
+ time++;
+ if(time==TRY_TIME)
+ {
+ return(r); //命令写入失败
+ }
+ }while(r!=0);
+
+ time=0;
+ do
+ {
+ r=SD1_Write_Cmd(pCMD33);
+ time++;
+ if(time==TRY_TIME)
+ {
+ return(r); //命令写入失败
+ }
+ }while(r!=0);
+
+ time=0;
+ do
+ {
+ r=SD1_Write_Cmd(pCMD38);
+ time++;
+ if(time==TRY_TIME)
+ {
+ return(r); //命令写入失败
+ }
+ }while(r!=0);
+
+ return 0;
+
+}
+
+/****************************************************************************
+ - 功能描述:将buffer指向的512个字节的数据写入到SD卡的addr扇区中
+ - 参数说明:addr:扇区地址
+ buffer:指向数据缓冲区的指针
+ - 返回说明:调用成功,返回0x00,否则返回错误码
+ - 注:SD卡初始化成功后,读写扇区时,尽量将SPI速度提上来,提高效率
+
+cc modify :tf卡的读写次数是10W次,就按1万次来算,3600s 一个小时36000十个小时
+ ****************************************************************************/
+
+UINT8 L1_SD_Wsector(UINT32 addr,UINT8 *buffer) //向SD卡中的指定地址的扇区写入512个字节,使用CMD24(24号命令)
+{
+ UINT8 r,time;
+ UINT16 i=0;
+ UINT8 pCMD24[]={0x58,0x00,0x00,0x00,0x00,0xff}; //向SD卡中单个块(512字节,一个扇区)写入数据,用CMD24
+
+ if(!SD1_Addr_Mode)
+ {
+ addr<<=9; //addr = addr * 512 将块地址(扇区地址)转为字节地址
+ }
+
+ pCMD24[1]=addr>>24; //将字节地址写入到CMD24字节序列中
+ pCMD24[2]=addr>>16;
+ pCMD24[3]=addr>>8;
+ pCMD24[4]=addr;
+
+ time=0;
+ do
+ {
+ r=SD1_Write_Cmd(pCMD24);
+ time++;
+ if(time==TRY_TIME)
+ {
+
+ SET_SD1_CS_PIN(1);
+ return(r); //命令写入失败
+ }
+ }while(r!=0);
+
+ while(0XFF!=SD1_SPI_RByte()); //等待SD卡准备好,再向其发送命令及后续的数据
+
+ SD1_SPI_WByte(0xFE);//写入开始字节 0xfe,后面就是要写入的512个字节的数据
+
+ for(i=0;i<512;i++) //将缓冲区中要写入的512个字节写入SD1卡,减少循环次数,提高数据写入速度
+ {
+ SD1_SPI_WByte(*(buffer++));
+
+ /**SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));
+ SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));
+ SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));
+ SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));
+ SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));
+ SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));
+ SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));
+ SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));
+ SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));
+ SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));
+ SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));
+ SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));
+ SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));
+ SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));
+ SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));
+ SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));
+ SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));
+ SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));
+ SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));
+ SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));
+ SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));
+ SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));
+ SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));
+ SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));
+ SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));
+ SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));
+ SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));
+ SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));
+ SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));
+ SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));
+ SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));
+ SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));SD1_SPI_WByte(*(buffer++));**/
+ }
+
+ SD1_SPI_WByte(0xFF);
+ SD1_SPI_WByte(0xFF); //两个字节的CRC校验码,不用关心
+
+ r=SD1_SPI_RByte(); //读取返回值
+ if((r & 0x1F)!=0x05) //如果返回值是 XXX00101 说明数据已经被SD卡接受了
+ {
+ return(WRITE_BLOCK_ERROR); //写块数据失败
+ }
+
+ while(0xFF!=SD1_SPI_RByte());//等到SD卡不忙(数据被接受以后,SD卡要将这些数据写入到自身的FLASH中,需要一个时间)
+ //忙时,读回来的值为0x00,不忙时,为0xff
+
+ SET_SD1_CS_PIN(1);
+ SD1_SPI_WByte(0xFF); //按照SD卡的操作时序在这里补8个时钟
+
+ return(0); //返回0,说明写扇区操作成功
+}
+
+
+UINT8 L2_SD_Rsector(UINT16 addr,UINT8 *buffer)//从SD卡的指定扇区中读出512个字节,使用CMD17(17号命令)
+{
+ UINT32 addr32 = D_FILE_SECTOR;
+ addr32 += (UINT32)addr;
+ return L1_SD_Rsector(addr32,buffer);
+}
+UINT8 L2_SD_Wsector(UINT16 addr,UINT8 *buffer) //向SD卡中的指定地址的扇区写入512个字节,使用CMD24(24号命令)
+{
+ UINT32 addr32 = D_FILE_SECTOR;
+ addr32 += (UINT32)addr;
+ return L1_SD_Wsector(addr32,buffer);
+
+}
+UINT8 L2_SD_Erase_nSector(UINT16 addr_sta,UINT16 addr_end)
+{
+ UINT32 addr32= D_FILE_SECTOR,addr32end= D_FILE_SECTOR;
+ addr32 += (UINT32)addr_sta;
+ addr32end += (UINT32)addr_end;
+ return SD1_Erase_nSector(addr32,addr32end);
+
+}
+
+
+
+/****************************************************************************
+ - 功能描述:读取addr扇区的512个字节到buffer指向的数据缓冲区
+ - 参数说明:addr:扇区地址
+ buffer:指向数据缓冲区的指针
+ - 返回说明:调用成功,返回0x00,否则返回错误码
+ - 注:SD卡初始化成功后,读写扇区时,尽量将SPI速度提上来,提高效率
+ ****************************************************************************/
+
+UINT8 L1_SD_Rsector(UINT32 addr,UINT8 *buffer)//从SD卡的指定扇区中读出512个字节,使用CMD17(17号命令)
+{
+ UINT16 i;
+ UINT8 time,r;
+
+ UINT8 pCMD17[]={0x51,0x00,0x00,0x00,0x00,0x01}; //CMD17的字节序列
+
+ if(!SD1_Addr_Mode)
+ {
+ addr<<=9; //sector = sector * 512 将块地址(扇区地址)转为字节地址
+ }
+
+ pCMD17[1]=addr>>24; //将字节地址写入到CMD17字节序列中
+ pCMD17[2]=addr>>16;
+ pCMD17[3]=addr>>8;
+ pCMD17[4]=addr;
+
+ L0_uart0_uc('Q');
+
+ time=0;
+ do
+ {
+ r=SD1_Write_Cmd(pCMD17); //写入CMD17
+ time++;
+ ///L0_uart0_uc(0x30+time);
+ if(time==TRY_TIME)
+ {
+ L0_uart0_uc('T');
+ SET_SD1_CS_PIN(1);
+ return(READ_BLOCK_ERROR); //读块失败
+ }
+ }while(r!=0);
+
+ L0_uart0_uc('A');
+ time = 0;
+ while(SD1_SPI_RByte()!= 0xFE)
+ { //一直读,当读到0xfe时,说明后面的是512字节的数据了
+ time++;
+ ///L0_uart0_uc(0x30+time);
+ if(time==TRY_TIME)
+ {
+ L0_uart0_uc('F');
+ SET_SD1_CS_PIN(1);
+ return(READ_BLOCK_ERROR); //读块失败
+ }
+ }
+
+ //L0_uart0_uc('i');
+
+ for(i=0;i<512;i++) //将数据写入到数据缓冲区中
+ {
+ *(buffer++)=SD1_SPI_RByte();
+ /**
+ *(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();
+
+ *(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();
+ *(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();
+ *(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();
+ *(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();
+ *(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();
+ *(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();
+ *(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();
+ *(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();
+ *(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();
+ *(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();
+ *(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();
+ *(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();
+ *(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();
+ *(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();
+ *(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();
+ *(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();
+ *(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();
+ *(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();
+ *(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();
+ *(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();
+ *(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();
+ *(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();
+ *(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();
+ *(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();
+ *(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();
+ *(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();
+ *(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();
+ *(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();
+ *(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();
+ *(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();
+ *(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();*(buffer++)=SD1_SPI_RByte();
+
+
+ **/
+ }
+
+ SD1_SPI_RByte();
+ SD1_SPI_RByte();//读取两个字节的CRC校验码,不用关心它们
+
+ SET_SD1_CS_PIN(1);
+ SD1_SPI_WByte(0xFF); //按照SD1卡的操作时序在这里补8个时钟
+
+ return 0;
+}
+
+
+#if 0
+
+/****************************************************************************
+ - 功能描述:向addr扇区开始的nsec个扇区写入数据(★硬件多扇区写入)
+ - 参数说明:nsec:扇区数
+ addr:开始扇区地址
+ buffer:指向数据缓冲区的指针
+ - 返回说明:调用成功,返回0x00,否则返回错误码
+ - 注:SD卡初始化成功后,读写扇区时,尽量将SPI速度提上来,提高效率
+ ****************************************************************************/
+
+UINT8 SD1_Write_nSector(UINT32 nsec,UINT32 addr,UINT8 *buffer)
+{
+ UINT8 r,time;
+ UINT32 i=0,j=0,m=0;
+
+ UINT8 pCMD25[6]={0x59,0x00,0x00,0x00,0x00,0x01}; //CMD25用于完成多块连续写
+ UINT8 pCMD55[6]={0x77,0x00,0x00,0x00,0x00,0x01}; //CMD55,用于告知SD卡后面是ACMD,CMD55+ACMD23
+ UINT8 pACMD23[6]={0x57,0x00,0x00,0x00,0x00,0x01};//CMD23,多块连续预擦除
+
+ if(!SD1_Addr_Mode) addr<<=9;
+
+ pCMD25[1]=addr>>24;
+ pCMD25[2]=addr>>16;
+ pCMD25[3]=addr>>8;
+ pCMD25[4]=addr;
+
+ pACMD23[1]=nsec>>24;
+ pACMD23[2]=nsec>>16;
+ pACMD23[3]=nsec>>8;
+ pACMD23[4]=nsec;
+
+ if(SD1_Ver!=SD_VER_MMC) //如果不是MMC卡,则首先写入预擦除命令,CMD55+ACMD23,这样后面的连续块写的速度会更快
+ {
+ SD1_Write_Cmd(pCMD55);
+ SD1_Write_Cmd(pACMD23);
+ }
+
+ time=0;
+ do
+ {
+ r=SD1_Write_Cmd(pCMD25);
+ time++;
+ if(time==TRY_TIME)
+ {
+ return(WRITE_CMD25_ERROR); //命令写入失败
+ }
+ }while(r!=0);
+
+ while(0XFF!=SD1_SPI_RByte()); //等待SD卡准备好,再向其发送命令及后续的数据
+
+ for(j=0;j>24; //将字节地址写入到CMD17字节序列中
+ pCMD18[2]=addr>>16;
+ pCMD18[3]=addr>>8;
+ pCMD18[4]=addr;
+
+ time=0;
+ do
+ {
+ r=SD1_Write_Cmd(pCMD18); //写入CMD18
+ time++;
+ if(time==TRY_TIME)
+ {
+ return(READ_CMD18_ERROR); //写入CMD18失败
+ }
+ }while(r!=0);
+
+ for(j=0;j>7)+((pCSD[9]&0x03)<<1)+2;
+ csize=(pCSD[8]>>6)+((UINT16)pCSD[7]<<2)+((UINT16)(pCSD[6]&0x03)<<0x0A)+1;
+ Capacity=(UINT32)csize<<(n-9);//得到扇区数
+ }
+ return Capacity;
+}
+
+#endif
+
+
+
diff --git a/source/asp/nouse/asp_SI24R1m.c b/source/asp/nouse/asp_SI24R1m.c
new file mode 100644
index 0000000..fb4e8da
--- /dev/null
+++ b/source/asp/nouse/asp_SI24R1m.c
@@ -0,0 +1,1041 @@
+#include "asp_SI24R1m.h"
+
+TS_2g4_ ts_2g4 =
+{
+
+ 0,0,0,////ts_task_init, ///TS_task task;
+
+ 0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a, ///u8 Rbuf[32];
+ 0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,
+ 0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,
+ 0x0d,0x0a,
+
+ 0x31,0x36,0x37,0x38,0x39,0x32,0x33,0x34,0x35,0x3a, ///u8 Rbuf[32];
+ 0x46,0x47,0x48,0x49,0x41,0x42,0x43,0x44,0x45,0x4a,
+ 0x61,0x65,0x66,0x67,0x62,0x63,0x64,0x68,0x69,0x6a,
+ 0x0d,0x0a,
+ 0,///u8 Tbuf_change;
+ 0, ///U8 val;
+ 0, ///U8 con; ///config
+ 0, ///U8 sta;
+ 0, ///U8 sta_show;
+ 0, ///U8 fifo_sta;
+ 0, ///U8 id;
+ 0, ///U32 sendStamp;
+ 0, ///U32 over;
+ 0, ///U8 rx_en;
+ 0, ///U8 rx_ch;///有接收数据的通道号
+ 0, ///U8 rx_fifo_num;////RX_PW_P0-5 接收数据管道n的数据数量
+ ///
+ 0, ///U8 ok;
+ 0, ///U8 tx_en;
+ 0 ///U8 rs_mode;///发送或接收的模式
+ /// U8 ackFlag;
+
+
+ };
+
+
+
+#if 0
+1:前导码
+2: 地址
+3: ---------------- 包控制字----------------------
+ |-数据包长度(6bit) PID(1bit) NO_ACK(1bit)-|
+4: DDDDDDD负载数据(0-32Bytes)DDDD
+5: CRC
+
+
+比较别扭的地方:
+
+ 发送的地址寄存器只有一个,但是接收的寄存器共分6个 P0实际上就是最常用的接收地址
+
+总共三种模式:
+
+模式一 没有ACK
+没有ack , 也就是NO_ACK 子字段为1,
+发射方:FEATURE/EN_DYN_ACK = 1;
+W_TX_PAYLOAD_NOACK--> FIFO
+
+模式二 单纯ack 发送
+EN_AA设置自动回复
+
+ W_TX_PAYLOAD命令写TX FIFO
+发送: 地址等于接收的P0
+接收: ack返回给发送(发送地址等于发送端的接收地址P0)
+
+发送端发送数据后,没有收到对应地址返回的ACK(在ARD时间内),则重新发送上一帧数据
+ARC累加 重发次数达到最大后,产生MAX_RT 中断 (SETUP_RETR设置)
+
+模式三 ACK带返回数据
+
+发送:
+接收: W_ACK_PAYLOA命令写TX FIFO 返回的数据
+
+
+
+发送数据长度的问题:
+3.1 动态PAYLOAD长度 FEATURE.EN_DPL 1bit DYNPD.DPL_P0-5 此时包控制字段中的前六位是发送的数据长度
+R_RX_PL_WID命令读取数据长度
+
+3.2 静态PAYLAOD长度
+
+发送的数据长度应该一致,并且于接收方的RX_PW_PX寄存器值相同
+/********************************************************
+函数功能:L2_SI24R1_RX_Mode(PRIM_RX_SEND );
+入口参数:无
+返回 值:无
+*********************************************************/
+void L2_SI24R1_RX_Mode(U8 rev)
+{
+ D_SI24_CE_OFF();
+ ts_2g4.con = L1_SI24R1_RReg(CONFIG);
+ if(PRIM_RX_SEND == rev)
+ {
+ BITN_1(ts_2g4.con,PRIM_RX); ///1:发射模式
+ }else
+ {
+ BITN_0(ts_2g4.con,PRIM_RX); ///0:接收模式
+ }
+ L1_SI24R1_WReg(CONFIG,ts_2g4.con);
+ L1_SI24R1_WReg(STATUS, 0xff); //清除所有的中断标志位
+ D_SI24_CE_ON(); // 拉高CE启动接收设备
+}
+
+#endif
+
+void L3_task_2g4_reg(void)
+{
+
+ for(ts_2g4.id = 0;ts_2g4.id <= 0x1d; ts_2g4.id ++)
+ {
+ ts_2g4.tx_en = L1_SI24R1_RReg(ts_2g4.id);
+ L0_uart0_sendArray("reg(",4);
+ L0_uart0_uchex(ts_2g4.id );
+ L0_uart0_sendArray(") = ",4);
+ L0_uart0_uchex(ts_2g4.tx_en);
+ L0_uart0_uc(' ');
+ }
+
+
+
+ L1_SI24R1_RAddr(TX_ADDR,ts_2g4.Rbuf);
+
+ L0_uart0_sendArray("\r\nTX_ADDR = ",15);
+ L0_uart0_uchex(ts_2g4.Rbuf[0]);
+ L0_uart0_uchex(ts_2g4.Rbuf[1]);
+ L0_uart0_uchex(ts_2g4.Rbuf[2]);
+ L0_uart0_uchex(ts_2g4.Rbuf[3]);
+ L0_uart0_uchex(ts_2g4.Rbuf[4]);
+
+ L1_SI24R1_RAddr(RX_ADDR_P0,ts_2g4.Rbuf);
+
+ L0_uart0_sendArray("\r\nRX_ADDR_P0 = ",15);
+ L0_uart0_uchex(ts_2g4.Rbuf[0]);
+ L0_uart0_uchex(ts_2g4.Rbuf[1]);
+ L0_uart0_uchex(ts_2g4.Rbuf[2]);
+ L0_uart0_uchex(ts_2g4.Rbuf[3]);
+ L0_uart0_uchex(ts_2g4.Rbuf[4]);
+ L1_SI24R1_RAddr(RX_ADDR_P1,ts_2g4.Rbuf);
+
+ L0_uart0_sendArray("\r\nRX_ADDR_P1 = ",15);
+ L0_uart0_uchex(ts_2g4.Rbuf[0]);
+ L0_uart0_uchex(ts_2g4.Rbuf[1]);
+ L0_uart0_uchex(ts_2g4.Rbuf[2]);
+ L0_uart0_uchex(ts_2g4.Rbuf[3]);
+ L0_uart0_uchex(ts_2g4.Rbuf[4]);
+
+
+
+
+ L0_uart0_0d0a();
+}
+
+
+
+#if 0
+
+void L2_SI24R1_RX_Mode2(U8 rev)
+{
+/// D_SI24_CE_OFF();
+ ts_2g4.con = L1_SI24R1_RReg(CONFIG);
+
+ BITN_0(ts_2g4.con,PRIM_RX); ///0:接收模式
+
+ L1_SI24R1_WReg(CONFIG,ts_2g4.con);
+ L1_SI24R1_WReg(STATUS, 0xff); //清除所有的中断标志位
+ D_SI24_CE_ON(); // 拉高CE启动接收设备
+}
+
+TS_addr_2g4_ ts_addr_2g4={
+ 0xCC,0xa2,0xB3,0xC4,D_MSC_1V6_P0,///u8 TX[5]; ///发送基地址
+ 0xCC,0xa2,0xB3,0xC4,D_MSC_1V6_P0,///u8 RX_P0[5]; ///接收P0基地址
+ 0xCC,0xa2,0xB3,0xC4, D_MSC_1V6_P1,///P1=P1_base[4] u8 P1_base[5]; ///P1-P5基地址
+ ///P1-P5偏移地址,根据规格,在地地址5Byte的前提下,P1-P5四个字节的需要一样,后一个字节可以作为区分
+ D_MSC_1V6_P2,///P2 //P[0] //u8 P[4];
+ D_MSC_1V6_P3,///P3 //P[1]
+ D_MSC_1V6_P5,///P4 //P[2]
+ D_MSC_1V6_P5 ///P5 //P[3]
+};
+
+#else
+TS_addr_2g4_ ts_addr_2g4={
+ D_MSC_1V6_P0,0xC4,0xB3,0xa2,0xCC,///u8 TX[5]; ///发送基地址
+ D_MSC_1V6_P0,0xC4,0xB3,0xa2,0xCC,///u8 RX_P0[5]; ///接收P0基地址
+ D_MSC_1V6_P1,0xC4,0xB3,0xa2,0xCC, ///P1=P1_base[4] u8 P1_base[5]; ///P1-P5基地址
+ ///P1-P5偏移地址,根据规格,在地地址5Byte的前提下,P1-P5四个字节的需要一样,后一个字节可以作为区分
+ D_MSC_1V6_P2,///P2 //P[0] //u8 P[4];
+ D_MSC_1V6_P3,///P3 //P[1]
+ D_MSC_1V6_P4,///P4 //P[2]
+ D_MSC_1V6_P5 ///P5 //P[3]
+};
+
+
+#endif
+#if 0
+rev
+reg(00) = 0E reg(01) = 3F reg(02) = 3F reg(03) = 03 reg(04) = 37
+reg(05) = 28 reg(06) = 0F reg(07) = 0E reg(08) = 00 reg(09) = 00
+reg(0A) = 20 reg(0B) = 21 reg(0C) = 22 reg(0D) = 23 reg(0E) = 24
+reg(0F) = 25 reg(10) = 20 reg(11) = 00 reg(12) = 00 reg(13) = 00
+reg(14) = 00 reg(15) = 00 reg(16) = 00 reg(17) = 11 reg(18) = 00
+reg(19) = 00 reg(1A) = 00 reg(1B) = 00 reg(1C) = 3F reg(1D) = 06
+TX_ADDR =\020C4B3A2CC
+RX_ADDR_P1 =\021C4B3A2CC
+RX_ADDR_P0 =\020C4B3A2CC
+
+#endif
+///void *L2_SI24R1_init(TS_2g4_ *s);///()
+
+void (*L3_task_2g4_handle)(TS_2g4_ *s);
+
+void L2_SI24R1_init_config(void)
+{
+ L1_SI24R1_Init();
+ L3_task_2g4_handle = L2_task_2g4_handle_NOACK;
+}
+/***********
+
+
+// 地址宽度 5Bytes 默认
+ L1_SI24R1_WBuf(TX_ADDR, ts_addr_2g4.TX, TX_ADR_WIDTH); // 写入发送地址
+
+ ts_2g4.Tbuf[0]=0xaa;
+ ts_2g4.Tbuf[1]++;
+ ts_2g4.Tbuf[2]++;
+ ts_2g4.Tbuf[3]++;
+ ts_2g4.Tbuf[4]++;
+
+
+ L1_SI24R1_WBuf(W_TX_PAYLOAD_NOACK,ts_2g4.Tbuf,32);///需要发送的数据
+
+ **********/
+
+
+////L2_SI24R1_TRmode(PRIM_RX_SEND);
+////L2_SI24R1_TRmode(PRIM_RX_REV);
+
+void L2_SI24R1_TRmode(u8 mode)
+{
+ if (PRIM_RX_SEND == mode)
+ {
+ BITN_0(ts_2g4.con,PRIM_RX);
+ }else
+ {
+ BITN_1(ts_2g4.con,PRIM_RX);
+ }
+ D_SI24_Register();
+ L1_SI24R1_WReg(CONFIG,ts_2g4.con);
+//// D_SI24_Work();
+}
+
+////////最简单的接收和发送模式 无ACK
+void L2_SI24R1_init_NOACK_slave(void)
+{
+ L1_SI24R1_Init();
+///step 1: addr
+//// L1_SI24R1_WReg(SETUP_AW, B0000_0011); // 地址宽度 5Bytes 默认
+ L1_SI24R1_WBuf(TX_ADDR, ts_addr_2g4.TX, TX_ADR_WIDTH); // 写入发送地址
+ L1_SI24R1_WBuf(RX_ADDR_P0, ts_addr_2g4.RX_P0, TX_ADR_WIDTH); // 为了应答接收设备,接收通道0地址和发送地址相同
+ L1_SI24R1_WReg(EN_RXADDR, B0000_0001); ///使能数据管道0
+
+///step 3: RF config
+ L1_SI24R1_WReg(RF_CH, 40); // 选择射频通道0x40
+
+ L1_SI24R1_WReg(RX_PW_P0, 32);
+
+ L1_SI24R1_WReg(RF_SETUP, 0x08); // 数据传输率2Mbps,发射功率7dBm
+ L1_SI24R1_WReg(FEATURE,EN_DYN_ACK|EN_DPL);
+ L1_SI24R1_WReg(DYNPD, B0000_0001); ///使能接收管道0-动态负载长度(需EN_DPL及ENAA_Px)。
+
+ ts_2g4.con = MASK_RX_DR_ON ///接收中断打开
+ |MASK_TX_DS_ON ///发射中断关闭,在ack模式下
+ |MASK_MAX_RT_ON
+ |EN_CRC_ON
+ |EN_CRC_2Byte
+ |PWR_UP_POWER_ON /// 关断/开机模式配置 0:关断模式 1:开机模式
+ |PRIM_RX_REV;
+
+ L1_SI24R1_WReg(CONFIG,ts_2g4.con);
+
+ L1_SI24R1_WReg(STATUS, 0xff); //清除所有的中断标志位
+ D_SI24_Work();
+ /// L3_task_2g4_reg(); // 拉高CE启动接收设备
+}
+
+void L2_SI24R1_init_NOACK_master(void)
+{
+ D_SI24_Register();
+ // 地址宽度 5Bytes 默认
+ L1_SI24R1_WBuf(TX_ADDR, ts_addr_2g4.TX, TX_ADR_WIDTH); // 写入发送地址
+
+ L1_SI24R1_WBuf(RX_ADDR_P0, ts_addr_2g4.RX_P0, TX_ADR_WIDTH); // 为了应答接收设备,接收通道0地址和发送地址相同
+ L1_SI24R1_WReg(EN_RXADDR, B0000_0001); ///使能数据管道0
+
+
+ L1_SI24R1_WReg(FEATURE,EN_DYN_ACK|EN_DPL); ///使能动态负载长度
+ L1_SI24R1_WReg(DYNPD, B0000_0001); ///使能接收管道0-动态负载长度(需EN_DPL及ENAA_Px)。
+
+ L1_SI24R1_WReg(SETUP_AW, B0000_0011); ///5 byte addr width
+///step 3: RF config
+ L1_SI24R1_WReg(RF_CH, 40); // 选择射频通道0x40
+ L1_SI24R1_WReg(RF_SETUP, 0x08); // 数据传输率2Mbps,发射功率7dBm
+
+ ts_2g4.con = MASK_RX_DR_ON ///接收中断打开
+ |MASK_TX_DS_ON ///发射中断
+ |MASK_MAX_RT_ON
+ |EN_CRC_ON
+ |EN_CRC_2Byte
+ |PWR_UP_POWER_ON /// 关断/开机模式配置 0:关断模式 1:开机模式
+ |PRIM_RX_SEND;
+
+ L1_SI24R1_WReg(CONFIG,ts_2g4.con);
+ /// L3_task_2g4_reg();
+/// D_SI24_Work(); // 拉高CE启动接收设备
+}
+
+void L3_SI24R1_init_NOACK_master(void)
+{
+ L2_SI24R1_init_NOACK_master();
+ L2_SI24R1_TRmode(PRIM_RX_SEND);
+}
+
+
+void L2_task_2g4_init(void)
+{
+ L1_task_init(&ts_2g4.task);
+ L3_task_s_go(ts_2g4,D_task_init);
+ L2_SI24R1_init_NOACK_slave();
+ L2_SI24R1_init_NOACK_master();
+}
+
+#define L0_uart0_sendstr(x) ;
+///L3_task_2g4_handle_NOACK(&ts_2g4);
+////目前使用的no ack 标准应用,发送和接收
+void L2_task_2g4_handle_NOACK(TS_2g4_ *s)
+{
+ TTSS_Task_init():
+
+ L0_uart0_sendstr(" 2g4:NOACK /r/n");
+ ////打印reg寄存器的信息
+ L3_task_2g4_reg();
+ ///D_SI24_CE_ON();
+ L2_task_exit();
+ TTSS_Task_step(D_task_2g4_send):
+ L0_uart0_sendstr("\r\n 2g4:send-");
+ D_SI24_Register();
+
+ L2_SI24R1_TRmode(PRIM_RX_SEND);////delay 130us 后进入发送模式
+ ts_2g4.val = 8;
+ ts_2g4.Tbuf[0]='a';
+ ts_2g4.Tbuf[1]='b';
+ ts_2g4.Tbuf[2]='n';
+ ts_2g4.Tbuf[3]='m';
+ ts_2g4.Tbuf[4]='k';
+ ts_2g4.Tbuf[5]='3';
+ ts_2g4.Tbuf[6]='l';
+ ts_2g4.Tbuf[7]='q';
+ ts_2g4.Tbuf[8]='7';
+
+
+
+ L1_SI24R1_WBuf(W_TX_PAYLOAD_NOACK,ts_2g4.Tbuf,ts_2g4.val);///需要发送的数据
+ TTSS_overtime_init(s->over,D_Tdelay_3s);
+ ts_2g4.ok = 0;
+ D_SI24_Work();
+ L2_task_go(D_task_2g4_send_over);
+ TTSS_Task_step(D_task_2g4_send_over):
+ if(0 == D_SI24_IRQ_GET())///if IRQ管脚 为低,收到中断
+ {
+ ///();
+ ts_2g4.sta = L1_SI24R1_RReg(STATUS);
+ L1_SI24R1_WReg(STATUS,ts_2g4.sta);///写1 清除中断标志
+ if(BITN_G(ts_2g4.sta,TX_DS))///发送完成
+ {
+ L1_SI24R1_WReg(FLUSH_TX,0xff); //清除TX FIFO寄存器
+ ///L2_SI24R1_TRmode(PRIM_RX_REV);
+ L0_uart0_sendstr(" 2g4: ok\r\n");
+ ///L0_uart0_uc('s');
+ ts_2g4.ok = D_SI24R1_SENDOK;
+ }else if(BITN_G(ts_2g4.sta,MAX_RT))///重发计数溢出,说明一直没有接收到对应的ACK
+ {
+ L1_SI24R1_WReg(FLUSH_TX,0xff); //清除TX FIFO寄存器
+ L0_uart0_uc('M');
+ ts_2g4.ok = D_SI24R1_MAX_RT;
+ }else
+ {
+ L0_uart0_uc('E');
+ ts_2g4.ok = D_SI24R1_ER;
+ L1_SI24R1_WReg(FLUSH_TX,0xff);
+ }
+ L2_task_exit();
+ }else
+ {///发送闹钟如果溢出,说明发送失败 因为发送是芯片内部功能,所以除非芯片有状况,不应该出现失败
+ ////出现后必须进行重启等处理,由于无线芯片的特点,会出现类似的问题
+ TTSS_overtime_get(s->over)
+ L0_uart0_uc('o');
+ ts_2g4.ok = D_SI24R1_TIMEOVER;
+ L2_task_exit();
+ TTSS_overtime_end
+ }
+//////////////////////////////////////////////////////////////////////
+ TTSS_Task_step(D_task_2g4_REV):
+ L0_uart0_sendstr(" 2g4:rec mode\r\n");
+ L2_task_go(D_task_2g4_REV_start);
+
+ TTSS_Task_step(D_task_2g4_REV_start):
+ L0_uart0_sendstr("\r\n 2g4:rec S");
+ //// L2_SI24R1_init_NOACK_slave();
+// D_SI24_Register();
+ L2_SI24R1_TRmode(PRIM_RX_REV);////delay 130us 后进入接收模式
+ ////TTSS_overtime_init(s->over,D_Tdelay_5s);
+ ts_2g4.ok = 0;
+ D_SI24_Work();
+ L2_task_go(D_task_2g4_listen);
+ TTSS_Task_step(D_task_2g4_listen):
+ if(0 == D_SI24_IRQ_GET())///if IRQ管脚 为低,收到中断
+ {
+ D_SI24_Register();
+ ts_2g4.sta = L1_SI24R1_RReg(STATUS);
+ L1_SI24R1_WReg(STATUS,ts_2g4.sta);///写1 清除中断标志
+ if(BITN_G(ts_2g4.sta,RX_DR))///接收到发送端传递来的数据
+ {
+ ts_2g4.rx_fifo_num = L1_SI24R1_RReg(R_RX_PL_WID);
+ L1_SI24R1_RBuf(RD_RX_PLOAD,ts_2g4.Rbuf,ts_2g4.rx_fifo_num); //读取数据
+ L1_SI24R1_WReg(FLUSH_RX,0xff);
+ ts_2g4.ok = D_SI24R1_RX_DR;
+ /// L2_task_go(D_task_2g4_rev_what);
+ }else
+ {
+ L0_uart0_uc('E');
+ L1_SI24R1_WReg(FLUSH_TX,0xff);
+ L2_task_go(D_task_2g4_REV);
+ }
+ }else
+ {////侦听的过程中,每1s打印信息
+ TTSS_AreUok(s->over,D_Tdelay_1s,'L');
+ }
+ TTSS_Task_end();
+}
+#undef L0_uart0_sendstr
+
+
+
+
+#if 0
+
+
+
+
+ ///L3_task_2g4_handle_NOACK(&ts_2g4);
+ ////目前使用的no ack 标准应用,发送和接收
+ void L2_task_2g4_handle_NOACK3333(TS_2g4_ *s)
+ {
+ TTSS_Task_init():
+ L3_SI24R1_init_NOACK_master();
+ L3_task_2g4_reg();
+ L2_SI24R1_TRmode(PRIM_RX_SEND);
+ L0_uart0_sendstr(" 2g4:NOACK /r/n");
+ ////打印reg寄存器的信息
+ ///D_SI24_CE_ON();
+ L2_task_exit();
+ TTSS_Task_step(D_task_2g4_send):
+ L0_uart0_sendstr("\r\n 2g4:send-");
+ D_SI24_Register();
+ L3_SI24R1_init_NOACK_master();
+ ts_2g4.val = 5;
+ L2_SI24R1_TRmode(PRIM_RX_SEND);////delay 130us 后进入发送模式
+ ts_2g4.Tbuf[0]='a';
+ ts_2g4.Tbuf[1]='b';
+ ts_2g4.Tbuf[2]='n';
+ ts_2g4.Tbuf[3]='m';
+ ts_2g4.Tbuf[4]='k';
+ ts_2g4.Tbuf[5]='3';
+ ts_2g4.Tbuf[6]='l';
+ ts_2g4.Tbuf[7]='q';
+ ts_2g4.Tbuf[8]='7';
+
+
+ L1_SI24R1_WBuf(W_TX_PAYLOAD_NOACK,ts_2g4.Tbuf,ts_2g4.val);///需要发送的数据
+ TTSS_overtime_init(s->over,D_Tdelay_3s);
+ ts_2g4.ok = 0;
+ D_SI24_Work();
+ L2_task_go(D_task_2g4_send_over);
+ TTSS_Task_step(D_task_2g4_send_over):
+ if(0 == D_SI24_IRQ_GET())///if IRQ管脚 为低,收到中断
+ {
+ ///();
+ ts_2g4.sta = L1_SI24R1_RReg(STATUS);
+ L1_SI24R1_WReg(STATUS,ts_2g4.sta);///写1 清除中断标志
+ if(BITN_G(ts_2g4.sta,TX_DS))///发送完成
+ {
+ L1_SI24R1_WReg(FLUSH_TX,0xff); //清除TX FIFO寄存器
+ ///L2_SI24R1_TRmode(PRIM_RX_REV);
+ L0_uart0_sendstr(" 2g4: ok\r\n");
+ ///L0_uart0_uc('s');
+ ts_2g4.ok = D_SI24R1_SENDOK;
+ }else if(BITN_G(ts_2g4.sta,MAX_RT))///重发计数溢出,说明一直没有接收到对应的ACK
+ {
+ L1_SI24R1_WReg(FLUSH_TX,0xff); //清除TX FIFO寄存器
+ L0_uart0_uc('M');
+ ts_2g4.ok = D_SI24R1_MAX_RT;
+ }else
+ {
+ L0_uart0_uc('E');
+ ts_2g4.ok = D_SI24R1_ER;
+ L1_SI24R1_WReg(FLUSH_TX,0xff);
+ }
+ L2_task_exit();
+ }else
+ {///发送闹钟如果溢出,说明发送失败 因为发送是芯片内部功能,所以除非芯片有状况,不应该出现失败
+ ////出现后必须进行重启等处理,由于无线芯片的特点,会出现类似的问题
+ TTSS_overtime_get(s->over)
+ L0_uart0_uc('o');
+ ts_2g4.ok = D_SI24R1_TIMEOVER;
+ L2_task_exit();
+ TTSS_overtime_end
+ }
+ //////////////////////////////////////////////////////////////////////
+ TTSS_Task_step(D_task_2g4_REV):
+ L0_uart0_sendstr(" 2g4:rec mode\r\n");
+ L2_SI24R1_init_NOACK_slave();
+
+ L3_task_2g4_reg();
+ TTSS_Task_step(D_task_2g4_REV_start):
+ L0_uart0_sendstr("\r\n 2g4:rec S");
+ L2_SI24R1_init_NOACK_slave();
+ D_SI24_Register();
+ L2_SI24R1_TRmode(PRIM_RX_REV);////delay 130us 后进入接收模式
+ ////TTSS_overtime_init(s->over,D_Tdelay_5s);
+ ts_2g4.ok = 0;
+ D_SI24_Work();
+ L2_task_go(D_task_2g4_listen);
+ TTSS_Task_step(D_task_2g4_listen):
+ if(0 == D_SI24_IRQ_GET())///if IRQ管脚 为低,收到中断
+ {
+ D_SI24_Register();
+ ts_2g4.sta = L1_SI24R1_RReg(STATUS);
+ L1_SI24R1_WReg(STATUS,ts_2g4.sta);///写1 清除中断标志
+ if(BITN_G(ts_2g4.sta,RX_DR))///接收到发送端传递来的数据
+ {
+ L0_uart0_sendstr("\r\n 2g4:ok");
+ ts_2g4.rx_fifo_num = L1_SI24R1_RReg(R_RX_PL_WID);
+ L1_SI24R1_RBuf(RD_RX_PLOAD,ts_2g4.Rbuf,ts_2g4.rx_fifo_num); //读取数据
+ L1_SI24R1_WReg(FLUSH_RX,0xff);
+ ts_2g4.ok = D_SI24R1_RX_DR;
+ /// L2_task_go(D_task_2g4_rev_what);
+ }else
+ {
+ L0_uart0_uc('E');
+ L1_SI24R1_WReg(FLUSH_TX,0xff);
+ L2_task_go(D_task_2g4_REV);
+ }
+ }else
+ {////侦听的过程中,每1s打印信息
+ TTSS_AreUok(s->over,D_Tdelay_1s,'L');
+ }
+ TTSS_Task_end();
+ }
+
+
+ TTSS_Task_step(D_task_2g4_rev_what):
+ L0_uart0_sendArrayHex(ts_2g4.Rbuf,ts_2g4.rx_fifo_num);
+ L0_uart0_0d0a();
+ ts_2g4.m = (Modbus03 *)ts_2g4.Rbuf;
+ L0_uart0_uc(' ');
+ L0_uart0_uc('R');
+ L0_uart0_uchex(ts_2g4.m->reg);
+ switch(ts_2g4.m->reg)
+ {
+ case 1:
+
+
+ break;
+ default:
+
+ break;
+
+ };
+ L2_task_go(D_task_2g4_send);
+ TTSS_Task_step(D_task_2g4_send_next):
+ ////L2_SI24R1_TRmode(PRIM_RX_SEND);
+ L2_task_go(D_task_2g4_send);
+
+ ///L2_task_go(D_task_2g4_send);
+ ///L2_task_go(D_task_2g4_send);
+ ///TTSS_overtime_init(s->over,D_Tdelay_100ms);///100ms闹钟
+ // L2_task_exit();
+ // L2_task_exit();
+else
+ {///没有在闹钟规定的时间收到数据
+ TTSS_overtime_get(s->over)
+ L0_uart0_uc('e');
+ L2_task_go(D_task_2g4_send);
+ TTSS_overtime_end
+ }
+
+///L3_task_2g4_handle(&ts_2g4);
+////目前使用的no ack
+void L3_task_2g4_handle_NOACK_master(TS_2g4_ *s)
+{
+ TTSS_Task_init():
+ L2_SI24R1_init_NOACK_master();
+ L0_uart0_sendArray("master /r/n",9);
+ ////打印reg寄存器的信息
+ L3_task_2g4_reg();
+ ///D_SI24_CE_ON();
+ L2_task_go(D_task_2g4_send);
+ TTSS_Task_step(D_task_2g4_send):
+ if(ts_2g4.sta_show)
+ {ts_2g4.sta_show = 0;
+ L0_uart0_sendArray("send --\r\n",9);
+ D_SI24_Register();
+ L1_SI24R1_WBuf(W_TX_PAYLOAD_NOACK,ts_2g4.Tbuf,ts_2g4.val);///需要发送的数据
+ L2_SI24R1_TRmode(PRIM_RX_SEND);////delay 130us 后进入发送模式
+ TTSS_overtime_init(s->over,D_Tdelay_5s);
+ L2_task_go(D_task_2g4_send_over);
+ }
+ TTSS_Task_step(D_task_2g4_send_over):
+ if(0 == D_SI24_IRQ_GET())///if IRQ管脚 为低,收到中断
+ {
+ D_SI24_Register();
+ ts_2g4.sta = L1_SI24R1_RReg(STATUS);
+ L1_SI24R1_WReg(STATUS,ts_2g4.sta);///写1 清除中断标志
+ if(BITN_G(ts_2g4.sta,TX_DS))///发送完成
+ {
+ L1_SI24R1_WReg(FLUSH_TX,0xff); //清除TX FIFO寄存器
+ L2_SI24R1_TRmode(PRIM_RX_REV);
+ L0_uart0_uc('s');
+ TTSS_overtime_init(s->over,D_Tdelay_100ms);///100ms闹钟
+ ///delay 130us
+ L2_task_go(D_task_2g4_ack);
+ }else if(BITN_G(ts_2g4.sta,MAX_RT))///重发计数溢出,说明一直没有接收到对应的ACK
+ {
+ L1_SI24R1_WReg(FLUSH_TX,0xff); //清除TX FIFO寄存器
+ L0_uart0_uc('M');
+ L2_task_go(D_task_2g4_send);
+ }else
+ {
+ L0_uart0_uc('E');
+ L1_SI24R1_WReg(FLUSH_TX,0xff);
+ L2_task_go(D_task_2g4_send);
+ }
+ }else
+ {///发送闹钟如果溢出,说明发送失败
+ TTSS_overtime_get(s->over)
+ L0_uart0_uc('o');
+ L2_task_go(D_task_2g4_send);
+ TTSS_overtime_end
+ }
+ TTSS_Task_step(D_task_2g4_ack):
+ if(0 == D_SI24_IRQ_GET())///if IRQ管脚 为低,收到中断
+ {
+ D_SI24_Register();
+ ts_2g4.sta = L1_SI24R1_RReg(STATUS);
+ L1_SI24R1_WReg(STATUS,ts_2g4.sta);///写1 清除中断标志
+ if(BITN_G(ts_2g4.sta,RX_DR))///接收到发送端传递来的数据
+ {
+ ts_2g4.rx_fifo_num = L1_SI24R1_RReg(R_RX_PL_WID);
+ L1_SI24R1_RBuf(RD_RX_PLOAD,ts_2g4.Rbuf,ts_2g4.rx_fifo_num); //读取数据
+ L1_SI24R1_WReg(FLUSH_RX,0xff);
+ L2_task_go(D_task_2g4_ack_what);
+ }else
+ {
+ L0_uart0_uc('E');
+ L1_SI24R1_WReg(FLUSH_TX,0xff);
+ L2_task_go(D_task_2g4_send);
+ }
+ }else
+ {///没有在闹钟规定的时间收到数据
+ TTSS_overtime_get(s->over)
+ L0_uart0_uc('e');
+ L2_task_go(D_task_2g4_send);
+ TTSS_overtime_end
+ }
+ TTSS_Task_step(D_task_2g4_ack_what):
+ L0_uart0_sendArrayHex(ts_2g4.Rbuf,ts_2g4.rx_fifo_num);
+ L0_uart0_0d0a();
+ ts_2g4.m = (Modbus03 *)ts_2g4.Rbuf;
+ L0_uart0_uc(' ');
+ L0_uart0_uc('R');
+ L0_uart0_uchex(ts_2g4.m->reg);
+ switch(ts_2g4.m->reg)
+ {
+ case 1:
+
+
+ break;
+ default:
+
+ break;
+
+ };
+ L2_task_go(D_task_2g4_send);
+ TTSS_Task_step(D_task_2g4_send_next):
+ ////L2_SI24R1_TRmode(PRIM_RX_SEND);
+ L2_task_go(D_task_2g4_send);
+ TTSS_Task_end();
+}
+
+/*****
+
+
+///L1_SI24R1_TxData(WR_TX_PLOAD,ts_2g4.Tbuf,6);///需要发送的数据
+L1_SI24R1_WBuf(W_TX_PAYLOAD_NOACK,ts_2g4.Tbuf,32);///需要发送的数据
+
+///step 2: ch config
+ /// L1_SI24R1_WReg(FEATURE,EN_DPL| ///使能动态负载长度
+/// EN_ACK_PAYd); ///使能ACK负载(带负载数据的ACK包)
+
+
+/// L1_SI24R1_WReg(DYNPD, B0000_0001); ///使能接收管道0-动态负载长度(需EN_DPL及ENAA_Px)。
+/// L1_SI24R1_WReg(EN_AA, B0000_0001); ///使能数据管道0自动确认
+ L1_SI24R1_WReg(EN_RXADDR, B0000_0001); ///使能数据管道0
+
+
+//// L1_SI24R1_WReg(SETUP_RETR, B0011_0111); ///使能数据管道0-5
+
+///step
+ *******/
+
+/// L1_SI24R1_WReg(STATUS, 0xff); //清除所有的中断标志位
+
+///L0_uart0_uc('S');
+///L0_uart0_uchex(ts_2g4.sta);
+///L0_uart0_uc(' ');
+/**L0_uart0_uc('C');
+L0_uart0_uc(' ');
+ts_2g4.sta = L1_SI24R1_RReg(FIFO_STATUS);
+L0_uart0_uchex(ts_2g4.sta);
+ts_2g4.sta = L1_SI24R1_RReg(OBSERVE_TX);
+L0_uart0_uchex(ts_2g4.sta);
+ts_2g4.sta = L1_SI24R1_RReg(STATUS);
+L0_uart0_uchex(ts_2g4.sta);
+L0_uart0_uc(' ');
+
+**/
+
+void L3_task_2g4_handle_NOACK_slave(TS_2g4_ *s)
+{
+ TTSS_Task_init():
+ L2_SI24R1_init_NOACK_slave();
+ L2_task_go(D_task_2g4_REV);
+ TTSS_Task_step(D_task_2g4_REV):
+ ////打印reg寄存器的信息
+ /// L3_task_2g4_reg();
+ L0_uart0_sendArray("\r\nPRIM_RX_REV \r\n",17);
+ L2_task_go(D_task_2g4_ack);
+ TTSS_Task_step(D_task_2g4_ack):
+ if(0 == D_SI24_IRQ_GET())///if IRQ管脚 为低,收到中断
+ {
+ ts_2g4.sta = L1_SI24R1_RReg(STATUS);
+ /// L0_uart0_uc('R');
+ // L0_uart0_uchex(ts_2g4.sta);
+ /// L0_uart0_uc(' ');
+ if(BITN_G(ts_2g4.sta,RX_DR))///接收到发送端传递来的数据
+ {
+ ///ts_2g4.rx_ch = (ts_2g4.sta&B0000_1110)>>1;
+ /// ts_2g4.rx_fifo_num = L1_SI24R1_RReg(RX_PW_P0);///?读出的数据一直是
+ ts_2g4.rx_fifo_num = L1_SI24R1_RReg(R_RX_PL_WID);
+ /// L0_uart0_sendArray("\r\nR_RX_PL_WID =",15);
+ // L0_uart0_uchex(ts_2g4.rx_fifo_num);
+ /// L0_uart0_uc(' ');
+ L1_SI24R1_RBuf(RD_RX_PLOAD,ts_2g4.Rbuf,ts_2g4.rx_fifo_num); //读取数据
+ L1_SI24R1_WReg(FLUSH_RX,0xff);
+
+ L2_task_go(D_task_2g4_ackPayload_UPDATE);
+
+
+ }else if(BITN_G(ts_2g4.sta,MAX_RT))///重发计数溢出,说明一直没有接收到对应的ACK
+ {
+ L1_SI24R1_WReg(FLUSH_TX,0xff); //清除TX FIFO寄存器
+ L0_uart0_uc('M');
+ L2_task_go(D_task_2g4_ack);
+ }else
+ {
+ L0_uart0_uc('E');
+ L2_task_go(D_task_2g4_ack);
+ }
+
+ L1_SI24R1_WReg(STATUS,ts_2g4.sta);///写1 清除中断标志
+ }
+ TTSS_Task_step(D_task_2g4_ackPayload_UPDATE):
+ L0_uart0_sendArrayHex(ts_2g4.Rbuf,ts_2g4.rx_fifo_num);
+ L0_uart0_0d0a();
+ TS_d32_
+ ts_2g4.Rbuf
+
+ L2_task_go(D_task_2g4_ack);
+ TTSS_Task_end();
+}
+
+
+#endif
+
+
+/*******************************************************
+模式二:NOACK 通信
+发射方配置:
+ spi_write_buf( TX_ADDR, TX_ADDRESS, 5); // 写入发送地址
+ spi_rw_reg( FEATURE, 0x01); // 使能 W_TX_PAYLOAD_NOACK 命令
+ spi_write_buf(W_TX_PAYLOAD_NOACK, buf, TX_PLOAD_WIDTH); // 写 FIFO
+ spi_rw_reg(SETUP_AW, 0x03); // 5 byte Address width
+ spi_rw_reg( RF_CH, 0x40); // 选择射频通道 0x40
+ spi_rw_reg(RF_SETUP, 0x08); // 数据传输率 2Mbps
+ spi_rw_reg( CONFIG, 0x0e); //配置为发射模式、CRC 为 2Bytes
+ CE = 1;
+接收方配置:
+spi_write_buf( RX_ADDR_P0, TX_ADDRESS, 5); // 接收地址
+ spi_rw_reg( EN_RXADDR, 0x01); // 使能接收通道 0
+ Preliminary Si24R1
+ spi_rw_reg( RF_CH, 0x40); // 选择射频信道
+ spi_rw_reg( RX_PW_P0, TX_PLOAD_WIDTH); //设置接收通道 0 负载数据宽度
+ spi_rw_reg( RF_SETUP, 0x08); // 数据传输率 2Mbps,-18dbm TX power
+ spi_rw_reg( CONFIG, 0x0f); // 配置为接收方、CRC 为 2Bytes
+ CE = 1;
+
+
+*****************************************************/
+
+/********************************************************
+函数功能:读取接收数据
+入口参数:rxbuf:接收数据存放首地址
+返回 值:0:接收到数据
+ 1:没有接收到数据
+07
+STATUS 状态寄存器(SPI操作开始,状态寄存器值通过
+MISO串行输出)。
+
+Reserved
+7 -----------------------------------------
+0 R/W 保留
+
+RX_DR
+6 ----------------------------------------
+0 R/W RX FIFO有值标志位,写’1’清除。
+
+TX_DS
+5 ----------------------------------------
+0 R/W 发射端发射完成中断位,如果是ACK模式,则收到
+ACK确认信号后TX_DS位置1,写’1’清除。
+
+MAX_RT
+4 ----------------------------------------
+0 R/W 达到最大重发次数中断位,写’1’清除。
+
+RX_P_NO
+3:1 ----------------------------------------------
+111 R 收到数据的接收管道PPP号,可以通过SPI读出。
+000-101:数据管道0-5
+110:不可用
+111:RX FIFO为空
+
+TX_FULL
+0 ----------------------------------------------
+0 R
+TX FIFO满标志位。
+
+
+
+*********************************************************/
+ /*************************
+
+ void main2(void)
+ {
+ KEY1 = 1;
+ KEY2 = 1;
+ L1_SI24R1_Init();
+ L2_SI24R1_RX_Mode();
+ while(1)
+ {
+ u8 buf[32] = {0};
+ KEY1 = 1;
+ KEY2 = 1;
+ if(!KEY1 || !KEY2)
+ {
+ Lc_delay_ms(10);
+ if(!KEY1)
+ {
+ buf[0] = 0x55;
+ L2_SI24R1_TX_Mode();
+ L2_SI24R1_TxPacket(buf);
+ Lc_delay_ms(200);
+ }
+ if(!KEY2)
+ {
+ buf[0] = 0xAA;
+ L2_SI24R1_TX_Mode();
+ L2_SI24R1_TxPacket(buf);
+ Lc_delay_ms(200);
+ }
+ buf[0] = 0;
+ L2_SI24R1_RX_Mode();
+ }
+
+ if(!L2_SI24R1_RxPacket(buf))
+ {
+ switch(buf[0])
+ {
+ case 0x55:
+ LED3 = 0;
+ Lc_delay_ms(100);
+ LED3 = 1;
+ Lc_delay_ms(100);
+ break;
+ case 0xAA:
+ LED4 = 0;
+ Lc_delay_ms(100);
+ LED4 = 1;
+ Lc_delay_ms(100);
+ break;
+ default:
+ break;
+ }
+ buf[0] = 0;
+ }
+
+ }
+ }
+
+ ***************/
+
+
+/********
+
+L0_uart0_sendArray("\r\nS = ",6);
+///while(9)
+{
+ L0_uart0_uchex(0xaa);
+ L0_uart0_uchex(0x55);
+}
+L0_uart0_uchex(state);
+ Lc_delay_ms(600);
+L0_uart0_0d0a();
+
+第一次没有读取数据 把所有的寄存器给读取出来 然后对比
+
+
+reg02 使能管道 01 管道1
+reg00 b xxx10 关闭crc 1byte 开机 接收
+ b 1011 开启crc 1byte 开机 发送
+rev
+reg(00) = 02 reg(01) = 00 reg(02) = 01 reg(03) = 03 reg(04) = 03
+reg(05) = 28 reg(06) = 0F reg(07) = 0E reg(08) = 00 reg(09) = 00
+reg(0A) = 0A reg(0B) = C2 reg(0C) = C3 reg(0D) = C4 reg(0E) = C5
+reg(0F) = C6 reg(10) = E7 reg(11) = 20 reg(12) = 00 reg(13) = 00
+reg(14) = 00 reg(15) = 00 reg(16) = 00 reg(17) = 11 reg(18) = 00
+reg(19) = 00 reg(1A) = 00 reg(1B) = 00 reg(1C) = 00 reg(1D) = 01
+send
+reg(00) = 0B reg(01) = 00 reg(02) = 03 reg(03) = 03 reg(04) = 0A
+reg(05) = 28 reg(06) = 0F reg(07) = 0E reg(08) = 00 reg(09) = 00
+reg(0A) = 0A reg(0B) = C2 reg(0C) = C3 reg(0D) = C4 reg(0E) = C5
+reg(0F) = C6 reg(10) = 0A reg(11) = 00 reg(12) = 00 reg(13) = 00
+reg(14) = 00 reg(15) = 00 reg(16) = 00 reg(17) = 01 reg(18) = 00
+reg(19) = 00 reg(1A) = 00 reg(1B) = 00 reg(1C) = 00 reg(1D) = 01
+
+.over
+
+0a 39:0 E7E7E 7E7E7
+ E7 E7 E7 E7 E7
+ 5X7 =35
+
+....
+reg(17) = 11
+
+reg(10) = E7 TX_ADDRESS
+reg(10) = 0A TX_ADDRESS
+reg(17) = 01
+
+u8 code TX_ADDRESS[TX_ADR_WIDTH] = {0x0A,0x01,0x07,0x0E,0x01}; // 定义一个静态发送地址
+
+
+**********/
+
+#if 0
+/********************************************************
+函数功能:SI24R1接收模式初始化
+入口参数:无
+返回 值:无
+*********************************************************/
+void L2_SI24R1_RX_Mode(void)
+{
+ CE = 0;
+ L1_SI24R1_WBuf(RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH); // 接收设备接收通道0使用和发送设备相同的发送地址
+ L1_SI24R1_WReg(EN_AA, 0x01); // 使能接收通道0自动应答
+ L1_SI24R1_WReg(EN_RXADDR, 0x01); // 使能接收通道0
+ L1_SI24R1_WReg(RF_CH, 40); // 选择射频通道0x40
+ L1_SI24R1_WReg(RX_PW_P0, TX_PLOAD_WIDTH); // 接收通道0选择和发送通道相同有效数据宽度
+ L1_SI24R1_WReg(RF_SETUP, 0x0f); // 数据传输率2Mbps,发射功率7dBm
+ L1_SI24R1_WReg(CONFIG, 0x0f); // CRC使能,16位CRC校验,上电,接收模式
+ L1_SI24R1_WReg(STATUS, 0xff); //清除所有的中断标志位
+ CE = 1; // 拉高CE启动接收设备
+}
+
+
+/********************************************************
+函数功能:SI24R1发送模式初始化
+入口参数:无
+返回 值:无
+*********************************************************/
+void L2_SI24R1_TX_Mode(void)
+{
+ CE = 0;
+ L1_SI24R1_WBuf(TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH); // 写入发送地址
+ L1_SI24R1_WBuf(RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH); // 为了应答接收设备,接收通道0地址和发送地址相同
+
+ L1_SI24R1_WReg(EN_AA, 0x01); // 使能接收通道0自动应答
+ L1_SI24R1_WReg(EN_RXADDR, 0x01); // 使能接收通道0
+ L1_SI24R1_WReg(SETUP_RETR, 0x0a); // 自动重发延时等待250us+86us,自动重发10次
+ L1_SI24R1_WReg(RF_CH, 40); // 选择射频通道0x40
+ L1_SI24R1_WReg(RF_SETUP, 0x0f); // 数据传输率2Mbps,发射功率7dBm
+ L1_SI24R1_WReg(CONFIG, 0x0e); // CRC使能,16位CRC校验,上电
+ //CE = 1;
+}
+
+v3.2XF6420136C06938`-
+sendmaster /r
+reg(00) = 0F reg(01) = 3F reg(02) = 3F reg(03) = 03 reg(04) = 03 reg(05) = 28 reg(06) = 0F
+reg(07) = 0E reg(08) = 00 reg(09) = 00 reg(0A) = CC reg(0B) = CC reg(0C) = C2 reg(0D) = C3
+reg(0E) = C4 reg(0F) = C5 reg(10) = CC reg(11) = 00 reg(12) = 00 reg(13) = 00 reg(14) = 00
+reg(15) = 00 reg(16) = 00 reg(17) = 11 reg(18) = 00 reg(19) = 00 reg(1A) = 00 reg(1B) = 00
+reg(1C) = 3F reg(1D) = 06
+
+.0F11000E .0F11000E .0F11000E .0F11000E .0F11000E .0F11000E .0F11000E abcdefg麻 over
+
+v3.2XF642C5E203A72A`-
+rev C 0F 11 0E S
+reg(00) = 0E reg(01) = 3F reg(02) = 3F reg(03) = 03 reg(04) = 03 reg(05) = 28 reg(06) = 0F
+reg(07) = 1E reg(08) = 13 reg(09) = 00 reg(0A) = CC reg(0B) = CC reg(0C) = C2 reg(0D) = C3
+reg(0E) = C4 reg(0F) = C5 reg(10) = CC reg(11) = 00 reg(12) = 00 reg(13) = 00 reg(14) = 00
+reg(15) = 00 reg(16) = 00 reg(17) = 01 reg(18) = 00 reg(19) = 00 reg(1A) = 00 reg(1B) = 00 reg(1C) = 3F reg(1D) = 06
+
+
+PRIM_RX_REV
+.0E11130E .0E11130E
+
+
+
+#endif
+
+
+
diff --git a/source/asp/nouse/asp_SI24R1m.h b/source/asp/nouse/asp_SI24R1m.h
new file mode 100644
index 0000000..2bb31eb
--- /dev/null
+++ b/source/asp/nouse/asp_SI24R1m.h
@@ -0,0 +1,113 @@
+#ifndef asp_SI24R1m_
+#define asp_SI24R1m_
+
+
+#include "bsp_SI24R1.h"
+typedef struct
+{
+ u8 TX[5]; ///发送基地址
+ u8 RX_P0[5]; ///接收P0基地址
+ u8 P1_base[5]; ///P1地址 (前4字节)P2-P5基地址
+ u8 P[4]; ///P2-P5偏移地址,根据规格,在地地址5Byte的前提下,P1-P5四个字节的需要一样,后一个字节可以作为区分
+ ///u8 d32[]
+}TS_addr_2g4_;
+
+///// 默认所有的地址的基地址是一样的,这样策略比较简单
+typedef struct
+{
+ u8 x;///
+ u8 y;///
+ u8 z;///
+/// U8 ackFlag;
+}TS_xyz_;
+
+///// 默认所有的地址的基地址是一样的,这样策略比较简单
+typedef struct
+{
+ u8 filter0;///
+ u8 filter1;///
+ TS_xyz_ xyz[30];///
+/// U8 ackFlag;
+}TS_d32_;
+
+
+typedef struct
+{
+ TS_task task;
+ u8 Rbuf[32];
+ u8 Tbuf[32];
+ u8 Tbuf_change;
+ U8 val;
+ U8 con; ///config
+ U8 sta;
+ U8 sta_show;
+ U8 fifo_sta;
+ U8 id;
+ U32 sendStamp;
+ U32 over;
+ U8 rx_en;
+ U8 rx_ch;///有接收数据的通道号
+ U8 rx_fifo_num;////RX_PW_P0-5 接收数据管道n的数据数量
+
+ U8 ok;
+ U8 tx_en;
+ U8 rs_mode;///发送或接收的模式
+ Modbus03 *m;
+/// U8 ackFlag;
+}TS_2g4_;
+extern TS_2g4_ ts_2g4;
+void L3_task_2g4_handle_NOACK_master(TS_2g4_ *s);
+///void (*L3_task_2g4_handle)(TS_2g4_ *s);
+void L2_SI24R1_init_config(void);
+extern void (*L3_task_2g4_handle)(TS_2g4_ *s);
+
+
+
+
+#define D_MSC_1V6_P0 0x20/// master slave communication 1v6 通讯地址配置
+#define D_MSC_1V6_P1 0x21/// master slave communication 1v6 通讯地址配置
+#define D_MSC_1V6_P2 0x22/// master slave communication 1v6 通讯地址配置
+#define D_MSC_1V6_P3 0x23/// master slave communication 1v6 通讯地址配置
+#define D_MSC_1V6_P4 0x24/// master slave communication 1v6 通讯地址配置
+#define D_MSC_1V6_P5 0x25/// master slave communication 1v6 通讯地址配置
+
+
+
+#define D_SI24_Standby(); D_SI24_CE_OFF();
+#define D_SI24_Work(); D_SI24_CE_ON();
+#define D_SI24_Register(); D_SI24_CE_OFF();
+
+
+#define D_task_2g4_send 0x51
+#define D_task_2g4_listen 0x61
+#define D_task_2g4_REV 0x62
+#define D_task_2g4_REV_start 0x82
+
+#define D_task_2g4_rev_what 0x72
+
+#define D_task_2g4_send_over 0x63
+#define D_task_2g4_send_next 0x64
+
+#define D_task_2g4_rx 0x52
+#define D_task_2g4_wait 0x53
+#define D_task_2g4_ackPayload_UPDATE 0x54
+
+
+
+#define D_SI24R1_SENDOK 1
+#define D_SI24R1_MAX_RT 2
+#define D_SI24R1_ER 3
+#define D_SI24R1_TIMEOVER 4
+
+#define D_SI24R1_RX_DR 6
+
+
+extern void L2_task_2g4_init(void);
+void L2_task_2g4_handle_NOACK(TS_2g4_ *s);
+
+
+#endif
+
+
+
+
diff --git a/source/asp/nouse/asp_task_WC.c b/source/asp/nouse/asp_task_WC.c
new file mode 100644
index 0000000..d08e5db
--- /dev/null
+++ b/source/asp/nouse/asp_task_WC.c
@@ -0,0 +1,123 @@
+#include "asp_task_WC.h"
+
+TS_WCapp_ ts_WCapp;
+
+
+#define D_task_WC_send 0x51
+
+#define D_task_WC_rx 0x52
+#define D_task_WC_wait 0x53
+#define D_task_WC_ack 0x54
+
+
+#define D_task_WC_listen 0x61
+#define D_task_WC_REV 0x62
+
+#define D_task_WC_send_over 0x63
+#define D_task_WC_send_next 0x64
+
+#define D_task_WC_REC_ACK 0x65
+#define D_task_WC_rev_what 0x72
+
+#define D_task_WC_END 0x74
+
+
+void L2_task_WC_init(void)
+{
+ L1_task_init(&ts_WCapp.task);
+ L3_task_s_go(ts_WCapp,D_task_init);
+}
+
+
+////对应文字版流程图
+#ifdef doc909809
+从机流程图: 文本版,将来甚至可以直接生成流程图及代码。20210409
+step 1;进入接收模式
+step 2 判断:
+ 接收到数据进入解析step 3
+ 未接收到一直等待
+step 3:解析
+ 如果是本机需要响应的命令 进入step4
+step 4:应答发送
+ 返回主机从机的信息
+step 5;显示信息
+
+
+测试步骤
+ 1,验证流程的逻辑完整性
+ 2,验证流程中每一步骤的时间合理性
+ 3,验证流程中每一步骤的功能分配的合理性
+ 4,验证流程和程序对应的正确性
+ 5,检查handdle调用入口的有效性(是否会被执行,以及分配时间的合理性)
+ 6,检查任务初始化init的调用有效性,确保在handle执行前被调用
+ 7,检查init的打印是否正确
+ 8,分步骤检查,及打印
+ 9,模拟关键
+
+#endif
+
+///L3_task_WC_handle_NOACK(&ts_WCapp);
+////目前使用的no ack 标准应用,发送和接收
+void L3_task_WC_master_handle(TS_WCapp_ *s)
+{
+ //---------------------------------------------------------------//
+ TTSS_Task_init():
+ L0_uart0_sendstr("mC:init\r\n");
+ L2_SI24R1_init_config();
+ L2_task_2g4_init();
+ L2_task_go(D_task_WC_send);
+ TTSS_Task_step(D_task_WC_send):
+ L0_uart0_sendstr("\r\nmC:send ");
+ L3_task_s_go(ts_2g4,D_task_2g4_send);
+ TTSS_overtime_init(s->over,D_Tdelay_5s);
+
+ L2_task_go(D_task_WC_send_over);
+ TTSS_Task_step(D_task_WC_send_over):
+ if (D_SI24R1_SENDOK == ts_2g4.ok)
+ {
+ L0_uart0_sendstr("mC:ok rec ack\r\n");
+ ts_2g4.ok = 0;
+ L3_task_s_go(ts_2g4,D_task_2g4_REV_start);
+ TTSS_overtime_init(s->over,D_Tdelay_10s);
+ L2_task_go(D_task_WC_REC_ACK);
+ }else
+ {
+ TTSS_overtime_get(s->over)
+ L0_uart0_uc('v');
+ L2_task_go(D_task_WC_END);
+ TTSS_overtime_end
+ }
+ TTSS_Task_step(D_task_WC_REC_ACK):
+ if(D_SI24R1_RX_DR == ts_2g4.ok)
+ {
+ ts_2g4.ok = 0;
+ L0_uart0_sendstr("mC:recok \r\n");
+ L0_uart0_sendArray(ts_2g4.Rbuf,ts_2g4.rx_fifo_num);
+ L2_task_go(D_task_WC_END);
+ }else
+ {
+ TTSS_overtime_get(s->over)
+ ///L0_uart0_uc('r');
+ L0_uart0_sendstr("\r\nmC:!overtime \r\n");
+ L2_task_go(D_task_WC_END);
+ L3_task_s_go(ts_2g4,D_task_close);
+ TTSS_overtime_end
+ }
+ TTSS_Task_step(D_task_WC_END):
+ L2_task_go(D_task_WC_send);
+ L1_task_Tdelay(D_Tdelay_2s);
+ TTSS_Task_end();
+ (*L3_task_2g4_handle)(&ts_2g4);
+
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/source/asp/nouse/asp_task_WC.h b/source/asp/nouse/asp_task_WC.h
new file mode 100644
index 0000000..a57b846
--- /dev/null
+++ b/source/asp/nouse/asp_task_WC.h
@@ -0,0 +1,39 @@
+#ifndef asp_task_WC_
+#define asp_task_WC_
+
+
+#define D_ID_0 0
+#define D_ID_1 1
+#define D_ID_2 2
+#define D_ID D_ID_0
+
+#include "bsp_para2flash.h"
+#include "../ctask/task.h"
+#include "bsp_SI24R1.h"
+#include "msp_UART0.h"
+#include "asp_SI24R1m.h"
+
+
+
+typedef struct
+{
+ TS_task task;
+ U32 sendStamp;
+ U32 over;
+
+ U8 ok;
+ Modbus03 *m;
+/// U8 ackFlag;
+}TS_WCapp_;
+extern TS_WCapp_ ts_WCapp;
+
+///L3_task_handle_NOACK_master(&ts_WCapp);
+void L2_task_WC_init(void);
+
+void L3_task_WC_master_handle(TS_WCapp_ *s);
+
+#endif
+
+
+
+
diff --git a/source/bsp/bsp_config.c b/source/bsp/bsp_config.c
index d6942b5..63d5f8a 100644
--- a/source/bsp/bsp_config.c
+++ b/source/bsp/bsp_config.c
@@ -1,5 +1,5 @@
#include "bsp_config.h"
-#include "../msp/UART0.h"
+#include "../msp/msp_UART0.h"
#include "../msp/eeprom.h"
////////////////////////////////////////////////////////////////////////////
diff --git a/source/bsp/bsp_config.h b/source/bsp/bsp_config.h
index e915041..db5bade 100644
--- a/source/bsp/bsp_config.h
+++ b/source/bsp/bsp_config.h
@@ -51,7 +51,7 @@
//STEP 1 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>TYPE_UASER_BOARD SELECT
-#define TYPE_UASER_BOARD TYPE_BOARD_TOUCH_PEN_0B
+#define TYPE_UASER_BOARD TYPE_BOARD_TOUCH_PEN_0C
//STEP 1 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>TYPE_UASER_BOARD CONFIG
-#if(TYPE_UASER_BOARD == TYPE_BOARD_TOUCH_PEN_0B)
+#if(TYPE_UASER_BOARD == TYPE_BOARD_TOUCH_PEN_0C)
#include
- #include "../cpu/stc_stc8hxx.h"
- #include "../cpu/stc_macro.h"
+// #include "../cpu/stc_stc8hxx.h"
+// #include "../cpu/stc_macro.h"
//基本配置(工作频率、时钟、看门狗、字节序)
#define TYPE_MCU TYPE_MCU_STC_8H
@@ -79,6 +79,54 @@
//存储器特殊参数地址配置
#define D_MCU_SPEC_PARAM_CHIPID 0xFDF9
//...其他参数
+ #if ((TYPE_MCU & TYPE_MCU_VENDOR_MSK) == TYPE_MCU_VENDOR_STC)
+
+ #include "../cpu/STC_stc8h3k.h"
+ #include "../cpu/STC_only.h"
+ #include "../cpu/c51_macro.h"
+ #endif
+
+ //Step3: >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>IRQ Config
+#if ((TYPE_MCU & TYPE_MCU_VENDOR_MSK) == TYPE_MCU_VENDOR_STC)
+
+
+#define D_SERVE_INT0 interrupt 0
+#define D_SERVE_TIMER0 interrupt 1
+#define D_SERVE_INT1 interrupt 2
+#define D_SERVE_TIMER1 interrupt 3
+///#define D_SERVE_UART interrupt 4
+#define D_SERVE_ADC interrupt 5
+#define D_SERVE_LVD interrupt 6
+#define D_SERVE_PCA interrupt 7
+#define D_SERVE_UART2 interrupt 8
+#define D_SERVE_SPI interrupt 9
+#define D_SERVE_INT2 interrupt 10
+#define D_SERVE_INT3 interrupt 11
+#define D_SERVE_TIMER2 interrupt 12
+#define D_SERVE_INT4 interrupt 16
+#define D_SERVE_UART3 interrupt 17
+#define D_SERVE_UART4 interrupt 18
+#define D_SERVE_TIMER3 interrupt 19
+#define D_SERVE_TIMER4 interrupt 20
+#define D_SERVE_CMP interrupt 21
+#define D_SERVE_PWM interrupt 22
+#define D_SERVE_PWMFD interrupt 23
+#define D_SERVE_I2C interrupt 24
+#endif
+
+
+
+
+#define D_ISR_int0 0 ///int0 下降沿触发 = 0 上下沿均可触发
+#define D_ISR_timer0 1
+#define D_ISR_int1 2 ///int1 下降沿触发 = 0 上下沿均可触发
+#define D_ISR_timer1 3
+#define D_ISR_int2 10 /////只有下降沿
+#define D_ISR_int3 11 /////只有下降沿
+#define D_SERVE_UART interrupt 4
+#define D_SERVE_UART1 interrupt 8
+#define D_ISR_int4 16 /////只有下降沿
+
//串口配置
#define D_uart0_BRT BRT_115200
@@ -136,42 +184,60 @@
#define D_EEP_ENC_IN_BLOCK 0 //eeprom加密区数据块地址,从0开始
//#define D_EEP_ENC_BLOCK_SIZE 0x20 //ENC_BLOCK_SIZE必须与加密程序中的ENC_BLOCK_SIZE匹配,此处不建议修改,如需修改,请同时修改加密程序
#endif
-#elif
- xxx
-#endif
+
//STEP 2 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>IRQ Config
-#if ((TYPE_MCU & TYPE_MCU_VENDOR_MSK) == TYPE_MCU_VENDOR_STC)
-#define D_SERVE_INT0 interrupt 0
-#define D_SERVE_TIMER0 interrupt 1
-#define D_SERVE_INT1 interrupt 2
-#define D_SERVE_TIMER1 interrupt 3
-#define D_SERVE_UART interrupt 4
-#define D_SERVE_ADC interrupt 5
-#define D_SERVE_LVD interrupt 6
-#define D_SERVE_PCA interrupt 7
-#define D_SERVE_UART2 interrupt 8
-#define D_SERVE_SPI interrupt 9
-#define D_SERVE_INT2 interrupt 10
-#define D_SERVE_INT3 interrupt 11
-#define D_SERVE_TIMER2 interrupt 12
-#define D_SERVE_INT4 interrupt 16
-#define D_SERVE_UART3 interrupt 17
-#define D_SERVE_UART4 interrupt 18
-#define D_SERVE_TIMER3 interrupt 19
-#define D_SERVE_TIMER4 interrupt 20
-#define D_SERVE_CMP interrupt 21
-#define D_SERVE_PWM interrupt 22
-#define D_SERVE_PWMFD interrupt 23
-#define D_SERVE_I2C interrupt 24
#endif
-//STEP 3 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>MCU TYPE
#define TYPE_MCU_VENDOR_MSK 0xF0
#define TYPE_MCU_VENDOR_STC 0x10
diff --git a/source/bsp/bsp_oid.c b/source/bsp/bsp_oid.c
new file mode 100644
index 0000000..65bf032
--- /dev/null
+++ b/source/bsp/bsp_oid.c
@@ -0,0 +1,826 @@
+#include "bsp_oid.h"
+#include "intrins.h"
+#include "msp_UART0.h"
+#include
+#include "../ctask/task.h"
+#include "../ctask/tick.h"
+
+
+/******************************************************************************************************
+ 变量定义
+*******************************************************************************************************/
+AppDevice eAppDevice = ePointRead_2000A;
+///volatile uint32_t RecvData[3];
+Ts_OID_ ts_oid;
+
+uint8_t TransCmd[7];
+///#define MAIN_Fosc 11059260L
+#if 0
+#define MAIN_Fosc (12459260L/4)
+#define D_DELAY_10US 10
+#define D_DELAY_ROD_80US 80
+
+
+#else
+#define MAIN_Fosc (12459260L/2)
+#define D_DELAY_10US 20
+#define D_DELAY_ROD_80US 160
+
+
+#endif
+
+
+//========================================================================
+// 函数: void delay_ms(uint8_t ms)
+// 描述: 延时函数。
+// 参数: ms,要延时的ms数, 这里只支持1~255ms. 自动适应主时钟.
+// 返回: none.
+// 版本: VER1.0
+// 日期: 2021-3-9
+// 备注:
+//========================================================================
+void delay_ms(uint8_t ms)
+{
+ uint16_t i;
+ do{
+ i = MAIN_Fosc / 10000L;
+ while(--i); //10T per loop
+ }while(--ms);
+}
+
+void delay_us(uint8_t us)
+{
+ uint16_t i;
+ do{
+ // i = MAIN_Fosc / 10000000L;
+ // i = 1;///5 10 150u 1---50us
+ /// while(--i); //10T per loop
+ }while(--us);
+}
+
+/******************************************************************************************************
+Function:
+Input:
+Output:
+*******************************************************************************************************/
+void L0_oid_SendCmd(uint8_t Cmd)
+{
+ uint8_t i;
+ LD_Oid_SDIO_OUT();
+ LD_Oid_SCK_HIGH();
+ LD_Oid_SDIO_HIGH(); // Write control bit
+ delay_us(D_DELAY_10US);
+ LD_Oid_SCK_LOW();
+ delay_us(D_DELAY_10US);
+
+ for(i=0;i<8;i++)
+ {
+ LD_Oid_SCK_HIGH();
+ if(Cmd & 0x80)
+ {
+ LD_Oid_SDIO_HIGH();
+ }
+ else
+ {
+ LD_Oid_SDIO_LOW();
+ }
+ delay_us(D_DELAY_10US);
+ LD_Oid_SCK_LOW();
+
+ #if 0
+ if(i == 7)
+ {
+ LD_Oid_SDIO_IN();
+ }
+ #endif
+ delay_us(D_DELAY_10US);
+ Cmd <<= 1;
+ }
+ delay_us(D_DELAY_ROD_80US);
+ LD_Oid_SDIO_IN();
+}
+
+uint16_t L0_oid_RecvAck16(void)
+{
+ uint8_t i;
+ uint16_t AckValue;
+ AckValue = 0;
+///
+LD_Oid_SDIO_OUT();
+ delay_us(D_DELAY_10US);
+ LD_Oid_SCK_HIGH();
+ LD_Oid_SDIO_LOW();
+ delay_us(D_DELAY_10US);
+ LD_Oid_SCK_LOW();
+ delay_us(D_DELAY_10US);
+
+ for(i = 0; i < 16; i++)
+ {
+ LD_Oid_SCK_HIGH();
+ LD_Oid_SDIO_IN()
+ delay_us(D_DELAY_10US);
+ LD_Oid_SCK_LOW();
+ if(OID_DET)
+ {
+ AckValue +=1;
+ }
+
+ if(i < 15)
+ {
+ AckValue <<= 1;
+ }
+
+ delay_us(D_DELAY_10US);
+ }
+ delay_us(D_DELAY_ROD_80US);
+
+ return AckValue;
+}
+
+
+void L0_oid_Recv64(void)
+{
+ uint8_t i;
+ Lc_memset8bits(ts_oid.rec.d, 0, 8);
+ LD_Oid_SDIO_OUT();
+ delay_us(D_DELAY_10US);
+ LD_Oid_SCK_HIGH();
+ LD_Oid_SDIO_LOW();
+
+ delay_us(D_DELAY_10US);
+ LD_Oid_SCK_LOW();
+
+ delay_us(D_DELAY_10US);
+ LD_Oid_SDIO_IN()
+
+ for(i = 0; i < 64; i++)
+ {
+ LD_Oid_SCK_HIGH();
+ delay_us(D_DELAY_10US);
+ LD_Oid_SCK_LOW();
+
+
+ #if 0
+ if(OID_DET)
+ {
+ if(i < 32)
+ {
+ RecvData[0] += 1;
+ }
+ if(i>=32 && i<64)
+ {
+ RecvData[1] += 1;
+ }
+
+ }
+
+ if(i < 31)
+ {
+ RecvData[0] <<= 1;
+ }
+ if( i >31 && i < 63)
+ {
+ RecvData[1] <<= 1;
+ }
+ #endif
+
+ ///#else
+
+ ts_oid.rec.d[i/8] <<= 1;
+
+ if(OID_DET)
+ {
+ ts_oid.rec.d[i/8] |= 1;
+ // RecvData[1] += 1;
+ }
+ else
+ {
+ ts_oid.rec.d[i/8] &= 0xfe;
+ }
+ // RecvData[1] <<= 1;
+
+
+
+ delay_us(D_DELAY_10US);
+ }
+
+
+ ts_oid.time = D_sys_now;
+ delay_us(D_DELAY_ROD_80US);
+
+ return;
+}
+
+uint8_t L1_oid_TransCmd(uint8_t Cmd)
+{
+ uint8_t TxCmd;///,det_busy;
+ uint32_t RxAckCnt = 0;
+
+// L0_uart0_sendstr("\r\n w cmd=");
+/// L0_uart0_uchex(Cmd);
+//
+ while(!OID_DET)
+ {
+ L0_oid_Recv64();
+ L1_print_rcv("\r\n busy: RD=");
+ }
+ TxCmd = Cmd;
+ L0_oid_SendCmd(TxCmd);
+ LD_Oid_SCK_LOW();
+ delay_us(10);
+ #define D_oid_waitrcv_delay 100000
+ while(OID_DET)
+ {
+ /// L1_oid_RecvOptData();
+ RxAckCnt ++;
+ if(RxAckCnt > D_oid_waitrcv_delay)
+ {
+
+ L0_uart0_sendstr("\r\nno rec");
+ L0_uart0_uchex(Cmd);
+ break;
+ }
+ }
+
+ if(RxAckCnt <= D_oid_waitrcv_delay)
+ {
+ TxCmd = (uint8_t)L0_oid_RecvAck16();
+ TxCmd -= 1;
+ if(TxCmd == Cmd)
+ {
+
+ L0_uart0_sendstr("\r\nCmd=");
+ L0_uart0_uchex(Cmd);L0_uart0_uc('-');
+ L0_uart0_uchex(TxCmd);
+ return 1;
+ }
+ }
+}
+
+uint32_t L1_oidReadRegister (uint16_t Data1)
+{
+ uint8_t i,Ret;
+ uint32_t uxReturn;
+
+ TransCmd[0] = 0x74;
+ TransCmd[1] = 3;
+ TransCmd[2] = Data1 >> 8;
+ TransCmd[3] = Data1 & 0x00FF;
+ TransCmd[4] = (TransCmd[1] + TransCmd[2] + TransCmd[3]) & 0xFF;
+
+ for(i=0;i<5;i++)
+ {
+ Ret = L1_oid_TransCmd(TransCmd[i]);
+ if(Ret == 0)
+ {
+ return 0x5FFFFFFF;
+ }
+ }
+
+ i = 0;
+ while(1)
+ {
+ if(!OID_DET)
+ {
+ L0_oid_Recv64();
+
+ /// uxReturn = RecvData[1];
+ uxReturn = ts_oid.rec.d32[1];
+ uxReturn &= 0xFFFF;
+ return uxReturn;
+ }
+
+ delay_us(100);
+ i += 1;
+ if(i >= 20) // check 100ms
+ {
+ return 0x2FFFFFFF;
+ }
+ }
+}
+
+/******************************************************************************************************
+Function:
+Input:
+Output:
+*******************************************************************************************************/
+uint8_t Write_Register(uint16_t Data1,uint16_t Data2)
+{
+ uint8_t Ret,i;
+ uint16_t j;
+ Ret = 1;
+
+ TransCmd[0] = 0X73;
+ TransCmd[1] = 0x05;
+ j = Data1>>8;
+ TransCmd[2] = (uint8_t)j;
+ j = Data1;
+ TransCmd[3] = (uint8_t)j;
+ j = Data2>>8;
+ TransCmd[4] = (uint8_t)j;
+ j = Data2;
+ TransCmd[5] = (uint8_t)j;
+ TransCmd[6] = (TransCmd[1] + TransCmd[2] + TransCmd[3] + TransCmd[4] + TransCmd[5]);
+
+ for(i=0;i<7;i++)
+ {
+ Ret = L1_oid_TransCmd(TransCmd[i]);
+ if(Ret == 0)
+ {
+ break;
+ }
+ }
+ return Ret;
+}
+
+void L1_print_rcv(char *str)
+{
+ L0_uart0_sendstr(str);
+ /********
+// Lc_delay_ms(1);
+ L0_uart0_ulhex(RecvData[0]);
+// Lc_delay_ms(1);
+ L0_uart0_uc(0x09);
+ L0_uart0_ulhex(RecvData[1]);
+
+ L0_uart0_uc(0x09);
+ **********/
+
+/// L0_uart0_ulhex(ts_oid.rec.d32[1]);L0_uart0_uc(0x09);
+ ///
+
+// L0_uart0_sendArrayHex(ts_oid.rec.d,8);
+ ///L2_oid_ParseF1();
+
+}
+/******************************************************************************************************
+Function:
+Input:
+Output:
+
+BYTE0 BYTE1 BYTE2 BYTE3 BYTE4 BYTE5 BYTE6 BYTE7
+666655555555554444444444333333333322222222221111111111
+3210987654321098765432109876543210987654321098765432109876543210
+76543210 76543210 76543210 76543210
+ 76543210 76543210 76543210 76543210
+BYTE0 BYTE1 BYTE2 BYTE3 BYTE4 BYTE5 BYTE6 BYTE7
+
+
+U16[0] U16[1] U16[2] U16[3]
+111111 111111 111111 111111
+5432109876543210543210987654321054321098765432105432109876543210
+666655555555554444444444333333333322222222221111111111
+3210987654321098765432109876543210987654321098765432109876543210
+
+u32[0] u32[1]
+3322222222221111111111 3322222222221111111111
+1098765432109876543210987654321010987654321098765432109876543210
+666655555555554444444444333333333322222222221111111111
+3210987654321098765432109876543210987654321098765432109876543210
+
+U16 angle; // 53–45 Angle 53,52 51 50 49,48 47 46 45
+U8 Ydec; //小数部分43–36 1111 0010b (Y decimal)
+U8 Xdec; //小数部分35–28 0111 0100b (X decimal)
+U8 Yint; //整数部分 27–14 00 0000 0000 0100b (Y integer)
+U8 Xint; //整数部分 13–0 00 0000 0000 0100b (X integer)
+
+*******************************************************************************************************/
+vU16 Lc_dec_us100(vU16 pint,u8 pdec)
+{
+ pint *= 100;
+ if(pdec&0x80)///负数
+ {
+ pdec &= 0x7f;
+ pint -= 100;
+ }else
+ {
+
+ }
+ pdec *= 100;
+ pdec /= 128;
+ pint += (vU16)pdec;
+ return pint;
+
+}
+
+void L2_oid_ParseF1(void)
+{
+/// static uint8_t ucLogNum = 0;
+ uint16_t u16i = 0;
+ uint32_t u32t[2] = 0;
+/// L1_print_rcv("\r\n F1=");
+ ts_oid.oid_type = ts_oid.rec.d[0];
+ if(ts_oid.rec.d[0] == 0x60)
+ {/// Bit43~Bit0:x,y 轴的坐标数据,x 坐标和 y 坐标都是由整数和小数部分
+ ///组成,整数部分 14bit,小数部分 8bit
+ G.pen_t = 0;
+ ts_oid.last_time = s_nos_tick.t_1s;
+ ts_oid.Xint = ts_oid.rec.d16[3]&0x3fff;
+ if(ts_oid.Xint < 300)///取决于图片 fixme: cc
+ {
+ ts_oid.oid_x = 1;
+
+ u32t[0] = ts_oid.rec.d32[0];
+ u32t[1] = ts_oid.rec.d32[1];
+
+ ts_oid.angle = (vU16)(u32t[0]>>13); //45-32= 13
+ ts_oid.angle &= 0x01ff; //53-45+1=8
+ ///36-43
+ ts_oid.Ydec = (ts_oid.rec.d[2]<<4) | (ts_oid.rec.d[3]>>4);
+ ///28 35
+ ts_oid.Xdec = (ts_oid.rec.d[3]<<4) | (ts_oid.rec.d[4]>>4);
+#ifdef docsdfads
+ C0EC58E5 60 4D 24 23 A0 23 80 57 (12800.4500,142.5156) 105
+ C0EC58E5 60 4C E4 54 C0 23 40 5A (12800.5900,141.5391) 103
+ C0EC58E5 60 4D 44 B5 A0 23 00 5D (12800.7000,140.5859) 106
+ C0EC58E5 60 4D 24 AF 30 22 C0 61 (12800.9000,139.5781) 105
+ C0EC58E5 60 4D 24 B1 E0 22 80 64 (12800.2300,138.5859) 105
+
+ A0 23 80 57 (12800.4500,142.5156) 105
+ A0 23 80 57
+ C0 23 40 5A
+ A0 23 00 5D
+ 30 22 C0 61
+ E0 22 80 64
+ 1010 0000 0010 0011 1000 0000 0101 0111
+ 3322 2222 2222 1111 1111 11
+ 1098 7654 3210 9876 5432 1098 7654 3210
+
+#endif
+ u32t[1] >>= 14;
+ ts_oid.Yint = (vU16)u32t[1];
+ ts_oid.Yint &= 0x3fff;
+
+
+
+#if 0
+ if(ts_oid.Xdec&0x80)
+ {
+ ts_oid.x -= 1.0;
+ }
+
+
+
+ ts_oid.Xdec&=0x7f;
+ ts_oid.x = (float)ts_oid.Xdec;
+ ts_oid.x /= 128.0;
+ if(ts_oid.Xdec&0x80)
+ {
+ ts_oid.x -= 1.0;
+ }
+ ts_oid.x += ts_oid.Xint;
+
+ ts_oid.Ydec&=0x7f;
+ ts_oid.y = (float)ts_oid.Ydec;
+ ts_oid.y /= 128.0;
+ if(ts_oid.Ydec&0x80)
+ {
+ ts_oid.y -= 1.0;
+ }
+ ts_oid.y += ts_oid.Yint;
+
+#else
+ ts_oid.X100 = Lc_dec_us100(ts_oid.Xint,ts_oid.Xdec);
+ ts_oid.Y100 = Lc_dec_us100(ts_oid.Yint,ts_oid.Ydec);
+
+
+#endif
+
+ //数据存储到寄存器
+
+ printf(" %hd %hd %hd ",
+ ts_oid.X100,ts_oid.Y100,
+ ts_oid.angle);
+ }
+ else
+ {
+ ts_oid.oid_type = 0;
+ L0_uart0_uc(';');
+ }
+ }
+ else if(ts_oid.rec.d[0] == 0x40)///手写
+ {
+//// 普通码(bit61=0)
+//// Bit60:码是否有效(1:无效码;0:有效码)
+//// Bit59~Bit28:保留
+/// Bit27~Bit0:有效数据
+ /// G.oid_p = 1;
+ ts_oid.oid_p = 1;
+ ts_oid.gCode = ts_oid.rec.d32[1]&0x0fFFffFF;
+
+///R.oid3_order = (int)ts_oid.gCode *100;
+
+
+
+ printf(" %ld %x ",ts_oid.gCode,(int)ts_oid.gCode);
+
+ L0_uart0_ulhex(ts_oid.gCode);
+ }else
+ {
+ ts_oid.oid_type = 0;
+ L0_uart0_uc(',');
+ }
+}
+void L2_oid_status(void)
+{
+ if(G.oid_x)
+ {
+ if(ts_oid.pre_x == 0 && ts_oid.pre_y == 0&& ts_oid.X100 != 0 &&ts_oid.Y100 != 0)
+ {
+ G.pen_down = 1;
+ //L0_uart2_sendstr("123");
+ }
+ else if(ts_oid.pre_x != 0 && ts_oid.pre_y != 0&& ts_oid.X100 != 0 &&ts_oid.Y100 != 0)
+ {
+ G.pen_hold = 1;
+ //L0_uart2_sendstr("456");
+ }
+ }
+
+}
+
+uint8_t L1_OID_WakeUp(void)
+{
+ uint32_t i = 0;
+ LD_Oid_SCK_LOW();
+ delay_ms(2);
+ LD_Oid_SCK_HIGH();
+ delay_ms(30);
+ LD_Oid_SCK_LOW();
+
+ L0_uart0_sendstr(" 44 ");
+
+ while(1)
+ {
+ delay_ms(10);
+ i += 1;
+ if(i >= 400) // 400*5ms = 2s
+ {
+ L0_uart0_sendstr(" !!out!! ");
+ return 0;
+ }
+ if(!OID_DET)
+ {
+ L0_oid_Recv64();
+ L1_print_rcv("\r\n WakeUpOID get=");
+ if(ts_oid.rec.d[7] == 0xf8)
+ {
+ ///use
+ L0_uart0_sendstr(" ok\r\n");
+ return 1;//ucCheckVersionAndInit(eAppDevice);
+
+ }
+ else
+ {
+ L0_uart0_sendstr("\r\nno?? OIDCMD_POWER_ON \r\n");
+ return 0;
+ }
+ }
+ }
+}
+
+
+/******************************************************************************************************
+Function:
+Input:
+Output:
+*******************************************************************************************************/
+void L0_Oid_Init(void)
+{
+ LD_Oid_DIO_INIT();
+ /******************************************************************************************************
+ 5430C2000A/3000A点读应用初始化设置
+ 顺序 命令设置 备注
+ 1 single command 0x4D 关闭解码
+ 2 REG(0xD40) = 0x00 设置仅读OID码,0X00仅读OID3/OID2,0X10仅读OID3S,0X20仅读OID4
+ 3 single command 0x36 关闭手写码侦测
+ 4 "REG(0x0DAD) = 4250 //设置AE Target
+ REG(0x0DB1) = 4000 //设置AE LOW
+ REG(0x0DAF) = 4000 //设置AE LOW
+ REG(0x0DB0) = 4500 //设置AE HIGH
+ REG(0x0DAE) = 4500 //设置AE HIGH
+
+ REG(0x1641) = 0xA0 //设置dot filter
+ REG(0x0D6A) = 0x3F //此项不要改动
+ REG(0x0D2C) = 0x3F //此项不要改动" "初始化,可不下此部分命令,若笔头配合底码识别不佳,可以下此部分命令,设置不同参数尝试。
+
+ 设置AE Range和dot filter。
+ AE_LOW < AE_Target = 2)&& (G.pen_t == 0))
+ {
+ G.pen_up = 1;
+ G.pen_t =1;
+ //L0_uart2_sendstr("789");
+ }
+/// delay_us(100);
+}
+
+
+#if 0
+
+step1
+if(!OID_DET)
+{
+ L0_oid_Recv64();
+
+step2
+
+L2_oid_ParseF1();
+step 3
+ 状态
+
+
+
+///#ifdef doc980808
+验证算法的正确性
+unsigned char s[64]=
+ {
+
+ 1 , // 0
+ 1 , // 1
+ 1 , // 2
+ 1 , // 3
+ 1 , // 4
+ 1 , // 5
+ 1 , // 6
+ 1 , // 7 xxxx
+
+ 1 , // 8
+ 1 , // 9
+ 1 , // 10
+ 1 , // 11
+ 1 , // 12
+ 1 , // 13
+ 1 , // 14
+ 1 , // 15 xxxx
+
+ 1 , // 16
+ 1 , // 17
+ 1 , // 18
+ 1 , // 19
+ 1 , // 20
+ 1 , // 21
+ 1 , // 22
+ 1 , // 23 xxxx
+
+ 1 , // 24
+ 1 , // 25
+ 1 , // 26
+ 1 , // 27
+ 1 , // 28
+ 1 , // 29
+ 1 , // 30
+ 1 , // 31 xxxx
+
+ 1 , // 32
+ 1 , // 33
+ 1 , // 34
+ 1 , // 35
+ 1 , // 36
+ 1 , // 37
+ 1 , // 38
+ 1 , // 39 xxxx
+
+ 1 , // 40
+ 1 , // 41
+ 1 , // 42
+ 1 , // 43
+ 1 , // 44
+ 1 , // 45
+ 1 , // 46
+ 1 , // 47 xxxx
+
+ 1 , // 48
+ 1 , // 49
+ 1 , // 50
+ 1 , // 51
+ 1 , // 52
+ 1 , // 53
+ 1 , // 54
+ 1 , // 55 xxxx
+
+ 1 , // 56
+ 1 , // 57
+ 1 , // 58
+ 1 , // 59
+ 1 , // 60
+ 1 , // 61
+ 1 , // 62
+ 1 // 63 xxxx
+
+ };
+ int x =0;
+int i;
+
+
+void t(void)
+{RecvData[0] = 0;RecvData[1] = 0;
+ for(i = 0; i < 64; i++)
+ {
+
+
+ if(s[63-i])
+ {
+ if(i < 32)
+ {
+ RecvData[0] += 1;
+ }
+ if(i>=32 && i<64)
+ {
+ RecvData[1] += 1;
+ }
+
+ }
+ if(i < 31)
+ {
+ RecvData[0] <<= 1;
+ }
+ if( i >31 && i < 63)
+ {
+ RecvData[1] <<= 1;
+ }
+
+
+ }
+
+ for(i = 0; i < 64; i++)
+ {
+ ts_oid.d[i/8] <<= 1;
+ if(s[63-i])
+ {
+ ts_oid.d[i/8] |= 1;
+ }
+ else
+ {
+ ts_oid.d[i/8] &= 0xfe;
+ }
+ }
+i =5;
+
+}
+
+
+#endif
+
diff --git a/source/bsp/bsp_oid.h b/source/bsp/bsp_oid.h
new file mode 100644
index 0000000..61082f8
--- /dev/null
+++ b/source/bsp/bsp_oid.h
@@ -0,0 +1,183 @@
+#ifndef __OPTICALDATA__
+#define __OPTICALDATA__
+
+#include "bsp_config.h"
+#include "../app/app_config.h"
+
+/******************************************************************************************************
+ 配置参数
+*******************************************************************************************************/
+#define ROM009_HANDWRITE 0
+#define DATA_FORMAT_2 0
+#define OID_4C 0
+#define DEBOUNCE_FUNC 0
+#define LOG_REGISTER 0
+
+#if DEBOUNCE_FUNC
+#define DEBOUNCE_TIMES 3 // 连续三笔相同,才触发,debounce时,可设置。去抖动时间
+#define DEBOUNCE_RELESE_TIME 20 //5ms * 20 = 100ms,100ms无任何码,认为抬笔。
+#endif
+/******************************************************************************************************
+ 2-wire GPIO
+
+#define D_stdIO_P5(n) BITN_0(P5M1,n);BITN_0(P5M0,n); //////00 准双向口 灌电流20mA 拉电流270-150uS
+#define D_HighI_P5(n) BITN_0(P5M1,n);BITN_1(P5M0,n); //////01 推挽输出 20mA 加限流
+#define D_HighR_P5(n) BITN_1(P5M1,n);BITN_0(P5M0,n); /////////10 高阻
+#define D_OpenD_P5(n) BITN_1(P5M1,n);BITN_1(P5M0,n); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
+*******************************************************************************************************/
+#define LD_oid_io_init() LD_Oid_SCK_INIT()
+////#define LD_Oid_SCK_INIT() D_stdIO_P3(BITN4);
+
+#define LD_Oid_SCK_LOW() D_P34_OFF();
+#define LD_Oid_SCK_HIGH() D_P34_ON();
+
+#define LD_Oid_SCK_INIT(); D_HighI_P3(BITN4);LD_Oid_SCK_LOW();
+
+
+#define LD_Oid_SDIO_INIT() D_HighR_P5(BITN0)
+#define LD_Oid_SDIO_LOW() D_P50_OFF()
+#define LD_Oid_SDIO_HIGH() D_P50_ON()
+#define LD_Oid_SDIO_IN() D_HighR_P5(BITN0)//高阻输入
+#define LD_Oid_SDIO_OUT() D_HighI_P5(BITN0)//推挽输出
+
+#define LD_Oid_SDIO_AT() D_P50_AT()
+
+
+#define LD_Oid_DIO_INIT(); LD_Oid_SCK_INIT();LD_Oid_SDIO_INIT();
+
+
+#define OID_DET P50
+
+/******************************************************************************************************
+ OID命令
+*******************************************************************************************************/
+
+
+////20211229依据53xx和54xx系列操作
+#define USERCMD_20FPS 0x24
+#define USERCMD_30FPS 0x25
+#define USERCMD_40FPS 0x26
+#define USERCMD_50FPS 0x27
+#define USERCMD_80FPS 0x3C
+#define USERCMD_80FPS_EXIT 0x3B
+#define USERCMD_DECODE_SHUT 0x4D
+#define USERCMD_LIANCHUAN 0x40
+#define USERCMD_SUSPEND 0x57
+#define USERCMD_EN_ANGLE 0x10
+#define USERCMD_EN_POSITION 0x35
+#define USERCMD_SW_POSITION 0x43
+#define USERCMD_DATA_FORMAT_2 0x2C
+#define USERCMD_LOU_GUANG 0xD7
+#define USERCMD_POWER_DOWN 0x56
+
+
+
+#define OIDCMD_POWER_ON 0x0000FFF8
+#define OIDCMD_POWER_OFF 0x0000FFF7
+/******************************************************************************************************
+ OID版本
+*******************************************************************************************************/
+#define OID_VER_D 0x1169
+#define OID_VER_REG 0x1670
+#define OID_VER_F 0x1168
+#define REG_READOID_SET 0xD40
+#define REG_EN_DECODE 0xD63
+#define REG_ROM008 0xDA5
+#define REG_ROM009 0xDA6
+#define ROM_009 0x09
+#define ROM_008 0x00
+/******************************************************************************************************
+ Dataformat 2定义
+*******************************************************************************************************/
+#define CHECK_INVALID_DF2 0x40000000
+#define CHECK_OID_VERSION_DF2 0xFC000000
+#define OID_2_GENERAL_DF2 0x00000000
+#define OID_3_GENERAL_DF2 0x08000000
+#define OID_3_POSITION_DF2 0x04000000
+#define OID_3S_GENERAL_DF2 0x10000000
+#define OID_3S_POSITION_DF2 0x0C000000
+#define OID_35_GENERAL_DF2 0x14000000
+#define OID_4_GENERAL_DF2 0x1C000000
+#define OID_4_POSITION_DF2 0x18000000
+#define OID_4C_POSITION_DF2 0x20000000
+/******************************************************************************************************
+ 函数声明
+*******************************************************************************************************/
+typedef enum
+{
+ eHandWrite = 0,
+ ePointRead_2000A = 1,
+ ePointRead_3000A = 2,
+ ePointRead_LightGuide = 3,
+ eCar_LightGuide = 4,
+}AppDevice;
+extern AppDevice eAppDevice;
+/*****************
+
+void OidTaskLoop(void);
+uint8_t L1_oid_TransCmd(uint8_t Cmd);
+uint8_t WakeUpOID(void);
+
+
+void L1_oid_RecvOptData(void);
+
+void LogRegister(void);
+uint8_t L1_oid_CheckVersionAndInit(AppDevice eAppDevice);
+
+/*****************************/
+/**********************************************************
+ Bit Indication
+63–60 0110b
+59–54 Reserved
+53–45 Angle
+44 Reserved
+43–36 1111 0010b (Y decimal)
+35–28 0111 0100b (X decimal)
+27–14 00 0000 0000 0100b (Y integer)
+13–0 00 0000 0000 0100b (X integer) 变量定义
+******************************************************/
+
+
+
+typedef struct _ts_OID
+{//8byte
+/// u8 d[8];
+ U_U64 rec;
+ U8 oid_type; //类型63–60 0110b
+ U16 angle; // 53–45 Angle 53,52 51 50 49,48 47 46 45
+ U8 Ydec; //小数部分43–36 1111 0010b (Y decimal)
+ U8 Xdec; //小数部分35–28 0111 0100b (X decimal)
+ vU16 Yint; //整数部分 27–14 00 0000 0000 0100b (Y integer)
+ vU16 Xint; //整数部分 13–0 00 0000 0000 0100b (X integer)
+
+ vU16 Y100,X100;///放大100倍的输出
+ vU32 gCode; //
+
+ vU32 time;
+ vU32 last_time;
+
+ vU32 overtime;
+
+
+ float x,y;//cut
+ vU16 pre_x,pre_y;//cut
+ U8 oid_x;
+ U8 oid_p;
+
+
+}Ts_OID_;
+extern Ts_OID_ ts_oid;
+///extern volatile uint32_t RecvData[3];
+
+void L0_Oid_Init(void);
+
+uint8_t L1_oid_TransCmd(uint8_t Cmd);
+void L1_print_rcv(char *str);
+uint32_t L1_oidReadRegister (uint16_t Data1);
+void L1_Oid_readoid(void);
+uint8_t L1_OID_WakeUp(void);
+void L2_oid_ParseF1(void);
+void L0_oid_Recv64(void);
+
+#endif // __OPTICALDATA__
+
diff --git a/source/bsp/chipid.h b/source/bsp/chipid.h
index ba48a30..ca448c3 100644
--- a/source/bsp/chipid.h
+++ b/source/bsp/chipid.h
@@ -26,7 +26,7 @@
///>>>端口位定义,可修改!!!!!!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#include "../bsp/bsp_config.h"
-#include "../msp/uart0.h"
+#include "../msp/msp_uart0.h"
extern void L0_id_get(U8 *id);
extern void L0_id_get_rom(U8 *id);
diff --git a/source/bsp/868.c b/source/bsp/nouse/868.c
similarity index 100%
rename from source/bsp/868.c
rename to source/bsp/nouse/868.c
diff --git a/source/bsp/868.h b/source/bsp/nouse/868.h
similarity index 100%
rename from source/bsp/868.h
rename to source/bsp/nouse/868.h
diff --git a/source/bsp/nouse/bsp_config.h.bak b/source/bsp/nouse/bsp_config.h.bak
new file mode 100644
index 0000000..e915041
--- /dev/null
+++ b/source/bsp/nouse/bsp_config.h.bak
@@ -0,0 +1,240 @@
+////////////////////////////////////////////////////////////////////////////
+///@copyright Copyright (c) 2017, 传控科技 All rights reserved.
+///-------------------------------------------------------------------------
+/// @file bsp_config.h
+/// @brief hard config include
+/// @info FILE FOR HARDWARE SETUP AND SOFTWARE SETUP///FOR EXAMPLE: BAORD ,MCU,IDE
+/// @info YOU CAN CHANGE OR ADD THE DEFINE IF YOU NEED
+/// @info 整个嵌入式项目的入口 首先是确认电路板 然后确认cpu 芯片型号 然后确认编译器 之后是软件框架 最后是应用程序
+/// @info bsp_CONFIG 为其他头文件的始祖 TYPE_BOARD_xx
+///-------------------------------------------------------------------------
+/// @version 1.1
+/// @author CC
+/// @date 20180308
+/// @note
+//////////////////////////////////////////////////////////////////////////////
+/// @version 5.1
+/// @author CC
+/// @date 20200301
+/// @note
+//////////////////////////////////////////////////////////////////////////////
+
+
+//////////////////////////////////////////////////////////////////////////
+///存储器中的特殊参数
+///全球唯一ID号 7FF9H~7FFFH BFF9H~BFFFH EFF9H~EFFFH FDF9H~FDFFH 7字节
+///内部1.19V参考信号源 7FF7H~7FF8H BFF7H~BFF8H EFF7H~EFF8H FDF7H~FDF8H 毫伏(高字节在前)
+///32K掉电唤醒定时器的频率 7FF5H~7FF6H BFF5H~BFF6H EFF5H~EFF6H FDF5H~FDF6H Hz (高字节在前)
+///22.1184MHz的IRC参数(20M频段) 7FF4H BFF4H EFF4H FDF4H -
+///24MHz的IRC参数(20M频段) 7FF3H BFF3H EFF3H FDF3H -
+///20MHz的IRC参数(20M频段) 7FF2H BFF2H EFF2H FDF2H
+///固件版本为7.3.12U
+///以及后续版本有效
+///27MHz的IRC参数(35M频段) 7FF1H BFF1H EFF1H FDF1H
+///30MHz的IRC参数(35M频段) 7FF0H BFF0H EFF0H FDF0H
+///33.1776MHz的IRC参数(35M频段) 7FEFH BFEFH EFEFH FDEFH
+///35MHz的IRC参数(35M频段) 7FEEH BFEEH EFEEH FDEEH
+///36.864MHz的IRC参数(35M频段) 7FEDH BFEDH EFEDH FDEDH
+///保留 7FECH BFECH EFECH FDECH
+///保留 7FEBH BFEBH EFEBH FDEBH
+///20M频段的VRTRIM参数 7FEAH BFEAH EFEAH FDEAH
+///35M频段的VRTRIM参数 7FE9H BFE9H EFE9H FDE9H
+//////////////////////////////////////////////////////////////////////////
+
+#ifndef _BSP_CONFIG_H
+#define _BSP_CONFIG_H
+
+#include
+#include "../bsp/bsp_config_const.h"
+#include "../clib/type.h"
+#include "../clib/bit.h"
+
+
+//STEP 1 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>TYPE_UASER_BOARD SELECT
+#define TYPE_UASER_BOARD TYPE_BOARD_TOUCH_PEN_0B
+//STEP 1 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>TYPE_UASER_BOARD CONFIG
+#if(TYPE_UASER_BOARD == TYPE_BOARD_TOUCH_PEN_0B)
+ #include
+ #include "../cpu/stc_stc8hxx.h"
+ #include "../cpu/stc_macro.h"
+
+ //基本配置(工作频率、时钟、看门狗、字节序)
+ #define TYPE_MCU TYPE_MCU_STC_8H
+ #define TYPE_IDE TYPE_IDE_KEIL
+ #define D_CPUfamily_type D_CPUfamily_8bits
+ #define D_sys_MainFre MainFre_22M
+ #define D_sys_Jiffies TYPE_JIFFIES_10MS
+ #define D_WDT_STATUS TYPE_WDT_DISABLE //如果配置为enable,请在bsp_config.c中设置wdt溢出时间
+ #define D_MCU_ENDIAN TYPE_MCU_BIGENDIAN
+ #define D_CODE_ENCRYPTION_TYPE TYPE_ENCRYPTION_ENABLE //是否代码加密
+
+
+ #define D_MCU_NAME "STC8H3K64S4"
+ //存储器特殊参数地址配置
+ #define D_MCU_SPEC_PARAM_CHIPID 0xFDF9
+ //...其他参数
+
+ //串口配置
+ #define D_uart0_BRT BRT_115200
+ #define D_uart0_SBIT SBIT_1
+ #define D_PIN_UART0 PIN_UART0_Rxd_30_Txd_31
+ #define D_uart2_BRT BRT_115200
+ #define D_uart2_SBIT SBIT_1
+ #define D_PIN_UART2 PIN_UART2_Rxd_10_Txd_11 //wifi模块
+ #define D_uart3_BRT BRT_115200
+ #define D_PIN_UART3 PIN_UART3_Rxd_43_Txd_44 //声音模块
+ #define D_uart4_BRT BRT_115200
+
+ //485配置
+ #define D_UART0_485_TYPE TYPE_485_NONE //UART0启用485
+ #define D_UART0_485_SLAVER_ID_BROADCAST 0xFF //485从机总是响应0xFF消息
+ #define D_UART0_485_SLAVER_ID 0x01 //板卡作为485从机 slaverId
+ #define D_UART0_485_TX() P32 = 1;
+ #define D_UART0_485_RX() P32 = 0;
+ #define D_UART2_485_TYPE TYPE_485_NONE //UART2不启用485
+ #define D_UART3_485_TYPE TYPE_485_NONE //UART2不启用485
+ #define D_UART4_485_TYPE TYPE_485_NONE //UART2不启用485
+
+ //MODBUS协议配置
+ #define D_MODBUS_ENABLE //MODBS启用开关,如果不使用modbus,可以注释掉本行
+ #define D_MODBUS_SPLIT_ENTRY L1_modbus_split //modbus切割函数,在tpc_modbus.c中实现,依据实际情况修改
+ #define D_MODBUS_REG_MAX_NUM 32 //每次最多读取/写入的寄存器数量,此处的数量要注意和 D_tp_handle_x_len 对应
+
+ //外设定义
+
+ #define LED1 P27 //D4
+ #define LED2 P26 //D4
+ #define LED3 P2 //D4
+ #define LED4 P55 //D4
+ //笔头
+ #define SCK P34
+ #define SDIO P50
+ //按键
+ #define key1 P32
+ #define key2 P33
+ #define key3 P40
+ //EEP存储地址定义
+ #define D_EEP_SECTOR_SIZE 0x200 //每个扇区0x200==512bytes
+ #define D_EEP_SECTOR_BLOCK_SIZE 0x40 //扇区中每个数据块0x40==64bytes,可选值[32,64,128]等
+ #define D_EEP_SECTOR_BLOCK_NUM (D_EEP_SECTOR_SIZE / D_EEP_PARAM_BLOCK_SIZE) //每个扇区数据块的数量
+ #define D_EEP_BLOCK_FILTER0 0xAA //扇区中每个数据块的Filter字段值
+ #define D_EEP_BLOCK_FILTER1 0x55
+ //EEP User Defined 参数区存储配置
+ #define D_EEP_PARAM_IN_SECTOR 1 //eeprom参数区扇区地址,从0开始
+ #define D_EEP_PARAM_IN_BLOCK 0 //eeprom参数区数据块地址,从0开始
+ //#define D_EEP_PARAM_BLOCK_SIZE (D_EEP_SECTOR_BLOCK_SIZE) //参数区每个块大小,必须:D_EEP_PARAM_BLOCK_SIZE<=D_EEP_SECTOR_BLOCK_SIZE!!!,因为eeprom.h中是按照D_EEP_SECTOR_BLOCK_SIZE分配的buf
+ //#define D_EEP_PARAM_BLOCK_NUM (D_EEP_SECTOR_SIZE / D_EEP_PARAM_BLOCK_SIZE) //每个扇区数据块的数量
+ //EEP 加密区存储配置
+ #if(D_CODE_ENCRYPTION_TYPE == TYPE_ENCRYPTION_ENABLE)
+ #define D_EEP_ENC_IN_SECTOR 0 //eeprom加密区扇区地址,从0开始
+ #define D_EEP_ENC_IN_BLOCK 0 //eeprom加密区数据块地址,从0开始
+ //#define D_EEP_ENC_BLOCK_SIZE 0x20 //ENC_BLOCK_SIZE必须与加密程序中的ENC_BLOCK_SIZE匹配,此处不建议修改,如需修改,请同时修改加密程序
+ #endif
+#elif
+ xxx
+#endif
+//STEP 2 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>IRQ Config
+#if ((TYPE_MCU & TYPE_MCU_VENDOR_MSK) == TYPE_MCU_VENDOR_STC)
+#define D_SERVE_INT0 interrupt 0
+#define D_SERVE_TIMER0 interrupt 1
+#define D_SERVE_INT1 interrupt 2
+#define D_SERVE_TIMER1 interrupt 3
+#define D_SERVE_UART interrupt 4
+#define D_SERVE_ADC interrupt 5
+#define D_SERVE_LVD interrupt 6
+#define D_SERVE_PCA interrupt 7
+#define D_SERVE_UART2 interrupt 8
+#define D_SERVE_SPI interrupt 9
+#define D_SERVE_INT2 interrupt 10
+#define D_SERVE_INT3 interrupt 11
+#define D_SERVE_TIMER2 interrupt 12
+#define D_SERVE_INT4 interrupt 16
+#define D_SERVE_UART3 interrupt 17
+#define D_SERVE_UART4 interrupt 18
+#define D_SERVE_TIMER3 interrupt 19
+#define D_SERVE_TIMER4 interrupt 20
+#define D_SERVE_CMP interrupt 21
+#define D_SERVE_PWM interrupt 22
+#define D_SERVE_PWMFD interrupt 23
+#define D_SERVE_I2C interrupt 24
+#endif
+//STEP 3 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Cdelay CONFIG
+#if(MainFre_5M == D_sys_MainFre)
+#define D_Cdelay_200us 20
+#define D_Cdelay_1us 1 ////while p21翻转时测定 500k 2us 一个指令
+#elif(MainFre_22M == D_sys_MainFre)
+#define D_Cdelay_200us 20
+#define D_Cdelay_1us 1 ////while p21翻转时测定 500k 2us 一个指令
+#define D_Cdelay_1us 1 ////while p21翻转时测定 500k 2us 一个指令
+#define L0_delay_1us() Lc_delay_nop(0) // 5个nop() 100ns 50个nop() 1us (20)=10us (2)1.5us
+#define L0_delay_10us() Lc_delay_nop(4) // 5个nop() 100ns 50个nop() 1us (20)=10us (2)1.5us
+#define L0_delay_40us() Lc_delay_nop(18) // 5个nop() 100ns 50个nop() 1us (20)=10us (2)1.5us
+#elif(MainFre_27M == D_sys_MainFre)
+#define D_Cdelay_200us 20
+#define D_Cdelay_1us 1 ////while p21翻转时测定 500k 2us 一个指令
+#else ///MainFre_11M
+#define D_Cdelay_200us 20
+#define D_Cdelay_1us 1 ////while p21翻转时测定 500k 2us 一个指令
+#define L0_delay_1us() Lc_delay_nop(0) // 5个nop() 100ns 50个nop() 1us (20)=10us (2)1.5us
+#define L0_delay_10us() Lc_delay_nop(4) // 5个nop() 100ns 50个nop() 1us (20)=10us (2)1.5us
+#define L0_delay_40us() Lc_delay_nop(18) // 5个nop() 100ns 50个nop() 1us (20)=10us (2)1.5us
+ //xx
+#endif//D_sys_MainFre)
+//STEP 4 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+#include "../clib/type.h"
+#include "../clib/bit.h"
+
+//>>>>>>>>>>>>>>>>>>>>>>.BORAD TYPE
+#define TYPE_BOARD_hhnew 1
+#define TYPE_BOARD_st_sleep04_01 4
+#define TYPE_BOARD_st_sleep03 5
+#define TYPE_BOARD_SMMM_MB_VH032_0E 6
+#define TYPE_BOARD_LPC17xx_ 8
+#define TYPE_BOARD_STM32F_103ZET6_READBULL 1036
+#define TYPE_BOARD_hh_CC_MD_VH05_anyriny_simple_m51 0x0551
+#define TYPE_BOARD_hh_CC_MD_VH06_asMain_m6a7 0x6a7
+#define TYPE_BOARD_TI26_MT01_M178 0x178 //会议计时器版v TI26_MT01-M178
+#define TYPE_BOARD_stc5as32_WIFIBV01 532
+#define TYPE_BOARD_SHC16LAXXQN32 1632 //SHC16LAXXQN32
+#define TYPE_BOARD_PAPER6133_M0A6 0xa6 //打印机纸张传感
+#define TYPE_BOARD_GSM_MAIN_V07 0xa7 //打印机运维板
+#define TYPE_BOARD_ADDA_MAIN_V02 0xa8 //ADDA
+#define TYPE_BOARD_433_0A 0xa9 //433
+#define TYPE_BOARD_WEIGH_0B 0xaa //称重
+#define TYPE_BOARD_TOUCH_PEN_0B 0xab //点读笔
+//<<<<<<<<<<<<<<<<<<<<<<<<<<<.BORAD TYPE end
+
+//>>>>>>>>>>>>>>>>>>>>>>MCU TYPE
+#define TYPE_MCU_VENDOR_MSK 0xF0
+#define TYPE_MCU_VENDOR_STC 0x10
+#define TYPE_MCU_STC_8A 0x11
+#define TYPE_MCU_STC_8F 0x12
+#define TYPE_MCU_STC_8G 0x13
+#define TYPE_MCU_STC_8H 0x14
+
+#define TYPE_MCU_VENDOR_TI 0x60
+#define TYPE_MCU_SHC6601 0x66
+#define TYPE_MCU_LPC17xx 0x67
+#define TYPE_MCU_STM32 0x68
+
+#define D_CPUfamily_8bits 8
+#define D_CPUfamily_16bits 16
+#define D_CPUfamily_32bits 32
+//<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>IDE TYPE
+#define TYPE_IDE_KEIL 1
+#define TYPE_IDE_MDK 2
+#define TYPE_IDE_IAR 3
+//<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>SysTimer TYPE
+#define TYPE_JIFFIES_5MS 5
+#define TYPE_JIFFIES_10MS 10
+#define TYPE_JIFFIES_25MS 25
+//<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>.WDT TYPE
+#define TYPE_WDT_DISABLE 1
+#define TYPE_WDT_ENABLE 2
+//#define WDT_FEED() WDT_CONTR |= 0x10
+//<<<<<<<<<<<<<<<<<<<<<<<<<<<.SysTimer TYPE end
+
+//>>>>>>>>>>>>>>>>>>>>>>.ByteOrder TYPE
+#define TYPE_MCU_BIGENDIAN 1 //大端字节序
+#define TYPE_MCU_LITENDIAN 2 //小端字节序
+//<<<<<<<<<<<<<<<<<<<<<<<<<<<.ByteOrder TYPE end
+
+//>>>>>>>>>>>>>>>>>>>>>>.代码加密 TYPE
+#define TYPE_ENCRYPTION_ENABLE 1 //代码加密
+#define TYPE_ENCRYPTION_DISABLE 2 //代码不加密
+//<<<<<<<<<<<<<<<<<<<<<<<<<<<.ByteOrder TYPE end
+
+//>>>>>>>>>>>>>>>>>>>>>>BUADRATE & StopBit
+#define SBIT_1 1 //1 stop bit
+#define SBIT_2 2 //2 stop bit
+#define BRT_115200 115200
+#define BRT_19200 19200
+#define BRT_9600 9600
+#define BRT_4800 4800
+//<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>MainFre
+#define MainFre_5M 5529600L
+#define MainFre_11M 11059200L
+#define MainFre_22M 22118400L
+#define MainFre_24M 24000000L
+#define MainFre_27M 27000000L
+//<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>UART0 PIN
+#define PIN_UART0_Rxd_30_Txd_31 1
+#define PIN_UART0_Rxd_36_Txd_37 2
+#define PIN_UART0_Rxd_16_Txd_17 3
+#define PIN_UART0_Rxd_43_Txd_44 4
+//<<<<<<<<<<<<<<<<<<<<<<<<<<<.UART0 PIN
+//>>>>>>>>>>>>>>>>>>>>>>UART2 PIN
+#define PIN_UART2_Rxd_10_Txd_11 5
+
+//<<<<<<<<<<<<<<<<<<<<<<<<<<<.UART2 PIN
+
+//>>>>>>>>>>>>>>>>>>>>>>485 Type
+#define TYPE_485_NONE 0
+#define TYPE_485_MASTER 1
+#define TYPE_485_SLAVER 2
+//<<<<<<<<<<<<<<<<<<<<<<485 Type end
+
+//>>>>>>>>>>>>>>>>>>>>>>G-SENSOR TYPE
+#define TYPE_ASENSOR_ADXL362 362
+#define TYPE_ASENSOR_MSA300 300
+#define TYPE_ASENSOR TYPE_ASENSOR_MSA300
+//<<<<<<<<<<<<<<<<<<<<<=0; i--)
+ {
+ sum += t * getIndexOfSigns(*(source + i));
+ t *= 16;
+ }
+
+ return sum;
+}
+int getIndexOfSigns(char ch)
+{
+ if(ch >= '0' && ch <= '9')
+ {
+ return ch - '0';
+ }
+ if(ch >= 'A' && ch <='F')
+ {
+ return ch - 'A' + 10;
+ }
+ if(ch >= 'a' && ch <= 'f')
+ {
+ return ch - 'a' + 10;
+ }
+ return -1;
+}
///// 0 1 (1-0)+1
//// 把buf中的数据从[usStart]到[usEnd] 共 usEnd-usStart+1 的数据转换成ascii
/// 0x11 0x22 ---> 0x31 0x31 0x32 0x32 '1' '1' '2' '2'
-void Lc_hex2ascii(U8 *buf,U16 len,U8 *ascii)
+void Lc_hex2ascii(U8 *buf,U8 *ascii,U16 len)
{
vU16 t = 0,m = 0;
for(t = 0;t < len;t ++)
@@ -414,6 +446,15 @@ int Lc_memset(U8 *buf,U8 c,U16 len)
}
return 0;
}
+void Lc_memset8bits (void *s,unsigned char c,unsigned char n)
+{
+ const unsigned char uc = c;
+ unsigned char *su;
+ for(su = s;0 < n;++su,--n)
+ *su = uc;
+ }
+
+
#if 0
diff --git a/source/clib/clib.h b/source/clib/clib.h
index 41bc041..add9a20 100644
--- a/source/clib/clib.h
+++ b/source/clib/clib.h
@@ -30,6 +30,9 @@ typedef struct
extern U8 Lc_Hex2Char(U8 CharStr);
extern int Lc_strlen(const char *str);
extern U8* Lc_strcpy(U8* dst,const char* str);
+extern long hexToDec(const char *source);
+extern int getIndexOfSigns(char ch);
+
//extern void Lc_int2str(U32 ui_in,UN_TYPE len,UN_TYPE point,char *d);
// input: 123456d
// output: '1' '2' '3'....
@@ -97,7 +100,7 @@ extern vS32 Lc_S32_media(vS32 val[],S16 num);
extern void Lc_array_sort(S32 arr[],int n);
/// 0x11 0x22 ---> 0x31 0x31 0x32 0x32 '1' '1' '2' '2'
-extern void Lc_hex2ascii(U8 *buf,U16 len,U8 *ascii);
+extern void Lc_hex2ascii(U8 *buf,U8 *ascii,U16 len);
extern void crc16(unsigned char *CRC,void *dat,unsigned int len) /*reentrant*/;
extern void crc16_irq(unsigned char *CRC,void *dat,unsigned int len);
extern int isBigEndianOrder(void);
@@ -115,6 +118,8 @@ extern int Lc_memset(U8 *buf,U8 c,U16 len);
extern void Lc_buf_copy_uc(U8 *dst,U8 *src,U16 len);
extern U8 Lc_strStartsWith(U8 *s1,U8 *s2);
+void Lc_memset8bits (void *s,unsigned char c,unsigned char n);
+
#endif /* end __UART_H */
/*****************************************************************************
diff --git a/source/clib/type.h b/source/clib/type.h
index 439b662..2db1efd 100644
--- a/source/clib/type.h
+++ b/source/clib/type.h
@@ -1,23 +1,34 @@
//////////////////////////////////////////////////////////////////////////
/// COPYRIGHT NOTICE
-/// Copyright (c) 2020, ؿƼ
+/// Copyright (c) 2020, 传控科技
/// All rights reserved.
///
/// @file main.c
/// @brief main app
///
-///ļʵֵĹܵ
+///(本文件实现的功能的详述)
///
/// @version 1.1 CCsens technology
/// @author CC
/// @date 20150102
///
///
-/// ˵汾
+/// 修订说明:最初版本
/// Modified by: cc
/// Modified date: 20200531
/// Version:
/// Descriptions: add u8
+/// Modified by: cc
+/// Modified date: 20211222
+/// Version:
+/// Descriptions: add uint32_t
+#if 0
+abs(x)
+{
+ y = x<<31;
+ return(x^y)-y;//也可写作 (x+y)^y
+}
+#endif
//////////////////////////////////////////////////////////////////////////
@@ -82,7 +93,7 @@
#endif
/*********************************************************************************************************
- ص
+ 定义与编译器无关的数据类型
*********************************************************************************************************/
typedef unsigned char U8;
@@ -91,7 +102,7 @@ typedef volatile U8 vU8;
-typedef U8 BOOLEAN; /* */
+typedef U8 BOOLEAN; /* 布尔变量 */
typedef U8 *PU8;
typedef U8 BYTE;
typedef signed char S8;
@@ -104,52 +115,61 @@ typedef signed char *PS8;
//#define code
typedef unsigned short u16;
-typedef unsigned short U16; /* 16λͱ */
-typedef volatile U16 vU16; /* 16λͱ */
+typedef unsigned short U16; /* 无符号16位整型变量 */
+typedef volatile U16 vU16; /* 无符号16位整型变量 */
typedef signed short S16;
-typedef volatile S16 vS16; /* з16λͱ */
+typedef volatile S16 vS16; /* 有符号16位整型变量 */
typedef signed long S32;
-typedef unsigned long U32; /* 32λͱ */
-typedef volatile U32 vU32; /* з32λͱ */
+typedef unsigned long U32; /* 无符号32位整型变量 */
+typedef volatile U32 vU32; /* 有符号32位整型变量 */
typedef volatile signed long vS32;
-typedef float FP32; /* ȸ32λȣ */
-typedef double FP64; /* ˫ȸ64λȣ */
+typedef float FP32; /* 单精度浮点数(32位长度) */
+typedef double FP64; /* 双精度浮点数(64位长度) */
-//typedef unsigned char BOOLEAN; //
-typedef unsigned char INT8U; // 8λͱ
-typedef signed char INT8S; // з8λͱ
-typedef unsigned short INT16U; // 16λͱ
-typedef signed short INT16S; // з16λͱ
-typedef unsigned long INT32U; // 32λͱ
+//typedef unsigned char BOOLEAN; // 布尔变量
+typedef unsigned char INT8U; // 无符号8位整型变量
+typedef signed char INT8S; // 有符号8位整型变量
+typedef unsigned short INT16U; // 无符号16位整型变量
+typedef signed short INT16S; // 有符号16位整型变量
+typedef unsigned long INT32U; // 无符号32位整型变量
+typedef unsigned char uint8_t;
+typedef unsigned long uint32_t;////51
+///typedef unsigned long long uint64_t;////51
-typedef signed long INT32S; // з32λͱ
-//typedef float FP32; // ȸ32λȣ
-//typedef double FP64; // ˫ȸ64λȣ
+///typedef volatile uint64_t vU64;
-typedef unsigned int FLAG_P; //
-//typedef unsigned char INTU; // 8BIT MCU
-typedef unsigned int INTU; // 32BIT MCU
+typedef unsigned short uint16_t; /////
+
+typedef signed long INT32S; // 有符号32位整型变量
+//typedef float FP32; // 单精度浮点数(32位长度)
+//typedef double FP64; // 双精度浮点数(64位长度)
+
+typedef unsigned int FLAG_P; // 标准类变量
+//typedef unsigned char INTU; // 标准类变量8BIT MCU
+typedef unsigned int INTU; // 标准类变量32BIT MCU
/******************
**************************/
+////for TTSS 2022011 cc
+typedef vU32 TtimeStamp;
/*********************************************************************************************************
- ֵ
+ 返回值定义
*********************************************************************************************************/
-#define ZY_OK 0 /* ɹ */
-#define ZY_NOT_OK 1 /* ʧ */
-#define ZY_PARAMETER_ERR 2 /* */
-#define ZY_NO_FIND_FUNCTION 6 /* ûзָ */
-#define ZY_NO_MEMORY 12 /* ڴ治 */
-#define ZY_TIME_OUT 13 /* ʱ */
-#define ZY_NO_FIND_OBJECT 16 /* ûзֶ */
+#define ZY_OK 0 /* 操作成功 */
+#define ZY_NOT_OK 1 /* 操作失败 */
+#define ZY_PARAMETER_ERR 2 /* 参数错误 */
+#define ZY_NO_FIND_FUNCTION 6 /* 没有发现指定函数 */
+#define ZY_NO_MEMORY 12 /* 内存不足 */
+#define ZY_TIME_OUT 13 /* 超时 */
+#define ZY_NO_FIND_OBJECT 16 /* 没有发现对象 */
/*********************************************************************************************************
- realViewҪӵͷļ
+ realView编译器需要添加的头文件
*********************************************************************************************************/
#include
#include
@@ -166,6 +186,20 @@ typedef enum {DISABLE = 0, ENABLE = !DISABLE} FunctionalState;
typedef U8 UN_TYPE;
typedef U8 vtype;
+/// >>>>>>>>>>>>>>>>>>>cc: sd znfat
+#define UINT8 unsigned char
+#define UINT16 unsigned int
+#define UINT32 unsigned long
+
+#define INT8 char
+#define INT16 int
+#define INT32 long
+
+#define ROM_TYPE_UINT8 unsigned char code
+#define ROM_TYPE_UINT16 unsigned int code
+#define ROM_TYPE_UINT32 unsigned long code
+
+///<<<<<<<<<<<<<<<<<<<<<>4)
#define D_uc_low(ww) ((ww)&0x0f)
diff --git a/source/clib/type.h.bak b/source/clib/type.h.bak
new file mode 100644
index 0000000..af6bfec
--- /dev/null
+++ b/source/clib/type.h.bak
@@ -0,0 +1,355 @@
+//////////////////////////////////////////////////////////////////////////
+/// COPYRIGHT NOTICE
+/// Copyright (c) 2020, 传控科技
+/// All rights reserved.
+///
+/// @file main.c
+/// @brief main app
+///
+///(本文件实现的功能的详述)
+///
+/// @version 1.1 CCsens technology
+/// @author CC
+/// @date 20150102
+///
+///
+/// 修订说明:最初版本
+/// Modified by: cc
+/// Modified date: 20200531
+/// Version:
+/// Descriptions: add u8
+/// Modified by: cc
+/// Modified date: 20211222
+/// Version:
+/// Descriptions: add uint32_t
+#if 0
+abs(x)
+{
+ y = x<<31;
+ return(x^y)-y;//也可写作 (x+y)^y
+}
+#endif
+//////////////////////////////////////////////////////////////////////////
+
+
+//#include
+
+#ifndef __TYPE_H__
+#define __TYPE_H__
+
+#ifndef NULL
+#define NULL ((void *)0)
+#endif
+
+#ifndef FALSE
+#define FALSE (0)
+#endif
+
+#ifndef D_stop
+#define D_stop (1)
+#endif
+
+#ifndef D_run
+#define D_run (0)
+#endif
+
+#ifndef D_ready
+#define D_ready (1)
+#endif
+
+#ifndef D_ready2
+#define D_ready2 (2)
+#endif
+
+
+#ifndef D_max
+#define D_max (3)
+#endif
+
+
+
+#ifndef D_diff
+#define D_diff (4)
+#endif
+
+#ifndef D_set
+#define D_set (1)
+#endif
+
+
+
+#ifndef D_clear
+#define D_clear (0)
+#endif
+#define D_ON 1
+#define D_OFF 0
+
+#define D_sleep_wakeup 3
+#define D_sleep 1
+#define D_wakeup 0
+
+#ifndef TRUE
+#define TRUE (1)
+#endif
+
+/*********************************************************************************************************
+ 定义与编译器无关的数据类型
+*********************************************************************************************************/
+
+typedef unsigned char U8;
+typedef unsigned char u8;
+typedef volatile U8 vU8;
+
+
+
+typedef U8 BOOLEAN; /* 布尔变量 */
+typedef U8 *PU8;
+typedef U8 BYTE;
+typedef signed char S8;
+typedef volatile signed char vS8;
+typedef signed char *PS8;
+
+
+
+#define bit char
+//#define code
+
+typedef unsigned short u16;
+typedef unsigned short U16; /* 无符号16位整型变量 */
+typedef volatile U16 vU16; /* 无符号16位整型变量 */
+typedef signed short S16;
+typedef volatile S16 vS16; /* 有符号16位整型变量 */
+
+typedef signed long S32;
+typedef unsigned long U32; /* 无符号32位整型变量 */
+typedef volatile U32 vU32; /* 有符号32位整型变量 */
+typedef volatile signed long vS32;
+
+typedef float FP32; /* 单精度浮点数(32位长度) */
+typedef double FP64; /* 双精度浮点数(64位长度) */
+
+
+//typedef unsigned char BOOLEAN; // 布尔变量
+typedef unsigned char INT8U; // 无符号8位整型变量
+typedef signed char INT8S; // 有符号8位整型变量
+typedef unsigned short INT16U; // 无符号16位整型变量
+typedef signed short INT16S; // 有符号16位整型变量
+typedef unsigned long INT32U; // 无符号32位整型变量
+
+typedef signed long INT32S; // 有符号32位整型变量
+//typedef float FP32; // 单精度浮点数(32位长度)
+//typedef double FP64; // 双精度浮点数(64位长度)
+
+typedef unsigned int FLAG_P; // 标准类变量
+//typedef unsigned char INTU; // 标准类变量8BIT MCU
+typedef unsigned int INTU; // 标准类变量32BIT MCU
+/******************
+**************************/
+
+
+
+/*********************************************************************************************************
+ 返回值定义
+*********************************************************************************************************/
+#define ZY_OK 0 /* 操作成功 */
+#define ZY_NOT_OK 1 /* 操作失败 */
+#define ZY_PARAMETER_ERR 2 /* 参数错误 */
+#define ZY_NO_FIND_FUNCTION 6 /* 没有发现指定函数 */
+#define ZY_NO_MEMORY 12 /* 内存不足 */
+#define ZY_TIME_OUT 13 /* 超时 */
+#define ZY_NO_FIND_OBJECT 16 /* 没有发现对象 */
+
+/*********************************************************************************************************
+ realView编译器需要添加的头文件
+*********************************************************************************************************/
+#include
+#include
+#include
+//#include
+#define D_flag_lock 2
+#define D_flag_clear 0
+#define D_flag_CanUse 1
+
+
+typedef enum {RESET = 0, SET = !RESET} FlagStatus, ITStatus;
+typedef enum {DISABLE = 0, ENABLE = !DISABLE} FunctionalState;
+
+typedef U8 UN_TYPE;
+typedef U8 vtype;
+
+/// >>>>>>>>>>>>>>>>>>>cc: sd znfat
+#define UINT8 unsigned char
+#define UINT16 unsigned int
+#define UINT32 unsigned long
+
+#define INT8 char
+#define INT16 int
+#define INT32 long
+
+#define ROM_TYPE_UINT8 unsigned char code
+#define ROM_TYPE_UINT16 unsigned int code
+#define ROM_TYPE_UINT32 unsigned long code
+
+///<<<<<<<<<<<<<<<<<<<<<>>>>
+
+
+typedef union
+{
+ vU32 ui;
+ vU16 s[2];
+ vU8 d[4];
+}tu_ui4uc;
+
+typedef union
+{
+ vU16 word;
+ struct
+ {
+ vU8 h;
+ vU8 l;
+ }BYTE2;
+}U_U16;
+
+typedef union
+{
+ vU32 dWord;
+ ///High 0123 Low
+ struct
+ {
+ vU8 byte0;
+ vU8 byte1;
+ vU8 byte2;
+ vU8 byte3;
+ }BYTE4;
+}U_U32;
+typedef union
+{
+ vU32 d32[2];
+
+ vU16 d16[4];
+
+ vU8 d[8];
+}U_U64;
+
+
+typedef union
+{
+ vU16 us;
+ vU8 uc[2];
+ struct
+ {
+ vU8 H;
+ vU8 L;
+ }BYTE2;
+}U_F16;
+/**********
+k.us = 0x1234
+uc
+ [0]=0x12
+ [1]=0x34
+byte2
+ H=0x12
+ L=0x34
+
+**********/
+
+
+
+typedef union
+{
+ float fl;
+ vU8 uc[4];
+
+}U_F32;
+
+typedef struct
+{
+ vU8 *buffer;
+ vU8 wpt;
+ vU8 rpt;
+ vU8 cnt;
+}byte_len_fifo_struct;
+
+typedef struct
+{
+ vU16 *buffer;
+ vU16 wpt;
+ vU16 rpt;
+ vU16 cnt;
+}word_len_fifo_struct;
+
+typedef struct
+{
+ vU16 x;
+ vU16 y;
+}point_struct;
+
+
+typedef struct
+{
+ vU16 x;
+ vU16 y;
+ vU16 width;
+ vU16 height;
+}rect_struct;
+
+
+#define HIGHT 1
+#define LOW 0
+#if 0
+#ifndef MIN
+#define MIN(a,b) (((a) < (b)) ? (a) : (b))
+#endif
+
+#ifndef MAX
+#define MAX(a, b) (((a) > (b)) ? (a) : (b))
+#endif
+#endif
+#ifndef ABS
+#define ABS(a, b) (((a) > (b)) ? ((a) - (b)) : ((b) - (a)))
+#endif
+
+
+#define F_FINSIH 1
+#define F_WORKING 0
+#define F_WAITINGKEY 2
+
+
+#define DF_var_up(v,step,max,init) (v) += (step);if((v) > (max)) (v) = (init);
+//if step > 1 bug warning!!
+#define DF_var_down(v,step,min,init) \
+if((v) < ((min) + (step))) \
+{ \
+ (v) = (init); \
+}else \
+{ \
+ (v) -= (step); \
+}
+
+#define D_us2uc_H(x) (U8)(0x00ff&((x)>>8))
+#define D_us2uc_L(x) (U8)(0x00ff&(x))
+
+
+#define D_2uc2_us(H,L) ((((U16)H)<<8)|((U16)L))
+
+#define D_ul2uc_0(xx) (U8)(0x000000ff&(xx))
+#define D_uc_high(ww) ((ww)>>4)
+#define D_uc_low(ww) ((ww)&0x0f)
+
+#define L0_type_byte(x) ((U8 *) &(x))
+
+
+//#define _nop_ __NOP
+// #define _nop_
+
+
+extern void L3_us_big(U16 *d);
+extern void L3_ui_big(vU32 *d);
+#endif /* __TYPE_H__ */
diff --git a/source/cpu/STC_stc8h3k.H b/source/cpu/STC_stc8h3k.H
new file mode 100644
index 0000000..41d5dee
--- /dev/null
+++ b/source/cpu/STC_stc8h3k.H
@@ -0,0 +1,1394 @@
+#ifndef __STC_stc8h3k_H_
+#define __STC_stc8h3k_H_
+// STC_stc8a8k.h
+#include
+
+#if 0
+
+/////////////////////////////////////////////////
+正在检测目标单片机 ...
+ 单片机型号: STC8H3K64S4
+ 固件版本号: 7.4.1U
+
+当前芯片的硬件选项为:
+ . 系统ISP工作频率: 23.801MHz
+ . 内部IRC振荡器的频率: 22.123MHz
+ . 掉电唤醒定时器的频率: 35.400KHz
+ . 振荡器放大增益使能
+ . P3.2和P3.3与下次下载无关
+ . 上电复位时增加额外的复位延时
+ . 复位引脚用作普通I/O口
+ . 检测到低压时复位
+ . 低压检测门槛电压 : 2.00 V
+ . 上电复位时,硬件不启动内部看门狗
+ . 上电自动启动内部看门狗时的预分频数为 : 256
+ . 空闲状态时看门狗定时器停止计数
+ . 启动看门狗后,软件可以修改分频数,但不能关闭看门狗
+ . 下次下载用户程序时,将用户EEPROM区一并擦除
+ . 下次下载用户程序时,没有相关的端口控制485
+ . 下次下载时不需要校验下载口令
+ . 内部参考电压: 1185 mV (参考范围: 1100~1300mV)
+ . 内部安排测试时间: 2021年8月16日
+
+ 单片机型号: STC8H3K64S4
+ 固件版本号: 7.4.1U
+
+
+操作成功 !(2021-12-25 21:35:51)
+
+
+/////////////////////////////////////////////////
+
+#endif
+/////////////////////////////////////////////////
+
+/////////////////////////////////////////////////
+
+//包含本头文件后,不用另外再包含"REG51.H"
+
+sfr P0 = 0x80;
+sbit P00 = P0^0;
+sbit P01 = P0^1;
+sbit P02 = P0^2;
+sbit P03 = P0^3;
+sbit P04 = P0^4;
+sbit P05 = P0^5;
+sbit P06 = P0^6;
+sbit P07 = P0^7;
+sfr SP = 0x81;
+sfr DPL = 0x82;
+sfr DPH = 0x83;
+sfr S4CON = 0x84;
+sfr S4BUF = 0x85;
+sfr PCON = 0x87;
+sfr TCON = 0x88;
+sbit TF1 = TCON^7;
+sbit TR1 = TCON^6;
+sbit TF0 = TCON^5;
+sbit TR0 = TCON^4;
+sbit IE1 = TCON^3;
+sbit IT1 = TCON^2;
+sbit IE0 = TCON^1;
+sbit IT0 = TCON^0;
+sfr TMOD = 0x89;
+sfr TL0 = 0x8a;
+sfr TL1 = 0x8b;
+sfr TH0 = 0x8c;
+sfr TH1 = 0x8d;
+sfr AUXR = 0x8e;
+sfr INTCLKO = 0x8f;
+sfr P1 = 0x90;
+sbit P10 = P1^0;
+sbit P11 = P1^1;
+sbit P12 = P1^2;
+sbit P13 = P1^3;
+sbit P14 = P1^4;
+sbit P15 = P1^5;
+sbit P16 = P1^6;
+sbit P17 = P1^7;
+sfr P1M1 = 0x91;
+sfr P1M0 = 0x92;
+sfr P0M1 = 0x93;
+sfr P0M0 = 0x94;
+sfr P2M1 = 0x95;
+sfr P2M0 = 0x96;
+sfr SCON = 0x98;
+sbit SM0 = SCON^7;
+sbit SM1 = SCON^6;
+sbit SM2 = SCON^5;
+sbit REN = SCON^4;
+sbit TB8 = SCON^3;
+sbit RB8 = SCON^2;
+sbit TI = SCON^1;
+sbit RI = SCON^0;
+sfr SBUF = 0x99;
+sfr S2CON = 0x9a;
+sfr S2BUF = 0x9b;
+sfr IRCBAND = 0x9d;
+sfr LIRTRIM = 0x9e;
+sfr IRTRIM = 0x9f;
+sfr P2 = 0xa0;
+sbit P20 = P2^0;
+sbit P21 = P2^1;
+sbit P22 = P2^2;
+sbit P23 = P2^3;
+sbit P24 = P2^4;
+sbit P25 = P2^5;
+sbit P26 = P2^6;
+sbit P27 = P2^7;
+sfr P_SW1 = 0xa2;
+sfr IE = 0xa8;
+sbit EA = IE^7;
+sbit ELVD = IE^6;
+sbit EADC = IE^5;
+sbit ES = IE^4;
+sbit ET1 = IE^3;
+sbit EX1 = IE^2;
+sbit ET0 = IE^1;
+sbit EX0 = IE^0;
+sfr SADDR = 0xa9;
+sfr WKTCL = 0xaa;
+sfr WKTCH = 0xab;
+sfr S3CON = 0xac;
+sfr S3BUF = 0xad;
+sfr TA = 0xae;
+sfr IE2 = 0xaf;
+sfr P3 = 0xb0;
+sbit P30 = P3^0;
+sbit P31 = P3^1;
+sbit P32 = P3^2;
+sbit P33 = P3^3;
+sbit P34 = P3^4;
+sbit P35 = P3^5;
+sbit P36 = P3^6;
+sbit P37 = P3^7;
+sfr P3M1 = 0xb1;
+sfr P3M0 = 0xb2;
+sfr P4M1 = 0xb3;
+sfr P4M0 = 0xb4;
+sfr IP2 = 0xb5;
+sfr IP2H = 0xb6;
+sfr IPH = 0xb7;
+sfr IP = 0xb8;
+sbit PPCA = IP^7;
+sbit PLVD = IP^6;
+sbit PADC = IP^5;
+sbit PS = IP^4;
+sbit PT1 = IP^3;
+sbit PX1 = IP^2;
+sbit PT0 = IP^1;
+sbit PX0 = IP^0;
+sfr SADEN = 0xb9;
+sfr P_SW2 = 0xba;
+sfr ADC_CONTR = 0xbc;
+sfr ADC_RES = 0xbd;
+sfr ADC_RESL = 0xbe;
+sfr P4 = 0xc0;
+sbit P40 = P4^0;
+sbit P41 = P4^1;
+sbit P42 = P4^2;
+sbit P43 = P4^3;
+sbit P44 = P4^4;
+sbit P45 = P4^5;
+sbit P46 = P4^6;
+sbit P47 = P4^7;
+sfr WDT_CONTR = 0xc1;
+sfr IAP_DATA = 0xc2;
+sfr IAP_ADDRH = 0xc3;
+sfr IAP_ADDRL = 0xc4;
+sfr IAP_CMD = 0xc5;
+sfr IAP_TRIG = 0xc6;
+sfr IAP_CONTR = 0xc7;
+sfr P5 = 0xc8;
+sbit P50 = P5^0;
+sbit P51 = P5^1;
+sbit P52 = P5^2;
+sbit P53 = P5^3;
+sbit P54 = P5^4;
+sbit P55 = P5^5;
+sbit P56 = P5^6;
+sbit P57 = P5^7;
+sfr P5M1 = 0xc9;
+sfr P5M0 = 0xca;
+sfr P6M1 = 0xcb;
+sfr P6M0 = 0xcc;
+sfr SPSTAT = 0xcd;
+sfr SPCTL = 0xce;
+sfr SPDAT = 0xcf;
+sfr PSW = 0xd0;
+sbit CY = PSW^7;
+sbit AC = PSW^6;
+sbit F0 = PSW^5;
+sbit RS1 = PSW^4;
+sbit RS0 = PSW^3;
+sbit OV = PSW^2;
+sbit F1 = PSW^1;
+sbit P = PSW^0;
+sfr T4T3M = 0xd1;
+sfr T4H = 0xd2;
+sfr T4L = 0xd3;
+sfr T3H = 0xd4;
+sfr T3L = 0xd5;
+sfr T2H = 0xd6;
+sfr T2L = 0xd7;
+sfr USBCLK = 0xdc;
+sfr ADCCFG = 0xde;
+sfr IP3 = 0xdf;
+sfr ACC = 0xe0;
+sfr P7M1 = 0xe1;
+sfr P7M0 = 0xe2;
+sfr DPS = 0xe3;
+sfr DPL1 = 0xe4;
+sfr DPH1 = 0xe5;
+sfr CMPCR1 = 0xe6;
+sfr CMPCR2 = 0xe7;
+sfr P6 = 0xe8;
+sfr USBDAT = 0xec;
+sfr IP3H = 0xee;
+sfr AUXINTIF = 0xef;
+sfr B = 0xf0;
+sfr USBCON = 0xf4;
+sfr IAP_TPS = 0xf5;
+sfr P7 = 0xf8;
+sfr USBADR = 0xfc;
+sfr RSTCFG = 0xff;
+
+//如下特殊功能寄存器位于扩展RAM区域
+//访问这些寄存器,需先将P_SW2的BIT7设置为1,才可正常读写
+
+/////////////////////////////////////////////////
+//FF00H-FFFFH
+/////////////////////////////////////////////////
+
+
+
+/////////////////////////////////////////////////
+//FE00H-FEFFH
+/////////////////////////////////////////////////
+
+#define CKSEL (*(unsigned char volatile xdata *)0xfe00)
+#define CLKDIV (*(unsigned char volatile xdata *)0xfe01)
+#define HIRCCR (*(unsigned char volatile xdata *)0xfe02)
+#define XOSCCR (*(unsigned char volatile xdata *)0xfe03)
+#define IRC32KCR (*(unsigned char volatile xdata *)0xfe04)
+#define MCLKOCR (*(unsigned char volatile xdata *)0xfe05)
+#define IRCDB (*(unsigned char volatile xdata *)0xfe06)
+#define X32KCR (*(unsigned char volatile xdata *)0xfe08)
+
+#define P0PU (*(unsigned char volatile xdata *)0xfe10)
+#define P1PU (*(unsigned char volatile xdata *)0xfe11)
+#define P2PU (*(unsigned char volatile xdata *)0xfe12)
+#define P3PU (*(unsigned char volatile xdata *)0xfe13)
+#define P4PU (*(unsigned char volatile xdata *)0xfe14)
+#define P5PU (*(unsigned char volatile xdata *)0xfe15)
+#define P6PU (*(unsigned char volatile xdata *)0xfe16)
+#define P7PU (*(unsigned char volatile xdata *)0xfe17)
+#define P0NCS (*(unsigned char volatile xdata *)0xfe18)
+#define P1NCS (*(unsigned char volatile xdata *)0xfe19)
+#define P2NCS (*(unsigned char volatile xdata *)0xfe1a)
+#define P3NCS (*(unsigned char volatile xdata *)0xfe1b)
+#define P4NCS (*(unsigned char volatile xdata *)0xfe1c)
+#define P5NCS (*(unsigned char volatile xdata *)0xfe1d)
+#define P6NCS (*(unsigned char volatile xdata *)0xfe1e)
+#define P7NCS (*(unsigned char volatile xdata *)0xfe1f)
+#define P0SR (*(unsigned char volatile xdata *)0xfe20)
+#define P1SR (*(unsigned char volatile xdata *)0xfe21)
+#define P2SR (*(unsigned char volatile xdata *)0xfe22)
+#define P3SR (*(unsigned char volatile xdata *)0xfe23)
+#define P4SR (*(unsigned char volatile xdata *)0xfe24)
+#define P5SR (*(unsigned char volatile xdata *)0xfe25)
+#define P6SR (*(unsigned char volatile xdata *)0xfe26)
+#define P7SR (*(unsigned char volatile xdata *)0xfe27)
+#define P0DR (*(unsigned char volatile xdata *)0xfe28)
+#define P1DR (*(unsigned char volatile xdata *)0xfe29)
+#define P2DR (*(unsigned char volatile xdata *)0xfe2a)
+#define P3DR (*(unsigned char volatile xdata *)0xfe2b)
+#define P4DR (*(unsigned char volatile xdata *)0xfe2c)
+#define P5DR (*(unsigned char volatile xdata *)0xfe2d)
+#define P6DR (*(unsigned char volatile xdata *)0xfe2e)
+#define P7DR (*(unsigned char volatile xdata *)0xfe2f)
+#define P0IE (*(unsigned char volatile xdata *)0xfe30)
+#define P1IE (*(unsigned char volatile xdata *)0xfe31)
+#define P2IE (*(unsigned char volatile xdata *)0xfe32)
+#define P3IE (*(unsigned char volatile xdata *)0xfe33)
+#define P4IE (*(unsigned char volatile xdata *)0xfe34)
+#define P5IE (*(unsigned char volatile xdata *)0xfe35)
+#define P6IE (*(unsigned char volatile xdata *)0xfe36)
+#define P7IE (*(unsigned char volatile xdata *)0xfe37)
+
+#define RTCCR (*(unsigned char volatile xdata *)0xfe60)
+#define RTCCFG (*(unsigned char volatile xdata *)0xfe61)
+#define RTCIEN (*(unsigned char volatile xdata *)0xfe62)
+#define RTCIF (*(unsigned char volatile xdata *)0xfe63)
+#define ALAHOUR (*(unsigned char volatile xdata *)0xfe64)
+#define ALAMIN (*(unsigned char volatile xdata *)0xfe65)
+#define ALASEC (*(unsigned char volatile xdata *)0xfe66)
+#define ALASSEC (*(unsigned char volatile xdata *)0xfe67)
+#define INIYEAR (*(unsigned char volatile xdata *)0xfe68)
+#define INIMONTH (*(unsigned char volatile xdata *)0xfe69)
+#define INIDAY (*(unsigned char volatile xdata *)0xfe6a)
+#define INIHOUR (*(unsigned char volatile xdata *)0xfe6b)
+#define INIMIN (*(unsigned char volatile xdata *)0xfe6c)
+#define INISEC (*(unsigned char volatile xdata *)0xfe6d)
+#define INISSEC (*(unsigned char volatile xdata *)0xfe6e)
+#define YEAR (*(unsigned char volatile xdata *)0xfe70)
+#define MONTH (*(unsigned char volatile xdata *)0xfe71)
+#define DAY (*(unsigned char volatile xdata *)0xfe72)
+#define HOUR (*(unsigned char volatile xdata *)0xfe73)
+#define MINI (*(unsigned char volatile xdata *)0xfe74)
+#define SEC (*(unsigned char volatile xdata *)0xfe75)
+#define SSEC (*(unsigned char volatile xdata *)0xfe76)
+
+#define I2CCFG (*(unsigned char volatile xdata *)0xfe80)
+#define I2CMSCR (*(unsigned char volatile xdata *)0xfe81)
+#define I2CMSST (*(unsigned char volatile xdata *)0xfe82)
+#define I2CSLCR (*(unsigned char volatile xdata *)0xfe83)
+#define I2CSLST (*(unsigned char volatile xdata *)0xfe84)
+#define I2CSLADR (*(unsigned char volatile xdata *)0xfe85)
+#define I2CTXD (*(unsigned char volatile xdata *)0xfe86)
+#define I2CRXD (*(unsigned char volatile xdata *)0xfe87)
+#define I2CMSAUX (*(unsigned char volatile xdata *)0xfe88)
+#define TM2PS (*(unsigned char volatile xdata *)0xfea2)
+#define TM3PS (*(unsigned char volatile xdata *)0xfea3)
+#define TM4PS (*(unsigned char volatile xdata *)0xfea4)
+#define ADCTIM (*(unsigned char volatile xdata *)0xfea8)
+#define T3T4PIN (*(unsigned char volatile xdata *)0xfeac)
+
+#define PWM1_ETRPS (*(unsigned char volatile xdata *)0xfeb0)
+#define PWM1_ENO (*(unsigned char volatile xdata *)0xfeb1)
+#define PWM1_PS (*(unsigned char volatile xdata *)0xfeb2)
+#define PWM1_IOAUX (*(unsigned char volatile xdata *)0xfeb3)
+#define PWM2_ETRPS (*(unsigned char volatile xdata *)0xfeb4)
+#define PWM2_ENO (*(unsigned char volatile xdata *)0xfeb5)
+#define PWM2_PS (*(unsigned char volatile xdata *)0xfeb6)
+#define PWM2_IOAUX (*(unsigned char volatile xdata *)0xfeb7)
+#define PWM1_CR1 (*(unsigned char volatile xdata *)0xfec0)
+#define PWM1_CR2 (*(unsigned char volatile xdata *)0xfec1)
+#define PWM1_SMCR (*(unsigned char volatile xdata *)0xfec2)
+#define PWM1_ETR (*(unsigned char volatile xdata *)0xfec3)
+#define PWM1_IER (*(unsigned char volatile xdata *)0xfec4)
+#define PWM1_SR1 (*(unsigned char volatile xdata *)0xfec5)
+#define PWM1_SR2 (*(unsigned char volatile xdata *)0xfec6)
+#define PWM1_EGR (*(unsigned char volatile xdata *)0xfec7)
+#define PWM1_CCMR1 (*(unsigned char volatile xdata *)0xfec8)
+#define PWM1_CCMR2 (*(unsigned char volatile xdata *)0xfec9)
+#define PWM1_CCMR3 (*(unsigned char volatile xdata *)0xfeca)
+#define PWM1_CCMR4 (*(unsigned char volatile xdata *)0xfecb)
+#define PWM1_CCER1 (*(unsigned char volatile xdata *)0xfecc)
+#define PWM1_CCER2 (*(unsigned char volatile xdata *)0xfecd)
+#define PWM1_CNTR (*(unsigned int volatile xdata *)0xfece)
+#define PWM1_CNTRH (*(unsigned char volatile xdata *)0xfece)
+#define PWM1_CNTRL (*(unsigned char volatile xdata *)0xfecf)
+#define PWM1_PSCR (*(unsigned int volatile xdata *)0xfed0)
+#define PWM1_PSCRH (*(unsigned char volatile xdata *)0xfed0)
+#define PWM1_PSCRL (*(unsigned char volatile xdata *)0xfed1)
+#define PWM1_ARR (*(unsigned int volatile xdata *)0xfed2)
+#define PWM1_ARRH (*(unsigned char volatile xdata *)0xfed2)
+#define PWM1_ARRL (*(unsigned char volatile xdata *)0xfed3)
+#define PWM1_RCR (*(unsigned char volatile xdata *)0xfed4)
+#define PWM1_CCR1 (*(unsigned int volatile xdata *)0xfed5)
+#define PWM1_CCR1H (*(unsigned char volatile xdata *)0xfed5)
+#define PWM1_CCR1L (*(unsigned char volatile xdata *)0xfed6)
+#define PWM1_CCR2 (*(unsigned int volatile xdata *)0xfed7)
+#define PWM1_CCR2H (*(unsigned char volatile xdata *)0xfed7)
+#define PWM1_CCR2L (*(unsigned char volatile xdata *)0xfed8)
+#define PWM1_CCR3 (*(unsigned int volatile xdata *)0xfed9)
+#define PWM1_CCR3H (*(unsigned char volatile xdata *)0xfed9)
+#define PWM1_CCR3L (*(unsigned char volatile xdata *)0xfeda)
+#define PWM1_CCR4 (*(unsigned int volatile xdata *)0xfedb)
+#define PWM1_CCR4H (*(unsigned char volatile xdata *)0xfedb)
+#define PWM1_CCR4L (*(unsigned char volatile xdata *)0xfedc)
+#define PWM1_BKR (*(unsigned char volatile xdata *)0xfedd)
+#define PWM1_DTR (*(unsigned char volatile xdata *)0xfede)
+#define PWM1_OISR (*(unsigned char volatile xdata *)0xfedf)
+#define PWM2_CR1 (*(unsigned char volatile xdata *)0xfee0)
+#define PWM2_CR2 (*(unsigned char volatile xdata *)0xfee1)
+#define PWM2_SMCR (*(unsigned char volatile xdata *)0xfee2)
+#define PWM2_ETR (*(unsigned char volatile xdata *)0xfee3)
+#define PWM2_IER (*(unsigned char volatile xdata *)0xfee4)
+#define PWM2_SR1 (*(unsigned char volatile xdata *)0xfee5)
+#define PWM2_SR2 (*(unsigned char volatile xdata *)0xfee6)
+#define PWM2_EGR (*(unsigned char volatile xdata *)0xfee7)
+#define PWM2_CCMR1 (*(unsigned char volatile xdata *)0xfee8)
+#define PWM2_CCMR2 (*(unsigned char volatile xdata *)0xfee9)
+#define PWM2_CCMR3 (*(unsigned char volatile xdata *)0xfeea)
+#define PWM2_CCMR4 (*(unsigned char volatile xdata *)0xfeeb)
+#define PWM2_CCER1 (*(unsigned char volatile xdata *)0xfeec)
+#define PWM2_CCER2 (*(unsigned char volatile xdata *)0xfeed)
+#define PWM2_CNTR (*(unsigned int volatile xdata *)0xfeee)
+#define PWM2_CNTRH (*(unsigned char volatile xdata *)0xfeee)
+#define PWM2_CNTRL (*(unsigned char volatile xdata *)0xfeef)
+#define PWM2_PSCR (*(unsigned int volatile xdata *)0xfef0)
+#define PWM2_PSCRH (*(unsigned char volatile xdata *)0xfef0)
+#define PWM2_PSCRL (*(unsigned char volatile xdata *)0xfef1)
+#define PWM2_ARR (*(unsigned int volatile xdata *)0xfef2)
+#define PWM2_ARRH (*(unsigned char volatile xdata *)0xfef2)
+#define PWM2_ARRL (*(unsigned char volatile xdata *)0xfef3)
+#define PWM2_RCR (*(unsigned char volatile xdata *)0xfef4)
+#define PWM2_CCR1 (*(unsigned int volatile xdata *)0xfef5)
+#define PWM2_CCR1H (*(unsigned char volatile xdata *)0xfef5)
+#define PWM2_CCR1L (*(unsigned char volatile xdata *)0xfef6)
+#define PWM2_CCR2 (*(unsigned int volatile xdata *)0xfef7)
+#define PWM2_CCR2H (*(unsigned char volatile xdata *)0xfef7)
+#define PWM2_CCR2L (*(unsigned char volatile xdata *)0xfef8)
+#define PWM2_CCR3 (*(unsigned int volatile xdata *)0xfef9)
+#define PWM2_CCR3H (*(unsigned char volatile xdata *)0xfef9)
+#define PWM2_CCR3L (*(unsigned char volatile xdata *)0xfefa)
+#define PWM2_CCR4 (*(unsigned int volatile xdata *)0xfefb)
+#define PWM2_CCR4H (*(unsigned char volatile xdata *)0xfefb)
+#define PWM2_CCR4L (*(unsigned char volatile xdata *)0xfefc)
+#define PWM2_BKR (*(unsigned char volatile xdata *)0xfefd)
+#define PWM2_DTR (*(unsigned char volatile xdata *)0xfefe)
+#define PWM2_OISR (*(unsigned char volatile xdata *)0xfeff)
+
+#define PWMA_ETRPS (*(unsigned char volatile xdata *)0xfeb0)
+#define PWMA_ENO (*(unsigned char volatile xdata *)0xfeb1)
+#define PWMA_PS (*(unsigned char volatile xdata *)0xfeb2)
+#define PWMA_IOAUX (*(unsigned char volatile xdata *)0xfeb3)
+#define PWMB_ETRPS (*(unsigned char volatile xdata *)0xfeb4)
+#define PWMB_ENO (*(unsigned char volatile xdata *)0xfeb5)
+#define PWMB_PS (*(unsigned char volatile xdata *)0xfeb6)
+#define PWMB_IOAUX (*(unsigned char volatile xdata *)0xfeb7)
+#define PWMA_CR1 (*(unsigned char volatile xdata *)0xfec0)
+#define PWMA_CR2 (*(unsigned char volatile xdata *)0xfec1)
+#define PWMA_SMCR (*(unsigned char volatile xdata *)0xfec2)
+#define PWMA_ETR (*(unsigned char volatile xdata *)0xfec3)
+#define PWMA_IER (*(unsigned char volatile xdata *)0xfec4)
+#define PWMA_SR1 (*(unsigned char volatile xdata *)0xfec5)
+#define PWMA_SR2 (*(unsigned char volatile xdata *)0xfec6)
+#define PWMA_EGR (*(unsigned char volatile xdata *)0xfec7)
+#define PWMA_CCMR1 (*(unsigned char volatile xdata *)0xfec8)
+#define PWMA_CCMR2 (*(unsigned char volatile xdata *)0xfec9)
+#define PWMA_CCMR3 (*(unsigned char volatile xdata *)0xfeca)
+#define PWMA_CCMR4 (*(unsigned char volatile xdata *)0xfecb)
+#define PWMA_CCER1 (*(unsigned char volatile xdata *)0xfecc)
+#define PWMA_CCER2 (*(unsigned char volatile xdata *)0xfecd)
+#define PWMA_CNTR (*(unsigned int volatile xdata *)0xfece)
+#define PWMA_CNTRH (*(unsigned char volatile xdata *)0xfece)
+#define PWMA_CNTRL (*(unsigned char volatile xdata *)0xfecf)
+#define PWMA_PSCR (*(unsigned int volatile xdata *)0xfed0)
+#define PWMA_PSCRH (*(unsigned char volatile xdata *)0xfed0)
+#define PWMA_PSCRL (*(unsigned char volatile xdata *)0xfed1)
+#define PWMA_ARR (*(unsigned int volatile xdata *)0xfed2)
+#define PWMA_ARRH (*(unsigned char volatile xdata *)0xfed2)
+#define PWMA_ARRL (*(unsigned char volatile xdata *)0xfed3)
+#define PWMA_RCR (*(unsigned char volatile xdata *)0xfed4)
+#define PWMA_CCR1 (*(unsigned int volatile xdata *)0xfed5)
+#define PWMA_CCR1H (*(unsigned char volatile xdata *)0xfed5)
+#define PWMA_CCR1L (*(unsigned char volatile xdata *)0xfed6)
+#define PWMA_CCR2 (*(unsigned int volatile xdata *)0xfed7)
+#define PWMA_CCR2H (*(unsigned char volatile xdata *)0xfed7)
+#define PWMA_CCR2L (*(unsigned char volatile xdata *)0xfed8)
+#define PWMA_CCR3 (*(unsigned int volatile xdata *)0xfed9)
+#define PWMA_CCR3H (*(unsigned char volatile xdata *)0xfed9)
+#define PWMA_CCR3L (*(unsigned char volatile xdata *)0xfeda)
+#define PWMA_CCR4 (*(unsigned int volatile xdata *)0xfedb)
+#define PWMA_CCR4H (*(unsigned char volatile xdata *)0xfedb)
+#define PWMA_CCR4L (*(unsigned char volatile xdata *)0xfedc)
+#define PWMA_BKR (*(unsigned char volatile xdata *)0xfedd)
+#define PWMA_DTR (*(unsigned char volatile xdata *)0xfede)
+#define PWMA_OISR (*(unsigned char volatile xdata *)0xfedf)
+#define PWMB_CR1 (*(unsigned char volatile xdata *)0xfee0)
+#define PWMB_CR2 (*(unsigned char volatile xdata *)0xfee1)
+#define PWMB_SMCR (*(unsigned char volatile xdata *)0xfee2)
+#define PWMB_ETR (*(unsigned char volatile xdata *)0xfee3)
+#define PWMB_IER (*(unsigned char volatile xdata *)0xfee4)
+#define PWMB_SR1 (*(unsigned char volatile xdata *)0xfee5)
+#define PWMB_SR2 (*(unsigned char volatile xdata *)0xfee6)
+#define PWMB_EGR (*(unsigned char volatile xdata *)0xfee7)
+#define PWMB_CCMR1 (*(unsigned char volatile xdata *)0xfee8)
+#define PWMB_CCMR2 (*(unsigned char volatile xdata *)0xfee9)
+#define PWMB_CCMR3 (*(unsigned char volatile xdata *)0xfeea)
+#define PWMB_CCMR4 (*(unsigned char volatile xdata *)0xfeeb)
+#define PWMB_CCER1 (*(unsigned char volatile xdata *)0xfeec)
+#define PWMB_CCER2 (*(unsigned char volatile xdata *)0xfeed)
+#define PWMB_CNTR (*(unsigned int volatile xdata *)0xfeee)
+#define PWMB_CNTRH (*(unsigned char volatile xdata *)0xfeee)
+#define PWMB_CNTRL (*(unsigned char volatile xdata *)0xfeef)
+#define PWMB_PSCR (*(unsigned int volatile xdata *)0xfef0)
+#define PWMB_PSCRH (*(unsigned char volatile xdata *)0xfef0)
+#define PWMB_PSCRL (*(unsigned char volatile xdata *)0xfef1)
+#define PWMB_ARR (*(unsigned int volatile xdata *)0xfef2)
+#define PWMB_ARRH (*(unsigned char volatile xdata *)0xfef2)
+#define PWMB_ARRL (*(unsigned char volatile xdata *)0xfef3)
+#define PWMB_RCR (*(unsigned char volatile xdata *)0xfef4)
+#define PWMB_CCR5 (*(unsigned int volatile xdata *)0xfef5)
+#define PWMB_CCR5H (*(unsigned char volatile xdata *)0xfef5)
+#define PWMB_CCR5L (*(unsigned char volatile xdata *)0xfef6)
+#define PWMB_CCR6 (*(unsigned int volatile xdata *)0xfef7)
+#define PWMB_CCR6H (*(unsigned char volatile xdata *)0xfef7)
+#define PWMB_CCR6L (*(unsigned char volatile xdata *)0xfef8)
+#define PWMB_CCR7 (*(unsigned int volatile xdata *)0xfef9)
+#define PWMB_CCR7H (*(unsigned char volatile xdata *)0xfef9)
+#define PWMB_CCR7L (*(unsigned char volatile xdata *)0xfefa)
+#define PWMB_CCR8 (*(unsigned int volatile xdata *)0xfefb)
+#define PWMB_CCR8H (*(unsigned char volatile xdata *)0xfefb)
+#define PWMB_CCR8L (*(unsigned char volatile xdata *)0xfefc)
+#define PWMB_BKR (*(unsigned char volatile xdata *)0xfefd)
+#define PWMB_DTR (*(unsigned char volatile xdata *)0xfefe)
+#define PWMB_OISR (*(unsigned char volatile xdata *)0xfeff)
+
+/////////////////////////////////////////////////
+//FD00H-FDFFH
+/////////////////////////////////////////////////
+
+#define P0INTE (*(unsigned char volatile xdata *)0xfd00)
+#define P1INTE (*(unsigned char volatile xdata *)0xfd01)
+#define P2INTE (*(unsigned char volatile xdata *)0xfd02)
+#define P3INTE (*(unsigned char volatile xdata *)0xfd03)
+#define P4INTE (*(unsigned char volatile xdata *)0xfd04)
+#define P5INTE (*(unsigned char volatile xdata *)0xfd05)
+#define P6INTE (*(unsigned char volatile xdata *)0xfd06)
+#define P7INTE (*(unsigned char volatile xdata *)0xfd07)
+#define P0INTF (*(unsigned char volatile xdata *)0xfd10)
+#define P1INTF (*(unsigned char volatile xdata *)0xfd11)
+#define P2INTF (*(unsigned char volatile xdata *)0xfd12)
+#define P3INTF (*(unsigned char volatile xdata *)0xfd13)
+#define P4INTF (*(unsigned char volatile xdata *)0xfd14)
+#define P5INTF (*(unsigned char volatile xdata *)0xfd15)
+#define P6INTF (*(unsigned char volatile xdata *)0xfd16)
+#define P7INTF (*(unsigned char volatile xdata *)0xfd17)
+#define P0IM0 (*(unsigned char volatile xdata *)0xfd20)
+#define P1IM0 (*(unsigned char volatile xdata *)0xfd21)
+#define P2IM0 (*(unsigned char volatile xdata *)0xfd22)
+#define P3IM0 (*(unsigned char volatile xdata *)0xfd23)
+#define P4IM0 (*(unsigned char volatile xdata *)0xfd24)
+#define P5IM0 (*(unsigned char volatile xdata *)0xfd25)
+#define P6IM0 (*(unsigned char volatile xdata *)0xfd26)
+#define P7IM0 (*(unsigned char volatile xdata *)0xfd27)
+#define P0IM1 (*(unsigned char volatile xdata *)0xfd30)
+#define P1IM1 (*(unsigned char volatile xdata *)0xfd31)
+#define P2IM1 (*(unsigned char volatile xdata *)0xfd32)
+#define P3IM1 (*(unsigned char volatile xdata *)0xfd33)
+#define P4IM1 (*(unsigned char volatile xdata *)0xfd34)
+#define P5IM1 (*(unsigned char volatile xdata *)0xfd35)
+#define P6IM1 (*(unsigned char volatile xdata *)0xfd36)
+#define P7IM1 (*(unsigned char volatile xdata *)0xfd37)
+#define P0WKUE (*(unsigned char volatile xdata *)0xfd40)
+#define P1WKUE (*(unsigned char volatile xdata *)0xfd41)
+#define P2WKUE (*(unsigned char volatile xdata *)0xfd42)
+#define P3WKUE (*(unsigned char volatile xdata *)0xfd43)
+#define P4WKUE (*(unsigned char volatile xdata *)0xfd44)
+#define P5WKUE (*(unsigned char volatile xdata *)0xfd45)
+#define P6WKUE (*(unsigned char volatile xdata *)0xfd46)
+#define P7WKUE (*(unsigned char volatile xdata *)0xfd47)
+#define PIN_IP (*(unsigned char volatile xdata *)0xfd60)
+#define PIN_IPH (*(unsigned char volatile xdata *)0xfd61)
+
+/////////////////////////////////////////////////
+//FC00H-FCFFH
+/////////////////////////////////////////////////
+
+#define MD3 (*(unsigned char volatile xdata *)0xfcf0)
+#define MD2 (*(unsigned char volatile xdata *)0xfcf1)
+#define MD1 (*(unsigned char volatile xdata *)0xfcf2)
+#define MD0 (*(unsigned char volatile xdata *)0xfcf3)
+#define MD5 (*(unsigned char volatile xdata *)0xfcf4)
+#define MD4 (*(unsigned char volatile xdata *)0xfcf5)
+#define ARCON (*(unsigned char volatile xdata *)0xfcf6)
+#define OPCON (*(unsigned char volatile xdata *)0xfcf7)
+
+/////////////////////////////////////////////////
+//FB00H-FBFFH
+/////////////////////////////////////////////////
+
+#define COMEN (*(unsigned char volatile xdata *)0xfb00)
+#define SEGENL (*(unsigned char volatile xdata *)0xfb01)
+#define SEGENH (*(unsigned char volatile xdata *)0xfb02)
+#define LEDCTRL (*(unsigned char volatile xdata *)0xfb03)
+#define LEDCKS (*(unsigned char volatile xdata *)0xfb04)
+#define COM0_DA_L (*(unsigned char volatile xdata *)0xfb10)
+#define COM1_DA_L (*(unsigned char volatile xdata *)0xfb11)
+#define COM2_DA_L (*(unsigned char volatile xdata *)0xfb12)
+#define COM3_DA_L (*(unsigned char volatile xdata *)0xfb13)
+#define COM4_DA_L (*(unsigned char volatile xdata *)0xfb14)
+#define COM5_DA_L (*(unsigned char volatile xdata *)0xfb15)
+#define COM6_DA_L (*(unsigned char volatile xdata *)0xfb16)
+#define COM7_DA_L (*(unsigned char volatile xdata *)0xfb17)
+#define COM0_DA_H (*(unsigned char volatile xdata *)0xfb18)
+#define COM1_DA_H (*(unsigned char volatile xdata *)0xfb19)
+#define COM2_DA_H (*(unsigned char volatile xdata *)0xfb1a)
+#define COM3_DA_H (*(unsigned char volatile xdata *)0xfb1b)
+#define COM4_DA_H (*(unsigned char volatile xdata *)0xfb1c)
+#define COM5_DA_H (*(unsigned char volatile xdata *)0xfb1d)
+#define COM6_DA_H (*(unsigned char volatile xdata *)0xfb1e)
+#define COM7_DA_H (*(unsigned char volatile xdata *)0xfb1f)
+#define COM0_DC_L (*(unsigned char volatile xdata *)0xfb20)
+#define COM1_DC_L (*(unsigned char volatile xdata *)0xfb21)
+#define COM2_DC_L (*(unsigned char volatile xdata *)0xfb22)
+#define COM3_DC_L (*(unsigned char volatile xdata *)0xfb23)
+#define COM4_DC_L (*(unsigned char volatile xdata *)0xfb24)
+#define COM5_DC_L (*(unsigned char volatile xdata *)0xfb25)
+#define COM6_DC_L (*(unsigned char volatile xdata *)0xfb26)
+#define COM7_DC_L (*(unsigned char volatile xdata *)0xfb27)
+#define COM0_DC_H (*(unsigned char volatile xdata *)0xfb28)
+#define COM1_DC_H (*(unsigned char volatile xdata *)0xfb29)
+#define COM2_DC_H (*(unsigned char volatile xdata *)0xfb2a)
+#define COM3_DC_H (*(unsigned char volatile xdata *)0xfb2b)
+#define COM4_DC_H (*(unsigned char volatile xdata *)0xfb2c)
+#define COM5_DC_H (*(unsigned char volatile xdata *)0xfb2d)
+#define COM6_DC_H (*(unsigned char volatile xdata *)0xfb2e)
+#define COM7_DC_H (*(unsigned char volatile xdata *)0xfb2f)
+
+#define TSCHEN1 (*(unsigned char volatile xdata *)0xfb40)
+#define TSCHEN2 (*(unsigned char volatile xdata *)0xfb41)
+#define TSCFG1 (*(unsigned char volatile xdata *)0xfb42)
+#define TSCFG2 (*(unsigned char volatile xdata *)0xfb43)
+#define TSWUTC (*(unsigned char volatile xdata *)0xfb44)
+#define TSCTRL (*(unsigned char volatile xdata *)0xfb45)
+#define TSSTA1 (*(unsigned char volatile xdata *)0xfb46)
+#define TSSTA2 (*(unsigned char volatile xdata *)0xfb47)
+#define TSRT (*(unsigned char volatile xdata *)0xfb48)
+#define TSDAT (*(unsigned int volatile xdata *)0xfb49)
+#define TSDATH (*(unsigned char volatile xdata *)0xfb49)
+#define TSDATL (*(unsigned char volatile xdata *)0xfb4A)
+#define TSTH00 (*(unsigned int volatile xdata *)0xfb50)
+#define TSTH00H (*(unsigned char volatile xdata *)0xfb50)
+#define TSTH00L (*(unsigned char volatile xdata *)0xfb51)
+#define TSTH01 (*(unsigned int volatile xdata *)0xfb52)
+#define TSTH01H (*(unsigned char volatile xdata *)0xfb52)
+#define TSTH01L (*(unsigned char volatile xdata *)0xfb53)
+#define TSTH02 (*(unsigned int volatile xdata *)0xfb54)
+#define TSTH02H (*(unsigned char volatile xdata *)0xfb54)
+#define TSTH02L (*(unsigned char volatile xdata *)0xfb55)
+#define TSTH03 (*(unsigned int volatile xdata *)0xfb56)
+#define TSTH03H (*(unsigned char volatile xdata *)0xfb56)
+#define TSTH03L (*(unsigned char volatile xdata *)0xfb57)
+#define TSTH04 (*(unsigned int volatile xdata *)0xfb58)
+#define TSTH04H (*(unsigned char volatile xdata *)0xfb58)
+#define TSTH04L (*(unsigned char volatile xdata *)0xfb59)
+#define TSTH05 (*(unsigned int volatile xdata *)0xfb5a)
+#define TSTH05H (*(unsigned char volatile xdata *)0xfb5a)
+#define TSTH05L (*(unsigned char volatile xdata *)0xfb5b)
+#define TSTH06 (*(unsigned int volatile xdata *)0xfb5c)
+#define TSTH06H (*(unsigned char volatile xdata *)0xfb5c)
+#define TSTH06L (*(unsigned char volatile xdata *)0xfb5d)
+#define TSTH07 (*(unsigned int volatile xdata *)0xfb5e)
+#define TSTH07H (*(unsigned char volatile xdata *)0xfb5e)
+#define TSTH07L (*(unsigned char volatile xdata *)0xfb5f)
+#define TSTH08 (*(unsigned int volatile xdata *)0xfb60)
+#define TSTH08H (*(unsigned char volatile xdata *)0xfb60)
+#define TSTH08L (*(unsigned char volatile xdata *)0xfb61)
+#define TSTH09 (*(unsigned int volatile xdata *)0xfb62)
+#define TSTH09H (*(unsigned char volatile xdata *)0xfb62)
+#define TSTH09L (*(unsigned char volatile xdata *)0xfb63)
+#define TSTH10 (*(unsigned int volatile xdata *)0xfb64)
+#define TSTH10H (*(unsigned char volatile xdata *)0xfb64)
+#define TSTH10L (*(unsigned char volatile xdata *)0xfb65)
+#define TSTH11 (*(unsigned int volatile xdata *)0xfb66)
+#define TSTH11H (*(unsigned char volatile xdata *)0xfb66)
+#define TSTH11L (*(unsigned char volatile xdata *)0xfb67)
+#define TSTH12 (*(unsigned int volatile xdata *)0xfb68)
+#define TSTH12H (*(unsigned char volatile xdata *)0xfb68)
+#define TSTH12L (*(unsigned char volatile xdata *)0xfb69)
+#define TSTH13 (*(unsigned int volatile xdata *)0xfb6a)
+#define TSTH13H (*(unsigned char volatile xdata *)0xfb6a)
+#define TSTH13L (*(unsigned char volatile xdata *)0xfb6b)
+#define TSTH14 (*(unsigned int volatile xdata *)0xfb6c)
+#define TSTH14H (*(unsigned char volatile xdata *)0xfb6c)
+#define TSTH14L (*(unsigned char volatile xdata *)0xfb6d)
+#define TSTH15 (*(unsigned int volatile xdata *)0xfb6e)
+#define TSTH15H (*(unsigned char volatile xdata *)0xfb6e)
+#define TSTH15L (*(unsigned char volatile xdata *)0xfb6f)
+
+/////////////////////////////////////////////////
+//FA00H-FAFFH
+/////////////////////////////////////////////////
+
+#define DMA_ADC_CFG (*(unsigned char volatile xdata *)0xfa10)
+#define DMA_ADC_CR (*(unsigned char volatile xdata *)0xfa11)
+#define DMA_ADC_STA (*(unsigned char volatile xdata *)0xfa12)
+#define DMA_ADC_RXA (*(unsigned int volatile xdata *)0xfa17)
+#define DMA_ADC_RXAH (*(unsigned char volatile xdata *)0xfa17)
+#define DMA_ADC_RXAL (*(unsigned char volatile xdata *)0xfa18)
+#define DMA_ADC_CFG2 (*(unsigned char volatile xdata *)0xfa19)
+#define DMA_ADC_CHSW0 (*(unsigned char volatile xdata *)0xfa1a)
+#define DMA_ADC_CHSW1 (*(unsigned char volatile xdata *)0xfa1b)
+
+#define DMA_SPI_CFG (*(unsigned char volatile xdata *)0xfa20)
+#define DMA_SPI_CR (*(unsigned char volatile xdata *)0xfa21)
+#define DMA_SPI_STA (*(unsigned char volatile xdata *)0xfa22)
+#define DMA_SPI_AMT (*(unsigned char volatile xdata *)0xfa23)
+#define DMA_SPI_DONE (*(unsigned char volatile xdata *)0xfa24)
+#define DMA_SPI_TXA (*(unsigned int volatile xdata *)0xfa25)
+#define DMA_SPI_TXAH (*(unsigned char volatile xdata *)0xfa25)
+#define DMA_SPI_TXAL (*(unsigned char volatile xdata *)0xfa26)
+#define DMA_SPI_RXA (*(unsigned int volatile xdata *)0xfa27)
+#define DMA_SPI_RXAH (*(unsigned char volatile xdata *)0xfa27)
+#define DMA_SPI_RXAL (*(unsigned char volatile xdata *)0xfa28)
+#define DMA_SPI_CFG2 (*(unsigned char volatile xdata *)0xfa29)
+
+#define DMA_UR1T_CFG (*(unsigned char volatile xdata *)0xfa30)
+#define DMA_UR1T_CR (*(unsigned char volatile xdata *)0xfa31)
+#define DMA_UR1T_STA (*(unsigned char volatile xdata *)0xfa32)
+#define DMA_UR1T_AMT (*(unsigned char volatile xdata *)0xfa33)
+#define DMA_UR1T_DONE (*(unsigned char volatile xdata *)0xfa34)
+#define DMA_UR1T_TXA (*(unsigned int volatile xdata *)0xfa35)
+#define DMA_UR1T_TXAH (*(unsigned char volatile xdata *)0xfa35)
+#define DMA_UR1T_TXAL (*(unsigned char volatile xdata *)0xfa36)
+#define DMA_UR1R_CFG (*(unsigned char volatile xdata *)0xfa38)
+#define DMA_UR1R_CR (*(unsigned char volatile xdata *)0xfa39)
+#define DMA_UR1R_STA (*(unsigned char volatile xdata *)0xfa3a)
+#define DMA_UR1R_AMT (*(unsigned char volatile xdata *)0xfa3b)
+#define DMA_UR1R_DONE (*(unsigned char volatile xdata *)0xfa3c)
+#define DMA_UR1R_RXA (*(unsigned int volatile xdata *)0xfa3d)
+#define DMA_UR1R_RXAH (*(unsigned char volatile xdata *)0xfa3d)
+#define DMA_UR1R_RXAL (*(unsigned char volatile xdata *)0xfa3e)
+
+#define DMA_UR2T_CFG (*(unsigned char volatile xdata *)0xfa40)
+#define DMA_UR2T_CR (*(unsigned char volatile xdata *)0xfa41)
+#define DMA_UR2T_STA (*(unsigned char volatile xdata *)0xfa42)
+#define DMA_UR2T_AMT (*(unsigned char volatile xdata *)0xfa43)
+#define DMA_UR2T_DONE (*(unsigned char volatile xdata *)0xfa44)
+#define DMA_UR2T_TXA (*(unsigned int volatile xdata *)0xfa45)
+#define DMA_UR2T_TXAH (*(unsigned char volatile xdata *)0xfa45)
+#define DMA_UR2T_TXAL (*(unsigned char volatile xdata *)0xfa46)
+#define DMA_UR2R_CFG (*(unsigned char volatile xdata *)0xfa48)
+#define DMA_UR2R_CR (*(unsigned char volatile xdata *)0xfa49)
+#define DMA_UR2R_STA (*(unsigned char volatile xdata *)0xfa4a)
+#define DMA_UR2R_AMT (*(unsigned char volatile xdata *)0xfa4b)
+#define DMA_UR2R_DONE (*(unsigned char volatile xdata *)0xfa4c)
+#define DMA_UR2R_RXA (*(unsigned int volatile xdata *)0xfa4d)
+#define DMA_UR2R_RXAH (*(unsigned char volatile xdata *)0xfa4d)
+#define DMA_UR2R_RXAL (*(unsigned char volatile xdata *)0xfa4e)
+
+#define DMA_UR3T_CFG (*(unsigned char volatile xdata *)0xfa50)
+#define DMA_UR3T_CR (*(unsigned char volatile xdata *)0xfa51)
+#define DMA_UR3T_STA (*(unsigned char volatile xdata *)0xfa52)
+#define DMA_UR3T_AMT (*(unsigned char volatile xdata *)0xfa53)
+#define DMA_UR3T_DONE (*(unsigned char volatile xdata *)0xfa54)
+#define DMA_UR3T_TXA (*(unsigned int volatile xdata *)0xfa55)
+#define DMA_UR3T_TXAH (*(unsigned char volatile xdata *)0xfa55)
+#define DMA_UR3T_TXAL (*(unsigned char volatile xdata *)0xfa56)
+#define DMA_UR3R_CFG (*(unsigned char volatile xdata *)0xfa58)
+#define DMA_UR3R_CR (*(unsigned char volatile xdata *)0xfa59)
+#define DMA_UR3R_STA (*(unsigned char volatile xdata *)0xfa5a)
+#define DMA_UR3R_AMT (*(unsigned char volatile xdata *)0xfa5b)
+#define DMA_UR3R_DONE (*(unsigned char volatile xdata *)0xfa5c)
+#define DMA_UR3R_RXA (*(unsigned int volatile xdata *)0xfa5d)
+#define DMA_UR3R_RXAH (*(unsigned char volatile xdata *)0xfa5d)
+#define DMA_UR3R_RXAL (*(unsigned char volatile xdata *)0xfa5e)
+
+#define DMA_UR4T_CFG (*(unsigned char volatile xdata *)0xfa60)
+#define DMA_UR4T_CR (*(unsigned char volatile xdata *)0xfa61)
+#define DMA_UR4T_STA (*(unsigned char volatile xdata *)0xfa62)
+#define DMA_UR4T_AMT (*(unsigned char volatile xdata *)0xfa63)
+#define DMA_UR4T_DONE (*(unsigned char volatile xdata *)0xfa64)
+#define DMA_UR4T_TXA (*(unsigned int volatile xdata *)0xfa65)
+#define DMA_UR4T_TXAH (*(unsigned char volatile xdata *)0xfa65)
+#define DMA_UR4T_TXAL (*(unsigned char volatile xdata *)0xfa66)
+#define DMA_UR4R_CFG (*(unsigned char volatile xdata *)0xfa68)
+#define DMA_UR4R_CR (*(unsigned char volatile xdata *)0xfa69)
+#define DMA_UR4R_STA (*(unsigned char volatile xdata *)0xfa6a)
+#define DMA_UR4R_AMT (*(unsigned char volatile xdata *)0xfa6b)
+#define DMA_UR4R_DONE (*(unsigned char volatile xdata *)0xfa6c)
+#define DMA_UR4R_RXA (*(unsigned int volatile xdata *)0xfa6d)
+#define DMA_UR4R_RXAH (*(unsigned char volatile xdata *)0xfa6d)
+#define DMA_UR4R_RXAL (*(unsigned char volatile xdata *)0xfa6e)
+
+#define DMA_LCM_CFG (*(unsigned char volatile xdata *)0xfa70)
+#define DMA_LCM_CR (*(unsigned char volatile xdata *)0xfa71)
+#define DMA_LCM_STA (*(unsigned char volatile xdata *)0xfa72)
+#define DMA_LCM_AMT (*(unsigned char volatile xdata *)0xfa73)
+#define DMA_LCM_DONE (*(unsigned char volatile xdata *)0xfa74)
+#define DMA_LCM_TXA (*(unsigned int volatile xdata *)0xfa75)
+#define DMA_LCM_TXAH (*(unsigned char volatile xdata *)0xfa75)
+#define DMA_LCM_TXAL (*(unsigned char volatile xdata *)0xfa76)
+#define DMA_LCM_RXA (*(unsigned int volatile xdata *)0xfa77)
+#define DMA_LCM_RXAH (*(unsigned char volatile xdata *)0xfa77)
+#define DMA_LCM_RXAL (*(unsigned char volatile xdata *)0xfa78)
+
+
+/////////////////////////////////////////////////
+#if 0
+
+//包含本头文件后,不用另外再包含"REG51.H"
+
+//内核特殊功能寄存器 // 复位值 描述
+sfr ACC = 0xE0; //0000,0000 累加器Accumulator
+sfr B = 0xF0; //0000,0000 B寄存器
+sfr PSW = 0xD0; //0000,0000 程序状态字
+sbit CY = PSW^7;
+sbit AC = PSW^6;
+sbit F0 = PSW^5;
+sbit RS1 = PSW^4;
+sbit RS0 = PSW^3;
+sbit OV = PSW^2;
+sbit P = PSW^0;
+sfr SP = 0x81; //0000,0111 堆栈指针
+sfr DPL = 0x82; //0000,0000 数据指针低字节
+sfr DPH = 0x83; //0000,0000 数据指针高字节
+
+//I/O 口特殊功能寄存器
+sfr P0 = 0x80; //1111,1111 端口0
+sbit P00 = P0^0;
+sbit P01 = P0^1;
+sbit P02 = P0^2;
+sbit P03 = P0^3;
+sbit P04 = P0^4;
+sbit P05 = P0^5;
+sbit P06 = P0^6;
+sbit P07 = P0^7;
+sfr P1 = 0x90; //1111,1111 端口1
+sbit P10 = P1^0;
+sbit P11 = P1^1;
+sbit P12 = P1^2;
+sbit P13 = P1^3;
+sbit P14 = P1^4;
+sbit P15 = P1^5;
+sbit P16 = P1^6;
+sbit P17 = P1^7;
+sfr P2 = 0xA0; //1111,1111 端口2
+sbit P20 = P2^0;
+sbit P21 = P2^1;
+sbit P22 = P2^2;
+sbit P23 = P2^3;
+sbit P24 = P2^4;
+sbit P25 = P2^5;
+sbit P26 = P2^6;
+sbit P27 = P2^7;
+sfr P3 = 0xB0; //1111,1111 端口3
+sbit P30 = P3^0;
+sbit P31 = P3^1;
+sbit P32 = P3^2;
+sbit P33 = P3^3;
+sbit P34 = P3^4;
+sbit P35 = P3^5;
+sbit P36 = P3^6;
+sbit P37 = P3^7;
+sfr P4 = 0xC0; //1111,1111 端口4
+sbit P40 = P4^0;
+sbit P41 = P4^1;
+sbit P42 = P4^2;
+sbit P43 = P4^3;
+sbit P44 = P4^4;
+sbit P45 = P4^5;
+sbit P46 = P4^6;
+sbit P47 = P4^7;
+sfr P5 = 0xC8; //xxxx,1111 端口5
+sbit P50 = P5^0;
+sbit P51 = P5^1;
+sbit P52 = P5^2;
+sbit P53 = P5^3;
+sbit P54 = P5^4;
+sbit P55 = P5^5;
+sbit P56 = P5^6;
+sbit P57 = P5^7;
+sfr P6 = 0xE8; //0000,0000 端口6
+sbit P60 = P6^0;
+sbit P61 = P6^1;
+sbit P62 = P6^2;
+sbit P63 = P6^3;
+sbit P64 = P6^4;
+sbit P65 = P6^5;
+sbit P66 = P6^6;
+sbit P67 = P6^7;
+sfr P7 = 0xF8; //0000,0000 端口7
+sbit P70 = P7^0;
+sbit P71 = P7^1;
+sbit P72 = P7^2;
+sbit P73 = P7^3;
+sbit P74 = P7^4;
+sbit P75 = P7^5;
+sbit P76 = P7^6;
+sbit P77 = P7^7;
+
+
+///00 准双向口 灌电流20mA 拉电流270-150uS
+///01 推挽输出 20mA 加限流
+///10 高阻
+///11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
+
+
+sfr P0M0 = 0x94; //0000,0000 端口0模式寄存器0
+sfr P0M1 = 0x93; //0000,0000 端口0模式寄存器1
+sfr P1M0 = 0x92; //0000,0000 端口1模式寄存器0
+sfr P1M1 = 0x91; //0000,0000 端口1模式寄存器1
+sfr P2M0 = 0x96; //0000,0000 端口2模式寄存器0
+sfr P2M1 = 0x95; //0000,0000 端口2模式寄存器1
+sfr P3M0 = 0xB2; //0000,0000 端口3模式寄存器0
+sfr P3M1 = 0xB1; //0000,0000 端口3模式寄存器1
+sfr P4M0 = 0xB4; //0000,0000 端口4模式寄存器0
+sfr P4M1 = 0xB3; //0000,0000 端口4模式寄存器1
+sfr P5M0 = 0xCA; //0000,0000 端口5模式寄存器0
+sfr P5M1 = 0xC9; //0000,0000 端口5模式寄存器1
+sfr P6M0 = 0xCC; //0000,0000 端口6模式寄存器0
+sfr P6M1 = 0xCB; //0000,0000 端口6模式寄存器1
+sfr P7M0 = 0xE2; //0000,0000 端口7模式寄存器0
+sfr P7M1 = 0xE1; //0000,0000 端口7模式寄存器1
+
+//系统管理特殊功能寄存器
+sfr PCON = 0x87; //0001,0000 电源控制寄存器
+sfr AUXR = 0x8E; //0000,0000 辅助寄存器
+
+#define TOx12 BITN7
+#define T1x12 BITN6
+#define UART_M0x6 BITN5 //串口1模式0速度 =0 12倍 = 1 两倍
+#define T2R BITN4 //定时器2 运行 =1
+#define T2_C BITN3 //定时器/计数器选择
+#define T2x12 BITN2
+#define EXTRAM BITN1
+#define S1ST2 BITN0 //串口1选择定时器1 =0 选择定时器2 =1
+
+
+sfr VOCTR = 0xBB; //电压控制寄存器
+///BITN_1(VOCTR, BITN7) VOCTR
+#define D_VOCTR_SCCIN 0x00
+#define D_VOCTR_SCC 0x80
+#define D_VOCTR_SET(X) VOCTR = (X)
+
+sfr AUXR1 = 0xA2; //0000,0000 辅助寄存器1
+sfr P_SW1 = 0xA2; //0000,0000 外设端口切换寄存器1
+sfr CLK_DIV = 0x97; //0000,0000 时钟分频控制寄存器
+sfr BUS_SPEED = 0xA1; //xx10,x011 总线速度控制寄存器
+sfr P1ASF = 0x9D; //0000,0000 端口1模拟功能配置寄存器
+//-----------------------------------------------------------------
+sfr P_SW2 = 0xBA; //0xxx,x000 外设端口切换寄存器
+#define EAXFR BITN7
+#define I2C_S1 BITN5
+#define I2C_S2 BITN4
+#define CMPO_S BITN3
+#define S4_S BITN2
+#define S3_S BITN1
+#define S2_S BITN0
+
+//-----------------------------------------------------------------
+
+//中断特殊功能寄存器
+sfr IE = 0xA8; //0000,0000 中断控制寄存器
+sbit EA = IE^7;
+sbit ELVD = IE^6;
+sbit EADC = IE^5;
+sbit ES = IE^4;
+sbit ET1 = IE^3;
+sbit EX1 = IE^2;
+sbit ET0 = IE^1;
+sbit EX0 = IE^0;
+sfr IE2 = 0xAF; //0000,0000 中断控制寄存器2
+sfr IP = 0xB8; //0000,0000 中断优先级寄存器
+sbit PPCA = IP^7;
+sbit PLVD = IP^6;
+sbit PADC = IP^5;
+sbit PS = IP^4;
+sbit PT1 = IP^3;
+sbit PX1 = IP^2;
+sbit PT0 = IP^1;
+sbit PX0 = IP^0;
+/// 不可位寻址
+#define ET4 BITN6
+#define ET3 BITN5
+#define ES4 BITN4
+#define ES3 BITN3
+#define ET2 BITN2
+#define ESPI BITN1
+#define ES2 BITN0
+
+
+sfr IPH = 0xB7; //xxxx,xx00 中断优先级寄存器2
+#define PPCAH BITN7
+#define PLVDH BITN6
+#define PADCH BITN5
+#define PSH BITN4
+#define PT1H BITN3
+#define PX1H BITN2
+#define PT0H BITN1
+#define PX0H BITN0
+
+
+
+sfr IP2 = 0xB5; //xxxx,xx00 中断优先级寄存器2
+#define IP2_7 BITN7
+#define PI2C BITN6
+#define PCMP BITN5
+#define PX4 BITN4
+#define PPWMFD BITN3
+#define PPWM BITN2
+#define PSPI BITN1
+#define PS2 BITN0
+
+sfr IP2H = 0xB6; //xxxx,xx00 中断优先级寄存器2
+#define IP2_7 BITN7
+#define PI2CH BITN6
+#define PCMPH BITN5
+#define PX4H BITN4
+#define PPWMFDH BITN3
+#define PPWMH BITN2
+#define PSPIH BITN1
+#define PS2H BITN0
+
+
+
+
+
+sfr INT_CLKO = 0x8F; //0000,0000 外部中断与时钟输出控制寄存器
+#define INT_EX4 BITN6
+#define INT_EX3 BITN5
+#define INT_EX2 BITN4
+//定时器特殊功能寄存器
+sfr TCON = 0x88; //0000,0000 T0/T1控制寄存器
+sbit TF1 = TCON^7;
+sbit TR1 = TCON^6;
+sbit TF0 = TCON^5;
+sbit TR0 = TCON^4;
+sbit IE1 = TCON^3;
+sbit IT1 = TCON^2;
+sbit IE0 = TCON^1;
+sbit IT0 = TCON^0;
+sfr TMOD = 0x89; //0000,0000 T0/T1模式寄存器
+sfr TL0 = 0x8A; //0000,0000 T0低字节
+sfr TL1 = 0x8B; //0000,0000 T1低字节
+sfr TH0 = 0x8C; //0000,0000 T0高字节
+sfr TH1 = 0x8D; //0000,0000 T1高字节
+sfr T4T3M = 0xD1; //0000,0000 T3/T4模式寄存器
+sfr T3T4M = 0xD1; //0000,0000 T3/T4模式寄存器
+sfr T4H = 0xD2; //0000,0000 T4高字节
+sfr T4L = 0xD3; //0000,0000 T4低字节
+sfr T3H = 0xD4; //0000,0000 T3高字节
+sfr T3L = 0xD5; //0000,0000 T3低字节
+sfr T2H = 0xD6; //0000,0000 T2高字节
+sfr T2L = 0xD7; //0000,0000 T2低字节
+sfr WKTCL = 0xAA; //0000,0000 掉电唤醒定时器低字节
+sfr WKTCH = 0xAB; //0000,0000 掉电唤醒定时器高字节
+sfr16 WKTC = 0xAA;
+sfr WDT_CONTR = 0xC1; //0000,0000 看门狗控制寄存器
+
+//串行口特殊功能寄存器
+sfr SCON = 0x98; //0000,0000 串口1控制寄存器
+sbit SM0 = SCON^7;
+sbit SM1 = SCON^6;
+sbit SM2 = SCON^5;
+sbit REN = SCON^4;
+sbit TB8 = SCON^3;
+sbit RB8 = SCON^2;
+sbit TI = SCON^1;
+sbit RI = SCON^0;
+//sfr SBUF = 0x99; //xxxx,xxxx 串口1数据寄存器
+//sfr S2CON = 0x9A; //0000,0000 串口2控制寄存器
+//sfr S2BUF = 0x9B; //xxxx,xxxx 串口2数据寄存器
+//sfr SADDR = 0xA9; //0000,0000 从机地址寄存器
+//sfr SADEN = 0xB9; //0000,0000 从机地址屏蔽寄存器
+
+sfr SBUF = 0x99; //Serial Data Buffer
+sfr SBUF0 = 0x99; //Serial Data Buffer xxxx,xxxx
+sfr SADEN = 0xB9; //Slave Address Mask 0000,0000
+sfr SADDR = 0xA9; //Slave Address 0000,0000
+//-----------------------------------
+// 7 6 5 4 3 2 1 0 Reset Value
+sfr S2CON = 0x9A; //S2 Control S2SM0 S2SM1 S2SM2 S2REN S2TB8 S2RB8 S2TI S2RI 00000000B
+#define S2SM0 BITN7
+#define S2ST4 BITN6
+#define S2SM2 BITN5
+#define S2REN BITN4
+#define S2TB8 BITN3
+#define S2RB8 BITN2
+#define S2TI BITN1
+#define S2RI BITN0
+
+sfr S2BUF = 0x9B; //S2 Serial Buffer xxxx,xxxx
+//sfr BRT = 0x9C; //S2 Baud-Rate Timer 0000,0000
+
+//---------------------------------------------------------------
+sfr S3CON = 0xAC; //0000,0000 串口3控制寄存器
+#define S3SM0 BITN7
+#define S3ST4 BITN6
+#define S3SM2 BITN5
+#define S3REN BITN4
+#define S3TB8 BITN3
+#define S3RB8 BITN2
+#define S3TI BITN1
+#define S3RI BITN0
+
+sfr S3BUF = 0xAD; //xxxx,xxxx 串口3数据寄存器
+//---------------------------------------------------------------
+sfr S4CON = 0x84; //0000,0000 串口4控制寄存器
+#define S4SM0 BITN7
+#define S4ST4 BITN6
+#define S4SM2 BITN5
+#define S4REN BITN4
+#define S4TB8 BITN3
+#define S4RB8 BITN2
+#define S4TI BITN1
+#define S4RI BITN0
+
+sfr S4BUF = 0x85; //xxxx,xxxx 串口4数据寄存器
+
+//ADC 特殊功能寄存器
+sfr ADC_CONTR = 0xBC; //0000,0000 A/D转换控制寄存器
+sfr ADC_RES = 0xBD; //0000,0000 A/D转换结果高8位
+sfr ADC_RESL = 0xBE; //0000,0000 A/D转换结果低2位
+
+//SPI 特殊功能寄存器
+sfr SPSTAT = 0xCD; //00xx,xxxx SPI状态寄存器
+sfr SPCTL = 0xCE; //0000,0100 SPI控制寄存器
+sfr SPDAT = 0xCF; //0000,0000 SPI数据寄存器
+
+//IAP/ISP 特殊功能寄存器
+sfr IAP_DATA = 0xC2; //0000,0000 EEPROM数据寄存器
+sfr IAP_ADDRH = 0xC3; //0000,0000 EEPROM地址高字节
+sfr IAP_ADDRL = 0xC4; //0000,0000 EEPROM地址第字节
+sfr IAP_CMD = 0xC5; //xxxx,xx00 EEPROM命令寄存器
+sfr IAP_TRIG = 0xC6; //0000,0000 EEPRPM命令触发寄存器
+sfr IAP_CONTR = 0xC7; //0000,x000 EEPROM控制寄存器
+
+//PCA/PWM 特殊功能寄存器
+sfr CCON = 0xD8; //00xx,xx00 PCA控制寄存器
+sbit CF = CCON^7;
+sbit CR = CCON^6;
+sbit CCF2 = CCON^2;
+sbit CCF1 = CCON^1;
+sbit CCF0 = CCON^0;
+sfr CMOD = 0xD9; //0xxx,x000 PCA 工作模式寄存器
+sfr CL = 0xE9; //0000,0000 PCA计数器低字节
+sfr CH = 0xF9; //0000,0000 PCA计数器高字节
+sfr CCAPM0 = 0xDA; //0000,0000 PCA模块0的PWM寄存器
+sfr CCAPM1 = 0xDB; //0000,0000 PCA模块1的PWM寄存器
+sfr CCAPM2 = 0xDC; //0000,0000 PCA模块2的PWM 寄存器
+sfr CCAP0L = 0xEA; //0000,0000 PCA模块0的捕捉/比较寄存器低字节
+sfr CCAP1L = 0xEB; //0000,0000 PCA模块1的捕捉/比较寄存器低字节
+sfr CCAP2L = 0xEC; //0000,0000 PCA模块2的捕捉/比较寄存器低字节
+sfr PCA_PWM0 = 0xF2; //xxxx,xx00 PCA模块0的PWM寄存器
+sfr PCA_PWM1 = 0xF3; //xxxx,xx00 PCA模块1的PWM寄存器
+sfr PCA_PWM2 = 0xF4; //xxxx,xx00 PCA模块1的PWM寄存器
+sfr CCAP0H = 0xFA; //0000,0000 PCA模块0的捕捉/比较寄存器高字节
+sfr CCAP1H = 0xFB; //0000,0000 PCA模块1的捕捉/比较寄存器高字节
+sfr CCAP2H = 0xFC; //0000,0000 PCA模块2的捕捉/比较寄存器高字节
+
+//比较器特殊功能寄存器
+sfr CMPCR1 = 0xE6; //0000,0000 比较器控制寄存器1
+sfr CMPCR2 = 0xE7; //0000,0000 比较器控制寄存器2
+
+
+//sfr P_SW2 = 0xba;
+sfr PWMCFG = 0xf1;
+sfr PWMIF = 0xf6;
+sfr PWMFDCR = 0xf7;
+sfr PWMCR = 0xfe;
+
+#define PWMC (*(unsigned int volatile xdata *)0xfff0)
+#define PWMCKS (*(unsigned char volatile xdata *)0xfff2)
+#define TADCP (*(unsigned int volatile xdata *)0xfff3)
+#define PWM0T1 (*(unsigned int volatile xdata *)0xff00)
+#define PWM0T2 (*(unsigned int volatile xdata *)0xff02)
+#define PWM0CR (*(unsigned char volatile xdata *)0xff04)
+#define PWM0HLD (*(unsigned char volatile xdata *)0xff05)
+#define PWM1T1 (*(unsigned int volatile xdata *)0xff10)
+#define PWM1T2 (*(unsigned int volatile xdata *)0xff12)
+#define PWM1CR (*(unsigned char volatile xdata *)0xff14)
+#define PWM1HLD (*(unsigned char volatile xdata *)0xff15)
+#define PWM2T1 (*(unsigned int volatile xdata *)0xff20)
+#define PWM2T2 (*(unsigned int volatile xdata *)0xff22)
+#define PWM2CR (*(unsigned char volatile xdata *)0xff24)
+#define PWM2HLD (*(unsigned char volatile xdata *)0xff25)
+#define PWM3T1 (*(unsigned int volatile xdata *)0xff30)
+#define PWM3T2 (*(unsigned int volatile xdata *)0xff32)
+#define PWM3CR (*(unsigned char volatile xdata *)0xff34)
+#define PWM3HLD (*(unsigned char volatile xdata *)0xff35)
+#define PWM4T1 (*(unsigned int volatile xdata *)0xff40)
+#define PWM4T2 (*(unsigned int volatile xdata *)0xff42)
+#define PWM4CR (*(unsigned char volatile xdata *)0xff44)
+#define PWM4HLD (*(unsigned char volatile xdata *)0xff45)
+#define PWM5T1 (*(unsigned int volatile xdata *)0xff50)
+#define PWM5T2 (*(unsigned int volatile xdata *)0xff52)
+#define PWM5CR (*(unsigned char volatile xdata *)0xff54)
+#define PWM5HLD (*(unsigned char volatile xdata *)0xff55)
+#define PWM6T1 (*(unsigned int volatile xdata *)0xff60)
+#define PWM6T2 (*(unsigned int volatile xdata *)0xff62)
+#define PWM6CR (*(unsigned char volatile xdata *)0xff64)
+#define PWM6HLD (*(unsigned char volatile xdata *)0xff65)
+#define PWM7T1 (*(unsigned int volatile xdata *)0xff70)
+#define PWM7T2 (*(unsigned int volatile xdata *)0xff72)
+#define PWM7CR (*(unsigned char volatile xdata *)0xff74)
+#define PWM7HLD (*(unsigned char volatile xdata *)0xff75)
+
+
+#define CKSEL (*(unsigned char volatile xdata *)0xfE00)//108@ST8.PDF
+#define MCLKODIV BIT4
+#define MCLKO_S BITN3
+#define MCLKSEL BIT0
+
+#define CLKDIV (*(unsigned char volatile xdata *)0xfE01)//108@ST8.PDF
+#define IRC24MCR (*(unsigned char volatile xdata *)0xfE02)//108@ST8.PDF
+#define XOSCCR (*(unsigned char volatile xdata *)0xfE03)//108@ST8.PDF
+#define IRC32KCR (*(unsigned char volatile xdata *)0xfE04)//108@ST8.PDF
+#endif
+
+#if 0
+///已经放到了stc only中
+
+#define I2CTXD (*(unsigned char volatile xdata *)0xfE86)//423@ST8.PDF
+
+#define I2CRXD (*(unsigned char volatile xdata *)0xfE87)//423@ST8.PDF
+
+
+
+///-------------------------------------
+
+#define gRccUs01_H (*(unsigned char volatile data *)0xd2)
+#define gRccUs01_L (*(unsigned char volatile data *)0xd3)
+
+
+
+#define gRccUs01 (*(unsigned short volatile data *)0xd2)//226@ST8.PDF T4H定时器4的高字节 D2H T4H定时器4的低字节 D3H
+#define gRccUs02 (*(unsigned short volatile data *)0xEA)//351@ST8.PDF CCAP0l CCAP1L EAH EBH
+#define gRccUs03 (*(unsigned short volatile data *)0xEC)//351@ST8.PDF CCAP0l CCAP1L EAH EBH
+//#define gRccUs03 s_task_GC032A.n
+
+
+
+#define gRccUs04 (*(unsigned short volatile data *)0xFA)///351@ST8.PDF
+#define gRccUs05 (*(unsigned short volatile data *)0xFC)///351@ST8.PD CCAP2H
+
+/////////////////////////////////////////////////
+
+
+
+/* P3 */
+sbit RD = 0xB7;
+sbit WR = 0xB6;
+sbit T1 = 0xB5;
+sbit T0 = 0xB4;
+sbit INT1 = 0xB3;
+sbit INT0 = 0xB2;
+sbit TXD = 0xB1;
+sbit RXD = 0xB0;
+
+
+sfr AUXINTIF = 0xef;
+
+#define T2IF 0x01
+#define INT4IF BITN6
+#define INT3IF BITN5
+#define INT2IF BITN4
+
+//#define T4IF BITN2
+//#define T3IF BITN1
+//#define T2IF BITN0
+
+
+/// >>>>> add by cc
+
+#include "../clib/bit.h"
+
+#define D_stdIO_P0_ALL() P0M1=0;P0M0=0;
+#define D_HighI_P0_ALL() P0M1=0;P0M0=0XFF;
+#define D_HighR_P0_ALL() P0M1=0XFF;P0M0=0;
+#define D_OpenD_P0_ALL() P0M1=0XFF;P0M0=0XFF;
+
+#define D_stdIO_P1_ALL() P1M1=0;P1M0=0;
+#define D_HighI_P1_ALL() P1M1=0;P1M0=0XFF;
+#define D_HighR_P1_ALL() P1M1=0XFF;P1M0=0;
+#define D_OpenD_P1_ALL() P1M1=0XFF;P1M0=0XFF;
+
+
+#define D_stdIO_P0(n) BITN_0(P0M1,n);BITN_0(P0M0,n); //////00 准双向口 灌电流20mA 拉电流270-150uS
+#define D_HighI_P0(n) BITN_0(P0M1,n);BITN_1(P0M0,n); //////01 推挽输出 20mA 加限流
+#define D_HighR_P0(n) BITN_1(P0M1,n);BITN_0(P0M0,n); /////////10 高阻
+#define D_OpenD_P0(n) BITN_1(P0M1,n);BITN_1(P0M0,n); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
+
+#define D_stdIO_P1(n) BITN_0(P1M1,n);BITN_0(P1M0,n); //////00 准双向口 灌电流20mA 拉电流270-150uS
+#define D_HighI_P1(n) BITN_0(P1M1,n);BITN_1(P1M0,n); //////01 推挽输出 20mA 加限流
+#define D_HighR_P1(n) BITN_1(P1M1,n);BITN_0(P1M0,n); /////////10 高阻
+#define D_OpenD_P1(n) BITN_1(P1M1,n);BITN_1(P1M0,n); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
+
+#define D_stdIO_P2(n) BITN_0(P2M1,n);BITN_0(P2M0,n); //////00 准双向口 灌电流20mA 拉电流270-150uS
+#define D_HighI_P2(n) BITN_0(P2M1,n);BITN_1(P2M0,n); //////01 推挽输出 20mA 加限流
+#define D_HighR_P2(n) BITN_1(P2M1,n);BITN_0(P2M0,n); /////////10 高阻
+#define D_OpenD_P2(n) BITN_1(P2M1,n);BITN_1(P2M0,n); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
+
+#define D_stdIO_P3(n) BITN_0(P3M1,n);BITN_0(P3M0,n); //////00 准双向口 灌电流20mA 拉电流270-150uS
+#define D_HighI_P3(n) BITN_0(P3M1,n);BITN_1(P3M0,n); //////01 推挽输出 20mA 加限流
+#define D_HighR_P3(n) BITN_1(P3M1,n);BITN_0(P3M0,n); /////////10 高阻
+#define D_OpenD_P3(n) BITN_1(P3M1,n);BITN_1(P3M0,n); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
+
+#define D_stdIO_P4(n) BITN_0(P4M1,n);BITN_0(P4M0,n); //////00 准双向口 灌电流20mA 拉电流270-150uS
+#define D_HighI_P4(n) BITN_0(P4M1,n);BITN_1(P4M0,n); //////01 推挽输出 20mA 加限流
+#define D_HighR_P4(n) BITN_1(P4M1,n);BITN_0(P4M0,n); /////////10 高阻
+#define D_OpenD_P4(n) BITN_1(P4M1,n);BITN_1(P4M0,n); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
+
+#define D_stdIO_P5(n) BITN_0(P5M1,n);BITN_0(P5M0,n); //////00 准双向口 灌电流20mA 拉电流270-150uS
+#define D_HighI_P5(n) BITN_0(P5M1,n);BITN_1(P5M0,n); //////01 推挽输出 20mA 加限流
+#define D_HighR_P5(n) BITN_1(P5M1,n);BITN_0(P5M0,n); /////////10 高阻
+#define D_OpenD_P5(n) BITN_1(P5M1,n);BITN_1(P5M0,n); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
+
+#define D_stdIO_P6(n) BITN_0(P6M1,n);BITN_0(P6M0,n); //////00 准双向口 灌电流20mA 拉电流270-150uS
+#define D_HighI_P6(n) BITN_0(P6M1,n);BITN_1(P6M0,n); //////01 推挽输出 20mA 加限流
+#define D_HighR_P6(n) BITN_1(P6M1,n);BITN_0(P6M0,n); /////////10 高阻
+#define D_OpenD_P6(n) BITN_1(P6M1,n);BITN_1(P6M0,n); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
+
+#define D_stdIO_P7(n) BITN_0(P7M1,n);BITN_0(P7M0,n); //////00 准双向口 灌电流20mA 拉电流270-150uS
+#define D_HighI_P7(n) BITN_0(P7M1,n);BITN_1(P7M0,n); //////01 推挽输出 20mA 加限流
+#define D_HighR_P7(n) BITN_1(P7M1,n);BITN_0(P7M0,n); /////////10 高阻
+#define D_OpenD_P7(n) BITN_1(P7M1,n);BITN_1(P7M0,n); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
+
+/***
+
+#define P0_conf_in(n) BITN_1(P0M1,n);BITN_0(P0M0,n);
+#define P1_conf_in(n) BITN_1(P1M1,n);BITN_0(P1M0,n);
+#define P2_conf_in(n) BITN_1(P2M1,n);BITN_0(P2M0,n);
+#define P2_conf_port(n) BITN_0(P2M1,n);BITN_0(P2M0,n);
+
+
+#define P3_conf_in(n) BITN_1(P3M1,n);BITN_0(P3M0,n);
+#define P3_conf_port(n) BITN_0(P3M1,n);BITN_0(P3M0,n);
+
+#define P4_conf_in(n) BITN_1(P4M1,n);BITN_0(P4M0,n);
+#define P5_conf_in(n) BITN_1(P5M1,n);BITN_0(P5M0,n);
+
+***/
+
+
+
+#define NOP() _nop_()
+
+#define L0_INT4_OPEN() BITN_1(INT_CLKO, INT_EX4)
+#define L0_INT4_CLOSE() BITN_0(INT_CLKO, INT_EX4)
+
+#define L0_INT4_AT() BITN_G(INT_CLKO, INT_EX4)
+
+
+
+
+#define L0_INT4_CLEAR() BITN_0(AUXINTIF, INT4IF)
+#define L0_INT3_CLEAR() BITN_0(AUXINTIF, INT3IF)
+#define L0_INT2_CLEAR() BITN_0(AUXINTIF, INT2IF)
+
+
+
+
+//////
+
+#define L0_INT3_OPEN() BITN_1(INT_CLKO, INT_EX3);
+#define L0_INT3_CLOSE() BITN_0(INT_CLKO, INT_EX3);
+#define L0_INT2_OPEN() BITN_1(INT_CLKO, INT_EX2);
+#define L0_INT2_CLOSE() BITN_0(INT_CLKO, INT_EX2);
+#define L0_INT1_OPEN() EX1 = 1;
+#define L0_INT1_CLOSE() EX1 = 0;
+#define L0_INT0_OPEN() EX0 = 1;
+#define L0_INT0_CLOSE() EX0 = 0;
+
+#define D_ISR_int0 0 ///int0 下降沿触发 = 0 上下沿均可触发
+#define D_ISR_timer0 1
+#define D_ISR_int1 2 ///int1 下降沿触发 = 0 上下沿均可触发
+#define D_ISR_timer1 3
+#define D_ISR_int2 10 /////只有下降沿
+#define D_ISR_int3 11 /////只有下降沿
+#define D_SERVE_UART 4
+#define D_SERVE_UART1 8
+#define D_ISR_int4 16 /////只有下降沿
+
+#if 0
+#define L0_TIMER1_start() TR1 = 1;
+#define L0_TIMER1_end() TR1 = 0;
+
+
+#define L0_TIMER1_isr_OPEN() ET1 = 1;
+#define L0_TIMER1_isr_CLOSE() ET1 = 0;
+
+
+#else
+
+#define L0_TIMER1_start() ET1 = 1;
+#define L0_TIMER1_end() ET1 = 0;
+
+
+#define L0_TIMER1_isr_OPEN() TR1 = 1;
+#define L0_TIMER1_isr_CLOSE() TR1 = 0;
+
+
+#endif
+
+/// fixme 颠倒定义会让c51锁死#define _nop_() NOP()
+
+///#define L0_INT3_OPEN() BITN_1(INT_CLKO,INT_EX3); //使能INT3中断
+///#define L0_INT3_CLOSE() BITN_0(INT_CLKO,INT_EX3);
+
+#endif
+#endif //STC_stc8a8k
+
+
+
+
+
+
+
+
diff --git a/source/cpu/c51_macro.H b/source/cpu/c51_macro.H
new file mode 100644
index 0000000..5bbfab9
--- /dev/null
+++ b/source/cpu/c51_macro.H
@@ -0,0 +1,301 @@
+//////////////////////////////////////////////////////////////////////////
+/// COPYRIGHT NOTICE
+/// Copyright (c) 2018, 传控科技
+/// All rights reserved.
+///
+/// @file __C51_MACRO_H_
+/// @brief macro define 和cpu相关,可以和同一个系列的cpu共享
+///
+///(本文件实现的功能的详述)
+///
+/// @version 1.1 CCsens technology
+/// @author CC
+/// @date 20180102
+
+//
+//////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef __C51_MACRO_H_
+#define __C51_MACRO_H_
+
+#include
+
+#define D_P07_ON() P07 = 1
+#define D_P06_ON() P06 = 1
+#define D_P05_ON() P05 = 1
+#define D_P04_ON() P04 = 1
+#define D_P03_ON() P03 = 1
+#define D_P02_ON() P02 = 1
+#define D_P01_ON() P01 = 1
+#define D_P00_ON() P00 = 1
+#define D_P07_OFF() P07 = 0
+#define D_P06_OFF() P06 = 0
+#define D_P05_OFF() P05 = 0
+#define D_P04_OFF() P04 = 0
+#define D_P03_OFF() P03 = 0
+#define D_P02_OFF() P02 = 0
+#define D_P01_OFF() P01 = 0
+#define D_P00_OFF() P00 = 0
+#define D_P07_AT() (P07)
+#define D_P06_AT() (P06)
+#define D_P05_AT() (P05)
+#define D_P04_AT() (P04)
+#define D_P03_AT() (P03)
+#define D_P02_AT() (P02)
+#define D_P01_AT() (P01)
+#define D_P00_AT() (P00)
+#define D_P07_REV() P07 = ~P07
+#define D_P06_REV() P06 = ~P06
+#define D_P05_REV() P05 = ~P05
+#define D_P04_REV() P04 = ~P04
+#define D_P03_REV() P03 = ~P03
+#define D_P02_REV() P02 = ~P02
+#define D_P01_REV() P01 = ~P01
+#define D_P00_REV() P00 = ~P00
+
+
+#define D_P17_ON() P17 = 1
+#define D_P16_ON() P16 = 1
+#define D_P15_ON() P15 = 1
+#define D_P14_ON() P14 = 1
+#define D_P13_ON() P13 = 1
+#define D_P12_ON() P12 = 1
+#define D_P11_ON() P11 = 1
+#define D_P10_ON() P10 = 1
+#define D_P17_OFF() P17 = 0
+#define D_P16_OFF() P16 = 0
+#define D_P15_OFF() P15 = 0
+#define D_P14_OFF() P14 = 0
+#define D_P13_OFF() P13 = 0
+#define D_P12_OFF() P12 = 0
+#define D_P11_OFF() P11 = 0
+#define D_P10_OFF() P10 = 0
+#define D_P17_AT() (P17)
+#define D_P16_AT() (P16)
+#define D_P15_AT() (P15)
+#define D_P14_AT() (P14)
+#define D_P13_AT() (P13)
+#define D_P12_AT() (P12)
+#define D_P11_AT() (P11)
+#define D_P10_AT() (P10)
+#define D_P17_REV() P17 = ~P17
+#define D_P16_REV() P16 = ~P16
+#define D_P15_REV() P15 = ~P15
+#define D_P14_REV() P14 = ~P14
+#define D_P13_REV() P13 = ~P13
+#define D_P12_REV() P12 = ~P12
+#define D_P11_REV() P11 = ~P11
+#define D_P10_REV() P10 = ~P10
+
+#define D_P27_ON() P27 = 1
+#define D_P26_ON() P26 = 1
+#define D_P25_ON() P25 = 1
+#define D_P24_ON() P24 = 1
+#define D_P23_ON() P23 = 1
+#define D_P22_ON() P22 = 1
+#define D_P21_ON() P21 = 1
+#define D_P20_ON() P20 = 1
+#define D_P27_OFF() P27 = 0
+#define D_P26_OFF() P26 = 0
+#define D_P25_OFF() P25 = 0
+#define D_P24_OFF() P24 = 0
+#define D_P23_OFF() P23 = 0
+#define D_P22_OFF() P22 = 0
+#define D_P21_OFF() P21 = 0
+#define D_P20_OFF() P20 = 0
+#define D_P27_AT() (P27)
+#define D_P26_AT() (P26)
+#define D_P25_AT() (P25)
+#define D_P24_AT() (P24)
+#define D_P23_AT() (P23)
+#define D_P22_AT() (P22)
+#define D_P21_AT() (P21)
+#define D_P20_AT() (P20)
+#define D_P27_REV() P27 = ~P27
+#define D_P26_REV() P26 = ~P26
+#define D_P25_REV() P25 = ~P25
+#define D_P24_REV() P24 = ~P24
+#define D_P23_REV() P23 = ~P23
+#define D_P22_REV() P22 = ~P22
+#define D_P21_REV() P21 = ~P21
+#define D_P20_REV() P20 = ~P20
+
+
+#define D_P37_ON() P37 = 1
+#define D_P36_ON() P36 = 1
+#define D_P35_ON() P35 = 1
+#define D_P34_ON() P34 = 1
+#define D_P33_ON() P33 = 1
+#define D_P32_ON() P32 = 1
+#define D_P31_ON() P31 = 1
+#define D_P30_ON() P30 = 1
+#define D_P37_OFF() P37 = 0
+#define D_P36_OFF() P36 = 0
+#define D_P35_OFF() P35 = 0
+#define D_P34_OFF() P34 = 0
+#define D_P33_OFF() P33 = 0
+#define D_P32_OFF() P32 = 0
+#define D_P31_OFF() P31 = 0
+#define D_P30_OFF() P30 = 0
+#define D_P37_AT() (P37)
+#define D_P36_AT() (P36)
+#define D_P35_AT() (P35)
+#define D_P34_AT() (P34)
+#define D_P33_AT() (P33)
+#define D_P32_AT() (P32)
+#define D_P31_AT() (P31)
+#define D_P30_AT() (P30)
+#define D_P37_REV() P37 = ~P37
+#define D_P36_REV() P36 = ~P36
+#define D_P35_REV() P35 = ~P35
+#define D_P34_REV() P34 = ~P34
+#define D_P33_REV() P33 = ~P33
+#define D_P32_REV() P32 = ~P32
+#define D_P31_REV() P31 = ~P31
+#define D_P30_REV() P30 = ~P30
+
+
+#define D_P47_ON() P47 = 1
+#define D_P46_ON() P46 = 1
+#define D_P45_ON() P45 = 1
+#define D_P44_ON() P44 = 1
+#define D_P43_ON() P43 = 1
+#define D_P42_ON() P42 = 1
+#define D_P41_ON() P41 = 1
+#define D_P40_ON() P40 = 1
+#define D_P47_OFF() P47 = 0
+#define D_P46_OFF() P46 = 0
+#define D_P45_OFF() P45 = 0
+#define D_P44_OFF() P44 = 0
+#define D_P43_OFF() P43 = 0
+#define D_P42_OFF() P42 = 0
+#define D_P41_OFF() P41 = 0
+#define D_P40_OFF() P40 = 0
+#define D_P47_AT() (P47)
+#define D_P46_AT() (P46)
+#define D_P45_AT() (P45)
+#define D_P44_AT() (P44)
+#define D_P43_AT() (P43)
+#define D_P42_AT() (P42)
+#define D_P41_AT() (P41)
+#define D_P40_AT() (P40)
+#define D_P47_REV() P47 = ~P47
+#define D_P46_REV() P46 = ~P46
+#define D_P45_REV() P45 = ~P45
+#define D_P44_REV() P44 = ~P44
+#define D_P43_REV() P43 = ~P43
+#define D_P42_REV() P42 = ~P42
+#define D_P41_REV() P41 = ~P41
+#define D_P40_REV() P40 = ~P40
+
+#define D_P57_ON() P57 = 1
+#define D_P56_ON() P56 = 1
+#define D_P55_ON() P55 = 1
+#define D_P54_ON() P54 = 1
+#define D_P53_ON() P53 = 1
+#define D_P52_ON() P52 = 1
+#define D_P51_ON() P51 = 1
+#define D_P50_ON() P50 = 1
+#define D_P57_OFF() P57 = 0
+#define D_P56_OFF() P56 = 0
+#define D_P55_OFF() P55 = 0
+#define D_P54_OFF() P54 = 0
+#define D_P53_OFF() P53 = 0
+#define D_P52_OFF() P52 = 0
+#define D_P51_OFF() P51 = 0
+#define D_P50_OFF() P50 = 0
+#define D_P57_AT() (P57)
+#define D_P56_AT() (P56)
+#define D_P55_AT() (P55)
+#define D_P54_AT() (P54)
+#define D_P53_AT() (P53)
+#define D_P52_AT() (P52)
+#define D_P51_AT() (P51)
+#define D_P50_AT() (P50)
+#define D_P57_REV() P57 = ~P57
+#define D_P56_REV() P56 = ~P56
+#define D_P55_REV() P55 = ~P55
+#define D_P54_REV() P54 = ~P54
+#define D_P53_REV() P53 = ~P53
+#define D_P52_REV() P52 = ~P52
+#define D_P51_REV() P51 = ~P51
+#define D_P50_REV() P50 = ~P50
+
+#define D_P67_ON() P67 = 1
+#define D_P66_ON() P66 = 1
+#define D_P65_ON() P65 = 1
+#define D_P64_ON() P64 = 1
+#define D_P63_ON() P63 = 1
+#define D_P62_ON() P62 = 1
+#define D_P61_ON() P61 = 1
+#define D_P60_ON() P60 = 1
+#define D_P67_OFF() P67 = 0
+#define D_P66_OFF() P66 = 0
+#define D_P65_OFF() P65 = 0
+#define D_P64_OFF() P64 = 0
+#define D_P63_OFF() P63 = 0
+#define D_P62_OFF() P62 = 0
+#define D_P61_OFF() P61 = 0
+#define D_P60_OFF() P60 = 0
+#define D_P67_AT() (P67)
+#define D_P66_AT() (P66)
+#define D_P65_AT() (P65)
+#define D_P64_AT() (P64)
+#define D_P63_AT() (P63)
+#define D_P62_AT() (P62)
+#define D_P61_AT() (P61)
+#define D_P60_AT() (P60)
+#define D_P67_REV() P67 = ~P67
+#define D_P66_REV() P66 = ~P66
+#define D_P65_REV() P65 = ~P65
+#define D_P64_REV() P64 = ~P64
+#define D_P63_REV() P63 = ~P63
+#define D_P62_REV() P62 = ~P62
+#define D_P61_REV() P61 = ~P61
+#define D_P60_REV() P60 = ~P60
+
+#define D_P77_ON() P77 = 1
+#define D_P76_ON() P76 = 1
+#define D_P75_ON() P75 = 1
+#define D_P74_ON() P74 = 1
+#define D_P73_ON() P73 = 1
+#define D_P72_ON() P72 = 1
+#define D_P71_ON() P71 = 1
+#define D_P70_ON() P70 = 1
+#define D_P77_OFF() P77 = 0
+#define D_P76_OFF() P76 = 0
+#define D_P75_OFF() P75 = 0
+#define D_P74_OFF() P74 = 0
+#define D_P73_OFF() P73 = 0
+#define D_P72_OFF() P72 = 0
+#define D_P71_OFF() P71 = 0
+#define D_P70_OFF() P70 = 0
+#define D_P77_AT() (P77)
+#define D_P76_AT() (P76)
+#define D_P75_AT() (P75)
+#define D_P74_AT() (P74)
+#define D_P73_AT() (P73)
+#define D_P72_AT() (P72)
+#define D_P71_AT() (P71)
+#define D_P70_AT() (P70)
+#define D_P77_REV() P77 = ~P77
+#define D_P76_REV() P76 = ~P76
+#define D_P75_REV() P75 = ~P75
+#define D_P74_REV() P74 = ~P74
+#define D_P73_REV() P73 = ~P73
+#define D_P72_REV() P72 = ~P72
+#define D_P71_REV() P71 = ~P71
+#define D_P70_REV() P70 = ~P70
+
+
+
+#endif //__C51_MACRO_H_
+
+
+
+
+
+
+
diff --git a/source/cpu/STC_stc8a8k.H b/source/cpu/nouse/STC_stc8a8k.H
similarity index 100%
rename from source/cpu/STC_stc8a8k.H
rename to source/cpu/nouse/STC_stc8a8k.H
diff --git a/source/cpu/stc_macro.H b/source/cpu/nouse/stc_macro.H
similarity index 100%
rename from source/cpu/stc_macro.H
rename to source/cpu/nouse/stc_macro.H
diff --git a/source/cpu/stc_stc15w.H b/source/cpu/nouse/stc_stc15w.H
similarity index 100%
rename from source/cpu/stc_stc15w.H
rename to source/cpu/nouse/stc_stc15w.H
diff --git a/source/cpu/stc_stc8G1k.H b/source/cpu/nouse/stc_stc8G1k.H
similarity index 100%
rename from source/cpu/stc_stc8G1k.H
rename to source/cpu/nouse/stc_stc8G1k.H
diff --git a/source/cpu/stc_stc8f.h b/source/cpu/nouse/stc_stc8f.h
similarity index 100%
rename from source/cpu/stc_stc8f.h
rename to source/cpu/nouse/stc_stc8f.h
diff --git a/source/cpu/stc_stc8hxx.h b/source/cpu/nouse/stc_stc8hxx.h
similarity index 100%
rename from source/cpu/stc_stc8hxx.h
rename to source/cpu/nouse/stc_stc8hxx.h
diff --git a/source/cpu/stc_only.H b/source/cpu/stc_only.H
new file mode 100644
index 0000000..aa5c378
--- /dev/null
+++ b/source/cpu/stc_only.H
@@ -0,0 +1,258 @@
+//////////////////////////////////////////////////////////////////////////
+/// COPYRIGHT NOTICE
+/// Copyright (c) 2022, 传控科技
+/// All rights reserved.
+///
+/// @file __STC_ONLY_H_
+/// @brief macro define 和cpu相关,STC独有的 使用stc系列单片机是使用
+///
+///(本文件实现的功能的详述)
+///
+/// @version 1.0 CCsens technology
+/// @author CC
+/// @date 20211226
+
+//
+//////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef __STC_ONLY_H_
+#define __STC_ONLY_H_
+
+#include
+
+#define ET3 0x20
+#define T3IF 0x02
+
+///#define ES2 0x01
+///#define ES3 0x08
+
+#define S2TI 0x02
+#define S2RI 0x01
+#define S3TI 0x02
+#define S3RI 0x01
+#define ET4 0x40
+
+
+
+
+///#define I2CTXD (*(unsigned char volatile xdata *)0xfE86)//423@ST8.PDF
+
+///#define I2CRXD (*(unsigned char volatile xdata *)0xfE87)//423@ST8.PDF
+
+
+
+///-------------------------------------
+
+#define gRccUs01_H (*(unsigned char volatile data *)0xd2)
+#define gRccUs01_L (*(unsigned char volatile data *)0xd3)
+
+
+
+#define gRccUs01 (*(unsigned short volatile data *)0xd2)//226@ST8.PDF T4H定时器4的高字节 D2H T4H定时器4的低字节 D3H
+#define gRccUs02 (*(unsigned short volatile data *)0xEA)//351@ST8.PDF CCAP0l CCAP1L EAH EBH
+#define gRccUs03 (*(unsigned short volatile data *)0xEC)//351@ST8.PDF CCAP0l CCAP1L EAH EBH
+//#define gRccUs03 s_task_GC032A.n
+
+
+
+#define gRccUs04 (*(unsigned short volatile data *)0xFA)///351@ST8.PDF
+#define gRccUs05 (*(unsigned short volatile data *)0xFC)///351@ST8.PD CCAP2H
+
+/////////////////////////////////////////////////
+
+#ifdef docasdfasdf
+ 符号 地址 B7 B6 B5 B4 B3 B2 B1 B0
+ IE2 AFH EUSB ET4 ET3 ES4 ES3 ET2 ESPI ES2
+
+ EUSB∶USB中断允许位。
+ 0∶禁止 USB中断1∶允许 USB中断
+ ET4∶定时/计数器T4的溢出中断允许位。
+ 0∶禁止 T4中断1∶允许T4中断
+ ET3∶定时/计数器 T3的溢出中断允许位。
+ 0∶禁止 T3中断1∶允许T3中断
+ ES4∶串行口4中断允许位。
+ 0∶禁止串行口4中断1∶允许串行口 4中断ES3∶串行口3中断允许位。
+ 0∶禁止串行口3中断1∶允许串行口3中断
+ ET2∶定时/计数器 T2的溢出中断允许位。
+ 0∶禁止T2中断1∶允许T3中断ESPI∶SPI中断允许位。
+ 0∶禁止 SPI中断1∶允许 SPI中断
+ ES2∶串行口 2中断允许位。
+ 0∶禁止串行口2中断1∶允许串行口2中断
+
+
+#endif
+
+#define ES4 BITN4
+#define ES3 BITN3
+#define ES2 BITN0
+
+
+
+/* P3 */
+sbit RD = 0xB7;
+sbit WR = 0xB6;
+sbit T1 = 0xB5;
+sbit T0 = 0xB4;
+sbit INT1 = 0xB3;
+sbit INT0 = 0xB2;
+sbit TXD = 0xB1;
+sbit RXD = 0xB0;
+
+
+///sfr AUXINTIF = 0xef;
+
+#define T2IF 0x01
+#define INT4IF BITN6
+#define INT3IF BITN5
+#define INT2IF BITN4
+
+//#define T4IF BITN2
+//#define T3IF BITN1
+//#define T2IF BITN0
+
+
+/// >>>>> add by cc
+
+#include "../clib/bit.h"
+
+#define D_stdIO_P0_ALL() P0M1=0;P0M0=0;
+#define D_HighI_P0_ALL() P0M1=0;P0M0=0XFF;
+#define D_HighR_P0_ALL() P0M1=0XFF;P0M0=0;
+#define D_OpenD_P0_ALL() P0M1=0XFF;P0M0=0XFF;
+
+#define D_stdIO_P1_ALL() P1M1=0;P1M0=0;
+#define D_HighI_P1_ALL() P1M1=0;P1M0=0XFF;
+#define D_HighR_P1_ALL() P1M1=0XFF;P1M0=0;
+#define D_OpenD_P1_ALL() P1M1=0XFF;P1M0=0XFF;
+
+
+#define D_stdIO_P0(BITNx) BITN_0(P0M1,BITNx);BITN_0(P0M0,BITNx); //////00 准双向口 灌电流20mA 拉电流270-150uS
+#define D_HighI_P0(BITNx) BITN_0(P0M1,BITNx);BITN_1(P0M0,BITNx); //////01 推挽输出 20mA 加限流
+#define D_HighR_P0(BITNx) BITN_1(P0M1,BITNx);BITN_0(P0M0,BITNx); /////////10 高阻
+#define D_OpenD_P0(BITNx) BITN_1(P0M1,BITNx);BITN_1(P0M0,BITNx); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
+
+#define D_stdIO_P1(BITNx) BITN_0(P1M1,BITNx);BITN_0(P1M0,BITNx); //////00 准双向口 灌电流20mA 拉电流270-150uS
+#define D_HighI_P1(BITNx) BITN_0(P1M1,BITNx);BITN_1(P1M0,BITNx); //////01 推挽输出 20mA 加限流
+#define D_HighR_P1(BITNx) BITN_1(P1M1,BITNx);BITN_0(P1M0,BITNx); /////////10 高阻
+#define D_OpenD_P1(BITNx) BITN_1(P1M1,BITNx);BITN_1(P1M0,BITNx); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
+
+#define D_stdIO_P2(BITNx) BITN_0(P2M1,BITNx);BITN_0(P2M0,BITNx); //////00 准双向口 灌电流20mA 拉电流270-150uS
+#define D_HighI_P2(BITNx) BITN_0(P2M1,BITNx);BITN_1(P2M0,BITNx); //////01 推挽输出 20mA 加限流
+#define D_HighR_P2(BITNx) BITN_1(P2M1,BITNx);BITN_0(P2M0,BITNx); /////////10 高阻
+#define D_OpenD_P2(BITNx) BITN_1(P2M1,BITNx);BITN_1(P2M0,BITNx); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
+
+#define D_stdIO_P3(BITNx) BITN_0(P3M1,BITNx);BITN_0(P3M0,BITNx); //////00 准双向口 灌电流20mA 拉电流270-150uS
+#define D_HighI_P3(BITNx) BITN_0(P3M1,BITNx);BITN_1(P3M0,BITNx); //////01 推挽输出 20mA 加限流
+#define D_HighR_P3(BITNx) BITN_1(P3M1,BITNx);BITN_0(P3M0,BITNx); /////////10 高阻
+#define D_OpenD_P3(BITNx) BITN_1(P3M1,BITNx);BITN_1(P3M0,BITNx); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
+
+#define D_stdIO_P4(BITNx) BITN_0(P4M1,BITNx);BITN_0(P4M0,BITNx); //////00 准双向口 灌电流20mA 拉电流270-150uS
+#define D_HighI_P4(BITNx) BITN_0(P4M1,BITNx);BITN_1(P4M0,BITNx); //////01 推挽输出 20mA 加限流
+#define D_HighR_P4(BITNx) BITN_1(P4M1,BITNx);BITN_0(P4M0,BITNx); /////////10 高阻
+#define D_OpenD_P4(BITNx) BITN_1(P4M1,BITNx);BITN_1(P4M0,BITNx); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
+
+#define D_stdIO_P5(BITNx) BITN_0(P5M1,BITNx);BITN_0(P5M0,BITNx); //////00 准双向口 灌电流20mA 拉电流270-150uS
+#define D_HighI_P5(BITNx) BITN_0(P5M1,BITNx);BITN_1(P5M0,BITNx); //////01 推挽输出 20mA 加限流
+#define D_HighR_P5(BITNx) BITN_1(P5M1,BITNx);BITN_0(P5M0,BITNx); /////////10 高阻
+#define D_OpenD_P5(BITNx) BITN_1(P5M1,BITNx);BITN_1(P5M0,BITNx); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
+
+#define D_stdIO_P6(BITNx) BITN_0(P6M1,BITNx);BITN_0(P6M0,BITNx); //////00 准双向口 灌电流20mA 拉电流270-150uS
+#define D_HighI_P6(BITNx) BITN_0(P6M1,BITNx);BITN_1(P6M0,BITNx); //////01 推挽输出 20mA 加限流
+#define D_HighR_P6(BITNx) BITN_1(P6M1,BITNx);BITN_0(P6M0,BITNx); /////////10 高阻
+#define D_OpenD_P6(BITNx) BITN_1(P6M1,BITNx);BITN_1(P6M0,BITNx); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
+
+#define D_stdIO_P7(BITNx) BITN_0(P7M1,BITNx);BITN_0(P7M0,BITNx); //////00 准双向口 灌电流20mA 拉电流270-150uS
+#define D_HighI_P7(BITNx) BITN_0(P7M1,BITNx);BITN_1(P7M0,BITNx); //////01 推挽输出 20mA 加限流
+#define D_HighR_P7(BITNx) BITN_1(P7M1,BITNx);BITN_0(P7M0,BITNx); /////////10 高阻
+#define D_OpenD_P7(BITNx) BITN_1(P7M1,BITNx);BITN_1(P7M0,BITNx); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
+
+/***
+
+#define P0_conf_in(n) BITN_1(P0M1,n);BITN_0(P0M0,n);
+#define P1_conf_in(n) BITN_1(P1M1,n);BITN_0(P1M0,n);
+#define P2_conf_in(n) BITN_1(P2M1,n);BITN_0(P2M0,n);
+#define P2_conf_port(n) BITN_0(P2M1,n);BITN_0(P2M0,n);
+
+
+#define P3_conf_in(n) BITN_1(P3M1,n);BITN_0(P3M0,n);
+#define P3_conf_port(n) BITN_0(P3M1,n);BITN_0(P3M0,n);
+
+#define P4_conf_in(n) BITN_1(P4M1,n);BITN_0(P4M0,n);
+#define P5_conf_in(n) BITN_1(P5M1,n);BITN_0(P5M0,n);
+
+***/
+
+
+
+#define NOP() _nop_()
+
+#define L0_INT4_OPEN() BITN_1(INT_CLKO, INT_EX4)
+#define L0_INT4_CLOSE() BITN_0(INT_CLKO, INT_EX4)
+
+#define L0_INT4_AT() BITN_G(INT_CLKO, INT_EX4)
+
+
+
+
+#define L0_INT4_CLEAR() BITN_0(AUXINTIF, INT4IF)
+#define L0_INT3_CLEAR() BITN_0(AUXINTIF, INT3IF)
+#define L0_INT2_CLEAR() BITN_0(AUXINTIF, INT2IF)
+
+
+
+
+//////
+
+#define L0_INT3_OPEN() BITN_1(INT_CLKO, INT_EX3);
+#define L0_INT3_CLOSE() BITN_0(INT_CLKO, INT_EX3);
+#define L0_INT2_OPEN() BITN_1(INT_CLKO, INT_EX2);
+#define L0_INT2_CLOSE() BITN_0(INT_CLKO, INT_EX2);
+#define L0_INT1_OPEN() EX1 = 1;
+#define L0_INT1_CLOSE() EX1 = 0;
+#define L0_INT0_OPEN() EX0 = 1;
+#define L0_INT0_CLOSE() EX0 = 0;
+
+#if 0
+#define L0_TIMER1_start() TR1 = 1;
+#define L0_TIMER1_end() TR1 = 0;
+
+
+#define L0_TIMER1_isr_OPEN() ET1 = 1;
+#define L0_TIMER1_isr_CLOSE() ET1 = 0;
+
+
+#else
+
+#define L0_TIMER1_start() ET1 = 1;
+#define L0_TIMER1_end() ET1 = 0;
+
+
+#define L0_TIMER1_isr_OPEN() TR1 = 1;
+#define L0_TIMER1_isr_CLOSE() TR1 = 0;
+
+
+#endif
+
+/// fixme 颠倒定义会让c51锁死#define _nop_() NOP()
+
+///#define L0_INT3_OPEN() BITN_1(INT_CLKO,INT_EX3); //使能INT3中断
+///#define L0_INT3_CLOSE() BITN_0(INT_CLKO,INT_EX3);
+
+
+
+
+
+
+
+
+
+#endif //__STC_ONLY_H_
+
+
+
+
+
+
+
diff --git a/source/ctask/task.h b/source/ctask/task.h
index 33cde0e..0b9f100 100644
--- a/source/ctask/task.h
+++ b/source/ctask/task.h
@@ -143,10 +143,66 @@ typedef struct _ts_task
L2_task_switch_default_idelay();}
#define TTSS_Task_fun(step); break;}\
case (step):{
+
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+///>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
+
+
+/// 放在任务节点?每delay时间欿执行以下功能 x必须在对应的任务里是独一无二瘿
+#define TTSS_run_every_init(X,delay); (X) = s_nos_tick.t_10ms + delay;
+#define TTSS_run_every(X,delay) if( (X) < s_nos_tick.t_10ms) { TTSS_run_every_init(X,delay);
+#define TTSS_run_every0(X,delay) if(0){
+#define TTSS_run_every_end }
+
+
+
+#define TTSS_Cycle_every_init(X); (X) = 0;
+#define TTSS_Cycle_every(X,delay) if( X++ > delay) { TTSS_Cycle_every_init(X);
+#define TTSS_Cycle_every0(X,delay) if(0){
+#define TTSS_Cycle_every_end }
+
+
+#define TTSS_run_times(X,n) for(X = 0;X < n;X ++)
+#define TTSS_run_overflow(X,n) if(X++ > n)
+
+
+
+
+////设定溢出时间 如果到了就进行执行某个操仿 和run-every的区别是执行一次,所以不需要再次初始化
+#define TTSS_overtime_init(X,delay); (X) = s_nos_tick.jiffies + delay;
+#define TTSS_overtime_get(X) if( (X) < s_nos_tick.jiffies) {
+#define TTSS_overtime_end }
+
+
+//////are you ok ,使用任务变量 overVal(全局变量不可随意嵌套使用),
+///// timerx: 问候的时间间隔
+///// printChar 应答的内容(单字符,arccii字符可打印字符最佳)
+////代码套路化,符合自然语言的拟人化,为将来自动生成代码做准备
+#define TTSS_AreUok(overVal,timerx,printChar) \
+ TTSS_overtime_get(overVal) \
+ L0_uart0_uc(printChar); \
+ TTSS_overtime_init(overVal,timerx);\
+ TTSS_overtime_end
+
+
+#define TTSS_Alarm_init(X,delay); (X) = s_nos_tick.jiffies + delay;
+#define TTSS_Alarm_AT(X) ( (X) < s_nos_tick.jiffies)
+
+#define TTSS_Alarm_arrives(X) if( (X) < s_nos_tick.jiffies) {
+#define TTSS_Alarm_end }
+
+
+
+//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+
+
+
+
extern void L1_task_init(TS_task *s);
+
+
#endif//_TASK_H_
/*****************************************************
*==============================================================
diff --git a/source/ctask/tick.c b/source/ctask/tick.c
index fa4ee64..4540d3b 100644
--- a/source/ctask/tick.c
+++ b/source/ctask/tick.c
@@ -23,8 +23,8 @@ void L1_tick_init(void)
{
s_nos_tick.jiffies = 0;
s_nos_tick.t_1s = 0;
- s_nos_tick.t1s_heatbeart= 0;
- //s_nos_tick.t_10ms = 0;
+ s_nos_tick.t1s_heartbeat= 0;
+ s_nos_tick.t_50ms = 0;
}
@@ -37,11 +37,11 @@ void L1_tick_tick (void)
//s_nos_tick.t_50ms ++;//D_led_D1_REV(); 20160522验证
s_nos_tick.jiffies++;
//s_nos_tick.t_10ms = 1;
- if(s_nos_tick.jiffies % HZ == 0)
+ if(s_nos_tick.jiffies % HZ == 0) ///HZ = 10ms
{
// 65535*65535/24/60/60/356/10 =12.7年
s_nos_tick.t_1s ++;
- s_nos_tick.t1s_heatbeart = 1;
+ s_nos_tick.t1s_heartbeat = 1;
}
}
diff --git a/source/ctask/tick.h b/source/ctask/tick.h
index 42f156a..e37e9c8 100644
--- a/source/ctask/tick.h
+++ b/source/ctask/tick.h
@@ -17,7 +17,18 @@ struct _s_nos_tick_
{
vU32 jiffies; // noos系统定时器最小计时单元
vU32 t_1s;
- vU8 t1s_heatbeart; //noos 系统定时器整秒时刻标志,需要软件清除
+ vU8 t1s_heartbeat; //noos 系统定时器整秒时刻标志,需要软件清除
+
+ vU8 print_heartbeat;
+
+ vU32 n_stamp;
+//// vU32 t_10ms;
+ vU32 t_50ms; // noos 系统定时器10m技术
+// vU32 t1s_flag[6]; //fixme: INT32U 根据不同的系统来决定
+ //volatile unsigned char t1s_flag;
+/// vU8 ts_flag;
+ vU32 n_stamp3;
+
// vU8 t_10ms;
};
extern struct _s_nos_tick_ s_nos_tick;
@@ -46,6 +57,8 @@ extern struct _s_nos_tick_ s_nos_tick;
#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)
@@ -72,7 +85,6 @@ extern struct _s_nos_tick_ s_nos_tick;
#define L0_nos_tick10ms_start(start_n) start_n = s_nos_tick.t_50ms
#define L0_nos_tick10ms_interval(start_n) (s_nos_tick.t_50ms - 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)
@@ -85,6 +97,14 @@ extern struct _s_nos_tick_ s_nos_tick;
#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);
+#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
extern void L1_tick_init(void);
extern void L1_tick_tick (void);
diff --git a/source/ctask/tick.h.bak b/source/ctask/tick.h.bak
new file mode 100644
index 0000000..42f156a
--- /dev/null
+++ b/source/ctask/tick.h.bak
@@ -0,0 +1,94 @@
+/*****************************************************************************
+ * 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
+******************************************************************************/
+#ifndef __tick_H
+#define __tick_H
+#include "../clib/Type.h"
+#include "../msp/time.h"
+
+struct _s_nos_tick_
+{
+ vU32 jiffies; // noos系统定时器最小计时单元
+ vU32 t_1s;
+ vU8 t1s_heatbeart; //noos 系统定时器整秒时刻标志,需要软件清除
+// vU8 t_10ms;
+};
+extern struct _s_nos_tick_ s_nos_tick;
+
+#if(TYPE_JIFFIES_5MS == D_sys_Jiffies)
+ #define HZ 200
+#elif(TYPE_JIFFIES_10MS == D_sys_Jiffies)
+ #define HZ 100
+#elif(TYPE_JIFFIES_25MS == D_sys_Jiffies)
+ #define HZ 40
+#endif
+#define JIFFIES (1000/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)
+
+#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_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 (1 * HZ)
+#define D_Tdelay_2s (2 * HZ)
+#define D_Tdelay_3s (3 * HZ)
+#define D_Tdelay_4s (4 * HZ)
+#define D_Tdelay_5s (5 * HZ)
+#define D_Tdelay_10s (10 * HZ)
+#define D_Tdelay_15s (15 * HZ)
+
+#define D_Tdelay_1min (1 * 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 L0_nos_tick10ms_start(start_n) start_n = s_nos_tick.t_50ms
+#define L0_nos_tick10ms_interval(start_n) (s_nos_tick.t_50ms - 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_50ms;
+#define L2_tick_time_interval(time_stamp,time_overflow) (( s_nos_tick.t_50ms - 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);
+
+extern void L1_tick_init(void);
+extern void L1_tick_tick (void);
+
+#endif /* end __tick_H */
+/*****************************************************************************
+** End Of File
+******************************************************************************/
diff --git a/source/msp/eeprom.h b/source/msp/eeprom.h
index e8bbf92..c2310cb 100644
--- a/source/msp/eeprom.h
+++ b/source/msp/eeprom.h
@@ -21,7 +21,7 @@
#include "../clib/type.h"
#include "../clib/clib.h"
#include "../ctask/tick.h"
-#include "uart0.h"
+#include "msp_uart0.h"
/**
* EEPROM 存储结构
diff --git a/source/msp/UART0.C b/source/msp/mcu support/UART0.C
similarity index 99%
rename from source/msp/UART0.C
rename to source/msp/mcu support/UART0.C
index c158a2f..9bea919 100644
--- a/source/msp/UART0.C
+++ b/source/msp/mcu support/UART0.C
@@ -54,7 +54,7 @@ msp/uartx.c 底层代码 和cpu相关 缓存发送也放在里面
L0_Usend_uc------UserDef
-----------------------------------------------------------------------------------------
********************************************************************************/
-#include "uart0.h"
+#include "msp_uart0.h"
#include "../msp/time.h"
//#define _USE_485
@@ -154,7 +154,7 @@ void INTERRUPT_UART(void) D_SERVE_UART
}
//NOP(); NOP(); NOP();
}
-
+#if 0
void timer3_isrHanddle(void) D_SERVE_TIMER3
{
struct _tp_handler_x *p1 = &s_uart0_rec;
@@ -175,6 +175,6 @@ void timer3_isrHanddle(void) D_SERVE_TIMER3
L0_timer3_stop();
}
-
+#endif
diff --git a/source/msp/UART2.C b/source/msp/mcu support/UART2.C
similarity index 96%
rename from source/msp/UART2.C
rename to source/msp/mcu support/UART2.C
index e746df4..ae3cde6 100644
--- a/source/msp/UART2.C
+++ b/source/msp/mcu support/UART2.C
@@ -54,7 +54,7 @@ msp/uartx.c 底层代码 和cpu相关 缓存发送也放在里面
L0_Usend_uc------UserDef
-----------------------------------------------------------------------------------------
********************************************************************************/
-#include "uart2.h"
+#include "msp_uart2.h"
#include "../app/app_config.h"
#include "../msp/time.h"
@@ -135,8 +135,11 @@ void L1_uart_tpc_config(void)
/*************************************************
UART 中断
*************************************************/
-#define D_SERVE_uart2 interrupt 8
-void INTERRUPT_uart2(void) D_SERVE_uart2// using 2
+///#define D_SERVE_uart2 interrupt 8
+// using 2
+#define D_SERVE_UART2 interrupt 8
+///void INTERRUPT_uart2(void) D_SERVE_uart2
+void INTERRUPT_uart2(void) interrupt 8
{
//NOP(); NOP(); NOP();
if(L0_uart2_IntRI()) //如果是U2接收中断
diff --git a/source/msp/UART2.h b/source/msp/mcu support/UART2.h
similarity index 99%
rename from source/msp/UART2.h
rename to source/msp/mcu support/UART2.h
index cf66fe8..d3bb23c 100644
--- a/source/msp/UART2.h
+++ b/source/msp/mcu support/UART2.h
@@ -57,7 +57,7 @@ msp/uartx.c 底层代码 和cpu相关 缓存发送也放在里面
#include "../tpc/at0d0a.h"
#include "../tpc/modbus.h"
-#include "uart_x.h"
+#include "msp_uart_x.h"
#include "../tpc/ccmodbus.h"
#define uNum2 1
diff --git a/source/msp/UART4.h b/source/msp/mcu support/UART4.h
similarity index 100%
rename from source/msp/UART4.h
rename to source/msp/mcu support/UART4.h
diff --git a/source/msp/uart_x.c b/source/msp/mcu support/uart_x.c
similarity index 99%
rename from source/msp/uart_x.c
rename to source/msp/mcu support/uart_x.c
index bdda560..57210d8 100644
--- a/source/msp/uart_x.c
+++ b/source/msp/mcu support/uart_x.c
@@ -54,7 +54,7 @@ msp/uartx.c 底层代码 和cpu相关 缓存发送也放在里面
L0_Usend_uc------UserDef
-----------------------------------------------------------------------------------------
********************************************************************************/
-#include "uart_x.h"
+#include "msp_uart_x.h"
TS_uart_reg idata ts_uart[SERIAL_MAX_NUM] = {0};
diff --git a/source/msp/msp_uart0.C b/source/msp/msp_uart0.C
new file mode 100644
index 0000000..014d7b4
--- /dev/null
+++ b/source/msp/msp_uart0.C
@@ -0,0 +1,187 @@
+//////////////////////////////////////////////////////////////////////////
+/// COPYRIGHT NOTICE
+/// Copyright (c) 2015, 传控科技
+/// All rights reserved.
+///
+/// @file main.c
+/// @brief main app
+///
+///(本文件实现的功能的详述)
+///
+/// @version 1.1 CCsens technology
+/// @author CC
+/// @date 20150102
+///
+///
+/// 修订说明:最初版本
+/// Modified by:
+/// Modified date:
+/// Version:
+/// Descriptions:
+// 20160413 CC-ACC-VH02
+// 连接至 J22 RXD0 TXD0
+//P5_DIR &= ~BITN1; //p5.1输出TXD
+//P5_DIR |= BITN0; //p5.0输入RXD
+//P5_SEL0 &= ~(BITN0 +BITN1); //设置P5.0 P5.1为UART0 RXD TXD
+//P5_SEL1 |= BITN0 +BITN1;
+
+/*****************************************************************************
+update by cc @201700110
+针对多串口 和 单一串口 有区别 每个串口是独立的还是分开的有讲究 程序是复杂的还是软件应用简单是
+个需要平衡的事情.
+
+clib/clib.c:
+公用的函数 和硬件无关
+放置串行模式(串口等其他通讯总线类的输出)输出的函数,
+一些覆盖模式输出的(lcd等固屏输出的)的也可使用
+ void Lc_print(void (*L0pf_send_uc)(char ww), char *dat,...)
+-----------------------------------------------------------------------------------------
+uartcom/Uprotocol2app
+ 协议到应用
+ 为了适应不同的通讯协议需要不同的uart口来对应 和应用相关
+
+typedef struct _ts_lcm_pro_; 应用协议包的定义? LCM的协议------------
+ L3_UARTcom0_exp_protocol 解析应用协议
+-----------------------------------------------------------------------------------------
+uartcom/urec2protocol: 接收到的数据放入到指向特定协议的缓存中,和协议的格式有关 一般分为 标头式或者标尾式
+公用的串口通讯定义
+ struct _s_uart_rec_ 的公共协议包(关键的结构体)的声明------struct _s_uart_rec_
+ void L1_uart_2buf(struct _s_uart_rec_ *p)串行数据保存到指向特定协议的缓冲中
+--------------------------------------------------------------------------------------------
+msp/uartx.c 底层代码 和cpu相关 缓存发送也放在里面
+ L0_UART0_Init
+ UART0_IRQHandler
+ L0_Usend_uc------UserDef
+-----------------------------------------------------------------------------------------
+********************************************************************************/
+#include "msp_uart0.h"
+#include "../msp/time.h"
+//#define _USE_485
+
+static volatile Ts_uart_send_buf idata ts_uart_send_shop;
+
+TP_Handler_X s_uart0_rec;
+TS_PH4_modbus s_uart0_ack;
+
+void L0_uart0_init(void)
+{
+// U16 val1= D_BRT_COUNT(12,D_sys_MainFre,D_uart0_BRT);
+// SCON = 0x50; //8位数据,可变波特率
+// AUXR |= 0x01; //串口1选择定时器2为波特率发生器
+// AUXR &= 0xFB; //定时器2时钟为Fosc/12,即12T
+// T2L = val1;
+// T2H = val1 >> 8;
+// AUXR |= 0x10; //启动定时器2
+ SCON = 0x50; //8位数据,可变波特率
+ AUXR &= 0xBF; //定时器时钟12T模式
+ AUXR &= 0xFE; //串口1选择定时器1为波特率发生器
+ TMOD &= 0x0F; //设置定时器模式
+ TL1 = 0xFC; //设置定时初始值
+ TH1 = 0xFF; //设置定时初始值
+//// TL1 = val1; //设置定时初始值
+//// TH1 = val1 >> 8; //设置定时初始值
+ ET1 = 0; //禁止定时器%d中断
+ TR1 = 1; //定时器1开始计时
+// SCON = 0x50; //8位数据,可变波特率
+// AUXR |= 0x01; //串口1选择定时器2为波特率发生器
+// AUXR &= 0xFB; //定时器时钟12T模式
+// T2L = 0xE8; //设置定时初始值
+// T2H = 0xFF; //设置定时初始值
+// AUXR |= 0x10; //定时器2开始计时
+}
+
+void L0_uart0_buf_init(void)
+{
+ ts_uart[uNum0].p = &ts_uart_send_shop;
+ ts_uart[uNum0].p->max = ts_uart[uNum0].p->now = 0;
+ ts_uart[uNum0].p->ok = D_ready;
+ ts_uart[uNum0].t = &s_uart0_rec;
+ ts_uart[uNum0].t->head = 0;
+ ts_uart[uNum0].t->ok = 0;
+ //ts_uart[uNum0].tp_handler = L1_s2b_PH4;
+ ts_uart[uNum0].tp_handler = NULL; //使用函数指针导致错误
+ ts_uart[uNum0].ack = (U8*)&s_uart0_ack;
+ L0_uart0_init();
+ D_uart0_ES_INT(1); //打开串口中断
+
+#if (D_UART0_485_TYPE != TYPE_485_NONE)
+ D_UART0_485_RX() //默认处于接收状态
+#endif
+}
+
+void L0_uart0_sendArray(U8 * buf, U16 len)
+{
+#if (D_UART0_485_TYPE != TYPE_485_NONE)
+ D_UART0_485_TX() //切换到输出状态
+#endif
+ L0_uartN_sendArray(uNum0,buf,len);
+}
+
+/*************************************************
+UART 中断
+*************************************************/
+void INTERRUPT_UART(void) D_SERVE_UART
+{
+ //NOP(); NOP(); NOP();
+ if(L0_uart0_IntRI()) //如果是U0接收中断
+ {
+ // LED0 ^= 1;
+ L0_uart0_IntRIClear(); //清除接收中断标志
+ ts_uart[uNum0].t->reg = SBUF;
+ //ts_uart[uNum0].tp_handler(ts_uart[uNum0].t);
+ L1_s2b_PH4(ts_uart[uNum0].t);
+ L0_timer3_restart();
+ }
+ if(L0_uart0_IntTI()) //如果是U0发送中断
+ {
+ //LED0 ^= 1;
+ L0_uart0_IntTIClear(); //清除发送中断标志
+ if(ts_uart[uNum0].p->max != ts_uart[uNum0].p->now)
+ {
+ SBUF = ts_uart[uNum0].p->p[ts_uart[uNum0].p->now];
+ //L0_uartN_set(uNum0,ts_uart[uNum0].p->p[ts_uart[uNum0].p->now]);
+ ts_uart[uNum0].p->now ++;
+ }
+ else
+ {
+ ts_uart[uNum0].p->ok = D_ready;
+ ts_uart[uNum0].p->max = 0;
+ ts_uart[uNum0].p->now = 0;//可以发送下一个数据
+#if (D_UART0_485_TYPE != TYPE_485_NONE)
+ D_UART0_485_RX() //切换到接收状态
+#endif
+ }
+ }
+ //NOP(); NOP(); NOP();
+}
+#if 0
+void timer3_isrHanddle(void) D_SERVE_TIMER3
+{
+ struct _tp_handler_x *p1 = &s_uart0_rec;
+ if((p1->head == 1) && (p1->num >= D_s_modbus_min))
+ {
+ p1->head = 0;
+ crc16_irq(p1->crc,p1->buf,p1->num - 2); //校验CRC
+ if(p1->crc[0] == p1->buf[p1->num-2] && p1->crc[1] == p1->buf[p1->num-1])
+ {
+ p1->ok = 1;
+// LED0 ^= 1;
+ }
+ else
+ {
+ p1->yes = 1;
+ }
+ }
+
+ L0_timer3_stop();
+}
+#endif
+//putchar字符发送函数重定向
+extern char putchar(char c)
+{
+ ///PrintData1(c);
+ L0_uart0_sendArray(&c,1);
+ return c;
+}
+
+
diff --git a/source/msp/UART0.h b/source/msp/msp_uart0.h
similarity index 95%
rename from source/msp/UART0.h
rename to source/msp/msp_uart0.h
index 29caea2..4a8af1c 100644
--- a/source/msp/UART0.h
+++ b/source/msp/msp_uart0.h
@@ -54,9 +54,9 @@ msp/uartx.c 底层代码 和cpu相关 缓存发送也放在里面
#define _uart0_H
#include "../bsp/bsp_config.h"
#include "../tpc/modbus.h"
-#include "uart_x.h"
-#include "../msp/uart2.h"
-#include "../msp/uart3.h"
+#include "msp_uart_x.h"
+#include "../msp/msp_uart2.h"
+///#include "../msp/msp_uart3.h"
//#include "../tpc/tpc_x.h"
#define uNum0 0
@@ -80,7 +80,7 @@ void L0_uart0_sendArray(U8 * buf, U16 len);
#define L0_uart0_ushex(X) L0_uartN_ushex(uNum0,X)
#define L0_uart0_ulhex(X) L0_uartN_ulhex(uNum0,X)
#define L0_uart0_sendstr(buf) L0_uartN_sendstr(uNum0,buf)
-#define L1_uart0_uchexArray(buf) L1_uartN_uchexArray(uNum0,buf)
+#define L1_uart0_uchexArray(buf,n) L1_uartN_uchexArray(uNum0,buf,n)
extern TP_Handler_X s_uart0_rec;
extern TS_PH4_modbus s_uart0_ack;
diff --git a/source/msp/msp_uart2.C b/source/msp/msp_uart2.C
new file mode 100644
index 0000000..3a6232e
--- /dev/null
+++ b/source/msp/msp_uart2.C
@@ -0,0 +1,183 @@
+//////////////////////////////////////////////////////////////////////////
+/// COPYRIGHT NOTICE
+/// Copyright (c) 2015, 传控科技
+/// All rights reserved.
+///
+/// @file main.c
+/// @brief main app
+///
+///(本文件实现的功能的详述)
+///
+/// @version 1.1 CCsens technology
+/// @author CC
+/// @date 20150102
+///
+///
+/// 修订说明:最初版本
+/// Modified by:
+/// Modified date:
+/// Version:
+/// Descriptions:
+// 20160413 CC-ACC-VH02
+// 连接至 J22 RXD0 TXD0
+//P5_DIR &= ~BITN1; //p5.1输出TXD
+//P5_DIR |= BITN0; //p5.0输入RXD
+//P5_SEL0 &= ~(BITN0 +BITN1); //设置P5.0 P5.1为UART0 RXD TXD
+//P5_SEL1 |= BITN0 +BITN1;
+
+/*****************************************************************************
+update by cc @201700110
+针对多串口 和 单一串口 有区别 每个串口是独立的还是分开的有讲究 程序是复杂的还是软件应用简单是
+个需要平衡的事情.
+
+clib/clib.c:
+公用的函数 和硬件无关
+放置串行模式(串口等其他通讯总线类的输出)输出的函数,
+一些覆盖模式输出的(lcd等固屏输出的)的也可使用
+ void Lc_print(void (*L0pf_send_uc)(char ww), char *dat,...)
+-----------------------------------------------------------------------------------------
+uartcom/Uprotocol2app
+ 协议到应用
+ 为了适应不同的通讯协议需要不同的uart口来对应 和应用相关
+
+typedef struct _ts_lcm_pro_; 应用协议包的定义? LCM的协议------------
+ L3_UARTcom0_exp_protocol 解析应用协议
+-----------------------------------------------------------------------------------------
+uartcom/urec2protocol: 接收到的数据放入到指向特定协议的缓存中,和协议的格式有关 一般分为 标头式或者标尾式
+公用的串口通讯定义
+ struct _s_uart_rec_ 的公共协议包(关键的结构体)的声明------struct _s_uart_rec_
+ void L1_uart_2buf(struct _s_uart_rec_ *p)串行数据保存到指向特定协议的缓冲中
+--------------------------------------------------------------------------------------------
+msp/uartx.c 底层代码 和cpu相关 缓存发送也放在里面
+ L0_UART0_Init
+ UART0_IRQHandler
+ L0_Usend_uc------UserDef
+-----------------------------------------------------------------------------------------
+********************************************************************************/
+#include "msp_uart2.h"
+#include "../app/app_config.h"
+#include "../msp/time.h"
+
+//#define _USE_485
+
+static volatile Ts_uart_send_buf idata ts_uart2_send_shop;
+//TP_Handler_X s_uart2_rec;
+//TS_PH4_modbus s_uart2_ack;
+struct _s_PC1_0D0A_ s_uart2_at;
+TS_Handle_PH3 s_uart2_tcp_rec;
+void (*Lp0_uart2_fun)(unsigned char sbufreg);
+
+void L0_uart2_init(void)
+{
+ S2CON = 0x50; //8位数据,可变波特率
+ AUXR &= 0xFB; //定时器时钟12T模式
+ T2L = 0xFC; //设置定时初始值
+ T2H = 0xFF; //设置定时初始值
+ AUXR |= 0x10; //定时器2开始计时
+}
+
+void L0_uart2_buf_init(void)
+{
+ s_uart2_at.head = 0;
+ s_uart2_at.ok = 0;
+ s_uart2_at.num = 0;
+
+ ts_uart[uNum2].p = &ts_uart2_send_shop;
+ ts_uart[uNum2].p->now = 0;
+ ts_uart[uNum2].p->ok = D_ready;
+ //ts_uart[uNum2].t = &s_uart2_rec;
+ ts_uart[uNum2].t->head = 0;
+ ts_uart[uNum2].t->ok = 0;
+ ts_uart[uNum2].tp_handler = NULL;
+ //ts_uart[uNum2].ack = (U8*)&s_uart2_ack;
+ L0_uart2_init();
+ D_uart2_ES_INT(1); //打开串口中断
+
+
+ //配置串口对应的操作协议
+ L1_uart_tpc_config();
+
+#if (D_UART2_485_TYPE != TYPE_485_NONE)
+ D_UART2_485_RX() //默认处于接收状态
+#endif
+}
+
+void L0_uart2_sendArray(U8 * buf, U16 len)
+{
+#if (D_UART2_485_TYPE != TYPE_485_NONE)
+ D_UART2_485_TX() //切换到输出状态
+#endif
+ L0_uartN_sendArray(uNum2,buf,len);
+}
+void L1_s2b_gm35(unsigned char sbufreg)
+{
+ s_uart2_tcp_rec.reg = sbufreg;
+ L1_s2b_PH3(&s_uart2_tcp_rec);
+ if(0 == s_uart2_tcp_rec.head)
+ {
+ s_uart2_at.reg = sbufreg;
+ L1_s2b_0d0a(&s_uart2_at);
+ }
+ else
+ {
+ s_uart2_at.head = 0;
+ }
+}
+void L1_uart_tpc_config(void)
+{
+ s_uart2_tcp_rec.head = 0;
+ s_uart2_tcp_rec.ok = 0;
+ s_uart2_tcp_rec.head_0 = D_CMD_Filter1_ff;
+ s_uart2_tcp_rec.head_1 = D_CMD_Filter2_fe;
+ s_uart2_tcp_rec.sp = (U8*)&(s_uart2_tcp_rec.ts_ccmodbus);
+}
+
+/*************************************************
+UART 中断
+*************************************************/
+///#define D_SERVE_uart2 interrupt 8
+void INTERRUPT_uart2(void) interrupt 8 ///D_SERVE_uart2// using 2
+{
+ //NOP(); NOP(); NOP();
+ if(L0_uart2_IntRI()) //如果是U2接收中断
+ {
+ //LED1 ^= 1;
+ L0_uart2_IntRIClear(); //清除接收中断标志
+ //ts_uart[uNum2].t->reg = L0_uartN_get(uNum2);
+ //ts_uart[uNum2].tp_handler(ts_uart[uNum2].t);
+ //s_uart2_at.reg = L0_uartN_get(uNum2);
+ //L1_s2b_0d0a(&s_uart2_at);
+ L1_s2b_gm35(L0_uart2_get());
+ }
+ if(L0_uart2_IntTI()) //如果是U0发送中断
+ {
+ L0_uart2_IntTIClear(); //清除发送中断标志
+ if(ts_uart[uNum2].p->max != ts_uart[uNum2].p->now)
+ {
+ S2BUF = ts_uart[uNum2].p->p[ts_uart[uNum2].p->now];
+ //L0_uartN_set(uNum2,ts_uart[uNum2].p->p[ts_uart[uNum2].p->now]);
+ ts_uart[uNum2].p->now ++;
+ }
+ else
+ {
+ ts_uart[uNum2].p->ok = D_ready;
+ ts_uart[uNum2].p->max = 0;
+ ts_uart[uNum2].p->now = 0;//可以发送下一个数据
+#if (D_UART2_485_TYPE != TYPE_485_NONE)
+ D_UART2_485_RX() //切换到接收状态
+#endif
+
+ }
+ }
+ //NOP(); NOP(); NOP();
+}
+
+
+
+
+
+
+
+
+
+
diff --git a/source/msp/msp_uart2.h b/source/msp/msp_uart2.h
new file mode 100644
index 0000000..d3bb23c
--- /dev/null
+++ b/source/msp/msp_uart2.h
@@ -0,0 +1,94 @@
+//////////////////////////////////////////////////////////////////////////
+/// COPYRIGHT NOTICE
+/// Copyright (c) 2015, 传控科技
+/// All rights reserved.
+///
+/// @file main.c
+/// @brief main app
+///
+///(本文件实现的功能的详述)
+///
+/// @version 1.1 CCsens technology
+/// @author CC
+/// @date 20150102
+///
+///
+/// 修订说明:最初版本
+/// Modified by:
+/// Modified date:
+/// Version:
+/// Descriptions:
+//////////////////////////////////////////////////////////////////////////
+/*****************************************************************************
+update by cc @201700110
+针对多串口 和 单一串口 有区别 每个串口是独立的还是分开的有讲究 程序是复杂的还是软件应用简单是
+个需要平衡的事情.
+
+clib/clib.c:
+公用的函数 和硬件无关
+放置串行模式(串口等其他通讯总线类的输出)输出的函数,
+一些覆盖模式输出的(lcd等固屏输出的)的也可使用
+ void Lc_print(void (*L0pf_send_uc)(char ww), char *dat,...)
+-----------------------------------------------------------------------------------------
+uartcom/Uprotocol2app
+ 协议到应用
+ 为了适应不同的通讯协议需要不同的uart口来对应 和应用相关
+
+typedef struct _ts_lcm_pro_; 应用协议包的定义? LCM的协议------------
+ L3_UARTcom0_exp_protocol 解析应用协议
+-----------------------------------------------------------------------------------------
+uartcom/urec2protocol: 接收到的数据放入到指向特定协议的缓存中,和协议的格式有关 一般分为 标头式或者标尾式
+公用的串口通讯定义
+ struct _s_uart_rec_ 的公共协议包(关键的结构体)的声明------struct _s_uart_rec_
+ void L1_uart_2buf(struct _s_uart_rec_ *p)串行数据保存到指向特定协议的缓冲中
+--------------------------------------------------------------------------------------------
+msp/uartx.c 底层代码 和cpu相关 缓存发送也放在里面
+ L0_uart2_Init
+ uart2_IRQHandler
+ L0_Usend_uc------UserDef
+-----------------------------------------------------------------------------------------
+********************************************************************************/
+
+
+#ifndef _uart2_H
+#define _uart2_H
+
+#include "../bsp/bsp_config.h"
+
+#include "../tpc/at0d0a.h"
+#include "../tpc/modbus.h"
+#include "msp_uart_x.h"
+#include "../tpc/ccmodbus.h"
+
+#define uNum2 1
+
+#define D_uart2_ES_INT(x) (x) ? (BITN_1(IE2,ES2)) : (BITN_0(IE2,ES2))
+#define L0_uart2_IntRI() (S2CON & S2RI)//BITN_G(SCON,U0RI)
+#define L0_uart2_IntTI() (S2CON & S2TI)//BITN_G(SCON,U0TI)
+#define L0_uart2_IntRIClear(); BITN_0(S2CON,S2RI)
+#define L0_uart2_IntTIClear(); BITN_0(S2CON,S2TI)
+#define L0_uart2_get() (S2BUF)
+
+//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+
+void L0_uart2_buf_init(void);
+void L0_uart2_sendArray(U8 * buf, U16 len);
+void uart2_Handdle(void);
+#define L0_uart2_uc(X) L0_uartN_uc(uNum2,X)
+#define L0_uart2_us(X) L0_uartN_us(uNum2,X)
+#define L0_uart2_ul(X) L0_uartN_ul(uNum2,X)
+#define L0_uart2_0d0a() L0_uartN_0d0a(0)
+#define L0_uart2_uchex(X) L0_uartN_uchex(uNum2,X)
+#define L0_uart2_ushex(X) L0_uartN_ushex(uNum2,X)
+#define L0_uart2_ulhex(X) L0_uartN_ulhex(uNum2,X)
+#define L0_uart2_sendstr(buf) L0_uartN_sendstr(uNum2,buf)
+//extern TP_Handler_X s_uart2_rec;
+//extern TS_PH4_modbus s_uart2_ack;
+extern TS_Handle_0d0a s_uart2_at;
+extern TS_Handle_PH3 s_uart2_tcp_rec;
+extern void (*Lp0_uart2_fun)(unsigned char sbufreg);
+
+extern void L1_uart_tpc_config(void);
+
+#endif //#ifndef _uart2_H
+
diff --git a/source/msp/UART3.c b/source/msp/msp_uart3.c
similarity index 93%
rename from source/msp/UART3.c
rename to source/msp/msp_uart3.c
index 383bf45..3b63afe 100644
--- a/source/msp/UART3.c
+++ b/source/msp/msp_uart3.c
@@ -54,11 +54,11 @@ msp/uartx.c 底层代码 和cpu相关 缓存发送也放在里面
L0_Usend_uc------UserDef
-----------------------------------------------------------------------------------------
********************************************************************************/
-#include "uart3.h"
+#include "msp_uart3.h"
#include "../msp/time.h"
#include
-static volatile Ts_uart_send_buf idata ts_uart_send_shop;
+static volatile Ts_uart_send_buf idata ts_uart3_send_shop;
struct _tp_handler_x s_uart3_rec;
TS_PH4_modbus s_uart3_ack;
@@ -80,18 +80,27 @@ void L0_uart3_init(void)
// T3H = 0xFF; //设定定时初值
// T4T3M |= 0x08; //启动定时器3
//#endif
-
+#if 0
S3CON = 0x10; //8位数据,可变波特率
S3CON &= 0xBF; //串口3选择定时器2为波特率发生器
AUXR |= 0x04; //定时器时钟1T模式
T2L = 0xD0; //设置定时初始值
T2H = 0xFF; //设置定时初始值
AUXR |= 0x10; //定时器2开始计时
+#endif
+//115200
+ S3CON = 0x10; //8位数据,可变波特率
+ S3CON |= 0x40; //串口3选择定时器3为波特率发生器
+ T4T3M |= 0x02; //定时器时钟1T模式
+ T3L = 0xD0; //设置定时初始值
+ T3H = 0xFF; //设置定时初始值
+ T4T3M |= 0x08; //定时器3开始计时
+
}
void L0_uart3_buf_init(void)
{
- ts_uart[uNum3].p = &ts_uart_send_shop;
+ ts_uart[uNum3].p = &ts_uart3_send_shop;
ts_uart[uNum3].p->now = 0;
ts_uart[uNum3].p->ok = D_ready;
ts_uart[uNum3].t = &s_uart3_rec;
diff --git a/source/msp/UART3.h b/source/msp/msp_uart3.h
similarity index 96%
rename from source/msp/UART3.h
rename to source/msp/msp_uart3.h
index eb4bb28..fd535d4 100644
--- a/source/msp/UART3.h
+++ b/source/msp/msp_uart3.h
@@ -55,7 +55,7 @@ msp/uartx.c 底层代码 和cpu相关 缓存发送也放在里面
#include "../bsp/bsp_config.h"
#include "../tpc/modbus.h"
-#include "uart_x.h"
+#include "msp_uart_x.h"
#define uNum3 2
@@ -73,8 +73,8 @@ msp/uartx.c 底层代码 和cpu相关 缓存发送也放在里面
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
-void L0_uart3_buf_init(void);
-void L0_uart3_sendArray(U8 * buf, U16 len);
+extern void L0_uart3_buf_init(void);
+extern void L0_uart3_sendArray(U8 * buf, U16 len);
#define L0_uart3_uc(X) L0_uartN_uc(uNum3,X)
#define L0_uart3_us(X) L0_uartN_us(uNum3,X)
diff --git a/source/msp/msp_uart_x.c b/source/msp/msp_uart_x.c
new file mode 100644
index 0000000..c4cc12e
--- /dev/null
+++ b/source/msp/msp_uart_x.c
@@ -0,0 +1,236 @@
+//////////////////////////////////////////////////////////////////////////
+/// COPYRIGHT NOTICE
+/// Copyright (c) 2015, 传控科技
+/// All rights reserved.
+///
+/// @file main.c
+/// @brief main app
+///
+///(本文件实现的功能的详述)
+///
+/// @version 1.1 CCsens technology
+/// @author CC
+/// @date 20150102
+///
+///
+/// 修订说明:最初版本
+/// Modified by:
+/// Modified date:
+/// Version:
+/// Descriptions:
+// 20160413 CC-ACC-VH02
+// 连接至 J22 RXD0 TXD0
+//P5_DIR &= ~BITN1; //p5.1输出TXD
+//P5_DIR |= BITN0; //p5.0输入RXD
+//P5_SEL0 &= ~(BITN0 +BITN1); //设置P5.0 P5.1为UART0 RXD TXD
+//P5_SEL1 |= BITN0 +BITN1;
+
+/*****************************************************************************
+update by cc @201700110
+针对多串口 和 单一串口 有区别 每个串口是独立的还是分开的有讲究 程序是复杂的还是软件应用简单是
+个需要平衡的事情.
+
+clib/clib.c:
+公用的函数 和硬件无关
+放置串行模式(串口等其他通讯总线类的输出)输出的函数,
+一些覆盖模式输出的(lcd等固屏输出的)的也可使用
+ void Lc_print(void (*L0pf_send_uc)(char ww), char *dat,...)
+-----------------------------------------------------------------------------------------
+uartcom/Uprotocol2app
+ 协议到应用
+ 为了适应不同的通讯协议需要不同的uart口来对应 和应用相关
+
+typedef struct _ts_lcm_pro_; 应用协议包的定义? LCM的协议------------
+ L3_UARTcom0_exp_protocol 解析应用协议
+-----------------------------------------------------------------------------------------
+uartcom/urec2protocol: 接收到的数据放入到指向特定协议的缓存中,和协议的格式有关 一般分为 标头式或者标尾式
+公用的串口通讯定义
+ struct _s_uart_rec_ 的公共协议包(关键的结构体)的声明------struct _s_uart_rec_
+ void L1_uart_2buf(struct _s_uart_rec_ *p)串行数据保存到指向特定协议的缓冲中
+--------------------------------------------------------------------------------------------
+msp/uartx.c 底层代码 和cpu相关 缓存发送也放在里面idata
+ L0_UART0_Init
+ UART0_IRQHandler
+ L0_Usend_uc------UserDef
+-----------------------------------------------------------------------------------------
+********************************************************************************/
+#include "msp_uart_x.h"
+
+TS_uart_reg ts_uart[SERIAL_MAX_NUM] = {0};
+
+void L0_uartN_set(U8 uartx,U8 x)
+{
+ switch(uartx)
+ {
+ case 0:SBUF = (x);break;
+ case 1:S2BUF = (x);break;
+ case 2:S3BUF = (x);break;
+ case 3:S4BUF = (x);break;
+ default:break;
+ }
+}
+
+U8 L0_uartN_get(U8 uartx)
+{
+ U8 x = 0;
+ switch(uartx)
+ {
+ case 0:x = SBUF; break;
+ case 1:x = S2BUF;break;
+ case 2:x = S3BUF;break;
+ case 3:x = S4BUF;break;
+ default:break;
+ }
+ return x;
+}
+
+void L0_waitFree_uartN(U8 uartx)
+{
+ ts_uart[uartx].p->over = 0;
+ while(ts_uart[uartx].p->ok != D_ready)
+ {
+ #if 10 //发送数据特别快时,某些情况下会导致数据发送出错
+ if(ts_uart[uartx].p->over ++ > 6000000)
+ {
+ break;
+ }
+ #endif
+ }
+}
+
+void L0_uartN_sendArray(U8 uartx,void *buf,U16 len)
+{
+ L0_waitFree_uartN(uartx);
+ ts_uart[uartx].p->ok = D_clear;
+ ts_uart[uartx].p->over = 0;
+ ts_uart[uartx].p->max = len;
+ ts_uart[uartx].p->now = 1;
+ if(len <= D_UART_send_buf_max)
+ {
+ //将参数buf拷贝至内部buf
+ for(ts_uart[uartx].p->num = 0;ts_uart[uartx].p->num < len;ts_uart[uartx].p->num ++)
+ {
+ ts_uart[uartx].p->buf[ts_uart[uartx].p->num] = ((U8*)buf)[ts_uart[uartx].p->num];
+ }
+ ts_uart[uartx].p->p = ts_uart[uartx].p->buf;
+ }
+ else
+ {
+ //不使用内部buf,如果再发送完毕之前,参数buf被回收,发送会出错
+ ts_uart[uartx].p->p = (U8 *)buf;
+ }
+ L0_uartN_set(uartx,ts_uart[uartx].p->p[0]);
+}
+
+void L0_uartN_uc(U8 uartx,U8 ww)
+{
+ L0_uartN_sendArray(uartx,&ww,1);
+}
+
+void L0_uartN_us(U8 uartx,vU16 ww)
+{
+ U_U16 uStemp;
+ uStemp.word = ww;
+ ts_uart[uartx].p->buf3[0] = uStemp.BYTE2.h;
+ ts_uart[uartx].p->buf3[1] = uStemp.BYTE2.l;
+ L0_uartN_sendArray(uartx,ts_uart[uartx].p->buf3,2);
+}
+
+void L0_uartN_ul(U8 uartx,vU32 ww)
+{
+ U_U32 uStemp;
+ L0_waitFree_uartN(uartx);
+ uStemp.dWord = ww;
+ ts_uart[uartx].p->buf3[0] = uStemp.BYTE4.byte0;
+ ts_uart[uartx].p->buf3[1] = uStemp.BYTE4.byte1;
+ ts_uart[uartx].p->buf3[2] = uStemp.BYTE4.byte2;
+ ts_uart[uartx].p->buf3[3] = uStemp.BYTE4.byte3;
+ L0_uartN_sendArray(uartx,ts_uart[uartx].p->buf3,4);
+}
+
+void L0_uartN_0d0a(U8 uartx)
+{
+ L0_waitFree_uartN(uartx);
+ ts_uart[uartx].p->buf3[0] = 0x0d;
+ ts_uart[uartx].p->buf3[1] = 0x0a;
+ L0_uartN_sendArray(uartx,ts_uart[uartx].p->buf3,2);
+}
+
+void L0_uartN_uchex(U8 uartx,U8 ww)
+{
+ L0_waitFree_uartN(uartx);
+ ts_uart[uartx].p->buf3[0] = cguHex2Char[D_uc_high(ww)][1];
+ ts_uart[uartx].p->buf3[1] = cguHex2Char[D_uc_low (ww)][1];
+ L0_uartN_sendArray(uartx,ts_uart[uartx].p->buf3,2);
+}
+
+void L0_uartN_ushex(U8 uartx,vU16 ww)
+{
+ U_F16 k;
+ L0_waitFree_uartN(uartx);
+ k.us = ww;
+ ts_uart[uartx].p->buf3[0] = cguHex2Char[D_uc_high(k.BYTE2.H)][1];
+ ts_uart[uartx].p->buf3[1] = cguHex2Char[D_uc_low (k.BYTE2.H)][1];
+ ts_uart[uartx].p->buf3[2] = cguHex2Char[D_uc_high(k.BYTE2.L)][1];
+ ts_uart[uartx].p->buf3[3] = cguHex2Char[D_uc_low (k.BYTE2.L)][1];
+ L0_uartN_sendArray(uartx,ts_uart[uartx].p->buf3,4);
+}
+
+void L0_uartN_ulhex(U8 uartx,U32 ww)
+{
+ U_U32 k;
+ L0_waitFree_uartN(uartx);
+ k.dWord = ww;
+ ts_uart[uartx].p->buf3[0] = cguHex2Char[D_uc_high(k.BYTE4.byte0)][1];
+ ts_uart[uartx].p->buf3[1] = cguHex2Char[D_uc_low (k.BYTE4.byte0)][1];
+ ts_uart[uartx].p->buf3[2] = cguHex2Char[D_uc_high(k.BYTE4.byte1)][1];
+ ts_uart[uartx].p->buf3[3] = cguHex2Char[D_uc_low (k.BYTE4.byte1)][1];
+ ts_uart[uartx].p->buf3[4] = cguHex2Char[D_uc_high(k.BYTE4.byte2)][1];
+ ts_uart[uartx].p->buf3[5] = cguHex2Char[D_uc_low (k.BYTE4.byte2)][1];
+ ts_uart[uartx].p->buf3[6] = cguHex2Char[D_uc_high(k.BYTE4.byte3)][1];
+ ts_uart[uartx].p->buf3[7] = cguHex2Char[D_uc_low (k.BYTE4.byte3)][1];
+ L0_uartN_sendArray(uartx,ts_uart[uartx].p->buf3,8);
+}
+
+void L0_uartN_sendstr(U8 uartx,U8 *str)
+{
+ L0_uartN_sendArray(uartx,str,Lc_strlen(str));
+}
+
+void L0_uartN_uchexArray(U8 uartx,vU8 *buf,U16 n)
+{
+ int i;
+ for(i=0;i= D_UART_send_buf_max)
+ {
+ len = D_UART_send_buf_max - 1;
+
+ }
+ Lc_hex2ascii(ts_uart[uartx].p->bufhex,buf,len);
+ L0_uartN_sendArray(uartx,ts_uart[uartx].p->bufhex,len*3);
+}
+
+#endif
+
diff --git a/source/msp/uart_x.h b/source/msp/msp_uart_x.h
similarity index 96%
rename from source/msp/uart_x.h
rename to source/msp/msp_uart_x.h
index 4c060e3..05d7713 100644
--- a/source/msp/uart_x.h
+++ b/source/msp/msp_uart_x.h
@@ -56,6 +56,7 @@ msp/uartx.c 底层代码 和cpu相关 缓存发送也放在里面
#include "../tpc/tpc_x.h"
#include "../bsp/bsp_config.h"
+
#define D_uartN_free() (0 == ts_uart_send_shop[uartx].max)
#define D_uartN_busy() (0 != ts_uart_send_shop[uartx].max)
#define D_BRT_COUNT(t,clk,uartBRT) (U16)(65536- (clk / (4 * uartBRT * t)))
@@ -70,6 +71,7 @@ typedef struct _ts_uart0_send_buf_
vU32 over; /// 结束等待标志,over累加到某个值时,结束等待
vU8 ok; /// 发送完成标志
vU8 buf[D_UART_send_buf_max + 1];
+ /// U8 bufhex[D_UART_send_buf_max*3];
/// U8 buf2[D_send_buf2_max];
vU8 buf3[D_UART_send_buf2_max];
//// U8 buf4[D_send_buf_max];
@@ -78,6 +80,7 @@ typedef struct _ts_uart0_send_buf_
typedef struct _TS_uart_reg
{
+ ////Ts_uart_send_buf *p;
Ts_uart_send_buf idata *p;
TP_Handler_X *t;
void (*tp_handler)(TP_Handler_X *);
@@ -85,7 +88,7 @@ typedef struct _TS_uart_reg
}TS_uart_reg;
-extern TS_uart_reg idata ts_uart[SERIAL_MAX_NUM];
+extern TS_uart_reg ts_uart[SERIAL_MAX_NUM];///cc:fixme idata不要过多的使用
extern void L0_uartN_init(U8 uartx);
extern void L0_uartN_set(U8 uartx,U8 x);
diff --git a/source/msp/nouse/msp_uart3.c b/source/msp/nouse/msp_uart3.c
new file mode 100644
index 0000000..4a05f9d
--- /dev/null
+++ b/source/msp/nouse/msp_uart3.c
@@ -0,0 +1,184 @@
+//////////////////////////////////////////////////////////////////////////
+/// COPYRIGHT NOTICE
+/// Copyright (c) 2015, 传控科技
+/// All rights reserved.
+///
+/// @file main.c
+/// @brief main app
+///
+///(本文件实现的功能的详述)
+///
+/// @version 1.1 CCsens technology
+/// @author CC
+/// @date 20150102
+///
+///
+/// 修订说明:最初版本
+/// Modified by:
+/// Modified date:
+/// Version:
+/// Descriptions:
+// 20160413 CC-ACC-VH02
+// 连接至 J22 RXD0 TXD0
+//P5_DIR &= ~BITN1; //p5.1输出TXD
+//P5_DIR |= BITN0; //p5.0输入RXD
+//P5_SEL0 &= ~(BITN0 +BITN1); //设置P5.0 P5.1为UART0 RXD TXD
+//P5_SEL1 |= BITN0 +BITN1;
+
+/*****************************************************************************
+update by cc @201700110
+针对多串口 和 单一串口 有区别 每个串口是独立的还是分开的有讲究 程序是复杂的还是软件应用简单是
+个需要平衡的事情.
+
+clib/clib.c:
+公用的函数 和硬件无关
+放置串行模式(串口等其他通讯总线类的输出)输出的函数,
+一些覆盖模式输出的(lcd等固屏输出的)的也可使用
+ void Lc_print(void (*L0pf_send_uc)(char ww), char *dat,...)
+-----------------------------------------------------------------------------------------
+uartcom/Uprotocol2app
+ 协议到应用
+ 为了适应不同的通讯协议需要不同的uart口来对应 和应用相关
+
+typedef struct _ts_lcm_pro_; 应用协议包的定义? LCM的协议------------
+ L3_UARTcom0_exp_protocol 解析应用协议
+-----------------------------------------------------------------------------------------
+uartcom/urec2protocol: 接收到的数据放入到指向特定协议的缓存中,和协议的格式有关 一般分为 标头式或者标尾式
+公用的串口通讯定义
+ struct _s_uart_rec_ 的公共协议包(关键的结构体)的声明------struct _s_uart_rec_
+ void L1_uart_2buf(struct _s_uart_rec_ *p)串行数据保存到指向特定协议的缓冲中
+--------------------------------------------------------------------------------------------
+msp/uartx.c 底层代码 和cpu相关 缓存发送也放在里面
+ L0_UART0_Init
+ UART0_IRQHandler
+ L0_Usend_uc------UserDef
+-----------------------------------------------------------------------------------------
+********************************************************************************/
+#include "../msp/msp_uart3.h"
+#include "../msp/time.h"
+#include
+
+static volatile Ts_uart_send_buf idata ts_uart3_send_shop;
+struct _tp_handler_x s_uart3_rec;
+TS_PH4_modbus s_uart3_ack;
+
+void L0_uart3_init(void)
+{
+//#if(MainFre_11M == D_sys_MainFre) //115200bps@11.0592MHz
+// S3CON = 0x10; //8位数据,可变波特率
+// S3CON |= 0x40; //串口3选择定时器3为波特率发生器
+// T4T3M |= 0x02; //定时器3时钟为Fosc,即1T
+// T3L = 0xE8; //设定定时初值
+// T3H = 0xFF; //设定定时初值
+// T4T3M |= 0x08; //启动定时器3
+
+//#elif (MainFre_22M == D_sys_MainFre) //115200bps@22.1184MHz
+// S3CON = 0x10; //8位数据,可变波特率
+// S3CON |= 0x40; //串口3选择定时器3为波特率发生器
+// T4T3M |= 0x02; //定时器3时钟为Fosc,即1T
+// T3L = 0xD0; //设定定时初值
+// T3H = 0xFF; //设定定时初值
+// T4T3M |= 0x08; //启动定时器3
+//#endif
+#if 0
+ S3CON = 0x10; //8位数据,可变波特率
+ S3CON &= 0xBF; //串口3选择定时器2为波特率发生器
+ AUXR |= 0x04; //定时器时钟1T模式
+ T2L = 0xD0; //设置定时初始值
+ T2H = 0xFF; //设置定时初始值
+ AUXR |= 0x10; //定时器2开始计时
+#endif
+//512000
+ S3CON = 0x10; //8位数据,可变波特率
+ S3CON |= 0x40; //串口3选择定时器3为波特率发生器
+ T4T3M &= 0xFD; //定时器时钟12T模式
+ T3L = 0xFF; //设置定时初始值
+ T3H = 0xFF; //设置定时初始值
+ T4T3M |= 0x08; //定时器3开始计时
+}
+
+void L0_uart3_buf_init(void)
+{
+ ts_uart[uNum3].p = &ts_uart3_send_shop;
+ ts_uart[uNum3].p->now = 0;
+ ts_uart[uNum3].p->ok = D_ready;
+ ts_uart[uNum3].t = &s_uart3_rec;
+ ts_uart[uNum3].t->head = 0;
+ ts_uart[uNum3].t->ok = 0;
+ ts_uart[uNum3].tp_handler = L1_s2b_PH4;
+ ts_uart[uNum3].ack = (U8*)&s_uart3_ack;
+ L0_uart3_init();
+ //D_uart3_ES_INT_OPEN(); //打开串口中断
+ D_uart3_ES_INT(1); //打开串口中断
+
+#if (D_UART3_485_TYPE != TYPE_485_NONE)
+ D_UART3_485_RX() //默认处于接收状态
+#endif
+}
+
+void L0_uart3_sendArray(U8 * buf, U16 len)
+{
+//#if (D_UART3_485_TYPE != TYPE_485_NONE)
+// D_UART3_485_TX() //切换到输出状态
+//#endif
+ L0_uartN_sendArray(uNum3,buf,len);
+}
+
+/*************************************************
+UART 中断
+*************************************************/
+#define D_SERVE_UART3 interrupt 17
+void INTERRUPT_UART3(void) D_SERVE_UART3// using 3
+{
+ NOP(); NOP(); NOP();
+ if(L0_uart3_IntRI()) //如果是U0接收中断
+ {
+ L0_uart3_IntRIClear(); //清除接收中断标志
+ ts_uart[uNum3].t->reg = L0_uartN_get(uNum3);
+ ts_uart[uNum3].tp_handler(ts_uart[uNum3].t);
+ //L0_timer4_start();
+ }
+ if(L0_uart3_IntTI())
+ {
+ if(L0_uart3_IntTI()) //如果是U0发送中断
+ {
+ L0_uart3_IntTIClear(); //清除发送中断标志
+ if(ts_uart[uNum3].p->max != ts_uart[uNum3].p->now)
+ {
+ L0_uartN_set(uNum3,ts_uart[uNum3].p->p[ts_uart[uNum3].p->now]);
+ ts_uart[uNum3].p->now ++;
+ }
+ else
+ {
+ ts_uart[uNum3].p->ok = D_ready;
+ ts_uart[uNum3].p->max = 0;
+ ts_uart[uNum3].p->now = 0;//可以发送下一个数据
+#if (D_UART3_485_TYPE != TYPE_485_NONE)
+ D_UART3_485_RX() //切换到接收状态
+#endif
+ }
+ }
+ }
+ NOP(); NOP(); NOP();
+}
+
+void timer4_isrHanddle(void) D_SERVE_TIMER4
+{
+ struct _tp_handler_x *p = &s_uart3_rec;
+ if((p->head == 1) && (p->num >= D_s_modbus_min))
+ {
+ p->head = 0;
+ crc16(p->crc,p->buf,p->num - 2); //校验CRC
+ if(p->crc[0] == p->buf[p->num-2] && p->crc[1] == p->buf[p->num-1])
+ {
+ if(p->ok == 0)
+ {
+ p->ok = 1;
+ }
+ }
+ //LED0 ^= 1;
+ }
+ L0_timer4_stop();
+}
+
+
diff --git a/source/msp/nouse/msp_uart3.h b/source/msp/nouse/msp_uart3.h
new file mode 100644
index 0000000..fd535d4
--- /dev/null
+++ b/source/msp/nouse/msp_uart3.h
@@ -0,0 +1,93 @@
+//////////////////////////////////////////////////////////////////////////
+/// COPYRIGHT NOTICE
+/// Copyright (c) 2015, 传控科技
+/// All rights reserved.
+///
+/// @file main.c
+/// @brief main app
+///
+///(本文件实现的功能的详述)
+///
+/// @version 1.1 CCsens technology
+/// @author CC
+/// @date 20150102
+///
+///
+/// 修订说明:最初版本
+/// Modified by:
+/// Modified date:
+/// Version:
+/// Descriptions:
+//////////////////////////////////////////////////////////////////////////
+/*****************************************************************************
+update by cc @201700110
+针对多串口 和 单一串口 有区别 每个串口是独立的还是分开的有讲究 程序是复杂的还是软件应用简单是
+个需要平衡的事情.
+
+clib/clib.c:
+公用的函数 和硬件无关
+放置串行模式(串口等其他通讯总线类的输出)输出的函数,
+一些覆盖模式输出的(lcd等固屏输出的)的也可使用
+ void Lc_print(void (*L0pf_send_uc)(char ww), char *dat,...)
+-----------------------------------------------------------------------------------------
+uartcom/Uprotocol2app
+ 协议到应用
+ 为了适应不同的通讯协议需要不同的uart口来对应 和应用相关
+
+typedef struct _ts_lcm_pro_; 应用协议包的定义? LCM的协议------------
+ L3_UARTcom0_exp_protocol 解析应用协议
+-----------------------------------------------------------------------------------------
+uartcom/urec2protocol: 接收到的数据放入到指向特定协议的缓存中,和协议的格式有关 一般分为 标头式或者标尾式
+公用的串口通讯定义
+ struct _s_uart_rec_ 的公共协议包(关键的结构体)的声明------struct _s_uart_rec_
+ void L1_uart_2buf(struct _s_uart_rec_ *p)串行数据保存到指向特定协议的缓冲中
+--------------------------------------------------------------------------------------------
+msp/uartx.c 底层代码 和cpu相关 缓存发送也放在里面
+ L0_uart3_Init
+ uart3_IRQHandler
+ L0_Usend_uc------UserDef
+-----------------------------------------------------------------------------------------
+********************************************************************************/
+
+
+#ifndef _uart3_H
+#define _uart3_H
+
+#include "../bsp/bsp_config.h"
+#include "../tpc/modbus.h"
+#include "msp_uart_x.h"
+
+#define uNum3 2
+
+//#define S4SM0 BITN7
+#define D_uart3_ES_INT(x) (x) ? (BITN_1(IE2,ES3)) : (BITN_0(IE2,ES3))
+//#define D_uart3_ES_INT_CLOSE() BITN_0(IE2,ES3)
+//#define D_uart3_ES_INT_OPEN() BITN_1(IE2,ES3)
+#define L0_uart3_IntRI() (S3CON & S3RI)//BITN_G(SCON,U0RI)
+#define L0_uart3_IntTI() (S3CON & S3TI)//BITN_G(SCON,U0TI)
+#define L0_uart3_IntRIClear(); BITN_0(S3CON,S3RI)
+#define L0_uart3_IntTIClear(); BITN_0(S3CON,S3TI)
+#define L0_uart3_set(x) S3BUF = (x);
+#define L0_uart3_get() (S3BUF)
+
+
+//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+
+extern void L0_uart3_buf_init(void);
+extern void L0_uart3_sendArray(U8 * buf, U16 len);
+
+#define L0_uart3_uc(X) L0_uartN_uc(uNum3,X)
+#define L0_uart3_us(X) L0_uartN_us(uNum3,X)
+#define L0_uart3_ul(X) L0_uartN_ul(uNum3,X)
+#define L0_uart3_0d0a() L0_uartN_0d0a(uNum3)
+#define L0_uart3_uchex(X) L0_uartN_uchex(uNum3,X)
+#define L0_uart3_ushex(X) L0_uartN_ushex(uNum3,X)
+#define L0_uart3_ulhex(X) L0_uartN_ulhex(uNum3,X)
+#define L0_uart3_sendstr(buf) L0_uartN_sendstr(uNum3,buf)
+#define L1_uart3_uchexArray(buf) L1_uartN_uchexArray(uNum3,buf)
+
+extern TP_Handler_X s_uart3_rec;
+extern TS_PH4_modbus s_uart3_ack;
+
+#endif //#ifndef _uart3_H
+
diff --git a/source/msp/UART4.C b/source/msp/nouse/msp_uart4.C
similarity index 100%
rename from source/msp/UART4.C
rename to source/msp/nouse/msp_uart4.C
diff --git a/source/tpc/ccmodbus.c b/source/tpc/ccmodbus.c
index f8ff9be..1f2f7ae 100644
--- a/source/tpc/ccmodbus.c
+++ b/source/tpc/ccmodbus.c
@@ -98,7 +98,7 @@ U8 L3_pack_ccmodbus_90(TS_PH3_ccmodbus *pmodbus ,U8 slaverId)
pmodbus->buf[1] = APP_VERSION_HEX >> 0 & 0xF; //minor version
pmodbus->buf[2] = 0x00; //mq high
pmodbus->buf[3] = 0x04; //mq low
- pmodbus->buf[4] = 0x00; //
+ pmodbus->buf[4] = 0x00; //
for(i=5;ibuf[i] = G.mcu_id[j];
@@ -124,7 +124,7 @@ U8 L3_pack_ccmodbus_92(TS_PH3_ccmodbus *pmodbus ,U8 slaverId)
U8 L3_pack_ccmodbus(TS_PH3_ccmodbus *pccmodbus, CCMD_SLAVER_INFO *slaver_info)
{
- U8 pkglen = 0;
+ U16 pkglen = 0;
pccmodbus->filter1 = D_CMD_Filter1_ff;
pccmodbus->filter2 = D_CMD_Filter2_fe;
switch(slaver_info->oper)
diff --git a/source/tpc/ccmodbus.h b/source/tpc/ccmodbus.h
index 9130a0a..f10ae56 100644
--- a/source/tpc/ccmodbus.h
+++ b/source/tpc/ccmodbus.h
@@ -62,7 +62,7 @@ msp/uartx.c 底层代码 和cpu相关
/// 协议表达的意思为地址为0x52的从机, 功能码16 数据为11 22 33 44,校验码 F5 9F
/// 校验码的范围为
-#define D_s_PH3_ccmodbus_max 128
+#define D_s_PH3_ccmodbus_max 256////cc fixme
#define D_s_ccmodbus_min (D_s_modbus_min + 3)
#define D_CMD_Filter1_ff 0xFF
#define D_CMD_Filter2_fe 0xFE