Browse Source

TCP笔头数据ok

master
liyating 3 years ago
parent
commit
91626c0907
  1. 32
      keilp/cc_as_stc02_ps5ws.uvprojx
  2. BIN
      si4/ps5ws.si4project/soft_ps5ws.sip_sym
  3. BIN
      si4/ps5ws.si4project/soft_ps5ws.sip_xab
  4. BIN
      si4/ps5ws.si4project/soft_ps5ws.sip_xad
  5. BIN
      si4/ps5ws.si4project/soft_ps5ws.sip_xc
  6. BIN
      si4/ps5ws.si4project/soft_ps5ws.sip_xf
  7. BIN
      si4/ps5ws.si4project/soft_ps5ws.sip_xm
  8. BIN
      si4/ps5ws.si4project/soft_ps5ws.sip_xr
  9. BIN
      si4/ps5ws.si4project/soft_ps5ws.sip_xsb
  10. BIN
      si4/ps5ws.si4project/soft_ps5ws.sip_xsd
  11. BIN
      si4/ps5ws.si4project/soft_ps5ws.siproj
  12. 50
      source/app/app_config.c
  13. 29
      source/app/app_config.h
  14. 55
      source/app/app_task_speech.c
  15. 47
      source/app/app_task_speech.h
  16. 45
      source/app/app_task_tcp.c
  17. 6
      source/app/app_task_tcp.h
  18. 39
      source/app/app_task_tcp_control.c
  19. 80
      source/app/main.c
  20. 16
      source/app/main.h
  21. 0
      source/app/nouse/task_adc.c
  22. 0
      source/app/nouse/task_adc.h
  23. 0
      source/app/nouse/task_debug.c
  24. 0
      source/app/nouse/task_debug.h
  25. 0
      source/app/nouse/task_key
  26. 12
      source/app/task_key.c
  27. 2
      source/app/task_key.h
  28. 102
      source/app/task_pen_head.c
  29. 10
      source/app/task_pen_head.h
  30. 2
      source/app/task_register.c
  31. 11
      source/app/task_w600.c
  32. 4
      source/app/task_w600.h
  33. 16
      source/asp/asp readme.txt
  34. 82
      source/asp/asp_SDX1.H
  35. 278
      source/asp/asp_oid.c
  36. 139
      source/asp/asp_oid.h
  37. 22
      source/asp/asp_power.h
  38. 853
      source/asp/asp_sdx1.c
  39. 1041
      source/asp/nouse/asp_SI24R1m.c
  40. 113
      source/asp/nouse/asp_SI24R1m.h
  41. 123
      source/asp/nouse/asp_task_WC.c
  42. 39
      source/asp/nouse/asp_task_WC.h
  43. 2
      source/bsp/bsp_config.c
  44. 154
      source/bsp/bsp_config.h
  45. 12
      source/bsp/bsp_config_const.h
  46. 826
      source/bsp/bsp_oid.c
  47. 183
      source/bsp/bsp_oid.h
  48. 2
      source/bsp/chipid.h
  49. 0
      source/bsp/nouse/868.c
  50. 0
      source/bsp/nouse/868.h
  51. 240
      source/bsp/nouse/bsp_config.h.bak
  52. 161
      source/bsp/nouse/bsp_config_const.h.bak
  53. 0
      source/bsp/nouse/cs1232.c
  54. 2
      source/bsp/nouse/cs1232.h
  55. 2
      source/bsp/rs485.h
  56. 45
      source/clib/clib.c
  57. 7
      source/clib/clib.h
  58. 112
      source/clib/type.h
  59. 355
      source/clib/type.h.bak
  60. 1394
      source/cpu/STC_stc8h3k.H
  61. 301
      source/cpu/c51_macro.H
  62. 0
      source/cpu/nouse/STC_stc8a8k.H
  63. 0
      source/cpu/nouse/stc_macro.H
  64. 0
      source/cpu/nouse/stc_stc15w.H
  65. 0
      source/cpu/nouse/stc_stc8G1k.H
  66. 0
      source/cpu/nouse/stc_stc8f.h
  67. 0
      source/cpu/nouse/stc_stc8hxx.h
  68. 258
      source/cpu/stc_only.H
  69. 56
      source/ctask/task.h
  70. 8
      source/ctask/tick.c
  71. 24
      source/ctask/tick.h
  72. 94
      source/ctask/tick.h.bak
  73. 2
      source/msp/eeprom.h
  74. 6
      source/msp/mcu support/UART0.C
  75. 9
      source/msp/mcu support/UART2.C
  76. 2
      source/msp/mcu support/UART2.h
  77. 0
      source/msp/mcu support/UART4.h
  78. 2
      source/msp/mcu support/uart_x.c
  79. 187
      source/msp/msp_uart0.C
  80. 8
      source/msp/msp_uart0.h
  81. 183
      source/msp/msp_uart2.C
  82. 94
      source/msp/msp_uart2.h
  83. 17
      source/msp/msp_uart3.c
  84. 6
      source/msp/msp_uart3.h
  85. 236
      source/msp/msp_uart_x.c
  86. 5
      source/msp/msp_uart_x.h
  87. 184
      source/msp/nouse/msp_uart3.c
  88. 93
      source/msp/nouse/msp_uart3.h
  89. 0
      source/msp/nouse/msp_uart4.C
  90. 2
      source/tpc/ccmodbus.c
  91. 2
      source/tpc/ccmodbus.h

32
keilp/cc_as_stc02_ps5ws.uvprojx

