Compare commits

...

22 Commits

  1. 76
      keilp/cc_as_stc02_ps5ws.uvprojx
  2. 29
      source/.vscode/settings.json
  3. 218
      source/app/app_config.c
  4. 102
      source/app/app_config.h
  5. 124
      source/app/main.c
  6. 23
      source/app/main.h
  7. 14
      source/app/task_adc.c
  8. 50
      source/app/task_bled.c
  9. 33
      source/app/task_bled.h
  10. 71
      source/app/task_btn.c
  11. 32
      source/app/task_btn.h
  12. 4
      source/app/task_debug.c
  13. 26
      source/app/task_modbus.c
  14. 2
      source/app/task_modbus.h
  15. 86
      source/app/task_nfc.c
  16. 33
      source/app/task_nfc.h
  17. 60
      source/app/task_nfc_auth.c
  18. 34
      source/app/task_nfc_auth.h
  19. 125
      source/app/task_rfid.c
  20. 33
      source/app/task_rfid.h
  21. 142
      source/app/task_rs485.c
  22. 33
      source/app/task_rs485.h
  23. 57
      source/bsp/bsp_config.c
  24. 15
      source/bsp/bsp_config.h
  25. 214
      source/bsp/bsp_config_delay.c
  26. 9
      source/bsp/bsp_config_delay.h
  27. 160
      source/bsp/bsp_key.c
  28. 11
      source/bsp/bsp_key.h
  29. 55
      source/bsp/bsp_led.c
  30. 14
      source/bsp/bsp_led.h
  31. 14
      source/bsp/bsp_rfid.c
  32. 9
      source/bsp/bsp_rfid.h
  33. 16
      source/bsp/chipid.c
  34. 7
      source/bsp/chipid.h
  35. 35
      source/cpu/stc_stc8h.h
  36. 640
      source/cpu/stc_stc8hxx.h
  37. 2
      source/ctask/task.c
  38. 73
      source/msp/UART0.C
  39. 6
      source/msp/UART0.h
  40. 62
      source/msp/UART2.c
  41. 8
      source/msp/UART2.h
  42. 111
      source/msp/UART3.c
  43. 7
      source/msp/UART3.h
  44. 50
      source/msp/UART4.C
  45. 6
      source/msp/UART4.h
  46. 114
      source/msp/time.c
  47. 12
      source/msp/uart_x.c
  48. 39
      source/msp/uart_x.h
  49. 2
      source/tpc/0d0a.c
  50. 2
      source/tpc/0d0a.h
  51. 2
      source/tpc/ccmodbus.c
  52. 2
      source/tpc/ccmodbus.h
  53. 241
      source/tpc/debug.c
  54. 64
      source/tpc/debug.h
  55. 8
      source/tpc/modbus.c
  56. 4
      source/tpc/modbus.h
  57. 18
      source/tpc/tpc_x.h

76
keilp/cc_as_stc02_ps5ws.uvprojx

@ -273,7 +273,7 @@
<uAregs>0</uAregs>
<UseInterruptVector>1</UseInterruptVector>
<Fuzzy>3</Fuzzy>
<Optimize>2</Optimize>
<Optimize>0</Optimize>
<WarningLevel>2</WarningLevel>
<SizeSpeed>0</SizeSpeed>
<ObjectExtend>1</ObjectExtend>
@ -341,34 +341,44 @@
<FilePath>..\source\app\main.c</FilePath>
</File>
<File>
<FileName>task_adc.c</FileName>
<FileName>task_debug.c</FileName>
<FileType>1</FileType>
<FilePath>..\source\app\task_adc.c</FilePath>
<FilePath>..\source\app\task_debug.c</FilePath>
</File>
<File>
<FileName>task_debug.c</FileName>
<FileName>app_config.c</FileName>
<FileType>1</FileType>
<FilePath>..\source\app\task_debug.c</FilePath>
<FilePath>..\source\app\app_config.c</FilePath>
</File>
<File>
<FileName>task_register.c</FileName>
<FileName>task_nfc.c</FileName>
<FileType>1</FileType>
<FilePath>..\source\app\task_register.c</FilePath>
<FilePath>..\source\app\task_nfc.c</FilePath>
</File>
<File>
<FileName>task_modbus.c</FileName>
<FileName>task_rfid.c</FileName>
<FileType>1</FileType>
<FilePath>..\source\app\task_modbus.c</FilePath>
<FilePath>..\source\app\task_rfid.c</FilePath>
</File>
<File>
<FileName>app_config.c</FileName>
<FileName>task_rs485.c</FileName>
<FileType>1</FileType>
<FilePath>..\source\app\app_config.c</FilePath>
<FilePath>..\source\app\task_rs485.c</FilePath>
</File>
<File>
<FileName>task_encrypt.c</FileName>
<FileName>task_bled.c</FileName>
<FileType>1</FileType>
<FilePath>..\source\app\task_encrypt.c</FilePath>
<FilePath>..\source\app\task_bled.c</FilePath>
</File>
<File>
<FileName>task_btn.c</FileName>
<FileType>1</FileType>
<FilePath>..\source\app\task_btn.c</FilePath>
</File>
<File>
<FileName>task_nfc_auth.c</FileName>
<FileType>1</FileType>
<FilePath>..\source\app\task_nfc_auth.c</FilePath>
</File>
</Files>
</Group>
@ -405,6 +415,21 @@
<FileType>1</FileType>
<FilePath>..\source\msp\uart_x.c</FilePath>
</File>
<File>
<FileName>UART3.c</FileName>
<FileType>1</FileType>
<FilePath>..\source\msp\UART3.c</FilePath>
</File>
<File>
<FileName>UART2.c</FileName>
<FileType>1</FileType>
<FilePath>..\source\msp\UART2.c</FilePath>
</File>
<File>
<FileName>UART4.C</FileName>
<FileType>1</FileType>
<FilePath>..\source\msp\UART4.C</FilePath>
</File>
</Files>
</Group>
<Group>
@ -430,6 +455,26 @@
<FileType>1</FileType>
<FilePath>..\source\bsp\rs485.c</FilePath>
</File>
<File>
<FileName>bsp_key.c</FileName>
<FileType>1</FileType>
<FilePath>..\source\bsp\bsp_key.c</FilePath>
</File>
<File>
<FileName>bsp_config_delay.c</FileName>
<FileType>1</FileType>
<FilePath>..\source\bsp\bsp_config_delay.c</FilePath>
</File>
<File>
<FileName>bsp_rfid.c</FileName>
<FileType>1</FileType>
<FilePath>..\source\bsp\bsp_rfid.c</FilePath>
</File>
<File>
<FileName>bsp_led.c</FileName>
<FileType>1</FileType>
<FilePath>..\source\bsp\bsp_led.c</FilePath>
</File>
</Files>
</Group>
<Group>
@ -455,6 +500,11 @@
<FileType>1</FileType>
<FilePath>..\source\tpc\modbus.c</FilePath>
</File>
<File>
<FileName>debug.c</FileName>
<FileType>1</FileType>
<FilePath>..\source\tpc\debug.c</FilePath>
</File>
</Files>
</Group>
<Group>

29
source/.vscode/settings.json

@ -0,0 +1,29 @@
{
"files.associations": {
"UART0.C": "cpp",
"bsp_config.h": "c",
"stc_macro.h": "c",
"type.h": "c",
"main.h": "c",
"bsp_config_delay.h": "c",
"bsp_key.h": "c",
"stc_macro.H": "cpp",
"uart_x.h": "c",
"UART4.C": "cpp",
"tpc_x.h": "c",
"uart3.h": "c",
"time.h": "c",
"debug.h": "c",
"app_config.h": "c",
"task_nfc.h": "c",
"task_debug.h": "c",
"clib.h": "c",
"uart2.h": "c",
"task_rfid.h": "c",
"task_rs485.h": "c",
"rs485.h": "c",
"bsp_led.h": "c",
"task_nfc_auth.h": "c",
"stc_stc8h.h": "c"
}
}

218
source/app/app_config.c

@ -5,103 +5,159 @@
GlobalParam G;
GlobalRegister R;
int i;
void L3_param_init(void)
{
#if 0
int i;
for(i=0;i<D_ch_max_num;i++)
{
G.weight[i] = 0;
}
G.allweight = 0;
G._total_weight = 0;
G._total_zweight = 0;
//L3_eeprom_read_param();
#endif
}
// void L3_param_init(void)
// {
// #if 0
// G.xx = 0;
// //L3_eeprom_read_param();
// #endif
// }
//读取reg内容,写入iap
void L3_reg_2_iap(void)
// void L3_reg_2_iap(void)
// {
// #if 0
// iapData.slaver_id = R.p.slaver_id;
// iapData.adc_ch_status = R.p.adc_ch_status;
// iapData.weight_max = R.p.weight_max;
// iapData.lmd = R.p.lmd;
// iapData.adc_blur_mid = R.p.adc_blur_mid;
// iapData.adc_blur_avg = R.p.adc_blur_avg;
// iapData.adc_blur_shift[0] = R.p.adc_blur_shift[0];
// iapData.adc_blur_shift[1] = R.p.adc_blur_shift[1];
// iapData.adc_blur_shift[2] = R.p.adc_blur_shift[2];
// iapData.adc_blur_threshold[0] = R.p.adc_blur_threshold[0];
// iapData.adc_blur_threshold[1] = R.p.adc_blur_threshold[1];
// //写入eeprom
// if(L1_eep_write_block(D_EEP_PARAM_IN_SECTOR, D_EEP_PARAM_IN_BLOCK, (U8*)&iapData,sizeof(IapData),TRUE) == 0)
// {
// L0_uart0_sendstr("e2p write success");
// }
// #endif
// if(L1_eep_write_block(D_EEP_PARAM_IN_SECTOR, D_EEP_PARAM_IN_BLOCK, D_EEP_SECTOR_BLOCK_SIZE, (U8*)&R.p,sizeof(R.p),TRUE) == 0)
// {
// L0_uart0_sendstr("e2p write success");
// return;
// }
// L0_uart0_sendstr("e2p write failed");
// }
// //读取iap内容,写入reg
// void L3_iap_2_reg(void)
// {
// #if 0
// if(L1_eep_read_block(D_EEP_PARAM_IN_SECTOR, D_EEP_PARAM_IN_BLOCK, (U8*)&iapData, NULL) == 1)
// {
// L0_uart0_sendstr("e2p read failed");
// }
// L0_uart0_sendstr("e2p read success");
// R.p.slaver_id = iapData.slaver_id;
// R.p.adc_ch_status = iapData.adc_ch_status;
// R.p.weight_max = iapData.weight_max ;
// R.p.lmd = iapData.lmd;
// R.p.adc_blur_mid = iapData.adc_blur_mid;
// R.p.adc_blur_avg = iapData.adc_blur_avg;
// R.p.adc_blur_shift[0] = iapData.adc_blur_shift[0];
// R.p.adc_blur_shift[1] = iapData.adc_blur_shift[1];
// R.p.adc_blur_shift[2] = iapData.adc_blur_shift[2];
// R.p.adc_blur_threshold[0] = iapData.adc_blur_threshold[0];
// R.p.adc_blur_threshold[1] = iapData.adc_blur_threshold[1];
// #endif
// if(L1_eep_read_block(D_EEP_PARAM_IN_SECTOR, D_EEP_PARAM_IN_BLOCK, D_EEP_SECTOR_BLOCK_SIZE, (U8*)&R.p, NULL) == 0)
// {
// L0_uart0_sendstr("e2p read success");
// return;
// }
// L0_uart0_sendstr("e2p read failed");
// }
void L3_reg_reset(void)
{
#if 0
iapData.slaver_id = R.p.slaver_id;
iapData.adc_ch_status = R.p.adc_ch_status;
iapData.weight_max = R.p.weight_max;
iapData.lmd = R.p.lmd;
iapData.adc_blur_mid = R.p.adc_blur_mid;
iapData.adc_blur_avg = R.p.adc_blur_avg;
iapData.adc_blur_shift[0] = R.p.adc_blur_shift[0];
iapData.adc_blur_shift[1] = R.p.adc_blur_shift[1];
iapData.adc_blur_shift[2] = R.p.adc_blur_shift[2];
iapData.adc_blur_threshold[0] = R.p.adc_blur_threshold[0];
iapData.adc_blur_threshold[1] = R.p.adc_blur_threshold[1];
//写入eeprom
if(L1_eep_write_block(D_EEP_PARAM_IN_SECTOR, D_EEP_PARAM_IN_BLOCK, (U8*)&iapData,sizeof(IapData),TRUE) == 0)
//设置RFID对照表
for(i=0; i<LED_BTN_NUM; i++)
{
L0_uart0_sendstr("e2p write success");
R.rfid_table[i] = 0x0000 + i;
}
#endif
if(L1_eep_write_block(D_EEP_PARAM_IN_SECTOR, D_EEP_PARAM_IN_BLOCK, D_EEP_SECTOR_BLOCK_SIZE, (U8*)&R.p,sizeof(R.p),TRUE) == 0)
{
L0_uart0_sendstr("e2p write success");
return;
}
L0_uart0_sendstr("e2p write failed");
}
//读取iap内容,写入reg
void L3_iap_2_reg(void)
{
#if 0
if(L1_eep_read_block(D_EEP_PARAM_IN_SECTOR, D_EEP_PARAM_IN_BLOCK, (U8*)&iapData, NULL) == 1)
//sop板默认不需要授权、未授权
//授权标志由主控板通过协议传递
// R.auth_flag = (0<<4) | 0;
R.auth_flag = (0<<4) | 0x01;
//设置led灯状态
for(i=0; i<LED_BTN_NUM; i++)
{
L0_uart0_sendstr("e2p read failed");
R.led_status[i] = BLED0_OFF;
}
L0_uart0_sendstr("e2p read success");
R.p.slaver_id = iapData.slaver_id;
R.p.adc_ch_status = iapData.adc_ch_status;
R.p.weight_max = iapData.weight_max ;
R.p.lmd = iapData.lmd;
R.p.adc_blur_mid = iapData.adc_blur_mid;
R.p.adc_blur_avg = iapData.adc_blur_avg;
R.p.adc_blur_shift[0] = iapData.adc_blur_shift[0];
R.p.adc_blur_shift[1] = iapData.adc_blur_shift[1];
R.p.adc_blur_shift[2] = iapData.adc_blur_shift[2];
R.p.adc_blur_threshold[0] = iapData.adc_blur_threshold[0];
R.p.adc_blur_threshold[1] = iapData.adc_blur_threshold[1];
#endif
if(L1_eep_read_block(D_EEP_PARAM_IN_SECTOR, D_EEP_PARAM_IN_BLOCK, D_EEP_SECTOR_BLOCK_SIZE, (U8*)&R.p, NULL) == 0)
R.led_status[0] = BLED0_ON;
R.slave_id = 0x01;
R.low_power_mode = 0;
R.func_btn = 0;
R.nfc.nfc_no[0] = 0;
R.nfc.nfc_no[1] = 0;
for(i=0; i<4; i++)
{
L0_uart0_sendstr("e2p read success");
return;
}
L0_uart0_sendstr("e2p read failed");
}
R.rfids[i].rfid_no[0] = 0;
R.rfids[i].rfid_no[1] = 0;
R.rfids[i].rssi = 0;
R.rfids[i].ant = 0;
};
void L3_reg_reset(void)
{
R.p.adc_ch_status = ADC_status_ch2_Ready | ADC_status_ch3_Ready | ADC_status_ch4_Ready; //修改采集通道
R.p.slaver_id = D_UART4_485_SLAVER_ID;
R.p.weight_max = 500; //500kg
R.p.lmd = 2; //2mv/v
R.p.adc_blur_mid = 1;
R.p.adc_blur_avg = 6;
R.p.adc_blur_shift[0] = 0;
R.p.adc_blur_shift[1] = 2;
R.p.adc_blur_shift[2] = 4;
R.p.adc_blur_threshold[0] = 1600; //g
R.p.adc_blur_threshold[1] = 700; //g
//for test
// R.slave_id = 0x01;
// R.low_power_mode = 0;
// R.func_btn = 1;
// R.nfc.nfc_no[0] = 0x01;
// R.nfc.nfc_no[1] = 0x23;
// for(i=0;i<4;i++){
// R.rfids[i].rfid_no[0] = 0xA0;
// R.rfids[i].rfid_no[1] = 0xB0;
// R.rfids[i].rssi = 0x61;
// R.rfids[i].ant = i;
// };
}
void L3_reg_init(void)
{
//R.reserved1 = R.reserved2 = R.reserved3 = 0x55;
//R.zero = 0;
//R.status_eep_save = 0;
L3_reg_reset();
L3_iap_2_reg();
//L3_iap_2_reg();
}
U8 L3_new_rfid(U16 rfidno, U8 rssi, U8 ant)
{
U8 i = 0;
for(i=0; i<4; i++)
{
if(R.rfids[i].rfid_no[0] == 0 && R.rfids[i].rfid_no[1] == 0)
{
//空位置
R.rfids[i].rfid_no[0] = rfidno >> 8 & 0xFF;
R.rfids[i].rfid_no[1] = rfidno >> 0 & 0xFF;
R.rfids[i].rssi = rssi;
R.rfids[i].ant = ant;
return 1;
}
if(R.rfids[i].rfid_no[0] == (rfidno >> 8 & 0xFF) && R.rfids[i].rfid_no[1] == (rfidno >> 0 & 0xFF))
{
//该rfid已经存在
break;
}
}
return 0;
}
U8 L3_find_rfid_table(U16 rfidno)
{
for(i=0; i<LED_BTN_NUM; i++)
{
if(rfidno == R.rfid_table[i]){
return i;
}
}
return LED_BTN_NUM;
}

102
source/app/app_config.h