@ -387,6 +387,11 @@
<FileType>1</FileType>
<FilePath>..\source\bsp\w600.c</FilePath>
</File>
<File>
<FileName>bsp_oid.c</FileName>
<FileType>1</FileType>
<FilePath>..\source\bsp\bsp_oid.c</FilePath>
</File>
</Files>
</Group>
<Group>
@ -403,19 +408,24 @@
<FilePath>..\source\msp\eeprom.c</FilePath>
</File>
<File>
<FileName>uart_x.c</FileName>
<FileName>msp_uart2.C</FileName>
<FileType>1</FileType>
<FilePath>..\source\msp\uart_x.c</FilePath>
<FilePath>..\source\msp\msp_uart2.C</FilePath>
</File>
<File>
<FileName>uart0.c</FileName>
<FileName>msp_uart0.C</FileName>
<FileType>1</FileType>
<FilePath>..\source\msp\uart0.c</FilePath>
<FilePath>..\source\msp\msp_uart0.C</FilePath>
</File>
<File>
<FileName>uart2.c</FileName>
<FileName>msp_uart_x.c</FileName>
<FileType>1</FileType>
<FilePath>..\source\msp\uart2.c</FilePath>
<FilePath>..\source\msp\msp_uart_x.c</FilePath>
</File>
<File>
<FileName>msp_uart3.c</FileName>
<FileType>1</FileType>
<FilePath>..\source\msp\nouse\msp_uart3.c</FilePath>
</File>
</Files>
</Group>
@ -474,6 +484,16 @@
</File>
</Files>
</Group>
<Group>
<GroupName>asp</GroupName>
<Files>
<File>
<FileName>asp_oid.c</FileName>
<FileType>1</FileType>
<FilePath>..\source\asp\asp_oid.c</FilePath>
</File>
</Files>
</Group>
</Groups>
</Target>
</Targets>

BIN
si4/ps5ws.si4project/soft_ps5ws.sip_sym

Binary file not shown.

BIN
si4/ps5ws.si4project/soft_ps5ws.sip_xab

Binary file not shown.

BIN
si4/ps5ws.si4project/soft_ps5ws.sip_xad

Binary file not shown.

BIN
si4/ps5ws.si4project/soft_ps5ws.sip_xc

Binary file not shown.

BIN
si4/ps5ws.si4project/soft_ps5ws.sip_xf

Binary file not shown.

BIN
si4/ps5ws.si4project/soft_ps5ws.sip_xm

Binary file not shown.

BIN
si4/ps5ws.si4project/soft_ps5ws.sip_xr

Binary file not shown.

BIN
si4/ps5ws.si4project/soft_ps5ws.sip_xsb

Binary file not shown.

BIN
si4/ps5ws.si4project/soft_ps5ws.sip_xsd

Binary file not shown.

BIN
si4/ps5ws.si4project/soft_ps5ws.siproj

Binary file not shown.

50
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
@ -27,12 +27,14 @@ void L3_param_init(void)
//ap模式pwd
Lc_strcpy(G.ap_pwd,"ccsens123");
#if 0
wr_buf.wIndex = wr_buf.rIndex = 0;
wr_buf.maxsize = sizeof(wr_buf.buf)/sizeof(PenPoint);
for(i=0;i<wr_buf.maxsize;i++)
{
wr_buf.buf[i].time = wr_buf.buf[i].x_axis = wr_buf.buf[i].y_axis = 0;
}
#endif
}
@ -107,11 +109,9 @@ void L3_reg_reset(void)
R.pen_ele_sta = 0;
R.question_sta = 0;
R.oid3_order = 0;
R.pack_order = 0;
R.frame_order = 0;
R.points.x_axis = R.points.y_axis = 0;
R.points.time = 0;
//R.oid3_order = 0;
//R.pack_order = 0;
//R.frame_order = 0;
for(i=0;i<CCMD_SLAVER_INFO_MAX;i++)
{
@ -122,26 +122,37 @@ void L3_reg_reset(void)
G.ccmd_slaver_info[0].slaver = SLAVER_TCP_SERVER_ID;
G.ccmd_slaver_info[0].oper = MODBUS_OPER_AUTH;
G.ccmd_slaver_info[0].mask = 0;
#if 0
//心跳包
G.ccmd_slaver_info[1].slaver = SLAVER_TCP_SERVER_ID;
G.ccmd_slaver_info[1].oper = MODBUS_OPER_PING;
G.ccmd_slaver_info[1].mask = 0;
#endif
//数据包
G.ccmd_slaver_info[2].slaver = SLAVER_TCP_SERVER_ID;
G.ccmd_slaver_info[2].oper = MODBUS_OPER_WRITE_M;
G.ccmd_slaver_info[2].reg = 0x20;
G.ccmd_slaver_info[2].regnum = 0x03;//基础数量,程序每次应动态添加点数
G.ccmd_slaver_info[2].bytes = 0;
G.ccmd_slaver_info[2].buf = (U8*)&R.pack_order;
G.ccmd_slaver_info[2].mask = 0;
G.ccmd_slaver_info[2].extra_num = 0;
G.ccmd_slaver_info[1].slaver = SLAVER_TCP_SERVER_ID;
G.ccmd_slaver_info[1].oper = MODBUS_OPER_WRITE_M;
G.ccmd_slaver_info[1].reg = 0x20;
G.ccmd_slaver_info[1].regnum = 0x00;//基础数量,程序每次应动态添加点数
G.ccmd_slaver_info[1].bytes = 0;
G.ccmd_slaver_info[1].buf = 0;
G.ccmd_slaver_info[1].mask = 0;
G.ccmd_slaver_info[1].extra_num = 0;
//普通码
G.ccmd_slaver_info[3].slaver = SLAVER_TCP_SERVER_ID;
G.ccmd_slaver_info[3].oper = MODBUS_OPER_WRITE_M;
G.ccmd_slaver_info[3].reg = 0x05;
G.ccmd_slaver_info[3].regnum = 0x00;//基础数量,程序每次应动态添加点数
G.ccmd_slaver_info[3].bytes = 0;
G.ccmd_slaver_info[3].buf = (U8*)&R.oid3_order;
G.ccmd_slaver_info[3].mask = 0;
G.ccmd_slaver_info[3].extra_num = 2;
G.modbusstmp = 0;
G.authed = 0;
G.flowStartVal = 1;
G.pen_up = 0;
G.datapkg = 0;
G.pen_t = 1;
}
@ -154,6 +165,7 @@ void L3_reg_init(void)
L3_reg_reset();
L3_iap_2_reg();
}
#if 0
void Lc_buf_full(WR_Buf *p)
{
if((p->rIndex+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

29
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);

55
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;i<CC_SPEECH_INFO;i++)
{
ts_speech.cc_speech_info[i].mask = 0;
}
ts_speech.cc_speech_info[0].oper = SPEECH_NAME_PLAY;
ts_speech.cc_speech_info[0].mask = 0;
}
void L3_task_speech_handle(TS_tcp *s)
{
}
U8 L3_pack_speech_A3(TS_SPEECH *pspeech , U8 *tcp_buf ,U8 *buf)//tcp传来的buf
{
long name;
U8 bufsize = 9;
pspeech->start = 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;
}