@ -6,49 +6,67 @@
#define APP_VERSION 0x10
#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)
//STEP 1 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>Register CONFIG
//寄存器编号从1开始
//#define D_COUNT_WEIGHT(adc) (U32)(1000.0 * R.p.weight_max * (adc) / (2 * 0x7FFFFF / 1000 * D_ADS1213_GAIN_VAL * R.p.lmd))
//#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 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 ADC_status_chx_Ready_BASE 0x01
#define ADC_status_ch1_Ready 0x01
#define ADC_status_ch2_Ready 0x02
#define ADC_status_ch3_Ready 0x04
#define ADC_status_ch4_Ready 0x08
#define D_ADC_CHANNEL_NUM 4
// #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)
// //STEP 1 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>Register CONFIG
// //寄存器编号从1开始
// //#define D_COUNT_WEIGHT(adc) (U32)(1000.0 * R.p.weight_max * (adc) / (2 * 0x7FFFFF / 1000 * D_ADS1213_GAIN_VAL * R.p.lmd))
// //#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 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 ADC_status_chx_Ready_BASE 0x01
// #define ADC_status_ch1_Ready 0x01
// #define ADC_status_ch2_Ready 0x02
// #define ADC_status_ch3_Ready 0x04
// #define ADC_status_ch4_Ready 0x08
// #define D_ADC_CHANNEL_NUM 4
#define LED_BTN_NUM 14
typedef struct global_register
{
//RO Register
U16 reserved1;
U32 total_weight; //净重(显示重量)*100
U32 total_zweight; //皮重*100
//RW Register
U16 reserved2;
U16 zero; //清0标志,写入任何值清0(去皮)
U16 status_eep_save; //eep写入寄存器,1则写入eep并清0
//U16 reset; //reset标志,写入任何值,所有参数恢复初始值
struct
{ //需要持久化的参数,不能超过72字节,否则会导致eeprom溢出
U16 slaver_id;
U16 adc_ch_status;
U16 weight_max; //量程
U16 lmd; //2mv/v
U16 adc_blur_mid; //中值滤波
U16 adc_blur_avg; //均值滤波
U16 adc_blur_shift[3]; //移位滤波点数
U16 adc_blur_threshold[2]; //移位滤波阀值
}p;
U16 reserved3;
U32 adval[D_ADC_CHANNEL_NUM]; //4路重量
U32 ch_weight[D_ADC_CHANNEL_NUM]; //4路重量
U32 rough_weight; // 毛重
//RFID对照表
U16 rfid_table[LED_BTN_NUM];
//本机ID
U8 slave_id;
//低功耗模式
U8 low_power_mode;
//led状态标志,分表代表第n个led灯的状态
U8 led_status[LED_BTN_NUM];
//授权标志
//高4位代表是否需要授权 高4位0代表无须授权,高4位>0代表需要授权
//低4位 > 0代表已授权,低4位==0代表未授权
//0x01 代表按键不需要授权、已授权
//0x00 代表按键不需要授权、未授权
//0x11 代表按键需要授权、已授权
//0x10 代表按键需要授权、未授权
U8 auth_flag;
//功能按键
U8 func_btn;
//NFC缓冲区
struct {
//nfc卡号,只取后2个字节
U8 nfc_no[2];
}nfc;
//RFID缓冲区
struct {
//rfid卡号,只取后2个字节
U8 rfid_no[2];
//rfid信号强度
U8 rssi;
//rfid天线编号1,2,3,4 FF代表按键
U8 ant;
}rfids[4];
}GlobalRegister;
extern GlobalRegister R;
@ -80,6 +98,8 @@ extern void L3_reg_2_iap(void);
extern void L3_iap_2_reg(void);
extern void L3_reg_reset(void);
extern void L3_reg_init(void);
extern U8 L3_find_rfid_table(U16 rfidno);
extern U8 L3_new_rfid(U16 rfidno, U8 rssi, U8 ant);
#endif

124
source/app/main.c

@ -75,7 +75,7 @@ stc5ac32s
************************************************/
//===============================================
//寄存器头文件
//===============================================
//===============================================
#include "main.h"
@ -83,25 +83,49 @@ void L0_main_init(void)
{
//Lc_delay_ms(200);
L0_board_config();
L0_uart0_buf_init();//串口初始化
EA = 1;
//Lc_delay_ms(100);
//串口初始化
L0_uart0_buf_init();
L0_uart2_buf_init();
L0_uart3_buf_init();
L0_uart4_buf_init();
//系统定时器初始化
L1_tick_init();
L0_timer0_Init();
//全局寄存器初始化
L3_reg_init();
L3_param_init();
L2_485_init();
L0_ADS1213_INIT();
// L3_param_init();
// L0_ADS1213_INIT();
//打开系统总中断
EA = 1;
L0_uart0_sendArray("v1.3",4);
}
void L0_task_init()
{
//外设初始化
bsp_led_init();
bsp_key_init();
bsp_rfid_init();
//任务初始化
L3_task_nfc_init();
L3_task_rfid_init();
L3_task_rs485_init();
L3_task_bled_init();
L3_task_btn_init();
L3_task_auth_init();
L3_task_adc_init(0);
L3_task_adc_init(1);
L3_task_adc_init(2);
L3_task_adc_init(3);
// L3_task_adc_init(0);
// L3_task_adc_init(1);
// L3_task_adc_init(2);
// L3_task_adc_init(3);
//L3_task_debug_init();
L3_task_show_init();
L3_task_reglisten_init();
L0_uart0_sendArray("v2.7",4);
//L3_task_show_init();
//L3_task_reglisten_init();
}
//===============================================
@ -109,35 +133,87 @@ void L0_main_init(void)
//===============================================
void main(void)
{
U8 key = 0;
U8 count = 0;
#if 0
L0_board_config();
while(1)
{
LED0 = LED0_ON;
delayInMs(500);
LED0 = LED0_OFF;
delayInMs(500);
}
#endif
//初始化
L0_main_init();
//验证加密信息
//L3_encrypt_handler();
//主循环
//任务及外设初始化
//L0_task_init();
//上电延时方便输出
delayInMs(1000);
//获取mcuid
L0_id_get_chipid();
L0_uart0_sendArrayHex(mcuid, MSP_ID_LEN);
L0_uart0_0d0a();
while(1)
{
if(1 == s_nos_tick.t1s_heatbeart)
{
s_nos_tick.t1s_heatbeart = 0;
LED0 ^= 1;
L0_uart0_uc('.');
// L0_uart0_uchex(g_uart3_recv_num);
// L0_uart0_uchex(count);
// L0_uart0_sendArray("v2.7",4);
//L0_uartN_sendstr(0,"v2.8111");
}
//设置bled任务
// L3_task_bled_handler(&_s_task_bled);
// //扫描键盘任务
// L3_task_btn_handler(&_s_task_btn);
//NFC协议处理
// L3_task_nfc_handler(&_s_task_nfc);
// //10s认证过期
// L3_task_auth_handler(&_s_task_auth);
// // //RFID协议处理
// L3_task_rfid_handler(&_s_task_rfid);
// // //RS485协议处理
// L3_task_rs485_handler(&_s_task_rs485);
//串口调试
// if(ts_uart3_recv_buf.ok == 1){
// // count++;
// ts_uart3_recv_buf.ok = 0;
// L0_uart0_uchex(ts_uart3_recv_buf.reg);
// }
//L1_ADS1213_main();
//单路采集滤波
L3_task_adc_handler(0);
L3_task_adc_handler(1);
L3_task_adc_handler(2);
L3_task_adc_handler(3);
//L3_task_adc_handler(0);
//L3_task_adc_handler(1);
//L3_task_adc_handler(2);
//L3_task_adc_handler(3);
//显示
L3_task_adc_filter_show(&ts_adc_blur_show);
//L3_task_adc_filter_show(&ts_adc_blur_show);
//寄存器值监控
L3_task_reglisten_handle(&s_task_reglisten);
//L3_task_reglisten_handle(&s_task_reglisten);
//输出,响应485协议
L3_task_modbus_handler(&s_uart0_rec);
//L3_task_modbus_handler(&s_uart0_rec);
//调试输出
//L3_task_debug(&_s_task_debug);

23
source/app/main.h

@ -37,21 +37,30 @@
#ifndef _MAIN_H
#define _MAIN_H
#include "../msp/uart0.h"
#include "../msp/eeprom.h"
#include "../bsp/bsp_config.h"
#include "../bsp/bsp_config_delay.h"
#include "../bsp/bsp_led.h"
#include "../bsp/bsp_key.h"
#include "../bsp/bsp_rfid.h"
#include "../bsp/chipid.h"
#include "../bsp/cs1232.h"
#include "../bsp/rs485.h"
#include "../msp/uart0.h"
#include "../msp/uart2.h"
#include "../msp/uart3.h"
#include "../msp/uart4.h"
#include "../msp/eeprom.h"
#include "../app/app_config.h"
#include "../app/task_modbus.h"
#include "../app/task_adc.h"
#include "../app/task_debug.h"
#include "../app/task_register.h"
#include "../app/task_encrypt.h"
#include "../app/task_nfc.h"
#include "../app/task_rfid.h"
#include "../app/task_rs485.h"
#include "../app/task_bled.h"
#include "../app/task_btn.h"
#include "../app/task_nfc_auth.h"
//////////////////////////////////////////////////////////////////

14
source/app/task_adc.c

@ -51,13 +51,13 @@ U32 Abs(S32 a)
void L3_task_adc_init(U8 ch)
{
//通道采集任务初始化
L1_task_init(&ts_adc_channel_samples[ch].task);
L3_task_s_go(ts_adc_channel_samples[ch],D_task_init);
ts_adc_channel_samples[ch].status = (R.p.adc_ch_status >> ch) & 0x1;
ts_adc_channel_samples[ch].pool = 0;
ts_adc_channel_samples[ch].adcval = 0;
ts_adc_channel_samples[ch].n = 0;
ts_adc_channel_samples[ch].ch = D_ADCCH_1 + ch;
// L1_task_init(&ts_adc_channel_samples[ch].task);
// L3_task_s_go(ts_adc_channel_samples[ch],D_task_init);
// ts_adc_channel_samples[ch].status = (R.p.adc_ch_status >> ch) & 0x1;
// ts_adc_channel_samples[ch].pool = 0;
// ts_adc_channel_samples[ch].adcval = 0;
// ts_adc_channel_samples[ch].n = 0;
// ts_adc_channel_samples[ch].ch = D_ADCCH_1 + ch;
#if 0
//通道中值滤波任务初始化

50
source/app/task_bled.c

@ -0,0 +1,50 @@
////////////////////////////////////////////////////////////////////////////
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
///-------------------------------------------------------------------------
/// @file bsp_drv.c
/// @brief bsp @ driver config
///-------------------------------------------------------------------------
/// @version 1.0
/// @author CC
/// @date 20180331
/// @note cc_AS_stc02
//////////////////////////////////////////////////////////////////////////////
#include "task_bled.h"
#include "../app/app_config.h"
#include "../bsp/bsp_config.h"
#include "../msp/uart0.h"
#include "../bsp/bsp_led.h"
S_TASK_BLED _s_task_bled;
static int i;
void L3_task_bled_init(void)
{
L1_task_init(&_s_task_bled.task);
L3_task_s_go(_s_task_bled,D_task_init);
}
#define D_task_BLED_SET 0x50
void L3_task_bled_handler(S_TASK_BLED *s)
{
TTSS_Task_init()
L2_task_go(D_task_BLED_SET);
TTSS_Task_step(D_task_BLED_SET)
//L0_uart0_sendArrayHex(R.led_status, 14);
for(i=0;i<LED_BTN_NUM; i++)
{
//BLED_SET_STATUS(i, R.led_status[i]);
bsp_bled_set(i, R.led_status[i]);
}
L2_task_go_Tdelay(D_task_BLED_SET,D_Tdelay_200ms);
//L2_task_go_Tdelay(D_task_BLED_SET,D_Tdelay_1s);
TTSS_Task_end();
}

33
source/app/task_bled.h

@ -0,0 +1,33 @@
////////////////////////////////////////////////////////////////////////////
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
///-------------------------------------------------------------------------
/// @file bsp_drv.h
/// @brief bsp @ driver config
///-------------------------------------------------------------------------
/// @version 1.0
/// @author CC
/// @date 20180331
/// @note cc_AS_stc02
//////////////////////////////////////////////////////////////////////////////
#ifndef _APP_TASK_BLED_H
#define _APP_TASK_BLED_H
#include "../ctask/task.h"
#include "../clib/clib.h"
#include "../tpc/debug.h"
typedef struct _s_task_bled
{
TS_task task;
}S_TASK_BLED;
extern S_TASK_BLED _s_task_bled;
extern void L3_task_bled_init(void);
extern void L3_task_bled_handler(S_TASK_BLED *s);
#endif // #ifndef _APP_TASK_BLED_H

71
source/app/task_btn.c

@ -0,0 +1,71 @@
////////////////////////////////////////////////////////////////////////////
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
///-------------------------------------------------------------------------
/// @file bsp_drv.c
/// @brief bsp @ driver config
///-------------------------------------------------------------------------
/// @version 1.0
/// @author CC
/// @date 20180331
/// @note cc_AS_stc02
//////////////////////////////////////////////////////////////////////////////
#include "task_btn.h"
#include "../app/app_config.h"
#include "../bsp/bsp_config.h"
#include "../msp/uart0.h"
#include "../bsp/bsp_key.h"
#include "../bsp/bsp_led.h"
S_TASK_BTN _s_task_btn;
static int i;
static U8 key;
void L3_task_btn_init(void)
{
L1_task_init(&_s_task_btn.task);
L3_task_s_go(_s_task_btn,D_task_init);
}
#define D_task_BTN_SET 0x50
void L3_task_btn_handler(S_TASK_BTN *s)
{
TTSS_Task_init()
L2_task_go(D_task_BTN_SET);
TTSS_Task_step(D_task_BTN_SET)
key = bsp_key_scan();
if(key != BSP_KEY_NUM_MAX){
L0_uart0_uc('#');
L0_uart0_uchex(key);
//功能按键
if(key == 0)
{
R.func_btn = 1;
}
else
{
//如果不需要授权 or 需要但已经授权
if(!(R.auth_flag & 0xF0) || (R.auth_flag & 0x0F))
{
//L0_uart0_uc('$');
//L0_uart0_uchex(key);
//设置对应的rfid
L3_new_rfid(R.rfid_table[key], 0, 0xFF);
//亮灯
R.led_status[key] = BLED0_ON;
}
}
}
L2_task_go_Tdelay(D_task_BTN_SET,0);
TTSS_Task_end();
}

32
source/app/task_btn.h

@ -0,0 +1,32 @@
////////////////////////////////////////////////////////////////////////////
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
///-------------------------------------------------------------------------
/// @file bsp_drv.h
/// @brief bsp @ driver config
///-------------------------------------------------------------------------
/// @version 1.0
/// @author CC
/// @date 20180331
/// @note cc_AS_stc02
//////////////////////////////////////////////////////////////////////////////
#ifndef _APP_TASK_BTN_H
#define _APP_TASK_BTN_H
#include "../ctask/task.h"
#include "../clib/clib.h"
typedef struct _s_task_btn
{
TS_task task;
}S_TASK_BTN;
extern S_TASK_BTN _s_task_btn;
extern void L3_task_btn_init(void);
extern void L3_task_btn_handler(S_TASK_BTN *s);
#endif // #ifndef _APP_TASK_BTN_H

4
source/app/task_debug.c

@ -39,8 +39,8 @@ void L3_task_debug(S_TASK_DEBUG *s)
L0_uart0_uc(' ');
L0_uart0_ulhex(R.adval[3]);
L0_uart0_uc(' ');*/
L0_uart0_ulhex(R.total_weight);
L0_uart0_0d0a();
// L0_uart0_ulhex(R.total_weight);
// L0_uart0_0d0a();
L2_task_go_Tdelay(D_task_ADC_CHx_DEBUG,D_Tdelay_Msec(15)); //延时15ms
TTSS_Task_end();

26
source/app/task_modbus.c

@ -177,20 +177,20 @@ void L3_modbus_master_handler(TS_PH4_modbus *pmodbus,MD_SLAVER_INFO *p_slaver_in
}
void L3_task_modbus_handler(TP_Handler_X *ph4)
void L3_task_modbus_handler(Ts_uart_recv_buf *ph4)
{
if(ph4->ok)
{
TS_PH4_modbus *ts_modbus = (TS_PH4_modbus *)ph4->buf;
//L0_uart0_sendArray(ph4->buf, 8);
//L0_uart0_sendArray("abcdefgh", 8);
ph4->ok = 0;
if(ts_modbus->slaver == R.p.slaver_id || ts_modbus->slaver == D_UART4_485_SLAVER_ID_BROADCAST) //从机
{
U16 acklen = L3_modbus_slaver_ack(ts_modbus,&s_uart0_ack);
L0_uart0_sendArray((U8*)&s_uart0_ack, acklen);
}
}
// if(ph4->ok)
// {
// TS_PH4_modbus *ts_modbus = (TS_PH4_modbus *)ph4->buf;
// //L0_uart0_sendArray(ph4->buf, 8);
// //L0_uart0_sendArray("abcdefgh", 8);
// ph4->ok = 0;
// if(ts_modbus->slaver == R.p.slaver_id || ts_modbus->slaver == D_UART4_485_SLAVER_ID_BROADCAST) //从机
// {
// U16 acklen = L3_modbus_slaver_ack(ts_modbus,&s_uart0_ack);
// L0_uart0_sendArray((U8*)&s_uart0_ack, acklen);
// }
// }
}

2
source/app/task_modbus.h

@ -4,6 +4,6 @@
#include "../ctask/task.h"
#include "../tpc/modbus.h"
extern void L3_task_modbus_handler(TP_Handler_X *ph4);
extern void L3_task_modbus_handler(Ts_uart_recv_buf *ph4);
#endif

86
source/app/task_nfc.c

@ -0,0 +1,86 @@
////////////////////////////////////////////////////////////////////////////
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
///-------------------------------------------------------------------------
/// @file bsp_drv.c
/// @brief bsp @ driver config
///-------------------------------------------------------------------------
/// @version 1.0
/// @author CC
/// @date 20180331
/// @note cc_AS_stc02
//////////////////////////////////////////////////////////////////////////////
#include "task_nfc.h"
#include "../app/app_config.h"
#include "../bsp/bsp_config.h"
#include "../msp/uart0.h"
#include "../msp/uart2.h"
S_TASK_NFC _s_task_nfc;
TPC_NFC tpc_nfc;
//=============================================
void L3_task_nfc_init(void)
{
L1_task_init(&_s_task_nfc.task);
L3_task_s_go(_s_task_nfc,D_task_init);
}
#define D_task_NFC_READ 0x50
#define D_task_NFC_SET 0x52
#define D_task_NFC_PRINT 0x53
void L3_task_nfc_handler(S_TASK_NFC *s)
{
TTSS_Task_init()
L2_task_go(D_task_NFC_READ);
TTSS_Task_step(D_task_NFC_READ)
if(ts_uart2_recv_buf.ok == 1)
{
ts_uart2_recv_buf.ok = 0;
Lc_buf_copy_uc((U8*)&tpc_nfc, ts_uart2_recv_buf.buf, ts_uart2_recv_buf.num);
tpc_nfc.ocr = tpc_nfc.buf[tpc_nfc.num[0] << 8 | tpc_nfc.num[1]];
//只读取0x10的协议
if(tpc_nfc.cmd == 0x10){
L2_task_go_Tdelay(D_task_NFC_SET,0);
//L2_task_go_Tdelay(D_task_NFC_PRINT,0);
}
}
TTSS_Task_step(D_task_NFC_SET)
U8 num = (U16)tpc_nfc.num[0] << 8 | tpc_nfc.num[1];
//1.判定NFC卡号是否符合规则
//2.保存NFC卡号到寄存器
R.nfc.nfc_no[0] = tpc_nfc.buf[num-2];
R.nfc.nfc_no[0] = tpc_nfc.buf[num-1];
//3.设定授权标志
R.auth_flag |= 0x01;
L2_task_go_Tdelay(D_task_NFC_READ,D_Tdelay_100ms);
TTSS_Task_step(D_task_NFC_PRINT)
L0_uart0_sendstr("\r\n--------- Recv NFC --------\r\n");
L0_uart0_sendstr("id : ");
L0_uart0_uchex(tpc_nfc.slaveId);
L0_uart0_0d0a();
L0_uart0_sendstr("num: ");
L0_uart0_uchex(tpc_nfc.num[0]);
L0_uart0_uchex(tpc_nfc.num[1]);
L0_uart0_0d0a();
L0_uart0_sendstr("cmd: ");
L0_uart0_uchex(tpc_nfc.cmd);
L0_uart0_0d0a();
L0_uart0_sendstr("no : ");
L0_uart0_sendArrayHex(tpc_nfc.buf, tpc_nfc.num[0] << 8 | tpc_nfc.num[1]);
L0_uart0_0d0a();
L0_uart0_sendstr("ocr: ");
L0_uart0_uchex(tpc_nfc.ocr);
L0_uart0_0d0a();
L2_task_go_Tdelay(D_task_NFC_READ,0);
TTSS_Task_end();
}

33
source/app/task_nfc.h

@ -0,0 +1,33 @@
////////////////////////////////////////////////////////////////////////////
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
///-------------------------------------------------------------------------
/// @file bsp_drv.h
/// @brief bsp @ driver config
///-------------------------------------------------------------------------
/// @version 1.0
/// @author CC
/// @date 20180331
/// @note cc_AS_stc02
//////////////////////////////////////////////////////////////////////////////
#ifndef _APP_TASK_NFC_H
#define _APP_TASK_NFC_H
#include "../ctask/task.h"
#include "../clib/clib.h"
#include "../tpc/debug.h"
typedef struct _s_task_nfc
{
TS_task task;
}S_TASK_NFC;
extern S_TASK_NFC _s_task_nfc;
extern void L3_task_nfc_init(void);
extern void L3_task_nfc_handler(S_TASK_NFC *s);
#endif // #ifndef _APP_TASK_NFC_H

60
source/app/task_nfc_auth.c

@ -0,0 +1,60 @@
////////////////////////////////////////////////////////////////////////////
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
///-------------------------------------------------------------------------
/// @file bsp_drv.c
/// @brief bsp @ driver config
///-------------------------------------------------------------------------
/// @version 1.0
/// @author CC
/// @date 20180331
/// @note cc_AS_stc02
//////////////////////////////////////////////////////////////////////////////
#include "task_nfc_auth.h"
#include "../app/app_config.h"
#include "../bsp/bsp_config.h"
#include "../msp/uart0.h"
#include "../msp/uart2.h"
S_TASK_AUTH _s_task_auth;
//=============================================
void L3_task_auth_init(void)
{
// _s_task_auth.auth_flag = R.auth_flag;
_s_task_auth.auth_flag = 0x00;
L1_task_init(&_s_task_auth.task);
L3_task_s_go(_s_task_auth,D_task_init);
}
#define D_task_AUTH_READ 0x50
#define D_task_AUTH_SETZERO 0x52
#define D_task_AUTH_PRINT 0x53
void L3_task_auth_handler(S_TASK_AUTH *s)
{
TTSS_Task_init()
L2_task_go(D_task_AUTH_READ);
TTSS_Task_step(D_task_AUTH_READ)
if(s->auth_flag != R.auth_flag){
s->auth_flag = R.auth_flag;
//授权中
if(R.auth_flag & 0x0F != 0){
L2_task_go_Tdelay(D_task_AUTH_SETZERO,D_Tdelay_10s);
}
}
TTSS_Task_step(D_task_AUTH_SETZERO)
//清除授权标志
R.auth_flag &= 0xF0;
// L0_uart0_sendstr("Auth Expired.");
// L2_task_go_Tdelay(D_task_AUTH_READ,0);
L2_task_go(D_task_AUTH_READ);
TTSS_Task_end();
}

34
source/app/task_nfc_auth.h

@ -0,0 +1,34 @@
////////////////////////////////////////////////////////////////////////////
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
///-------------------------------------------------------------------------
/// @file bsp_drv.h
/// @brief bsp @ driver config
///-------------------------------------------------------------------------
/// @version 1.0
/// @author CC
/// @date 20180331
/// @note cc_AS_stc02
//////////////////////////////////////////////////////////////////////////////
#ifndef _APP_TASK_NFC_AUTH_H
#define _APP_TASK_NFC_AUTH_H
#include "../ctask/task.h"
#include "../clib/clib.h"
#include "../tpc/debug.h"
typedef struct _s_task_auth
{
TS_task task;
U8 auth_flag;
}S_TASK_AUTH;
extern S_TASK_AUTH _s_task_auth;
extern void L3_task_auth_init(void);
extern void L3_task_auth_handler(S_TASK_AUTH *s);
#endif // #ifndef _APP_TASK_NFC_AUTH_H

125
source/app/task_rfid.c

@ -0,0 +1,125 @@
////////////////////////////////////////////////////////////////////////////
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
///-------------------------------------------------------------------------
/// @file bsp_drv.c
/// @brief bsp @ driver config
///-------------------------------------------------------------------------
/// @version 1.0
/// @author CC
/// @date 20180331
/// @note cc_AS_stc02
//////////////////////////////////////////////////////////////////////////////
#include "task_rfid.h"
#include "../app/app_config.h"
#include "../bsp/bsp_config.h"
#include "../msp/uart0.h"
#include "../msp/uart3.h"
S_TASK_RFID _s_task_rfid;
TPC_RFID tpc_rfid;
//4通道,读取次数 3 3 3 3
U8 rfidSetChannelCmd[] = {0xBB,0x00,0x1B,0x00,0x05,0x02,0x03,0x03,0x03,0x03,0x2E,0x7E};
//设置功率 26dBm
U8 rfidSetWCmd[] = {0xBB,0x00,0xB6,0x00,0x02,0x0A,0x28,0xEA,0x7E};
//选择卡片
U8 rfidSelCmd[] = {0x00};
//轮询读取(FFFF代表永久轮询)
U8 rfidLoopRead[] = {0xBB,0x00,0x27,0x00,0x03,0x22,0xFF,0xFF,0x4A,0x7E};
//=============================================
void L3_task_rfid_init(void)
{
L1_task_init(&_s_task_rfid.task);
L3_task_s_go(_s_task_rfid,D_task_init);
}
#define D_task_RFID_READ 0x50
#define D_task_RFID_PRINT 0x51
#define D_task_RFID_SET 0x52
void L3_task_rfid_handler(S_TASK_RFID *s)
{
TTSS_Task_init()
L0_uart0_uchex(sizeof(rfidSetChannelCmd) / sizeof(U8));
L0_uart0_uchex(sizeof(rfidSetWCmd) / sizeof(U8));
L0_uart0_uchex(sizeof(rfidSelCmd) / sizeof(U8));
L0_uart0_uchex(sizeof(rfidLoopRead) / sizeof(U8));
//1.设置天线
L0_uart3_sendArray(rfidSetChannelCmd, sizeof(rfidSetChannelCmd) / sizeof(U8));
NOP10();
//2.设置功率
L0_uart3_sendArray(rfidSetWCmd, sizeof(rfidSetWCmd) / sizeof(U8));
NOP10();
//3.选择掩码
L0_uart3_sendArray(rfidSelCmd, sizeof(rfidSelCmd) / sizeof(U8));
NOP10();
//4.启动轮询
L0_uart3_sendArray(rfidLoopRead, sizeof(rfidLoopRead) / sizeof(U8));
NOP10();
L2_task_go(D_task_RFID_READ);
TTSS_Task_step(D_task_RFID_READ)
if(ts_uart3_recv_buf.ok == 1)
{
ts_uart3_recv_buf.ok = 0;
Lc_buf_copy_uc((U8*)&tpc_rfid, ts_uart3_recv_buf.buf, ts_uart3_recv_buf.num);
tpc_rfid.ocr = tpc_rfid.buf[tpc_rfid.num[0] << 8 | tpc_rfid.num[1]];
if(tpc_rfid.type == 0x02 && tpc_rfid.cmd == 0x22){
// L2_task_go_Tdelay(D_task_RFID_PRINT,0);
L2_task_go_Tdelay(D_task_RFID_SET,0);
}
}
TTSS_Task_step(D_task_RFID_SET)
U8 index = 0;
U8 num = (U16)tpc_rfid.num[0] << 8 | tpc_rfid.num[1];
U16 rfidno = (U16)tpc_rfid.buf[num-5] << 8 | tpc_rfid.buf[num-4];
U8 rssi = tpc_rfid.buf[0];
U8 ant = tpc_rfid.buf[num-1];
L0_uart0_uc('R');
L0_uart0_uchex(tpc_rfid.buf[num-5]);
L0_uart0_uchex(tpc_rfid.buf[num-4]);
//1.判定RFID卡号是否符合规则
//2.保存RFID卡号到寄存器
L3_new_rfid(rfidno, rssi, ant);
//3.查找编号是否在rfidtable中
index = L3_find_rfid_table(rfidno);
//4.亮灯
//TODO 如果缓冲区满了,没放进去,是否亮灯
if(index < LED_BTN_NUM){
R.led_status[index] = BLED0_ON;
}
L2_task_go_Tdelay(D_task_RFID_READ,0);
TTSS_Task_step(D_task_RFID_PRINT)
L0_uart0_sendstr("\r\n--------- Recv RFID --------\r\n");
L0_uart0_sendstr("type : ");
L0_uart0_uchex(tpc_rfid.type);
L0_uart0_0d0a();
L0_uart0_sendstr("cmd: ");
L0_uart0_uchex(tpc_rfid.cmd);
L0_uart0_0d0a();
L0_uart0_sendstr("num: ");
L0_uart0_uchex(tpc_rfid.num[0]);
L0_uart0_uchex(tpc_rfid.num[1]);
L0_uart0_0d0a();
L0_uart0_sendstr("dat : ");
L0_uart0_sendArrayHex(tpc_rfid.buf, tpc_rfid.num[0] << 8 | tpc_rfid.num[1]);
L0_uart0_0d0a();
L0_uart0_sendstr("ocr: ");
L0_uart0_uchex(tpc_rfid.ocr);
L0_uart0_0d0a();
L2_task_go_Tdelay(D_task_RFID_READ,0);
TTSS_Task_end();
}

33
source/app/task_rfid.h

@ -0,0 +1,33 @@
////////////////////////////////////////////////////////////////////////////
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
///-------------------------------------------------------------------------
/// @file bsp_drv.h
/// @brief bsp @ driver config
///-------------------------------------------------------------------------
/// @version 1.0
/// @author CC
/// @date 20180331
/// @note cc_AS_stc02
//////////////////////////////////////////////////////////////////////////////
#ifndef _APP_TASK_RFID_H
#define _APP_TASK_RFID_H
#include "../ctask/task.h"
#include "../clib/clib.h"
#include "../tpc/debug.h"
typedef struct _s_task_rfid
{
TS_task task;
}S_TASK_RFID;
extern S_TASK_RFID _s_task_rfid;
extern void L3_task_rfid_init(void);
extern void L3_task_rfid_handler(S_TASK_RFID *s);
#endif // #ifndef _APP_TASK_RFID_H

142
source/app/task_rs485.c

@ -0,0 +1,142 @@
////////////////////////////////////////////////////////////////////////////
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
///-------------------------------------------------------------------------
/// @file bsp_drv.c
/// @brief bsp @ driver config
///-------------------------------------------------------------------------
/// @version 1.0
/// @author CC
/// @date 20180331
/// @note cc_AS_stc02
//////////////////////////////////////////////////////////////////////////////
#include "task_rs485.h"
#include "../app/app_config.h"
#include "../bsp/bsp_config.h"
#include "../msp/uart0.h"
#include "../msp/uart4.h"
S_TASK_RS485 _s_task_rs485;
TPC_RS485 tpc_rs485;
TPC_RS485_ACK tpc_rs485_ack;
static U8 acklen = 0;
static U8 i = 0;
U8 constructor_rs485_ack();
//=============================================
void L3_task_rs485_init(void)
{
L1_task_init(&_s_task_rs485.task);
L3_task_s_go(_s_task_rs485,D_task_init);
}
#define D_task_RS485_READ 0x50
#define D_task_RS485_PRINT 0x51
#define D_task_RS485_ACK 0x52
#define D_task_RS485_MODE 0x53
void L3_task_rs485_handler(S_TASK_RS485 *s)
{
TTSS_Task_init()
L2_task_go(D_task_RS485_READ);
TTSS_Task_step(D_task_RS485_READ)
if(ts_uart4_recv_buf.ok == 1)
{
//L0_uart0_uc('%');
// LED0 ^= 1;
ts_uart4_recv_buf.ok = 0;
Lc_buf_copy_uc((U8*)&tpc_rs485, ts_uart4_recv_buf.buf, ts_uart4_recv_buf.num);
tpc_rs485.ocr = tpc_rs485.buf[tpc_rs485.num[0] << 8 | tpc_rs485.num[1]];
//L2_task_go_Tdelay(D_task_RS485_PRINT,0);
L2_task_go_Tdelay(D_task_RS485_ACK,0);
}
TTSS_Task_step(D_task_RS485_ACK)
if(tpc_rs485.slaveId == R.slave_id)
{
//读取
if(tpc_rs485.cmd == 0x10)
{
//buf[0] 是否需要授权标志、低功耗模式
R.auth_flag &= 0x0F;
R.auth_flag |= tpc_rs485.buf[0] & 0xF0;
R.low_power_mode = tpc_rs485.buf[0] & 0x0F;
//buf[1-2], rfid映射
//TODO 上位机发过来的rfid编号如何处理
//构造响应包,并且返回
acklen = constructor_rs485_ack();
//写出
L0_uart4_sendArray((U8*)&tpc_rs485_ack, acklen);
}
}
L2_task_go_Tdelay(D_task_RS485_READ,0);
TTSS_Task_step(D_task_RS485_PRINT)
L0_uart0_sendstr("\r\n--------- Recv RS485 --------\r\n");
L0_uart0_sendstr("slaveId : ");
L0_uart0_uchex(tpc_rs485.slaveId);
L0_uart0_0d0a();
L0_uart0_sendstr("cmd: ");
L0_uart0_uchex(tpc_rs485.cmd);
L0_uart0_0d0a();
L0_uart0_sendstr("num: ");
L0_uart0_uchex(tpc_rs485.num[0]);
L0_uart0_uchex(tpc_rs485.num[1]);
L0_uart0_0d0a();
L0_uart0_sendstr("dat : ");
L0_uart0_sendArrayHex(tpc_rs485.buf, tpc_rs485.num[0] << 8 | tpc_rs485.num[1]);
L0_uart0_0d0a();
L0_uart0_sendstr("ocr: ");
L0_uart0_uchex(tpc_rs485.ocr);
L0_uart0_0d0a();
L2_task_go_Tdelay(D_task_RS485_READ,0);
TTSS_Task_end();
}
U8 constructor_rs485_ack()
{
U8 num = (1 + sizeof(R.nfc) + sizeof(R.rfids));
tpc_rs485_ack.head[0] = 0xAA;
// tpc_rs485_ack.head[1] = 0x55;
tpc_rs485_ack.slaveId = R.slave_id;
tpc_rs485_ack.cmd = 0x10;
tpc_rs485_ack.num[0] = (num >> 8) & 0xFF;
tpc_rs485_ack.num[1] = num & 0xFF;
tpc_rs485_ack.buf[0] = R.func_btn;
Lc_buf_copy_uc((U8*)&tpc_rs485_ack.buf[1], (U8*)&R.nfc, sizeof(R.nfc));
Lc_buf_copy_uc((U8*)&tpc_rs485_ack.buf[1+sizeof(R.nfc)], (U8*)R.rfids, sizeof(R.rfids));
tpc_rs485_ack.ocr = 0;
tpc_rs485_ack.ocr += tpc_rs485_ack.slaveId;
tpc_rs485_ack.ocr += tpc_rs485_ack.cmd;
tpc_rs485_ack.ocr += tpc_rs485_ack.num[0];
tpc_rs485_ack.ocr += tpc_rs485_ack.num[1];
for(i=0;i<num;i++)
{
tpc_rs485_ack.ocr += tpc_rs485_ack.buf[i];
}
tpc_rs485_ack.buf[num] = tpc_rs485_ack.ocr;
//清0资源
R.func_btn = 0;
R.nfc.nfc_no[0] = 0x00;
R.nfc.nfc_no[1] = 0x00;
R.rfids[0].rfid_no[0] = 0x00;
R.rfids[0].rfid_no[1] = 0x00;
R.rfids[1].rfid_no[0] = 0x00;
R.rfids[1].rfid_no[1] = 0x00;
R.rfids[2].rfid_no[0] = 0x00;
R.rfids[2].rfid_no[1] = 0x00;
R.rfids[3].rfid_no[0] = 0x00;
R.rfids[3].rfid_no[1] = 0x00;
return 5 + num + 1;
}

33
source/app/task_rs485.h

@ -0,0 +1,33 @@
////////////////////////////////////////////////////////////////////////////
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
///-------------------------------------------------------------------------
/// @file bsp_drv.h
/// @brief bsp @ driver config
///-------------------------------------------------------------------------
/// @version 1.0
/// @author CC
/// @date 20180331
/// @note cc_AS_stc02
//////////////////////////////////////////////////////////////////////////////
#ifndef _APP_TASK_RS485_H
#define _APP_TASK_RS485_H
#include "../ctask/task.h"
#include "../clib/clib.h"
#include "../tpc/debug.h"
typedef struct _s_task_rs485
{
TS_task task;
}S_TASK_RS485;
extern S_TASK_RS485 _s_task_rs485;
extern void L3_task_rs485_init(void);
extern void L3_task_rs485_handler(S_TASK_RS485 *s);
#endif // #ifndef _APP_TASK_RS485_H

57
source/bsp/bsp_config.c

@ -24,6 +24,15 @@
void L0_board_config(void)
{
//LED
D_stdIO_P0_ALL();
D_stdIO_P1_ALL();
D_stdIO_P2_ALL();
D_stdIO_P3_ALL();
D_stdIO_P4_ALL();
D_stdIO_P5_ALL();
//uart0
#if (PIN_UART0_Rxd_30_Txd_31 == D_PIN_UART0)
BITN_0(P_SW1 ,BITN7);//
BITN_0(P_SW1 ,BITN6);// rxd p3.0 txd p3.1
@ -42,35 +51,37 @@ void L0_board_config(void)
#endif
//uart2
#if (PIN_UART2_Rxd_10_Txd_11 == D_PIN_UART2)
BITN_0(P_SW2 ,BITN0);// rxd2 p1.0 txd2 p1.1
#elif (PIN_UART2_Rxd_46_Txd_47 == D_PIN_UART2)
BITN_1(P_SW2 ,BITN0);// rxd2 p4.06 txd2 p4.7
#else
BITN_0(P_SW2 ,BITN0);// rxd2 p1.0 txd2 p1.1
//BITN_1(P_SW2 ,BITN0);// rxd2 p4.0 txd2 p4.2
#endif
//uart3
//P_SW2 = 0x02; // RXD3_2/P5.0, TXD3_2/P5.1
#if (PIN_UART3_Rxd_00_Txd_01 == D_PIN_UART3)
BITN_0(P_SW2 ,BITN1);// rxd2 p1.0 txd2 p1.1
#elif (PIN_UART3_Rxd_50_Txd_51 == D_PIN_UART3)
BITN_1(P_SW2 ,BITN1);// rxd2 p4.06 txd2 p4.7
#else
BITN_0(P_SW2 ,BITN1);// rxd2 p1.0 txd2 p1.1
#endif
//uart4
//BITN_1(P_SW2 ,BITN2);// rxd4 p5.2 txd4 p5.3
//BITN_0(P_SW2 ,BITN2);// rxd4 p0.2 txd4 p0.3
//485 RE/DE 配置推完输出 P55
BITN_0(P5M1,BITN5);BITN_1(P5M0,BITN5);
//LED
D_stdIO_P1(BITN7);
D_stdIO_P5(BITN4);
#if (PIN_UART4_Rxd_02_Txd_03 == D_PIN_UART4)
BITN_0(P_SW2 ,BITN2);// rxd2 p1.0 txd2 p1.1
#elif (PIN_UART4_Rxd_52_Txd_53 == D_PIN_UART4)
BITN_1(P_SW2 ,BITN2);// rxd2 p4.06 txd2 p4.7
#else
BITN_0(P_SW2 ,BITN2);// rxd2 p1.0 txd2 p1.1
#endif
//IO
D_stdIO_P1(BITN0);
D_stdIO_P1(BITN1);
D_stdIO_P1(BITN2);
D_stdIO_P1(BITN6);
D_stdIO_P3(BITN2);
D_stdIO_P3(BITN3);
D_stdIO_P3(BITN4);
D_stdIO_P3(BITN5);
D_stdIO_P3(BITN6);
D_stdIO_P3(BITN7);
//485 RE/DE 配置推完输出 P00,P01
D_HighI_P0(BITN0);
D_HighI_P0(BITN1);
//WDT
#if (TYPE_WDT_ENABLE == D_WDT_STATUS)
WDT_CONTR = 0x27; //使能看门狗,22M时钟下溢出时间约为5s,请注意添加喂狗程序
#else
@ -80,5 +91,3 @@ void L0_board_config(void)
//Lp0_Sys_timer_extern_handler被timer0中断调用
//Lp0_Sys_timer_extern_handler = L1_Sys_timer_extern_handler;
}

15
source/bsp/bsp_config.h

@ -104,8 +104,13 @@
#define D_MODBUS_REG_MAX_NUM 32 //每次最多读取/写入的寄存器数量,此处的数量要注意和 D_tp_handle_x_len 对应
//外设定义
#define LED0_ON 1
#define LED0_OFF 0
#define LED0 P23 //LED5
//Button LED
#define BLED0_ON 0
#define BLED0_OFF 1
//0 1 2 3 4 5 6
//13 12 11 10 9 8 7
#define BLED0 P42 //NET9
@ -131,6 +136,12 @@
#define KC2 P07 //NET6
#define KC3 P13 //NET7
#define KC4 P20 //NET8
//RFID EN -- 暂未定义
#define RFID_ENABLE 1
#define RFID_DISABLE 0
#define RFID_EN_PIN P32 //RFID-EN >1.1v使能
//EEP存储地址定义
#define D_EEP_SECTOR_SIZE 0x200 //每个扇区0x200==512bytes
@ -223,12 +234,12 @@
//STEP 5 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<Uart CONFIG
#define SERIAL_MAX_NUM 1
#define SERIAL_MAX_NUM 4
////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函数
#define D_UART_send_buf2_max 8 //此处改动会影响L0_uartN_ulhex函数
//STEP 5 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<Uart CONFIG End

214
source/bsp/bsp_config_delay.c

@ -0,0 +1,214 @@
#include "bsp_config_delay.h"
#if ((TYPE_MCU == TYPE_MCU_STC_8H) \
|| (TYPE_MCU == TYPE_MCU_STC_8G) \
|| (TYPE_MCU == TYPE_MCU_STC_8A) \
|| (TYPE_MCU == TYPE_MCU_STC_8F)) \
#if (D_sys_MainFre == MainFre_22M)
void Delay100us() //@22.1184MHz
{
unsigned char i, j;
i = 3;
j = 221;
do
{
while (--j);
} while (--i);
}
void Delay200us() //@22.1184MHz
{
unsigned char i, j;
_nop_();
i = 6;
j = 188;
do
{
while (--j);
} while (--i);
}
void Delay500us() //@22.1184MHz
{
unsigned char i, j;
i = 15;
j = 90;
do
{
while (--j);
} while (--i);
}
void Delay600us() //@22.1184MHz
{
unsigned char i, j;
_nop_();
i = 18;
j = 57;
do
{
while (--j);
} while (--i);
}
void Delay1ms() //@22.1184MHz
{
unsigned char i, j;
i = 29;
j = 183;
do
{
while (--j);
} while (--i);
}
void Delay100ms() //@22.1184MHz
{
unsigned char i, j, k;
i = 12;
j = 57;
k = 122;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void Delay200ms() //@22.1184MHz
{
unsigned char i, j, k;
i = 23;
j = 113;
k = 248;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void Delay500ms() //@22.1184MHz
{
unsigned char i, j, k;
i = 57;
j = 27;
k = 112;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void Delay600ms() //@22.1184MHz
{
unsigned char i, j, k;
i = 68;
j = 83;
k = 238;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void Delay1000ms() //@22.1184MHz
{
unsigned char i, j, k;
i = 113;
j = 53;
k = 228;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void delayInMs(U16 n)
{
if(n<=50)
{
do{
Delay1ms();
}while(n--);
}
else if(n<=100)
{
Delay100ms();
}
else if(n<=200)
{
Delay200ms();
}
else if(n<=500)
{
Delay500ms();
}
else if(n<=600)
{
Delay600ms();
}
else if(n<=1000)
{
Delay1000ms();
}
else
{
}
}
void delayInUs(U16 n)
{
if(n<=100)
{
Delay100us();
}
else if(n<=200)
{
Delay200us();
}
else if(n<=500)
{
Delay500us();
}
else if(n<=600)
{
Delay600us();
}
else if(n<=1000)
{
Delay1ms();
}
else
{
}
}
#endif //end (D_sys_MainFre == MainFre_22M)
#endif

9
source/bsp/bsp_config_delay.h

@ -0,0 +1,9 @@
#ifndef _BSP_CONFIG_DELAY_H
#define _BSP_CONFIG_DELAY_H
#include "bsp_config.h"
extern void delayInUs(U16 n);
extern void delayInMs(U16 n);
#endif

160
source/bsp/bsp_key.c

@ -0,0 +1,160 @@
#include "bsp_key.h"
#include "bsp_config_delay.h"
U32 timeout = 0x3FFFFF;
U8 bsp_key_init(void)
{
D_stdIO_P3(BITN6);
D_stdIO_P1(BITN7);
D_stdIO_P0(BITN6);
D_stdIO_P4(BITN3);
D_stdIO_P1(BITN0);
D_stdIO_P0(BITN7);
D_stdIO_P1(BITN3);
D_stdIO_P2(BITN0);
//初始化为高电平
KR1 = KR2 = KR3 = KR4 = 1;
//初始化为高电平
KC1 = KC2 = KC3 = KC4 = 1;
return 0;
}
void scan_row(U8 r)
{
KR1 = 1;
KR2 = 1;
KR3 = 1;
KR4 = 1;
switch(r){
case 1:
KR1 = 0;break;
case 2:
KR2 = 0;break;
case 3:
KR3 = 0;break;
case 4:
KR4 = 0;break;
default:
break;
}
}
U8 scan_col(U8 c)
{
timeout = 0x3FFFFF;
if(c == 1)
{
if(KC1 == 0)
{
delayInMs(10);
if(KC1 == 0)
{
while(KC1 == 0 && timeout--);
return 1;
}
}
}
else if(c == 2){
if(KC2 == 0)
{
delayInMs(10);
if(KC2 == 0)
{
while(KC2 == 0 && timeout--);
return 1;
}
}
}
else if(c == 3){
if(KC3 == 0)
{
delayInMs(10);
if(KC3 == 0)
{
while(KC3 == 0 && timeout--);
return 1;
}
}
}
else if(c == 4){
if(KC4 == 0)
{
delayInMs(10);
if(KC4 == 0)
{
while(KC4 == 0 && timeout--);
return 1;
}
}
}
return 0;
}
U8 bsp_key_scan(void)
{
//扫描第1行
scan_row(1);
if(scan_col(1) > 0){
return 0;
}
if(scan_col(2) > 0){
return 1;
}
if(scan_col(3) > 0){
return 2;
}
if(scan_col(4) > 0){
return 3;
}
//扫描第2行
scan_row(2);
if(scan_col(1) > 0){
return 4;
}
if(scan_col(2) > 0){
return 5;
}
if(scan_col(3) > 0){
return 6;
}
if(scan_col(4) > 0){
return 7;
}
//扫描第3行
scan_row(3);
if(scan_col(1) > 0){
return 8;
}
if(scan_col(2) > 0){
return 9;
}
if(scan_col(3) > 0){
return 10;
}
if(scan_col(4) > 0){
return 11;
}
//扫描第4行
scan_row(4);
if(scan_col(1) > 0){
return 12;
}
if(scan_col(2) > 0){
return 13;
}
// if(scan_col(KC3) > 0){
// return 14;
// }
// if(scan_col(KC4) > 0){
// return 15;
// }
return BSP_KEY_NUM_MAX;
}

11
source/bsp/bsp_key.h

@ -0,0 +1,11 @@
#ifndef _BSP_KEY_H
#define _BSP_KEY_H
#include "bsp_config.h"
#define BSP_KEY_NUM_MAX 99
extern U8 bsp_key_init(void);
extern U8 bsp_key_scan(void);
#endif

55
source/bsp/bsp_led.c

@ -0,0 +1,55 @@
#include "bsp_led.h"
void bsp_led_init(void)
{
//LED0
D_stdIO_P2(BITN3);
//BLED0-13
D_stdIO_P4(BITN2);
D_stdIO_P4(BITN1);
D_stdIO_P3(BITN7);
D_stdIO_P3(BITN5);
D_stdIO_P1(BITN6);
D_stdIO_P1(BITN5);
D_stdIO_P1(BITN4);
D_stdIO_P4(BITN7);
D_stdIO_P1(BITN1);
D_stdIO_P2(BITN6);
D_stdIO_P2(BITN5);
D_stdIO_P2(BITN1);
D_stdIO_P4(BITN4);
D_stdIO_P2(BITN2);
//初始化
BLED0 = BLED1 = BLED2 = BLED3 = BLED4 = BLED5 = BLED6 = BLED0_OFF;
BLED7 = BLED8 = BLED9 = BLED10 = BLED11 = BLED12 = BLED13 = BLED0_OFF;
LED0 = LED0_OFF;
}
void bsp_led_set(U8 status)
{
LED0 = status;
}
void bsp_bled_set(U8 index, U8 status)
{
switch (index)
{
case 0: BLED0 = status; break;
case 1: BLED1 = status; break;
case 2: BLED2 = status; break;
case 3: BLED3 = status; break;
case 4: BLED4 = status; break;
case 5: BLED5 = status; break;
case 6: BLED6 = status; break;
case 7: BLED7 = status; break;
case 8: BLED8 = status; break;
case 9: BLED9 = status; break;
case 10:BLED10 = status; break;
case 11:BLED11 = status; break;
case 12:BLED12 = status; break;
case 13:BLED13 = status; break;
default: break;
}
}

14
source/bsp/bsp_led.h

@ -0,0 +1,14 @@
#ifndef _BSP_LED_H
#define _BSP_LED_H
#include "bsp_config.h"
extern void bsp_led_init(void);
extern void bsp_bled_set(U8 index, U8 status);
extern void bsp_led_set(U8 status);
#define BLED_SET_STATUS(N, status); do { \
BLED##N = status; \
}while(0);
#endif //_BSP_LED_H

14
source/bsp/bsp_rfid.c

@ -0,0 +1,14 @@
#include "bsp_rfid.h"
#include "bsp_config_delay.h"
U8 bsp_rfid_init(void)
{
D_stdIO_P3(BITN2);
bsp_rfid_en(RFID_ENABLE);
return 0;
}
void bsp_rfid_en(U8 status)
{
RFID_EN_PIN = status;
}

9
source/bsp/bsp_rfid.h

@ -0,0 +1,9 @@
#ifndef _BSP_RFID_H
#define _BSP_RFID_H
#include "bsp_config.h"
extern U8 bsp_rfid_init(void);
extern void bsp_rfid_en(U8 status);
#endif

16
source/bsp/chipid.c

@ -12,30 +12,34 @@
#include "chipid.h"
#include "../bsp/bsp_config.h"
void L0_id_get_ram(U8 *id)
U8 mcuid[MSP_ID_LEN];
void L0_id_get_ram()
{
U8 i = 0;
for(i=0;i<MSP_ID_LEN;i++)
{
id[i] = (U8)(ID_ADDR_IN_RAM[i]);
mcuid[i] = (U8)(ID_ADDR_IN_RAM[i]);
}
}
void L0_id_get_rom(U8 *id)
void L0_id_get_rom()
{
U8 i = 0;
for(i=0;i<MSP_ID_LEN;i++)
{
id[i] = (U8)ID_ADDR_IN_ROM[i];
mcuid[i] = (U8)ID_ADDR_IN_ROM[i];
}
}
void L0_id_get_chipid(U8 *id)
void L0_id_get_chipid()
{
U8 i = 0;
//使能访问XFR
P_SW2 |= 0x80;
for(i=0;i<MSP_ID_LEN;i++)
{
id[i] = ID_ADDR_IN_CHIPID[i];
mcuid[i] = ID_ADDR_IN_CHIPID[i];
}
}

7
source/bsp/chipid.h

@ -28,8 +28,11 @@
#include "../bsp/bsp_config.h"
#include "../msp/uart0.h"
extern void L0_id_get(U8 *id);
extern void L0_id_get_rom(U8 *id);
extern U8 mcuid[];
extern void L0_id_get();
extern void L0_id_get_rom();
extern void L0_id_get_chipid();
extern void L0_id_main(void);
#endif// #ifndef _msp_eeprom_H_

35
source/cpu/stc_stc8h.h

@ -1089,7 +1089,42 @@ sfr RSTCFG = 0xff;
#define NOP_N(N) NOP##N()
/////////////////////////////////////////////////
#define ET4 0x40
#define ET3 0x20
#define ES4 0x10
#define ES3 0x08
#define ET2 0x04
#define ESPI 0x02
#define ES2 0x01
#define S2SM0 BITN7
#define S2ST2 BITN6
#define S2SM2 BITN5
#define S2REN BITN4
#define S2TB8 BITN3
#define S2RB8 BITN2
#define S2TI BITN1
#define S2RI BITN0
#define S3SM0 BITN7
#define S3ST3 BITN6
#define S3SM2 BITN5
#define S3REN BITN4
#define S3TB8 BITN3
#define S3RB8 BITN2
#define S3TI BITN1
#define S3RI BITN0
#define S4SM0 BITN7
#define S4ST4 BITN6
#define S4SM2 BITN5
#define S4REN BITN4
#define S4TB8 BITN3
#define S4RB8 BITN2
#define S4TI BITN1
#define S4RI BITN0
#endif

640
source/cpu/stc_stc8hxx.h

@ -1,640 +0,0 @@
#ifndef __STC8H_H__
#define __STC8H_H__
/////////////////////////////////////////////////
//������ͷ�ļ���,���������ٰ���"REG51.H"
sfr P0 = 0x80;
sbit P00 = P0^0;
sbit P01 = P0^1;
sbit P02 = P0^2;
sbit P03 = P0^3;
sbit P04 = P0^4;
sbit P05 = P0^5;
sbit P06 = P0^6;
sbit P07 = P0^7;
sfr SP = 0x81;
sfr DPL = 0x82;
sfr DPH = 0x83;
sfr S4CON = 0x84;
sfr S4BUF = 0x85;
sfr PCON = 0x87;
sfr TCON = 0x88;
sbit TF1 = TCON^7;
sbit TR1 = TCON^6;
sbit TF0 = TCON^5;
sbit TR0 = TCON^4;
sbit IE1 = TCON^3;
sbit IT1 = TCON^2;
sbit IE0 = TCON^1;
sbit IT0 = TCON^0;
sfr TMOD = 0x89;
sfr TL0 = 0x8a;
sfr TL1 = 0x8b;
sfr TH0 = 0x8c;
sfr TH1 = 0x8d;
sfr AUXR = 0x8e;
sfr INTCLKO = 0x8f;
sfr P1 = 0x90;
sbit P10 = P1^0;
sbit P11 = P1^1;
sbit P12 = P1^2;
sbit P13 = P1^3;
sbit P14 = P1^4;
sbit P15 = P1^5;
sbit P16 = P1^6;
sbit P17 = P1^7;
sfr P1M1 = 0x91;
sfr P1M0 = 0x92;
sfr P0M1 = 0x93;
sfr P0M0 = 0x94;
sfr P2M1 = 0x95;
sfr P2M0 = 0x96;
sfr SCON = 0x98;
sbit SM0 = SCON^7;
sbit SM1 = SCON^6;
sbit SM2 = SCON^5;
sbit REN = SCON^4;
sbit TB8 = SCON^3;
sbit RB8 = SCON^2;
sbit TI = SCON^1;
sbit RI = SCON^0;
sfr SBUF = 0x99;
sfr S2CON = 0x9a;
sfr S2BUF = 0x9b;
sfr IRCBAND = 0x9d;
sfr LIRTRIM = 0x9e;
sfr IRTRIM = 0x9f;
sfr P2 = 0xa0;
sbit P20 = P2^0;
sbit P21 = P2^1;
sbit P22 = P2^2;
sbit P23 = P2^3;
sbit P24 = P2^4;
sbit P25 = P2^5;
sbit P26 = P2^6;
sbit P27 = P2^7;
sfr P_SW1 = 0xa2;
sfr IE = 0xa8;
sbit EA = IE^7;
sbit ELVD = IE^6;
sbit EADC = IE^5;
sbit ES = IE^4;
sbit ET1 = IE^3;
sbit EX1 = IE^2;
sbit ET0 = IE^1;
sbit EX0 = IE^0;
sfr SADDR = 0xa9;
sfr WKTCL = 0xaa;
sfr WKTCH = 0xab;
sfr S3CON = 0xac;
sfr S3BUF = 0xad;
sfr TA = 0xae;
sfr IE2 = 0xaf;
sfr P3 = 0xb0;
sbit P30 = P3^0;
sbit P31 = P3^1;
sbit P32 = P3^2;
sbit P33 = P3^3;
sbit P34 = P3^4;
sbit P35 = P3^5;
sbit P36 = P3^6;
sbit P37 = P3^7;
sfr P3M1 = 0xb1;
sfr P3M0 = 0xb2;
sfr P4M1 = 0xb3;
sfr P4M0 = 0xb4;
sfr IP2 = 0xb5;
sfr IP2H = 0xb6;
sfr IPH = 0xb7;
sfr IP = 0xb8;
sbit PPCA = IP^7;
sbit PLVD = IP^6;
sbit PADC = IP^5;
sbit PS = IP^4;
sbit PT1 = IP^3;
sbit PX1 = IP^2;
sbit PT0 = IP^1;
sbit PX0 = IP^0;
sfr SADEN = 0xb9;
sfr P_SW2 = 0xba;
sfr ADC_CONTR = 0xbc;
sfr ADC_RES = 0xbd;
sfr ADC_RESL = 0xbe;
sfr P4 = 0xc0;
sbit P40 = P4^0;
sbit P41 = P4^1;
sbit P42 = P4^2;
sbit P43 = P4^3;
sbit P44 = P4^4;
sbit P45 = P4^5;
sbit P46 = P4^6;
sbit P47 = P4^7;
sfr WDT_CONTR = 0xc1;
sfr IAP_DATA = 0xc2;
sfr IAP_ADDRH = 0xc3;
sfr IAP_ADDRL = 0xc4;
sfr IAP_CMD = 0xc5;
sfr IAP_TRIG = 0xc6;
sfr IAP_CONTR = 0xc7;
sfr P5 = 0xc8;
sbit P50 = P5^0;
sbit P51 = P5^1;
sbit P52 = P5^2;
sbit P53 = P5^3;
sbit P54 = P5^4;
sbit P55 = P5^5;
sbit P56 = P5^6;
sbit P57 = P5^7;
sfr P5M1 = 0xc9;
sfr P5M0 = 0xca;
sfr P6M1 = 0xcb;
sfr P6M0 = 0xcc;
sfr SPSTAT = 0xcd;
sfr SPCTL = 0xce;
sfr SPDAT = 0xcf;
sfr PSW = 0xd0;
sbit CY = PSW^7;
sbit AC = PSW^6;
sbit F0 = PSW^5;
sbit RS1 = PSW^4;
sbit RS0 = PSW^3;
sbit OV = PSW^2;
sbit F1 = PSW^1;
sbit P = PSW^0;
sfr T4T3M = 0xd1;
sfr T4H = 0xd2;
sfr T4L = 0xd3;
sfr T3H = 0xd4;
sfr T3L = 0xd5;
sfr T2H = 0xd6;
sfr T2L = 0xd7;
sfr USBCLK = 0xdc;
sfr ADCCFG = 0xde;
sfr IP3 = 0xdf;
sfr ACC = 0xe0;
sfr P7M1 = 0xe1;
sfr P7M0 = 0xe2;
sfr DPS = 0xe3;
sfr DPL1 = 0xe4;
sfr DPH1 = 0xe5;
sfr CMPCR1 = 0xe6;
sfr CMPCR2 = 0xe7;
sfr P6 = 0xe8;
sfr USBDAT = 0xec;
sfr IP3H = 0xee;
sfr AUXINTIF = 0xef;
sfr B = 0xf0;
sfr USBCON = 0xf4;
sfr IAP_TPS = 0xf5;
sfr P7 = 0xf8;
sfr USBADR = 0xfc;
sfr RSTCFG = 0xff;
//�������⹦�ܼĴ���λ����չRAM����
//������Щ�Ĵ���,���Ƚ�P_SW2��BIT7����Ϊ1,�ſ�������д
/////////////////////////////////////////////////
//FF00H-FFFFH
/////////////////////////////////////////////////
/////////////////////////////////////////////////
//FE00H-FEFFH
/////////////////////////////////////////////////
#define CKSEL (*(unsigned char volatile xdata *)0xfe00)
#define CLKDIV (*(unsigned char volatile xdata *)0xfe01)
#define HIRCCR (*(unsigned char volatile xdata *)0xfe02)
#define XOSCCR (*(unsigned char volatile xdata *)0xfe03)
#define IRC32KCR (*(unsigned char volatile xdata *)0xfe04)
#define MCLKOCR (*(unsigned char volatile xdata *)0xfe05)
#define IRCDB (*(unsigned char volatile xdata *)0xfe06)
#define X32KCR (*(unsigned char volatile xdata *)0xfe08)
#define P0PU (*(unsigned char volatile xdata *)0xfe10)
#define P1PU (*(unsigned char volatile xdata *)0xfe11)
#define P2PU (*(unsigned char volatile xdata *)0xfe12)
#define P3PU (*(unsigned char volatile xdata *)0xfe13)
#define P4PU (*(unsigned char volatile xdata *)0xfe14)
#define P5PU (*(unsigned char volatile xdata *)0xfe15)
#define P6PU (*(unsigned char volatile xdata *)0xfe16)
#define P7PU (*(unsigned char volatile xdata *)0xfe17)
#define P0NCS (*(unsigned char volatile xdata *)0xfe18)
#define P1NCS (*(unsigned char volatile xdata *)0xfe19)
#define P2NCS (*(unsigned char volatile xdata *)0xfe1a)
#define P3NCS (*(unsigned char volatile xdata *)0xfe1b)
#define P4NCS (*(unsigned char volatile xdata *)0xfe1c)
#define P5NCS (*(unsigned char volatile xdata *)0xfe1d)
#define P6NCS (*(unsigned char volatile xdata *)0xfe1e)
#define P7NCS (*(unsigned char volatile xdata *)0xfe1f)
#define P0SR (*(unsigned char volatile xdata *)0xfe20)
#define P1SR (*(unsigned char volatile xdata *)0xfe21)
#define P2SR (*(unsigned char volatile xdata *)0xfe22)
#define P3SR (*(unsigned char volatile xdata *)0xfe23)
#define P4SR (*(unsigned char volatile xdata *)0xfe24)
#define P5SR (*(unsigned char volatile xdata *)0xfe25)
#define P6SR (*(unsigned char volatile xdata *)0xfe26)
#define P7SR (*(unsigned char volatile xdata *)0xfe27)
#define P0DR (*(unsigned char volatile xdata *)0xfe28)
#define P1DR (*(unsigned char volatile xdata *)0xfe29)
#define P2DR (*(unsigned char volatile xdata *)0xfe2a)
#define P3DR (*(unsigned char volatile xdata *)0xfe2b)
#define P4DR (*(unsigned char volatile xdata *)0xfe2c)
#define P5DR (*(unsigned char volatile xdata *)0xfe2d)
#define P6DR (*(unsigned char volatile xdata *)0xfe2e)
#define P7DR (*(unsigned char volatile xdata *)0xfe2f)
#define P0IE (*(unsigned char volatile xdata *)0xfe30)
#define P1IE (*(unsigned char volatile xdata *)0xfe31)
#define P2IE (*(unsigned char volatile xdata *)0xfe32)
#define P3IE (*(unsigned char volatile xdata *)0xfe33)
#define P4IE (*(unsigned char volatile xdata *)0xfe34)
#define P5IE (*(unsigned char volatile xdata *)0xfe35)
#define P6IE (*(unsigned char volatile xdata *)0xfe36)
#define P7IE (*(unsigned char volatile xdata *)0xfe37)
#define RTCCR (*(unsigned char volatile xdata *)0xfe60)
#define RTCCFG (*(unsigned char volatile xdata *)0xfe61)
#define RTCIEN (*(unsigned char volatile xdata *)0xfe62)
#define RTCIF (*(unsigned char volatile xdata *)0xfe63)
#define ALAHOUR (*(unsigned char volatile xdata *)0xfe64)
#define ALAMIN (*(unsigned char volatile xdata *)0xfe65)
#define ALASEC (*(unsigned char volatile xdata *)0xfe66)
#define ALASSEC (*(unsigned char volatile xdata *)0xfe67)
#define INIYEAR (*(unsigned char volatile xdata *)0xfe68)
#define INIMONTH (*(unsigned char volatile xdata *)0xfe69)
#define INIDAY (*(unsigned char volatile xdata *)0xfe6a)
#define INIHOUR (*(unsigned char volatile xdata *)0xfe6b)
#define INIMIN (*(unsigned char volatile xdata *)0xfe6c)
#define INISEC (*(unsigned char volatile xdata *)0xfe6d)
#define INISSEC (*(unsigned char volatile xdata *)0xfe6e)
#define YEAR (*(unsigned char volatile xdata *)0xfe70)
#define MONTH (*(unsigned char volatile xdata *)0xfe71)
#define DAY (*(unsigned char volatile xdata *)0xfe72)
#define HOUR (*(unsigned char volatile xdata *)0xfe73)
#define MIN (*(unsigned char volatile xdata *)0xfe74)
#define SEC (*(unsigned char volatile xdata *)0xfe75)
#define SSEC (*(unsigned char volatile xdata *)0xfe76)
#define I2CCFG (*(unsigned char volatile xdata *)0xfe80)
#define I2CMSCR (*(unsigned char volatile xdata *)0xfe81)
#define I2CMSST (*(unsigned char volatile xdata *)0xfe82)
#define I2CSLCR (*(unsigned char volatile xdata *)0xfe83)
#define I2CSLST (*(unsigned char volatile xdata *)0xfe84)
#define I2CSLADR (*(unsigned char volatile xdata *)0xfe85)
#define I2CTXD (*(unsigned char volatile xdata *)0xfe86)
#define I2CRXD (*(unsigned char volatile xdata *)0xfe87)
#define I2CMSAUX (*(unsigned char volatile xdata *)0xfe88)
#define TM2PS (*(unsigned char volatile xdata *)0xfea2)
#define TM3PS (*(unsigned char volatile xdata *)0xfea3)
#define TM4PS (*(unsigned char volatile xdata *)0xfea4)
#define ADCTIM (*(unsigned char volatile xdata *)0xfea8)
#define PWM1_ETRPS (*(unsigned char volatile xdata *)0xfeb0)
#define PWM1_ENO (*(unsigned char volatile xdata *)0xfeb1)
#define PWM1_PS (*(unsigned char volatile xdata *)0xfeb2)
#define PWM1_IOAUX (*(unsigned char volatile xdata *)0xfeb3)
#define PWM2_ETRPS (*(unsigned char volatile xdata *)0xfeb4)
#define PWM2_ENO (*(unsigned char volatile xdata *)0xfeb5)
#define PWM2_PS (*(unsigned char volatile xdata *)0xfeb6)
#define PWM2_IOAUX (*(unsigned char volatile xdata *)0xfeb7)
#define PWM1_CR1 (*(unsigned char volatile xdata *)0xfec0)
#define PWM1_CR2 (*(unsigned char volatile xdata *)0xfec1)
#define PWM1_SMCR (*(unsigned char volatile xdata *)0xfec2)
#define PWM1_ETR (*(unsigned char volatile xdata *)0xfec3)
#define PWM1_IER (*(unsigned char volatile xdata *)0xfec4)
#define PWM1_SR1 (*(unsigned char volatile xdata *)0xfec5)
#define PWM1_SR2 (*(unsigned char volatile xdata *)0xfec6)
#define PWM1_EGR (*(unsigned char volatile xdata *)0xfec7)
#define PWM1_CCMR1 (*(unsigned char volatile xdata *)0xfec8)
#define PWM1_CCMR2 (*(unsigned char volatile xdata *)0xfec9)
#define PWM1_CCMR3 (*(unsigned char volatile xdata *)0xfeca)
#define PWM1_CCMR4 (*(unsigned char volatile xdata *)0xfecb)
#define PWM1_CCER1 (*(unsigned char volatile xdata *)0xfecc)
#define PWM1_CCER2 (*(unsigned char volatile xdata *)0xfecd)
#define PWM1_CNTR (*(unsigned int volatile xdata *)0xfece)
#define PWM1_CNTRH (*(unsigned char volatile xdata *)0xfece)
#define PWM1_CNTRL (*(unsigned char volatile xdata *)0xfecf)
#define PWM1_PSCR (*(unsigned int volatile xdata *)0xfed0)
#define PWM1_PSCRH (*(unsigned char volatile xdata *)0xfed0)
#define PWM1_PSCRL (*(unsigned char volatile xdata *)0xfed1)
#define PWM1_ARR (*(unsigned int volatile xdata *)0xfed2)
#define PWM1_ARRH (*(unsigned char volatile xdata *)0xfed2)
#define PWM1_ARRL (*(unsigned char volatile xdata *)0xfed3)
#define PWM1_RCR (*(unsigned char volatile xdata *)0xfed4)
#define PWM1_CCR1 (*(unsigned int volatile xdata *)0xfed5)
#define PWM1_CCR1H (*(unsigned char volatile xdata *)0xfed5)
#define PWM1_CCR1L (*(unsigned char volatile xdata *)0xfed6)
#define PWM1_CCR2 (*(unsigned int volatile xdata *)0xfed7)
#define PWM1_CCR2H (*(unsigned char volatile xdata *)0xfed7)
#define PWM1_CCR2L (*(unsigned char volatile xdata *)0xfed8)
#define PWM1_CCR3 (*(unsigned int volatile xdata *)0xfed9)
#define PWM1_CCR3H (*(unsigned char volatile xdata *)0xfed9)
#define PWM1_CCR3L (*(unsigned char volatile xdata *)0xfeda)
#define PWM1_CCR4 (*(unsigned int volatile xdata *)0xfedb)
#define PWM1_CCR4H (*(unsigned char volatile xdata *)0xfedb)
#define PWM1_CCR4L (*(unsigned char volatile xdata *)0xfedc)
#define PWM1_BKR (*(unsigned char volatile xdata *)0xfedd)
#define PWM1_DTR (*(unsigned char volatile xdata *)0xfede)
#define PWM1_OISR (*(unsigned char volatile xdata *)0xfedf)
#define PWM2_CR1 (*(unsigned char volatile xdata *)0xfee0)
#define PWM2_CR2 (*(unsigned char volatile xdata *)0xfee1)
#define PWM2_SMCR (*(unsigned char volatile xdata *)0xfee2)
#define PWM2_ETR (*(unsigned char volatile xdata *)0xfee3)
#define PWM2_IER (*(unsigned char volatile xdata *)0xfee4)
#define PWM2_SR1 (*(unsigned char volatile xdata *)0xfee5)
#define PWM2_SR2 (*(unsigned char volatile xdata *)0xfee6)
#define PWM2_EGR (*(unsigned char volatile xdata *)0xfee7)
#define PWM2_CCMR1 (*(unsigned char volatile xdata *)0xfee8)
#define PWM2_CCMR2 (*(unsigned char volatile xdata *)0xfee9)
#define PWM2_CCMR3 (*(unsigned char volatile xdata *)0xfeea)
#define PWM2_CCMR4 (*(unsigned char volatile xdata *)0xfeeb)
#define PWM2_CCER1 (*(unsigned char volatile xdata *)0xfeec)
#define PWM2_CCER2 (*(unsigned char volatile xdata *)0xfeed)
#define PWM2_CNTR (*(unsigned int volatile xdata *)0xfeee)
#define PWM2_CNTRH (*(unsigned char volatile xdata *)0xfeee)
#define PWM2_CNTRL (*(unsigned char volatile xdata *)0xfeef)
#define PWM2_PSCR (*(unsigned int volatile xdata *)0xfef0)
#define PWM2_PSCRH (*(unsigned char volatile xdata *)0xfef0)
#define PWM2_PSCRL (*(unsigned char volatile xdata *)0xfef1)
#define PWM2_ARR (*(unsigned int volatile xdata *)0xfef2)
#define PWM2_ARRH (*(unsigned char volatile xdata *)0xfef2)
#define PWM2_ARRL (*(unsigned char volatile xdata *)0xfef3)
#define PWM2_RCR (*(unsigned char volatile xdata *)0xfef4)
#define PWM2_CCR1 (*(unsigned int volatile xdata *)0xfef5)
#define PWM2_CCR1H (*(unsigned char volatile xdata *)0xfef5)
#define PWM2_CCR1L (*(unsigned char volatile xdata *)0xfef6)
#define PWM2_CCR2 (*(unsigned int volatile xdata *)0xfef7)
#define PWM2_CCR2H (*(unsigned char volatile xdata *)0xfef7)
#define PWM2_CCR2L (*(unsigned char volatile xdata *)0xfef8)
#define PWM2_CCR3 (*(unsigned int volatile xdata *)0xfef9)
#define PWM2_CCR3H (*(unsigned char volatile xdata *)0xfef9)
#define PWM2_CCR3L (*(unsigned char volatile xdata *)0xfefa)
#define PWM2_CCR4 (*(unsigned int volatile xdata *)0xfefb)
#define PWM2_CCR4H (*(unsigned char volatile xdata *)0xfefb)
#define PWM2_CCR4L (*(unsigned char volatile xdata *)0xfefc)
#define PWM2_BKR (*(unsigned char volatile xdata *)0xfefd)
#define PWM2_DTR (*(unsigned char volatile xdata *)0xfefe)
#define PWM2_OISR (*(unsigned char volatile xdata *)0xfeff)
#define PWMA_ETRPS (*(unsigned char volatile xdata *)0xfeb0)
#define PWMA_ENO (*(unsigned char volatile xdata *)0xfeb1)
#define PWMA_PS (*(unsigned char volatile xdata *)0xfeb2)
#define PWMA_IOAUX (*(unsigned char volatile xdata *)0xfeb3)
#define PWMB_ETRPS (*(unsigned char volatile xdata *)0xfeb4)
#define PWMB_ENO (*(unsigned char volatile xdata *)0xfeb5)
#define PWMB_PS (*(unsigned char volatile xdata *)0xfeb6)
#define PWMB_IOAUX (*(unsigned char volatile xdata *)0xfeb7)
#define PWMA_CR1 (*(unsigned char volatile xdata *)0xfec0)
#define PWMA_CR2 (*(unsigned char volatile xdata *)0xfec1)
#define PWMA_SMCR (*(unsigned char volatile xdata *)0xfec2)
#define PWMA_ETR (*(unsigned char volatile xdata *)0xfec3)
#define PWMA_IER (*(unsigned char volatile xdata *)0xfec4)
#define PWMA_SR1 (*(unsigned char volatile xdata *)0xfec5)
#define PWMA_SR2 (*(unsigned char volatile xdata *)0xfec6)
#define PWMA_EGR (*(unsigned char volatile xdata *)0xfec7)
#define PWMA_CCMR1 (*(unsigned char volatile xdata *)0xfec8)
#define PWMA_CCMR2 (*(unsigned char volatile xdata *)0xfec9)
#define PWMA_CCMR3 (*(unsigned char volatile xdata *)0xfeca)
#define PWMA_CCMR4 (*(unsigned char volatile xdata *)0xfecb)
#define PWMA_CCER1 (*(unsigned char volatile xdata *)0xfecc)
#define PWMA_CCER2 (*(unsigned char volatile xdata *)0xfecd)
#define PWMA_CNTR (*(unsigned int volatile xdata *)0xfece)
#define PWMA_CNTRH (*(unsigned char volatile xdata *)0xfece)
#define PWMA_CNTRL (*(unsigned char volatile xdata *)0xfecf)
#define PWMA_PSCR (*(unsigned int volatile xdata *)0xfed0)
#define PWMA_PSCRH (*(unsigned char volatile xdata *)0xfed0)
#define PWMA_PSCRL (*(unsigned char volatile xdata *)0xfed1)
#define PWMA_ARR (*(unsigned int volatile xdata *)0xfed2)
#define PWMA_ARRH (*(unsigned char volatile xdata *)0xfed2)
#define PWMA_ARRL (*(unsigned char volatile xdata *)0xfed3)
#define PWMA_RCR (*(unsigned char volatile xdata *)0xfed4)
#define PWMA_CCR1 (*(unsigned int volatile xdata *)0xfed5)
#define PWMA_CCR1H (*(unsigned char volatile xdata *)0xfed5)
#define PWMA_CCR1L (*(unsigned char volatile xdata *)0xfed6)
#define PWMA_CCR2 (*(unsigned int volatile xdata *)0xfed7)
#define PWMA_CCR2H (*(unsigned char volatile xdata *)0xfed7)
#define PWMA_CCR2L (*(unsigned char volatile xdata *)0xfed8)
#define PWMA_CCR3 (*(unsigned int volatile xdata *)0xfed9)
#define PWMA_CCR3H (*(unsigned char volatile xdata *)0xfed9)
#define PWMA_CCR3L (*(unsigned char volatile xdata *)0xfeda)
#define PWMA_CCR4 (*(unsigned int volatile xdata *)0xfedb)
#define PWMA_CCR4H (*(unsigned char volatile xdata *)0xfedb)
#define PWMA_CCR4L (*(unsigned char volatile xdata *)0xfedc)
#define PWMA_BKR (*(unsigned char volatile xdata *)0xfedd)
#define PWMA_DTR (*(unsigned char volatile xdata *)0xfede)
#define PWMA_OISR (*(unsigned char volatile xdata *)0xfedf)
#define PWMB_CR1 (*(unsigned char volatile xdata *)0xfee0)
#define PWMB_CR2 (*(unsigned char volatile xdata *)0xfee1)
#define PWMB_SMCR (*(unsigned char volatile xdata *)0xfee2)
#define PWMB_ETR (*(unsigned char volatile xdata *)0xfee3)
#define PWMB_IER (*(unsigned char volatile xdata *)0xfee4)
#define PWMB_SR1 (*(unsigned char volatile xdata *)0xfee5)
#define PWMB_SR2 (*(unsigned char volatile xdata *)0xfee6)
#define PWMB_EGR (*(unsigned char volatile xdata *)0xfee7)
#define PWMB_CCMR1 (*(unsigned char volatile xdata *)0xfee8)
#define PWMB_CCMR2 (*(unsigned char volatile xdata *)0xfee9)
#define PWMB_CCMR3 (*(unsigned char volatile xdata *)0xfeea)
#define PWMB_CCMR4 (*(unsigned char volatile xdata *)0xfeeb)
#define PWMB_CCER1 (*(unsigned char volatile xdata *)0xfeec)
#define PWMB_CCER2 (*(unsigned char volatile xdata *)0xfeed)
#define PWMB_CNTR (*(unsigned int volatile xdata *)0xfeee)
#define PWMB_CNTRH (*(unsigned char volatile xdata *)0xfeee)
#define PWMB_CNTRL (*(unsigned char volatile xdata *)0xfeef)
#define PWMB_PSCR (*(unsigned int volatile xdata *)0xfef0)
#define PWMB_PSCRH (*(unsigned char volatile xdata *)0xfef0)
#define PWMB_PSCRL (*(unsigned char volatile xdata *)0xfef1)
#define PWMB_ARR (*(unsigned int volatile xdata *)0xfef2)
#define PWMB_ARRH (*(unsigned char volatile xdata *)0xfef2)
#define PWMB_ARRL (*(unsigned char volatile xdata *)0xfef3)
#define PWMB_RCR (*(unsigned char volatile xdata *)0xfef4)
#define PWMB_CCR5 (*(unsigned int volatile xdata *)0xfef5)
#define PWMB_CCR5H (*(unsigned char volatile xdata *)0xfef5)
#define PWMB_CCR5L (*(unsigned char volatile xdata *)0xfef6)
#define PWMB_CCR6 (*(unsigned int volatile xdata *)0xfef7)
#define PWMB_CCR6H (*(unsigned char volatile xdata *)0xfef7)
#define PWMB_CCR6L (*(unsigned char volatile xdata *)0xfef8)
#define PWMB_CCR7 (*(unsigned int volatile xdata *)0xfef9)
#define PWMB_CCR7H (*(unsigned char volatile xdata *)0xfef9)
#define PWMB_CCR7L (*(unsigned char volatile xdata *)0xfefa)
#define PWMB_CCR8 (*(unsigned int volatile xdata *)0xfefb)
#define PWMB_CCR8H (*(unsigned char volatile xdata *)0xfefb)
#define PWMB_CCR8L (*(unsigned char volatile xdata *)0xfefc)
#define PWMB_BKR (*(unsigned char volatile xdata *)0xfefd)
#define PWMB_DTR (*(unsigned char volatile xdata *)0xfefe)
#define PWMB_OISR (*(unsigned char volatile xdata *)0xfeff)
/////////////////////////////////////////////////
//FD00H-FDFFH
/////////////////////////////////////////////////
#define P0INTE (*(unsigned char volatile xdata *)0xfd00)
#define P1INTE (*(unsigned char volatile xdata *)0xfd01)
#define P2INTE (*(unsigned char volatile xdata *)0xfd02)
#define P3INTE (*(unsigned char volatile xdata *)0xfd03)
#define P4INTE (*(unsigned char volatile xdata *)0xfd04)
#define P5INTE (*(unsigned char volatile xdata *)0xfd05)
#define P6INTE (*(unsigned char volatile xdata *)0xfd06)
#define P7INTE (*(unsigned char volatile xdata *)0xfd07)
#define P0INTF (*(unsigned char volatile xdata *)0xfd10)
#define P1INTF (*(unsigned char volatile xdata *)0xfd11)
#define P2INTF (*(unsigned char volatile xdata *)0xfd12)
#define P3INTF (*(unsigned char volatile xdata *)0xfd13)
#define P4INTF (*(unsigned char volatile xdata *)0xfd14)
#define P5INTF (*(unsigned char volatile xdata *)0xfd15)
#define P6INTF (*(unsigned char volatile xdata *)0xfd16)
#define P7INTF (*(unsigned char volatile xdata *)0xfd17)
#define P0IM0 (*(unsigned char volatile xdata *)0xfd20)
#define P1IM0 (*(unsigned char volatile xdata *)0xfd21)
#define P2IM0 (*(unsigned char volatile xdata *)0xfd22)
#define P3IM0 (*(unsigned char volatile xdata *)0xfd23)
#define P4IM0 (*(unsigned char volatile xdata *)0xfd24)
#define P5IM0 (*(unsigned char volatile xdata *)0xfd25)
#define P6IM0 (*(unsigned char volatile xdata *)0xfd26)
#define P7IM0 (*(unsigned char volatile xdata *)0xfd27)
#define P0IM1 (*(unsigned char volatile xdata *)0xfd30)
#define P1IM1 (*(unsigned char volatile xdata *)0xfd31)
#define P2IM1 (*(unsigned char volatile xdata *)0xfd32)
#define P3IM1 (*(unsigned char volatile xdata *)0xfd33)
#define P4IM1 (*(unsigned char volatile xdata *)0xfd34)
#define P5IM1 (*(unsigned char volatile xdata *)0xfd35)
#define P6IM1 (*(unsigned char volatile xdata *)0xfd36)
#define P7IM1 (*(unsigned char volatile xdata *)0xfd37)
#define P0WKUE (*(unsigned char volatile xdata *)0xfd40)
#define P1WKUE (*(unsigned char volatile xdata *)0xfd41)
#define P2WKUE (*(unsigned char volatile xdata *)0xfd42)
#define P3WKUE (*(unsigned char volatile xdata *)0xfd43)
#define P4WKUE (*(unsigned char volatile xdata *)0xfd44)
#define P5WKUE (*(unsigned char volatile xdata *)0xfd45)
#define P6WKUE (*(unsigned char volatile xdata *)0xfd46)
#define P7WKUE (*(unsigned char volatile xdata *)0xfd47)
#define PIN_IP (*(unsigned char volatile xdata *)0xfd60)
#define PIN_IPH (*(unsigned char volatile xdata *)0xfd61)
/////////////////////////////////////////////////
//FC00H-FCFFH
/////////////////////////////////////////////////
#define MD3 (*(unsigned char volatile xdata *)0xfcf0)
#define MD2 (*(unsigned char volatile xdata *)0xfcf1)
#define MD1 (*(unsigned char volatile xdata *)0xfcf2)
#define MD0 (*(unsigned char volatile xdata *)0xfcf3)
#define MD5 (*(unsigned char volatile xdata *)0xfcf4)
#define MD4 (*(unsigned char volatile xdata *)0xfcf5)
#define ARCON (*(unsigned char volatile xdata *)0xfcf6)
#define OPCON (*(unsigned char volatile xdata *)0xfcf7)
/////////////////////////////////////////////////
//FB00H-FBFFH
/////////////////////////////////////////////////
#define COMEN (*(unsigned char volatile xdata *)0xfb00)
#define SEGENL (*(unsigned char volatile xdata *)0xfb01)
#define SEGENH (*(unsigned char volatile xdata *)0xfb02)
#define LEDCTRL (*(unsigned char volatile xdata *)0xfb03)
#define LEDCKS (*(unsigned char volatile xdata *)0xfb04)
#define COM0_DA_L (*(unsigned char volatile xdata *)0xfb10)
#define COM1_DA_L (*(unsigned char volatile xdata *)0xfb11)
#define COM2_DA_L (*(unsigned char volatile xdata *)0xfb12)
#define COM3_DA_L (*(unsigned char volatile xdata *)0xfb13)
#define COM4_DA_L (*(unsigned char volatile xdata *)0xfb14)
#define COM5_DA_L (*(unsigned char volatile xdata *)0xfb15)
#define COM6_DA_L (*(unsigned char volatile xdata *)0xfb16)
#define COM7_DA_L (*(unsigned char volatile xdata *)0xfb17)
#define COM0_DA_H (*(unsigned char volatile xdata *)0xfb18)
#define COM1_DA_H (*(unsigned char volatile xdata *)0xfb19)
#define COM2_DA_H (*(unsigned char volatile xdata *)0xfb1a)
#define COM3_DA_H (*(unsigned char volatile xdata *)0xfb1b)
#define COM4_DA_H (*(unsigned char volatile xdata *)0xfb1c)
#define COM5_DA_H (*(unsigned char volatile xdata *)0xfb1d)
#define COM6_DA_H (*(unsigned char volatile xdata *)0xfb1e)
#define COM7_DA_H (*(unsigned char volatile xdata *)0xfb1f)
#define COM0_DC_L (*(unsigned char volatile xdata *)0xfb20)
#define COM1_DC_L (*(unsigned char volatile xdata *)0xfb21)
#define COM2_DC_L (*(unsigned char volatile xdata *)0xfb22)
#define COM3_DC_L (*(unsigned char volatile xdata *)0xfb23)
#define COM4_DC_L (*(unsigned char volatile xdata *)0xfb24)
#define COM5_DC_L (*(unsigned char volatile xdata *)0xfb25)
#define COM6_DC_L (*(unsigned char volatile xdata *)0xfb26)
#define COM7_DC_L (*(unsigned char volatile xdata *)0xfb27)
#define COM0_DC_H (*(unsigned char volatile xdata *)0xfb28)
#define COM1_DC_H (*(unsigned char volatile xdata *)0xfb29)
#define COM2_DC_H (*(unsigned char volatile xdata *)0xfb2a)
#define COM3_DC_H (*(unsigned char volatile xdata *)0xfb2b)
#define COM4_DC_H (*(unsigned char volatile xdata *)0xfb2c)
#define COM5_DC_H (*(unsigned char volatile xdata *)0xfb2d)
#define COM6_DC_H (*(unsigned char volatile xdata *)0xfb2e)
#define COM7_DC_H (*(unsigned char volatile xdata *)0xfb2f)
#define TSCHEN1 (*(unsigned char volatile xdata *)0xfb40)
#define TSCHEN2 (*(unsigned char volatile xdata *)0xfb41)
#define TSCFG1 (*(unsigned char volatile xdata *)0xfb42)
#define TSCFG2 (*(unsigned char volatile xdata *)0xfb43)
#define TSWUTC (*(unsigned char volatile xdata *)0xfb44)
#define TSCTRL (*(unsigned char volatile xdata *)0xfb45)
#define TSSTA1 (*(unsigned char volatile xdata *)0xfb46)
#define TSSTA2 (*(unsigned char volatile xdata *)0xfb47)
#define TSRT (*(unsigned char volatile xdata *)0xfb48)
#define TSDAT (*(unsigned int volatile xdata *)0xfb49)
#define TSDATH (*(unsigned char volatile xdata *)0xfb49)
#define TSDATL (*(unsigned char volatile xdata *)0xfb4A)
#define TSTH00 (*(unsigned int volatile xdata *)0xfb50)
#define TSTH00H (*(unsigned char volatile xdata *)0xfb50)
#define TSTH00L (*(unsigned char volatile xdata *)0xfb51)
#define TSTH01 (*(unsigned int volatile xdata *)0xfb52)
#define TSTH01H (*(unsigned char volatile xdata *)0xfb52)
#define TSTH01L (*(unsigned char volatile xdata *)0xfb53)
#define TSTH02 (*(unsigned int volatile xdata *)0xfb54)
#define TSTH02H (*(unsigned char volatile xdata *)0xfb54)
#define TSTH02L (*(unsigned char volatile xdata *)0xfb55)
#define TSTH03 (*(unsigned int volatile xdata *)0xfb56)
#define TSTH03H (*(unsigned char volatile xdata *)0xfb56)
#define TSTH03L (*(unsigned char volatile xdata *)0xfb57)
#define TSTH04 (*(unsigned int volatile xdata *)0xfb58)
#define TSTH04H (*(unsigned char volatile xdata *)0xfb58)
#define TSTH04L (*(unsigned char volatile xdata *)0xfb59)
#define TSTH05 (*(unsigned int volatile xdata *)0xfb5a)
#define TSTH05H (*(unsigned char volatile xdata *)0xfb5a)
#define TSTH05L (*(unsigned char volatile xdata *)0xfb5b)
#define TSTH06 (*(unsigned int volatile xdata *)0xfb5c)
#define TSTH06H (*(unsigned char volatile xdata *)0xfb5c)
#define TSTH06L (*(unsigned char volatile xdata *)0xfb5d)
#define TSTH07 (*(unsigned int volatile xdata *)0xfb5e)
#define TSTH07H (*(unsigned char volatile xdata *)0xfb5e)
#define TSTH07L (*(unsigned char volatile xdata *)0xfb5f)
#define TSTH08 (*(unsigned int volatile xdata *)0xfb60)
#define TSTH08H (*(unsigned char volatile xdata *)0xfb60)
#define TSTH08L (*(unsigned char volatile xdata *)0xfb61)
#define TSTH09 (*(unsigned int volatile xdata *)0xfb62)
#define TSTH09H (*(unsigned char volatile xdata *)0xfb62)
#define TSTH09L (*(unsigned char volatile xdata *)0xfb63)
#define TSTH10 (*(unsigned int volatile xdata *)0xfb64)
#define TSTH10H (*(unsigned char volatile xdata *)0xfb64)
#define TSTH10L (*(unsigned char volatile xdata *)0xfb65)
#define TSTH11 (*(unsigned int volatile xdata *)0xfb66)
#define TSTH11H (*(unsigned char volatile xdata *)0xfb66)
#define TSTH11L (*(unsigned char volatile xdata *)0xfb67)
#define TSTH12 (*(unsigned int volatile xdata *)0xfb68)
#define TSTH12H (*(unsigned char volatile xdata *)0xfb68)
#define TSTH12L (*(unsigned char volatile xdata *)0xfb69)
#define TSTH13 (*(unsigned int volatile xdata *)0xfb6a)
#define TSTH13H (*(unsigned char volatile xdata *)0xfb6a)
#define TSTH13L (*(unsigned char volatile xdata *)0xfb6b)
#define TSTH14 (*(unsigned int volatile xdata *)0xfb6c)
#define TSTH14H (*(unsigned char volatile xdata *)0xfb6c)
#define TSTH14L (*(unsigned char volatile xdata *)0xfb6d)
#define TSTH15 (*(unsigned int volatile xdata *)0xfb6e)
#define TSTH15H (*(unsigned char volatile xdata *)0xfb6e)
#define TSTH15L (*(unsigned char volatile xdata *)0xfb6f)
/////////////////////////////////////////////////
//FA00H-FAFFH
/////////////////////////////////////////////////
/////////////////////////////////////////////////
#endif

2
source/ctask/task.c

@ -61,7 +61,7 @@ void L2_task_voice_handle(struct _s_task_music_ *s)
{
s->volume_change --;
s->volume_temp = s->volume;
s->volume = s->volume_change*s->volume_shop/20;//
s->volume = s->volume_change*s->volume_buf/20;//
if (s->volume_temp != s->volume)
{
s->sector = D_voice_volume|s->volume;

73
source/msp/UART0.C

@ -55,40 +55,49 @@ msp/uartx.c 底层代码 和cpu相关 缓存发送也放在里面
-----------------------------------------------------------------------------------------
********************************************************************************/
#include "uart0.h"
#include "../msp/time.h"
//#define _USE_485
#include "../tpc/debug.h"
static volatile Ts_uart_send_buf idata ts_uart_send_shop;
int g_uart0_send_num = 0;
TP_Handler_X s_uart0_rec;
TS_PH4_modbus s_uart0_ack;
//发送缓冲区
static volatile Ts_uart_send_buf ts_uart_send_buf;
//接收缓冲区最多存放16个字符,这个值尽量小,但要大于实际处理协议的缓冲区大小
U8 uart0_recv_buf[16];
Ts_uart_recv_buf ts_uart0_recv_buf;
void L0_uart0_init(void)
{
U16 val = D_BRT_COUNT(12,D_sys_MainFre,D_uart0_BRT);
SCON = 0x50; //8位数据,可变波特率
AUXR |= 0x01; //串口1选择定时器2为波特率发生器
AUXR &= 0xFB; //定时器2时钟为Fosc/12,即12T
//T2L = 0xFE; //设定定时初值
//T2H = 0xFF; //设定定时初
T2L = val;
T2H = val >> 8;
AUXR |= 0x10; //启动定时器2
AUXR &= 0xBF; //定时器时钟12T模式
AUXR &= 0xFE; //串口1选择定时器1为波特率发生器
TMOD &= 0x0F; //设置定时器模式
TL1 = val; //设置定时初始
TH1 = val >> 8; //设置定时初始值
ET1 = 0; //禁止定时器中断
TR1 = 1; //定时器1开始计时
}
void L0_uart0_buf_init(void)
{
ts_uart[uNum0].p = &ts_uart_send_shop;
//定义发送缓冲区
ts_uart[uNum0].p = &ts_uart_send_buf;
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 = &ts_uart0_recv_buf;
ts_uart[uNum0].t->buf = uart0_recv_buf;
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 = L1_s2b_debug; //使用函数指针导致错误
ts_uart[uNum0].tp_handler = NULL; //使用函数指针导致错误
ts_uart[uNum0].ack = (U8*)&s_uart0_ack;
//串口定时器及中断初始化
L0_uart0_init();
D_uart0_ES_INT(1); //打开串口中断
D_uart0_ES_INT(1);
#if (D_UART0_485_TYPE != TYPE_485_NONE)
D_UART0_485_RX() //默认处于接收状态
@ -112,17 +121,19 @@ void INTERRUPT_UART(void) D_SERVE_UART
if(L0_uart0_IntRI()) //如果是U0接收中断
{
L0_uart0_IntRIClear(); //清除接收中断标志
ts_uart[uNum0].t->reg = L0_uartN_get(uNum0);
//ts_uart[uNum0].tp_handler(ts_uart[uNum0].t);
L1_s2b_PH4(ts_uart[uNum0].t);
L0_timer1_restart();
// ts_uart[uNum0].t->reg = L0_uartN_get(uNum0);
ts_uart[uNum0].t->reg = SBUF;
if(ts_uart[uNum0].tp_handler != NULL){
ts_uart[uNum0].tp_handler(ts_uart[uNum0].t);
}
}
if(L0_uart0_IntTI()) //如果是U0发送中断
{
L0_uart0_IntTIClear(); //清除发送中断标志
if(ts_uart[uNum0].p->max != ts_uart[uNum0].p->now)
{
L0_uartN_set(uNum0,ts_uart[uNum0].p->p[ts_uart[uNum0].p->now]);
// L0_uartN_set(uNum0,ts_uart[uNum0].p->p[ts_uart[uNum0].p->now]);
SBUF = ts_uart[uNum0].p->p[ts_uart[uNum0].p->now];
ts_uart[uNum0].p->now ++;
}
else
@ -138,23 +149,5 @@ void INTERRUPT_UART(void) D_SERVE_UART
//NOP(); NOP(); NOP();
}
void timer1_isrHanddle(void) D_SERVE_TIMER1
{
struct _tp_handler_x *p = &s_uart0_rec;
if((p->head == 1) && (p->num >= D_s_modbus_min))
{
//LED1 ^= 1;
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])
{
p->ok = 1;
LED0 ^= 1;
}
}
L0_timer1_stop();
}

6
source/msp/UART0.h

@ -79,10 +79,10 @@ 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 L0_uart0_sendArrayHex(buf, n) L0_uartN_sendArrayHex(uNum0,buf,n)
extern TP_Handler_X s_uart0_rec;
extern TS_PH4_modbus s_uart0_ack;
extern Ts_uart_recv_buf ts_uart0_recv_buf;
extern int g_uart0_send_num;
#endif //#ifndef _uart0_H

62
source/msp/UART2.c

@ -55,13 +55,15 @@ msp/uartx.c 底层代码 和cpu相关 缓存发送也放在里面
-----------------------------------------------------------------------------------------
********************************************************************************/
#include "uart2.h"
#include "../app/common.h"
#include "../tpc/debug.h"
//#define _USE_485
static volatile Ts_uart_send_buf idata ts_uart_send_shop;
TP_Handler_X s_uart2_rec;
TS_PH3_ccmodbus s_uart2_ack;
//发送缓冲区
static volatile Ts_uart_send_buf ts_uart_send_buf;
//接收缓冲区最多存放16个字符,这个值尽量小,但要大于实际处理协议的缓冲区大小
#define RECV_BUF_SIZE 16
static U8 uart2_recv_buf[RECV_BUF_SIZE];
Ts_uart_recv_buf ts_uart2_recv_buf;
int g_uart2_recv_num = 0;
void L0_uart2_init(void)
{
@ -72,29 +74,38 @@ void L0_uart2_init(void)
T2H = 0xFF; //设定定时初值
AUXR |= 0x10; //启动定时器2
#elif (MainFre_22M == D_sys_MainFre) //115200bps@22.1184MHz
#elif (MainFre_22M == D_sys_MainFre) //9600bps@22.1184MHz
S2CON = 0x50; //8位数据,可变波特率
AUXR |= 0x04; //定时器2时钟为Fosc,即1T
T2L = 0xD0; //设定定时初
T2H = 0xFF; //设定定时初
AUXR |= 0x10; //启动定时器2
AUXR &= 0xFB; //定时器时钟12T模式
T2L = 0xD0; //设置定时初始
T2H = 0xFF; //设置定时初始
AUXR |= 0x10; //定时器2开始计时
#endif
}
void L0_uart2_buf_init(void)
{
ts_uart[uNum2].p = &ts_uart_send_shop;
//初始化协议发送缓冲区
ts_uart[uNum2].p = &ts_uart_send_buf;
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 = D_CMD_Filter1_ff;
ts_uart[uNum2].t->head_1 = D_CMD_Filter2_fe;
//初始化协议接收缓冲区
ts_uart[uNum2].t = &ts_uart2_recv_buf;
ts_uart[uNum2].t->buf = uart2_recv_buf;
ts_uart[uNum2].t->head = 0;
ts_uart[uNum2].t->ok = 0;
ts_uart[uNum2].tp_handler = L1_s2b_PH3;
ts_uart[uNum2].ack = (U8*)&s_uart2_ack;
//串口协议解析专用字段
ts_uart[uNum2].t->head_0 = 0x60;
ts_uart[uNum2].t->maxnum = RECV_BUF_SIZE;
ts_uart[uNum2].tp_handler = L1_s2b_nfc;
//串口初始化
L0_uart2_init();
D_uart2_ES_INT(1); //打开串口中断
//打开串口中断
D_uart2_ES_INT(1);
#if (D_UART2_485_TYPE != TYPE_485_NONE)
D_UART2_485_RX() //默认处于接收状态
@ -115,19 +126,23 @@ UART 中断
#define D_SERVE_uart2 interrupt 8
void INTERRUPT_uart2(void) D_SERVE_uart2// using 2
{
//NOP(); NOP(); NOP();
NOP(); NOP(); NOP();
if(L0_uart2_IntRI()) //如果是U2接收中断
{
L0_uart2_IntRIClear(); //清除接收中断标志
ts_uart[uNum2].t->reg = L0_uartN_get(uNum2);
ts_uart[uNum2].tp_handler(ts_uart[uNum2].t);
// ts_uart[uNum2].t->reg = L0_uartN_get(uNum2);
ts_uart[uNum2].t->reg = S2BUF;
if(ts_uart[uNum2].tp_handler != NULL){
ts_uart[uNum2].tp_handler(ts_uart[uNum2].t);
}
}
if(L0_uart2_IntTI()) //如果是U0发送中断
{
L0_uart2_IntTIClear(); //清除发送中断标志
if(ts_uart[uNum2].p->max != ts_uart[uNum2].p->now)
{
L0_uartN_set(uNum2,ts_uart[uNum2].p->p[ts_uart[uNum2].p->now]);
// L0_uartN_set(uNum2,ts_uart[uNum2].p->p[ts_uart[uNum2].p->now]);
S2BUF = ts_uart[uNum2].p->p[ts_uart[uNum2].p->now];
ts_uart[uNum2].p->now ++;
}
else
@ -138,10 +153,9 @@ void INTERRUPT_uart2(void) D_SERVE_uart2// using 2
#if (D_UART2_485_TYPE != TYPE_485_NONE)
D_UART2_485_RX() //切换到接收状态
#endif
}
}
//NOP(); NOP(); NOP();
NOP(); NOP(); NOP();
}

8
source/msp/UART2.h

@ -54,8 +54,7 @@ msp/uartx.c 底层代码 和cpu相关 缓存发送也放在里面
#define _uart2_H
#include "../bsp/bsp_config.h"
#include "../tpc/tpc_ccmodbus.h"
#include "uartN.h"
#include "uart_x.h"
#define uNum2 1
@ -78,9 +77,10 @@ void L0_uart2_sendArray(U8 * buf, U16 len);
#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)
#define L1_uart2_uchexArray(buf) L1_uartN_uchexArray(uNum2,buf)
extern TP_Handler_X s_uart2_rec;
extern TS_PH3_ccmodbus s_uart2_ack;
extern Ts_uart_recv_buf ts_uart2_recv_buf;
extern int g_uart2_recv_num;
#endif //#ifndef _uart2_H

111
source/msp/UART3.c

@ -55,12 +55,15 @@ msp/uartx.c 底层代码 和cpu相关 缓存发送也放在里面
-----------------------------------------------------------------------------------------
********************************************************************************/
#include "uart3.h"
#include "time.h"
#include <stdio.h>
#include "../tpc/debug.h"
static volatile Ts_uart_send_buf idata ts_uart_send_shop;
struct _tp_handler_x s_uart3_rec;
TS_PH4_modbus s_uart3_ack;
//发送缓冲区
static volatile Ts_uart_send_buf ts_uart_send_buf;
//接收缓冲区最多存放16个字符,这个值尽量小,但要大于实际处理协议的缓冲区大小
#define RECV_BUF_SIZE 32
static U8 uart3_recv_buf[RECV_BUF_SIZE];
Ts_uart_recv_buf ts_uart3_recv_buf;
int g_uart3_recv_num = 0;
void L0_uart3_init(void)
{
@ -72,30 +75,50 @@ void L0_uart3_init(void)
T3H = 0xFF; //设定定时初值
T4T3M |= 0x08; //启动定时器3
// #elif (MainFre_22M == D_sys_MainFre) //9600bps@22.1184MHz
// S3CON = 0x10; //8位数据,可变波特率
// S3CON |= 0x40; //串口3选择定时器3为波特率发生器
// T4T3M &= 0xFD; //定时器时钟12T模式
// T3L = 0xD0; //设置定时初始值
// 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
T4T3M &= 0xFD; //定时器时钟12T模式
T3L = 0xFC; //设置定时初始值
T3H = 0xFF; //设置定时初始值
T4T3M |= 0x08; //定时器3开始计时
#endif
}
void L0_uart3_buf_init(void)
{
ts_uart[uNum3].p = &ts_uart_send_shop;
//初始化协议发送缓冲区
ts_uart[uNum3].p = &ts_uart_send_buf;
ts_uart[uNum3].p->now = 0;
ts_uart[uNum3].p->ok = D_ready;
ts_uart[uNum3].t = &s_uart3_rec;
//初始化协议接收缓冲区
ts_uart[uNum3].t = &ts_uart3_recv_buf;
ts_uart[uNum3].t->buf = uart3_recv_buf;
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;
//串口协议解析专用字段
ts_uart[uNum3].t->head_0 = 0xBB;
ts_uart[uNum3].t->tail_0 = 0x7E;
ts_uart[uNum3].t->maxnum = RECV_BUF_SIZE;
ts_uart[uNum3].tp_handler = L1_s2b_rfid;
//串口初始化
L0_uart3_init();
//D_uart3_ES_INT_OPEN(); //打开串口中断
D_uart3_ES_INT(1); //打开串口中断
//打开串口中断
D_uart3_ES_INT(1);
#if (D_UART3_485_TYPE != TYPE_485_NONE)
D_UART3_485_RX() //默认处于接收状态
@ -117,54 +140,36 @@ UART 中断
void INTERRUPT_UART3(void) D_SERVE_UART3// using 3
{
NOP(); NOP(); NOP();
if(L0_uart3_IntRI()) //如果是U0接收中断
if(L0_uart3_IntRI()) //如果是U3接收中断
{
L0_uart3_IntRIClear(); //清除接收中断标志
ts_uart[uNum3].t->reg = L0_uartN_get(uNum3);
ts_uart[uNum3].tp_handler(ts_uart[uNum3].t);
//L0_timer4_start(0);
// ts_uart[uNum3].t->reg = L0_uartN_get(uNum3);
ts_uart[uNum3].t->reg = S3BUF;
g_uart3_recv_num++;
if(ts_uart[uNum3].tp_handler != NULL){
ts_uart[uNum3].tp_handler(ts_uart[uNum3].t);
}
}
if(L0_uart3_IntTI())
if(L0_uart3_IntTI()) //如果是U0发送中断
{
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]);
S3BUF = ts_uart[uNum3].p->p[ts_uart[uNum3].p->now];
ts_uart[uNum3].p->now ++;
}
else
{
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;//可以发送下一个数据
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() //切换到接收状态
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_irq(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();
}

7
source/msp/UART3.h

@ -54,8 +54,7 @@ msp/uartx.c 底层代码 和cpu相关 缓存发送也放在里面
#define _uart3_H
#include "../bsp/bsp_config.h"
#include "../tpc/tpc_modbus.h"
#include "uartN.h"
#include "uart_x.h"
#define uNum3 2
@ -86,8 +85,8 @@ void L0_uart3_sendArray(U8 * buf, U16 len);
#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;
extern Ts_uart_recv_buf ts_uart3_recv_buf;
extern int g_uart3_recv_num;
#endif //#ifndef _uart3_H

50
source/msp/UART4.C

@ -55,14 +55,14 @@ msp/uartx.c 底层代码 和cpu相关 缓存发送也放在里面
-----------------------------------------------------------------------------------------
********************************************************************************/
#include "uart4.h"
#include "../tpc/debug.h"
//#define _USE_485
static volatile Ts_uart_send_buf idata ts_uart_send_shop;
//TP_Handler_X s_uart4_at_rec;
//TP_Handler_X s_uart4_tcp_rec;
TP_Handler_X s_uart4_rec;
TS_PH3_ccmodbus s_uart4_ack;
//发送缓冲区
static volatile Ts_uart_send_buf ts_uart_send_buf;
//接收缓冲区最多存放16个字符,这个值尽量小,但要大于实际处理协议的缓冲区大小
#define RECV_BUF_SIZE 32
static U8 uart4_recv_buf[RECV_BUF_SIZE];
Ts_uart_recv_buf ts_uart4_recv_buf;
//#define FOSC 11059200L //系统频率
//#define BAUD4 115200 //串口波特率
@ -97,21 +97,24 @@ void L0_uart4_init(void)//115200bps@11.0592MHz
void L0_uart4_buf_init(void)
{
ts_uart[uNum4].p = &ts_uart_send_shop;
//初始化协议发送缓冲区
ts_uart[uNum4].p = &ts_uart_send_buf;
ts_uart[uNum4].p->now = 0;
ts_uart[uNum4].p->ok = D_ready;
ts_uart[uNum4].t = &s_uart4_rec;
ts_uart[uNum4].t->head_0 = D_CMD_Filter1_ff;
ts_uart[uNum4].t->head_1 = D_CMD_Filter2_fe;
//初始化协议接收缓冲区
ts_uart[uNum4].t = &ts_uart4_recv_buf;
ts_uart[uNum4].t->buf = uart4_recv_buf;
ts_uart[uNum4].t->head = 0;
ts_uart[uNum4].t->ok = 0;
ts_uart[uNum4].tp_handler = L1_s2b_PH3;
ts_uart[uNum4].ack = (U8*)&s_uart4_ack;
//s_uart4_tcp_rec.head_0 = D_CMD_Filter1_ff;
//s_uart4_tcp_rec.head_1 = D_CMD_Filter2_fe;
//s_uart4_tcp_rec.head = 0;
//s_uart4_tcp_rec.ok = 0;
//串口协议解析专用字段
ts_uart[uNum4].t->head_0 = 0xAA;
ts_uart[uNum4].t->head_1 = 0x55;
ts_uart[uNum4].t->maxnum = RECV_BUF_SIZE;
ts_uart[uNum4].tp_handler = L1_s2b_rs485;
//串口初始化
L0_uart4_init();
D_uart4_ES_INT(1); //打开串口中断
@ -140,15 +143,19 @@ void INTERRUPT_uart4(void) D_SERVE_uart4// using 2
if(L0_uart4_IntRI()) //如果是U0接收中断
{
L0_uart4_IntRIClear(); //清除接收中断标志
ts_uart[uNum4].t->reg = L0_uartN_get(uNum4);
ts_uart[uNum4].tp_handler(ts_uart[uNum4].t);
// ts_uart[uNum4].t->reg = L0_uartN_get(uNum4);
ts_uart[uNum4].t->reg = S4BUF;
if(ts_uart[uNum4].tp_handler != NULL){
ts_uart[uNum4].tp_handler(ts_uart[uNum4].t);
}
}
if(L0_uart4_IntTI()) //如果是U0发送中断
{
L0_uart4_IntTIClear(); //清除发送中断标志
if(ts_uart[uNum4].p->max != ts_uart[uNum4].p->now)
{
L0_uartN_set(uNum4,ts_uart[uNum4].p->p[ts_uart[uNum4].p->now]);
// L0_uartN_set(uNum4,ts_uart[uNum4].p->p[ts_uart[uNum4].p->now]);
S4BUF = ts_uart[uNum4].p->p[ts_uart[uNum4].p->now];
ts_uart[uNum4].p->now ++;
}
else
@ -159,7 +166,6 @@ void INTERRUPT_uart4(void) D_SERVE_uart4// using 2
#if (D_UART4_485_TYPE != TYPE_485_NONE)
D_UART4_485_RX() //切换到接收状态
#endif
}
}
//NOP(); NOP(); NOP();

6
source/msp/UART4.h

@ -54,8 +54,7 @@ msp/uartx.c 底层代码 和cpu相关 缓存发送也放在里面
#define _uart4_H
#include "../bsp/bsp_config.h"
#include "../tpc/tpc_ccmodbus.h"
#include "uartN.h"
#include "uart_x.h"
#define uNum4 3
@ -81,8 +80,7 @@ void L0_uart4_sendArray(U8 * buf, U16 len);
#define L0_uart4_sendstr(buf) L0_uartN_sendstr(uNum4,buf)
#define L1_uart4_uchexArray(buf) L1_uartN_uchexArray(uNum4,buf)
extern TP_Handler_X s_uart4_rec;
extern TS_PH3_ccmodbus s_uart4_ack;
extern Ts_uart_recv_buf ts_uart4_recv_buf;
#endif //#ifndef _uart4_H

114
source/msp/time.c

@ -43,63 +43,63 @@ void timer0_isrHandle (void) D_SERVE_TIMER0
void L0_timer1_Init() //600微秒@11.0592MHz
{
#if 0
AUXR |= 0x40; //定时器时钟1T模式
TMOD &= 0x0F; //设置定时器模式
TL1 = 0x14; //设置定时初值
TH1 = 0xE6; //设置定时初值
TF1 = 0; //清除TF1标志
TR1 = 1; //定时器1开始计时
ET1 = 1; //add by cc
#else
U16 val = D_TIMER_COUNT(1,D_sys_MainFre,600);
AUXR |= 0x40; //定时器时钟1T模式
TMOD &= 0x0F; //设置定时器模式
//TL1 = 0xCD; //设置定时初始值
//TH1 = 0xD4; //设置定时初始值
TL1 = val; //设置定时初值
TH1 = val >>8; //设置定时初值
TF1 = 0; //清除TF1标志
TR1 = 1; //定时器1开始计时
ET1 = 1; //add by cc
#endif
}
void L0_timer1_restart() //600微秒@11.0592MHz
{
U16 val = D_TIMER_COUNT(1,D_sys_MainFre,600);
TR1 = 0; //先关闭,否则会重复中断,起不到resetart效果
#if 1
AUXR |= 0x40; //定时器时钟1T模式
TMOD &= 0x0F; //设置定时器模式
//TL1 = 0x14; //设置定时初值
//TH1 = 0xE6; //设置定时初值
TL1 = val; //设置定时初值
TH1 = val >>8; //设置定时初值
TF1 = 0; //清除TF1标志
TR1 = 1; //定时器1开始计时
ET1 = 1; //add by cc
#else
AUXR |= 0x40; //定时器时钟1T模式
TMOD &= 0x0F; //设置定时器模式
TL1 = 0xCD; //设置定时初始值
TH1 = 0xD4; //设置定时初始值
TF1 = 0; //清除TF1标志
TR1 = 1; //定时器1开始计时
ET1 = 1; //add by cc
#endif
}
void L0_timer1_stop(void)
{
TR1 = 0;
TF1 = 0;
}
// void L0_timer1_Init() //600微秒@11.0592MHz
// {
// #if 0
// AUXR |= 0x40; //定时器时钟1T模式
// TMOD &= 0x0F; //设置定时器模式
// TL1 = 0x14; //设置定时初值
// TH1 = 0xE6; //设置定时初值
// TF1 = 0; //清除TF1标志
// TR1 = 1; //定时器1开始计时
// ET1 = 1; //add by cc
// #else
// U16 val = D_TIMER_COUNT(1,D_sys_MainFre,600);
// AUXR |= 0x40; //定时器时钟1T模式
// TMOD &= 0x0F; //设置定时器模式
// //TL1 = 0xCD; //设置定时初始值
// //TH1 = 0xD4; //设置定时初始值
// TL1 = val; //设置定时初值
// TH1 = val >>8; //设置定时初值
// TF1 = 0; //清除TF1标志
// TR1 = 1; //定时器1开始计时
// ET1 = 1; //add by cc
// #endif
// }
// void L0_timer1_restart() //600微秒@11.0592MHz
// {
// U16 val = D_TIMER_COUNT(1,D_sys_MainFre,600);
// TR1 = 0; //先关闭,否则会重复中断,起不到resetart效果
// #if 1
// AUXR |= 0x40; //定时器时钟1T模式
// TMOD &= 0x0F; //设置定时器模式
// //TL1 = 0x14; //设置定时初值
// //TH1 = 0xE6; //设置定时初值
// TL1 = val; //设置定时初值
// TH1 = val >>8; //设置定时初值
// TF1 = 0; //清除TF1标志
// TR1 = 1; //定时器1开始计时
// ET1 = 1; //add by cc
// #else
// AUXR |= 0x40; //定时器时钟1T模式
// TMOD &= 0x0F; //设置定时器模式
// TL1 = 0xCD; //设置定时初始值
// TH1 = 0xD4; //设置定时初始值
// TF1 = 0; //清除TF1标志
// TR1 = 1; //定时器1开始计时
// ET1 = 1; //add by cc
// #endif
// }
// void L0_timer1_stop(void)
// {
// TR1 = 0;
// TF1 = 0;
// }
/******************************END*********************************/

12
source/msp/uart_x.c

@ -56,7 +56,7 @@ msp/uartx.c 底层代码 和cpu相关 缓存发送也放在里面
********************************************************************************/
#include "uart_x.h"
TS_uart_reg idata ts_uart[SERIAL_MAX_NUM] = {0};
TS_uart_reg ts_uart[SERIAL_MAX_NUM] = {0};
void L0_uartN_set(U8 uartx,U8 x) /*reentrant*/
{
@ -89,7 +89,7 @@ void L0_waitFree_uartN(U8 uartx)
ts_uart[uartx].p->over = 0;
while(ts_uart[uartx].p->ok != D_ready)
{
#if 0 //发送数据特别快时,某些情况下会导致数据发送出错
#if 1 //发送数据特别快时,某些情况下会导致数据发送出错
if(ts_uart[uartx].p->over ++ > 600000)
{
break;
@ -101,6 +101,9 @@ void L0_waitFree_uartN(U8 uartx)
void L0_uartN_sendArray(U8 uartx,void *buf,U16 len)
{
L0_waitFree_uartN(uartx);
if(len == 0){
return;
}
ts_uart[uartx].p->ok = D_clear;
ts_uart[uartx].p->over = 0;
ts_uart[uartx].p->max = len;
@ -197,15 +200,14 @@ 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)
void L0_uartN_sendArrayHex(U8 uartx,vU8 *buf,U16 n)
{
int i;
U16 i;
for(i=0;i<n;i++)
{
L0_uartN_uchex(uartx,buf[i]);
L0_uartN_uc(uartx,' ');
}
L0_uartN_0d0a(uartx);
}

39
source/msp/uart_x.h

@ -56,12 +56,12 @@ 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_uartN_free() (0 == ts_uart_send_buf[uartx].max)
#define D_uartN_busy() (0 != ts_uart_send_buf[uartx].max)
#define D_BRT_COUNT(t,clk,uartBRT) (U16)(65536- (clk / (4 * uartBRT * t)))
typedef struct _ts_uart0_send_buf_
typedef struct _ts_uart_send_buf_
{
vU8 num; //接收到的数目注意数据长度的范围
vU8 *p;
@ -70,21 +70,36 @@ typedef struct _ts_uart0_send_buf_
vU32 over; /// 结束等待标志,over累加到某个值时,结束等待
vU8 ok; /// 发送完成标志
vU8 buf[D_UART_send_buf_max + 1];
/// U8 buf2[D_send_buf2_max];
vU8 buf3[D_UART_send_buf2_max];
//// U8 buf4[D_send_buf_max];
/// U8 buf[D_send_buf_max + 1];//buffer 的第一位是 长度
}Ts_uart_send_buf;
typedef struct _ts_uart_recv_buf_
{//8byte
vU8 reg;
vU8 ok; //接收协议ok标志,串口初始化设置为0
vU8 head; //接收标志头标志,串口初始化设置0
vU8 maxnum; //接收到的数目的最大值,串口初始化设置
vU8 cashe[2];
vU8 head_0;
vU8 head_1;
vU8 tail_0;
vU8 index; //当前下标
vU8 num; //协议实际长度
vU8 *buf; ////协议缓冲,由每个串口根据需要的缓冲区大小自己定义
vU8 *sp;
vU8 *sp2; //备份值,如果协议需要备份,单独提供备份缓冲区
vU8 ocr;
vU8 crc[2];
}Ts_uart_recv_buf;
typedef struct _TS_uart_reg
{
Ts_uart_send_buf idata *p;
TP_Handler_X *t;
void (*tp_handler)(TP_Handler_X *);
U8 *ack; //ack
Ts_uart_send_buf *p;
Ts_uart_recv_buf *t;
void (*tp_handler)(Ts_uart_recv_buf *);
}TS_uart_reg;
extern TS_uart_reg idata ts_uart[SERIAL_MAX_NUM];
extern TS_uart_reg ts_uart[SERIAL_MAX_NUM];
extern void L0_uartN_init(U8 uartx);
extern void L0_uartN_set(U8 uartx,U8 x);
@ -98,7 +113,7 @@ extern void L0_uartN_uchex(U8 uartx, U8 ww);
extern void L0_uartN_ushex(U8 uartx, U16 ww);
extern void L0_uartN_ulhex(U8 uartx, U32 ww);
extern void L0_uartN_sendstr(U8 uartx,U8 *buf);
extern void L1_uartN_uchexArray(U8 uartx,vU8 *buf,U16 n);
extern void L0_uartN_sendArrayHex(U8 uartx,vU8 *buf,U16 n);
#endif //#ifndef _uartN_H

2
source/tpc/0d0a.c

@ -8,7 +8,7 @@
//对于连续的多条协议,比如:abcdefg\r\n12345\r\n,如果前一条处理不及时,可能会被后一条覆盖
void L1_s2b_0d0a(struct _tp_handler_x *p) //reentrant
void L1_s2b_0d0a(Ts_uart_recv_buf *p) //reentrant
{
if(p->head == 0)
{

2
source/tpc/0d0a.h

@ -28,6 +28,6 @@ typedef struct _s_PC1_0D0A_
// U8 pro[16]; ///解析协议用
}TS_Handle_0d0a;
#endif
extern void L1_s2b_0d0a(struct _tp_handler_x *p); //reentrant;
extern void L1_s2b_0d0a(Ts_uart_recv_buf *p); //reentrant;
#endif

2
source/tpc/ccmodbus.c

@ -131,7 +131,7 @@ void L3_ccmodbus_master_handler(TS_PH3_ccmodbus *pmodbus,MD_SLAVER_INFO *p_slave
///FF FE 08 52 16 11 22 33 44 F5 9F 发送了一个modbus协议包(8个数据52 16 11 22 33 44 F5 9F )
/// 0 1 2 3 4 5 6 7 8 9 10
/// 协议表达的意思为地址为0x52的从机, 功能码16 数据为11 22 33 44,校验码 F5 9F
void L1_s2b_PH3(struct _tp_handler_x *p)// reentrant
void L1_s2b_PH3(Ts_uart_recv_buf *p)// reentrant
{
p->cashe[1] = p->cashe[0];
p->cashe[0] = p->reg;//

2
source/tpc/ccmodbus.h

@ -92,7 +92,7 @@ typedef struct
extern U8 L3_pack_ccmodbus(TS_PH3_ccmodbus *pccmodbus, MD_SLAVER_INFO *slaver_info);
extern U16 L3_ccmodbus_slaver_ack(TS_PH3_ccmodbus *pccmodbus,TS_PH3_ccmodbus *pModbusAck);
extern void L3_ccmodbus_master_handler(TS_PH3_ccmodbus *pmodbus,MD_SLAVER_INFO *p_slaver_info);
extern void L1_s2b_PH3(struct _tp_handler_x *p);// reentrant;
extern void L1_s2b_PH3(Ts_uart_recv_buf *p);// reentrant;
#endif /* end __TPC_CCMODBUS_H_ */

241
source/tpc/debug.c

@ -1,4 +1,3 @@

/*****************************************************************************
update by cc @201501101001
@ -48,39 +47,253 @@ msp/uartx.c 底层代码 和cpu相关
//fd 01 02 03 06 fd为头 010203为数据 06为数据校验和(01+02+03)
//对于连续的多条协议,如果前一条处理不及时,可能会被后一条覆盖
void L1_s2b_PH1 (struct _tp_handler_x *p) //reentrant
void L1_s2b_debug (Ts_uart_recv_buf *p) //reentrant
{
p->ok = 1;
return;
}
//NFC协议:60 20 00 07 10 02 04 00 99 83 33 4E 36
//起始帧:60
//设备ID:20
//数据长度:00 07
//命令:10
//数据:02 04 00 99 83 33 4E
//校验:36 从起始帧到数据字段 [60 20 00 07 10 02 04 00 99 83 33 4E] 的所有字节的依次异或值
void L1_s2b_nfc (Ts_uart_recv_buf *p) //reentrant
{
if (0 == p->head)
{
if (D_HETU_FX_fi == (p->reg & p->head_0))
if (p->head_0 == (p->reg & 0xFF))
{
p->head = 1;
p->num = 1;
p->buf[0] = p->reg;
//p->ok = 1;
p->index = 0;
p->num = p->maxnum;
p->ocr = p->reg;
}
}
else
{
p->buf[p->num++] = p->reg;
if(p->num >= D_HETU_FX_buf_max) // [D_HETU_FX_buf_max == 5]
p->buf[++p->index] = p->reg;
if(p->index == 3)
{
p->ocr = p->buf[1];
p->ocr += p->buf[2];
p->ocr += p->buf[3];
if(p->ocr == p->buf[D_HETU_FX_buf_max-1])
//5个字节协议头 + 1校验 + 数据(长度由2、3字节计算)
p->num = 5 + 1 + ((p->buf[2] << 8) | (p->buf[3]));
if(p->num > p->maxnum){
//error
p->head = 0;
p->ok = 0;
return;
}
}
if(p->index < p->num - 1)
{
//计算OCR
p->ocr ^= p->reg;
}
else
{
if(p->ocr == p->buf[p->num-1])
{
if (p->ok != 1)
{
p->ok = 1;//收到 命令结束,必须有个地方清0,否则无法再次接受报文
}
//命令结束,必须有个地方清0,否则无法再次接受报文
p->ok = 1;
}
}
p->head = 0; //放在if (p->ok != 1) 外
p->head = 0;
}
}
}
//RFID协议:BB 02 22 00 11 D5 30 00 E2 00 10 71 00 00 52 9B 09 40 B4 02 EB 98 0C 7E
//帧头:BB
//Type:00命令帧 /01响应帧 /02通知帧
//Command: 07指令桢 /22单次读写 /27多次轮询 /28停止轮询 /0C选择 / B6设置功率
//数据长度:00 11
//数据:D5 30 00 E2 00 10 71 00 00 52 9B 09 40 B4 02 [EB 98]
//校验:0C 从Type到数据字段 [02 22 00 11 D5 30 00 E2 00 10 71 00 00 52 9B 09 40 B4 02 EB 98] 的所有字节的累加和
//帧尾:7E
void L1_s2b_rfid (Ts_uart_recv_buf *p) //reentrant
{
LED0 ^= 1;
if (0 == p->head)
{
if (p->head_0 == (p->reg & 0xFF))
{
p->head = 1;
p->buf[0] = p->reg;
p->index = 0;
p->num = p->maxnum;
//header字节不算累加和
p->ocr = 0;
}
}
else
{
p->buf[++p->index] = p->reg;
if(p->index == 4)
{
//5个字节协议头 + 1校验 + 1尾字节 + 数据(长度由2、3字节计算)
p->num = 5 + 1 + 1 + ((p->buf[3] << 8) | (p->buf[4]));
if(p->num > p->maxnum){
//error
p->head = 0;
p->ok = 0;
return;
}
}
if(p->index < p->num - 2)
{
//计算OCR
p->ocr += p->reg;
}
else if(p->index == p->num - 1)
{
if((p->buf[p->num - 1] == p->tail_0) && (p->ocr == p->buf[p->num-2]))
{
if (p->ok != 1)
{
//命令结束,必须有个地方清0,否则无法再次接受报文
p->ok = 1;
}
}
p->head = 0;
}
}
}
//485协议:AA 55 00 04 01 10 00 00 15
//FILTER:固定2个字节 AA55
//SLAVEID:固定1个字节,代表从机ID
//CMDER: 固定1个字节,代表命令,每个从机自己定义。
//NUM: 固定2个字节,高字节在前,代表后续DATA的长度(不包括ocr),比如0x0010,代表后续 16个字节
//DATA:(Num 个字节)数据域
//OCR:1个字节,代表校验和, = 从SlaveId开始 - DATA结束的所有字节之和。
void L1_s2b_rs485 (Ts_uart_recv_buf *p) //reentrant
{
// p->ok = 1;
// return;
if (0 == p->head)
{
if (p->head_0 == (p->reg & 0xFF))
{
p->head = 1;
p->buf[0] = p->reg;
p->index = 0;
p->num = p->maxnum;
//header字节不算累加和
p->ocr = 0;
}
}
else
{
p->buf[++p->index] = p->reg;
if(p->index == 4)
{
//1个字节协议头 + 1SlaveId + 1Cmder + 2字节数据长度 + 数据 + 1ocr
p->num = 5 + 1 + ((p->buf[3] << 8) | (p->buf[4]));
if(p->num > p->maxnum){
//error
p->head = 0;
p->ok = 0;
p->index = 0;
return;
}
}
if(p->index < p->num - 1)
{
//计算OCR
p->ocr += p->reg;
}
else if(p->index == p->num - 1)
{
if(p->ocr == p->buf[p->num-1])
{
if (p->ok != 1)
{
//命令结束,必须有个地方清0,否则无法再次接受报文
// LED0 ^= 1;
p->ok = 1;
}
}
p->head = 0;
}
}
}
// void L1_s2b_rs485 (Ts_uart_recv_buf *p) //reentrant
// {
// // LED0 ^= 1;
// // p->ok = 1;
// // return;
// if (0 == p->head)
// {
// p->buf[p->index++] = p->reg;
// if(p->index == 2){
// if (p->head_0 == p->buf[0] && p->head_1 == p->buf[1])
// {
// p->head = 1;
// p->index = 1;
// p->num = p->maxnum;
// p->ocr = 0;
// }
// else
// {
// p->head = 0;
// p->ok = 0;
// p->index = 0;
// //往前移动一位
// p->buf[p->index++] = p->buf[1];
// }
// }
// }
// else
// {
// p->buf[++p->index] = p->reg;
// if(p->index == 5)
// {
// //2个字节协议头 + 1SlaveId + 1Cmder + 2字节数据长度 + 数据 + 1ocr
// p->num = 6 + 1 + ((p->buf[4] << 8) | (p->buf[5]));
// if(p->num > p->maxnum){
// //error
// p->head = 0;
// p->ok = 0;
// p->index = 0;
// return;
// }
// }
// if(p->index < p->num - 1)
// {
// //计算OCR
// p->ocr += p->reg;
// }
// else if(p->index == p->num - 1)
// {
// if(p->ocr == p->buf[p->num-1])
// {
// if (p->ok != 1)
// {
// //命令结束,必须有个地方清0,否则无法再次接受报文
// p->ok = 1;
// }
// }
// p->head = 0;
// p->index = 0;
// }
// }
// }
/******************************************************************************
** End Of File

64
source/tpc/debug.h

@ -38,9 +38,71 @@ typedef struct
vU8 ocr;
}TS_P_debug;
#define TPC_NFC_DAT_MAX 16
typedef struct _tpc_nfc_
{
U8 head;
U8 slaveId;
U8 num[2];
U8 cmd;
U8 buf[TPC_NFC_DAT_MAX];
U8 ocr;
}TPC_NFC;
#define TPC_RFID_DAT_MAX 32
typedef struct _tpc_rfid_
{
U8 head;
U8 type;
U8 cmd;
U8 num[2];
U8 buf[TPC_RFID_DAT_MAX];
U8 ocr;
U8 tail;
}TPC_RFID;
#define TPC_RS485_DAT_MAX 32
typedef struct _tpc_rs485_
{
U8 head[1];
U8 slaveId;
U8 cmd;
U8 num[2];
U8 buf[TPC_RS485_DAT_MAX];
U8 ocr;
}TPC_RS485;
// #define TPC_RS485_DAT_MAX 32
// typedef struct _tpc_rs485_
// {
// U8 head[2];
// U8 slaveId;
// U8 cmd;
// U8 num[2];
// U8 buf[TPC_RS485_DAT_MAX];
// U8 ocr;
// }TPC_RS485;
#define TPC_RS485_ACK_DAT_MAX 32
typedef struct _tpc_rs485_ack_
{
U8 head[1];
U8 slaveId;
U8 cmd;
U8 num[2];
U8 buf[TPC_RS485_ACK_DAT_MAX];
U8 ocr;
}TPC_RS485_ACK;
#define D_HETU_FX_buf_max 5 //定长协议 长度为5
#define D_HETU_FX_fi 0x60
extern void L1_s2b_PH1 (struct _tp_handler_x *p);// reentrant;
extern void L1_s2b_debug(Ts_uart_recv_buf *p);
extern void L1_s2b_nfc (Ts_uart_recv_buf *p);
extern void L1_s2b_rfid (Ts_uart_recv_buf *p);
extern void L1_s2b_rs485 (Ts_uart_recv_buf *p);
extern void L1_s2b_PH1 (Ts_uart_recv_buf *p);// reentrant;
#endif /* end __TPC_DEBUG_H_ */
/*****************************************************************************

8
source/tpc/modbus.c

@ -36,20 +36,22 @@ msp/uartx.c 底层代码 和cpu相关
//MODBUS协议解析函数
//超出D_tp_handle_x_len,不继续保存数据
void L1_s2b_PH4(struct _tp_handler_x *p)
void L1_s2b_PH4(Ts_uart_recv_buf *p)
{
p->ok = 1;
return;
//p->modbusstmp = D_sys_now;
if(p->head == 0)
{
p->head = 1;
p->max = D_TPC_HANDLER_X_LEN;
p->maxnum = D_TPC_HANDLER_X_LEN;
p->sp = p->buf;
p->num = 0;
p->sp[p->num++] = p->reg;
}
else
{
if(p->num < p->max)
if(p->num < p->maxnum)
{
p->sp[p->num++] = p->reg;
}

4
source/tpc/modbus.h

@ -101,8 +101,8 @@ extern U8 L3_pack_modbus(TS_PH4_modbus *pmodbus, MD_SLAVER_INFO *slaver_info);
//extern U8 L3_pack_modbusack(TS_PH4_modbus *pmodbus ,U8 slaver, U8 oper, U8 bufsize);
extern U16 L3_modbus_slaver_ack(TS_PH4_modbus *pmodbus,TS_PH4_modbus *pModbusAck);
extern void L3_modbus_master_handler(TS_PH4_modbus *pmodbus,MD_SLAVER_INFO *p_slaver_info);
extern void L1_s2b_PH4(struct _tp_handler_x *p);
extern void L1_modbus_split(struct _tp_handler_x *p);
extern void L1_s2b_PH4(Ts_uart_recv_buf *p);
extern void L1_modbus_split(Ts_uart_recv_buf *p);
#endif /* end __TPC_UART_H_ */

18
source/tpc/tpc_x.h

@ -3,22 +3,6 @@
#include "../bsp/bsp_config.h"
#include "../clib/type.h"
typedef struct _tp_handler_x
{//8byte
vU8 reg;
vU8 head; //接收标志头标志
vU8 cashe[2];
vU8 head_0;
vU8 head_1;
vU8 num; //接收到的数据的计数, 随着数据接收而变化注意数据长度的范围
vU8 ok; //接收协议ok标志
vU8 max; //接收到的数目的最大值
vU8 buf[D_TPC_HANDLER_X_LEN+16];////协议缓冲
vU8 *sp;
vU8 *sp2; //备份值,如果协议需要备份,单独提供备份缓冲区
vU8 ocr;
vU8 crc[2];
}TP_Handler_X;
#include "../msp/uart_x.h"
#endif

Loading…
Cancel
Save