47
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

45
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;
@ -29,7 +27,6 @@ void L3_task_tcp_handle(TS_tcp *s)
{
TTSS_Task_init()
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,21 +41,25 @@ 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);
}
TTSS_Task_step(D_task_tcp_wait_modbus_ack) //等待ack
//L0_uart0_uc(s_uart2_tcp_rec.ok + '0');
if((s->slaverIndex) == 0)
{
if(s_uart2_tcp_rec.ok)
{
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);
//L3_gm35_rcv_data((U8*)s->pAckPkg,s->pAckPkg->num);
if(s->pAckPkg->slaver == G.ccmd_slaver_info[s->slaverIndex].slaver)
{
s->ackFlag = 1;
@ -76,28 +77,13 @@ void L3_task_tcp_handle(TS_tcp *s)
G.authed = 0;
break;
}
#if 0
if(G.ccmd_slaver_info[s->slaverIndex].oper == 0x90)
{
L0_uart0_sendstr("111");
G.authed = 1;
G.au_succ = 1;
}
else
{
L0_uart0_sendstr("222");
G.authed = 0;
G.au_fail = 1;
}
#endif
break;
case 2:
case 1:
break;
default:
break;
}
}
L2_task_go(D_task_tcp_switch_next_slaver);
}
else if(s_nos_tick.t_1s - s->sendStamp >= 5) //重发
@ -111,7 +97,12 @@ void L3_task_tcp_handle(TS_tcp *s)
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) //切换下一个

6
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;

39
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 动态修改数量
@ -32,46 +32,23 @@ void L3_task_tcp_control_handle(TS_tcp_control *s)//判定是否抬笔/缓冲区
L2_task_go(D_task_tcp_control_02);
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)
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();
}

80
source/app/main.c

@ -85,6 +85,13 @@ 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_key_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_heatbeart = 0;
//LED0 ^= 1;
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)
{
//// 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

16
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 <stdio.h>
//////////////////////////////////////////////////////////////////

0
source/app/task_adc.c → source/app/nouse/task_adc.c

0
source/app/task_adc.h → source/app/nouse/task_adc.h

0
source/app/task_debug.c → source/app/nouse/task_debug.c

0
source/app/task_debug.h → source/app/nouse/task_debug.h

0
source/app/task_key → source/app/nouse/task_key

12
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;

2
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_
{

102
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)
{
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++)
if(wr_buf.Index >= POINT_LEN-1)
{
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);
L2_task_go_Tdelay(TTSS_TASK_HEAD_DATA_READ,D_Tdelay_50ms);
//G.ccmd_slaver_info[2].extra_num = POINT_LEN *5;
}
L2_task_go_Tdelay(TTSS_TASK_HEAD_DATA_READ,D_Tdelay_300ms);
TTSS_Task_end();
}
#endif

10
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;

2
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"
//=============================================

11
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);

4
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" //查询连接状态

16
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:协议相关

82
source/asp/asp_SDX1.H

@ -0,0 +1,82 @@
#ifndef __SDX1_H__
#define __SDX1_H__
/*★★★★★★★★★★★★★★★★★★★★★★★★
znFAT--FAT32文件系统设计与实现
[]
3
FAT32文件系统SD卡等嵌入式存储技术的
znFAT
ZN-X开发板51AVRSTM32(M0/M3/M4)
CPU
www.znmcu.cn
*/
/***************************************************************************************
ZN-X开发板SD卡1 STC51部分:STC15L2K60S2
SD卡的扇区读写
SD卡MMC/SD/SDHC
znFAT--FAT32文件系统设计与实验 11SD卡物理驱动
SD卡专辑
****************************************************************************************/
#include "../bsp/bsp_config.h"///#include "sd_type.h"
#include "znfat.h"///#include "sd_type.h"
////#include <STC15Fxxxx.H>
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

278
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;j<s->extra;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;j<k;j++)
{
L0_uart2_sendArray((U8 *)&oid_buf[j],(U16)10);
L0_uart2_uc(' ');
}
#endif
L2_task_go(D_TASK_OID_t1);
}
else
{
L2_task_go(D_TASK_OID_t1);
}
TTSS_Task_end();
}
void L1_oid_init(void)
{
L0_Oid_Init();
LD_Oid_SCK_LOW();
L1_task_init(&ts_task_oid.task);
ts_task_oid.can_send = 0;
ts_task_oid.p_ok = 0;
ts_task_oid.point = 0;
L3_task_s_go(ts_task_oid,D_task_init);
}
void L1_oid_main(void)
{
}
#ifdef doc2342342
1
//// fa 00 |00 04 00 03 46 A9
//// buf 0 1 |2 3 4 5 6 7
//// fa 00 |35 20 10 55 05 06
| | |cmd
|-filter | dat
oid cmd -|
////读取2010 fa 0d |36 20 10 55 05 06
#endif
void L1_oid_debug(u8 *para)
{
uint32_t r;
TS_oid_cmd *t =(TS_oid_cmd *)para;
// ET0 = 0;
L0_uart0_sendArray("\r\noid debug:",13);
//// fa 00 |00 04 00 03 46 A9
//// buf 0 1 |2 3 4 5 6 7
//// fa 00 |11 20 10 55 05 06
//// UDCMD_wakeup
//// fa 00 |22 20 42 53 64 75
//// cmd=20
switch(t->cmd)
{
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;
}

139
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 ///
///<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<for debug
extern void L1_oid_init(void);
extern void L1_oid_main(void);
extern void L1_oid_debug(u8 *para);
#endif

22
source/asp/asp_power.h

@ -0,0 +1,22 @@
#ifndef asp_SI24R1_
#define asp_SI24R1_
LVD 1.4uA的耗电
5 MCULVD ADC检测外部电池电压
1mS后再进入时钟停振/1uA2.8uA0.4uA+1.4uA+1uA
mcu上电初始化后,,
,5
gsensor ,io连接mcu有唤醒功能的管脚,
,,
#endif

853
source/asp/asp_sdx1.c

@ -0,0 +1,853 @@
#include "asp_sdx1.h"
///#include "myfun.h"
////#include "sd_type.h"
#include "bsp_sd1_iospi.h"
/*★★★★★★★★★★★★★★★★★★★★★★★★
znFAT--FAT32文件系统设计与实现
[]
3
FAT32文件系统SD卡等嵌入式存储技术的
znFAT
ZN-X开发板51AVRSTM32(M0/M3/M4)
CPU
www.znmcu.cn
*/
/***************************************************************************************
ZN-X开发板SD卡1 STC51部分:STC15L2K60S2
SD卡的扇区读写
SD卡MMC/SD/SDHC
znFAT--FAT32文件系统设计与实验 11SD卡物理驱动
SD卡专辑
****************************************************************************************/
//变量定义
//--------------------------------------------------------------
extern UINT8 Low_or_High1; //在IOSPI中定义
UINT8 SD1_Addr_Mode=0; //SD1的寻址方式,1为块寻址,0为字节寻址
UINT8 SD1_Ver=SD_VER_ERR; //SD卡1的版本
//---------------------------------------------------------------
#define SD1_SPI_SPEED_HIGH() Low_or_High1=0
#define SD1_SPI_SPEED_LOW() Low_or_High1=1
#define SD1_SPI_WByte(x) SD1_IOSPI_RWByte(x)
#define SD1_SPI_RByte() SD1_IOSPI_RWByte(0XFF)
/********************************************************************
- ZN-X开发板SD卡1SPI接口初始化
-
- 0
- SPI接口初始化后SD卡在初始化的过程中要求
SPI速度要比较低400KHZ240KHZ
SD卡初始化不成功SPI速度SD
********************************************************************/
UINT8 SD1_SPI_Init(void)
{
SD1_IOSPI_Init(); //SPI接口初始化
return 0;
}
/******************************************************************
- SD卡写命令
- SD卡的命令是6个字节pcmd是指向命令字节序列的指针
- 0xff
******************************************************************/
UINT8 SD1_Write_Cmd(UINT8 *pcmd)
{
UINT8 r=0,time=0;
SET_SD1_CS_PIN(1);
SD1_SPI_WByte(0xFF); //发送8个时钟,提高兼容性,如果没有这里,有些SD卡可能不支持
SET_SD1_CS_PIN(0);
while(0XFF!=SD1_SPI_RByte())
{/// add by cc for没有SD卡应退出
; //等待SD卡准备好,再向其发送命令
time++;
L0_uart0_uc(0x30+time);
if(time>=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_TIME)); //如果重试次数超过TRY_TIME则返回错误
return r;
}
/******************************************************************
block和读多块block
SD卡读单块和多块的命令分别为CMD17和CMD18
SD卡的读写要求地址对齐
512Byte
0011<<9(512
22<<9(1024
- SD卡初始化SD卡MMCSD或SDHC
-
- 0x00
******************************************************************/
UINT8 SD1_Init(void)
{
UINT8 time=0,r=0,i=0;
UINT8 rbuf[4]={0};
UINT8 pCMD0[6] ={0x40,0x00,0x00,0x00,0x00,0x95}; //CMD0,将SD卡从默认上电后的SD模式切换到SPI模式,使SD卡进入IDLE状态
UINT8 pCMD1[6] ={0x41,0x00,0x00,0x00,0x00,0x01}; //CMD1,MMC卡使用CMD1命令进行初始化
UINT8 pCMD8[6] ={0x48,0x00,0x00,0x01,0xAA,0x87}; //CMD8,用于鉴别SD卡的版本,并可从应答得知SD卡的工作电压
UINT8 pCMD16[6]={0x50,0x00,0x00,0x02,0x00,0x01}; //CMD16,设置扇区大小为512字节,此命令用于在初始化完成之后进行试探性的操作,
//如果操作成功,说明初始化确实成功
UINT8 pCMD55[6]={0x77,0x00,0x00,0x00,0x00,0x01}; //CMD55,用于告知SD卡后面是ACMD,即应用层命令 CMD55+ACMD41配合使用
//MMC卡使用CMD1来进行初始化,而SD卡则使用CMD55+ACMD41来进行初始化
UINT8 pACMD41H[6]={0x69,0x40,0x00,0x00,0x00,0x01}; //ACMD41,此命令用于检测SD卡是否初始化完成,MMC卡,不适用此命令,针对2.0的SD卡
UINT8 pACMD41S[6]={0x69,0x00,0x00,0x00,0x00,0x01}; //ACMD41,此命令用于检测SD卡是否初始化完成,MMC卡,不适用此命令,针对1.0的SD卡
UINT8 pCMD58[6]={0x7A,0x00,0x00,0x00,0x00,0x01}; //CMD58,用于鉴别SD2.0到底是SDHC,还是普通的SD卡,二者对扇区地址的寻址方式不同
SD1_SPI_Init(); //SPI接口相关初始化
SD1_SPI_SPEED_LOW(); //首先将SPI切为低速
SET_SD1_CS_PIN(1);
for(i=0;i<0x0f;i++) //首先要发送最少74个时钟信号,这是必须的!激活SD卡
{
SD1_SPI_WByte(0xff); //120个时钟
}
L0_uart0_uc('5'); L0_uart0_uc(0x09); L0_uart0_uc('5'); L0_uart0_uc(0x09);
time=0;
do
{
r=SD1_Write_Cmd(pCMD0);//写入CMD0
time++;
if(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卡若干个扇区进行擦除
00XFF使
- 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次13600s 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<nsec;j++)
{
SD1_SPI_WByte(0xFC);//写入开始字节 0xfc,后面就是要写入的512个字节的数据
for(i=0;i<4;i++) //将缓冲区中要写入的512个字节写入SD卡
{
for(m=0;m<32*4;m++) //将缓冲区中要写入的512个字节写入SD卡
{
SD1_SPI_WByte(*(buffer+m));
}
/***
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) //如果返回值是 XXX00DELAY_TIME1 说明数据已经被SD卡接受了
{
return(WRITE_NBLOCK_ERROR); //写块数据失败
}
while(0xFF!=SD1_SPI_RByte());//等到SD卡不忙(数据被接受以后,SD卡要将这些数据写入到自身的FLASH中,需要一个时间)
//忙时,读回来的值为0x00,不忙时,为0xff
}
SD1_SPI_WByte(0xFD);
while(0xFF!=SD1_SPI_RByte());
SET_SD1_CS_PIN(1);//关闭片选
SD1_SPI_WByte(0xFF);//按照SD卡的操作时序在这里补8个时钟
return(0); //返回0,说明写扇区操作成功
}
/****************************************************************************
- addr扇区开始的nsec个扇区的数据
- nsec:
addr:
buffer:
- 0x00
- SD卡初始化成功后SPI速度提上来
****************************************************************************/
UINT8 SD_Read_nSector(UINT32 nsec,UINT32 addr,UINT8 *buffer)
{
UINT8 r,time;
UINT32 i=0,j=0;
UINT8 pCMD18[6]={0x52,0x00,0x00,0x00,0x00,0x01}; //CMD18的字节序列
UINT8 pCMD12[6]={0x1C,0x00,0x00,0x00,0x00,0x01}; //CMD12,强制停止命令
if(!SD1_Addr_Mode) addr<<=9; //sector = sector * 512 将块地址(扇区地址)转为字节地址
pCMD18[1]=addr>>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<nsec;j++)
{
while(SD1_SPI_RByte()!= 0xFE); //一直读,当读到0xfe时,说明后面的是512字节的数据了
for(i=0;i<4;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校验码,不用关心它们
}
SD1_Write_Cmd(pCMD12); //写入CMD12命令,停止数据读取
SET_SD1_CS_PIN(1);
SD1_SPI_WByte(0xFF); //按照SD卡的操作时序在这里补8个时钟
return 0;
}
/****************************************************************************
- SD卡的总扇区数SD卡的CSD寄器组计算得到总扇区数
-
- SD卡的总扇区数
-
****************************************************************************/
UINT32 SD1_GetTotalSec(void)
{
UINT8 pCSD[16];
UINT32 Capacity;
UINT8 n,i;
UINT16 csize;
UINT8 pCMD9[6]={0x49,0x00,0x00,0x00,0x00,0x01}; //CMD9
if(SD1_Write_Cmd(pCMD9)!=0) //写入CMD9命令
{
return GET_CSD_ERROR; //获取CSD时产生错误
}
while(SD1_SPI_RByte()!= 0xFE); //一直读,当读到0xfe时,说明后面的是16字节的CSD数据
for(i=0;i<16;i++) pCSD[i]=SD1_SPI_RByte(); //读取CSD数据
SD1_SPI_RByte();
SD1_SPI_RByte(); //读取两个字节的CRC校验码,不用关心它们
SET_SD1_CS_PIN(1);
SD1_SPI_WByte(0xFF); //按照SD卡的操作时序在这里补8个时钟
//如果为SDHC卡,即大容量卡,按照下面方式计算
if((pCSD[0]&0xC0)==0x40) //SD2.0的卡
{
csize=pCSD[9]+(((UINT16)(pCSD[8]))<<8)+1;
Capacity=((UINT32)csize)<<10;//得到扇区数
}
else //SD1.0的卡
{
n=(pCSD[5]&0x0F)+((pCSD[10]&0x80)>>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

1041
source/asp/nouse/asp_SI24R1m.c

File diff suppressed because it is too large

113
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

123
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
5handdle调用入口的有效性
6init的调用有效性handle执行前被调用
7init的打印是否正确
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);
}

39
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

2
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"
////////////////////////////////////////////////////////////////////////////

154
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 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<YPE_UASER_BOARD SELECT End
@ -59,10 +59,10 @@
//STEP 2 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>TYPE_UASER_BOARD CONFIG
#if(TYPE_UASER_BOARD == TYPE_BOARD_TOUCH_PEN_0B)
#if(TYPE_UASER_BOARD == TYPE_BOARD_TOUCH_PEN_0C)
#include <intrins.h>
#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 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<TYPE_UASER_BOARD CONFIG End
//STEP 3 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<IRQ Config End
/**************************************模拟i2c_cw63xx********************************************/
#define L0_IIC_SIM_INIT() BITN_0(P3M1,5);BITN_0(P3M0,5);BITN_0(P5M1,1);BITN_0(P5M0,1);//io
#define L0_IIC_SIM_close() BITN_1(P3M1,5);BITN_0(P3M0,5);BITN_1(P5M1,1);BITN_0(P5M0,1);//
#if 10
#define L0_SDA_ON() D_P51_ON()
#define L0_SDA_OFF() D_P51_OFF()
#define L0_SDA_AT() D_P51_AT()
#define L0_SCL_ON() D_P35_ON()
#define L0_SCL_OFF() D_P35_OFF()
#define L0_SCL_AT() D_P35_AT()
#define L0_SDA_OUT() D_P51_AT() //////FIXME
#define L0_SDA_IN() D_P51_ON() //////FIXME
#else
#define L0_SDA_ON() //D_P34_ON()
#define L0_SDA_OFF() //D_P34_OFF()
#define L0_SDA_AT() //D_P34_AT()
#define L0_SCL_ON() //D_P35_ON()
#define L0_SCL_OFF() //D_P35_OFF()
//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
//STEP 3 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<IRQ Config End
/**************************************模拟i2c_msa300********************************************/
#define L0_SDA2_INIT() D_stdIO_P5(BITN1)///D_HighR_P5(BITN1)
#define L0_SDA2_CLOSE() D_HighR_P5(BITN1)
#define L0_SDA2_ON() D_P51_ON()
#define L0_SDA2_OFF() D_P51_OFF()
#define L0_SDA2_AT() D_P51_AT()
#define L0_SDA2_OUT() D_stdIO_P5(BITN1) //////FIXME
#define L0_SDA2_IN() D_HighR_P5(BITN1) //////FIXME
#define L0_SCL2_INIT() D_stdIO_P3(BITN5)
#define L0_SCL2_CLOSE() D_HighR_P3(BITN5)
#define L0_SCL2_ON() D_P35_ON()
#define L0_SCL2_OFF() D_P35_OFF()
#define L0_SCL2_AT() D_P35_AT()
#define L0_IIC2_SIM_INIT(); L0_SDA2_INIT();L0_SCL2_INIT();///
#define L0_IIC2_SIM_close(); L0_SDA2_CLOSE();L0_SCL2_CLOSE();////BITN_1(P2M1,5);BITN_0(P2M0,5);BITN_1(P2M1,4);BITN_0(P2M0,4);//
@ -204,9 +270,30 @@
/*************************************************************
1
12
AUXR &= 0xFB; //定时器2时钟为Fosc/12,即12T,
2 timer0 task使用
L1_tick_tick
3
***************************default*************************************/
#define D_IO_LED1_OFF() D_P27_ON()
#define D_IO_LED1_ON() D_P27_OFF()
#define D_IO_LED1_REV() D_P27_REV()
#define D_IO_LED1_H() D_P27_ON()
#define D_IO_LED1_L() D_P27_OFF()
#define D_IO_LED2_H() D_P26_ON()
#define D_IO_LED2_L() D_P26_OFF()
#define D_IO_LEDkey2_OFF() D_P55_OFF()
//STEP 5 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<Uart CONFIG
#define SERIAL_MAX_NUM 2
////fixme:和cpu的程序容量息息相关
@ -230,6 +317,9 @@
//STEP 6 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<Transmission Protocol Config End
#elif(TYPE_UASER_BOARD == TYPE_BOARD_SMMM_MB_VH032_0E)
xxx
#endif
extern void L0_board_config(void);

12
source/bsp/bsp_config_const.h

@ -66,8 +66,20 @@
#define TYPE_BOARD_433_0A 0xa9 //433
#define TYPE_BOARD_WEIGH_0B 0xaa //称重
#define TYPE_BOARD_TOUCH_PEN_0B 0xab //点读笔
#define TYPE_BOARD_TOUCH_PEN_0C 0xabc //点读笔2 20210103 cc 最新版本
//<<<<<<<<<<<<<<<<<<<<<<<<<<<.BORAD TYPE end
#define TYPE_BOARD_paper6133_m0a6 0xa6 //纸张传感器
#define TYPE_BOARD_paper_main_m10 0x10 //纸张传感器2 CC_SE_paper_main_m10_smt01.sch
#define ccSensor_CG_V02_m08_debug 0x0208 //CG传感器2
#define TYPE_BOARD_cc_Light_Speed0B 0x11b //LR光电感器2
#define TYPE_BOARD_cc_G0A03 0x123 //倾角感器2
#define ccSensor_WS_ps5ws 0x0258 ///称重传感
#define ccSensor_WS_ps6wifi 0x0268 ///带2.4g的动作采集类 20200102 芯片价格变化 stc建议使用tssop20 LQFP32 取代 SOP28, TSSOP20 取代 SOP20 是趋势,有 LQFP48
#define TYPE_BOARD_SD_SAVE 0xd //SD 读取新式的加速度芯片
#define TYPE_BOARD_point_read 0xddd //点读笔的测试程序
//>>>>>>>>>>>>>>>>>>>>>>MCU TYPE
#define TYPE_MCU_VENDOR_MSK 0xF0
#define TYPE_MCU_VENDOR_STC 0x10

826
source/bsp/bsp_oid.c

@ -0,0 +1,826 @@
#include "bsp_oid.h"
#include "intrins.h"
#include "msp_UART0.h"
#include <stdio.h>
#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仅读OID3S0X20仅读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 <AE_HIGH.
Dot filter0x40,0x50,0x60"
5
6 REG(0xD63) = 0x80
6 "i = REG(0xD63)
i &= 0xFFFE
REG(0xD63) = i" 打开解码,方法是把寄存器0xD63中的数据的bit0清零,其它bit不可动。
*******************************************************************************************************/
L0_uart0_sendstr("\r\nL1_OID_WakeUp3 ");
L1_OID_WakeUp();
L0_uart0_sendstr("666666");
/***
L1_oid_TransCmd(0x4D);//// 1 single command 0x4D 关闭解码
Write_Register(0x0D40,0x00); //// 2 REG(0xD40) = 0x00 设置仅读OID码,0X00仅读OID3/OID2,0X10仅读OID3S,0X20仅读OID4
L1_oid_TransCmd(0x36);///3 single command 0x36 关闭手写码侦测
Write_Register(0x0DAD,4250); //设置 AE Target 4 "REG(0x0DAD) = 4250 //设置AE Target
Write_Register(0x0DB1,4000); //设置 AE LOW
Write_Register(0x0DAF,4000); //设置 AE LOW
Write_Register(0x0DB0,4500); //设置 AE High
Write_Register(0x0DAE,4500); //设置 AE High 0x1194
Write_Register(0x1641,0xA0); //设置 dot filter
Write_Register(0x0D6A,0x3F); //此项不要改动
Write_Register(0x0D2C,0x3F); //此项不要改动" "初始化,可不下此部分命令,若笔头配合底码识别不佳,可以下此部分命令,设置不同参数尝试。
******/
Write_Register(0x0D63,0x80); //cc 好像数据分辨率有区别 此项不要改动 6 REG(0xD63) = 0x80 打开解码。此命令错误改为如下命令。
///L1_oid_CheckVersionAndInit();///cc 仍然有读取错误的时候
// 6 "i = REG(0xD63)
// i &= 0xFFFE
// REG(0xD63) = i" 打开解码,方法是把寄存器0xD63中的数据的bit0清零,其它bit不可动。
L1_oid_TransCmd(USERCMD_20FPS);//cc 必须添加
L1_oid_TransCmd(USERCMD_EN_ANGLE);//cc 必须添加
L1_oid_TransCmd(USERCMD_EN_POSITION);//cc 必须添加
printf("\r\n L0_Oid_Init finish\r\n");
///while(9)
{
L1_Oid_readoid();
}
}
void L1_Oid_readoid(void)
{
if(!OID_DET)
{
ts_oid.pre_x = ts_oid.X100;
ts_oid.pre_y = ts_oid.Y100;
L0_oid_Recv64();
L2_oid_ParseF1();
//L2_oid_status();
L1_print_rcv("\r\n ");
}
else if((s_nos_tick.t_1s - ts_oid.last_time >= 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

183
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
6360 0110b
5954 Reserved
5345 Angle
44 Reserved
4336 1111 0010b (Y decimal)
3528 0111 0100b (X decimal)
2714 00 0000 0000 0100b (Y integer)
130 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__

2
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);

0
source/bsp/868.c → source/bsp/nouse/868.c

0
source/bsp/868.h → source/bsp/nouse/868.h

240
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 <INTRINS.H>
#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 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<YPE_UASER_BOARD SELECT End
//STEP 2 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>TYPE_UASER_BOARD CONFIG
#if(TYPE_UASER_BOARD == TYPE_BOARD_TOUCH_PEN_0B)
#include <intrins.h>
#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 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<TYPE_UASER_BOARD CONFIG End
//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
//STEP 3 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<IRQ Config End
//STEP 4 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 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 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<Cdelay CONFIG End
//STEP 5 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<Uart CONFIG
#define SERIAL_MAX_NUM 2
////fixme:和cpu的程序容量息息相关
#define D_UART_send_buf_max 16 /// 9600bps = 10000bps = 1000 Bps = 1Byte/ms
/// 19200bps = 20000bps = 2000Bps = 2Byte/ms = 1Byte/0.5ms
/// 128Bytes = 128*0.5ms = 64ms
#define D_UART_send_buf2_max 8 //此处改动会影响L0_uartN_ulhex函数
//STEP 5 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<Uart CONFIG End
//STEP 6 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<Transmission Protocol Config
#define D_TPC_CCMODBUS_Filter0 0xFF
#define D_TPC_CCMODBUS_Filter1 0xFE
#define D_TPC_DEBUG_FX_fi 0xF0
#define D_TPC_DEBUG_FX_MASK 0x0F
#define D_TPC_HANDLER_X_LEN 128
//STEP 6 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<Transmission Protocol Config End
extern void L0_board_config(void);
#endif//_BSP_CONFIG_H
/*********************************end file*********************************************/

161
source/bsp/nouse/bsp_config_const.h.bak

@ -0,0 +1,161 @@
////////////////////////////////////////////////////////////////////////////
///@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_CONST_H
#define _BSP_CONFIG_CONST_H
#include <INTRINS.H>
#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
//<<<<<<<<<<<<<<<<<<<<<<MCU TYPE end
//>>>>>>>>>>>>>>>>>>>>>>IDE TYPE
#define TYPE_IDE_KEIL 1
#define TYPE_IDE_MDK 2
#define TYPE_IDE_IAR 3
//<<<<<<<<<<<<<<<<<<<<<<IDE TYPE end
//>>>>>>>>>>>>>>>>>>>>>>SysTimer TYPE
#define TYPE_JIFFIES_5MS 5
#define TYPE_JIFFIES_10MS 10
#define TYPE_JIFFIES_25MS 25
//<<<<<<<<<<<<<<<<<<<<<<<<<<<SysTimer TYPE end
//>>>>>>>>>>>>>>>>>>>>>>.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
//<<<<<<<<<<<<<<<<<<<<<<BUADRATE & StopBit end
//>>>>>>>>>>>>>>>>>>>>>>MainFre
#define MainFre_5M 5529600L
#define MainFre_11M 11059200L
#define MainFre_22M 22118400L
#define MainFre_24M 24000000L
#define MainFre_27M 27000000L
//<<<<<<<<<<<<<<<<<<<<<<MainFre end
//>>>>>>>>>>>>>>>>>>>>>>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
//<<<<<<<<<<<<<<<<<<<<<<G-SENSOR TYPE end
#endif//_BSP_CONFIG_CONST_H
/*********************************end file*********************************************/

0
source/bsp/cs1232.c → source/bsp/nouse/cs1232.c

2
source/bsp/cs1232.h → source/bsp/nouse/cs1232.h

@ -20,7 +20,7 @@
#define _BSP_cs1232_H
#include "../bsp/bsp_config.h"
#include "../msp/uart0.h"
#include "../msp/msp_uart0.h"
#include "../ctask/task.h"

2
source/bsp/rs485.h

@ -2,7 +2,7 @@
#define BSP_485_H
#include "../bsp/bsp_config.h"
#include "../msp/uart0.h"
#include "../msp/msp_uart0.h"
//485_RE P33
//485_DE P32

45
source/clib/clib.c

@ -12,7 +12,7 @@
#include "type.h"
#include "clib.h"
#include "../msp/uart0.h"
#include "../msp/msp_uart0.h"
#include "../msp/time.h"
@ -249,12 +249,44 @@ U32 Lc_vU32_avg(U32 *d, U8 n)
}
return sum / n;
}
//十六进制转换为十进制
long hexToDec(const char *source)
{
long sum = 0;
long t = 1;
int i, len;
len = Lc_strlen(source);
for(i=len-1; i>=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

7
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 */
/*****************************************************************************

112
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 uint8_t;
typedef unsigned long uint32_t;////51
///typedef unsigned long long uint64_t;////51
//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 volatile uint64_t vU64;
typedef signed long INT32S; // 有符号32位整型变量
//typedef float FP32; // 单精度浮点数(32位长度)
//typedef double FP64; // 双精度浮点数(64位长度)
typedef unsigned short uint16_t; /////
typedef unsigned int FLAG_P; // 标准类变量
//typedef unsigned char INTU; // 标准类变量8BIT MCU
typedef unsigned int INTU; // 标准类变量32BIT MCU
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 <ctype.h>
#include <stdlib.h>
@ -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
///<<<<<<<<<<<<<<<<<<<<<<cc: sd znfat
/*************
@ -204,6 +238,16 @@ typedef union
vU8 byte3;
}BYTE4;
}U_U32;
typedef union
{
vU32 d32[2];
vU16 d16[4];
vU8 d[8];
}U_U64;
typedef union
{
vU16 us;
@ -302,6 +346,8 @@ if((v) < ((min) + (step))) \
#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)

355
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 <stdint.h>
#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 <ctype.h>
#include <stdlib.h>
#include <setjmp.h>
//#include <rt_misc.h>
#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
///<<<<<<<<<<<<<<<<<<<<<<cc: sd znfat
/*************
******************/
//>>>>>
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__ */

1394
source/cpu/STC_stc8h3k.H

File diff suppressed because it is too large

301
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<intrins.h>
#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_

0
source/cpu/STC_stc8a8k.H → source/cpu/nouse/STC_stc8a8k.H

0
source/cpu/stc_macro.H → source/cpu/nouse/stc_macro.H

0
source/cpu/stc_stc15w.H → source/cpu/nouse/stc_stc15w.H

0
source/cpu/stc_stc8G1k.H → source/cpu/nouse/stc_stc8G1k.H

0
source/cpu/stc_stc8f.h → source/cpu/nouse/stc_stc8f.h

0
source/cpu/stc_stc8hxx.h → source/cpu/nouse/stc_stc8hxx.h

258
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<intrins.h>
#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
EUSBUSB中断允许位
0 USB中断1 USB中断
ET4/T4的溢出中断允许位
0 T4中断1T4中断
ET3/ T3的溢出中断允许位
0 T3中断1T3中断
ES44
041 4ES33
0313
ET2/ T2的溢出中断允许位
0T2中断1T3中断ESPISPI中断允许位
0 SPI中断1 SPI中断
ES2 2
0212
#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_

56
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_
/*****************************************************
*==============================================================

8
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;
}
}

24
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);

94
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
******************************************************************************/

2
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

6
source/msp/UART0.C → 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

9
source/msp/UART2.C → 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接收中断

2
source/msp/UART2.h → 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

0
source/msp/UART4.h → source/msp/mcu support/UART4.h

2
source/msp/uart_x.c → 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};

187
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;
}

8
source/msp/UART0.h → 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;

183
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();
}

94
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

17
source/msp/UART3.c → 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 <stdio.h>
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;

6
source/msp/UART3.h → 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)

236
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<n;i++)
{
L0_uartN_uchex(uartx,buf[i]);
L0_uartN_uc(uartx,' ');
}
L0_uartN_0d0a(uartx);
}
void L1_uartN_uchexArray(U8 uartx,vU8 *buf,U16 n)
{
int i;
for(i=0;i<n;i++)
{
L0_uartN_uchex(uartx,buf[i]);
L0_uartN_uc(uartx,' ');
}
L0_uartN_0d0a(uartx);
}
#if 0
void L1_uartN_uchexArray(U8 uartx,U8 *buf,U16 len)
{
D_485_TX(); //切换到输出状态
if(len >= 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

5
source/msp/uart_x.h → 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);

184
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 <stdio.h>
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();
}

93
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

0
source/msp/UART4.C → source/msp/nouse/msp_uart4.C

2
source/tpc/ccmodbus.c

@ -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)

2
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

Loading…
Cancel
Save