diff --git a/checher_slave.uvoptx b/coder_2channel.uvoptx
similarity index 88%
rename from checher_slave.uvoptx
rename to coder_2channel.uvoptx
index a38ef89..d0daa00 100644
--- a/checher_slave.uvoptx
+++ b/coder_2channel.uvoptx
@@ -103,7 +103,7 @@
1
0
0
- 0
+ 4
@@ -114,18 +114,18 @@
- BIN\UL2CM3.DLL
+ Segger\JL2CM3.dll
0
UL2CM3
- UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0STM32F10x_512 -FL080000 -FS08000000 -FP0($$Device:STM32F103RC$Flash\STM32F10x_512.FLM)
+ UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0STM32F10x_512 -FL080000 -FS08000000 -FP0($$Device:STM32F103RE$Flash\STM32F10x_512.FLM)
0
JL2CM3
- -U69655983 -O78 -S5 -ZTIFSpeedSel1000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(1BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_512.FLM -FS08000000 -FL080000 -FP0($$Device:STM32F103RC$Flash\STM32F10x_512.FLM)
+ -U69655983 -O78 -S5 -ZTIFSpeedSel1000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(1BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_512.FLM -FS08000000 -FL080000 -FP0($$Device:STM32F103RE$Flash\STM32F10x_512.FLM)
0
@@ -499,7 +499,7 @@
core
- 0
+ 1
0
0
0
@@ -891,18 +891,6 @@
0
0
-
- 4
- 33
- 1
- 0
- 0
- 0
- .\source\interface\if_can.c
- if_can.c
- 0
- 0
-
@@ -913,7 +901,7 @@
0
5
- 34
+ 33
1
0
0
@@ -925,7 +913,7 @@
5
- 35
+ 34
1
0
0
@@ -937,7 +925,7 @@
5
- 36
+ 35
1
0
0
@@ -949,218 +937,6 @@
-
- elec_det
- 1
- 0
- 0
- 0
-
- 6
- 37
- 1
- 0
- 0
- 0
- .\source\elec_det\base\delay.c
- delay.c
- 0
- 0
-
-
- 6
- 38
- 1
- 0
- 0
- 0
- .\source\elec_det\base\utility.c
- utility.c
- 0
- 0
-
-
- 6
- 39
- 1
- 0
- 0
- 0
- .\source\elec_det\hardware\adc_cfg.c
- adc_cfg.c
- 0
- 0
-
-
- 6
- 40
- 1
- 0
- 0
- 0
- .\source\elec_det\hardware\dac_cfg.c
- dac_cfg.c
- 0
- 0
-
-
- 6
- 41
- 1
- 0
- 0
- 0
- .\source\elec_det\hardware\gpio_cfg.c
- gpio_cfg.c
- 0
- 0
-
-
- 6
- 42
- 1
- 0
- 0
- 0
- .\source\elec_det\hardware\hardware.c
- hardware.c
- 0
- 0
-
-
- 6
- 43
- 1
- 0
- 0
- 0
- .\source\elec_det\hardware\jw3425iic.c
- jw3425iic.c
- 0
- 0
-
-
- 6
- 44
- 1
- 0
- 0
- 0
- .\source\elec_det\hardware\power.c
- power.c
- 0
- 0
-
-
- 6
- 45
- 1
- 0
- 0
- 0
- .\source\elec_det\hardware\timer_cfg.c
- timer_cfg.c
- 0
- 0
-
-
- 6
- 46
- 1
- 0
- 0
- 0
- .\source\elec_det\driver\EWDriver.c
- EWDriver.c
- 0
- 0
-
-
- 6
- 47
- 1
- 0
- 0
- 0
- .\source\elec_det\driver\JQDriver.c
- JQDriver.c
- 0
- 0
-
-
- 6
- 48
- 1
- 0
- 0
- 0
- .\source\elec_det\driver\LGDriver.c
- LGDriver.c
- 0
- 0
-
-
- 6
- 49
- 1
- 0
- 0
- 0
- .\source\elec_det\driver\XTDriver.c
- XTDriver.c
- 0
- 0
-
-
- 6
- 50
- 1
- 0
- 0
- 0
- .\source\elec_det\interface\BaseChecker.c
- BaseChecker.c
- 0
- 0
-
-
- 6
- 51
- 1
- 0
- 0
- 0
- .\source\elec_det\interface\JQChecker.c
- JQChecker.c
- 0
- 0
-
-
- 6
- 52
- 1
- 0
- 0
- 0
- .\source\elec_det\interface\XTChecker.c
- XTChecker.c
- 0
- 0
-
-
- 6
- 53
- 1
- 0
- 0
- 0
- .\source\elec_det\elec_det.c
- elec_det.c
- 0
- 0
-
-
-
rtt
0
@@ -1168,8 +944,8 @@
0
0
- 7
- 54
+ 6
+ 36
1
0
0
@@ -1180,8 +956,8 @@
0
- 7
- 55
+ 6
+ 37
1
0
0
@@ -1200,8 +976,8 @@
0
0
- 8
- 56
+ 7
+ 38
1
0
0
@@ -1212,8 +988,8 @@
0
- 8
- 57
+ 7
+ 39
1
0
0
@@ -1224,8 +1000,8 @@
0
- 8
- 58
+ 7
+ 40
1
0
0
@@ -1236,8 +1012,8 @@
0
- 8
- 59
+ 7
+ 41
1
0
0
@@ -1248,8 +1024,8 @@
0
- 8
- 60
+ 7
+ 42
1
0
0
@@ -1260,8 +1036,8 @@
0
- 8
- 61
+ 7
+ 43
1
0
0
@@ -1272,8 +1048,8 @@
0
- 8
- 62
+ 7
+ 44
1
0
0
@@ -1284,8 +1060,8 @@
0
- 8
- 63
+ 7
+ 45
1
0
0
@@ -1296,8 +1072,8 @@
0
- 8
- 64
+ 7
+ 46
1
0
0
@@ -1308,8 +1084,8 @@
0
- 8
- 65
+ 7
+ 47
1
0
0
@@ -1320,8 +1096,8 @@
0
- 8
- 66
+ 7
+ 48
1
0
0
@@ -1332,8 +1108,8 @@
0
- 8
- 67
+ 7
+ 49
1
0
0
@@ -1344,8 +1120,8 @@
0
- 8
- 68
+ 7
+ 50
1
0
0
@@ -1356,8 +1132,8 @@
0
- 8
- 69
+ 7
+ 51
1
0
0
@@ -1368,8 +1144,8 @@
0
- 8
- 70
+ 7
+ 52
1
0
0
@@ -1380,8 +1156,8 @@
0
- 8
- 71
+ 7
+ 53
1
0
0
@@ -1392,8 +1168,8 @@
0
- 8
- 72
+ 7
+ 54
1
0
0
@@ -1404,8 +1180,8 @@
0
- 8
- 73
+ 7
+ 55
1
0
0
@@ -1416,8 +1192,8 @@
0
- 8
- 74
+ 7
+ 56
2
0
0
@@ -1431,13 +1207,13 @@
soft
- 0
+ 1
0
0
0
- 9
- 75
+ 8
+ 57
1
0
0
@@ -1448,8 +1224,8 @@
0
- 9
- 76
+ 8
+ 58
1
0
0
@@ -1460,8 +1236,8 @@
0
- 9
- 77
+ 8
+ 59
1
0
0
@@ -1472,8 +1248,8 @@
0
- 9
- 78
+ 8
+ 60
1
0
0
@@ -1484,8 +1260,8 @@
0
- 9
- 79
+ 8
+ 61
1
0
0
@@ -1496,8 +1272,8 @@
0
- 9
- 80
+ 8
+ 62
1
0
0
@@ -1508,8 +1284,8 @@
0
- 9
- 81
+ 8
+ 63
1
0
0
@@ -1520,8 +1296,8 @@
0
- 9
- 82
+ 8
+ 64
1
0
0
@@ -1532,8 +1308,8 @@
0
- 9
- 83
+ 8
+ 65
1
0
0
@@ -1544,8 +1320,8 @@
0
- 9
- 84
+ 8
+ 66
1
0
0
@@ -1556,8 +1332,8 @@
0
- 9
- 85
+ 8
+ 67
1
0
0
@@ -1576,8 +1352,20 @@
0
0
- 10
- 86
+ 9
+ 68
+ 1
+ 0
+ 0
+ 0
+ .\source\task\prot_mcu.c
+ prot_mcu.c
+ 0
+ 0
+
+
+ 9
+ 69
1
0
0
@@ -1588,8 +1376,20 @@
0
- 10
- 87
+ 9
+ 70
+ 1
+ 0
+ 0
+ 0
+ .\source\task\moter.c
+ moter.c
+ 0
+ 0
+
+
+ 9
+ 71
1
0
0
@@ -1600,8 +1400,8 @@
0
- 10
- 88
+ 9
+ 72
1
0
0
@@ -1612,8 +1412,32 @@
0
- 10
- 89
+ 9
+ 73
+ 1
+ 0
+ 0
+ 0
+ .\source\task\tran_for_checker.c
+ tran_for_checker.c
+ 0
+ 0
+
+
+ 9
+ 74
+ 1
+ 0
+ 0
+ 0
+ .\source\task\tran_for_coder2.c
+ tran_for_coder2.c
+ 0
+ 0
+
+
+ 9
+ 75
1
0
0
@@ -1624,8 +1448,44 @@
0
- 10
- 90
+ 9
+ 76
+ 1
+ 0
+ 0
+ 0
+ .\source\task\handle.c
+ handle.c
+ 0
+ 0
+
+
+ 9
+ 77
+ 1
+ 0
+ 0
+ 0
+ .\source\task\handle_for_checker.c
+ handle_for_checker.c
+ 0
+ 0
+
+
+ 9
+ 78
+ 1
+ 0
+ 0
+ 0
+ .\source\task\handle_for_coder.c
+ handle_for_coder.c
+ 0
+ 0
+
+
+ 9
+ 79
1
0
0
@@ -1636,14 +1496,26 @@
0
- 10
- 91
+ 9
+ 80
1
0
0
0
- .\source\task\tran_for_slave.c
- tran_for_slave.c
+ .\source\task\process.c
+ process.c
+ 0
+ 0
+
+
+ 9
+ 81
+ 1
+ 0
+ 0
+ 0
+ .\source\task\input.c
+ input.c
0
0
@@ -1656,8 +1528,8 @@
0
0
- 11
- 92
+ 10
+ 82
1
0
0
@@ -1671,13 +1543,13 @@
coder
- 0
+ 1
0
0
0
- 12
- 93
+ 11
+ 83
1
0
0
@@ -1688,8 +1560,8 @@
0
- 12
- 94
+ 11
+ 84
1
0
0
@@ -1700,8 +1572,8 @@
0
- 12
- 95
+ 11
+ 85
1
0
0
@@ -1712,8 +1584,8 @@
0
- 12
- 96
+ 11
+ 86
1
0
0
@@ -1724,8 +1596,8 @@
0
- 12
- 97
+ 11
+ 87
1
0
0
@@ -1736,8 +1608,8 @@
0
- 12
- 98
+ 11
+ 88
1
0
0
@@ -1756,8 +1628,8 @@
0
0
- 13
- 99
+ 12
+ 89
5
0
0
@@ -1776,8 +1648,8 @@
0
0
- 14
- 100
+ 13
+ 90
5
0
0
@@ -1788,8 +1660,8 @@
0
- 14
- 101
+ 13
+ 91
5
0
0
diff --git a/checher_slave.uvprojx b/coder_2channel.uvprojx
similarity index 90%
rename from checher_slave.uvprojx
rename to coder_2channel.uvprojx
index e8a35b5..3c1a6d4 100644
--- a/checher_slave.uvprojx
+++ b/coder_2channel.uvprojx
@@ -10,20 +10,20 @@
app
0x4
ARM-ADS
- 5060960::V5.06 update 7 (build 960)::.\ARMCC
+ 5060750::V5.06 update 6 (build 750)::ARMCC
0
- STM32F103RC
+ STM32F103RE
STMicroelectronics
Keil.STM32F1xx_DFP.2.1.0
http://www.keil.com/pack/
- IRAM(0x20000000,0xC000) IROM(0x08000000,0x40000) CPUTYPE("Cortex-M3") CLOCK(12000000) ELITTLE
+ IRAM(0x20000000,0x10000) IROM(0x08000000,0x80000) CPUTYPE("Cortex-M3") CLOCK(12000000) ELITTLE
- UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_512 -FS08000000 -FL080000 -FP0($$Device:STM32F103RC$Flash\STM32F10x_512.FLM))
+ UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_512 -FS08000000 -FL080000 -FP0($$Device:STM32F103RE$Flash\STM32F10x_512.FLM))
0
- $$Device:STM32F103RC$Device\Include\stm32f10x.h
+ $$Device:STM32F103RE$Device\Include\stm32f10x.h
@@ -33,7 +33,7 @@
- $$Device:STM32F103RC$SVD\STM32F103xx.svd
+ $$Device:STM32F103RE$SVD\STM32F103xx.svd
0
0
@@ -49,7 +49,7 @@
1
.\Objects\app\
- checker_slave_app
+ coder_2channel_app
1
0
1
@@ -138,7 +138,7 @@
1
BIN\UL2CM3.DLL
-
+ "" ()
@@ -185,7 +185,6 @@
0
0
0
- 0
0
0
8
@@ -246,12 +245,12 @@
0
0x20000000
- 0xc000
+ 0x10000
1
0x8000000
- 0x40000
+ 0x80000
0
@@ -276,7 +275,7 @@
1
0x8004000
- 0x40000
+ 0x80000
1
@@ -301,7 +300,7 @@
0
0x20000020
- 0xc000
+ 0x10000
0
@@ -339,7 +338,7 @@
--diag_suppress=550,177 --locale=english
STM32F10X_HD,USE_STDPERIPH_DRIVER,RT_THREAD
- .\source\interface;.\source\core;.\source\stm32lib\inc;.\source\main;.\source\RTT;.\source\rt_thread\include;.\source\rt_thread;.\source\soft;.\source\task;.\source\dev;.\source\codec;.\source\coder;.\source\elec_det
+ .\source\interface;.\source\core;.\source\stm32lib\inc;.\source\main;.\source\RTT;.\source\rt_thread\include;.\source\rt_thread;.\source\soft;.\source\task;.\source\dev;.\source\codec;.\source\coder
@@ -352,7 +351,7 @@
0
0
0
- 4
+ 0
@@ -558,11 +557,6 @@
1
.\source\interface\if_gpioout.c
-
- if_can.c
- 1
- .\source\interface\if_can.c
-
@@ -585,147 +579,6 @@
-
- elec_det
-
-
- delay.c
- 1
- .\source\elec_det\base\delay.c
-
-
- utility.c
- 1
- .\source\elec_det\base\utility.c
-
-
- adc_cfg.c
- 1
- .\source\elec_det\hardware\adc_cfg.c
-
-
- dac_cfg.c
- 1
- .\source\elec_det\hardware\dac_cfg.c
-
-
- gpio_cfg.c
- 1
- .\source\elec_det\hardware\gpio_cfg.c
-
-
- hardware.c
- 1
- .\source\elec_det\hardware\hardware.c
-
-
- jw3425iic.c
- 1
- .\source\elec_det\hardware\jw3425iic.c
-
-
- power.c
- 1
- .\source\elec_det\hardware\power.c
-
-
- timer_cfg.c
- 1
- .\source\elec_det\hardware\timer_cfg.c
-
-
- EWDriver.c
- 1
- .\source\elec_det\driver\EWDriver.c
-
-
- JQDriver.c
- 1
- .\source\elec_det\driver\JQDriver.c
-
-
- LGDriver.c
- 1
- .\source\elec_det\driver\LGDriver.c
-
-
- 2
- 0
- 0
- 0
- 0
- 0
- 2
- 2
- 2
- 2
- 11
-
-
- 1
-
-
-
- 2
- 0
- 2
- 2
- 2
- 2
- 2
- 2
- 2
- 2
- 0
- 2
- 2
- 2
- 2
- 2
- 0
- 0
- 2
- 2
- 2
- 2
- 2
-
-
-
-
-
-
-
-
-
-
-
- XTDriver.c
- 1
- .\source\elec_det\driver\XTDriver.c
-
-
- BaseChecker.c
- 1
- .\source\elec_det\interface\BaseChecker.c
-
-
- JQChecker.c
- 1
- .\source\elec_det\interface\JQChecker.c
-
-
- XTChecker.c
- 1
- .\source\elec_det\interface\XTChecker.c
-
-
- elec_det.c
- 1
- .\source\elec_det\elec_det.c
-
-
-
rtt
@@ -904,11 +757,21 @@
task
+
+ prot_mcu.c
+ 1
+ .\source\task\prot_mcu.c
+
prot_uc.c
1
.\source\task\prot_uc.c
+
+ moter.c
+ 1
+ .\source\task\moter.c
+
commend.c
1
@@ -919,20 +782,50 @@
1
.\source\task\transmit.c
+
+ tran_for_checker.c
+ 1
+ .\source\task\tran_for_checker.c
+
+
+ tran_for_coder2.c
+ 1
+ .\source\task\tran_for_coder2.c
+
tran_for_coder2ch.c
1
.\source\task\tran_for_coder2ch.c
+
+ handle.c
+ 1
+ .\source\task\handle.c
+
+
+ handle_for_checker.c
+ 1
+ .\source\task\handle_for_checker.c
+
+
+ handle_for_coder.c
+ 1
+ .\source\task\handle_for_coder.c
+
mod_signals.c
1
.\source\task\mod_signals.c
- tran_for_slave.c
+ process.c
1
- .\source\task\tran_for_slave.c
+ .\source\task\process.c
+
+
+ input.c
+ 1
+ .\source\task\input.c
@@ -1063,7 +956,7 @@
boot
0x4
ARM-ADS
- 5060960::V5.06 update 7 (build 960)::.\ARMCC
+ 5060750::V5.06 update 6 (build 750)::ARMCC
0
@@ -1102,7 +995,7 @@
1
.\Objects\boot\
- checker_slave_boot
+ coder_2channel_boot
1
0
1
@@ -1238,7 +1131,6 @@
0
0
0
- 0
0
0
8
@@ -1405,7 +1297,7 @@
0
0
0
- 4
+ 0
@@ -1713,62 +1605,6 @@
1
.\source\interface\if_gpioout.c
-
- if_can.c
- 1
- .\source\interface\if_can.c
-
-
- 2
- 0
- 0
- 0
- 0
- 0
- 2
- 2
- 2
- 2
- 11
-
-
- 1
-
-
-
- 2
- 0
- 2
- 2
- 2
- 2
- 2
- 2
- 2
- 2
- 0
- 2
- 2
- 2
- 2
- 2
- 0
- 0
- 2
- 2
- 2
- 2
- 2
-
-
-
-
-
-
-
-
-
-
@@ -1791,165 +1627,6 @@
-
- elec_det
-
-
- 0
- 0
- 0
- 0
- 0
- 0
- 2
- 2
- 2
- 2
- 11
-
-
- 1
-
-
-
- 2
- 0
- 2
- 2
- 2
- 2
- 2
- 2
- 2
- 2
- 0
- 2
- 2
- 2
- 2
- 2
- 0
- 0
- 2
- 2
- 2
- 2
- 2
-
-
-
-
-
-
-
-
- 2
- 2
- 2
- 2
- 2
- 2
- 2
- 2
- 2
- 0
-
-
-
-
-
-
-
-
-
-
-
- delay.c
- 1
- .\source\elec_det\base\delay.c
-
-
- utility.c
- 1
- .\source\elec_det\base\utility.c
-
-
- adc_cfg.c
- 1
- .\source\elec_det\hardware\adc_cfg.c
-
-
- dac_cfg.c
- 1
- .\source\elec_det\hardware\dac_cfg.c
-
-
- gpio_cfg.c
- 1
- .\source\elec_det\hardware\gpio_cfg.c
-
-
- hardware.c
- 1
- .\source\elec_det\hardware\hardware.c
-
-
- jw3425iic.c
- 1
- .\source\elec_det\hardware\jw3425iic.c
-
-
- power.c
- 1
- .\source\elec_det\hardware\power.c
-
-
- timer_cfg.c
- 1
- .\source\elec_det\hardware\timer_cfg.c
-
-
- EWDriver.c
- 1
- .\source\elec_det\driver\EWDriver.c
-
-
- JQDriver.c
- 1
- .\source\elec_det\driver\JQDriver.c
-
-
- LGDriver.c
- 1
- .\source\elec_det\driver\LGDriver.c
-
-
- XTDriver.c
- 1
- .\source\elec_det\driver\XTDriver.c
-
-
- BaseChecker.c
- 1
- .\source\elec_det\interface\BaseChecker.c
-
-
- JQChecker.c
- 1
- .\source\elec_det\interface\JQChecker.c
-
-
- XTChecker.c
- 1
- .\source\elec_det\interface\XTChecker.c
-
-
- elec_det.c
- 1
- .\source\elec_det\elec_det.c
-
-
-
rtt
@@ -2906,7 +2583,7 @@
2
2
2
- 0
+ 2
@@ -3448,7 +3125,7 @@
2
2
2
- 0
+ 2
@@ -3459,11 +3136,21 @@
+
+ prot_mcu.c
+ 1
+ .\source\task\prot_mcu.c
+
prot_uc.c
1
.\source\task\prot_uc.c
+
+ moter.c
+ 1
+ .\source\task\moter.c
+
commend.c
1
@@ -3474,20 +3161,50 @@
1
.\source\task\transmit.c
+
+ tran_for_checker.c
+ 1
+ .\source\task\tran_for_checker.c
+
+
+ tran_for_coder2.c
+ 1
+ .\source\task\tran_for_coder2.c
+
tran_for_coder2ch.c
1
.\source\task\tran_for_coder2ch.c
+
+ handle.c
+ 1
+ .\source\task\handle.c
+
+
+ handle_for_checker.c
+ 1
+ .\source\task\handle_for_checker.c
+
+
+ handle_for_coder.c
+ 1
+ .\source\task\handle_for_coder.c
+
mod_signals.c
1
.\source\task\mod_signals.c
- tran_for_slave.c
+ process.c
1
- .\source\task\tran_for_slave.c
+ .\source\task\process.c
+
+
+ input.c
+ 1
+ .\source\task\input.c
@@ -3552,7 +3269,7 @@
2
2
2
- 0
+ 2
@@ -3631,7 +3348,7 @@
2
2
2
- 0
+ 2
@@ -3709,13 +3426,4 @@
-
-
-
- checher_slave
- 1
-
-
-
-
diff --git a/source/ReadMe.txt b/source/ReadMe.txt
index ce794f3..33258f4 100644
--- a/source/ReadMe.txt
+++ b/source/ReadMe.txt
@@ -177,7 +177,6 @@
心跳数据在收到回复之后也会继续发送
芯片异常时不检测电容
str_is_print_str 函数中,len为0时返回0
-2023.10.6
- 移植与雷管通信相关代码,编译通过
+
\ No newline at end of file
diff --git a/source/codec/codec.c b/source/codec/codec.c
index b8e2bdd..5fea64b 100644
--- a/source/codec/codec.c
+++ b/source/codec/codec.c
@@ -12,7 +12,6 @@
#include "crc.h"
#include "dev_flash.h"
#include "codec.h"
-#include "elec_det.h"
@@ -200,76 +199,6 @@ protuc_codec_export(ym_coder,protu_decode2,protu_encode2);
-// 小板协议解码
-array_def *protm_decode(protu_def *p,array_def *data)
-{
- array_def *r=arr_creat();
- param_check(r);
- str_set(p->str_err,"ok");
- if(arr_length(data)<10)
- {
- DBG_WARN("recv data len too less.");
- DBG_WARN("data=%s",str_temp(arr_string(data)));
- str_set(p->str_err,"recv data len too less.");
- return r;
- }
- uint8_t src=arr_get(data,4);
- uint8_t dst=arr_get(data,5);
- if((src!=0)||(dst!=elec_local_addr())){
- DBG_WARN("src_addr/dst_addr not allowed.");
- DBG_WARN("data=%s",str_temp(arr_string(data)));
- str_set(p->str_err,"src_addr/dst_addr not allowed.");
- return r;
- }
- uint16_t len=arr_get(data,2)|(arr_get(data,3)<<8);
- uint8_t crc=crc_crc8(arr_data(data),arr_length(data)-1);
- if(len!=arr_length(data))
- {
- // 如果长度不相等则产生了数据丢失
- DBG_WARN("recv data have lossed.");
- str_set(p->str_err,"recv data have lossed.");
- return r;
- }
- uint16_t no=arr_get(data,7)|(arr_get(data,8)<<8);
- uint16_t h_no=p->cmd_no;
- if(no!=h_no)
- {
- // 发送一条指令等待其返回,此时流水号应相同
- //DBG_WARN("slave_addr=%d cmd_no error:h_no=%d,no=%d.",src,h_no,no);
- //str_set(p->str_err,"cmd no err.");
- //return r;
- }
- if(crc!=arr_get(data,-1))
- {
- DBG_WARN("recv data crc check error:%02x,%02x.",crc,arr_get(data,-1));
- str_set(p->str_err,"crc check err.");
- }
- p->cmd=arr_get(data,6);
- arr_delete(r);
- return arr_mid(data,9,len-10);
-}
-// 编码
-array_def *protm_encode(protu_def *p,array_def *data)
-{
- array_def *t=arr_creat();
- param_check(t);
- uint16_t len=arr_length(data)+10;
- arr_append(t,'Y');
- arr_append(t,'e');
- arr_append(t,len&0xff);
- arr_append(t,len>>8);
- arr_append(t,elec_local_addr());// 源地址
- arr_append(t,0);// 目标地址
- arr_append(t,p->cmd);// 命令码
- arr_append(t,p->cmd_no&0xff);
- arr_append(t,p->cmd_no>>8);
- arr_appends_from(t,data);
- arr_append(t,crc_crc8(arr_data(t),arr_length(t)));
- return t;
-}
-
-protuc_codec_export(ym_slave,protm_decode,protm_encode);
-
diff --git a/source/dev/dev_flash.c b/source/dev/dev_flash.c
index e060b43..79823ed 100644
--- a/source/dev/dev_flash.c
+++ b/source/dev/dev_flash.c
@@ -37,6 +37,8 @@ scheme 109~110
#define FLASH_APP_SECTOR_NUM (50)
#define FLASH_BUFF_SECTOR (58)
#define FLASH_BUFF_SECTOR_NUM (50)
+#define FLASH_BUFF_SECTOR (58)
+#define FLASH_BUFF_SECTOR_NUM (50)
#define FLASH_PARAM_SECTOR (108)
#define FLASH_PARAM_SECTOR_NUM (1)
#define FLASH_SCHEME_SECTOR (109)
diff --git a/source/elec_det/base/define.h b/source/elec_det/base/define.h
deleted file mode 100644
index 8e9feae..0000000
--- a/source/elec_det/base/define.h
+++ /dev/null
@@ -1,139 +0,0 @@
-#ifndef DEFINE_H_
-#define DEFINE_H_
-#include
-#include
-#include
-#include
-#include "stm32f10x.h"
-#include "misc.h"
-#include "stm32f10x_adc.h"
-#include "stm32f10x_dma.h"
-#include "stm32f10x_gpio.h"
-#include "stm32f10x_usart.h"
-#include "stm32f10x_rcc.h"
-#include "stm32f10x_tim.h"
-#include "stm32f10x_dac.h"
-#include "stm32f10x_i2c.h"
-#define UNUSED(X) (void)X
-
-#define SoftVersion 0x000D
-
-
-#if __IF_PORT_UART
-//是否使用通信缓存
-#define APP_COMM_USE_FIFO 0
-//命令通信接口
-#define APP_COMD_CAN 0
-#define APP_COMD_USART 1
-
-#else
-
-//是否使用通信缓存
-#define APP_COMM_USE_FIFO 1
-//命令通信接口
-#define APP_COMD_CAN 1
-#define APP_COMD_USART 1
-
-#endif
-
-
-typedef enum{
- FUN_E = ((uint8_t)0),//使能
- FUN_D = ((uint8_t)1) //失能
-}FUNState_e;
-
-typedef union{
-uint32_t ul_data;
-uint16_t us_data;
-uint8_t uc_data;
-uint16_t us_buf[2];
-uint8_t uc_buf[4];
-}Seq_Buf_En;
-
-
-
-
-
-
-#define APP_BEG_ADDR 0x8004000
-#define APP_END_ADDR 0x8024000
-
-//#define APP_TEST_BOARD_CFG 0x803E800
-#define MC_CODE_ADDR 0x803B000
-#define APP_TEST_PLAN_ADDR 0x803F000
-#define APP_TEST_BOOTFLAG_ADDR 0x803F800
-
-#define FCM_END_ADDR 0x8040000
-#define FMC_PAGE_SIZE ((uint16_t)0x800U)
-
-#define APP_TEST_PLANINFO_SIZE 2048
-
-
-
-//系统事件定义
-#define U1_RX_FRAME_EVENT 0x01
-#define UART_MC_FRAME_EVENT 0x02
-#define CAN_MC_FRAME_EVENT 0x04
-#define TRANS_FRAME_EVENT 0x08
-
-#define UART_TX_END_EVENT 1
-
-#define EP1_CMD_FRAME_EVENT 1
-#define EPJ_CMD_FRAME_EVENT 1
-#define EP2_CMD_FRAME_EVENT 1
-
-#define USART_APP_EXCE_EVENT 1
-#define EP_HEARTBEAD_EVENT 5
-
-
-/******************总线电压倍率*****/
-#define VH_Mutli 21
-#define VM_Mutli 21
-#define BOAED_SEQ_NUM_SIZE 20
-extern struct rt_event usart1_rx_event;
-#pragma pack(1)
-typedef struct {
-uint32_t bootflag; //更新标志
-uint16_t resistor_diff;//
-uint16_t hard_v;
-uint32_t mc_ICodeCrc32;
-uint8_t sqNum[BOAED_SEQ_NUM_SIZE];
-}BoardInfo_st;
-
-typedef union{
-BoardInfo_st boardinfo;
-uint32_t ul_buf[32];
-}BoardInfo_un;
-
-typedef struct {
-
- uint8_t app_run_flag;
- uint8_t device_id;
- uint16_t chip_temp;
- uint16_t v2p5_adc;
- uint16_t v1p25_adc;
- uint16_t adc_shake;
- uint16_t bus_5p5v;
- uint16_t bus_26v;
- uint16_t hard_v;
- uint16_t soft_v;
- uint16_t resistor_diff;
- uint32_t plan_id;
-
-}BoartCheck_st;
-
-#pragma pack()
-
-extern BoartCheck_st board_st;
-extern BoardInfo_un boardinfo_un;
-
-//检测小板初始化
-void Ye_BoardInit(void);
-/*
- 测试小板上电自检
-*/
-void Ye_BoardCheck(void);
-//
-uint8_t UidCode_YM2JQ(uint8_t* pstJQUID, uint8_t* pstYMUID);
- uint32_t GetPasswordByUidCode(uint8_t* uidcode);
-#endif
diff --git a/source/elec_det/base/delay.c b/source/elec_det/base/delay.c
deleted file mode 100644
index 1834262..0000000
--- a/source/elec_det/base/delay.c
+++ /dev/null
@@ -1,63 +0,0 @@
-#include "base/delay.h"
-#include "stdbool.h"
-#include "rtthread.h"
-
-
-
-//此函数已在别处实现
-//void delay_us(uint32_t nus)
-//{
-//}
-
-void delay_ms(uint32_t nms)
-{
- while(nms > 0)
- {
- nms--;
- delay_us(1000); //普通方式延时,此时ucos无法启动调度.
- }
-
-}
-void delay_nop(uint32_t nop)
-{
- while(nop > 0)
- {
- nop--;
- __NOP();
- }
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/source/elec_det/base/delay.h b/source/elec_det/base/delay.h
deleted file mode 100644
index 28ec8b1..0000000
--- a/source/elec_det/base/delay.h
+++ /dev/null
@@ -1,41 +0,0 @@
-#ifndef __DELAY_H_
-#define __DELAY_H_
-#include "base/define.h"
-#include
-
-
-void Systick_init(uint32_t tick);
-void delay_ms(uint32_t nms);
-void delay_us(uint32_t nus);
-void delay_nop(uint32_t nop);
-#define delay_os_ms(ms) rt_thread_delay(ms)
-#endif
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/source/elec_det/base/utility.c b/source/elec_det/base/utility.c
deleted file mode 100644
index 3d812a1..0000000
--- a/source/elec_det/base/utility.c
+++ /dev/null
@@ -1,458 +0,0 @@
-
-
-#include "utility.h"
-float myatof(const char* str)
-{
-
- uint32_t int_nu = 0;
- uint32_t flot_nu = 0;
- float val;
- float f_count = 1;
- while((*str != 0) && (*str != '.'))
- {
- if(*str > '9' && *str < '0')
- {
- str++;
- continue;
- }
- int_nu = int_nu*10+(*str - 48);
- str++;
- }
-
- if(*str == 0)
- {
- val = int_nu;
- return val;
- }
- str++;
- while(*str != 0)
- {
- if(*str > '9' && *str < '0')
- {
- str++;
- continue;
- }
- flot_nu = flot_nu*10+(*str - 48);
- f_count *= 10;
- str++;
- }
- val = flot_nu;
- val = val / f_count + int_nu;
- return val;
-}
-
-/**
-*@brief string to uint16_t
-*@param str:src string, base:
-*@return num:convert result
-*/
-uint16_t atoi16(const char* str,uint16_t base)
-{
- unsigned int num = 0;
- while (*str !=0)
- num = num * base + c2d(*str++);
- return num;
-}
-
-/**
-*@brief string to uint32
-*@param str:src string, base:
-*@return num:convert result
-*/
-uint32_t atoi32(const char* str,uint16_t base)
-{
- uint32_t num = 0;
- while (*str !=0)
- num = num * base + c2d(*str++);
- return num;
-}
-
-/**
-*@brief uint16 data to string
-*@param n:src num, str[5]:string buffer len:string size
-*@return void
-*/
-void itoa(uint16_t n,uint8_t str[5], uint8_t len)
-{
-
- uint8_t i=len-1;
-
- memset(str,0x20,len);
- do{
- str[i--]=n%10+'0';
-
- }while((n/=10)>0);
-
- return;
-}
-
-
-/**
-*@brief dec or hex string convert to uint32_t
-*@param str:src string, ret: the pointer of result
-*@return success = 1, fail = 0
-*/
-int validatoi(const char* str, int base,uint32_t* ret)
-{
- int c;
- const char* tstr = str;
- if(str == 0 || *str == '\0')
- {
- return 0;
- }
- while(*tstr != '\0')
- {
- c = c2d(*tstr);
- if( (c >= 0) && (c < base))
- {
- tstr++;
- }
- else
- {
- return 0;
- }
- }
-
- *ret = atoi32(str,base);
- return 1;
-}
-
-/**
-*@brief new char to replace the old char
-*@param str:src string,oldchar:dst char,newchar:src char
-*@return void
-*/
-void replacetochar(char * str, char oldchar,char newchar)
-{
- int x;
- for (x = 0; str[x]; x++)
- if (str[x] == oldchar) str[x] = newchar;
-}
-
-/**
-*@brief char to num
-*@param c:src char
-*@return convert result
-*/
-char c2d(const uint8_t c)
-{
- if (c >= '0' && c <= '9')
- return c - '0';
- if (c >= 'a' && c <= 'f')
- return 10 + c -'a';
- if (c >= 'A' && c <= 'F')
- return 10 + c -'A';
-
- return (char)0;
-}
-/**
-*@brief num to char
-*@param c:src num
-*@return convert result
-*/
-char d2c(const uint8_t c)
-{
- if ( c <= 9)
- {
- return c + '0';
- }
- if (c >= 0x0a && c <= 0x0f)
- {
- return c + 'a' - 10;
- }
- return 0;
-}
-
-/**
-*@brief 2bytes swap
-*@param i:src num
-*@return convert result
-*/
-uint16_t swaps(uint16_t i)
-{
- uint16_t ret=0;
- ret = (i & 0xFF) << 8;
- ret |= ((i >> 8)& 0xFF);
- return ret;
-}
-/**
-*@brief 4 bytes swap, bytes order 4 3 2 1 convert to 1 2 3 4
-*@param i:src num
-*@return convert result
-*/
-uint32_t swapl(uint32_t l)
-{
- uint32_t ret=0;
- ret = (l & 0xFF) << 24;
- ret |= ((l >> 8) & 0xFF) << 16;
- ret |= ((l >> 16) & 0xFF) << 8;
- ret |= ((l >> 24) & 0xFF);
- return ret;
-}
-
-/**
-*@brief get substring
-*@param src:src string s1: target begin s2: target end sub: result pointer
-*@return void
-*/
-void mid(const char* src, const char* s1, const char* s2, char* sub)
-{
- char* sub1;
- char* sub2;
- uint16_t n;
-
- sub1=strstr(src,s1);
- sub1+=strlen(s1);
- sub2=strstr(sub1,s2);
- n=sub2-sub1;
- strncpy(sub,sub1,n);
- sub[n]=0;
-}
-/**
-*@brief bytes array conver to string
-*@param *data: ponit src bytes len: array length str: resuter string pointer
-*@return void
-*/
-
-void bytes2hexString(const char* data, uint32_t len, char* str)
-{
- char c_temp;
- while(len > 0)
- {
- c_temp = ((*data) &0xF0) >> 4;
- if(c_temp < 10)
- {
- *str = c_temp + '0';
- }
- else
- {
- *str = (c_temp - 10) + 'A';
- }
-
- c_temp = ((*data) &0x0F);
- str++;
- if(c_temp < 10)
- {
- *str = c_temp + '0';
- }
- else
- {
- *str = (c_temp - 10)+ 'A';
- }
- str++;
- data++;
- len--;
- }
- *(str++) = '\0';
-
-}
-/*
-Hex Datas to Bytes
-*/
-uint8_t HexStrings2Byte(char**strs,uint16_t size,uint8_t* buf,uint16_t buf_size)
-{
- char* str;
- uint8_t data = 0;
- uint16_t count = 0;
- while((size > 0) && (count < buf_size))
- {
- str = strs[count++];
- size--;
- data = 0;
- while(*str != '\0')
- {
-
- if(*str == '0')
- {
- if((*(str+1) == 'X') || (*(str+1) == 'x'))
- {
- str+=2;
- continue;
- }
- }
- data <<=4;
- data |=c2d(*str);
- str++;
- }
- *buf = data;
- buf++;
- }
- return count;
-}
-
-
-/*
-Hex Datas to uint32_t
-*/
-uint32_t HexStrings2UInt(char*str)
-{
-
- uint32_t data = 0;
- uint16_t count = 0;
- data = 0;
- while(*str != '\0' && count < 10)
- {
-
- if(*str == '0')
- {
- if((*(str+1) == 'X') || (*(str+1) == 'x'))
- {
- str+=2;
- continue;
- }
- }
- data <<=4;
- data |=c2d(*str);
- str++;
- count++;
- }
- return data;
-}
-
-//冒泡排序16位数据
-void Bubble_Sort_u16(uint16_t* buf,uint32_t len)
-{
- uint32_t ul_temp1 = 0;
- uint32_t ul_temp2 = 0;
- uint16_t us_temp;
- if(len < 2)
- return;
- for(ul_temp2 = 0; ul_temp2 < len-1; ul_temp2++)
- {
- for(ul_temp1 = 0; ul_temp1 < len-1-ul_temp2; ul_temp1++)
- {
- if(buf[ul_temp1] > buf[ul_temp1+1])
- {
- us_temp = buf[ul_temp1];
- buf[ul_temp1] = buf[ul_temp1 + 1];
- buf[ul_temp1 + 1] = us_temp;
- }
- }
- }
-
-}
-//数据左移
-void BufMoveLeft(uint8_t* srcbuf,uint16_t offset,uint16_t data_len)
-{
- uint8_t index = 0;
- while(data_len > 0)
- {
- srcbuf[index] = srcbuf[index+offset];
- data_len--;
- index++;
- }
-}
-//数据右移
-void BufMoveRight(uint8_t* srcbuf,uint16_t offset,uint16_t data_len)
-{
- while(data_len > 0)
- {
- data_len--;
- srcbuf[data_len+offset] = srcbuf[data_len] ;
- }
-}
-
-
-//@brief 计算数组的CRC8值
-//@param *srcbuf 数据源指针
-//@param len 数据源长度
-//@rtvl 返回计算结果
-uint8_t CheckXOR_8(uint8_t* srcbuf,uint16_t len)
-{
- uint8_t crc = 0x00;
- while(len--)
- {
- crc ^= *srcbuf++;
- }
- return crc;
-}
-
-
-//@brief 计算数组异或校验值
-//@param *Ptr 数据源
-//@param num 计算长度
-//@rtvl 返回计算结果
-uint8_t CheckCRC_8(uint8_t* Ptr,uint16_t num)
-{
- uint8_t crc = 0;
- uint16_t j,i;
-
- for (j = 0; j < num; j++)
- {
- crc ^= *(Ptr+j);
- for ( i = 0; i < 8; i++)
- {
- if ((crc & 0x01) != 0)
- {
- crc >>= 1;
- crc ^= 0x8c;
- }
- else
- {
- crc >>= 1;
- }
- }
- }
- return crc;
-}
- //@brief 计算CRC32
-//@param *srcbuf 数据源
-//@param len 计算长度
-//@rtvl 返回计算结果
-uint32_t Crc32Calu(uint32_t* buf, uint32_t len)
-{
- uint32_t temp,crc = 0xFFFFFFFF;
-
- uint32_t i,j;
- i = 0;
- if(((uint32_t)buf %4) != 0)
- {
- return 1;
- }
- while(i 0)
- {
- if(*us_max < *aus_buf)
- {
- *us_max = *aus_buf;
- }
- if(*us_min > *aus_buf)
- {
- *us_min = *aus_buf;
- }
- aus_buf++;
- us_size--;
- }
-}
diff --git a/source/elec_det/base/utility.h b/source/elec_det/base/utility.h
deleted file mode 100644
index f4cad87..0000000
--- a/source/elec_det/base/utility.h
+++ /dev/null
@@ -1,60 +0,0 @@
-#ifndef _UTILITY_H
-#define _UTILITY_H
-#include
-#include
-#include "stm32f10x.h"
-
-float myatof(const char* str);
-uint16_t atoi16(const char* str,uint16_t base); /* Convert a string to integer number */
-uint32_t atoi32(const char* str,uint16_t base); /* Convert a string to integer number */
-void itoa(uint16_t n,uint8_t* str, uint8_t len);
-int validatoi(const char* str, int base, uint32_t* ret); /* Verify character string and Convert it to (hexa-)decimal. */
-char c2d(uint8_t c);
-char d2c(uint8_t c);
-uint16_t swaps(uint16_t i);
-uint32_t swapl(uint32_t l);
-
-void replacetochar(char * str, char oldchar, char newchar);
-
-void mid(const char* src, const char* s1, const char* s2, char* sub);
-
-void bytes2hexString(const char* data, uint32_t len, char* str);
-//冒泡排序16位数据
-void Bubble_Sort_u16(uint16_t* buf,uint32_t len);
-//数据左移
-void BufMoveLeft(uint8_t* srcbuf,uint16_t offset,uint16_t data_len);
-//数据右移
-void BufMoveRight(uint8_t* srcbuf,uint16_t offset,uint16_t data_len);
-/*
-Hex Datas to Bytes
-*/
-uint8_t HexStrings2Byte(char**strs,uint16_t size,uint8_t* buf,uint16_t buf_size);
-/*
-Hex Datas to uint32_t
-*/
-uint32_t HexStrings2UInt(char*str);
-//@brief 计算数组异或校验值
-//@param *srcbuf 数据源
-//@param len 计算长度
-//@rtvl 返回计算结果
-uint8_t CheckCRC_8(uint8_t* Ptr,uint16_t num);
- //@brief 计算CRC32
-//@param *srcbuf 数据源
-//@param len 计算长度
-//@rtvl 返回计算结果
-uint32_t Crc32Calu(uint32_t* buf, uint32_t len);
-/*
-@brief 获取数组中的最大值和最小值
-@param *aus_buf 缓存数组
-@param us_size 数组长度
-@param *us_max 最大值
-@param *us_min 最小值
-*/
-
-void GetMaxAndMinValue(uint16_t* aus_buf,uint16_t us_size,uint16_t* us_max,uint16_t* us_min);
-//@brief 计算数组的CRC8值
-//@param *srcbuf 数据源指针
-//@param len 数据源长度
-//@rtvl 返回计算结果
-uint8_t CheckXOR_8(uint8_t* srcbuf,uint16_t len);
-#endif
diff --git a/source/elec_det/driver/EWDriver.c b/source/elec_det/driver/EWDriver.c
deleted file mode 100644
index aa35916..0000000
--- a/source/elec_det/driver/EWDriver.c
+++ /dev/null
@@ -1,1530 +0,0 @@
-#include "EWDriver.h"
-#include "base/delay.h"
-#include "base/utility.h"
-#include "hardware/gpio_cfg.h"
-#include "base/utility.h"
-#include "hardware/adc_cfg.h"
-#include "hardware/power.h"
-#include "ewdriver.h"
-#include "hardware/timer_cfg.h"
-
-static volatile EWBus_Mod_en bus_mod = OFF_MOD;
-static volatile CurrentSample_Range_eu buscurrent_range = Current_Max;
-#define FB_Read_AD_Sample_C 30
-#if FIREBUS_ADC_BUF_LEN < FB_Read_AD_Sample_C
-#error "EWDriver ADC define error"
-#endif
-
-#define SMod_Read_Idle_Filter 90
-#define DMod_Read_Idle_Filter 80
-
-volatile uint16_t* EW_Read_AD_V = FireBus_ADC_Buf;
-static volatile uint16_t SMod_Read_Idle_C;
-static uint16_t firebus_idle_diff = SMod_Read_Idle_Filter;
-
-const static uint16_t data2bit_signal[]={200,234,275,323,380,446};
-static uint16_t datapulus[6][2];
-//发送起始信号
-#define SMod_Begin_Plus() SMod_2Bit_Plus(4)
-//发送结束信号
-#define SMod_End_Plus() SMod_2Bit_Plus(5)
-uint8_t EW_CommBuf[EW_DMODE_FRAME_SIZE];
-uint16_t EW_DMOD_Peroid = 300;
-uint16_t EW_DMOD_READ_Timeout = 6000;
-//发送唤醒信号
-static void SMod_Wake_Plus(void)
-{
- EW_SINGLE_MOD_M;
- delay_us(200);
- EW_SINGLE_MOD_H;
- delay_us(600);
-
-}
-//发送2Bit数据信号
-static void SMod_2Bit_Plus(uint8_t data)
-{
- if(data > 5)
- return;
- EW_SINGLE_MOD_M;
- delay_us(datapulus[data][0]);
- EW_SINGLE_MOD_H;
- delay_us(datapulus[data][1]);
-}
-
-//读取1bit数据
-static uint8_t SMod_ReadBit(uint16_t wait_us)
-{
- uint32_t ul_temp = 0;
- ADC_CurChnnelSet(AN_MAL_CH,ADC_SPEED_MIDLE);
- EW_SINGLE_MOD_M;
- delay_us(wait_us);
- while(ul_temp < FB_Read_AD_Sample_C)
- {
- EW_Read_AD_V[ul_temp++] = ADC_GetCurADCFast();
- }
- EW_SINGLE_MOD_H;
- Bubble_Sort_u16((uint16_t*)EW_Read_AD_V,FB_Read_AD_Sample_C);
- ul_temp = EW_Read_AD_V[FB_Read_AD_Sample_C - 6];
- ul_temp += EW_Read_AD_V[FB_Read_AD_Sample_C - 7];
- ul_temp += EW_Read_AD_V[FB_Read_AD_Sample_C - 8];
- ul_temp += EW_Read_AD_V[FB_Read_AD_Sample_C - 9];
- ul_temp >>= 2;
- if(ul_temp > SMod_Read_Idle_C)
- {
- LED1_Out_On;
- return 1;
- }
- LED1_Out_Off;
- return 0;
-}
-
-static uint8_t DMod_ReadBit(uint16_t wait_us)
-{
- uint32_t ul_temp = 0;
- ADC_CurChnnelSet(AN_MAL_CH,ADC_SPEED_MIDLE);
- EW_DIFF_MOD_M;
- delay_us(wait_us);
- while(ul_temp < FB_Read_AD_Sample_C)
- {
- EW_Read_AD_V[ul_temp++] = ADC_GetCurADCFast();
- }
- EW_DIFF_MOD_L;
- Bubble_Sort_u16((uint16_t*)EW_Read_AD_V,FB_Read_AD_Sample_C);
- ul_temp = EW_Read_AD_V[FB_Read_AD_Sample_C - 6];
- ul_temp += EW_Read_AD_V[FB_Read_AD_Sample_C - 7];
- ul_temp += EW_Read_AD_V[FB_Read_AD_Sample_C - 8];
- ul_temp += EW_Read_AD_V[FB_Read_AD_Sample_C - 9];
- ul_temp >>= 2;
- if(ul_temp > SMod_Read_Idle_C)
- {
- LED1_Out_On ;
- return 1;
- }
- LED1_Out_Off;
- return 0;
-}
-/*
-@brief 读取模块ACK
-@param 超时 0.1ms
-*/
-static uint8_t DMod_ReadAck(uint16_t time_out)
-{
- uint32_t ul_temp = 0;
- uint32_t ul_temp2 = 0;
- uint16_t us_count = 0;
- ul_temp = time_out*10;
- ADC_CurChnnelSet(AN_MAL_CH,ADC_SPEED_MIDLE);
- EW_DIFF_MOD_M;
- Get10usCount();
- while((ul_temp2 < ul_temp) && (us_count < 10))
- {
- if(ADC_GetCurADCFast() > SMod_Read_Idle_C)
- {
- us_count++;
- }else{
- us_count = 0;
- }
- ul_temp2 += Get10usCount();
- }
- if(us_count < 10)
- {
- EW_DIFF_MOD_H;
- return 0;
- }
- delay_ms(20);
- EW_DIFF_MOD_H
- return 1;
-
-}
-
-//从AD采样缓存总,计算空闲电流
-static uint16_t FireBus_UpdataIdeV(void)
-{
- SMod_Read_Idle_C = 0;
- SMod_Read_Idle_C = (uint32_t)(EW_Read_AD_V[FB_Read_AD_Sample_C - 6]);
- SMod_Read_Idle_C += (uint32_t)(EW_Read_AD_V[FB_Read_AD_Sample_C - 7]*3);
- SMod_Read_Idle_C += (uint32_t)(EW_Read_AD_V[FB_Read_AD_Sample_C - 8]*4);
- SMod_Read_Idle_C += (uint32_t)(EW_Read_AD_V[FB_Read_AD_Sample_C - 9]*2);
- SMod_Read_Idle_C /= 10;
- SMod_Read_Idle_C += firebus_idle_diff;
- return SMod_Read_Idle_C;
-}
-//采集空闲电流
-static uint16_t SMod_GetIdleV(void)
-{
- firebus_idle_diff = SMod_Read_Idle_Filter;
- SMod_ReadBit(80);//获取采样电流
- return FireBus_UpdataIdeV();
-}
-static uint16_t DMod_GetIdleV(void)
-{
- firebus_idle_diff = DMod_Read_Idle_Filter;
- DMod_ReadBit(300);//获取采样电流
- return FireBus_UpdataIdeV();
-}
-static uint16_t SMod_GetIdle2V(void)
-{
- uint32_t ul_temp = 0;
- firebus_idle_diff = SMod_Read_Idle_Filter;
- while(ul_temp < FB_Read_AD_Sample_C)
- {
- EW_Read_AD_V[ul_temp++] = ADC_GetCurADCFast();
- }
- return FireBus_UpdataIdeV();
-}
-
-static uint16_t DMod_GetIdle2V(void)
-{
- uint32_t ul_temp = 0;
- firebus_idle_diff = DMod_Read_Idle_Filter;
- while(ul_temp < FB_Read_AD_Sample_C)
- {
- EW_Read_AD_V[ul_temp++] = ADC_GetCurADCFast();
- }
- return FireBus_UpdataIdeV();
-}
-
-
-
-//采集到应答信号返0 否则返1
-static uint8_t SMod_WaitAck(uint16_t time_out)
-{
-
- while(time_out > 0)
- {
- time_out--;
- if(SMod_ReadBit(80) > 0)
- {
- delay_us(350);
- return 0;
- }
- delay_us(350);
- }
- return 1;
-
-}
-
-
-void EW_BusDef_Init(void)
-{
- uint16_t us_temp = 80;
- uint8_t count = 0;
- for(count = 0; count < 6;count++)
- {
- datapulus[count][0] = us_temp;
- datapulus[count][1] = data2bit_signal[count] - us_temp-12;//-4为延时偏移,实测。
- }
-}
-
-
-/*
-@brief 单端发送4Bytes 数据
-@param *buf 4字节数据缓存指针
-@param type 数据帧类型
-@param bg_count 起始信号个数
-@param end_count 结束信号个数
-*/
-void SMod_FireBusSend4BytesFrame(uint8_t* buf,EW_SINGLE_FRAME_TYPE_en type ,uint8_t bg_count,uint8_t end_count)
-{
- uint8_t uc_plus_type[17];
- uint8_t uc_data;
- uint32_t ul_count1 = 0;
- uint32_t ul_count2 = 0;
- uc_plus_type[ul_count1++] = (uint8_t)type;
- while(ul_count1 < 17)
- {
- ul_count2 = 0;
- uc_data = *buf;
- while(ul_count2 < 4)
- {
- uc_plus_type[ul_count1++] = (uc_data & 0xC0)>>6;
- uc_data <<= 2;
- ul_count2++;
- }
- buf++;
- }
- SMod_Wake_Plus();
- /******************/
- while(bg_count > 0)
- {
- bg_count --;
- SMod_Begin_Plus();
- }
- for(ul_count1 = 0; ul_count1 < 17; ul_count1++)
- {
- SMod_2Bit_Plus(uc_plus_type[ul_count1]);
- }
- while(end_count > 0)
- {
- end_count --;
- SMod_End_Plus();
- }
-}
-/*
-@brief 单端模式发送数据
-@param *buf 数据缓存指针
-@param bg_count 起始信号个数
-@param end_count 结束信号个数
-*/
-uint8_t SMod_SendData(uint8_t* buf, uint16_t len,uint8_t bg_count,uint8_t end_count)
-{
- uint16_t us_count = 0;
- uint8_t* databuf = (uint8_t*)rt_malloc(len+4);
- uint8_t crc = 0;
- if(databuf == RT_NULL)
- {
-
- return 1;
- }
- len--;
- rt_memcpy(databuf,buf,len);
- while((len % 4) != 3)
- {
- databuf[len++] = 0;
- }
- databuf[len] = CheckXOR_8(databuf,len);
- len++;
- if(len == 4)
- {
- SMod_FireBusSend4BytesFrame(databuf,COMPLETE_FRAME,bg_count,end_count);
- goto SMod_Data_Send_End;
- }
- SMod_FireBusSend4BytesFrame(databuf,BEGIN_FRAME,bg_count,end_count);
- us_count += 4;
- while(us_count < (len-4))
- {
- delay_ms(40);
- SMod_FireBusSend4BytesFrame(databuf+us_count,DATA_FRAME,bg_count,end_count);
- us_count += 4;
- }
- delay_ms(40);
- SMod_FireBusSend4BytesFrame(databuf+us_count,END_FRAME,bg_count,end_count);
-SMod_Data_Send_End:
- rt_free(databuf);
- return 0;
-}
-
-/*
-@brief 单端接收数据
-@param *buf 数据缓存指针
-@param len 读取数据长度
-@param time_out 应答信号超时个数
-*/
-uint8_t SMod_FireBusReadDatas(uint8_t* buf, uint8_t len, uint16_t time_out)
-{
- uint32_t ul_temp = 0;
- uint8_t uc_data;
- CurrentSample_Range_eu range = buscurrent_range;//档位保存
- Power_SetSampleCurrentRange(R10_2mA_30mA_MC);
- ADC_CurChnnelSet(AN_MAL_CH,ADC_SPEED_MIDLE);
- delay_ms(1);
-
- //采集空闲电流
- SMod_GetIdleV();
- delay_us(350);
- SMod_GetIdleV();
- delay_us(350);
- if(SMod_WaitAck(time_out) > 0)
- {
- Power_SetSampleCurrentRange(range);
- return 1;
- }
- while(len > 0)
- {
- ul_temp = 0;
- uc_data = 0;
- len--;
- while(ul_temp < 8)
- {
- uc_data <<= 1;
- uc_data += SMod_ReadBit(80);
- delay_us(500);
- ul_temp++;
- }
- *buf = uc_data;
- buf++;
- }
- Power_SetSampleCurrentRange(range);
- return 0;
-}
-
-/*
-@brief 获取巡检数据
-@param count 巡检脉冲数
-@param buf 数据缓存区
-@rtv 无
-*/
-void FireBus_ReadInspect_Data(uint16_t count,uint8_t* buf)
-{
- uint16_t index;
- uint8_t data;
- CurrentSample_Range_eu range = buscurrent_range;//档位保存
- Power_SetSampleCurrentRange(R10_2mA_30mA_MC);//采样电阻全开,快速放电
- ADC_CurChnnelSet(AN_MAL_CH,ADC_SPEED_MIDLE);
- //delay_us(500);
- //总线跳转到中电平
- EW_SINGLE_MOD_M;
- //延时等待电流稳定
- //COM_PH2_Out = 0;
- delay_us(240);
- //获取中电平电流
- SMod_GetIdle2V();
- EW_SINGLE_MOD_H
- delay_us(700);
- rt_memset(buf,0,((count+7 ) >> 3));
- index = 0;
- while(index < count)
- {
- data = *(buf+(index >> 3));
- if( SMod_ReadBit(80) > 0)
- {
- data |= (0x01 << (index & 0x07));
- };
- EW_SINGLE_MOD_H
- delay_us(800);
- *(buf+(index >> 3)) = data;
- index++;
- }
- Power_SetSampleCurrentRange(range);
-}
-
-/*************************************************************/
-static uint8_t SMod_FireBusReadPlus(uint16_t* plus_h, uint16_t* plus_t,uint16_t time_out,uint16_t ad_line,uint16_t* max_ad)
-{
- uint32_t ul_ad_sample;
- uint32_t ul_index = 0;
- uint16_t us_adc_buf[6];
- uint32_t ul_count = 0;
- uint32_t uc_step = 0;
- uint32_t ul_h_count = 0,ul_l_count = 0;
- *max_ad = 0;
- for(ul_count =0; ul_count < 5; ul_count++)
- {
- us_adc_buf[ul_count++] = ADC_GetCurADCFast();
- }
- //数据发送时,以高脉冲在先,然后是低电平,
- do{
- time_out--;
- ul_ad_sample = ADC_GetCurADCFast();
- if(ul_ad_sample > *max_ad)
- *max_ad = ul_ad_sample;
-// if(ul_ad_sample > ad_line)
-// {
-// PBout(I2IC_SCL_Pin_Nu) = 1 ;
-// }else{
-// PBout(I2IC_SCL_Pin_Nu) = 0;
-// }
- us_adc_buf[ul_count++] = ul_ad_sample;
- ul_count %= 0x06;
- ul_h_count = 0;
- ul_l_count = 0;
- for(ul_index =0; ul_index < 6; ul_index++)
- {
- if(us_adc_buf[ul_index] > ad_line)
- {
- ul_h_count++;
- }else{
- ul_l_count++;
- }
- }
- if(uc_step == 0 && ul_h_count > 5)//启动周期计数
- {
- (*plus_h)++;
- (*plus_t)++;
- uc_step = 1;
- }else if(uc_step == 0){
- continue;//未启动
- }
- if(uc_step == 1)
- {
- if(ul_h_count > 5)
- {
- PBout(I2IC_SCL_Pin_Nu) = 1 ;
- (*plus_h)++;
- uc_step = 1;
- }else if(ul_l_count > 5) //由高变低
- {
- PBout(I2IC_SCL_Pin_Nu) = 0;
- uc_step = 2;
- }
- }
- else if(uc_step == 2 && ul_h_count > 5)//由低变高
- {
- PBout(I2IC_SCL_Pin_Nu) = 1 ;
- break;
- }
- (*plus_t)++;
-
- }while(time_out > 0);
- if(time_out < 1)//等待起始信号超时
- {
- return 1;
- }
- return 0;
-}
-/*
-@brief 单端第二版,差分接收数据
-@param *buf 数据缓存指针
-@param len 读取数据长度
-@param time_out 超时脉冲数(约1bit数据时间)
-@rtv 0 成功 否则失败
-*/
-static uint16_t us_plus_H,us_plus_H2;//高电平采用次数
-static uint16_t us_plus_T,us_plus_T2;//采样周期
-uint16_t idle_line = 0;
-uint8_t DMod_FireBusReadDatasV2(uint8_t* buf, uint8_t len, uint32_t time_out)
-{
- uint32_t ul_ad_sample;
- uint32_t ul_check_falg; //奇校验
- uint32_t us_time_out = time_out;
- uint32_t ul_data = 0;
- uint32_t us_dataT_Or;//数据周期
- uint32_t us_temp1,us_temp2;
- uint16_t ad_max = 0,ad_max_temp = 0;
- CurrentSample_Range_eu range = buscurrent_range;//档位保存
- Power_SetSampleCurrentRange(R10_2mA_30mA_MC);
- ADC_CurChnnelSet(AN_MAL_CH,ADC_SPEED_HIGH);
- delay_us(2000);
- //总线跳转到中电平
- EW_DIFF_MOD_M;
- //延时等待电流稳定
- delay_us(800);
- //COM_PH2_Out = 0;
- PBout(I2IC_SCL_Pin_Nu) = 0;
- delay_us(200);
- //获取中电平电流
- PBout(I2IC_SCL_Pin_Nu) = 1 ;
- DMod_GetIdle2V();
- PBout(I2IC_SCL_Pin_Nu) = 0 ;
- //读取指定长度数据
- //读取单字节数据
- ul_data = 0;
- //等待起始信号唤醒信号
- us_plus_H = 0;
- us_plus_T = 0;
- us_time_out = 2000 + time_out;
- do{
-
- ul_ad_sample = ADC_GetCurADCFast();
- if(ad_max < ul_ad_sample)
- ad_max = ul_ad_sample;
- if(ul_ad_sample > SMod_Read_Idle_C)
- {
- us_plus_H++;
- }else{
- us_plus_H = 0;
- }
- delay_us(2);
- us_time_out--;
- }
- while((us_plus_H < 4) && (us_time_out > 0));
- if(us_time_out < 1)//等待起始信号超时
- {
- EW_DIFF_MOD_H;
- Power_SetSampleCurrentRange(range);
- return 1;
- }
-
- while(len > 0)
- {
- //等待数据帧起始信号
- us_time_out = 10;
- us_plus_T2 = 0xFFFF;
- us_plus_H2 = 0;
- while(us_time_out > 0)
- {
- us_plus_H = 0;
- us_plus_T = 0;
- idle_line = SMod_Read_Idle_C;
-// idle_line = ad_max - SMod_Read_Idle_C;
-// idle_line = (idle_line>>1)+ (idle_line>>4)+ SMod_Read_Idle_C;
- if(SMod_FireBusReadPlus(&us_plus_H,&us_plus_T,time_out,idle_line,&ad_max_temp ) > 0)
- {
- EW_DIFF_MOD_H;
- Power_SetSampleCurrentRange(range);
- return 2;
- }
- if(us_plus_H2 > (us_plus_T2- us_plus_H2))
- {
- us_temp1 = us_plus_T << 1; //2倍
- us_temp2 = us_plus_T + (us_plus_T >> 1);//1.5倍
- if((us_plus_T2 > us_temp2) && (us_plus_T2 < us_temp1))
- {
- break;
- }
- }
- us_plus_T2 = us_plus_T;
- us_plus_H2 = us_plus_H;
- us_time_out--;
- }
- //采集8bit数据+1位校验
- ul_data = 0;
- ul_check_falg = 0;
- us_time_out = 0;
- us_plus_T2 = 0;
- us_dataT_Or = us_plus_T;//保存数据周期
- do{
- ul_data <<= 1;
- if(us_plus_H > (us_plus_T- us_plus_H)) //高电平时间大于低电平 1
- {
- ul_data |= 0x01;
- ul_check_falg ^= 0x01;
- }else{//检测是否是结束信号 0
- us_temp1 = us_plus_T2 << 1; //2倍
- us_temp2 = us_plus_T2 + (us_plus_T2 >> 1);//1.5倍
- if((us_plus_T > us_temp2) && (us_plus_T < us_temp1))
- {
- break;
- }
- }
- //约束数据周期范围
-// if(((us_dataT_Or+4) < us_plus_T)
-// || ((us_dataT_Or - 4) > us_plus_T))
-// {
-// SetSampleCurrentRange(range);
-// EW_SINGLE_MOD_H;
-// return 3;
-// }
- us_plus_T2 = us_plus_T;
- us_plus_H2 = us_plus_H;
- us_plus_H = 0;
- us_plus_T = 0;
- //idle_line = ad_max - SMod_Read_Idle_C;
- //idle_line = (idle_line>>1)+ (idle_line>>4)+ SMod_Read_Idle_C;
- idle_line = SMod_Read_Idle_C;
- if(SMod_FireBusReadPlus(&us_plus_H,&us_plus_T,time_out,idle_line,&ad_max_temp ) > 0)
- {
- EW_DIFF_MOD_H;
- Power_SetSampleCurrentRange(range);
- return 4;
- }
- ad_max = (uint16_t)(ad_max * 0.7f + ad_max_temp*0.3f);
- us_time_out++;
- }while(us_time_out < 13);
- if(ul_check_falg == 0)
- {
- EW_DIFF_MOD_H;
- Power_SetSampleCurrentRange(range);
- return 5;
- }
- if(us_time_out != 9)
- {
- EW_DIFF_MOD_H;
- Power_SetSampleCurrentRange(range);
- return 6;
- }
- ul_data >>= 2;
- *buf = (uint8_t)ul_data;
- buf++;
- len--;
- }
- delay_us(time_out >> 1);
- EW_DIFF_MOD_H;
- Power_SetSampleCurrentRange(range);
- return 0;
-}
-
-
-/*
-@brief 差分模式数据发送
-@param buf 发送数据缓存
-@param len 发送长度
-@param pre 数据脉冲周期
-
-*/
-static void DMod_SendBytesSelf(uint8_t* buf, uint8_t len, uint16_t pre,uint8_t rw_flag,
- uint8_t (*crc_fun)(uint8_t *,uint16_t))
-{
- uint16_t us_count = 0;
- uint8_t uc_checkc_flag = 0;
- uint8_t uc_datatemp = 0;
- uint16_t beg_send_pre,beg_H_plus,end_H_plus,data1_H_plus,data0_H_plus;
- beg_send_pre = pre+(pre >> 1)+(pre >> 2);//1.75倍数据周期
- beg_H_plus = (uint16_t)(beg_send_pre * 0.65f)+1;
- end_H_plus = (uint16_t)(beg_send_pre * 0.35f)+1;
- data1_H_plus = (uint16_t)(pre * 0.65f);
- data0_H_plus = (uint16_t)(pre * 0.35f);
- //buf[len] = CheckCRC_8(buf,len);
- buf[len] = crc_fun(buf,len);
- len++;
- /*
- 1.发送3个结束信号用作芯片唤醒
- 2.循环发送缓存数据中的数据
- 2-1 发送1个起始信号
- 2-2 发送8bit数据信号
- 2-3 发送1bit校验信号
- 2-4 发送1个结束信号
- 2-5 调整循环变量,满足循环从2-1再次执行,否则退出
- 3 补发送一个结束信号
- */
- //发送唤醒脉冲
- __disable_irq();
- while(us_count < 3)
- {
- EW_DIFF_MOD_L;
- delay_us( beg_send_pre - end_H_plus);
- EW_DIFF_MOD_H;
- delay_us(end_H_plus);
- us_count++;
- }
- while(len > 0)
- {
- us_count = 0;
- uc_checkc_flag = 0;
- len--;
- //发送起始信号
- EW_DIFF_MOD_L;
- delay_us(beg_H_plus);
- EW_DIFF_MOD_H;
- delay_us( beg_send_pre - beg_H_plus);
- uc_datatemp = *buf;
- //8bit数据信号+1bit校验
- while(us_count < 9)
- {
- if((uc_datatemp & 0x80) > 0)
- {
- EW_DIFF_MOD_L;
- delay_us(data1_H_plus);
- EW_DIFF_MOD_H;
- delay_us( pre - data1_H_plus);
- uc_checkc_flag ^= 0x01;
- }else{
- EW_DIFF_MOD_L;
- delay_us(data0_H_plus);
- EW_DIFF_MOD_H;
- delay_us( pre - data0_H_plus);
- }
- uc_datatemp <<= 1;
- us_count++;
- if(us_count == 8)
- {
- uc_checkc_flag ^= 0x01;
- uc_datatemp &= 0x7F;
- uc_datatemp |= (uc_checkc_flag << 7);
- }
- }
- buf++;
- //发结束始信号
- EW_DIFF_MOD_L;
- delay_us(end_H_plus);
- EW_DIFF_MOD_H;
- delay_us( beg_send_pre - end_H_plus);
- }
- //补发结束信号
- EW_DIFF_MOD_L;
- delay_us(end_H_plus);
- EW_DIFF_MOD_H;
- delay_us( beg_send_pre - end_H_plus);
- if(rw_flag > 0)
- {
- EW_DIFF_MOD_L;
- }
- __enable_irq();
- delay_ms(3);//保障芯片总线空闲监听退出
-}
-
-
-
-void DMod_SendBytes(uint8_t* buf, uint8_t len, uint16_t pre,uint8_t rw_flag)
-{
- DMod_SendBytesSelf(buf,len,pre,rw_flag,CheckCRC_8);
-}
-
-
-/*
-* 函数会在 buf[len] 的位置添加一个校验数据
-* 所以传入的buf的实际长度要求至少比len长1
-*/
-void DMod_SendBytesXor(uint8_t* buf, uint8_t len, uint8_t rw_flag)
-{
- DMod_SendBytesSelf(buf,len,EW_DMOD_Peroid,rw_flag,CheckXOR_8);
-}
-
-
-uint8_t DMod_ReadBytesXor(uint8_t* buf, uint8_t len,uint16_t retry_times)
-{
- uint8_t ret;
-// for(int i=0;i> 3));
- index = 0;
- while(index < count)
- {
- data = *(buf+(index >> 3));
- if( DMod_ReadBit(300) > 0)
- {
- data |= (0x01 << (index & 0x07));
- };
- EW_DIFF_MOD_L
- delay_us(800);
- *(buf+(index >> 3)) = data;
- index++;
- }
- Power_SetSampleCurrentRange(range);
- delay_ms(1);
- EW_DIFF_MOD_H;
-}
-
-
-/***********************************************************/
-
-
-volatile uint8_t EW_Trim_Flag = 0;
-static void EW_TrimPlusCallback(uint8_t flag)
-{
- if(flag == 1)
- {
- EW_DIFF_MOD_L;
- }else if(flag > 1){
- EW_DIFF_MOD_H;
- }
- EW_Trim_Flag = flag;
-}
-static void EW_SendTrimSquare(uint16_t cycle,uint16_t duty, uint32_t count)
-{
- FireBus_ClkAmend(cycle,duty,count,EW_TrimPlusCallback);
- EW_Trim_Flag = 0;
- while(EW_Trim_Flag != 3)
- {
- delay_ms(20);
- }
- delay_ms(1);
- EW_DIFF_MOD_H
-}
-
-/*
-@breif 通信测试
-*/
-uint8_t EW_CommTest(uint8_t* buf,uint16_t len,uint16_t cycle)
-{
- uint8_t auc_buf[16];
- uint16_t us_head = 1;
- us_head = (us_head << 6)& 0xFFC0;
- us_head += EW_COMM_TEST;
- auc_buf[0] = us_head & 0xFF;
- auc_buf[1] = (us_head >> 8) & 0xFF;
- if(len > 13)
- {
- len = 13;
- }
- memcpy(auc_buf+2,buf,len);
- len += 2;
- DMod_SendBytes(auc_buf,len,cycle,1);
- memset(buf,0,len);
- delay_ms(2);
- return DMod_FireBusReadDatasV2(buf,len+1,500);
-}
-/*
-@brief 使能MTP写
-@param addr 通信地址
-@param 使能开关
-@rtv 执行结果
-*/
-uint8_t EW_EnWriteMTP(uint16_t addr ,uint8_t en_flag)
-{
- uint8_t uc_ack = 0;
- uint8_t uc_readflag = 0;
- if(addr > 0)
- {
- uc_readflag = 1;
- }
- addr<<=6;
- addr = (addr & 0xFFC0) | 40;
- EW_CommBuf[0] = addr&0xFF;
- EW_CommBuf[1] = (addr >> 8)&0xFF;
- EW_CommBuf[2] = en_flag;
- DMod_SendBytes((uint8_t*)EW_CommBuf,3,EW_DMOD_Peroid,uc_readflag);
- if(uc_readflag == 0)
- {
- return 0;
- }
- delay_ms(2);
- uc_ack = DMod_FireBusReadDatasV2((uint8_t*)EW_CommBuf+2,2,EW_DMOD_READ_Timeout);
- if(EW_CommBuf[0] != EW_CommBuf[2] || EW_CommBuf[1] != EW_CommBuf[3])
- {
- return 1;
- }
- return uc_ack;
-}
-/*
-@brief 读MTP
-@param addr 通信地址
-@param mtpaddr MTP地址/4
-@param buf 写入数据的缓存
-@param len 数据长度
-*/
-uint8_t EW_WriteMTP(uint16_t addr,uint8_t mtpaddr,uint8_t* buf,uint8_t len)
-{
- uint8_t uc_ack = 0;
- uint8_t uc_readflag = 0;
- if(addr > 0)
- {
- uc_readflag = 1;
- }
- addr<<=6;
- addr = (addr & 0xFFC0) | 63;
- EW_CommBuf[0] = addr&0xFF;
- EW_CommBuf[1] = (addr >> 8)&0xFF;
- EW_CommBuf[2] = mtpaddr;
- if(len > 10)
- {
- len = 10;
- }
- EW_CommBuf[3] = len;
- memcpy((void*)(EW_CommBuf+4),buf,len);
- DMod_SendBytes((uint8_t*)EW_CommBuf,len+4,EW_DMOD_Peroid,uc_readflag);
- if(uc_readflag == 0)
- {
- return 0;
- }
- len = (len>>2)*8+4;
- delay_ms(len);
- uc_ack = DMod_FireBusReadDatasV2((uint8_t*)(EW_CommBuf+2),2,EW_DMOD_READ_Timeout);
- if(EW_CommBuf[0] != EW_CommBuf[2] || EW_CommBuf[1] != EW_CommBuf[3])
- {
- return 1;
- }
- return uc_ack;
-}
-/*
-@brief 读MTP
-@param addr 通信地址
-@param mtpaddr MTP地址/4
-@param buf 读出数据的缓存
-@param len 数据长度
-*/
-uint8_t EW_ReadMTP(uint16_t addr,uint8_t mtpaddr,uint8_t* buf,uint8_t len)
-{
- uint8_t uc_ack = 0;
- uint8_t uc_readflag = 0;
- if(addr > 0)
- {
- uc_readflag = 1;
- }
- addr<<=6;
- addr = (addr & 0xFFC0) | 62;
- EW_CommBuf[0] = addr&0xFF;
- EW_CommBuf[1] = (addr >> 8)&0xFF;
- EW_CommBuf[2] = mtpaddr;
- if(len > 10)
- {
- len = 10;
- }
- EW_CommBuf[3] = len;
- memcpy((void*)(EW_CommBuf+4),buf,len);
- DMod_SendBytes((uint8_t*)EW_CommBuf,len+4,EW_DMOD_Peroid,uc_readflag);
- if(uc_readflag == 0)
- {
- return 1;
- }
- delay_ms(2);
- uc_ack = DMod_FireBusReadDatasV2((uint8_t*)buf,len+1,EW_DMOD_READ_Timeout);
- if(buf[len] != CheckCRC_8(buf,len))
- {
- return 1;
- }
- return uc_ack;
-}
-/*
-@brief 运行BootLoader程序
-@param addr 通信地址
-@param reboot 仅重启标准 1 有效
-@rtv 返回执行结果 0 成功
-*/
-uint8_t EW_RunBootLoader(uint16_t addr,uint8_t reboot)
-{
- uint32_t ul_bootflag = 0x55AA6699;
- addr<<=6;
- addr = (addr & 0xFFC0) | 61;
- EW_CommBuf[0] = addr&0xFF;
- EW_CommBuf[1] = (addr >> 8)&0xFF;
- if(reboot == 1)
- {
- ul_bootflag = 0x9966AA55;
- }
- memcpy((void*)(EW_CommBuf+2),&ul_bootflag,4);
- DMod_SendBytes((uint8_t*)EW_CommBuf,6,EW_DMOD_Peroid,0);
- return 0;
-}
-/*
-@brief 写运行配置,写入MTP中
-@param addr 通信地址
-@param runcfg 配置结构体
-@rtv 返回执行结果
-*/
-uint8_t EW_WriteRunCfg(uint16_t addr,RunCfg_un* runcfg)
-{
- uint8_t uc_readflag = 0;
- uint8_t uc_ack = 0;
- if(addr > 0)
- {
- uc_readflag = 1;
- }
- addr<<=6;
- addr = (addr & 0xFFC0) | 20;
- EW_CommBuf[0] = addr&0xFF;
- EW_CommBuf[1] = (addr >> 8)&0xFF;
- memcpy((void*)(EW_CommBuf+2),&runcfg,3);
- DMod_SendBytes((uint8_t*)EW_CommBuf,6,EW_DMOD_Peroid,uc_readflag);
- if(uc_readflag == 0)
- {
- return 0;
- }
- delay_ms(4);
- uc_ack = DMod_FireBusReadDatasV2((uint8_t*)EW_CommBuf+2,2,EW_DMOD_READ_Timeout);
- if(EW_CommBuf[0] != EW_CommBuf[2] || EW_CommBuf[1] != EW_CommBuf[3])
- {
- return 1;
- }
- return uc_ack;
-}
-
-/*
-@brief 快速分配通信地址
-@param 通信地址
-@param UID
-@param uid_len UID长度
-@param ack_data 应答数据 包括2bytes延时和2bytes状态
-@rtv 执行结果
-*/
-
-uint8_t EW_SetAddrByUID(uint16_t addr,uint8_t* uid,uint8_t uid_len,uint8_t* ack_data)
-{
- uint8_t uc_readflag = 0;
- uint8_t uc_ack = 0;
- if(addr > 0)
- {
- uc_readflag = 1;
- }
- addr<<=6;
- addr = (addr & 0xFFC0) | 21;
- EW_CommBuf[0] = addr&0xFF;
- EW_CommBuf[1] = (addr >> 8)&0xFF;
- memcpy((void*)(EW_CommBuf+2),uid,uid_len);
- DMod_SendBytes((uint8_t*)EW_CommBuf,uid_len+2,EW_DMOD_Peroid,uc_readflag);
- if(uc_readflag == 0)
- {
- return 0;
- }
- delay_ms(2);
- uc_ack = DMod_FireBusReadDatasV2((uint8_t*)EW_CommBuf+2,2,EW_DMOD_READ_Timeout);
- if(EW_CommBuf[0] != EW_CommBuf[2] || EW_CommBuf[1] != EW_CommBuf[3])
- {
- return 1;
- }
- return uc_ack;
-}
-
-
-/*
-@brief 快速分配通信地址
-@param 通信地址
-@param 设置延时
-@param UID
-@param UID长度
-@param 应答数据 包括2bytes延时和2bytes状态
-@rtv 执行结果
-*/
-
-uint8_t EW_FastSetByUID(uint16_t addr,uint16_t delay, uint8_t pwd_flag,uint8_t* uid,uint8_t uid_len,uint8_t* ack_data)
-{
- uint8_t uc_readflag = 0;
- uint8_t uc_ack = 0;
- if(addr > 0)
- {
- uc_readflag = 1;
- }
- addr<<=6;
- addr = (addr & 0xFFC0) | 22;
- EW_CommBuf[0] = addr&0xFF;
- EW_CommBuf[1] = (addr >> 8)&0xFF;
- EW_CommBuf[2] = pwd_flag;
- memcpy(((void*)(EW_CommBuf+3)),&delay,2);
- memcpy((void*)(EW_CommBuf+5),uid,uid_len);
- uid_len +=5;
- DMod_SendBytes(((uint8_t*)(EW_CommBuf)),uid_len,EW_DMOD_Peroid,uc_readflag);
- if(uc_readflag == 0)
- {
- return 0;
- }
- delay_ms(2);
- uc_ack = DMod_FireBusReadDatasV2(ack_data,5,EW_DMOD_READ_Timeout);
- if(ack_data[4] != CheckCRC_8(ack_data,4))
- {
- return 1;
- }
- return uc_ack;
-}
-
-
-/*
-@brief 设置延时
-@param addr 通信地址
-@param 延期时间
-@rtv 返回执行结果
-*/
-uint8_t EW_SetDelay(uint16_t addr,uint16_t delay)
-{
- uint8_t uc_ack;
- addr<<=6;
- addr = (addr & 0xFFC0) | 23;
- EW_CommBuf[0] = addr&0xFF;
- EW_CommBuf[1] = (addr >> 8)&0xFF;
- memcpy((void*)(EW_CommBuf+2),&delay,2);
- DMod_SendBytes((uint8_t*)EW_CommBuf,4,EW_DMOD_Peroid,0);
- uc_ack = DMod_FireBusReadDatasV2((uint8_t*)EW_CommBuf+2,2,EW_DMOD_READ_Timeout);
- if(EW_CommBuf[0] != EW_CommBuf[2] || EW_CommBuf[1] != EW_CommBuf[3])
- {
- return 1;
- }
- return uc_ack;
-}
-
-/*
-@brief 密码验证
-@param addr 通信地址
-@param 密码数据
-@param 密码长度
-@rtv 返回执行结果
-*/
-uint8_t EW_VerfyPWD(uint16_t addr,uint8_t* pwd,uint8_t pwd_len)
-{
-
- addr<<=6;
- addr = (addr & 0xFFC0) | 24;
- EW_CommBuf[0] = addr&0xFF;
- EW_CommBuf[1] = (addr >> 8)&0xFF;
- memcpy((void*)(EW_CommBuf+2),pwd,pwd_len);
- pwd_len += 2;
- DMod_SendBytes((uint8_t*)EW_CommBuf,pwd_len,EW_DMOD_Peroid,0);
- return 0;
-}
-
-/*
-@brief 密码验证
-@param addr 通信地址
-@param 延迟起爆时间*50ms
-@rtv 返回执行结果
-*/
-uint8_t EW_Boom(uint16_t addr,uint8_t delay_count)
-{
-
- addr<<=6;
- addr = (addr & 0xFFC0) | 25;
- EW_CommBuf[0] = addr&0xFF;
- EW_CommBuf[1] = (addr >> 8)&0xFF;
- EW_CommBuf[2] = delay_count;
- DMod_SendBytes((uint8_t*)EW_CommBuf,3,EW_DMOD_Peroid,0);
- return 0;
-}
-
-
-/*
-@brief 分组充电
-@param addr 通信地址
-@param 充电挡位 0:直通 1 :16V 2:20V 3:2.5V
-@param 分组挡位 addr = group*4 大于addr的可以充电
-@rtv 返回执行结果
-*/
-uint8_t EW_Charge(uint16_t addr,uint8_t chg_class,uint8_t group)
-{
-
- addr<<=6;
- addr = (addr & 0xFFC0) | 26;
- EW_CommBuf[0] = addr&0xFF;
- EW_CommBuf[1] = (addr >> 8)&0xFF;
- EW_CommBuf[2] = chg_class;
- EW_CommBuf[3] = group;
- DMod_SendBytes((uint8_t*)EW_CommBuf,4,EW_DMOD_Peroid,0);
- return 0;
-}
-
-
-/*
-@brief 放电
-@param addr 通信地址
-*/
-uint8_t EW_DisCharge(uint16_t addr)
-{
-
- addr<<=6;
- addr = (addr & 0xFFC0) | 27;
- EW_CommBuf[0] = addr&0xFF;
- EW_CommBuf[1] = (addr >> 8)&0xFF;
- DMod_SendBytes((uint8_t*)EW_CommBuf,2,EW_DMOD_Peroid,0);
- return 0;
-}
-
-/*
-@brief 读状态信息
-@param addr 通信地址
-@param *state 返回状态码
-@param len 数据长度
-*/
-uint8_t EW_ReadState(uint16_t addr,uint8_t* state)
-{
- uint8_t uc_ack = 0;
- uint8_t uc_readflag = 0;
- if(addr == 0)
- {
- return 1;
- }
- uc_readflag = 1;
- addr<<=6;
- addr = (addr & 0xFFC0) | 28;
- EW_CommBuf[0] = addr&0xFF;
- EW_CommBuf[1] = (addr >> 8)&0xFF;
- DMod_SendBytes((uint8_t*)EW_CommBuf,2,EW_DMOD_Peroid,uc_readflag);
- if(uc_readflag == 0)
- {
- return 1;
- }
- delay_ms(2);
- uc_ack = DMod_FireBusReadDatasV2((uint8_t*)EW_CommBuf,5,EW_DMOD_READ_Timeout);
- if(EW_CommBuf[5] != CheckCRC_8((uint8_t*)EW_CommBuf,5))
- {
- return 1;
- }else{
- memcpy(state,((uint8_t*)EW_CommBuf),4);
- }
- return uc_ack;
-}
-
-/*
-@brief 校准地址
-@param addr 通信地址
-@param cycle 校准周期 us
-@param plus_count 脉冲个数
-*/
-uint8_t EW_ClkAmend(uint16_t addr ,uint16_t cycle,uint16_t plus_count)
-{
- addr<<=6;
- addr = (addr & 0xFFC0) | 29;
- EW_CommBuf[0] = addr&0xFF;
- EW_CommBuf[1] = (addr >> 8)&0xFF;
- DMod_SendBytes((uint8_t*)EW_CommBuf,2,EW_DMOD_Peroid,0);
- delay_ms(5);
- EW_SendTrimSquare(cycle,cycle>>1,plus_count);
- return 0;
-}
-
-/*
-@brief 巡检
-@param addr 通信地址
-@param cycle 校准周期 us
-@param plus_count 脉冲个数
-*/
-uint8_t EW_Inspect(uint16_t bgaddr ,uint16_t endaddr,uint16_t state,uint8_t* buf)
-{
-
- uint16_t addr = 0;
- addr<<=6;
- addr = (addr & 0xFFC0) | 30;
- EW_CommBuf[0] = addr&0xFF;
- EW_CommBuf[1] = (addr >> 8)&0xFF;
- memcpy((uint8_t*)&EW_CommBuf[2],&bgaddr,2);
- memcpy((uint8_t*)&EW_CommBuf[4],&endaddr,2);
- memcpy((uint8_t*)&EW_CommBuf[6],&state,2);
- DMod_SendBytes((uint8_t*)EW_CommBuf,8,EW_DMOD_Peroid,1);
- delay_ms(5);
- DMod_ReadInspect_Data(endaddr-bgaddr,buf);
- return 0;
-}
-
-/*
-@brief 配置验证
-@param addr 通信地址
-@param cfg_mask 源掩码信息
-@param 比较信息 (EW_Cfg & cfg_mask) == cfg_state
-@param 反码状态 0 比较通过不反码 1 比较通过反码
-@param
-*/
-uint8_t EW_CheckRunCfg(uint16_t addr,uint32_t cfg_mask ,uint16_t cfg_state,uint8_t* rtv)
-{
- addr<<=6;
- addr = (addr & 0xFFC0) | 31;
- EW_CommBuf[0] = addr&0xFF;
- EW_CommBuf[1] = (addr >> 8)&0xFF;
- memcpy((uint8_t*)&EW_CommBuf[2],&cfg_mask,3);
- memcpy((uint8_t*)&EW_CommBuf[5],&cfg_state,2);
- EW_CommBuf[8] = *rtv;
- DMod_SendBytes((uint8_t*)EW_CommBuf,9,EW_DMOD_Peroid,1);
- delay_ms(5);
- *rtv = DMod_ReadAck(50);
- return 0;
-}
-
-/*
-@brief 配置验证
-@param addr 通信地址
-@param check_class 检测模式 0 基本自检 1 起爆开关检测 2 电容检测 4 读电容检测时间
-@param *buf 读出测试结果
-*/
-uint8_t EW_ChecSelf(uint16_t addr,uint8_t check_class,uint8_t* buf)
-{
- uint8_t uc_readflag = 0;
- uint8_t uc_ack = 0;
- if(check_class == 4)
- {
- uc_readflag = 1;
- }
- if(buf == NULL && check_class ==4)
- {
- return 1;
- }
- addr<<=6;
- addr = (addr & 0xFFC0) | 32;
- EW_CommBuf[0] = addr&0xFF;
- EW_CommBuf[1] = (addr >> 8)&0xFF;
- EW_CommBuf[2] = check_class;
- DMod_SendBytes((uint8_t*)EW_CommBuf,9,EW_DMOD_Peroid,uc_readflag);
- if( uc_readflag == 0)
- {
- return 0;
- }
- delay_ms(5);
- uc_ack = DMod_FireBusReadDatasV2((uint8_t*)EW_CommBuf,5,EW_DMOD_READ_Timeout);
- if(EW_CommBuf[4] == CheckCRC_8((uint8_t*)EW_CommBuf,4))
- {
- memcpy(buf,(uint8_t*)EW_CommBuf,4);
- }else{
- uc_ack = 1;
- }
- return uc_ack;
-}
-
-/*
-@brief 保持起爆配置信息和使能起爆
-*/
-uint8_t EW_SaveFireInfo(uint16_t addr)
-{
- addr<<=6;
- addr = (addr & 0xFFC0) | 33;
- EW_CommBuf[0] = addr&0xFF;
- EW_CommBuf[1] = (addr >> 8)&0xFF;
- DMod_SendBytes((uint8_t*)EW_CommBuf,2,EW_DMOD_Peroid,0);
- return 0;
-}
-
-/*
-@brief 读延时和状态值
-@param addr 通信地址
-@param delay 返回延时
-*/
-uint8_t EW_ReadDelay(uint16_t addr,uint16_t* delay)
-{
- uint8_t uc_readflag = 0;
- uint8_t uc_ack = 0;
- if(addr > 0)
- {
- uc_readflag = 1;
- }
- addr<<=6;
- addr = (addr & 0xFFC0) | 34;
- EW_CommBuf[0] = addr&0xFF;
- EW_CommBuf[1] = (addr >> 8)&0xFF;
- DMod_SendBytes((uint8_t*)EW_CommBuf,2,EW_DMOD_Peroid,uc_readflag);
- delay_ms(2);
- uc_ack = DMod_FireBusReadDatasV2((uint8_t*)EW_CommBuf,3,EW_DMOD_READ_Timeout);
- if(EW_CommBuf[2] == CheckCRC_8((uint8_t*)EW_CommBuf,2))
- {
- memcpy(delay,(uint8_t*)EW_CommBuf,2);
- }else{
- uc_ack = 1;
- }
-
- return uc_ack;
-}
-
-/*
-@brief 通信反码配置
-@param addr 通信地址
-@param speed 通信挡位 0:10K 1:7K 2:5K 3:4.5K 4: 4K 4+n:4-0.5*n
-@param cur 电流挡位 0:1mA 1:2mA 2:4mA 3:8mA
-*/
-uint8_t EW_SetReportCfg(uint8_t speed,uint8_t cur)
-{
- uint16_t addr = 0;
- addr<<=6;
- addr = (addr & 0xFFC0) | 35;
- EW_CommBuf[0] = addr&0xFF;
- EW_CommBuf[1] = (addr >> 8)&0xFF;
- EW_CommBuf[2] = speed;
- EW_CommBuf[3] = cur;
- DMod_SendBytes((uint8_t*)EW_CommBuf,4,EW_DMOD_Peroid,0);
- return 0;
-}
-
-/*
-@brief 更新网络地址
-@param addr 通信地址
-@param new_addr 新地址
-*/
-uint8_t EW_UpdateCommAddr(uint8_t addr,uint16_t new_addr)
-{
- uint8_t uc_readflag = 0;
- uint8_t uc_ack = 0;
- if(addr > 0)
- {
- uc_readflag = 1;
- }
- addr<<=6;
- addr = (addr & 0xFFC0) | 36;
- EW_CommBuf[0] = addr&0xFF;
- EW_CommBuf[1] = (addr >> 8)&0xFF;
- memcpy((void*)(EW_CommBuf+2),&new_addr,2);
- DMod_SendBytes((uint8_t*)EW_CommBuf,4,EW_DMOD_Peroid,uc_readflag);
- if(uc_readflag == 0)
- {
- return 0;
- }
- delay_ms(2);
- uc_ack = DMod_FireBusReadDatasV2((uint8_t*)EW_CommBuf+2,2,EW_DMOD_READ_Timeout);
- if(EW_CommBuf[0] != EW_CommBuf[2] || EW_CommBuf[1] != EW_CommBuf[3])
- {
- return 1;
- }
- return uc_ack;
-}
-/*
-@brief 读校准值
-@param addr 通信地址
-@param clk_amend 校准信息
-*/
-uint8_t EW_ReadClkAmend(uint16_t addr,uint32_t* clk_amend)
-{
- uint8_t uc_readflag = 0;
- uint8_t uc_ack = 0;
- if(addr > 0)
- {
- uc_readflag = 1;
- }
- addr<<=6;
- addr = (addr & 0xFFC0) | 37;
- EW_CommBuf[0] = addr&0xFF;
- EW_CommBuf[1] = (addr >> 8)&0xFF;
- DMod_SendBytes((uint8_t*)EW_CommBuf,2,EW_DMOD_Peroid,uc_readflag);
- delay_ms(2);
- uc_ack = DMod_FireBusReadDatasV2((uint8_t*)EW_CommBuf,5,EW_DMOD_READ_Timeout);
- if(EW_CommBuf[4] == CheckCRC_8((uint8_t*)EW_CommBuf,4))
- {
- memcpy(clk_amend,(uint8_t*)EW_CommBuf,4);
- }else{
- uc_ack = 1;
- }
-
- return uc_ack;
-}
-/*
-@brief 读校准值
-@param addr 通信地址
-@param clk_amend 校准信息
-*/
-uint8_t EW_ReadRunCfgVersion(uint16_t addr,uint8_t* run_cfg,uint16_t* version)
-{
- uint8_t uc_readflag = 0;
- uint8_t uc_ack = 0;
- if(addr > 0)
- {
- uc_readflag = 1;
- }
- addr<<=6;
- addr = (addr & 0xFFC0) | 38;
- EW_CommBuf[0] = addr&0xFF;
- EW_CommBuf[1] = (addr >> 8)&0xFF;
- DMod_SendBytes((uint8_t*)EW_CommBuf,2,EW_DMOD_Peroid,uc_readflag);
- delay_ms(2);
- uc_ack = DMod_FireBusReadDatasV2((uint8_t*)EW_CommBuf,6,EW_DMOD_READ_Timeout);
- if(EW_CommBuf[5] == CheckCRC_8((uint8_t*)EW_CommBuf,5))
- {
- memcpy(run_cfg,(uint8_t*)EW_CommBuf,3);
- memcpy(version,(uint8_t*)EW_CommBuf+3,2);
- }else{
- uc_ack = 1;
- }
- return uc_ack;
-}
-
-/*
-@brief 自动分配地址
-@param max_addr 分配的最大地址
-@param fac_addr 分配因子
-*/
-uint8_t EW_AutoSetAddr(uint16_t max_addr,uint16_t fac_addr)
-{
- uint16_t addr = 0;
- addr<<=6;
- addr = (addr & 0xFFC0) | 39;
- EW_CommBuf[0] = addr&0xFF;
- EW_CommBuf[1] = (addr >> 8)&0xFF;
- memcpy((uint8_t*)EW_CommBuf+2,&max_addr,2);
- memcpy((uint8_t*)EW_CommBuf+4,&max_addr,2);
- DMod_SendBytes((uint8_t*)EW_CommBuf,6,EW_DMOD_Peroid,0);
- return 0;
-}
-/*
-@brief 读校准值
-@param addr 通信地址
-@param UID数据
-*/
-uint8_t EW_ReadUID(uint16_t addr,uint8_t* uid,uint8_t uid_len)
-{
- uint8_t uc_readflag = 0;
- uint8_t uc_ack = 0;
- if(addr > 0)
- {
- uc_readflag = 1;
- }
- addr<<=6;
- addr = (addr & 0xFFC0) | 41;
- EW_CommBuf[0] = addr&0xFF;
- EW_CommBuf[1] = (addr >> 8)&0xFF;
- DMod_SendBytes((uint8_t*)EW_CommBuf,2,EW_DMOD_Peroid,uc_readflag);
- delay_ms(2);
- uc_ack = DMod_FireBusReadDatasV2((uint8_t*)EW_CommBuf,uid_len+1,EW_DMOD_READ_Timeout);
- if(EW_CommBuf[uid_len] == CheckCRC_8((uint8_t*)EW_CommBuf,uid_len))
- {
- memcpy(uid,(uint8_t*)EW_CommBuf,uid_len);
- }else{
- uc_ack = 1;
- }
- return uc_ack;
-}
-
-
diff --git a/source/elec_det/driver/EWDriver.h b/source/elec_det/driver/EWDriver.h
deleted file mode 100644
index 0049cb6..0000000
--- a/source/elec_det/driver/EWDriver.h
+++ /dev/null
@@ -1,326 +0,0 @@
-#ifndef EWDRIVER_H
-#define EWDRIVER_H
-#include "base/define.h"
-
-#define EW_DMODE_FRAME_SIZE 16
-
-#
-typedef enum {
- SINGLE_MOD = (uint8_t)0,
- DIFF_MOD = (uint8_t)1,
- OFF_MOD = (uint8_t)2,
-} EWBus_Mod_en;
-
-
-typedef enum{
- BEGIN_FRAME = (uint8_t)0,
- END_FRAME = (uint8_t)1,
- DATA_FRAME = (uint8_t)2,
- COMPLETE_FRAME = (uint8_t)3,
-}EW_SINGLE_FRAME_TYPE_en;
-#pragma pack(1)
-//系统运行时配置
-typedef union {
-struct{
-uint8_t fire_mos_sw : 2;//起爆mos开关选择 0 内部 1 外部 (默认0)
-uint8_t vbus_rx_sg : 2;//接收数据信号 1 vbuss_rxh 2 vbuss_rxl 3 vbusd_rx (默认 3)
-uint8_t vbus_mode : 2;//通讯类型判断 01 差分 10 单端。00 11 根据总线电压判断 (默认 01)
-uint8_t reserve01 : 2;//保留
-uint8_t reset_run_step : 3;//打点周期 0 不打点 1 5ms 2 10ms 3 20ms 4 50ms 5 100ms 6 150ms 7 200ms(默认 0)
-uint8_t uid_len : 3;//uid长度 uid_len + 7(默认 1)
-uint8_t pwd_len : 2;//密码长度 pwd_len + 4(默认0)
-uint8_t version : 5;//模块版本
-uint8_t reserve02 : 3;//保留
-uint8_t crc8 : 8;//校验位
-} runcfg_st;
-uint32_t run_param;
-uint8_t run_cfg_buf[4];
-}RunCfg_un;
-
-typedef union{
-//系统状态标志结构体
-volatile struct
-{
-
- uint8_t timeramend_flag : 1; //时钟校准标志 0
- uint8_t saveinfo_flag : 1; //保存延时设置信息 1
- uint8_t pswd_flag : 1; //密码验证完成标志 2
- uint8_t delay_time : 1; //延时设置完成标志 3
-
- uint8_t addr_set : 1; //网络地址已设置
- uint8_t set_super_t : 1; //开启软件复位 5
- uint8_t erprom_error : 1; //系统存储错误 6
- uint8_t sys_error : 1; //系统运行异常 7
-
-
- uint8_t charge_8v : 1; //充电电压大于8V 8
- uint8_t charge_16V : 1; //充电电压大于16V标志 9
- uint8_t charge_20v : 1; //充电电压大于20V 10
- uint8_t fireline_flag : 1; //桥丝检测 11
-
-
- uint8_t charge_ctrl_flag : 1; //充放电开关检测 12
- uint8_t mosfet_flag : 1; //MOS开关检测标志 13
- uint8_t charge_cmd : 1; //已经发送充电命令 14
- uint8_t fire_flag : 1; //已点火 15
-
-
- uint8_t comm_frame : 1; //通讯帧结束标志
- uint8_t factory_check : 1; //工厂自检
- uint8_t comm_mode : 1; //通讯模式
- uint8_t vbusd_invert : 1; //VBUSD 的极性
-
-
- uint8_t comm_timeout : 1; //通信超时
- uint8_t reserve10 : 1;
- uint8_t reserve09 : 1;
- uint8_t reserve08 : 1;
-
- uint8_t reserve07 : 1;
- uint8_t reserve06 : 1;
- uint8_t reserve05 : 1;
- uint8_t reserve04 : 1;
-
- uint8_t reserve03 : 1;
- uint8_t reserve02 : 1;
- uint8_t reserve01 : 1;
- uint8_t reserve00 : 1;
-} State_st;
-
-
- volatile uint32_t data;
- volatile uint16_t us_data[2];
- volatile uint8_t datas[4];
-}System_State_un;
-
-#pragma pack()
-
-#define EW_WA_CFG_WRITE 20 //写配置寄存器(掉电不保存)
-#define EW_WA_SET_COMMADDR 21 //设置网络地址
-#define EW_WA_FAST_CFG 22 //快速配置地址,延时,密码验证
-#define EW_WA_SET_DELAY 23 //设置延时
-#define EW_RA_VERIFY_PWD 24 //密码验证
-#define EW_W_ON_FIRE 25 //起爆
-#define EW_W_CHARGE 26 //充电
-#define EW_W_DISCHARGE 27 //放电
-#define EW_RA_GET_STATE 28 //读状态
-#define EW_W_AMEND 29 //时钟校准
-#define EW_RA_INSPECT 30 //巡检
-#define EW_RA_CHECK_CFG 31 //配置区验证
-#define EW_R_ELECT_TEST 32 //电性能检测
-#define EW_W_SAVE_FIRE_SET 33 //保存起爆测试
-#define EW_RA_READ_DELAY 34 //读延时
-#define EW_R_TX_CFG 35 //反码配置
-#define EW_WR_UPDATE_ADDR 36 //更新网络地址
-#define EW_RA_AMEND_VALUE 37 //读校准值
-#define EW_RA_CFG_INFO 38 //读配置信息
-#define EW_W_AUTO_ADDR 39 //自动分配地址
-#define EW_EN_MTP 40 //使失能MTP
-#define EW_RA_UID 41 //读UID
-
-#define EW_COMM_TEST 60 //通信测试没问题
-#define EW_BOOTLOADER_RUN 61 //运行bootloader
-#define EW_RA_REGISTER 62 //读MTP
-#define EW_WA_REGISTER 63 //写MTP
-
-/*
-@brief 单端第二版,差分接收数据
-@param *buf 数据缓存指针
-@param len 读取数据长度
-@param time_out 超时脉冲数(约1bit数据时间)
-@rtv 0 成功 否则失败
-*/
-
-
-uint8_t DMod_FireBusReadDatasV2(uint8_t* buf, uint8_t len, uint32_t time_out);
-
-/*
-@brief 差分模式数据发送
-@param buf 发送数据缓存
-@param len 发送长度
-@param pre 数据脉冲周期
-
-*/
-void DMod_SendBytes(uint8_t* buf, uint8_t len, uint16_t pre,uint8_t rw_flag);
-void DMod_SendBytesXor(uint8_t* buf, uint8_t len, uint8_t rw_flag);
-uint8_t DMod_ReadBytesXor(uint8_t* buf, uint8_t len,uint16_t retry_times);
-
-/*
-@breif 通信测试
-*/
-uint8_t EW_CommTest(uint8_t* buf,uint16_t len,uint16_t cycle);
-/*
-@brief 使能MTP写
-@param addr 通信地址
-@param 使能开关
-@rtv 执行结果
-*/
-uint8_t EW_EnWriteMTP(uint16_t addr ,uint8_t en_flag);
-/*
-@brief 读MTP
-@param addr 通信地址
-@param mtpaddr MTP地址/4
-@param buf 写入数据的缓存
-@param len 数据长度
-*/
-uint8_t EW_WriteMTP(uint16_t addr,uint8_t mtpaddr,uint8_t* buf,uint8_t len);
-/*
-@brief 读MTP
-@param addr 通信地址
-@param mtpaddr MTP地址/4
-@param buf 读出数据的缓存
-@param len 数据长度
-*/
-uint8_t EW_ReadMTP(uint16_t addr,uint8_t mtpaddr,uint8_t* buf,uint8_t len);
-/*
-@brief 运行BootLoader程序
-@param addr 通信地址
-@param reboot 仅重启标准 1 有效
-@rtv 返回执行结果 0 成功
-*/
-uint8_t EW_RunBootLoader(uint16_t addr,uint8_t reboot);
-/*
-@brief 写运行配置,写入MTP中
-@param addr 通信地址
-@param runcfg 配置结构体
-@rtv 返回执行结果
-*/
-uint8_t EW_WriteRunCfg(uint16_t addr,RunCfg_un* runcfg);
-/*
-@brief 快速分配通信地址
-@param 通信地址
-@param UID
-@param uid_len UID长度
-@param ack_data 应答数据 包括2bytes延时和2bytes状态
-@rtv 执行结果
-*/
-
-uint8_t EW_SetAddrByUID(uint16_t addr,uint8_t* uid,uint8_t uid_len,uint8_t* ack_data);
-/*
-@brief 快速分配通信地址
-@param 通信地址
-@param 设置延时
-@param UID
-@param UID长度
-@param 应答数据 包括2bytes延时和2bytes状态
-@rtv 执行结果
-*/
-
-uint8_t EW_FastSetByUID(uint16_t addr,uint16_t delay, uint8_t pwd_flag,uint8_t* uid,uint8_t uid_len,uint8_t* ack_data);
-/*
-@brief 设置延时
-@param addr 通信地址
-@param 延期时间
-@rtv 返回执行结果
-*/
-uint8_t EW_SetDelay(uint16_t addr,uint16_t delay);
-/*
-@brief 密码验证
-@param addr 通信地址
-@param 密码数据
-@param 密码长度
-@rtv 返回执行结果
-*/
-uint8_t EW_VerfyPWD(uint16_t addr,uint8_t* pwd,uint8_t pwd_len);
-/*
-@brief 密码验证
-@param addr 通信地址
-@param 延迟起爆时间*50ms
-@rtv 返回执行结果
-*/
-uint8_t EW_Boom(uint16_t addr,uint8_t delay_count);
-/*
-@brief 分组充电
-@param addr 通信地址
-@param 充电挡位 0:直通 1 :16V 2:20V 3:2.5V
-@param 分组挡位 addr = group*4 大于addr的可以充电
-@rtv 返回执行结果
-*/
-uint8_t EW_Charge(uint16_t addr,uint8_t chg_class,uint8_t group);
-/*
-@brief 放电
-@param addr 通信地址
-*/
-uint8_t EW_DisCharge(uint16_t addr);
-/*
-@brief 读状态信息
-@param addr 通信地址
-@param *delay 返回延时数据
-@param *state 返回状态码
-@param len 数据长度
-*/
-uint8_t EW_ReadState(uint16_t addr,uint8_t* state);
-/*
-@brief 校准地址
-@param addr 通信地址
-@param cycle 校准周期 us
-@param plus_count 脉冲个数
-*/
-uint8_t EW_ClkAmend(uint16_t addr ,uint16_t cycle,uint16_t plus_count);
-/*
-@brief 巡检
-@param addr 通信地址
-@param cycle 校准周期 us
-@param plus_count 脉冲个数
-*/
-uint8_t EW_Inspect(uint16_t bgaddr ,uint16_t endaddr,uint16_t state,uint8_t* buf);
-/*
-@brief 配置验证
-@param addr 通信地址
-@param cfg_mask 源掩码信息
-@param 比较信息 (EW_Cfg & cfg_mask) == cfg_state
-@param 反码状态 0 比较通过不反码 1 比较通过反码
-@param
-*/
-uint8_t EW_CheckRunCfg(uint16_t addr,uint32_t cfg_mask ,uint16_t cfg_state,uint8_t* rtv);
-/*
-@brief 配置验证
-@param addr 通信地址
-@param check_class 检测模式 0 基本自检 1 起爆开关检测 2 电容检测 4 读电容检测时间
-@param *buf 读出测试结果
-*/
-uint8_t EW_ChecSelf(uint16_t addr,uint8_t check_class,uint8_t* buf);
-/*
-@brief 保持起爆配置信息和使能起爆
-*/
-uint8_t EW_SaveFireInfo(uint16_t addr);
-/*
-@brief 读延时和状态值
-@param addr 通信地址
-@param delay 返回延时
-*/
-uint8_t EW_ReadDelay(uint16_t addr,uint16_t* delay);
-/*
-@brief 通信反码配置
-@param addr 通信地址
-@param speed 通信挡位 0:10K 1:7K 2:5K 3:4.5K 4: 4K 4+n:4-0.5*n
-@param cur 电流挡位 0:1mA 1:2mA 2:4mA 3:8mA
-*/
-uint8_t EW_SetReportCfg(uint8_t speed,uint8_t cur);
-/*
-@brief 更新网络地址
-@param addr 通信地址
-@param new_addr 新地址
-*/
-uint8_t EW_UpdateCommAddr(uint8_t addr,uint16_t new_addr);
-/*
-@brief 读校准值
-@param addr 通信地址
-@param clk_amend 校准信息
-*/
-uint8_t EW_ReadClkAmend(uint16_t addr,uint32_t* clk_amend);
-/*
-@brief 读校准值
-@param addr 通信地址
-@param clk_amend 校准信息
-*/
-uint8_t EW_ReadRunCfgVersion(uint16_t addr,uint8_t* run_cfg,uint16_t* version);
-/*
-@brief 自动分配地址
-@param max_addr 分配的最大地址
-@param fac_addr 分配因子
-*/
-uint8_t EW_AutoSetAddr(uint16_t max_addr,uint16_t fac_addr);
-#endif
-
-
diff --git a/source/elec_det/driver/JQDriver.c b/source/elec_det/driver/JQDriver.c
deleted file mode 100644
index 74a74b7..0000000
--- a/source/elec_det/driver/JQDriver.c
+++ /dev/null
@@ -1,642 +0,0 @@
-#include "JQDriver.h"
-#include "base/delay.h"
-#include "hardware/adc_cfg.h"
-#include "base/utility.h"
-#include "hardware/power.h"
-#include "hardware/timer_cfg.h"
-#include "hardware/power.h"
-static uint16_t jq_idle_current;
-
-#define JQ_IDLE_NOISE 100
-
-#if JQ_Read_AD_Sample_C > FIREBUS_ADC_BUF_LEN
-#error "JQDriver.c Firbus AD Sample BUFFER SIZE LIMIT"
-#else
-volatile uint16_t* JQ_Read_AD_V = FireBus_ADC_Buf;
-#endif
-static uint16_t jq_ad_last_sample;
-static volatile CurrentSample_Range_eu buscurrent_range = Current_Max;
-
-uint16_t JQ_FreeBack_MaxCur;
-uint16_t JQ_FreeBack_MaxTime;
-uint16_t JQ_FreeBack_MinCur;
-uint16_t JQ_FreeBack_MinTime;
-
-uint16_t JQ_CommEnd_MaxCur = 0;
-uint8_t JQ_CommEnd_CurEn = 0;
-
-
-uint16_t JQ_EnFreeBack_Test = 0;
-
-static void JQ_CommBegin()
-{
- CurrentSampleR_Def;
- WaitDelayEnd(200);//20ms
-}
-static void JQ_CommEnd()
-{
- uint16_t us_temp;
- StartDelayTime();
- if(JQ_CommEnd_CurEn > 0)
- {
- delay_os_ms(10);
- us_temp = ADC_Comm1p6mA_EndCur();
- if(us_temp > JQ_CommEnd_MaxCur)
- {
- JQ_CommEnd_MaxCur = us_temp;
- }
- }
- CurrentSampleR_Def;
-}
-
-/*
-@brief 采样总线反馈数据
-@param sample_count 采样次数
-*/
-
-static void JQ_Sample(uint16_t sample_count)
-{
- uint16_t us_adv = 0;
- uint16_t ul_count = 0;
- jq_ad_last_sample = GetADC_Fast(ADC_CURR_DE);
- for(ul_count = 0;ul_count < sample_count; ul_count++)
- {
- us_adv = GetADC_Fast(ADC_CURR_DE);
- JQ_Read_AD_V[ul_count] = us_adv;
- jq_ad_last_sample = us_adv;
- }
-}
-
-/*
-@brief 通信反码信息初始化
-*/
-void JQ_FreeBack_Prapare(uint8_t enable_flag)
-{
- JQ_FreeBack_MaxCur = 0;
- JQ_FreeBack_MaxTime = 0;
- JQ_FreeBack_MinCur = 0xFFFF;
- JQ_FreeBack_MinTime = 0xFFFF;
- JQ_EnFreeBack_Test = enable_flag;
-}
-
-//@brief 采样空闲电流
-void JQ_SampleIdleCurrent()
-{
- uint16_t sample_count;
- uint32_t ul_adc_v = 0;
- JQBUS_W_1;
- delay_ms(1);
- JQ_Sample(JQ_Read_AD_Sample_C_IDLE);
- Bubble_Sort_u16((uint16_t*)JQ_Read_AD_V,JQ_Read_AD_Sample_C_IDLE);
- sample_count = 15;
- while(sample_count < 25)
- {
- ul_adc_v +=JQ_Read_AD_V[sample_count++];
- }
- jq_idle_current = ul_adc_v/10 + JQ_IDLE_NOISE;
- delay_us(200);
- JQBUS_W_0
- delay_us(2000);
-}
-/*
-@brief 读取1bit数据
-@rtv 返回读取结果
-*/
-uint16_t JQDriver_SAMPLE_Time;
-
-uint8_t JQ_ReadBit(void)
-{
- uint16_t sample_count = 0;
- uint32_t ul_adv_sum = 0;
- uint8_t uc_bit = 0;
- uint16_t uc_mincur_index = 0;
- JQBUS_W_1;
- delay_us(150);
- Get1usCount();
- JQ_Sample(JQ_Read_AD_Sample_C);
- JQDriver_SAMPLE_Time = Get1usCount();
- JQBUS_W_0;
-
- while(sample_count < JQ_Read_AD_Sample_C)
- {
- if(JQ_Read_AD_V[sample_count] > jq_idle_current )
- {
- uc_bit++;
- ul_adv_sum += JQ_Read_AD_V[sample_count] ;
- }else if(uc_bit < 2)//连续两个大于2启动检测
- {
- uc_bit = 0;
- ul_adv_sum = 0;
- }
- sample_count++;
- }
- if(uc_bit > 10)
- {
-
- /***************记录反码信息*************************/
- ul_adv_sum = ul_adv_sum / uc_bit;
- if( JQ_EnFreeBack_Test > 0 )
- {
- if(JQ_FreeBack_MaxCur == 0)
- {
- JQ_FreeBack_MaxCur = JQ_FreeBack_MinCur = ul_adv_sum;
- }else if(ul_adv_sum > JQ_FreeBack_MaxCur){
- JQ_FreeBack_MaxCur = ul_adv_sum;
- }else if(ul_adv_sum < JQ_FreeBack_MinCur){
- JQ_FreeBack_MinCur = ul_adv_sum;
-
- }
-
- if(JQ_FreeBack_MaxTime == 0)
- {
- JQ_FreeBack_MaxTime = JQ_FreeBack_MinTime = uc_bit;
- }else if(uc_bit > JQ_FreeBack_MaxTime)
- {
- JQ_FreeBack_MaxTime = uc_bit;
- }else if(uc_bit < JQ_FreeBack_MinCur){
- JQ_FreeBack_MinTime = uc_bit;
- }
-
- }
- delay_us(1100);
- return 1;
- }else{
- delay_us(350);
- return 0;
- }
-}
-/*
-@brief 发送不读反馈信号的命令
-@param buf 命令字节缓存区
-@param len 缓存区数据长度
-
-*/
-void JQ_SendBroadCast(uint8_t* buf,uint16_t len)
-{
- uint8_t uc_data;
- uint8_t uc_bitcount;
- JQ_CommBegin();
- JQBUS_W_0;
- delay_ms(2);
- while(len > 0)
- {
-
- uc_bitcount = 0;
- uc_data = *buf;
- while(uc_bitcount < 8){
- if((uc_data & 0x80) > 0)
- {
- JQBUS_W_1;
- delay_us(JQBUS_H_PLUS);
- JQBUS_W_0;
- delay_us(JQBUS_L_PLUS);
- }else{
- JQBUS_W_1;
- delay_us(JQBUS_L_PLUS);
- JQBUS_W_0;
- delay_us(JQBUS_H_PLUS);
- }
- uc_bitcount++;
- uc_data <<= 1;
- }
- len--;
- buf++;
- }
- JQBUS_IDLE;
- JQ_CommEnd();
-}
-//@breif 发送读取命令
-static void JQ_SendReadCmd(uint8_t* cmd_buf,uint16_t w_len)
-{
- uint8_t uc_data;
- uint8_t uc_bitcount;
- JQBUS_W_0;
- delay_ms(2);
- while(w_len > 0)
- {
-
- uc_bitcount = 0;
- uc_data = *cmd_buf;
- while(uc_bitcount < 8){
- if((uc_data & 0x80) > 0)
- {
- JQBUS_W_1;
- delay_us(JQBUS_H_PLUS);
- JQBUS_W_0;
- delay_us(JQBUS_L_PLUS);
- }else{
- JQBUS_W_1;
- delay_us(JQBUS_L_PLUS);
- JQBUS_W_0;
- delay_us(JQBUS_H_PLUS);
- }
- uc_bitcount++;
- uc_data <<= 1;
- }
- w_len--;
- cmd_buf++;
- }
- JQBUS_RWIDLE;
-}
-/*
-@brief 发送待反馈的命令
-@param cmd_buf 命令数据缓存区
-@param read_buf 数据反馈缓存区
-@param w_len 发送缓冲区数据长度
-@param r_len =0 读取1bit应答信号 > 0,读取数据长度
-@rtv 应答ACK
-*/
-uint8_t JQ_SendRead(uint8_t* cmd_buf, uint8_t* read_buf,uint16_t w_len,uint16_t r_len)
-{
- uint8_t uc_data;
- uint8_t ack = 0;
- uint8_t uc_bitcount;
- JQ_CommBegin();
- if(w_len > 0)
- {
- JQ_SendReadCmd(cmd_buf,w_len);
- }
- Power_SetSampleRange_Seep(JQDriver_Sample_R,ADC_SPEED_HIGH);
- JQ_SampleIdleCurrent();
- while(r_len > 0)
- {
- uc_data = 0;
- uc_bitcount = 0;
- while(uc_bitcount < 8)
- {
- uc_data <<= 1;
- uc_data |= (JQ_ReadBit() & 0x01);
- uc_bitcount++;
- }
- *read_buf = uc_data;
- r_len--;
- read_buf++;
- }
- ack = JQ_ReadBit();
- JQBUS_IDLE;
- Power_SetSampleCurrentRange(Current_Max);
- JQ_CommEnd();
- return ack;
-}
-
-/*
-@breif 起爆命令
-@param cmd_count 起爆命令发送次数
-@param read_buf 读取ACK数据,1bit代表一个网络号
-@param run_type 0 不读取应答信号 =1 读取应答信号 >1 读取应答信号,且强制反馈收到应答
-*/
-
-void JQ_BoomCmd(uint8_t cmd_count,uint8_t* read_buf,uint8_t run_type)
-{
- static uint8_t JQBoomcmd[2]={0xA9,0xB5};
- static uint8_t JQBoomEnCmd[2] = {0x7A,0xB7};
- uint16_t us_pluscount = 0;
- uint8_t uc_data,uc_bitcount,send_count;
- send_count = 0;
- while(send_count < cmd_count)
- {
- JQ_SendBroadCast(JQBoomEnCmd,2);
- delay_os_ms(20);
- send_count++;
- }
- if(run_type == 0)
- {
- while(cmd_count > 0)
- {
- //JQ_SendBroadCast(JQBoomcmd,2);
- delay_os_ms(20);
- JQ_SendRead(JQBoomcmd,&uc_data,2,0);
- cmd_count--;
- }
- us_pluscount = 0;
- while(us_pluscount < 680)
- {
- JQBUS_W_1
- delay_us(1000);
- JQBUS_W_0
- delay_us(400);
- us_pluscount++;
- }
- }else{
- while(cmd_count > 0)
- {
- delay_os_ms(20);
- JQ_SendRead(JQBoomcmd,&uc_data,2,0);
- cmd_count--;
- }
- Power_SetSampleRange_Seep(JQDriver_Sample_R,ADC_SPEED_HIGH);
- JQ_SampleIdleCurrent();
- while(us_pluscount < 680)
- {
- uc_data = 0;
- uc_bitcount = 0;
- while(uc_bitcount < 8)
- {
- uc_data <<= 1;
- uc_data |= (JQ_ReadBit() & 0x01);
- if((run_type > 1) && (uc_data& 0x01) < 1)
- {
- delay_us(750);
- }
- uc_bitcount++;
- us_pluscount++;
- }
- *read_buf = uc_data;
- read_buf++;
-
- }
- }
- Power_SetSampleCurrentRange(Current_Max);
- JQBUS_IDLE;
- JQ_CommEnd();
-}
-
-/*
-@breif 起爆使能
-*/
-
-
-void JQ_CheckerEnBoomCmd()
-{
- static uint8_t JQBoomEnCmd[2] = {0x7A,0xB7};
- JQ_SendBroadCast(JQBoomEnCmd,2);
-}
-
-/*
-@breif 起爆命令
-@param plus_count 巡检脉冲个数
-@rtv 巡检应答Ack 的脉冲个数
-
-*/
-
-uint16_t JQ_CheckerBoomCmd(uint16_t plus_count,uint16_t* us_shake)
-{
- static uint8_t JQBoomcmd[2]={0xA9,0xB5};
- uint16_t us_pluscount = 0;
- uint16_t us_ack_plus = 0;
- uint16_t sample_count = 0;
- uint16_t us_bitcount = 0;
- uint16_t us_temp_shake;
- uint16_t us_max,us_min;
- JQ_CheckerEnBoomCmd();
- delay_ms(20);
- JQ_SendBroadCast(JQBoomcmd,2);
- Power_SetSampleRange_Seep(JQDriver_Sample_R,ADC_SPEED_HIGH);
- JQ_SampleIdleCurrent();
- *us_shake = JQ_Read_AD_V[JQ_Read_AD_Sample_C_IDLE-2] - JQ_Read_AD_V[2];
- while(us_pluscount < plus_count)
- {
- JQBUS_W_1;
- delay_us(100);
- //700us 延时
- JQ_Sample(JQ_Read_AD_Sample_C);
- GetMaxAndMinValue((uint16_t*)JQ_Read_AD_V,JQ_Read_AD_Sample_C,&us_max,&us_min);
- us_min = us_max - us_min;
- JQBUS_W_0;
- sample_count = 0;
- while(sample_count < JQ_Read_AD_Sample_C)
- {
- if(JQ_Read_AD_V[sample_count] > jq_idle_current )
- {
- us_bitcount++;
- }else if(us_bitcount < 2)
- {
- us_bitcount = 0;
- }
- sample_count++;
- }
- if(us_bitcount > 6)
- {
- if(us_ack_plus == 0)
- {
- us_ack_plus = us_pluscount;
- }
- else{
- us_ack_plus = ~0;
- }
- delay_us(50);
- us_bitcount = 3;
-
- }else{
- if(us_min > *us_shake)
- {
- *us_shake = us_min;
- }
- delay_us(100);
- us_bitcount = 3;
- }
- while(us_bitcount > 0)
- {
- JQ_Sample(JQ_Read_AD_Sample_C>>1);
- GetMaxAndMinValue((uint16_t*)JQ_Read_AD_V,JQ_Read_AD_Sample_C>>1,&us_max,&us_min);
-
- us_min = us_max - us_min;
- if(us_min > *us_shake)
- {
- *us_shake = us_min;
- }
- us_bitcount--;
- }
- us_pluscount++;
- }
- JQBUS_IDLE;
- JQ_CommEnd();
- return us_ack_plus;
-}
-
-static uint16_t amend_endflag = 0;
-//@brief 总线波形翻转
-void JQ_TriggerPlus(uint8_t flag)
-{
- if(flag == 1)
- {
- JQBUS_W_0;
- }else if(flag > 1){
- JQBUS_W_1;
- }
- amend_endflag = flag;
-
-}
-//@brief 时钟校准
-void JQ_TimeAmend(uint16_t cycle,uint16_t delayMs)
-{
- static uint8_t cmd_buf = 0x34;
- JQ_SendBroadCast(&cmd_buf,1);
- delay_os_ms(2);
- FireBus_ClkAmend(cycle, cycle/2, delayMs+100,JQ_TriggerPlus);
- while(amend_endflag != 3)
- {
- delay_ms(10);
- }
- JQBUS_IDLE;
- delay_os_ms(20);
-}
-//@breif 巡检
-void JQ_Inspect(uint16_t maxcount,uint8_t* buf,uint8_t state)
-{
- static uint8_t cmd_buf[]={0x97,0x00,0x00,0x00};
- cmd_buf[3] = state;
- JQ_SendRead(cmd_buf,buf,4,(maxcount+7)/8);
-}
-//@brief 启动UID扫描
-void JQ_ScanUIDBegin()
-{
- static uint8_t start_readuid_cmd = 0x54;
- JQ_SendBroadCast(&start_readuid_cmd,1);
-}
-//@brief 扫描模式读取UID
-uint8_t JQ_ScanReadUID(uint16_t begnet,uint8_t* uidbuf)
-{
-
- static uint8_t scan_uid_cmd[]={0x59,0x00,0x00};
- uint8_t time_out = 3;
- uint8_t*p_buf = uidbuf;
- uint8_t ack;
- rt_memset(p_buf,0,8);
- while(time_out > 0)
- {
- scan_uid_cmd[1] = (begnet >> 8);
- scan_uid_cmd[2] = begnet,
- ack = JQ_SendRead(scan_uid_cmd,p_buf,3,8);
- if(ack > 0)
- {
- return ack;
- }else{
- delay_os_ms(20);
- time_out--;
- }
- }
- return 0;
-}
-//@brief 读延时
-uint8_t JQ_ReadDelay(uint16_t netid,uint16_t* delaybuf)
-{
- static uint8_t cmd_buf[3]={0x63,0x00,0x00};
- cmd_buf[1] = (netid >> 8);
- cmd_buf[2] = netid;
- return JQ_SendRead(cmd_buf,(uint8_t*)delaybuf,3,2);
-}
-//@brief 写延时
-void JQ_WriteDelay(uint16_t netid,uint16_t delay)
-{
- static uint8_t cmd_buf[5]={0x68};
- cmd_buf[1] = (netid >> 8);
- cmd_buf[2] = netid;
- cmd_buf[3] = (delay >> 8);
- cmd_buf[4] = delay;
- JQ_SendBroadCast(cmd_buf,5);
-}
-//@brief 验证密码
-void JQ_VerifyPWD(uint8_t* pwd)
-{
- static uint8_t cmd_buf[5] = {0x76};
- rt_memcpy(&cmd_buf[1],pwd,4);
- JQ_SendBroadCast(cmd_buf,5);
-}
-//@brief 使能起爆
-void JQ_BoomActive(void)
-{
- static uint8_t cmd_buf[] = {0x7A,0xB7};
- JQ_SendBroadCast(cmd_buf,2);
-}
-//@brief 设置充电检测判线
-void JQ_ChargJudge(uint8_t dac)
-{
- static uint8_t cmd_buf[] = {0x82,0x00};
- cmd_buf[1] = dac;
- JQ_SendBroadCast(cmd_buf,2);
-}
-//@brief 充电
-void JQ_Chage(uint16_t bgnet)
-{
- static uint8_t cmd_buf[3] = {0x89};
- cmd_buf[1] = bgnet>>8;
- cmd_buf[2] = bgnet;
- JQ_SendBroadCast(cmd_buf,3);
-}
-//@brief 放电
-void JQ_DisChage(void)
-{
- static uint8_t cmd_buf[1] = {0x8A};
- JQ_SendBroadCast(cmd_buf,1);
-}
-//@brief 快速放电
-void JQ_FastDisChage(uint8_t sw)
-{
- static uint8_t cmd_buf[2] = {0x8B};
- cmd_buf[1] = sw;
- JQ_SendBroadCast(cmd_buf,2);
-}
-//@brief 复位
-void JQ_Reset(void)
-{
- static uint8_t cmd_buf[2] = {0x55,0xAA};
- JQ_SendBroadCast(cmd_buf,2);
-}
-//@breif 读芯片ID
-uint8_t JQ_ReadChipID(uint16_t netid,uint16_t* chipid)
-{
- static uint8_t cmd_buf[3] = {0x23};
- cmd_buf[1] = netid>>8;
- cmd_buf[2] = netid;
- return JQ_SendRead(cmd_buf,(uint8_t*)chipid,3,2);
-}
-//@brief 读OTP
-uint8_t JQ_ReadOTP(uint16_t netid,uint8_t otp_bgaddr,uint8_t read_count,uint8_t* readbuf)
-{
- static uint8_t cmd_buf[4] = {0x2A};
- uint8_t otp_endaddr = otp_bgaddr+ read_count;
- cmd_buf[1] = netid>>8;
- cmd_buf[2] = netid;
- cmd_buf[3] = otp_bgaddr;
- while(otp_bgaddr < otp_endaddr)
- {
- cmd_buf[3] = otp_bgaddr;
- if(JQ_SendRead(cmd_buf,readbuf,4,1) == 0)
- {
- break;
- }
- delay_os_ms(20);
- readbuf++;
- otp_bgaddr++;
- }
- return read_count - (otp_endaddr - otp_bgaddr);
-}
-//@brief 写OTP
-
-uint8_t JQ_WriteOTP(uint8_t otp_bgaddr,uint8_t write_count,uint8_t* writebuf)
-{
- static uint8_t cmd_buf[3] = {0x1A};
- uint8_t otp_endaddr = otp_bgaddr+ write_count;
-
- while(otp_bgaddr < otp_endaddr)
- {
- cmd_buf[1] = otp_bgaddr;
- cmd_buf[2] = *writebuf;
- JQ_SendBroadCast(cmd_buf,3);
- delay_os_ms(20);
- writebuf++;
- otp_bgaddr++;
- }
- return write_count - (otp_endaddr - otp_bgaddr);
-}
-
-//写OTP使能
-void JQ_EnWOTP(void)
-{
- static uint8_t cmd_buf[2] = {0x1E,0xC9};
- JQ_SendBroadCast(cmd_buf,2);
-}
-//@breif 读取单发状态
-uint8_t JQ_ReadState(uint16_t netid,uint8_t* state)
-{
- static uint8_t cmd_buf[3] = {0x91};
- cmd_buf[1] = netid>>8;
- cmd_buf[2] = netid;
- return JQ_SendRead(cmd_buf,state,3,1);
-}
-//@braief 设置通信电压模式
-uint8_t JQ_SetPowerMode(uint16_t h_vol,uint16_t m_vol)
-{
- return 0;
-}
diff --git a/source/elec_det/driver/JQDriver.h b/source/elec_det/driver/JQDriver.h
deleted file mode 100644
index 5f6e834..0000000
--- a/source/elec_det/driver/JQDriver.h
+++ /dev/null
@@ -1,82 +0,0 @@
-#ifndef JQDRIVER_H_
-#define JQDRIVER_H_
-
-#include "base/define.h"
-#include "hardware/gpio_cfg.h"
-#include "hardware/adc_cfg.h"
-#include "base/delay.h"
-
-
-#define JQBUS_IDLE JQBUS_W_1
-#define JQBUS_RWIDLE JQBUS_W_1
-
-
-#define JQBUS_H_PLUS 300
-#define JQBUS_L_PLUS 700
-#define JQ_Read_AD_Sample_C 140
-#define JQ_Read_AD_Sample_C_IDLE 80
-
-extern uint16_t JQ_FreeBack_MaxCur;
-extern uint16_t JQ_FreeBack_MaxTime;
-extern uint16_t JQ_FreeBack_MinCur;
-extern uint16_t JQ_FreeBack_MinTime;
-extern uint16_t JQ_CommEnd_MaxCur ;
-extern uint8_t JQ_CommEnd_CurEn ;
-
-
-//@brief 读OTP
-uint8_t JQ_ReadOTP(uint16_t netid,uint8_t otp_bgaddr,uint8_t read_count,uint8_t* readbuf);
-//@breif 读取单发状态
-uint8_t JQ_ReadState(uint16_t netid,uint8_t* state);
-//@brief 写延时
-void JQ_WriteDelay(uint16_t netid,uint16_t delay);
-//@brief 读延时
-uint8_t JQ_ReadDelay(uint16_t netid,uint16_t* delaybuf);
-//@brief 启动UID扫描
-void JQ_ScanUIDBegin(void);
-//@brief 扫描模式读取UID
-uint8_t JQ_ScanReadUID(uint16_t begnet,uint8_t* uidbuf);
-//@brief 充电
-void JQ_Chage(uint16_t bgnet);
-//@brief 放电
-void JQ_DisChage(void);
-//@brief 复位
-void JQ_Reset(void);
-//@brief 使能起爆
-void JQ_BoomActive(void);
-//@brief 时钟校准
-void JQ_TimeAmend(uint16_t cycle,uint16_t delay_ms);
-//写OTP使能
-void JQ_EnWOTP(void);
-//@brief 写OTP
-
-uint8_t JQ_WriteOTP(uint8_t otp_bgaddr,uint8_t write_count,uint8_t* writebuf);
-/*
-@breif 起爆命令
-@param cmd_count 起爆命令发送次数
-@param read_buf 读取ACK数据,1bit代表一个网络号
-@param run_type 0 不读取应答信号 =1 读取应答信号 >1 读取应答信号,且强制反馈收到应答
-*/
-
-void JQ_BoomCmd(uint8_t cmd_count,uint8_t* read_buf,uint8_t run_type);
-/*
-@breif 起爆命令
-@param plus_count 巡检脉冲个数
-@rtv 巡检应答Ack 的脉冲个数
-*/
-uint16_t JQ_CheckerBoomCmd(uint16_t plus_count,uint16_t* us_shake);
-//@breif 巡检
-void JQ_Inspect(uint16_t maxcount,uint8_t* buf,uint8_t state);
-//@brief 设置充电检测判线
-void JQ_ChargJudge(uint8_t dac);
-//@brief 验证密码
-void JQ_VerifyPWD(uint8_t* pwd);
-//@breif 读芯片ID
-uint8_t JQ_ReadChipID(uint16_t netid,uint16_t* chipid);
-//@brief 快速放电
-void JQ_FastDisChage(uint8_t sw);
-/*
-@brief 通信反码信息初始化
-*/
-void JQ_FreeBack_Prapare(uint8_t enable_flag);
-#endif
diff --git a/source/elec_det/driver/LGDriver.c b/source/elec_det/driver/LGDriver.c
deleted file mode 100644
index 99c9226..0000000
--- a/source/elec_det/driver/LGDriver.c
+++ /dev/null
@@ -1,356 +0,0 @@
-//-------------------------------------------------------------------------------------------------------
-//本文件是雷管驱动的底层程序,不对外
-//-------------------------------------------------------------------------------------------------------
-
-#include "LGDriverAPI.h"
-#include "LGDriver.h"
-#include "board.h"
-
-
-
-#define Long_Time 650
-#define Short_Time 400
-
-
-//============================================================================
-//接收波形转换
-//============================================================================
-static void LG_Receive_Switch(void)
-{
- LGDRV_PHA_H();
- Lib_delay_us(1000);
- LGDRV_PHA_L();
- Lib_delay_us(1000);
-}
-
-
-static u8 LG_ReceiveBit() //扫描用接收位
-{
- u8 ReturnBit = 0, ValueCnt = 0;
- u16 OffsetTime = 0;
-
- LGDRV_PHA_H();
-
- ValueCnt = Lib_CountFeedBackData(&OffsetTime);
-
- LGDRV_PHA_L(); //这个放到了Lib_CountFeedBackData里面了
-
- if(ValueCnt > 0)
- {
- ReturnBit = 1;
- PA11_1();
-
-// if(950 > OffsetTime)
-// Lib_delay_us(950 - OffsetTime);
-// else
-// Lib_delay_us(950);
-
- Lib_delay_us(950);
-
- PA11_0();
-
- }
- else
- {
- ReturnBit = 0;
-
-// if(500 > OffsetTime)
-// Lib_delay_us(500 - OffsetTime);
-// else
-// Lib_delay_us(500);
- Lib_delay_us(500);
-
- }
-
- return ReturnBit;
-}
-
-//============================================================================
-//发送一个字节
-//输入参数:要发送的数据
-//============================================================================
-static void LG_SendByte(u8 dat)
-{
- u8 i;
- u16 time_h, time_l;
-
- for(i = 0; i < 8; i++)
- {
- if(dat & 0x80)
- {
- time_h = Short_Time;
-
- time_l = Long_Time;
- }
- else
- {
- time_h = Long_Time;
-
- time_l = Short_Time;
- }
-
- LGDRV_PHA_H();
- Lib_delay_us(time_h);
- LGDRV_PHA_L();
- Lib_delay_us(time_l);
-
- dat <<= 1;
- }
-}
-
-//============================================================================
-//发送一个字节 校时专用,仅高低时间和通用发送有差异
-//输入参数:要发送的数据
-//============================================================================
-static void LG_SendByte_CaliTime(u16 dat)
-{
- u16 i;
- //u16 time_h = 496 - Close_Pmos_Delay * 2, time_l = 496 - Open_Pmos_Delay * 2; //150ms=150ms 1000=1000.07 12000=12000.70
-
- for(i = 0; i < dat; i++)
- {
- LGDRV_PHA_H();
- Lib_delay_us(496);
- LGDRV_PHA_L();
- Lib_delay_us(Lib_SetDelayData(Lib_CaliTime));
-
- Lib_ResetWdg();
- }
-}
-
-//============================================================================
-//接收一个字节
-//返回值:接收到的数据
-//============================================================================
-static u8 LG_ReceiveByte(void)
-{
- u8 BitValue, ReturnData = 0, i;
-
- for (i = 0; i < 8; i++)
- {
- BitValue = LG_ReceiveBit();
- ReturnData <<= 1;
- ReturnData += BitValue;
- }
- return ReturnData;
-}
-
-
-//============================================================================
-//接收参数
-//返回值:接收到的数据
-//============================================================================
-u8 LG_ReceiveParameter(u8 *Parameter, u8 Length)
-{
- u8 i = 0;
- u8 ret = 0;
-
- //OUTA输出高低电压标志 1:输出电压 0:输出高电压
- Lib_SetPowerOutAhSwitch(1);
- //接收转换
- LG_Receive_Switch();
-
- for(i = 0; i < Length; i++)
- {
- Parameter[i] = LG_ReceiveByte();
- }
-
- ret = LG_ReceiveBit();
-
- //OUTA输出高低电压标志 1:输出电压 0:输出高电压
- Lib_SetPowerOutAhSwitch(0);
-
- LGDRV_PHA_H();
-
- return ret;
-}
-
-//接收单bitAck
-u8 LG_ReceiveAck(void)
-{
- u8 ret = 0;
- u8 i;
-
- //OUTA输出高低电压标志 1:输出电压 0:输出高电压
- Lib_SetPowerOutAhSwitch(1);
- //接收转换
- LG_Receive_Switch();
-
- for(i = 0; i < 1; i++)
- {
- ret += LG_ReceiveBit();
- }
-
- //OUTA输出高低电压标志 1:输出电压 0:输出高电压
- Lib_SetPowerOutAhSwitch(0);
-
- LGDRV_PHA_H();
-
- return ret;
-}
-
-//接收单bit数据
-u16 LG_ReceiveSingleBit(u8 *Parameter, u16 Length, u8 bit)
-{
- u16 i;
- u8 j = 0;
- u16 ret = 0;
-
- //OUTA输出高低电压标志 1:输出电压 0:输出高电压
- Lib_SetPowerOutAhSwitch(1);
- //接收转换
- LG_Receive_Switch();
-
- for(i = 0; i < Length; i++)
- {
- j = LG_ReceiveBit();
-
- if(j > 0)
- {
- Parameter[i] |= bit;
- ret++;
- }
- else
- {
- Parameter[i] &= ~bit;
- }
- }
-
- //OUTA输出高低电压标志 1:输出电压 0:输出高电压
- Lib_SetPowerOutAhSwitch(0);
-
- LGDRV_PHA_H();
-
- return ret;
-}
-
-//延时起爆波形:总计发送660个波形,雷管数量状态位+补发波形 总计660个波形 雷管累计到652个波形会起爆
-u16 LG_ReceiveDetBomming(u8 *pStatus, u16 Length, u8 allow)
-{
- u16 j = 0;
- u16 i = 0;
- u16 ret = 0, tmp = 0;
-
- //OUTA输出高低电压标志 1:输出电压 0:输出高电压
- Lib_SetPowerOutAhSwitch(0);
- //接收转换
- LG_Receive_Switch();
-
- //按实际雷管数据接收数据位
- for(i = 0; i < (Length + 1); i++)
- {
- j = LG_ReceiveBit();
-
- if(j > 0)
- {
- tmp++;
-
- //记录起爆反馈状态
- pStatus[i] |= 0x04; //cBoomStatus
- }
- else
- {
- //记录起爆反馈状态
- pStatus[i] &= ~0x04; //~cBoomStatus
- }
- }
-
- //存储实际雷管数量
- ret = tmp;
-
- //OUTA输出高低电压标志 1:输出电压 0:输出高电压
- Lib_SetPowerOutAhSwitch(0);
-
- //起爆数量不对 且 不允许起爆,JQ版本
-#if 0
- //直接起爆,不判断数量,YM版本
- if((Length > tmp) && ((Length - tmp) > allow))
- {
- //中止起爆,主循环查询更新状态
- LGDRV_PHA_H();
- return ret;
- }
-#endif
-
- //预留2 0:正常模式,真实对码,真实起爆;1:真实对码,模拟起爆;2:全0对码,真实起爆;3:全0对码,模拟起爆
- if((1 == ConfigData.Reserved2) || (3 == ConfigData.Reserved2))
- {
- if(0xFF == allow)
- {
- LGDRV_PHA_H();
- return ret;
- }
- }
-
-
- for(i = 0; i < (660 - (Length + 1)); i++) //必爆651 发送660
- {
- LGDRV_PHA_H();
- Lib_delay_us(600);
- LGDRV_PHA_L();
- Lib_delay_us(400);
-
- Lib_ResetWdg();
- }
-
- LGDRV_PHA_H();
-
- return ret;
-}
-
-//发送延时起爆用来清除波形计数--接收1个bit
-void LG_CleanWave_Receive(void)
-{
- //接收转换
- LG_Receive_Switch();
-
- LG_ReceiveBit();
-}
-
-//============================================================================
-//发送功能指令
-//输入参数:要发送的功能码数据
-//============================================================================
-void LG_SendCommand(u8 Function, u8 *Parameter, u8 Length)
-{
- u8 i = 0;
-
- LGDRV_PHA_H();
- Lib_delay_ms(11);
-
- /*******开始信号********/
- LGDRV_PHA_L();
- Lib_delay_us(1500);
- LGDRV_PHA_H();
- /***********************/
-
-
- LG_SendByte(Function);//发送指令
-
- for(i = 0; i < Length; i++)
- {
- LG_SendByte(Parameter[i]);//发送参数
- }
-
- LGDRV_PHA_H();
-}
-
-
-
-//校时指令
-void LG_SendCorrectTimeCommand(u8 Function, u16 time)
-{
- LGDRV_PHA_H();
- Lib_delay_ms(11);
- LGDRV_PHA_L();
- Lib_delay_us(1500);
- LGDRV_PHA_H();
-
- LG_SendByte(Function);
-
- time += 100;
-
- LG_SendByte_CaliTime(time);
-
- LGDRV_PHA_H();
-}
diff --git a/source/elec_det/driver/LGDriver.h b/source/elec_det/driver/LGDriver.h
deleted file mode 100644
index 8d1f3e7..0000000
--- a/source/elec_det/driver/LGDriver.h
+++ /dev/null
@@ -1,21 +0,0 @@
-#ifndef __LGDRIVER_H
-#define __LGDRIVER_H
-
-//--------------------static------------------------------------
-void LG_Receive_Switch(void);
-u8 LG_ReceiveBit(void);
-void LG_SendByte(u8 dat);
-void LG_SendByte_CaliTime(u16 dat);
-u8 LG_ReceiveByte(void);
-//--------------------static------------------------------------
-
-//接收单bitAck
-u8 LG_ReceiveAck(void);
-u8 LG_ReceiveParameter(u8 *Parameter, u8 Length); //接收参数
-u16 LG_ReceiveSingleBit(u8 *Parameter, u16 Length, u8 bit); //接收单bit数据
-u16 LG_ReceiveDetBomming(u8 *pStatus, u16 Length, u8 allow); //延时放电
-void LG_SendCommand(u8 Function, u8 *Parameter, u8 Length); //发送功能指令
-void LG_SendCorrectTimeCommand(u8 Function, u16 time); //校时指令
-//发送延时起爆用来清除波形计数--接收1个bit
-void LG_CleanWave_Receive(void);
-#endif
diff --git a/source/elec_det/driver/XTDriver.c b/source/elec_det/driver/XTDriver.c
deleted file mode 100644
index 553a925..0000000
--- a/source/elec_det/driver/XTDriver.c
+++ /dev/null
@@ -1,1268 +0,0 @@
-#include "XTDriver.h"
-#include "hardware/adc_cfg.h"
-#include "hardware/timer_cfg.h"
-uint32_t XT_SquareCount = 0; //发送载波个数
-uint16_t XT_FreeBackMaxCur,XT_FreeBackMinCur,XT_FreeBackMaxTime,XT_FreeBackMinTime,XT_CommEndMaxCur;
-uint8_t XT_EnFreeBack_Test,XT_CommEnd_CurEn;
-volatile uint8_t XT_SendSquareFlag = 1; //发送方波标志
-volatile uint8_t XT_ReadUIDFlag = 1; //扫描标志
-
-
-
-
-#if XT_Read_AD_Sample_C > FIREBUS_ADC_BUF_LEN
-#error "JQDriver.c Firbus AD Sample BUFFER SIZE LIMIT"
-#else
-volatile uint16_t* XT_ADC_Buf = FireBus_ADC_Buf;//AD采样缓存区
-#endif
-
-volatile uint8_t XT_ADCCollectStartFlag = 1; //ADC采集标志
-
-uint32_t XT_ADC_BaseValue = 0; //ADC采集最低电压
-uint32_t XT_ADC_CollectValue_sum = 0; //ADC采集电压和
-#define XT_FreeBack_Noise 800
-
-//static uint32_t XT_ADCCollectIncrementValue = XTCollectIncrementValue;
-//static uint32_t XT_ADCCollectSumValue = XTCollectSumValue;
-//static uint32_t XT_TIMCollectTimerOverflowUs = XTCollectTimerOverflowUs;
-
-//static uint32_t XT_ADCSingleCollectAckValue = XTSingleCollectAckValue;
-
-//static CurrentSample_Range_eu XT_CollectResistance = XTCollectResistance;
-
-/*
-@brief 通信反码信息初始化
-*/
-void XT_FreeBack_Prapare(uint8_t enable_flag)
-{
- XT_FreeBackMaxCur = 0;
- XT_FreeBackMaxTime = 0;
- XT_FreeBackMinCur = 0xFFFF;
- XT_FreeBackMinTime = 0xFFFF;
- XT_EnFreeBack_Test = enable_flag;
-}
-
-static void XT_CommBegin()
-{
- CurrentSampleR_Def;
- WaitDelayEnd(50);//5ms
-}
-static void XT_CommEnd()
-{
- uint16_t us_temp;
- StartDelayTime();
- if(XT_CommEnd_CurEn > 0)
- {
- delay_os_ms(10);
- us_temp = ADC_Comm1p6mA_EndCur();
- if(us_temp > XT_CommEndMaxCur)
- {
- XT_CommEndMaxCur = us_temp;
- }
- }
- CurrentSampleR_Def;
-}
-
-static void XT_SendBit(uint8_t bit)
-{
- uint8_t i;
- if( bit == XTBIT0 )
- {
-
- for(i=0;i<5;i++)
- {
- XTBUS_W_0;
- delay_us(XT_DAT_PLUS_T);
- XTBUS_W_1;
- delay_us(XT_DAT_PLUS_T);
- }
- delay_us(XT_BIT_DELAY); //位结束符
- }
- else if( bit == XTBIT1)
- {
- for(i=0;i<3;i++)
- {
- XTBUS_W_0;
- delay_us(XT_DAT_PLUS_T);
- XTBUS_W_1;
- delay_us(XT_DAT_PLUS_T);
- }
-
- delay_us(XT_BIT_DELAY); //位结束符
- }
-}
-
-static void XT_SendData(uint8_t *DownData, uint8_t DownLength)
-{
- uint8_t temp,i,j;
- XT_CommBegin();
- //发送数据
- for(i=0;i> 7) & 0x01 );
- temp <<= 1;
- }
- }
-}
-
-
-volatile uint8_t XT_Trim_Flag = 0;
-static void XT_TrimPlusCallback(uint8_t flag)
-{
- if(flag == 1)
- {
- XTBUS_W_0;
- }else if(flag > 1){
- XTBUS_W_1;
- }
- XT_Trim_Flag = flag;
-}
-
-static void XT_SendTrimSquare(uint16_t cycle,uint16_t duty, uint32_t count)
-{
- delay_us(XTCmdAndSquareUs);
- FireBus_ClkAmend(cycle,duty,count,XT_TrimPlusCallback);
- XT_Trim_Flag = 0;
- while(XT_Trim_Flag != 3)
- {
- delay_ms(20);
- }
-
-}
-
-/*
-@brief 直接反馈模式
-@param timeoutcnt 回读超时时间 单位0.1ms
-@param ConfirmAckCount ADC 采样确认个数
-@param *executiontime
-*/
-static uint8_t XT_Get_Ack(uint32_t timeoutcnt, uint8_t ConfirmAckCount,uint32_t *executiontime)
-{
- uint32_t FeekValue=0,count=0;
- uint32_t ul_readtime = 0,ul_runtime = 0;
- uint8_t rtv = 1;
- LED1_Out_On;
- TimerCount_Init();
- Get100usCount();
- Power_SetSampleRange_Seep(XTDriver_Sample_R,ADC_SPEED_HFAST);
- //延时700us
- delay_us(XTCmdAndSquareUs);
-// XT_ADC_BaseValue = 0;
-// while(us_temp < 64)
-// {
-// XT_ADC_BaseValue += ADC_GetCurADCFast();
-// }
-// XT_ADC_BaseValue = (XT_ADC_BaseValue>>6) + XT_FreeBack_Noise;
- XT_ADC_BaseValue = XT_FreeBack_Noise;
- while(ul_runtime < timeoutcnt)
- {
- FeekValue = ADC_GetCurADCFast();
- if(FeekValue >= XT_ADC_BaseValue)
- {
- count++;
- }
- else
- {
- count=0;
- }
- if(count>=ConfirmAckCount)
- {
- *executiontime = ul_readtime + GetCountTimerCnt();
- rtv = 0;
- break;
- }
- ul_runtime = GetCountTimerCnt();
- if(ul_runtime > 60000)
- {
- ul_readtime += Get100usCount();
- ul_runtime = 0;
- }
- ul_runtime = ul_readtime+ul_runtime;
-
- }
- LED1_Out_Off;
- XTBUS_IDLE;
- Power_SetSampleCurrentRange(Current_Max);
- XT_CommEnd();
- return rtv;
-}
-
-
-
-
-
-static void XT_ReceiveData(uint8_t *UpData, uint32_t ReceiveBitLength)
-{
- uint8_t uc_data;
- uint32_t ul_readcount,ul_adv_sum;
- uint16_t us_adccount ,us_index,us_ack_count;
- XTBUS_RWIDLE;
- delay_us(XTCmdAndSquareUs);
-
- Power_SetSampleRange_Seep(XTDriver_Sample_R,ADC_SPEED_HIGH);
-
- UpData[0] = 0;
- XTBUS_WR_0;
- delay_us(500);
- ul_readcount = 0;
- while( ul_readcount < ReceiveBitLength)
- {
- if((ul_readcount & 0x07) == 0)
- {
- uc_data = 0;
- }
- XTBUS_WR_1;
- delay_us(120);
- for(us_adccount = 0; us_adccount < XT_Read_AD_Sample_C; us_adccount++)
- {
- XT_ADC_Buf[us_adccount] = ADC_GetCurADCFast();
- }
- XTBUS_WR_0;
-
- for(us_index = 3; us_index < us_adccount; us_index ++)
- {
- if((XT_ADC_Buf[us_index] < XT_FreeBack_Noise) && (XT_ADC_Buf[us_index-1] < XT_FreeBack_Noise))
- {
- break;
- }
- if((XT_ADC_Buf[us_index] < XT_ADC_Buf[us_index-2] ) && (XT_ADC_Buf[us_index-1] < XT_ADC_Buf[us_index-3]))
- {
- break;
- }
- }
- if(us_index >= us_adccount)
- {
- delay_us(450);
- continue;
- }
- us_ack_count = 0;
- ul_adv_sum = 0;
- while(us_index < us_adccount)
- {
- if(XT_ADC_Buf[us_index] > XT_FreeBack_Noise)
- {
- ul_adv_sum += XT_ADC_Buf[us_index];
- us_ack_count++;
- }else if(us_ack_count < 2)//连续两个大于2启动检测
- {
- ul_adv_sum = 0;
- us_ack_count = 0;
- }
- us_index++;
- }
-
- if(us_ack_count > 10)
- {
-
- ul_adv_sum = ul_adv_sum / us_ack_count;
- if( XT_EnFreeBack_Test > 0 )
- {
- if(XT_FreeBackMaxCur == 0)
- {
- XT_FreeBackMaxCur = XT_FreeBackMinCur = ul_adv_sum;
- }else if(ul_adv_sum > XT_FreeBackMaxCur){
- XT_FreeBackMaxCur = ul_adv_sum;
- }else if(ul_adv_sum < XT_FreeBackMinCur){
- XT_FreeBackMinCur = ul_adv_sum;
-
- }
- if(XT_FreeBackMaxTime == 0)
- {
- XT_FreeBackMaxTime = XT_FreeBackMinTime = us_ack_count;
- }else if(us_ack_count > XT_FreeBackMaxTime)
- {
- XT_FreeBackMaxTime = us_ack_count;
- }else if(us_ack_count < XT_FreeBackMinTime){
- XT_FreeBackMinTime = us_ack_count;
- }
-
- }
- uc_data |= (0x80 >> (ul_readcount & 0x07));
- }
- UpData[ul_readcount>>3] = uc_data;
- ul_readcount++;
- delay_us(300);
-
- }
- XTBUS_RWIDLE
- XT_CommEnd();
-}
-
-
-static void XT_ScanUID(uint8_t *UpData, uint32_t ReceiveBitLength)
-{
- uint8_t uc_data;
- uint32_t ul_readcount;
-
- uint16_t us_adccount,us_index2,us_index3;
- uint16_t us_ack_count;
- uint16_t us_sum1,us_sum2,us_minSum = 0xFFFF;
- XTBUS_RWIDLE;
- delay_us(XTCmdAndSquareUs);
-
- Power_SetSampleRange_Seep(XTDriver_Sample_R,ADC_SPEED_HFAST);
-
- UpData[0] = 0;
- XTBUS_WR_0;
- delay_us(500);
- ul_readcount = 0;
- while( ul_readcount < ReceiveBitLength)
- {
- if((ul_readcount & 0x07) == 0)
- {
- uc_data = 0;
- }
- XTBUS_WR_1;
- delay_us(120);
- us_sum1 = 0;
- us_sum2 = 0;
- for(us_adccount = 0; us_adccount < 8; us_adccount++)
- {
- XT_ADC_Buf[us_adccount] = ADC_GetCurADCFast();
- if(us_adccount < 4)
- {
- us_sum1 += XT_ADC_Buf[us_adccount];
- us_index2 = us_adccount;
- }else{
- us_sum2 += XT_ADC_Buf[us_adccount];
- us_index3 = us_adccount;
- }
- }
-
- us_ack_count = 0;
-
- while(us_adccount < 160 && us_ack_count < 5)
- {
- if(us_sum1 < us_minSum)
- {
- us_minSum = us_sum1;
- }
- if(us_sum2 > (us_minSum + (XT_FreeBack_Noise << 2)))
- {
- us_ack_count++;
- }else{
- us_ack_count = 0;
- }
- us_sum1 -= XT_ADC_Buf[(us_index2-3)&0x07];
- us_sum2 -= XT_ADC_Buf[(us_index3-3)&0x07];
- us_adccount++;
- XT_ADC_Buf[us_adccount & 0x07] = ADC_GetCurADCFast();
- us_index2++;
- us_index3++;
- us_sum1 += XT_ADC_Buf[us_index2&0x07];
- us_sum2 += XT_ADC_Buf[us_index3&0x07];
-
- }
- if(us_ack_count < 5)
- {
- delay_us(600);
- XTBUS_WR_0;
- delay_us(300);
- }else{
- XTBUS_WR_0;
- delay_us(800);
- uc_data |= (0x80 >> (ul_readcount & 0x07));
- }
- UpData[ul_readcount>>3] = uc_data;
- ul_readcount++;
- }
- XTBUS_RWIDLE
- XT_CommEnd();
-}
-
-static uint8_t XT_CalCRC(uint8_t data[], uint8_t length)
-{
- uint8_t c=0,temp,crc[8] = {0},nextcrc[8] = {0};
- uint8_t i,j,k;
- for(i=0;i> (7-j)) & 0x1;
- nextcrc[0] = temp ^ crc[7];
- nextcrc[1] = temp ^ crc[0] ^ crc[7];
- nextcrc[2] = temp ^ crc[1] ^ crc[7];
- nextcrc[3] = crc[2];
- nextcrc[4] = crc[3];
- nextcrc[5] = crc[4];
- nextcrc[6] = crc[5];
- nextcrc[7] = crc[6];
- for(k=0;k<8;k++)
- {
- crc[k] = nextcrc[k];
- }
- }
- }
- for(i=0;i<8;i++)
- {
- c += crc[i]<>6);
- *(adcvalue+1) = (RData[6]<<4) + (RData[7]>>4);
- *(adcvalue+2) = (RData[7]<<6) + (RData[8]>>2);
-
- return 0;
-}
-
-
-//函数名称:测量储能电容
-//函数参数:
-//函数功能:UID正确且CRC校验通过时,将电容电压比较器档位设定为LEVEL指定的档位,
-// 并打开恒流源开关,关闭放电开关进行充电。充电完成时发出反馈,并关闭恒流源开关,打开放电开关。
-//函数返回:充电时间
-uint8_t XT_Measure_Cap(uint8_t *uid, uint8_t uidlen, uint8_t level, uint32_t *chargetime)
-{
- uint8_t SData[16];
-
- SData[0] = XT_CMDA_MEASURE_CAP;
- memcpy(SData+1,uid,uidlen);
- SData[uidlen+1] = level;
- SData[uidlen+2] = XT_CalCRC(SData,uidlen+2);
- XT_SendData(SData,uidlen+3);
-
- return XT_Get_Ack(*chargetime, XTConfirmAckCount, chargetime);
-}
-
-
-//函数名称:单发充电
-//函数参数:
-//函数功能:UID正确且CRC校验通过时,将电容电压比较器档位设定为LEVEL指定的档位,
-// 将当前充满电标志位复位,并打开充电开关,关闭放电开关进行充电。充电完成时发出反馈,并将曾充满电标志位、当前充满电标志位置位。
-// LEVEL:0x11-1V、0x22-4V、0x33-6V、0x44-10V、0x55-12V、0x66-14V、0x77-18V、0x88-22V、0x99-26V
-//函数返回:是否充满
-uint8_t XT_Charge_One(uint8_t *uid,uint8_t uidlen, uint8_t level,uint16_t busvoltage, uint8_t isgetack)
-{
- uint8_t SData[16];
- uint32_t chargetime=0;
- uint8_t chargeresult =1;
-
- SData[0] = XT_CMDA_CHARGE;
- memcpy(SData+1,uid,uidlen);
- SData[uidlen+1] = level;
- SData[uidlen+2] = XT_CalCRC(SData,uidlen+2);
- XT_SendData(SData,uidlen+3);
-
- PowerCalibration_set(busvoltage,XTCOMMMEDIUMVOLTAGE); //修改总线电压
-
- if(!isgetack || level == 0x00)
- {
- return 0;
- }
-
- //XT_GetAckInit();
-
- chargeresult = XT_Get_Ack(XTSingleCollectAckTimerOverflowCnt, XTConfirmAckCount, &chargetime);
-
- return chargeresult;
-}
-
-
-/******************************************
-*
-* B类指令(广播指令)
-*
-*******************************************/
-
-
-//函数名称:清除已读状态
-//函数参数:
-//函数功能:UID已读标志位复位。
-//函数返回:
-void XT_Clear_Read(void)
-{
- uint8_t SData[2];
-
- SData[0] = XT_CMDB_CLEAR_READH;
- SData[1] = XT_CMDB_CLEAR_READL;
- XT_SendData(SData,2);
-}
-
-
-//函数名称:起爆
-//函数参数:
-//函数功能:若起爆密码验证通过标志位、延期标定完成标志位、曾充满电标志位均为1,
-// 则设置电容电压比较器档位为最低档位,并进入延期状态。延期倒计时归零时,进行起爆前反馈,然后逐位翻转起爆控制信号。之后进行起爆后反馈。若上述标志位不均为1,则对芯片进行复位,效果同软件复位指令相同
-//函数返回:
-void XT_Fire()
-{
- uint8_t SData[2];
-
- SData[0] = XT_CMDB_FIREH;
- SData[1] = XT_CMDB_FIREL;
- XT_SendData(SData,2);
-}
-
-
-uint8_t XT_FireandCheck(uint8_t *delay) //delay 3字节 最大的延期时间
-{
- uint8_t SData[2];
- uint8_t fireresult = 1;
- uint32_t timeout=0;
- uint32_t delay_max=0;
-
- delay_max = (*delay<<16) + (*(delay+1)<<8) + (*(delay+2));
-
- timeout = delay_max*10+5000;
-
- SData[0] = XT_CMDB_FIREH;
- SData[1] = XT_CMDB_FIREL;
- XT_SendData(SData,2);
-
- fireresult = XT_Get_Ack(timeout, 2, &delay_max);
- return fireresult;
-}
-
-uint8_t XT_MeasureFire(uint32_t *delay)
-{
- uint8_t SData[2];
- uint8_t fireresult = 1;
- uint32_t timeout=0;
- uint32_t delay_max=0;
-
- delay_max = *delay+2;
-
- timeout = delay_max*10+5000;
-
- SData[0] = XT_CMDB_FIREH;
- SData[1] = XT_CMDB_FIREL;
- XT_SendData(SData,2);
-
- fireresult = XT_Get_Ack(timeout, 2, delay);
- return fireresult;
-}
-
-//函数名称:初始化
-//函数参数:
-//函数功能:初始化寄存器。
-//函数返回:
-void XT_Init(uint8_t regdata)
-{
- uint8_t SData[3];
-
- SData[0] = XT_CMDB_INITH;
- SData[1] = XT_CMDB_INITL;
- SData[2] = regdata;
- XT_SendData(SData,3);
-}
-
-
-//函数名称:软件复位
-//函数参数:
-//函数功能:对芯片进行复位,2,000时钟周期后可以继续接收指令。
-//函数返回:
-void XT_Reset()
-{
- uint8_t SData[2];
-
- SData[0] = XT_CMDB_RESETH;
- SData[1] = XT_CMDB_RESETL;
- XT_SendData(SData,2);
-}
-
-
-//函数名称:扫描
-//函数参数:
-//函数功能:读出UID、编号值、延期值、孔位值、状态字节。使用防冲突机制,当重复发送该指令时,所有在线的雷管会按照UID顺序从大到小依次反馈。
-// 指令码长度为2字节,UID长度为7~13字节,编号值长度为2字节,延期值长度为3字节,孔位值长度为2字节,状态字节长度为1字节
-//函数返回:UID、编号值、延期值、孔位值、状态字节
-uint8_t XT_Read_Uid(uint8_t *uid, uint8_t uidlen)
-{
- uint8_t SData[2];
-
- SData[0] = XT_CMDB_READ_UIDH;
- SData[1] = XT_CMDB_READ_UIDL;
- XT_SendData(SData,2);
- //XT_ReceiveData(uid,((uint32_t)uidlen<<3)+66);
- XT_ScanUID(uid,((uint32_t)uidlen<<3)+66);
-
- if(*(uid+uidlen+8) & 0x80)
- return 0;
- else
- return 1;
-}
-
-
-//函数名称:快速延期标定
-//函数参数:
-//函数功能:翻转信号接收模块的识别极性,起爆器会以正常通信相反的极性发送该指令,以控制极性识别错误的雷管恢复正确极性。
-//函数返回:
-void XT_Trim_Fast(void)
-{
- XT_Trim_Faset_Cycle(1000,500);
-}
-void XT_Trim_Faset_Cycle(uint16_t cycle,uint16_t duty)
-{
- uint8_t SData[2];
-
- SData[0] = XT_CMDB_TRIM_FASTH;
- SData[1] = XT_CMDB_TRIM_FASTL;
- XT_SendData(SData,2);
-
- XT_SendTrimSquare(cycle,duty,1026);
-}
-
-//函数名称:完整延期标定
-//函数参数:
-//函数功能:标定第1个方波下降沿至第(DELAY+1)个方波下降沿所对应的时钟周期数,并写入TIMER模块的计数器中。标定完成标志位置位。
-//函数返回:
-void XT_Trim_Complete(uint32_t delay_max)
-{
- XT_Trim_Complete_Cycle(1000,500,delay_max);
-}
-void XT_Trim_Complete_Cycle(uint16_t cycle,uint16_t duty, uint32_t delay_max)
-{
- uint8_t SData[2];
-
- SData[0] = XT_CMDB_TRIM_COMPLETEH;
- SData[1] = XT_CMDB_TRIM_COMPLETEL;
- XT_SendData(SData,2);
-
- XT_SendTrimSquare(cycle,duty,delay_max);
-}
-
-
-//函数名称:在线检测
-//函数参数:
-//函数功能:指令后发送数量等于最大编号值的方波,每发雷管对方波进行计数,在计数到自己的编号值所对应的方波时,反馈1
-//函数返回:
-uint8_t XT_Check_Online(uint16_t index_max, uint8_t *online)
-{
- uint8_t SData[2];
-
- SData[0] = XT_CMDB_CHECK_ONLINEH;
- SData[1] = XT_CMDB_CHECK_ONLINEL;
- XT_SendData(SData,2);
- XT_ReceiveData(online, index_max+8);
-
- return 0;
-}
-
-
-//函数名称:验证起爆密码
-//函数参数:
-//函数功能:验证起爆密码。验证正确时反馈并将起爆密码验证通过标志位置位,否则不反馈
-//函数返回:
-uint8_t XT_Check_Bmid(uint8_t *bmid, uint8_t bmidlen)
-{
- uint8_t SData[10],RData[1]={0};
-
- SData[0] = XT_CMDB_CHECK_BMIDH;
- SData[1] = XT_CMDB_CHECK_BMIDL;
-
- memcpy(SData+2,bmid,bmidlen);
- XT_SendData(SData,2+bmidlen);
-
- XT_ReceiveData(RData, 1);
-
- if(*RData & 0x80)
- return 0;
- else
- return 1;
-}
-
-
-//函数名称:获取全部验证状态
-//函数参数:
-//函数功能:若曾充满电标志位、延期标定完成标志位、起爆密码验证通过标志位均为1则不反馈,否则反馈
-//函数返回:
-uint8_t XT_Check_Fire_All(void)
-{
- uint8_t SData[2],RData[1]={0};
-
- SData[0] = XT_CMDB_CHECK_FIRE_ALLH;
- SData[1] = XT_CMDB_CHECK_FIRE_ALLL;
- XT_SendData(SData,2);
-
- XT_ReceiveData(RData, 1);
-
- if(*RData & 0x80)
- return 1;
- else
- return 0;
-}
-
-
-//函数名称:逐发获取验证状态
-//函数参数:
-//函数功能:指令后发送数量等于最大编号值的方波。
-// 每发雷管对方波进行计数,在计数到自己的编号值所对应的方波时,
-// 若当前充满电标志位、延期标定完成标志位、起爆密码验证通过标志位均为1则反馈,否则不反馈
-//函数返回:
-uint8_t XT_Check_Fire_Each(uint32_t index_max, uint8_t *check)
-{
- uint8_t SData[2];
-
- SData[0] = XT_CMDB_CHECK_FIRE_EACHH;
- SData[1] = XT_CMDB_CHECK_FIRE_EACHL;
- XT_SendData(SData,2);
- XT_ReceiveData(check, index_max);
-
- return 0;
-}
-
-
-//函数名称:设置反馈电流大小
-//函数参数:
-//函数功能:CRC校验通过时,将SETTING常驻寄存器的[3:2]位改为LEVEL所指定的档位。不改变EEPROM。若要改变EEPROM,应使用写配置区指令。
-//函数返回:
-void XT_Set_Current(uint8_t level)
-{
- uint8_t SData[3];
-
- SData[0] = XT_CMDB_SET_CURRENTH;
- SData[1] = level;
- SData[2] = XT_CalCRC(SData,2);
- XT_SendData(SData,3);
-}
-
-
-//函数名称:广播充电
-//函数参数:
-//函数功能:CRC校验通过时,将电容电压比较器档位设定为LEVEL指定的档位,将当前充满电标志位复位,
-// 并打开充电开关,关闭放电开关进行充电。充电完成时将曾充满电标志位、当前充满电标志位置位。
-// LEVEL:0x11-1V、0x22-4V、0x33-6V、0x44-10V、0x55-12V、0x66-14V、0x77-18V、0x88-22V、0x99-26V
-//函数返回:
-void XT_Charge_All(uint8_t level)
-{
- uint8_t SData[3];
-
- SData[0] = XT_CMDB_CHARGE;
- SData[1] = level;
- SData[2] = XT_CalCRC(SData,2);
- XT_SendData(SData,3);
-}
-
-//函数名称:检查配置区
-//函数参数:
-//函数功能:CRC校验通过时,若配置区中的UID/起爆密码长度及版本号两个字段同指令中的值相同则不反馈,否则反馈
-//函数返回:
-uint8_t XT_Check_Config(uint8_t *config)
-{
- uint8_t SData[4],RData[1]={0};
-
- SData[0] = XT_CMDB_CHECK_CONFIG;
- SData[1] = *(config);
- SData[2] = *(config+1);
- SData[3] = XT_CalCRC(SData,3);
- XT_SendData(SData,4);
-
- XT_ReceiveData(RData, 1);
-
- if(*RData & 0x80)
- return 1;
- else
- return 0;
-}
-
-
-/******************************************
-*
-* C类指令(测试指令)
-*
-*******************************************/
-
-//函数名称:写UID
-//函数参数:
-//函数功能:将UID写入EEPROM。写入完成后有反馈
-//函数返回:
-uint8_t XT_Write_Uid(uint8_t *uid, uint8_t uidlen)
-{
- uint8_t SData[14];
- uint32_t writetime=0;
-
- SData[0] = XT_CMDC_WRITE_UID;
- memcpy(SData+1,uid,uidlen);
- XT_SendData(SData,uidlen+1);
-
- return XT_Get_Ack(XTWriteBitTimerOverflowCnt, XTConfirmAckCount, &writetime);
-}
-
-
-//函数名称:写起爆密码
-//函数参数:
-//函数功能:将起爆密码写入EEPROM。写入完成后有反馈
-//函数返回:
-uint8_t XT_Write_Bmid(uint8_t *bmid, uint8_t bmidlen)
-{
- uint8_t SData[9];
- uint32_t writetime=0;
-
- SData[0] = XT_CMDC_WRITE_BMID;
- memcpy(SData+1,bmid,bmidlen);
- XT_SendData(SData,bmidlen+1);
- return XT_Get_Ack(XTWriteBitTimerOverflowCnt, XTConfirmAckCount, &writetime);
-}
-
-
-//函数名称:写管壳码
-//函数参数:
-//函数功能:将管壳码写入EEPROM。写入完成后有反馈
-//函数返回:
-uint8_t XT_Write_Shell(uint8_t *shell)
-{
- uint8_t SData[14];
- uint32_t writetime=0;
-
- SData[0] = XT_CMDC_WRITE_SHELL;
- memcpy(SData+1,shell,13);
-
- XT_SendData(SData,14);
-
- return XT_Get_Ack(XTWriteBitTimerOverflowCnt, XTConfirmAckCount, &writetime);
-}
-
-
-//函数名称:写现场值_C
-//函数参数:
-//函数功能:将编号值、延期值、孔位值写入EEPROM。写入完成后有反馈。编号值长度为2字节,延期值长度为3字节,孔位值长度为2字节
-//函数返回:
-uint8_t XT_Write_Field_All(uint8_t *field)
-{
- uint8_t SData[8];
- uint32_t writetime=0;
-
- SData[0] = XT_CMDC_WRITE_FIELD;
-
- memcpy(SData+1,field,13);
-
- XT_SendData(SData,8);
-
- return XT_Get_Ack(XTWriteBitTimerOverflowCnt, XTConfirmAckCount, &writetime);
-}
-
-
-//函数名称:写配置区
-//函数参数:
-//函数功能:将LEN、SETTING、REV写入EEPROM及相应的常驻寄存器。写入完成后有反馈
-//函数返回:
-uint8_t XT_Write_Config(uint8_t *config)
-{
- uint8_t SData[4];
- uint32_t writetime=0;
-
- SData[0] = XT_CMDC_WRITE_CONFIG;
- memcpy(SData+1,config,3);
- XT_SendData(SData,4);
-
- return XT_Get_Ack(XTWriteBitTimerOverflowCnt, XTConfirmAckCount, &writetime);
-}
-
-
-//函数名称:写测量参数值
-//函数参数:
-//函数功能:将CCSC、AMP、R1、Rdson写入EEPROM。写入完成后有反馈
-//函数返回:
-uint8_t XT_Write_Param(uint8_t *param)
-{
- uint8_t i,SData[5];
- uint32_t writetime=0;
-
- SData[0] = XT_CMDC_WRITE_PARAM;
-
- for(i=0;i<4;i++)
- {
- SData[i+1] = *(param+i);
- }
- memcpy(SData+1,param,4);
-
- XT_SendData(SData,5);
-
- return XT_Get_Ack(XTWriteBitTimerOverflowCnt, XTConfirmAckCount, &writetime);
-}
-
-
-//函数名称:测量储能电容C
-//函数参数:
-//函数功能:UID正确且CRC校验通过时,将电容电压比较器档位设定为LEVEL指定的档位,并打开恒流源开关,关闭放电开关进行充电。充电完成时发出反馈,并关闭恒流源开关,打开放电开关。
-//函数返回:充电时间
-uint8_t XT_Measure_Cap_All(uint8_t level, uint32_t *chargetime)
-{
- uint8_t SData[2];
-
- SData[0] = XT_CMDC_MEASURE_CAP;
- SData[1] = level;
- XT_SendData(SData,2);
- return XT_Get_Ack(*chargetime, XTConfirmAckCount, chargetime);
-}
-
-
-//函数名称:锁定
-//函数参数:
-//函数功能:向EEPROM中LOCK字段写入0x8B,锁定标志位置位。写入完成后有反馈。锁定后C类指令不再识别,仅可写入现场值
-//函数返回:
-void XT_Lock(void)
-{
- uint8_t SData[1];
-
- SData[0] = XT_CMDC_LOCK;
- XT_SendData(SData,1);
- delay_us(700);
- XTBUS_W_0;
- delay_us(500);
- XTBUS_W_1;
- delay_os_ms(50);
-}
-
-
-//函数名称:读测量参数值_C
-//函数参数:
-//函数功能:读出CCSC、AMP、R1、Rdson
-//函数返回:
-uint8_t XT_Read_Param_All(uint8_t *param)
-{
- uint8_t SData[1];
-
- SData[0] = XT_CMDC_READ_PARAM;
- XT_SendData(SData,1);
- XT_ReceiveData(param, 34);
-
- if(*(param+4) & 0x80)
- return 0;
- else
- return 1;
-}
-
-
-//函数名称:读配置区
-//函数参数:
-//函数功能:读出CKCFG、LEN、SETTING、REV
-//函数返回:
-uint8_t XT_Read_Config(uint8_t *config)
-{
- uint8_t SData[1];
-
- SData[0] = XT_CMDC_READ_CONFIG;
- XT_SendData(SData,1);
- XT_ReceiveData(config, 34);
-
- if(*(config+4) & 0x80)
- return 0;
- else
- return 1;
-}
-
-
-//函数名称:读管壳码_C
-//函数参数:
-//函数功能:读出管壳码。管壳码长度为13字节。反馈完成后会继续反馈一位1作为结束符
-//函数返回:
-uint8_t XT_Read_Shell_All(uint8_t *shell)
-{
- uint8_t SData[1];
-
- SData[0] = XT_CMDC_READ_SHELL;
- XT_SendData(SData,1);
- XT_ReceiveData(shell, 106);
-
- if(*(shell+13) & 0x80)
- return 0;
- else
- return 1;
-}
-
-
-//函数名称:测量药头电阻_C
-//函数参数:
-//函数功能:收到指令时打开药头电阻测量电路开关。等待40个载波后,发出ADC复位信号,再经过1个载波后,发出开始ADC采样信号,随后的8个载波中反馈ADC采样的值。然后再发出ADC复位信号,如上重复三次
-//函数返回:
-uint8_t XT_Measure_Res_All(uint8_t *adcvalue)
-{
- uint8_t SData[1],RData[9]={0};
-
- SData[0] = XT_CMDC_MEASURE_RES;
- XT_SendData(SData,1);
- XT_ReceiveData(RData, 70);
-
- *adcvalue = (RData[5]<<2) + (RData[6]>>6);
- *(adcvalue+1) = (RData[6]<<4) + (RData[7]>>4);
- *(adcvalue+2) = (RData[7]<<6) + (RData[8]>>2);
-
- return 0;
-}
-
-
-uint8_t XT_Get_UID_R(uint8_t *uid, uint8_t uidlen) //算桥丝电阻
-{
- uint8_t adcvalue[3];
- uint16_t qsadc=0,count=1;
-
- XT_Measure_Res(uid,uidlen,adcvalue);
-
- qsadc = adcvalue[1];
- if(adcvalue[0]>0x00 && adcvalue[0]<0xF0)
- {
- qsadc += adcvalue[0];
- count++;
- }
- if(adcvalue[2]>0x00 && adcvalue[2]<0xF0)
- {
- qsadc += adcvalue[2];
- count++;
- }
- qsadc = qsadc / count;
- return (qsadc & 0xFF);
-// if(qsadc < 0xF0)
-// return 0;
-// else
-// return 1;
-}
-
-
-uint8_t XT_Get_R() //算桥丝电阻
-{
- uint8_t adcvalue[3];
- uint16_t qsadc=0,count=1;
-
- XT_Measure_Res_All(adcvalue);
-
- qsadc = adcvalue[1];
- if(adcvalue[0]>0x00 && adcvalue[0]<0xF0)
- {
- qsadc += adcvalue[0];
- count++;
- }
- if(adcvalue[2]>0x00 && adcvalue[2]<0xF0)
- {
- qsadc += adcvalue[2];
- count++;
- }
- qsadc = qsadc / count;
- return (qsadc & 0xFF);
-// if(qsadc < 0xF0)
-// return 0;
-// else
-// return 1;
-}
-
-uint8_t XT_Get_UID_C(uint8_t *uid, uint8_t uidlen, uint8_t level, uint32_t time_out,float *CapacitanceValue) //算储能电容
-{
- uint8_t exeresult=1;
- uint32_t chargetime=time_out;
- uint8_t param[5]={0};
- float CSCC=0;
-
- exeresult = XT_Measure_Cap(uid, uidlen, level, &chargetime);
- if(exeresult)
- {
- return 1;
- }
-
- __disable_irq();
- delay_ms(10);
- __enable_irq();
-
- exeresult = XT_Read_Param(uid,uidlen, param);
- if(exeresult)
- {
- return 1;
- }
-
- CSCC = 0.390625f * param[0] + 120;
-
- if(level == 0x11)
- {
- *CapacitanceValue = CSCC * chargetime /10000.0f;
- }
- else if(level == 0x22)
- {
- *CapacitanceValue = CSCC * chargetime / 40000.0f;
- }
- else if(level == 0x33)
- {
- *CapacitanceValue = CSCC * chargetime / 100000.0f;
- }
-
- return 0;
-}
-
-uint8_t XT_Get_C(uint8_t level,uint32_t time_out ,float *CapacitanceValue) //算储能电容
-{
- uint8_t exeresult=1;
- uint32_t chargetime=time_out;
- uint8_t param[5]={0};
- float CSCC=0;
-
- exeresult = XT_Measure_Cap_All(level, &chargetime);
- if(exeresult)
- {
- return 1;
- }
-
- delay_os_ms(20);
-
- exeresult = XT_Read_Param_All(param);
- if(exeresult)
- {
- return 1;
- }
-
- CSCC = 0.390625f * param[0] + 120;
-
- if(level == 0x11)
- {
- *CapacitanceValue = CSCC * chargetime /10000.0f;
- }
- else if(level == 0x22)
- {
- *CapacitanceValue = CSCC * chargetime / 40000.0f;
- }
- else if(level == 0x33)
- {
- *CapacitanceValue = CSCC * chargetime / 100000.0f;
- }
-
- return 0;
-}
-
diff --git a/source/elec_det/driver/XTDriver.h b/source/elec_det/driver/XTDriver.h
deleted file mode 100644
index d8ccd84..0000000
--- a/source/elec_det/driver/XTDriver.h
+++ /dev/null
@@ -1,187 +0,0 @@
-#ifndef XTDRIVER_H
-#define XTDRIVER_H
-
-#include "base/define.h"
-#include "hardware/gpio_cfg.h"
-#include "hardware/adc_cfg.h"
-#include "base/delay.h"
-#include "hardware/power.h"
-#include
-
-
-
-#define XTBUS_IDLE XTBUS_W_1
-#define XTBUS_RWIDLE XTBUS_WR_1
-
-#define XT_Read_AD_Sample_C 120
-
-#define XT_ADC_SAMPLE_TIME 589u //采样 XT_Read_AD_Sample_C 所需时间
-
-
-
-#define XTREGISTERVOLTAGE 80
-#define XTCOMMHIGHVOLTAGE 100 //10V 1200米干线可以,1400米干线电压不够
-#define XTCHARGEINSTRUCTIONVOLTAGE 160
-#define XTCOMMMEDIUMVOLTAGE 80
-#define XTCHARGEVOLTAGE 260 //充电20V 1200米电压不够, 充电18V 1200米分档充能充满
-
-#define XTBIT0 0
-#define XTBIT1 1
-
-#define XTFIRSTDELAY 138
-#define XTFIRSTCYCLE 108
-#define XTSECONDDELAY 128
-#define XTSECONDCYCLE 118
-#define XTTHRIDDELAY 123
-#define XTTHRIDCYCLE 118
-#define XTOTHERDELAY 123
-#define XTOTHERCYCLE 113
-
-
-#define XT_DAT_PLUS_T 100
-#define XT_BIT_DELAY 180
-
-#define XT_TRIM_DELAY 293
-#define XTTRIMCYCLE 693
-
-//#define XTFIRSTDELAY 140 //1200米低温可能芯片识别不出来指令
-//#define XTFIRSTCYCLE 140
-//#define XTSECONDDELAY 110
-//#define XTSECONDCYCLE 110
-//#define XTTHRIDDELAY 110
-//#define XTTHRIDCYCLE 110
-//#define XTOTHERDELAY 110
-//#define XTOTHERCYCLE 110
-//#define XTBITDELAY 180
-//#define XTTRIMDELAY 293
-//#define XTTRIMCYCLE 693
-
-
-#define XTCmdAndSquareUs 700 //指令与方波的时间间隔
-#define XTTimOverflowUs 100 //TIM定时器溢出时间
-#define XTSquareLowTimNum 12 //方波低电平TIM溢出数 这个时间让电容充电 100us后才会开始充电 //原值7 越长反馈幅度越大,最大15
-#define XTSquareCollectTimNum 1 //方波高电平内采样TIM溢出数
-#define XTSquareHighTimNum 7 //方波高电平TIM溢出数 确保比芯片反馈完多100us,最小7,最大15,短点好
-
-#define XTCollectResistance 2 //2 - R10_4ma_54ma_MC 3-R1_33ma_540ma_MC
-#define XTCollectADCChannel AN_MAL_CH //AN_UA_CH AN_MAL_CH
-
-#define XTCollectIncrementValue 150 //最小200mV 低温下扫描间隔长一点70ms,300ms一个,短了电压会不够 抢反馈
-#define XTCollectSumValue 1500
-#define XTSingleCollectAckValue 800 //单发检测
-#define XTConfirmAckCount 10
-
-#define XTCollectTimerPrescaler 72 //1us
-#define XTCollectTimerOverflowUs 600 //600us //450us //要将反馈全部包进去,反馈开始时间最晚在边沿后350us
-#define XTSingleCollectTimerPrescaler 7200 //0.1ms
-#define XTSingleCollectTimerOverflowMs 500 //50ms
-#define XTSingleCollectAckTimerOverflowCnt 20000 //2s //单发充电完成
-#define XTWriteBitTimerOverflowCnt 500 //50ms 指令应答超时
-
-#define XT_ADC_BUF_LEN 140
-
-//************************************************************************//
-#define XT_CMDA_WRITE_FIELD 0xEC //写现场值
-#define XT_CMDA_READ_FIELD 0xEF //读现场值
-#define XT_CMDA_READ_SHELL 0xF4 //读管壳码
-#define XT_CMDA_READ_PARAM 0xF1 //读测量参数值
-#define XT_CMDA_MEASURE_RES 0xF8 //测量药头电阻
-#define XT_CMDA_MEASURE_CAP 0xDB //测量储能电容
-#define XT_CMDA_CHARGE 0xDD //单发充电
-
-#define XT_CMDB_CLEAR_READH 0x1F //清除已读状态高8位
-#define XT_CMDB_CLEAR_READL 0x2A //清除已读状态低8位
-#define XT_CMDB_FIREH 0x3C //起爆高8位
-#define XT_CMDB_FIREL 0xC8 //起爆低8位
-#define XT_CMDB_INITH 0x1A //初始化寄存器高8位
-#define XT_CMDB_INITL 0x61 //初始化寄存器低8位
-#define XT_CMDB_RESETH 0x19 //软件复位高8位
-#define XT_CMDB_RESETL 0x66 //软件复位低8位
-#define XT_CMDB_READ_UIDH 0x33 //扫描高8位
-#define XT_CMDB_READ_UIDL 0x34 //扫描低8位
-#define XT_CMDB_TRIM_FASTH 0x2E //快速延期标定高8位
-#define XT_CMDB_TRIM_FASTL 0x2D //快速延期标定低8位
-#define XT_CMDB_TRIM_COMPLETEH 0x2D //完整延期标定高8位
-#define XT_CMDB_TRIM_COMPLETEL 0x33 //完整延期标定低8位
-#define XT_CMDB_CHECK_ONLINEH 0x2B //在线检测高8位
-#define XT_CMDB_CHECK_ONLINEL 0x4B //在线检测低8位
-#define XT_CMDB_CHECK_BMIDH 0x28 //验证起爆密码高8位
-#define XT_CMDB_CHECK_BMIDL 0x7F //验证起爆密码低8位
-#define XT_CMDB_CHECK_FIRE_ALLH 0x27 //获取全部验证状态高8位
-#define XT_CMDB_CHECK_FIRE_ALLL 0x52 //获取全部验证状态低8位
-#define XT_CMDB_CHECK_FIRE_EACHH 0x24 //获取逐发验证状态高8位
-#define XT_CMDB_CHECK_FIRE_EACHL 0x55 //获取逐发验证状态低8位
-#define XT_CMDB_SET_CURRENTH 0x42 //设置反馈电流大小
-#define XT_CMDB_CHARGE 0x41 //广播充电
-#define XT_CMDB_CHECK_CONFIG 0x70 //检查配置区
-
-#define XT_CMDC_WRITE_UID 0x1E //写UID
-#define XT_CMDC_WRITE_BMID 0x1D //写起爆密码
-#define XT_CMDC_WRITE_SHELL 0x1B //写管壳码
-#define XT_CMDC_WRITE_FIELD 0x18 //写现场值_C
-#define XT_CMDC_WRITE_CONFIG 0x14 //写配置区
-#define XT_CMDC_WRITE_PARAM 0x12 //写测量参数值
-#define XT_CMDC_MEASURE_CAP 0x11 //测量储能电容_C
-#define XT_CMDC_LOCK 0x3E //锁定
-#define XT_CMDC_READ_PARAM 0x37 //读测量参数值_C
-#define XT_CMDC_READ_CONFIG 0x34 //读配置区
-#define XT_CMDC_READ_SHELL 0x2C //读管壳码_C
-#define XT_CMDC_MEASURE_RES 0x2F //测量药头电阻_C
-
-
-extern uint16_t XT_FreeBackMaxCur,XT_FreeBackMinCur,XT_FreeBackMaxTime,XT_FreeBackMinTime,XT_CommEndMaxCur;
-extern uint8_t XT_EnFreeBack_Test,XT_CommEnd_CurEn;
-
-//************************************************************************//
-/*
-@brief 通信反码信息初始化
-*/
-void XT_FreeBack_Prapare(uint8_t enable_flag);
-void XT_SendSquare(uint32_t num);
-uint8_t XT_Power_Init(void);
-void XT_BUS_CTRL( uint8_t NewState );
-uint8_t XT_Write_Field(uint8_t *uid, uint8_t uidlen, uint8_t *field);
-uint8_t XT_Read_Field(uint8_t *uid, uint8_t uidlen, uint8_t *field);
-uint8_t XT_Read_Shell(uint8_t *uid, uint8_t uidlen, uint8_t *shell);
-uint8_t XT_Read_Param(uint8_t *uid, uint8_t uidlen, uint8_t *param);
-uint8_t XT_Measure_Res(uint8_t *uid, uint8_t uidlen, uint8_t *adcvalue);
-uint8_t XT_Measure_Cap(uint8_t *uid, uint8_t uidlen, uint8_t level, uint32_t *chargetime);
-
-uint8_t XT_Charge_One(uint8_t *uid,uint8_t uidlen, uint8_t level,uint16_t busvoltage, uint8_t isgetack);
-void XT_Clear_Read(void);
-void XT_Fire(void);
-uint8_t XT_FireandCheck(uint8_t *delay);
-uint8_t XT_MeasureFire(uint32_t *delay) ;
-void XT_Init(uint8_t regdata);
-void XT_Reset(void);
-uint8_t XT_Read_Uid(uint8_t *uid, uint8_t uidlen);
-void XT_Trim_Fast(void);
-void XT_Trim_Faset_Cycle(uint16_t cycle,uint16_t duty);
-void XT_Trim_Complete(uint32_t delay_max);
-void XT_Trim_Complete_Cycle(uint16_t cycle,uint16_t duty, uint32_t delay_max);
-uint8_t XT_Check_Online(uint16_t index_max, uint8_t *online);
-uint8_t XT_Check_Bmid(uint8_t *bmid, uint8_t bmidlen);
-uint8_t XT_Check_Fire_All(void);
-uint8_t XT_Check_Fire_Each(uint32_t index_max, uint8_t *check);
-void XT_Set_Current(uint8_t level);
-void XT_Charge_All(uint8_t level);
-uint8_t XT_Check_Config(uint8_t *config);
-uint8_t XT_Write_Uid(uint8_t *uid, uint8_t uidlen);
-uint8_t XT_Write_Bmid(uint8_t *bmid, uint8_t bmidlen);
-uint8_t XT_Write_Shell(uint8_t *shell);
-uint8_t XT_Write_Field_All(uint8_t *field);
-uint8_t XT_Write_Config(uint8_t *config);
-uint8_t XT_Write_Param(uint8_t *param);
-uint8_t XT_Measure_Cap_All(uint8_t level, uint32_t *chargetime);
-void XT_Lock(void);
-uint8_t XT_Read_Param_All(uint8_t *param);
-uint8_t XT_Read_Config(uint8_t *config);
-uint8_t XT_Read_Shell_All(uint8_t *shell);
-uint8_t XT_Measure_Res_All(uint8_t *adcvalue);
-uint8_t XT_Get_UID_R(uint8_t *uid, uint8_t uidlen);
-uint8_t XT_Get_R(void);
-
-uint8_t XT_Get_UID_C(uint8_t *uid, uint8_t uidlen, uint8_t level, uint32_t time_out,float *CapacitanceValue) ;
-uint8_t XT_Get_C(uint8_t level, uint32_t time_out, float *CapacitanceValue);
-
-#endif
diff --git a/source/elec_det/elec_det.c b/source/elec_det/elec_det.c
deleted file mode 100644
index c65add8..0000000
--- a/source/elec_det/elec_det.c
+++ /dev/null
@@ -1,248 +0,0 @@
-#include "board.h"
-#include "bytearray.h"
-#include "mystdlib.h"
-
-#include "elec_det.h"
-#include "base/delay.h"
-#include "base/utility.h"
-#include "hardware/adc_cfg.h"
-#include "hardware/dac_cfg.h"
-#include "hardware/gpio_cfg.h"
-#include "hardware/jw3425iic.h"
-#include "hardware/power.h"
-#include "hardware/timer_cfg.h"
-#include "driver/EWDriver.h"
-#include "driver/JQDriver.h"
-#include "driver/XTDriver.h"
-#include "interface/BaseChecker.h"
-#include "interface/JQChecker.h"
-#include "interface/XTChecker.h"
-
-
-#define PLAN_MAX_TASK 64
-
-
-typedef struct{
- CheckerTask_Info_st* task_info_array[PLAN_MAX_TASK];//ṹָ
-
-}self_def;
-
-
-static self_def g_self;
-
-
-// ȡַ
-uint8_t elec_local_addr(void)
-{
- static uint8_t addr=0;
- if(addr==0)
- addr=Gpio_GetDeivceAddr();
- return addr;
-}
-
-
-// led1״̬
-void elec_led1_power(int power)
-{
- LED1_Out=power?1:0;
-}
-
-// led2״̬
-void elec_led2_power(int power)
-{
- LED2_Out=power?1:0;
-}
-
-
-
-// ȡ
-array_def *elec_check_result(void)
-{
- array_def *r=arr_creat();
-
- return arr_temp(r);
-}
-
-
-// дӲ汾
-int elec_write_hardversion(int version)
-{
- board_st.hard_v=version;
- return 0;
-}
-
-
-
-// дУֵ
-int elec_write_resistor_cbv(int cbv)
-{
- board_st.resistor_diff=cbv;
- return 0;
-}
-
-
-// ˿ֵ
-array_def *elec_check_resistor(void)
-{
- /*
- 1 ͨ1-4ͨ˿
- 2 ͨ2-3ͨ˿
- 3 ͨ1-3ͨ迹
- 4 ͨ2-4ͨ迹
- */
- uint16_t aus_sample[5];
- uint16_t us_resistor;
- uint8_t uc_index = 0;
- AD_SampleResistor(aus_sample);
- for(uc_index = 0; uc_index < 5; uc_index++)
- {
- aus_sample[uc_index] -= board_st.resistor_diff;
- }
- // ȡвģʽ
- switch(0)
- {
- case 0: us_resistor = aus_sample[0];break;
- case 1: us_resistor = aus_sample[1];break;
- case 2: us_resistor = aus_sample[2];break;
- default : us_resistor = 0;break;
- }
- array_def *r=arr_creat();
- arr_append(r,0);
- arr_append(r,us_resistor&0xff);
- arr_append(r,(us_resistor >> 8) & 0xff);
- return arr_temp(r);
-}
-
-
-
-
-
-// У鷽,0ɹ
-static int elec_check_scheme(void)
-{
- uint32_t ul_crc32;
-
- ul_crc32 = Crc32Calu((uint32_t*)APP_TEST_PLAN_ADDR,(APP_TEST_PLANINFO_SIZE-4));
- if(ul_crc32 != (*(uint32_t*)(APP_TEST_PLAN_ADDR+APP_TEST_PLANINFO_SIZE-4)))
- {
- board_st.plan_id = ~0;
- LED1_Out_Off;
- return 1;
- }
- return 0;
-}
-
-
-
-
-// ط
-static void elec_load_scheme(void)
-{
- self_def *s=&g_self;
- uint8_t uc_index = 0;
- uint32_t ul_len;
- CheckerTask_Info_st* pinfo_st = (CheckerTask_Info_st*)(APP_TEST_PLAN_ADDR+256);
- for(uc_index = 0; uc_index < PLAN_MAX_TASK; uc_index++)
- {
- s->task_info_array[uc_index] = 0;
- }
- uc_index = 0;
- while((pinfo_st->runindex != 0xFF) && (uc_index < PLAN_MAX_TASK))
- {
- s->task_info_array[uc_index++] = pinfo_st;
- ul_len = pinfo_st->param_rtv_count & 0x0F;
- ul_len = (ul_len<<1)+5;
-
- pinfo_st = (CheckerTask_Info_st*)((uint8_t*)pinfo_st + ul_len);
- }
-
-}
-
-
-// м
-array_def *elec_check_with_scheme(array_def *uid_psw)
-{
- self_def *s=&g_self;
- const uint8_t* ptaskindex = (uint8_t*)(APP_TEST_PLAN_ADDR+4);
- CheckerTask *tasks_fun_table[]={jqtaskArray,xttaskArray};
- CheckerTask_Info_st *task_par=0;
- uint8_t chip_type=0;
- uint8_t taskid=0;
- CheckerTask task_fun=0;
- uint8_t res=0;
- array_def *r=arr_creat();
- chip_type=(board_st.plan_id >> 12 ) & 0x0F;
- if(chip_type>=LENGTH(tasks_fun_table)){
- arr_append(r,1);
- return arr_temp(r);
- }
- memset(&checker_runcfg,0,sizeof(Checker_RunCfg_st));
- int task_index=0;
- int err_flag=0;
- LED1_Out_Off;
- while((ptaskindex[task_index]!=0xff)&&(task_index=CHECKER_MAXID_COUNT){
- break;
- }
- task_par= s->task_info_array[task_index];
- if(task_par==0){
- break;
- }
- task_fun=tasks_fun_table[chip_type][taskid];
- if(task_fun==0){
- break;
- }
-
- // װز
- rt_memcpy(&checker_runcfg.task_info,task_par,sizeof(CheckerTask_Info_st));
- checker_runcfg.param_count = checker_runcfg.task_info.param_rtv_count & 0x0F;
- checker_runcfg.rtv_count = (checker_runcfg.task_info.param_rtv_count >> 4) & 0x0F;
- rt_memcpy(checker_runcfg.params,checker_runcfg.task_info.params,checker_runcfg.param_count*2);
-
- // ִ
- for(int i=0;i<1+task_par->retry_time;i++)
- {
- checker_runcfg.excue_rtv=1;
- task_fun();
- Checker_Excueindex(task_index);
- if(checker_runcfg.excue_rtv==0)
- break;
- }
-
- // Ѱһ
- if((checker_runcfg.excue_rtv != 0)
- && (checker_runcfg.task_info.error_jumpto != 0)
- && (checker_runcfg.task_info.error_jumpto != 0xFF)
- )
- {
- uint8_t uc_index = task_index+1;//ʱһֱ˳ִ
- task_index = checker_runcfg.task_info.error_jumpto;
- while(uc_index < task_index)
- {
- Checker_MaskResult(1,uc_index);//IJδִ
- //ֵ±꣬IJķֵ洢ռ䱣
- checker_runcfg.rtv_index += (s->task_info_array[uc_index]->param_rtv_count >> 4) & 0x0F;
- uc_index++;
- }
- }else{
- task_index++;//ֱ˳ִ
- }
- }
-
- arr_append(r,0);
- arr_appends(r,checker_runcfg.Task_Result,8);
- arr_appends(r,checker_runcfg.Task_Excute,8);
- arr_appends(r,checker_runcfg.Test_Rtv,checker_runcfg.rtv_index*2);
- return arr_temp(r);
-}
-
-
-
-
diff --git a/source/elec_det/elec_det.h b/source/elec_det/elec_det.h
deleted file mode 100644
index 1d3b448..0000000
--- a/source/elec_det/elec_det.h
+++ /dev/null
@@ -1,31 +0,0 @@
-#ifndef elec_det_h__
-#define elec_det_h__
-
-
-#include "stdint.h"
-
-
-
-
-
-uint8_t elec_local_addr(void);
-
-void elec_led1_power(int power);
-
-void elec_led2_power(int power);
-
-
-
-
-
-
-
-
-
-
-
-
-#endif
-
-
-
diff --git a/source/elec_det/hardware/adc_cfg.c b/source/elec_det/hardware/adc_cfg.c
deleted file mode 100644
index f61a782..0000000
--- a/source/elec_det/hardware/adc_cfg.c
+++ /dev/null
@@ -1,633 +0,0 @@
-#include "adc_cfg.h"
-#include "gpio_cfg.h"
-#include "base/delay.h"
-#include "timer_cfg.h"
-#include "base/utility.h"
-#include "power.h"
-uint16_t ad0_adc_sample[AD_SCAN_SAMPLE*AD_SCAN_COUNT];
-#define ADC1_SAMPLE_BUF_LEN 200
-#define ADC1_SAMPLE_BUF_LEN2 20
-
-volatile uint16_t FireBus_ADC_Buf[FIREBUS_ADC_BUF_LEN];
-
-
-uint16_t adc1_sample_buf[ADC1_SAMPLE_BUF_LEN];
-void AdcDef_Init(void)
-{
-
- ADC_InitTypeDef ADC_InitStructure;
- DMA_InitTypeDef DMA_InitStructure;
- GPIO_InitTypeDef GPIO_InitStructure;
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE );
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC2, ENABLE );
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
- RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);
-
- RCC_ADCCLKConfig(RCC_PCLK2_Div6); //12MHz
-
- //GPIO 配置
- GPIO_InitStructure.GPIO_Pin= VCC_2V5_Pin | VCC_1V25_Pin | V_LA_M_Pin | V_LA_H_Pin | R_AD_01_Pin;
- GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;
- GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
- GPIO_Init(GPIOA,&GPIO_InitStructure);
- GPIO_Write(GPIOA,GPIO_InitStructure.GPIO_Pin);
-
- //GPIO 配置
- GPIO_InitStructure.GPIO_Pin= AD_OUTA_Pin | AD_OUTB_Pin | AN_UA_Pin | AN_MAL_Pin | AN_CAP_AD_Pin;
- GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;
- GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
- GPIO_Init(GPIOA,&GPIO_InitStructure);
- GPIO_Write(GPIOC,GPIO_InitStructure.GPIO_Pin);
-
- ADC_DeInit(ADC1);
- ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
- ADC_InitStructure.ADC_ScanConvMode = ENABLE;
- ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
- ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
- ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
- ADC_InitStructure.ADC_NbrOfChannel = AD_SCAN_SAMPLE;
- ADC_Init(ADC1, &ADC_InitStructure);
- ADC_TempSensorVrefintCmd(ENABLE);
-
-
-
- ADC_RegularChannelConfig(ADC1, VCC_2V5_CH, 1, ADC_SampleTime_239Cycles5);
- ADC_RegularChannelConfig(ADC1, VCC_1V25_CH, 2, ADC_SampleTime_239Cycles5);
- ADC_RegularChannelConfig(ADC1, V_LA_M_CH, 3, ADC_SampleTime_239Cycles5);
- ADC_RegularChannelConfig(ADC1, V_LA_H_CH, 4, ADC_SampleTime_239Cycles5);
- ADC_RegularChannelConfig(ADC1, AD_OUTA_CH, 5, ADC_SampleTime_239Cycles5);
- ADC_RegularChannelConfig(ADC1, AD_OUTB_CH, 6, ADC_SampleTime_239Cycles5);
- ADC_RegularChannelConfig(ADC1, ADC_Channel_16, 7, ADC_SampleTime_71Cycles5);
- ADC_RegularChannelConfig(ADC1, ADC_Channel_17, 8, ADC_SampleTime_71Cycles5);
-
- DMA_DeInit(DMA1_Channel1);
- DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&ADC1->DR;
- DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)ad0_adc_sample;
- DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
- DMA_InitStructure.DMA_BufferSize = AD_SCAN_SAMPLE*AD_SCAN_COUNT;
- DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
- DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
- DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
- DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
- DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
- DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;
- DMA_InitStructure.DMA_M2M = DISABLE;
- DMA_Init(DMA1_Channel1,&DMA_InitStructure);
- DMA_Cmd(DMA1_Channel1,ENABLE);
-
- ADC_Cmd(ADC1, ENABLE);
- ADC_ResetCalibration(ADC1);
- while(ADC_GetResetCalibrationStatus(ADC1));
-
- ADC_StartCalibration(ADC1);
- while(ADC_GetCalibrationStatus(ADC1));
-
- ADC_DMACmd(ADC1,ENABLE);
- ADC_SoftwareStartConvCmd(ADC1, ENABLE);
-
-
-
- ADC_DeInit(ADC2);
- ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
- ADC_InitStructure.ADC_ScanConvMode = DISABLE;
- ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
- ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
- ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
- ADC_InitStructure.ADC_NbrOfChannel = 1;
- ADC_Init(ADC2, &ADC_InitStructure);
-
- ADC_Cmd(ADC2, ENABLE);
- ADC_ResetCalibration(ADC2);
- while(ADC_GetResetCalibrationStatus(ADC2));
-
- ADC_StartCalibration(ADC2);
- while(ADC_GetCalibrationStatus(ADC2));
-
- ADC_DMACmd(ADC2,ENABLE);
- ADC_SoftwareStartConvCmd(ADC2, ENABLE);
-}
-
-
-void StartADC2Channel(uint32_t channel, uint32_t speed)
-{
-
- ADC_RegularChannelConfig(ADC2,channel,1,speed);
- ADC_SoftwareStartConvCmd(ADC2,ENABLE);
- delay_us(100);
-}
-
-void StartADC1Channel(uint32_t channel)
-{
-
- ADC_RegularChannelConfig(ADC1,channel,1,ADC_SampleTime_71Cycles5);
- ADC_SoftwareStartConvCmd(ADC1,ENABLE);
- delay_us(100);
- //adc_calibration_enable(ADC0);
-}
-
-/*
-使用该函数,对ADC2触发一次采样,到用该函数前,应调用一次StartADC1Channel(ch)
-*/
-uint32_t GetADC2_Fast(void)
-{
- uint16_t time_out = 10000;
- uint16_t temp = 0;
- ADC_ClearFlag(ADC2,ADC_FLAG_EOC);//清除转换结束标志
- ADC_SoftwareStartConvCmd(ADC2,ENABLE);//启动转换
- while((time_out > 0) && ( ADC_GetFlagStatus(ADC2,ADC_FLAG_EOC) == RESET))
- {
- time_out--;
- }
- temp = ADC_GetConversionValue(ADC2) & 0x0FFF;
- return temp;
-}
-/*
-使用该函数,对ADC触发一次采样,到用该函数前,应调用一次StartADC0Channel(ch)
-*/
-uint16_t GetADC_Fast(ADC_TypeDef* adc_periph)
-{
- uint16_t time_out = 10000;
- uint16_t temp = 0;
- ADC_ClearFlag(adc_periph,ADC_FLAG_EOC);//清除转换结束标志
- ADC_SoftwareStartConvCmd(adc_periph,ENABLE);//启动转换
- while((time_out > 0) && ( ADC_GetFlagStatus(adc_periph,ADC_FLAG_EOC) == RESET))
- {
- time_out--;
- }
- temp = ADC_GetConversionValue(adc_periph) & 0x0FFF;
- return temp;
-}
-
-uint32_t GetADC1_Fast(void)
-{
- return GetADC_Fast(ADC1);
-}
-
-
-uint32_t GetADC2_Value(uint32_t channel)
-{
- StartADC2Channel(channel,ADC_SPEED_MIDLE);
- return GetADC2_Fast();
-}
-
-/*
- ADC_RegularChannelConfig(ADC1, VCC_2V5_CH, 1, ADC_SampleTime_239Cycles5);
- ADC_RegularChannelConfig(ADC1, VCC_1V25_CH, 2, ADC_SampleTime_239Cycles5);
- ADC_RegularChannelConfig(ADC1, V_LA_M_CH, 3, ADC_SampleTime_239Cycles5);
- ADC_RegularChannelConfig(ADC1, V_LA_H_CH, 4, ADC_SampleTime_239Cycles5);
- ADC_RegularChannelConfig(ADC1, AD_OUTA_CH, 5, ADC_SampleTime_239Cycles5);
- ADC_RegularChannelConfig(ADC1, AD_OUTB_CH, 6, ADC_SampleTime_239Cycles5);
- ADC_RegularChannelConfig(ADC1, ADC_Channel_16, 7, ADC_SampleTime_71Cycles5);
- ADC_RegularChannelConfig(ADC1, ADC_Channel_17, 8, ADC_SampleTime_71Cycles5);
-
-*/
-void GetADC1_Value(uint32_t channel,uint16_t* buf,uint16_t len)
-{
- uint8_t i = 0;
- uint16_t* buf_head = 0;
- switch(channel)
- {
- case VCC_2V5_CH: buf_head = ad0_adc_sample;break;
- case VCC_1V25_CH: buf_head = ad0_adc_sample+1;break;
- case V_LA_M_CH: buf_head = ad0_adc_sample+2;break;
- case V_LA_H_CH: buf_head = ad0_adc_sample+3;break;
- case AD_OUTA_CH: buf_head = ad0_adc_sample+4;break;
- case AD_OUTB_CH: buf_head = ad0_adc_sample+5;break;
- case ADC_Channel_16:buf_head = ad0_adc_sample+6;break;
- case ADC_Channel_17:buf_head = ad0_adc_sample+7;break;
- default:buf_head = 0;break;
- }
- if(buf_head == 0)
- return;
- if(len > AD_SCAN_COUNT)
- len = AD_SCAN_COUNT;
- for(i=0; i < len ; i++)
- {
- buf[i] = buf_head[i*AD_SCAN_SAMPLE];
- }
-
-
-}
-
-float Get_Temperature(void)
-{
- uint32_t ad_v;
- GetADC1_Value(ADC_Channel_16,(uint16_t*)&ad_v,1);
- float temper = (1.43f - ad_v*3.3f/4096) * 1000 / 4.3f + 25;
- return temper;
-}
-
-
-/*************************ADC App****************************************/
-/*
-@brief 稳定获取总线电流
-@rtv 返回电流值 0.1uA
-*/
-uint16_t ADC_GetBaseStableCur(void)
-{
- uint16_t us_count = 0;
- uint16_t us_temp = 0;
- uint32_t ul_base;
- StartADC2Channel(AN_UA_CH,ADC_SPEED_SLOW);
- Power_SetSampleCurrentRange(R100_0uA_160uA_UC);
- delay_ms(100);
- while(us_count < ADC1_SAMPLE_BUF_LEN)
- {
- adc1_sample_buf[us_count] = GetADC_Fast(ADC_CURR_DE);
- delay_us(20);
- if(us_count == 0)
- {
- ul_base = adc1_sample_buf[us_count] ;
- }else{
- ul_base += adc1_sample_buf[us_count] ;
- ul_base >>= 1;
- }
- us_count++;
- }
-
- for(us_count = 0; us_count < ADC1_SAMPLE_BUF_LEN; us_count++)
- {
- ul_base = (ul_base*8 + adc1_sample_buf[us_count]*2 )/10;
- adc1_sample_buf[us_count] = ul_base;
- }
- Bubble_Sort_u16(adc1_sample_buf,us_count);
-
- us_count = (ADC1_SAMPLE_BUF_LEN>>2);
- us_temp = ADC1_SAMPLE_BUF_LEN - (ADC1_SAMPLE_BUF_LEN>>2);
- while(us_count < us_temp)
- {
- ul_base += adc1_sample_buf[us_count++];
- }
- us_temp -= (ADC1_SAMPLE_BUF_LEN>>2);
- ul_base = ul_base / us_temp;
- ul_base = Power_ConvCur(ul_base,R100_0uA_160uA_UC);
- return ul_base;
-}
-
-
-/*
-@brief 稳定获取总线电流
-@rtv 返回电流值 0.1uA
-*/
-uint16_t ADC_Comm1p6mA_EndCur(void)
-{
- uint16_t us_count = 0;
- uint16_t us_temp = 0;
- uint32_t ul_base;
- StartADC2Channel(AN_UA_CH,ADC_SPEED_SLOW);
- Power_SetSampleCurrentRange(R10_0p1mA_1p6mA_UC);
- delay_ms(1);
- while(us_count < ADC1_SAMPLE_BUF_LEN2)
- {
- adc1_sample_buf[us_count] = GetADC_Fast(ADC_CURR_DE);
- delay_us(1);
- if(us_count == 0)
- {
- ul_base = adc1_sample_buf[us_count] ;
- }else{
- ul_base += adc1_sample_buf[us_count] ;
- ul_base >>= 1;
- }
- us_count++;
- }
-
- for(us_count = 0; us_count < ADC1_SAMPLE_BUF_LEN2; us_count++)
- {
- ul_base = (ul_base*8 + adc1_sample_buf[us_count]*2 )/10;
- adc1_sample_buf[us_count] = ul_base;
- }
- Bubble_Sort_u16(adc1_sample_buf,us_count);
-
- us_count = (ADC1_SAMPLE_BUF_LEN2>>2);
- us_temp = ADC1_SAMPLE_BUF_LEN2 - (ADC1_SAMPLE_BUF_LEN2>>2);
- while(us_count < us_temp)
- {
- ul_base += adc1_sample_buf[us_count++];
- }
- us_temp -= (ADC1_SAMPLE_BUF_LEN2>>2);
- ul_base = ul_base / us_temp;
- ul_base = Power_ConvCur(ul_base,R10_0p1mA_1p6mA_UC);
- return ul_base;
-}
-
-/*
-@brief 电流降到指定电流下的时间
-@param 执行时间 单位0.1ms
-@rtv 最大波动AD值
-*/
-uint16_t AD_CurMonitor(uint32_t ul_times)
-{
- uint32_t ul_count = 0, ul_count2;
- uint16_t us_count = 0;
- uint16_t aus_adc[20];
- uint16_t us_maxadv,us_minadv = 0;
- uint16_t ul_shake = 0;
- LED1_Out = 0;
- for(ul_count2 =0; ul_count2 < 20;ul_count2++)
- {
- aus_adc[ul_count2] = ADC_GetCurADCFast();
- }
- LED1_Out = 1;
- ul_count2 = 0;
- while(ul_times > 0)
- {
- ul_count = 0;
- Get100usCount();
- while(ul_count< 50000 && ul_count < ul_times)
- {
- us_maxadv = 0;
- us_minadv = 0xFFF;
-
- for(us_count = 0; us_count < 20;us_count++)
- {
- if(aus_adc[us_count] > us_maxadv)
- {
- us_maxadv = aus_adc[us_count];
- }
- if(aus_adc[us_count] < us_minadv)
- {
- us_minadv = aus_adc[us_count];
- }
- }
- ul_count2 %= 20;
- aus_adc[ul_count2++] = ADC_GetCurADCFast();
- if(us_maxadv < us_minadv)
- {
- us_minadv = 4096;
- }else{
- us_minadv = us_maxadv - us_minadv;
- }
- if(ul_shake < us_minadv)
- {
- ul_shake = us_minadv;
- if(ul_shake > 500){
- LED1_Out = 0;
- delay_us(50);
- LED1_Out = 1;
- }
- }
- delay_us(40);
- ul_count = GET_COUNTTIM_VAL();
- }
- if(ul_count >= ul_times)
- {
- LED1_Out = 0;
- return ul_shake;
- }
- ul_times -= ul_count;
- }
- LED1_Out= 0;
- return ul_shake;
-}
-
-/*
-@brief 电流降到指定电流下的时间
-@param 采样超时
-@param end_adv 检测启动和结束判线
-@param 最大电流ad
-@param 电流下降过程中最大向上波动
-@rtv 时间采集值0.1ms
-*/
-
-
-uint16_t AD_GetChgEnergy(uint16_t sample_timeout, uint16_t end_adv,uint16_t* max_cul,uint16_t *shake_adv)
-{
- uint16_t aus_adc_v[5];
- uint16_t aus_adv_shake[20];
- uint16_t time_out;
- uint16_t us_count = 0;
- uint16_t us_shake_count = 0;
- uint16_t us_shake_minadc,us_shake_maxadc;
- uint8_t start_flag = 0,shake_flag = 0;
- Get100usCount();
- ADC_ClearFlag(ADC_CURR_DE,ADC_FLAG_EOC);//清除转换结束标志
- ADC_SoftwareStartConvCmd(ADC_CURR_DE, ENABLE); //启动转换
- aus_adc_v[4] = 0xFFFF;
- *max_cul = 0;
- *shake_adv = 0;
- LED1_Out = 0;
- if(end_adv == 0 || end_adv == 0xFFFF)
- {
- return 0;
- }
- while(GetCountTimerCnt() < sample_timeout)
- {
- time_out = 2000;
- while((time_out > 0) && ( ADC_GetFlagStatus(ADC_CURR_DE,ADC_FLAG_EOC) == RESET))
- {
- time_out--;
- }
- aus_adc_v[us_count] = ADC_GetConversionValue(ADC_CURR_DE) & 0x0FFF;
- aus_adv_shake[us_shake_count] = aus_adc_v[us_count];
- ADC_ClearFlag(ADC_CURR_DE,ADC_FLAG_EOC);//清除转换结束标志
- ADC_SoftwareStartConvCmd(ADC_CURR_DE, ENABLE); //启动转换
- us_count++;
- us_shake_count++;
- us_count %= 5;
- us_shake_count %= 20;
- if((us_shake_count == 0) && (start_flag > 0))
- {
- shake_flag ++;
- }
- if(shake_flag == 2)
- {
- LED1_Out = 1;
- shake_flag = 1;
- time_out = 0;
- us_shake_maxadc = 0;
- us_shake_minadc = 0x0FFF;
- while(time_out < 20)
- {
- if(aus_adv_shake[time_out] > us_shake_maxadc)
- {
- us_shake_maxadc = aus_adv_shake[time_out];
- }
- if(aus_adv_shake[time_out] < us_shake_minadc)
- {
- us_shake_minadc = aus_adv_shake[time_out];
- }
- time_out++;
- }
- us_shake_minadc = us_shake_maxadc - us_shake_minadc;
- if(us_shake_minadc > 900)
- {
- us_shake_minadc = 0;
- }
- if(*shake_adv < us_shake_minadc)
- {
- *shake_adv = us_shake_minadc;
- }
- }
-
- if(us_count == 0)
- {
- Bubble_Sort_u16(aus_adc_v,5);
- if((aus_adc_v[0] > end_adv) && start_flag == 0)
- {
- start_flag = 1;
- Get100usCount();//未启动重新设置计数器
- }
- //连续5个都大于判线值
- else if(start_flag >0 )
- {
- if(*max_cul < aus_adc_v[2])
- {
- *max_cul = aus_adc_v[2];
- }
- if(aus_adc_v[4] < end_adv)
- {
- LED1_Out = 0;
- return Get100usCount();
- }
- }else if(start_flag == 0)
- {
- if(GetCountTimerCnt() > 10000)
- {
- return 0;
- }
- }
-
- }
- }
- return 40000;
-}
-
-/*获取桥丝电阻*/
-void AD_SampleResistor(uint16_t* channels_re)
-{
- uint16_t aus_sample[32];
- uint8_t uc_index = 0;
- const static float resistor_cur = 2.49f;
- const static float res_mutli = 79.7;
- /*
- Gpio_ResistorSwitch
- @param 0 全关
- 1 通道1-4通,过桥丝
- 2 通道2-3通,过桥丝
- 3 通道1-3通,测阻抗
- 4 通道2-4通,测阻抗
-
- */
- float f_r1,f_r2,f_r3,f_r4;
- ADC_ResistorChannelSet(ADC_SPEED_MIDLE);
- Gpio_ResistorSwitch(1);
- delay_ms(50);
- for(uc_index = 0; uc_index < 32; uc_index++)
- {
- aus_sample[uc_index] = ADC_GetResistorADCFast();
- }
- Bubble_Sort_u16(aus_sample,uc_index);
- f_r1 = 0;
- for(uc_index = 8; uc_index < 24; uc_index++)
- {
- f_r1 += aus_sample[uc_index];
- }
- f_r1 = (((f_r1 /res_mutli)*1000)/4096)*3.3f/resistor_cur/16;
-
- Gpio_ResistorSwitch(2);
- delay_ms(50);
-
- for(uc_index = 0; uc_index < 32; uc_index++)
- {
- aus_sample[uc_index] = ADC_GetResistorADCFast();
- }
- Bubble_Sort_u16(aus_sample,uc_index);
- f_r2 = 0;
- for(uc_index = 8; uc_index < 24; uc_index++)
- {
- f_r2 += aus_sample[uc_index];
- }
- f_r2 = (((f_r2 /res_mutli)*1000)/4096)*3.3f/resistor_cur/16;
-
- Gpio_ResistorSwitch(3);
- delay_ms(50);
-
- for(uc_index = 0; uc_index < 32; uc_index++)
- {
- aus_sample[uc_index] = ADC_GetResistorADCFast();
- }
- Bubble_Sort_u16(aus_sample,uc_index);
- f_r3 = 0;
- for(uc_index = 8; uc_index < 24; uc_index++)
- {
- f_r3 += aus_sample[uc_index];
- }
- f_r3 = (((f_r3 /res_mutli)*1000)/4096)*3.3f/resistor_cur/16;
-
- Gpio_ResistorSwitch(4);
- delay_ms(50);
-
- for(uc_index = 0; uc_index < 32; uc_index++)
- {
- aus_sample[uc_index] = ADC_GetResistorADCFast();
- }
- Bubble_Sort_u16(aus_sample,uc_index);
- f_r4 = 0;
- for(uc_index = 8; uc_index < 24; uc_index++)
- {
- f_r4 += aus_sample[uc_index];
- }
- f_r4 = (((f_r4 /res_mutli)*1000)/4096)*3.3f/resistor_cur/16;
-
- Gpio_ResistorSwitch(0);
-
- channels_re[0] = (uint16_t) (((f_r1+f_r2-f_r3-f_r4)/2+0.005f)*100);
- channels_re[1] = (uint16_t) ((f_r1+0.005f)*100);
- channels_re[2] = (uint16_t) ((f_r2+0.005f)*100);
- channels_re[3] = (uint16_t) ((f_r3+0.005f)*100);
- channels_re[4] = (uint16_t) ((f_r4+0.005f)*100);
-
-}
-
-/*测量电容电压*/
-uint16_t AD_SampleCap(uint16_t delay)
-{
- uint32_t ul_ad = 0,ul_ad2 = 0;
- uint8_t uc_index = 0;
- uint16_t aus_sample[32];
- Gpio_CAPSwitch(1);
- ADC_CAPVolChannelSet(ADC_SPEED_MIDLE);
- delay_ms(1500);
- for(uc_index = 0; uc_index < 32; uc_index++)
- {
- aus_sample[uc_index] = ADC_GetCAPVolADCFast();
- }
- Bubble_Sort_u16(aus_sample,uc_index);
- ul_ad = 0;
- for(uc_index = 8; uc_index < 24; uc_index++)
- {
- ul_ad += aus_sample[uc_index];
- }
- //
- ul_ad >>= 4;
-
- while(delay > 0)
- {
- delay_os_ms(100);
- delay--;
- }
-
- for(uc_index = 0; uc_index < 32; uc_index++)
- {
- aus_sample[uc_index] = ADC_GetCAPVolADCFast();
- }
- Bubble_Sort_u16(aus_sample,uc_index);
- ul_ad2 = 0;
- for(uc_index = 8; uc_index < 24; uc_index++)
- {
- ul_ad2 += aus_sample[uc_index];
- }
- //ul_ad2 = ((ul_ad2 *25*11*100/board_st.v2p5_adc/16)+5)/10;
- ul_ad2 >>= 4;
-
- if(ul_ad < ul_ad2)
- {
- ul_ad = 0;
- }else{
- ul_ad = ul_ad - ul_ad2;
- ul_ad = ((Power_ADVGetCalVal_106(ul_ad)*11)/100+5)/10 ;//((ul_ad *25*11*1000/board_st.v2p5_adc )+5)/10;
- }
- Gpio_CAPSwitch(0);
- return ul_ad;
-}
diff --git a/source/elec_det/hardware/adc_cfg.h b/source/elec_det/hardware/adc_cfg.h
deleted file mode 100644
index 6561504..0000000
--- a/source/elec_det/hardware/adc_cfg.h
+++ /dev/null
@@ -1,97 +0,0 @@
-#ifndef ADC_CFG_H_
-#define ADC_CFG_H_
-#include "base/define.h"
-
-
-
-
-
-
-#define AN_UA_CH ADC_Channel_12 //AD2
-#define AN_MAL_CH ADC_Channel_13 //AD2
-#define RAD_01_CH ADC_Channel_2 //AD2
-#define AN_CAP_AD_CH ADC_Channel_15 //AD2
-
-
-
-#define VCC_2V5_CH ADC_Channel_1 //AD1
-#define VCC_1V25_CH ADC_Channel_3 //AD1
-#define V_LA_M_CH ADC_Channel_6 //AD1
-#define V_LA_H_CH ADC_Channel_7 //AD1
-#define AD_OUTA_CH ADC_Channel_10 //AD1
-#define AD_OUTB_CH ADC_Channel_11 //AD1
-
-
-#define ADC_CURR_DE ADC2
-
-
-
-#define AD_SCAN_COUNT 16
-#define AD_SCAN_SAMPLE 8
-
-#define FIREBUS_ADC_BUF_LEN 160
-extern volatile uint16_t FireBus_ADC_Buf[FIREBUS_ADC_BUF_LEN];
-
-#define ADC_SPEED_SLOW ADC_SampleTime_239Cycles5
-#define ADC_SPEED_MIDLE ADC_SampleTime_71Cycles5
-#define ADC_SPEED_HIGH ADC_SampleTime_13Cycles5
-#define ADC_SPEED_HFAST ADC_SampleTime_7Cycles5
-void AdcDef_Init(void);
-void StartADC2Channel(uint32_t channel, uint32_t speed);
-#define ADC_CurChnnelSet(channel,speed) StartADC2Channel(channel,speed)
-//桥丝电阻测量通道
-#define ADC_ResistorChannelSet(speed) StartADC2Channel(RAD_01_CH,speed);
-//电容电压测量
-#define ADC_CAPVolChannelSet(speed) StartADC2Channel(AN_CAP_AD_CH,speed);
-
-void StartADC1Channel(uint32_t channel);
-void StartADC2ChannelV2(uint32_t channel);
-uint32_t GetADC2_Fast(void);
-//电流采集通道
-#define ADC_GetCurADCFast() GetADC2_Fast()
-//桥丝电阻采集通道
-#define ADC_GetResistorADCFast() GetADC2_Fast()
-//电容电压采集通道
-#define ADC_GetCAPVolADCFast() GetADC2_Fast()
-
-uint32_t GetADC1_Fast(void);
-
-uint32_t GetADC2_Value(uint32_t channel);
-#define ADC_GetCurADC(chnnel) GetADC2_Value(channel)
-
-void GetADC1_Value(uint32_t channel,uint16_t* buf,uint16_t len);
-float Get_Temperature(void);
-/*
-@brief 稳定获取总线电流
-@rtv 返回电流值 0.1uA
-*/
-uint16_t ADC_Comm1p6mA_EndCur(void);
-/*
-@brief 稳定获取总线电流
-*/
-uint16_t ADC_GetBaseStableCur(void);
-/*
-@brief 电流降到指定电流下的时间
-@param 采样超时
-@param end_adv 检测启动和结束判线
-@param 最大电流ad
-@param 电流下降过程中最大向上波动
-@rtv 时间采集值0.1ms
-*/
-uint16_t AD_GetChgEnergy(uint16_t sample_timeout, uint16_t end_adv,uint16_t* max_cul,uint16_t *shake_adv);
-/*
-@brief 电流降到指定电流下的时间
-@param 执行时间 单位0.1ms
-@rtv 最大波动AD值
-*/
-uint16_t AD_CurMonitor(uint32_t us_times);
-/*
-使用该函数,对ADC触发一次采样,到用该函数前,应调用一次StartADC0Channel(ch)
-*/
-uint16_t GetADC_Fast(ADC_TypeDef* adc_periph);
-
-/*获取桥丝电阻*/
-void AD_SampleResistor(uint16_t* channels_re);
-/*测量电容电压*/
-uint16_t AD_SampleCap(uint16_t delay);
-#endif
diff --git a/source/elec_det/hardware/dac_cfg.c b/source/elec_det/hardware/dac_cfg.c
deleted file mode 100644
index 2a5b3d3..0000000
--- a/source/elec_det/hardware/dac_cfg.c
+++ /dev/null
@@ -1,69 +0,0 @@
-#include "dac_cfg.h"
-#include "gpio_cfg.h"
-/*
-@brief 默认初始化
-*/
-void DAC_Definit(void)
-{
- GPIO_InitTypeDef GPIO_InitStructure;
- DAC_InitTypeDef DAC_InitStructure;
-
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE);
-
- GPIO_InitStructure.GPIO_Pin = C_H_DAC_Pin|C_M_DAC_Pin;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
- GPIO_Init(GPIOA, &GPIO_InitStructure);
-
-
- DAC_DeInit();
- DAC_InitStructure.DAC_Trigger = DAC_Trigger_Software;
- DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_None;
- DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Enable;
-
-
- DAC_Init(DAC_Channel_1, &DAC_InitStructure);
-
-
- DAC_Init(DAC_Channel_2, &DAC_InitStructure);
-
- DAC_Cmd(DAC_Channel_1, ENABLE);
-
- DAC_Cmd(DAC_Channel_2, ENABLE);
-
-
-
- C_H_DAC_Set(4000);
- /* configure the DAC1 */
- C_M_DAC_Set(4000);
-}
-/*
-@brief 设置高电平电压
-@param dac_val DAC0输出值 0-4096
-*/
-void C_H_DAC_Set(uint16_t dac_val)
-{
- DAC_SetChannel1Data(DAC_Align_12b_R, dac_val);
- DAC_SoftwareTriggerCmd(DAC_Channel_1,ENABLE);
-// dac_output_buffer_enable(DAC0);
-// dac_data_set(DAC0,DAC_ALIGN_12B_R,dac_val);
-// dac_trigger_enable(DAC0);
-// dac_enable(DAC0);
-// dac_software_trigger_enable(DAC0);
-}
-/*
-@brief 设置高电平电压
-@param dac_val DAC1输出值 0-4096
-*/
-void C_M_DAC_Set(uint16_t dac_val)
-{
- DAC_SetChannel2Data(DAC_Align_12b_R, dac_val);
- DAC_SoftwareTriggerCmd(DAC_Channel_2,ENABLE);
-// dac_output_buffer_enable(DAC1);
-// dac_data_set(DAC1,DAC_ALIGN_12B_R,dac_val);
-// dac_trigger_enable(DAC1);
-// dac_enable(DAC1);
-// dac_software_trigger_enable(DAC1);
-}
-
-
diff --git a/source/elec_det/hardware/dac_cfg.h b/source/elec_det/hardware/dac_cfg.h
deleted file mode 100644
index b7556bb..0000000
--- a/source/elec_det/hardware/dac_cfg.h
+++ /dev/null
@@ -1,22 +0,0 @@
-#ifndef DAC_CFG_H
-#define DAC_CFG_H
-#include "base/define.h"
-
-#define C_H_DAC_CH DAC_OUT_0
-#define C_H_DAC_CM DAC_OUT_1
-
-/*
-@brief 设置高电平电压
-@param dac_val DAC0输出值 0-4096
-*/
-void C_H_DAC_Set(uint16_t dac_val);
-/*
-@brief 设置高电平电压
-@param dac_val DAC1输出值 0-4096
-*/
-void C_M_DAC_Set(uint16_t dac_val);
-/*
-@brief 默认初始化
-*/
-void DAC_Definit(void);
-#endif
diff --git a/source/elec_det/hardware/gpio_cfg.c b/source/elec_det/hardware/gpio_cfg.c
deleted file mode 100644
index 46e3bfd..0000000
--- a/source/elec_det/hardware/gpio_cfg.c
+++ /dev/null
@@ -1,138 +0,0 @@
-#include "gpio_cfg.h"
-#include "base/delay.h"
-void CtrlGpio_DefInit(void)
-{
-
- GPIO_InitTypeDef GPIO_InitStructure;
-
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
-
- GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);
- //GPIO_PinRemapConfig(GPIO_Remap_SWJ_NoJTRST,ENABLE);
-
- PAout(LAVC_M_Pin_Nu) = 0;
-
- //GPIO 配置
- GPIO_InitStructure.GPIO_Pin=LAVC_M_Pin;
- GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
- GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
- GPIO_Init(GPIOA,&GPIO_InitStructure);
- GPIO_ResetBits(GPIOA,GPIO_InitStructure.GPIO_Pin);
-
- GPIO_InitStructure.GPIO_Pin = SEG0_Pin;
- GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;
- GPIO_Init(GPIOA,&GPIO_InitStructure);
-
-
- PBout(R10_ON_Pin_Nu) = 1;
- PBout(R510_ON_Pin_Nu) = 0;
- PBout(LED1_Pin_Nu) = 0;
- PBout(IO_APD12_Pin_Nu) = 0;
- PBout(LED2_Pin_Nu) = 0;
- PBout(OUTAL_Pin_Nu) = 0;
- PBout(OUTBL_Pin_Nu) = 0;
- PBout(OUTAH_Pin_Nu) = 0;
- PBout(IO_CAP_AD_Pin_Nu) = 0;
-
- //GPIO 配置
- GPIO_InitStructure.GPIO_Pin=\
- R10_ON_Pin|R510_ON_Pin|LED1_Pin|IO_APD12_Pin|LED2_Pin|OUTAL_Pin|OUTBL_Pin|OUTAH_Pin|IO_CAP_AD_Pin;
-
- GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
- GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
- GPIO_Init(GPIOB,&GPIO_InitStructure);
-
- GPIO_ResetBits(GPIOB,GPIO_InitStructure.GPIO_Pin);
-
- GPIO_InitStructure.GPIO_Pin = FIRE_TEST_Pin;
- GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
- GPIO_Init(GPIOB,&GPIO_InitStructure);
-
- PCout(R100_ON_Pin_Nu) = 0;
- PCout(OUTBH_Pin_Nu) = 0;
- PCout(POWER_ON_Pin_Nu) = 0;
- PCout(IO_APD22_Pin_Nu) = 0;
- PCout(IO_APD21_Pin_Nu) = 0;
- PCout(IO_APD11_Pin_Nu) = 0;
-
-
- GPIO_InitStructure.GPIO_Pin=\
- R100_ON_Pin|OUTBH_Pin|POWER_ON_Pin|IO_APD22_Pin|IO_APD21_Pin|IO_APD11_Pin;
-
- GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
- GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
- GPIO_Init(GPIOC,&GPIO_InitStructure);
-
- //GPIO 配置
- GPIO_InitStructure.GPIO_Pin=SEG4_Pin|SEG3_Pin|SEG1_Pin|SEG2_Pin;
- GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;
- GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
- GPIO_Init(GPIOC,&GPIO_InitStructure);
-
-
-}
-/*
-@brief 获取设备地址
-@param 无
-@rtv 设备地址
-*/
-uint8_t Gpio_GetDeivceAddr(void)
-{
- uint16_t ul_addr ;
- ul_addr = (PCin(SEG4_Pin_Nu) & 0x01) <<4;
- ul_addr |= ((PCin(SEG3_Pin_Nu) & 0x01) <<3);
- ul_addr |= ((PCin(SEG2_Pin_Nu) & 0x01) <<2);
- ul_addr |= ((PCin(SEG1_Pin_Nu) & 0x01) <<1);
- ul_addr |= (PAin(SEG0_Pin_Nu) & 0x01);
- return ul_addr;
-// return 1;
-}
-
-
-/*
-@brief 4限制电阻测量通道切换
-@param 0 全关
- 1 通道1-4通,过桥丝
- 2 通道2-3通,过桥丝
- 3 通道1-3通,测阻抗
- 4 通道2-4通,测阻抗
-*/
-void Gpio_ResistorSwitch(uint8_t uc_r)
-{
- /*
- 1 2
- 3 4
- */
- switch(uc_r)
- {
- //1-4通,过桥丝电阻
- case 1: PCout(IO_APD11_Pin_Nu) = 1;PBout(IO_APD12_Pin_Nu) = 0;PCout(IO_APD22_Pin_Nu) = 1;PCout(IO_APD21_Pin_Nu) = 0; break;
- //2-3通,过桥丝测电阻
- case 2: PCout(IO_APD11_Pin_Nu) = 0;PBout(IO_APD12_Pin_Nu) = 1;PCout(IO_APD22_Pin_Nu) = 0;PCout(IO_APD21_Pin_Nu) = 1; break;
- //1-3通, 测阻抗
- case 3: PCout(IO_APD11_Pin_Nu) = 1;PBout(IO_APD12_Pin_Nu) = 1; PCout(IO_APD22_Pin_Nu) = 0; PCout(IO_APD21_Pin_Nu) = 0; break;
- //2-4通,测阻抗
- case 4: PCout(IO_APD11_Pin_Nu) = 0; PBout(IO_APD12_Pin_Nu) = 0; PCout(IO_APD22_Pin_Nu) = 1; PCout(IO_APD21_Pin_Nu) = 1; break;
- //全关
- default: PCout(IO_APD11_Pin_Nu) = 0; PBout(IO_APD12_Pin_Nu) = 0;PCout(IO_APD22_Pin_Nu) = 0; PCout(IO_APD21_Pin_Nu) = 0; break;
- }
-}
-
-/*
-@brief 测量电容电压压降GPIO配置
-*/
-
-void Gpio_CAPSwitch(uint8_t uc_sw)
-{
- Gpio_ResistorSwitch(0);
- if(uc_sw > 0)
- {
- PBout(IO_CAP_AD_Pin_Nu) = 1;
- }else{
- PBout(IO_CAP_AD_Pin_Nu) = 0;
- }
-}
diff --git a/source/elec_det/hardware/gpio_cfg.h b/source/elec_det/hardware/gpio_cfg.h
deleted file mode 100644
index 1d69c26..0000000
--- a/source/elec_det/hardware/gpio_cfg.h
+++ /dev/null
@@ -1,304 +0,0 @@
-#ifndef GPIO_CFG_H_
-#define GPIO_CFG_H_
-#include "base/define.h"
-
-//具体实现思想,参考<>第五章(87页~92页).
-//IO口操作宏定义
-#define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x2000000+((addr &0xFFFFF)<<5)+(bitnum<<2))
-#define MEM_ADDR_(addr) *((volatile unsigned long *)(addr))
-#define BIT_ADDR_(addr, bitnum) MEM_ADDR_(BITBAND(addr, bitnum))
-//IO口地址映射
-#define GPIOA_ODR_Addr (GPIOA_BASE+12) //0x4001080C
-#define GPIOB_ODR_Addr (GPIOB_BASE+12) //0x40010C0C
-#define GPIOC_ODR_Addr (GPIOC_BASE+12) //0x4001100C
-#define GPIOD_ODR_Addr (GPIOD_BASE+12) //0x4001140C
-#define GPIOE_ODR_Addr (GPIOE_BASE+12) //0x4001180C
-#define GPIOF_ODR_Addr (GPIOF_BASE+12) //0x40011A0C
-#define GPIOG_ODR_Addr (GPIOG_BASE+12) //0x40011E0C
-
-#define GPIOA_IDR_Addr (GPIOA_BASE+8) //0x40010808
-#define GPIOB_IDR_Addr (GPIOB_BASE+8) //0x40010C08
-#define GPIOC_IDR_Addr (GPIOC_BASE+8) //0x40011008
-#define GPIOD_IDR_Addr (GPIOD_BASE+8) //0x40011408
-#define GPIOE_IDR_Addr (GPIOE_BASE+8) //0x40011808
-#define GPIOF_IDR_Addr (GPIOF_BASE+8) //0x40011A08
-#define GPIOG_IDR_Addr (GPIOG_BASE+8) //0x40011E08
-
-//IO口操作,只对单一的IO口!
-//确保n的值小于16!
-#define PAout(n) BIT_ADDR_(GPIOA_ODR_Addr,n) //输出
-#define PAin(n) BIT_ADDR_(GPIOA_IDR_Addr,n) //输入
-
-#define PBout(n) BIT_ADDR_(GPIOB_ODR_Addr,n) //输出
-#define PBin(n) BIT_ADDR_(GPIOB_IDR_Addr,n) //输入
-
-#define PCout(n) BIT_ADDR_(GPIOC_ODR_Addr,n) //输出
-#define PCin(n) BIT_ADDR_(GPIOC_IDR_Addr,n) //输入
-
-#define PDout(n) BIT_ADDR_(GPIOD_ODR_Addr,n) //输出
-#define PDin(n) BIT_ADDR_(GPIOD_IDR_Addr,n) //输入
-
-#define PEout(n) BIT_ADDR_(GPIOE_ODR_Addr,n) //输出
-#define PEin(n) BIT_ADDR_(GPIOE_IDR_Addr,n) //输入
-
-#define PFout(n) BIT_ADDR_(GPIOF_ODR_Addr,n) //输出
-#define PFin(n) BIT_ADDR_(GPIOF_IDR_Addr,n) //输入
-
-#define PGout(n) BIT_ADDR_(GPIOG_ODR_Addr,n) //输出
-#define PGin(n) BIT_ADDR_(GPIOG_IDR_Addr,n) //输入
-
-#define VCC_2V5_Pin GPIO_Pin_1
-#define VCC_2V5_Pin_Nu 1
-#define VCC_2V5_GPIO_Port GPIOA
-
-#define R_AD_01_Pin GPIO_Pin_3
-#define R_AD_01_Nu 3
-#define R_AD_01_Port GPIOA
-
-#define VCC_1V25_Pin GPIO_Pin_3
-#define VCC_1V25_Pin_Nu 3
-#define VCC_1V25_GPIO_Port GPIOA
-
-
-#define C_H_DAC_Pin GPIO_Pin_4
-#define C_H_DAC_Pin_Nu 4
-#define C_H_DAC_GPIO_Port GPIOA
-
-#define C_M_DAC_Pin GPIO_Pin_5
-#define C_M_DAC_Pin_Nu 5
-#define C_M_DAC_GPIO_Port GPIOA
-
-#define V_LA_M_Pin GPIO_Pin_6
-#define V_LA_M_Pin_Nu 6
-#define V_LA_M_GPIO_Port GPIOA
-
-#define V_LA_H_Pin GPIO_Pin_7
-#define V_LA_H_Pin_Nu 7
-#define V_LA_H_GPIO_Port GPIOA
-
-#define LAVC_M_Pin GPIO_Pin_8
-#define LAVC_M_Pin_Nu 8
-#define LAVC_M_GPIO_Port GPIOA
-
-#define USART1_TX_Pin GPIO_Pin_9
-#define USART1_TX_Pin_Nu 9
-#define USART1_TX_GPIO_Port GPIOA
-
-#define USART1_RX_Pin GPIO_Pin_10
-#define USART1_RX_Pin_Nu 10
-#define USART1_RX_GPIO_Port GPIOA
-
-#define CAN1_RX_Pin GPIO_Pin_10
-#define CAN1_RX_Pin_Nu 11
-#define CAN1_RX_GPIO_Port GPIOA
-
-#define CAN1_TX_Pin GPIO_Pin_11
-#define CAN1_TX_Pin_Nu 12
-#define CAN1_TX_GPIO_Port GPIOA
-
-#define SEG0_Pin GPIO_Pin_15
-#define SEG0_Pin_Nu 15
-#define SEG0_GPIO_Port GPIOA
-
-
-#define R10_ON_Pin GPIO_Pin_0
-#define R10_ON_Pin_Nu 0
-#define R10_ON_GPIO_Port GPIOB
-
-
-#define R510_ON_Pin GPIO_Pin_1
-#define R510_ON_Pin_Nu 1
-#define R510_ON_GPIO_Port GPIOB
-
-#define LED1_Pin GPIO_Pin_2
-#define LED1_Pin_Nu 2
-#define LED1_GPIO_Port GPIOB
-
-#define IO_CAP_AD_Pin GPIO_Pin_5
-#define IO_CAP_AD_Pin_Nu 5
-#define IO_CAP_AD_Port GPIOB
-
-#define FIRE_TEST_Pin GPIO_Pin_8
-#define FIRE_TEST_Pin_Nu 8
-#define FIRE_TEST_Port GPIOB
-
-#define IO_APD12_Pin GPIO_Pin_9
-#define IO_APD12_Pin_Nu 9
-#define IO_APD12_GPIO_Port GPIOB
-
-#define I2IC_SCL_Pin GPIO_Pin_10
-#define I2IC_SCL_Pin_Nu 10
-#define I2IC_SCL_GPIO_Port GPIOB
-
-#define I2IC_SDA_Pin GPIO_Pin_11
-#define I2IC_SDA_Pin_Nu 11
-#define I2IC_SDA_GPIO_Port GPIOB
-
-
-#define LED2_Pin GPIO_Pin_12
-#define LED2_Pin_Nu 12
-#define LED2_GPIO_Port GPIOB
-
-#define OUTAL_Pin GPIO_Pin_13
-#define OUTAL_Pin_Nu 13
-#define OUTAL_GPIO_Port GPIOB
-
-#define OUTBL_Pin GPIO_Pin_14
-#define OUTBL_Pin_Nu 14
-#define OUTBL_GPIO_Port GPIOB
-
-#define OUTAH_Pin GPIO_Pin_15
-#define OUTAH_Pin_Nu 15
-#define OUTAH_GPIO_Port GPIOB
-
-
-#define AD_OUTA_Pin GPIO_Pin_0
-#define AD_OUTA_Pin_Nu 0
-#define AD_OUTA_Port GPIOC
-
-#define AD_OUTB_Pin GPIO_Pin_1
-#define AD_OUTB_Pin_Nu 1
-#define AD_OUTB_Port GPIOC
-
-#define AN_UA_Pin GPIO_Pin_2
-#define AN_UA_Pin_Nu 2
-#define AN_UA_Port GPIOC
-
-#define AN_MAL_Pin GPIO_Pin_3
-#define AN_MAL_Pin_Nu 3
-#define AN_MAL_Port GPIOC
-
-#define R100_ON_Pin GPIO_Pin_4
-#define R100_ON_Pin_Nu 4
-#define R100_ON_GPIO_Port GPIOC
-
-#define AN_CAP_AD_Pin GPIO_Pin_5
-#define AN_CAP_AD_Pin_Nu 5
-#define AN_CAP_AD_Port GPIOC
-
-#define OUTBH_Pin GPIO_Pin_6
-#define OUTBH_Pin_Nu 6
-#define OUTBH_GPIO_Port GPIOC
-
-#define POWER_ON_Pin GPIO_Pin_7
-#define POWER_ON_Pin_Nu 7
-#define POWER_ON_GPIO_Port GPIOC
-
-#define SEG4_Pin GPIO_Pin_8
-#define SEG4_Pin_Nu 8
-#define SEG4_GPIO_Port GPIOC
-
-#define SEG3_Pin GPIO_Pin_9
-#define SEG3_Pin_Nu 9
-#define SEG3_GPIO_Port GPIOC
-
-#define SEG1_Pin GPIO_Pin_10
-#define SEG1_Pin_Nu 10
-#define SEG1_GPIO_Port GPIOC
-
-#define SEG2_Pin GPIO_Pin_11
-#define SEG2_Pin_Nu 11
-#define SEG2_GPIO_Port GPIOC
-
-#define U3_TXD_Pin GPIO_Pin_10
-#define U3_TXD_Pin_Nu 10
-#define U3_TXD_GPIO_Port GPIOC
-
-#define U3_RXD_Pin GPIO_Pin_11
-#define U3_RXD_Pin_Nu 11
-#define U3_RXD_GPIO_Port GPIOC
-
-#define IO_APD22_Pin GPIO_Pin_13
-#define IO_APD22_Pin_Nu 13
-#define IO_APD22_GPIO_Port GPIOC
-
-
-#define IO_APD21_Pin GPIO_Pin_14
-#define IO_APD21_Pin_Nu 14
-#define IO_APD21_GPIO_Port GPIOC
-
-#define IO_APD11_Pin GPIO_Pin_15
-#define IO_APD11_Pin_Nu 15
-#define IO_APD11_GPIO_Port GPIOC
-
-
-
-
-
-
-
-
-
-
-#define LED2_Out PBout(LED2_Pin_Nu)
-#define LED1_Out PBout(LED1_Pin_Nu)
-#define LED1_Out_On PBout(LED1_Pin_Nu)=0
-#define LED1_Out_Off PBout(LED1_Pin_Nu)=1
-
-//电源开关
-
-#define POWER_ON {PCout(POWER_ON_Pin_Nu) = 1;}
-#define POWER_OFF {PCout(POWER_ON_Pin_Nu) = 0;}
-
-//桥驱动
-#define HMOS_SWITCH_W_1 {PAout(LAVC_M_Pin_Nu)=0; PCout(OUTBH_Pin_Nu)=0;PBout(OUTAL_Pin_Nu)=0; delay_nop(50); PBout(OUTBL_Pin_Nu)=1;PBout(OUTAH_Pin_Nu)=1;}
-#define HMOS_SWITCH_W_0 {PAout(LAVC_M_Pin_Nu)=0; PBout(OUTBL_Pin_Nu)=0;PBout(OUTAH_Pin_Nu)=0; delay_nop(50); PBout(OUTAL_Pin_Nu)=1;PCout(OUTBH_Pin_Nu)=1;}
-
-#define HMOS_SWITCH_RW_1 {PCout(OUTBH_Pin_Nu)=0;PBout(OUTAL_Pin_Nu)=0; delay_nop(50); PBout(OUTBL_Pin_Nu)=1;PBout(OUTAH_Pin_Nu)=1;PAout(LAVC_M_Pin_Nu)=1;}
-#define HMOS_SWITCH_RW_0 {PAout(LAVC_M_Pin_Nu)=0; PBout(OUTBL_Pin_Nu)=0;PBout(OUTAH_Pin_Nu)=0; delay_nop(50); PBout(OUTAL_Pin_Nu)=1;PCout(OUTBH_Pin_Nu)=1;}
-
-#define HMOS_SWITCH_GND {PCout(OUTBH_Pin_Nu)=0; PAout(LAVC_M_Pin_Nu)=0;PBout(OUTAH_Pin_Nu)=0;delay_nop(50);PBout(OUTBL_Pin_Nu)=1;PBout(OUTAL_Pin_Nu)=1;}
-#define HMOS_SWITCH_OFF {PCout(OUTBH_Pin_Nu)=0; PAout(LAVC_M_Pin_Nu)=0;PBout(OUTAH_Pin_Nu)=0;delay_nop(50);PBout(OUTBL_Pin_Nu)=0;PBout(OUTAL_Pin_Nu)=0;}
-#define HMOS_FAST_DISCHG {PCout(POWER_ON_Pin_Nu) = 0; PCout(OUTBH_Pin_Nu)=0; PAout(LAVC_M_Pin_Nu)=0;PBout(OUTBL_Pin_Nu)=0;delay_nop(50);PBout(OUTAH_Pin_Nu)=1;PBout(OUTAL_Pin_Nu)=1;}
-#define HMOS_SWITCH_ON {PAout(LAVC_M_Pin_Nu)=0;PCout(OUTBH_Pin_Nu)=0; PBout(OUTAL_Pin_Nu)=0;delay_nop(50);PBout(OUTBL_Pin_Nu)=1;PBout(OUTAH_Pin_Nu)=1;}
-
-//芯跳桥驱动
-#define XTBus_POWER_Out HMOS_SWITCH_W_1//总线模式开关
-#define XTBUS_ON HMOS_SWITCH_ON
-#define XTBUS_OFF HMOS_SWITCH_OFF
-#define XTBUS_W_1 HMOS_SWITCH_W_1
-#define XTBUS_W_0 HMOS_SWITCH_W_0
-#define XTBUS_WR_1 HMOS_SWITCH_W_1
-#define XTBUS_WR_0 HMOS_SWITCH_W_0
-
-//JQ 桥驱动
-
-#define JQBus_POWER_Out HMOS_SWITCH_W_1 //总线模式开关
-#define JQBUS_ON HMOS_SWITCH_ON
-#define JQBUS_OFF HMOS_SWITCH_OFF
-#define JQBUS_W_1 HMOS_SWITCH_W_1
-#define JQBUS_W_0 HMOS_SWITCH_W_0
-
-//EW 桥驱动
-#define EW_SINGLE_MOD_M {PCout(OUTBH_Pin_Nu)=0;PBout(OUTAL_Pin_Nu)=0;PBout(OUTAH_Pin_Nu)=0; delay_nop(50); PBout(OUTBL_Pin_Nu)=1;PAout(LAVC_M_Pin_Nu)=1;}
-#define EW_SINGLE_MOD_H HMOS_SWITCH_W_1
-
-#define EW_DIFF_MOD_M {PCout(OUTBH_Pin_Nu)=0;PBout(OUTAL_Pin_Nu)=0;PBout(OUTAH_Pin_Nu)=0; delay_nop(50); PBout(OUTBL_Pin_Nu)=1;PAout(LAVC_M_Pin_Nu)=1;}
-#define EW_DIFF_MOD_H HMOS_SWITCH_W_1
-#define EW_DIFF_MOD_L HMOS_SWITCH_W_0
-#define EW_BUS_OFF HMOS_SWITCH_OFF
-
-
-void CtrlGpio_DefInit(void);
-/*
-@brief 获取设备地址
-@param 无
-@rtv 设备地址
-*/
-uint8_t Gpio_GetDeivceAddr(void);
-
-/*
-@brief 4限制电阻测量通道切换
-@param 0 全关
- 1 通道1-4通,过桥丝
- 2 通道2-3通,过桥丝
- 3 通道1-3通,测阻抗
- 4 通道2-4通,测阻抗
-*/
-void Gpio_ResistorSwitch(uint8_t uc_r);
-/*
-@brief 测量电容电压压降GPIO配置
-*/
-void Gpio_CAPSwitch(uint8_t uc_sw);
-#endif
-
diff --git a/source/elec_det/hardware/hardware.c b/source/elec_det/hardware/hardware.c
deleted file mode 100644
index 78ba9ae..0000000
--- a/source/elec_det/hardware/hardware.c
+++ /dev/null
@@ -1,89 +0,0 @@
-#include "base/define.h"
-#include "gpio_cfg.h"
-#include "adc_cfg.h"
-//#include "usartapp.h"
-//#include "console_usart.h"
-#include "base/delay.h"
-#include "power.h"
-//#include "database.h"
-#include "timer_cfg.h"
-#include "base/utility.h"
-//#include "yecan.h"
-#include "hardware/jw3425iic.h"
-BoartCheck_st board_st;
-BoardInfo_un boardinfo_un;
-
-void test_timer_function()
-{
- static uint8_t flag_ = 0;
- LED1_Out = flag_;
- flag_ ^= 0x01;
-}
-
-//检测小板初始化
-void Ye_BoardInit(void)
-{
-
- AdcDef_Init();
- DAC_Definit();
-// ConsoleUsart_Init();
-// YeCanInit();
- CtrlGpio_DefInit();
- DelayTimer_Init();
- TimerCount_Init();
- CurrentSampleR_Def
- I2C_init();
- delay_ms(500);
-
-}
-/*
- 测试小板上电自检
-*/
-void Ye_BoardCheck(void)
-{
- uint16_t aus_buf[AD_SCAN_COUNT];
- board_st.app_run_flag = 1;
- board_st.device_id = Gpio_GetDeivceAddr();
- board_st.chip_temp = (uint16_t)(Get_Temperature()*10);
- board_st.soft_v = SoftVersion;
- board_st.hard_v = boardinfo_un.boardinfo.hard_v;
- board_st.resistor_diff = boardinfo_un.boardinfo.resistor_diff;
- board_st.plan_id = *((uint32_t*)APP_TEST_PLAN_ADDR);
-
-
- GetADC1_Value(VCC_1V25_CH,aus_buf,AD_SCAN_COUNT);
- Bubble_Sort_u16(aus_buf,AD_SCAN_COUNT);
- board_st.v1p25_adc = aus_buf[AD_SCAN_COUNT>>1];
-
- GetADC1_Value(VCC_2V5_CH,aus_buf,AD_SCAN_COUNT);
- Bubble_Sort_u16(aus_buf,AD_SCAN_COUNT);
- board_st.v2p5_adc = aus_buf[AD_SCAN_COUNT>>1];
-
- GetADC1_Value(ADC_Channel_16,aus_buf,AD_SCAN_COUNT);
- Bubble_Sort_u16(aus_buf,AD_SCAN_COUNT);
- board_st.adc_shake = aus_buf[AD_SCAN_COUNT-1] - aus_buf[0];
-
-
- LED1_Out = 1;
- if(0 != PowerCalPrapare())
- {
- board_st.v1p25_adc = 0;
- LED1_Out = 0;
- }
- PowerCalibration_set(POWER_DEF_V,45);
- delay_ms(100);
- board_st.bus_5p5v = Power_GetHPowerV();
-//
-#ifdef CHECKER_DEV
- PowerCalibration_set(260,50);
- delay_ms(100);
-#else
- PowerCalibration_set(90,45);
-#endif
- board_st.bus_26v = Power_GetHPowerV();
-//
- PowerCalibration_set(POWER_DEF_V,45);
-
-
-}
-
diff --git a/source/elec_det/hardware/jw3425iic.c b/source/elec_det/hardware/jw3425iic.c
deleted file mode 100644
index 509a449..0000000
--- a/source/elec_det/hardware/jw3425iic.c
+++ /dev/null
@@ -1,731 +0,0 @@
-#include "jw3425iic.h"
-#include "gpio_cfg.h"
-#include "base/delay.h"
-#include "interface/basechecker.h"
-#include "base/utility.h"
-
-
-
-void IIC_SDA_DIR(uint8_t dir)
-{
- GPIO_InitTypeDef GPIO_InitStructure;
- if(dir == 0)
- {
-
- GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
-
- }else{
- GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;
- }
- GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
- GPIO_InitStructure.GPIO_Pin= I2IC_SDA_Pin;
- GPIO_Init(GPIOB,&GPIO_InitStructure);
-}
-
-void I2C_init(void)
-{
- GPIO_InitTypeDef GPIO_InitStructure;
- /* enable GPIOB clock */
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
- //GPIO 配置
- GPIO_InitStructure.GPIO_Pin=I2IC_SCL_Pin | I2IC_SDA_Pin;
- GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
- GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
- GPIO_Init(GPIOB,&GPIO_InitStructure);
- IIC_SDA(1);
- IIC_SCL(1);
-}
-void I2C_Definit(void)
-{
- GPIO_InitTypeDef GPIO_InitStructure;
- /* enable GPIOB clock */
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
- //GPIO 配置
- GPIO_InitStructure.GPIO_Pin=I2IC_SCL_Pin | I2IC_SDA_Pin;
- GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
- GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
- GPIO_Init(GPIOB,&GPIO_InitStructure);
-}
-//产生IIC起始信号
-void IIC_Start(void)
-{
- SDA_OUT(); //sda线输出
- IIC_SDA(1);
- IIC_SCL(1);
- delay_us(IIC_PLUS_DELAY);
- IIC_SDA(0);//START:when CLK is high,DATA change form high to low
- delay_us(IIC_PLUS_DELAY);
- IIC_SCL(0);//钳住I2C总线,准备发送或接收数据
-}
-//产生IIC停止信号
-void IIC_Stop(void)
-{
- SDA_OUT();//sda线输出
- IIC_SCL(0);
- IIC_SDA(0);//STOP:when CLK is high DATA change form low to high
- delay_us(IIC_PLUS_DELAY);
- IIC_SCL(1);
- delay_us(IIC_PLUS_DELAY);
- IIC_SDA(1);//发送I2C总线结束信号
-}
-
-//等待应答信号到来
-//返回值:1,接收应答失败
-// 0,接收应答成功
-uint8_t IIC_Wait_Ack(void)
-{
- uint32_t ucErrTime=0;
- SDA_IN(); //SDA设置为输入
- IIC_SDA(1);
- delay_us(1);
- IIC_SCL(1);
- delay_us(IIC_PLUS_DELAY>>1);
- while(READ_SDA)
- {
- ucErrTime++;
- if(ucErrTime>I2C_OPERATION_OUTTIME)
- {
- IIC_Stop();
- return 1;
- }
- }
- IIC_SCL(0);//时钟输出0
- return 0;
-}
-//产生ACK应答
-void IIC_Ack(void)
-{
- IIC_SCL(0);
- SDA_OUT();
- IIC_SDA(0);
- delay_us(IIC_PLUS_DELAY);
- IIC_SCL(1);
- delay_us(IIC_PLUS_DELAY);
- IIC_SCL(0);
-}
-//不产生ACK应答
-void IIC_NAck(void)
-{
- IIC_SCL(0);
- SDA_OUT();
- IIC_SDA(1);
- delay_us(IIC_PLUS_DELAY);
- IIC_SCL(1);
- delay_us(IIC_PLUS_DELAY);
- IIC_SCL(0);
-}
-//IIC发送一个字节
-//返回从机有无应答
-//0,有应答
-//1,无应答
-uint8_t IIC_Send_Byte(uint8_t txd)
-{
- uint8_t t;
- SDA_OUT();
- for(t=0;t<8;t++)
- {
- IIC_SCL(0);//拉低时钟开始数据传输
- delay_us(IIC_PLUS_DELAY>>1);
- IIC_SDA((txd&0x80)>>7);
- txd<<=1;
- delay_us(IIC_PLUS_DELAY>>1);
- IIC_SCL(1);
- delay_us(IIC_PLUS_DELAY);
- }
- IIC_SCL(0);
- delay_us(IIC_PLUS_DELAY >>1);
-
- return IIC_Wait_Ack();
-}
-
-//读1个字节,ack=1时,发送ACK,ack=0,发送nACK
-uint8_t IIC_Read_Byte(unsigned char ack)
-{
- unsigned char i,receive=0;
- SDA_IN();//SDA设置为输入
- for(i=0;i<8;i++ )
- {
- IIC_SCL(0);
- delay_us(IIC_PLUS_DELAY);
- IIC_SCL(1);
- delay_us(IIC_PLUS_DELAY>>1);
- receive<<=1;
- if(READ_SDA)receive++;
- delay_us(IIC_PLUS_DELAY >> 1);
- }
- if (!ack)
- IIC_NAck();//发送nACK
- else
- IIC_Ack(); //发送ACK
- return receive;
-}
-
-
-
-
-
-/* @param bi_dir: option using in transceive */
-int32_t I2C_master_write(uint16_t address, uint8_t *src, uint32_t size, uint32_t *nwriten, uint8_t bi_dir)
-{
- uint32_t timeout = 0;
- uint8_t ack = 0;
- *nwriten = 0;
- __disable_irq();
- IIC_Start();
- //发送地址
- ack = IIC_Send_Byte(( address<<1));
- if(ack)
- {
- goto iic_send_stop;
- }
- while (*nwriten < size) {
- ack = IIC_Send_Byte(src[*nwriten]);
- if(ack)
- {
- break;
- }
- (*nwriten)++;
- }
-
-iic_send_stop:
- if(bi_dir ==0)//bi_dir == 1时不发送停止信号
- {
- IIC_Stop();
- }
- __enable_irq();
- return ack;
-}
-
-/* @param bi_dir: option using in transceive */
-int32_t I2C_master_read(uint16_t address, uint8_t *dst, uint32_t size, uint32_t *nread, uint8_t bi_dir)
-{
- uint32_t i;
- *nread = 0;
- uint8_t ack = 0;
- if (size == 0)
- return 0;
- __disable_irq();
- IIC_Start();//重新发送起始信号
- ack = IIC_Send_Byte(( address << 1) | 0x01);//发送读命令地址
- if(ack)
- goto send_stop_err;
- while(*nread < size)
- {
- if((*nread) == (size-1))//倒数1个字节,设置不应答
- {
- dst[*nread] = IIC_Read_Byte(0);
- }else{
- dst[*nread] = IIC_Read_Byte(1);
- }
- (*nread)++;
- }
-send_stop_err:
- // If receive NACK or no data to write, send STOP
- if (bi_dir == 0)
- IIC_Stop();
- __enable_irq();
- return ack;
-}
-
-
-/* @param bi_dir: option using in transceive */
-int32_t I2C_master_write_read(uint16_t address, uint8_t*cmd, uint8_t cmd_size,uint8_t *dst, uint32_t read_size, uint32_t *nread)
-{
- uint32_t ul_writen;
- *nread = 0;
-
- if (read_size == 0)
- return 0;
- I2C_master_write(address,cmd,cmd_size,&ul_writen,1);
- if(ul_writen != cmd_size)
- {
- IIC_Stop();
- return 1;
- }
- I2C_master_read(address, dst, read_size, nread, 1);
- IIC_Stop();
- if(read_size != *nread)
- {
- return 1;
- }
- return 0;
-}
-
-
-int32_t I2C_master_writeCode(uint16_t address, uint8_t *cmd_src, uint32_t cmd_len,const uint8_t* puc_cod,uint32_t code_len )
-{
- uint8_t uc_code;
- uint8_t ack = 0;
- __disable_irq();
- IIC_Start();
- //发送地址
- ack = IIC_Send_Byte(( address<<1));
- if(ack)
- {
- IIC_Stop();
- __enable_irq();
- return ack;
- }
- //发送命令
- while (cmd_len > 0) {
- ack = IIC_Send_Byte(*cmd_src);
- if(ack)
- {
- IIC_Stop();
- __enable_irq();
- return ack;
- }
- cmd_src++;
- cmd_len--;
- }
- //发送代码数据
- while (code_len > 0) {
- uc_code = *puc_cod;
- ack = IIC_Send_Byte(uc_code);
- if(ack)
- {
- IIC_Stop();
- __enable_irq();
- return ack;
- }
- puc_cod++;
- code_len--;
- }
- IIC_Stop();
- __enable_irq();
- return ack;
-}
-
-
-int32_t I2C_master_CodeEquel(uint16_t address, uint8_t *cmd_src, uint32_t cmd_len,const uint8_t* puc_cod,uint32_t code_len )
-{
- uint8_t uc_code;
- uint8_t uc_rdata;
- uint8_t ack = 0;
- __disable_irq();
- IIC_Start();
-//发送地址
- ack = IIC_Send_Byte(( address<<1));
- if(ack)
- {
- IIC_Stop();
- __enable_irq();
- return ack;
- }
- //发送命令
- while (cmd_len > 0) {
- ack = IIC_Send_Byte(*cmd_src);
- if(ack)
- {
- IIC_Stop();
- __enable_irq();
- return ack;
- }
- cmd_src++;
- cmd_len--;
- }
- IIC_Start();//重新发送起始信号
- ack = IIC_Send_Byte(( address << 1) | 0x01);//发送读命令地址
- if(ack)
- {
- IIC_Stop();
- __enable_irq();
- return ack;
- }
- while(code_len > 0)
- {
- uc_code = *puc_cod;
- puc_cod++;
- if(code_len == 1)//倒数1个字节,设置不应答
- {
- uc_rdata = IIC_Read_Byte(0);
- }else{
- uc_rdata = IIC_Read_Byte(1);
- }
- if(uc_code != uc_rdata)
- {
- ack = 1;
- break;
- }
- code_len--;
- }
- IIC_Stop();
- __enable_irq();
- return ack;
-}
-
-
-
-/******************IIC trim **********************/
-#define SLAVE_IIC_ADDR_ 0x18
-/*
-@brief Vref电压校准
-@param0 0不更新,1更新
-@param1 校准值
-*/
-void MC_VrefTrim(void)
-{
- uint8_t auc_cmd[]={0x10,0xEF,0x00};
- uint8_t auc_run_cmd[]={0x18,0xE7};
- uint32_t ul_sendlen = 0;
- uint8_t uc_ack = 0;
- auc_cmd[2] = checker_runcfg.params[1] & 0x0F;
- uc_ack = I2C_master_write(SLAVE_IIC_ADDR_,auc_cmd,sizeof(auc_cmd),&ul_sendlen,0);
- if(uc_ack != 0 || checker_runcfg.params[0] == 0)
- {
- Checker_MaskResult(uc_ack,checker_runcfg.task_info.runindex);
- return ;
- }
- uc_ack = I2C_master_write(SLAVE_IIC_ADDR_,auc_run_cmd,sizeof(auc_run_cmd),&ul_sendlen,0);
- Checker_MaskResult(uc_ack,checker_runcfg.task_info.runindex);
-}
-/*
-@brief Iref电压校准
-@param0 Iref1 0不更新,1更新
-@param1 Iref2 0不更新,1更新
-@param2 Iref1 校准值
-@param3 Iref2 校准值
-*/
-void MC_IrefTrim(void)
-{
- uint8_t auc_cmd[]={0x12,0xED,0x00};
- uint8_t auc_run1_cmd[]={0x19,0xE6};
- uint8_t auc_run2_cmd[]={0x1A,0xE5};
- uint32_t ul_sendlen = 0;
- uint8_t uc_ack = 0;
- auc_cmd[2] = (checker_runcfg.params[2] & 0x0F) | ((checker_runcfg.params[3] & 0x0F)<<4);
- uc_ack = I2C_master_write(SLAVE_IIC_ADDR_,auc_cmd,sizeof(auc_cmd),&ul_sendlen,0);
- if(uc_ack != 0)
- {
- Checker_MaskResult(uc_ack,checker_runcfg.task_info.runindex);
- return ;
- }
- if(checker_runcfg.params[0] != 0)
- {
- uc_ack |= I2C_master_write(SLAVE_IIC_ADDR_,auc_run1_cmd,sizeof(auc_run1_cmd),&ul_sendlen,0);
- }
- if(checker_runcfg.params[1] != 0)
- {
- uc_ack |= I2C_master_write(SLAVE_IIC_ADDR_,auc_run2_cmd,sizeof(auc_run2_cmd),&ul_sendlen,0);
- }
- Checker_MaskResult(uc_ack,checker_runcfg.task_info.runindex);
-}
-
-
-
-/*
-@brief Iref1电压校准
-@param0 0不更新,1更新
-@param1 校准值
-*/
-void MC_RC4MTrim(void)
-{
- uint8_t auc_cmd[]={0x14,0xEB,0x00};
- uint8_t auc_run_cmd[]={0x1B,0xE4};
- uint32_t ul_sendlen = 0;
- uint8_t uc_ack = 0;
- auc_cmd[2] = checker_runcfg.params[1] & 0x3F;
- uc_ack = I2C_master_write(SLAVE_IIC_ADDR_,auc_cmd,sizeof(auc_cmd),&ul_sendlen,0);
- if(uc_ack != 0 || checker_runcfg.params[0] == 0)
- {
- Checker_MaskResult(uc_ack,checker_runcfg.task_info.runindex);
- return ;
- }
- uc_ack = I2C_master_write(SLAVE_IIC_ADDR_,auc_run_cmd,sizeof(auc_run_cmd),&ul_sendlen,0);
- Checker_MaskResult(uc_ack,checker_runcfg.task_info.runindex);
-}
-
-/*
-@brief RC128K校准
-@param0 0不更新,1更新
-@param1 校准值
-*/
-void MC_RC128KTrim(void)
-{
- uint8_t auc_cmd[]={0x15,0xEA,0x00};
- uint8_t auc_run_cmd[]={0x1C,0xE3};
- uint32_t ul_sendlen = 0;
- uint8_t uc_ack = 0;
- auc_cmd[2] = checker_runcfg.params[1] & 0x1F;
- uc_ack = I2C_master_write(SLAVE_IIC_ADDR_,auc_cmd,sizeof(auc_cmd),&ul_sendlen,0);
- if(uc_ack != 0 || checker_runcfg.params[0] == 0)
- {
- Checker_MaskResult(uc_ack,checker_runcfg.task_info.runindex);
- return ;
- }
- uc_ack = I2C_master_write(SLAVE_IIC_ADDR_,auc_run_cmd,sizeof(auc_run_cmd),&ul_sendlen,0);
- Checker_MaskResult(uc_ack,checker_runcfg.task_info.runindex);
-}
-
-/*
-@brief 设置MTP电压
-@param0 低压
-@param1 高压
-*/
-void MC_SetMTPVol(void)
-{
- uint8_t auc_cmd[]={0x22,0xDD,0x00};
- uint32_t ul_sendlen = 0;
- uint8_t uc_ack = 0;
- auc_cmd[2] = (checker_runcfg.params[0] & 0x03) | ((checker_runcfg.params[1] & 0x0F)<<2);
- uc_ack = I2C_master_write(SLAVE_IIC_ADDR_,auc_cmd,sizeof(auc_cmd),&ul_sendlen,0);
- Checker_MaskResult(uc_ack,checker_runcfg.task_info.runindex);
-}
-
-/*
-@brief 设置MTP电压
-@param0 MTP地址
-@param1 擦除模式
-*/
-void MC_EraseMTP(void)
-{
- uint8_t auc_erase_cmd[]={0x00,0x00};
- uint8_t auc_setAddr_cmd[]={0x23,0xDC,0x00,0x00};
- uint32_t ul_sendlen = 0;
- uint8_t uc_ack = 0;
- auc_setAddr_cmd[2] = (checker_runcfg.params[0]>>8) & 0xFF;
- auc_setAddr_cmd[3] = checker_runcfg.params[0] & 0xFF;
- uc_ack = I2C_master_write(SLAVE_IIC_ADDR_,auc_setAddr_cmd,sizeof(auc_setAddr_cmd),&ul_sendlen,0);
- if(uc_ack != 0)
- {
- Checker_MaskResult(uc_ack,checker_runcfg.task_info.runindex);
- return;
- }
- ul_sendlen = 0;
- auc_erase_cmd[0] = checker_runcfg.params[1];
- switch(checker_runcfg.params[1])
- {
- case 0x25: auc_erase_cmd[1] = 0xDA; break;//全片擦除
- case 0x26: auc_erase_cmd[1] = 0xD9; break;//块擦除
- case 0x27: auc_erase_cmd[1] = 0xD8; break;//页擦除
- case 0x28: auc_erase_cmd[1] = 0xD7; break;//字擦除
- }
- uc_ack = I2C_master_write(SLAVE_IIC_ADDR_,auc_erase_cmd,sizeof(auc_erase_cmd),&ul_sendlen,0);
- Checker_MaskResult(uc_ack,checker_runcfg.task_info.runindex);
-}
-
-
-
-/*
-@brief MTP写入数据
-@param0..N 编程数据
-*/
-void MC_IICWriteMTP(void)
-{
- uint8_t auc_cmd[16]={0x29,0xD6};
- uint32_t ul_sendlen = 0;
- uint8_t uc_ack = 0;
- uint16_t us_index = 0;
- for(us_index = 0; us_index < checker_runcfg.param_count;us_index++)
- {
- auc_cmd[us_index+2] = checker_runcfg.params[us_index];
- }
-
- uc_ack = I2C_master_write(SLAVE_IIC_ADDR_,auc_cmd,us_index+2,&ul_sendlen,0);
-
- Checker_MaskResult(uc_ack,checker_runcfg.task_info.runindex);
-}
-/*
-@brief MTP读数据
-@param0 读取MTP地址
-@param1 读取数据字节长度
-*/
-void MC_IICReadMTP(void)
-{
-
- uint8_t auc_setAddr_cmd[]={0x23,0xDC,0x00,0x00};
- uint8_t auc_cmd[]={0x2A,0xD5};
- uint32_t ul_readlen = 0;
- uint8_t uc_ack = 0;
- uint16_t us_buf[32];
- uint32_t ul_sendlen = 0;
- auc_setAddr_cmd[2] = (checker_runcfg.params[0]>>8) & 0xFF;
- auc_setAddr_cmd[3] = checker_runcfg.params[0] & 0xFF;
- if(checker_runcfg.params[1] > 64)
- {
- checker_runcfg.params[1] = 64;
- }
- uc_ack = I2C_master_write(SLAVE_IIC_ADDR_,auc_setAddr_cmd,sizeof(auc_setAddr_cmd),&ul_sendlen,0);
- delay_ms(10);
- if(uc_ack != 0)
- {
- Checker_MaskResult(uc_ack,checker_runcfg.task_info.runindex);
- return ;
- }
- uc_ack = I2C_master_write_read(SLAVE_IIC_ADDR_,auc_cmd,sizeof(auc_cmd),(uint8_t*)us_buf,checker_runcfg.params[1],&ul_readlen);
- Checker_MaskResult(uc_ack,checker_runcfg.task_info.runindex);
- Checker_SetRtv(us_buf,checker_runcfg.rtv_count);
-}
-
-/*
-@brief MTP状态查询
-*/
-void MC_IICCheckMTPState(void)
-{
- uint8_t auc_cmd[]={0x30,0xBF};
- uint32_t ul_readlen = 0;
- uint8_t uc_ack = 0;
- uint16_t ul_rtv;
- uc_ack = I2C_master_write_read(SLAVE_IIC_ADDR_,auc_cmd,sizeof(auc_cmd),(uint8_t*)&ul_rtv,1,&ul_readlen);
- Checker_MaskResult(uc_ack,checker_runcfg.task_info.runindex);
- Checker_SetRtv(&ul_rtv,checker_runcfg.rtv_count);
-}
-
-/*
-@brief MTP使能或失能
-@param0 0失/1使能
-*/
-void MC_IICEnMTP(void)
-{
- uint8_t auc_cmd[]={0x20,0x20,0};
- uint32_t ul_sendlen = 0;
- uint8_t uc_ack = 0;
- if(checker_runcfg.params[0] == 0)
- {
- auc_cmd[2] = 0x33;
- }else{
- auc_cmd[2] = 0xCC;
- }
- uc_ack = I2C_master_write(SLAVE_IIC_ADDR_,auc_cmd,sizeof(auc_cmd),&ul_sendlen,0);
- Checker_MaskResult(uc_ack,checker_runcfg.task_info.runindex);
-}
-
-
-/*
-@brief MTP下载程序
-@param 更新地址
-@param 烧录长度
-*/
-void MC_IICUpdateMTP(void)
-{
- uint8_t uc_ack;
- uint8_t auc_enMTP_cmd[]={0x20,0x20,0xCC};
- uint8_t auc_setAddr_cmd[]={0x23,0xDC,0x00,0x00};
- uint8_t auc_setMTPOperReg_cmd[]={0x20,0xDF,0x00};
- uint8_t auc_earse_cmd[]={0x25,0xDA};
- uint8_t auc_setMTPVol[]={0x22,0xDD,0x18};//1.5V 5V
- uint8_t auc_program_cmd[]={0x29,0xD6};
- uint8_t auc_readCode_cmd[]={0x2A,0xD5};
- uint32_t ul_sendlen;
- uint16_t us_programLen = checker_runcfg.params[1];
- uint8_t* puc_Master_addr = (uint8_t*)(MC_CODE_ADDR + checker_runcfg.params[0]);
- uint16_t ul_rtv = 0;
- uint32_t ul_crc32 = 0;
-
- ul_crc32 = Crc32Calu((uint32_t*)MC_CODE_ADDR,16*1024);
- if(ul_crc32 != boardinfo_un.boardinfo.mc_ICodeCrc32)
- {
- uc_ack = 1;
- Checker_MaskResult(uc_ack,checker_runcfg.task_info.runindex);
- ul_rtv = 1;
- Checker_SetRtv(&ul_rtv,checker_runcfg.rtv_count);
- return;
- }
-
- if(checker_runcfg.params[0] == 0x1000)
- {
- auc_setMTPOperReg_cmd[2] = 0x04;
- }else{
- auc_setMTPOperReg_cmd[2] = 0x00;
- }
- uc_ack = 0;
- uc_ack += I2C_master_write(SLAVE_IIC_ADDR_,auc_enMTP_cmd,sizeof(auc_enMTP_cmd),&ul_sendlen,0);
- delay_ms(5);
- uc_ack += I2C_master_write(SLAVE_IIC_ADDR_,auc_enMTP_cmd,sizeof(auc_enMTP_cmd),&ul_sendlen,0);
- delay_ms(5);
- uc_ack += I2C_master_write(SLAVE_IIC_ADDR_,auc_enMTP_cmd,sizeof(auc_enMTP_cmd),&ul_sendlen,0);
- delay_ms(5);
- //设置MTP操作范围
- if(uc_ack > 2)
- {
- uc_ack = 1;
- Checker_MaskResult(uc_ack,checker_runcfg.task_info.runindex);
- ul_rtv = 2;
- Checker_SetRtv(&ul_rtv,checker_runcfg.rtv_count);
- return;
- }
-
- auc_setAddr_cmd[2] = (checker_runcfg.params[0]>>8) & 0xFF;
- auc_setAddr_cmd[3] = checker_runcfg.params[0] & 0xFF;
- uc_ack = I2C_master_write(SLAVE_IIC_ADDR_,auc_setMTPOperReg_cmd,sizeof(auc_setMTPOperReg_cmd),&ul_sendlen,0);
- //设置MTP操作范围
- if(uc_ack != 0)
- {
- Checker_MaskResult(uc_ack,checker_runcfg.task_info.runindex);
- ul_rtv = 3;
- Checker_SetRtv(&ul_rtv,checker_runcfg.rtv_count);
- return;
- }
- delay_ms(1);
- //设置MTP电压
- uc_ack = I2C_master_write(SLAVE_IIC_ADDR_,auc_setMTPVol,sizeof(auc_setMTPVol),&ul_sendlen,0);
- if(uc_ack != 0)
- {
- Checker_MaskResult(uc_ack,checker_runcfg.task_info.runindex);
- ul_rtv = 4;
- Checker_SetRtv(&ul_rtv,checker_runcfg.rtv_count);
- return;
- }
- delay_ms(1);
- //设置地址
- uc_ack = I2C_master_write(SLAVE_IIC_ADDR_,auc_setAddr_cmd,sizeof(auc_setAddr_cmd),&ul_sendlen,0);
- if(uc_ack != 0)
- {
- Checker_MaskResult(uc_ack,checker_runcfg.task_info.runindex);
- ul_rtv = 5;
- Checker_SetRtv(&ul_rtv,checker_runcfg.rtv_count);
- return;
- }
- delay_ms(1);
- //擦除
- uc_ack = I2C_master_write(SLAVE_IIC_ADDR_,auc_earse_cmd,sizeof(auc_earse_cmd),&ul_sendlen,0);
- if(uc_ack != 0)
- {
- Checker_MaskResult(uc_ack,checker_runcfg.task_info.runindex);
- ul_rtv = 6;
- Checker_SetRtv(&ul_rtv,checker_runcfg.rtv_count);
- return;
- }
- delay_os_ms(200);
- //设置地址
- uc_ack = I2C_master_write(SLAVE_IIC_ADDR_,auc_setAddr_cmd,sizeof(auc_setAddr_cmd),&ul_sendlen,0);
- if(uc_ack != 0)
- {
- Checker_MaskResult(uc_ack,checker_runcfg.task_info.runindex);
- ul_rtv = 7;
- Checker_SetRtv(&ul_rtv,checker_runcfg.rtv_count);
- return;
- }
- delay_ms(1);
- uc_ack = I2C_master_writeCode(SLAVE_IIC_ADDR_,auc_program_cmd,sizeof(auc_program_cmd),puc_Master_addr,us_programLen);
- if(uc_ack != 0)
- {
- Checker_MaskResult(uc_ack,checker_runcfg.task_info.runindex);
- ul_rtv = 8;
- Checker_SetRtv(&ul_rtv,checker_runcfg.rtv_count);
- return;
- }
- delay_ms(20);
- //设置地址
- uc_ack = I2C_master_write(SLAVE_IIC_ADDR_,auc_setAddr_cmd,sizeof(auc_setAddr_cmd),&ul_sendlen,0);
- if(uc_ack != 0)
- {
- Checker_MaskResult(uc_ack,checker_runcfg.task_info.runindex);
- ul_rtv = 9;
- Checker_SetRtv(&ul_rtv,checker_runcfg.rtv_count);
- return;
- }
- delay_ms(5);
- uc_ack = I2C_master_CodeEquel(SLAVE_IIC_ADDR_,auc_readCode_cmd,sizeof(auc_readCode_cmd),puc_Master_addr,us_programLen);
- if(uc_ack != 0)
- {
- Checker_MaskResult(uc_ack,checker_runcfg.task_info.runindex);
- ul_rtv = 10;
- Checker_SetRtv(&ul_rtv,checker_runcfg.rtv_count);
- return;
- }
- Checker_MaskResult(0,checker_runcfg.task_info.runindex);
- ul_rtv = 0;
- Checker_SetRtv(&ul_rtv,checker_runcfg.rtv_count);
- return;
-}
diff --git a/source/elec_det/hardware/jw3425iic.h b/source/elec_det/hardware/jw3425iic.h
deleted file mode 100644
index 40d9722..0000000
--- a/source/elec_det/hardware/jw3425iic.h
+++ /dev/null
@@ -1,87 +0,0 @@
-#ifndef JW3425IIC_H
-#define JW3425IIC_H
-
-#include "base/define.h"
-#include "gpio_cfg.h"
-
-#define SDA_IN() IIC_SDA_DIR(1) //PB11输入模式
-#define SDA_OUT() IIC_SDA_DIR(0)//PB11输出模式
-#define IIC_SDA(x) PBout(I2IC_SDA_Pin_Nu)=(x)
-#define IIC_SCL(x) PBout(I2IC_SCL_Pin_Nu)=(x)
-#define READ_SDA (PBin(I2IC_SDA_Pin_Nu)&0x01)
-#define IIC_PLUS_DELAY 5
-#define I2C_OPERATION_OUTTIME 100000
-
-void I2C_init(void);
-void I2C_Definit(void);
-void IIC_SDA_DIR(uint8_t dir);
-int32_t I2C_master_write(uint16_t address, uint8_t *src, uint32_t size, uint32_t *nwriten, uint8_t bi_dir);
-/* @param bi_dir: option using in transceive */
-int32_t I2C_master_read(uint16_t address, uint8_t *dst, uint32_t size, uint32_t *nread, uint8_t bi_dir);
-/* @param bi_dir: option using in transceive */
-int32_t I2C_master_write_read(uint16_t address, uint8_t*cmd, uint8_t cmd_size,uint8_t *dst, uint32_t read_size, uint32_t *nread);
-/*
-@brief Vref电压校准
-@param0 0不更新,1更新
-@param1 校准值
-*/
-void MC_VrefTrim(void);
-/*
-@brief Iref电压校准
-@param0 Iref1 0不更新,1更新
-@param1 Iref2 0不更新,1更新
-@param2 Iref1 校准值
-@param3 Iref2 校准值
-*/
-void MC_IrefTrim(void);
-/*
-@brief Iref1电压校准
-@param0 0不更新,1更新
-@param1 校准值
-*/
-void MC_RC4MTrim(void);
-/*
-@brief RC128K校准
-@param0 0不更新,1更新
-@param1 校准值
-*/
-void MC_RC128KTrim(void);
-
-/*
-@brief 设置MTP电压
-@param0 低压
-@param1 高压
-*/
-void MC_SetMTPVol(void);
-/*
-@brief 设置MTP电压
-@param0 MTP地址
-@param1 擦除模式
-*/
-void MC_EraseMTP(void);
-/*
-@brief MTP写入数据
-@param0..N 编程数据
-*/
-void MC_IICWriteMTP(void);
-/*
-@brief MTP读数据
-@param0 读取数据字节长度
-*/
-void MC_IICReadMTP(void);
-/*
-@brief MTP状态查询
-*/
-void MC_IICCheckMTPState(void);
-/*
-@brief MTP下载程序
-@param 更新地址
-@param 烧录长度
-*/
-void MC_IICUpdateMTP(void);
-/*
-@brief MTP使能或失能
-@param0 0失/1使能
-*/
-void MC_IICEnMTP(void);
-#endif
diff --git a/source/elec_det/hardware/power.c b/source/elec_det/hardware/power.c
deleted file mode 100644
index b10af92..0000000
--- a/source/elec_det/hardware/power.c
+++ /dev/null
@@ -1,522 +0,0 @@
-#include "power.h"
-#include "base/utility.h"
-#include "gpio_cfg.h"
-#include "base/delay.h"
-#define PowerCurr_AD_BUF_LEN 40
-#define POWER_SET_COUNT 20
-static CurrentSample_Range_eu latest_range = Current_Max;
-static PowerInfo_st def_power_st;
-//static uint16_t PowerCurr_AD_buf[PowerCurr_AD_BUF_LEN];
-static float f_cur_k;
-static float f_cur_b;
-static uint8_t uc_power_cal_flag = 0;
-PowerInfo_st powerinfo_arrayst[POWER_SET_COUNT] ;
-
-/*
-@brief 获取内部基准1.2V电压对应的AD
-*/
-uint32_t Power_GetBaseVAD()
-{
- // y1 = kx1+b y2=kx2+b y1-y2/x1-x2
-// uint16_t adv_buf[10];
-// uint32_t temp_v;
-// GetADC0_Value(ADC_CHANNEL_17,adv_buf,10) ;
-// Bubble_Sort_u16(adv_buf,10);
-// return (adv_buf[4]+adv_buf[5]+adv_buf[6]+adv_buf[7])>>2;
-
- return (uint32_t)(1.2f/3.3f*4096);
-}
-
-void Power_CurCalibration()
-{
- uint16_t adv_buf[10],adv2v5,adv1v25;
- uc_power_cal_flag = 1;
- GetADC1_Value(VCC_2V5_CH,adv_buf,10) ;
- Bubble_Sort_u16(adv_buf,10);
- adv2v5 = (adv_buf[4]+adv_buf[5]+adv_buf[6]+adv_buf[7])>>2;
-
- GetADC1_Value(VCC_1V25_CH,adv_buf,10) ;
- Bubble_Sort_u16(adv_buf,10);
- adv1v25 = (adv_buf[4]+adv_buf[5]+adv_buf[6]+adv_buf[7])>>2;
-
- f_cur_k = 1.245f/((adv2v5 - adv1v25)+1);
- f_cur_b = 2.49f-f_cur_k*adv2v5;
-
-
-// GetADC0_Value(VCC_1V25_CH,adv_buf,10) ;
-// Bubble_Sort_u16(adv_buf,10);
-// adv1v25 = (adv_buf[4]+adv_buf[5]+adv_buf[6]+adv_buf[7])>>2;
-//
-// f_cur_k = 1.25f/((adv2v5 - adv1v25)+1);
-// f_cur_b = 2.5f-f_cur_k*adv2v5;
-}
-/*
-@brief 将获取的ADC值转换为电压值
-@param1 ul_adv 采样AD原始值
-@rtv 返回AD采集到的电压值 扩大1000000倍
-*/
-uint32_t Power_ADVGetCalVal_106(uint16_t ul_adv)
-{
- if(uc_power_cal_flag == 0)
- {
- Power_CurCalibration();
- }
- return (uint32_t)((f_cur_k*ul_adv+f_cur_b)*1000000);
-}
-
-
- /*
-@brief 采样高电平电压
-*/
-uint32_t Power_GetHPowerV()
-{
- uint32_t adv;
- uint16_t adv_buf[10];
- Power_CurCalibration();
- GetADC1_Value(V_LA_H_CH,adv_buf,10) ;
- Bubble_Sort_u16(adv_buf,10);
- adv = (adv_buf[4]+adv_buf[5]+adv_buf[6]+adv_buf[7])>>2;
- adv = Power_ADVGetCalVal_106(adv);
- adv = adv*11/100000;
- return adv;
-}
-
- /*
-@brief 采样总线输出电压
-*/
-uint32_t Power_GetBousV()
-{
- uint32_t abus_v,bbus_v;
- uint16_t adv_buf[10];
- Power_CurCalibration();
- GetADC1_Value(AD_OUTA_CH,adv_buf,10) ;
- Bubble_Sort_u16(adv_buf,10);
- abus_v = (adv_buf[4]+adv_buf[5]+adv_buf[6]+adv_buf[7])>>2;
-
- GetADC1_Value(AD_OUTB_CH,adv_buf,10) ;
- Bubble_Sort_u16(adv_buf,10);
- bbus_v = (adv_buf[4]+adv_buf[5]+adv_buf[6]+adv_buf[7])>>2;
-
- if(bbus_v > abus_v)
- {
- abus_v = bbus_v;
- }
-
- abus_v = Power_ADVGetCalVal_106(abus_v);
- abus_v = abus_v*11/100000;
- return abus_v;
-}
-
-/*
-@brief 采样中电平电压
-*/
-uint32_t Power_GetMPowerV()
-{
- int32_t adv;
- uint16_t adv_buf[10];
- GetADC1_Value(V_LA_M_CH,adv_buf,10) ;
- Bubble_Sort_u16(adv_buf,10);
- adv = (adv_buf[4]+adv_buf[5]+adv_buf[6]+adv_buf[7])>>2;
- adv = Power_ADVGetCalVal_106(adv);
- adv = adv*11/100000;
- return adv;
-}
-
-/*
-typedef enum{
- R510_0uA_32uA_UC = (uint8_t)0,//x201
- R510_0uA_580uA_MC = (uint8_t)1,//x11
- R100_0uA_160uA_UC = (uint8_t)2,//x201
- R100_0p2mA_3mA_MC = (uint8_t)3,//x11
- R10_0p1mA_1p6mA_UC = (uint8_t)4,//x201
- R10_2mA_30mA_MC = (uint8_t)5,//x11
- Current_Max = (uint8_t)6,
- Current_SampleR_OFF = (uint8_t)9,
-} CurrentSample_Range_eu;
-*/
-/*
-@brief 通过采样adc,换算电流
-@param adv adc 采样值
-@param rang 采样电阻
-@rtv uint32_t 电流值 0.1uA
-*/
-uint32_t Power_ConvCur(uint16_t adv,CurrentSample_Range_eu range)
-{
- uint32_t ul_R,ul_Mut;
- uint32_t ul_adv = Power_ADVGetCalVal_106(adv);
- switch(range)
- {
- case R510_0uA_32uA_UC: ul_R = 510; ul_Mut = 201 ; break;
- case R510_0uA_580uA_MC: ul_R = 510; ul_Mut = 11; break;
- case R100_0uA_160uA_UC: ul_R = 100; ul_Mut = 201; break;
- case R100_0p2mA_3mA_MC: ul_R = 100; ul_Mut = 11; break;
- case R10_0p1mA_1p6mA_UC: ul_R = 10; ul_Mut = 201; break;
- case R10_2mA_30mA_MC: ul_R = 10; ul_Mut = 11; break;
- case Current_Max: ul_R = 10; ul_Mut = 1; break;
- case Current_SampleR_OFF: ul_R = 510; ul_Mut = 1;break;
- default: ul_R = 510; ul_Mut = 1;break;
- }
- ul_adv = (ul_adv*100 / ul_R /ul_Mut+4)/10;
- return ul_adv;
-}
-//根据电流大小的范围,设置采样电阻
-CurrentSample_Range_eu Power_SetSampleCurrentRange(CurrentSample_Range_eu range)
-{
-
- switch(range)
- {
- case R510_0uA_32uA_UC: R510_SW_ON; R100_SW_OFF; R10_SW_OFF; break;
- case R510_0uA_580uA_MC: R510_SW_ON; R100_SW_OFF; R10_SW_OFF; break;
- case R100_0uA_160uA_UC: R100_SW_ON; R510_SW_OFF; R10_SW_OFF; break;
- case R100_0p2mA_3mA_MC: R100_SW_ON; R510_SW_OFF; R10_SW_OFF; break;
- case R10_0p1mA_1p6mA_UC: R10_SW_ON; R510_SW_OFF; R100_SW_OFF; break;
- case R10_2mA_30mA_MC: R10_SW_ON; R510_SW_OFF; R100_SW_OFF; break;
- case Current_Max: R510_SW_ON; R100_SW_ON; R10_SW_ON;break;
- case Current_SampleR_OFF: R510_SW_OFF;R100_SW_OFF; R10_SW_OFF;break;
- default: range = Current_Max; R510_SW_ON; R100_SW_ON; R10_SW_ON;break;
- }
- latest_range = range;
- return latest_range;
-}
-
-/*
-@brief 设置电阻采样通道和AD采样配置
-*/
-CurrentSample_Range_eu Power_SetSampleRange_Seep(CurrentSample_Range_eu range , uint32_t speed)
-{
- switch(range)
- {
- case R510_0uA_32uA_UC: ADC_CurChnnelSet(AN_UA_CH,speed); break;
- case R510_0uA_580uA_MC: ADC_CurChnnelSet(AN_MAL_CH,speed); break;
- case R100_0uA_160uA_UC: ADC_CurChnnelSet(AN_UA_CH,speed); break;
- case R100_0p2mA_3mA_MC: ADC_CurChnnelSet(AN_MAL_CH,speed); break;
- case R10_0p1mA_1p6mA_UC: ADC_CurChnnelSet(AN_UA_CH,speed); break;
- case R10_2mA_30mA_MC: ADC_CurChnnelSet(AN_MAL_CH,speed); break;
- case Current_Max: ADC_CurChnnelSet(AN_MAL_CH,speed); break;
- case Current_SampleR_OFF: ADC_CurChnnelSet(AN_MAL_CH,speed);break;
- default: ADC_CurChnnelSet(AN_MAL_CH,speed);break;
- }
- return Power_SetSampleCurrentRange(range);
-}
-
-
-//获取总线电流
-uint32_t Power_GetCurrent(void)
-{
- uint32_t adv;
- uint32_t count;
- CurrentSample_Range_eu range = latest_range;//档位保存
- CurrentSample_Range_eu set_range;
- uint32_t adv_base = Power_GetBaseVAD();
- if(adv_base < 500)
- return 0;
- set_range = Power_SetSampleCurrentRange(R10_2mA_30mA_MC);
- StartADC2Channel(AN_MAL_CH,ADC_SPEED_SLOW);
- delay_us(300);
- GetADC_Fast(ADC_CURR_DE);
- adv = 0;
- for(count = 0; count < 4; count++)
- {
- adv += GetADC_Fast(ADC_CURR_DE);
- }
- adv >>= 2;
- if(adv > 250){
- adv = Power_ConvCur(adv,set_range);//0.1uA
- adv = (adv+4)/10;
- Power_SetSampleCurrentRange(range);
- return adv;
- }
- set_range = Power_SetSampleCurrentRange(R100_0p2mA_3mA_MC);
- StartADC2Channel(AN_MAL_CH,ADC_SPEED_SLOW);
- delay_us(300);
- GetADC_Fast(ADC_CURR_DE);
- adv = 0;
- for(count = 0; count < 4; count++)
- {
- adv += GetADC_Fast(ADC_CURR_DE);
- }
- adv >>= 2;
- if(adv > 250){
- adv = Power_ConvCur(adv,set_range);//0.1uA
- adv = (adv+4)/10;
- Power_SetSampleCurrentRange(range);
- return adv;
- }
-
- set_range = Power_SetSampleCurrentRange(R10_0p1mA_1p6mA_UC);
- StartADC2Channel(AN_UA_CH,ADC_SPEED_SLOW);
- delay_ms(2);
- GetADC_Fast(ADC_CURR_DE);
- adv = 0;
- for(count = 0; count < 4; count++)
- {
- adv += GetADC_Fast(ADC_CURR_DE);
- }
- adv >>= 2;
- if(adv > 250){
- adv = Power_ConvCur(adv,set_range);//0.1uA
- adv = (adv+4)/10;
- Power_SetSampleCurrentRange(range);
- return adv;
- }
- set_range = Power_SetSampleCurrentRange(R100_0uA_160uA_UC);
- StartADC2Channel(AN_UA_CH,ADC_SPEED_SLOW);
- delay_ms(3);
- GetADC_Fast(ADC_CURR_DE);
- adv = 0;
- for(count = 0; count < 8; count++)
- {
- adv += GetADC_Fast(ADC_CURR_DE);
- }
- adv >>= 3;
- adv = Power_ConvCur(adv,set_range);//0.1uA
- adv = (adv+4)/10;
- Power_SetSampleCurrentRange(range);
- return adv;
-}
-
-/*
-@brief 电源调压准备,计数频率和电压的线性关系
-@rtv 返回值:0 成功 其他失败
-*/
-
-uint8_t PowerCalPrapare(void)
-{
- //YM硬件直接由公式计算
- return 0;
-}
-//防止突然上电,导致电源崩溃
-static void PowerUpFilter(uint16_t tag_dac)
-{
- uint16_t us_lastdac_h = DAC_GetDataOutputValue(DAC_Channel_1);
- if(us_lastdac_h > (tag_dac + 200))
- {
- while(us_lastdac_h > tag_dac)
- {
- if((tag_dac + 100) < us_lastdac_h)
- {
- us_lastdac_h -= 50;
- C_H_DAC_Set(us_lastdac_h);
- }else{
- us_lastdac_h = tag_dac;
- C_H_DAC_Set(us_lastdac_h);
- }
- delay_ms(10);
- }
- }
-}
-
-//电压调节的关系为线性函数
-void PowerCalibration(PowerInfo_st* info_st)
-{
-
- float vlp,vlm,v_adc_h,v_adc_m;
- uint16_t us_basedac_h,us_basedac_m;
- uint16_t us_lastdac_h,us_lastdac_m;
- uint16_t us_powderv;
- uint16_t us_timeout ;
- uint32_t diff=0;
- uint16_t ok_flg = 0;
- uint8_t uc_down_up_flag = 0;
- if(info_st->V_LAH < info_st->V_LAM )
- {
- info_st->V_LAH_DAC = 0;
- info_st->V_LAM_DAC = 0;
- return ;
- }
- PAout(LAVC_M_Pin_Nu)=0;PBout(OUTAH_Pin_Nu)=0;
- PBout(OUTBL_Pin_Nu)=0;PBout(OUTAL_Pin_Nu)=0;
- PCout(POWER_ON_Pin_Nu) = 1;
- vlp = info_st->V_LAH;
- vlp /= 10;
- //(VLP-1.229V)/178K + (VDAC-1.229V)/20K = 0.1229mA
- v_adc_h =( 0.1229- (vlp-1.229)/178)*20+1.229;
- us_timeout = 80;
- info_st->V_LAH_DAC = 0;
- us_basedac_h = (uint16_t)( v_adc_h/3.3 * 4096);
- PowerUpFilter(us_basedac_h);
- us_lastdac_h = 0;
- //us_basedac_h = 250;
- ok_flg = 0;
- uc_down_up_flag = 0;
- while(us_timeout > 0)
- {
- us_timeout--;
- C_H_DAC_Set(us_basedac_h);
- us_lastdac_h = us_basedac_h;
- switch(uc_down_up_flag)
- {
- case 0:delay_os_ms(100);break;//首次调压
- case 1:delay_os_ms(50);break;//降压
- case 2:delay_os_ms(10);break;//升压
- }
- us_powderv = Power_GetHPowerV();
- diff = us_powderv > info_st->V_LAH?us_powderv-info_st->V_LAH:info_st->V_LAH-us_powderv;
- if(diff < 2)
- {
- ok_flg++;
- if(ok_flg > 2)
- {
- info_st->V_LAH_DAC = us_basedac_h;
- break;
- }else{
- continue;
- }
-
- }
- diff = diff *2;
- ok_flg = 0;
- if( us_powderv > info_st->V_LAH)
- {
- us_basedac_h += diff;
- uc_down_up_flag = 1;
- }else{
- us_basedac_h -= diff;
- uc_down_up_flag = 2;
- }
-
-
- if(us_basedac_h < 20)
- us_basedac_h = 20;
- if(us_basedac_h > 4050)
- us_basedac_h = 4050;
-
- }
- if(info_st->V_LAH_DAC == 0)
- return;
-
- //(VM-2.5V)/20k+(VDAC-2.5V)/4.7K = 0.25mA
- us_timeout = 100;
- info_st->V_LAM_DAC = 0;
- vlm = info_st->V_LAM ;
- vlm /= 10;
- v_adc_m =( 0.25- (vlm-2.5)/20)*4.7+2.5;
- us_basedac_m = (uint16_t)(v_adc_m / 3.3 * 4096);
- //us_lastdac_m = 250;
- ok_flg = 0;
- uc_down_up_flag = 0;
- while( us_timeout > 0)
- {
- us_timeout--;
- C_M_DAC_Set(us_basedac_m);
- us_lastdac_m = us_basedac_m;
- switch(uc_down_up_flag)
- {
- case 0:delay_os_ms(50);break;//首次调压
- case 1:delay_os_ms(40);break;//降压
- case 2:delay_os_ms(30);break;//升压
- default:delay_os_ms(50);break;
- }
- us_powderv = Power_GetMPowerV();
- diff = us_powderv > info_st->V_LAM?us_powderv-info_st->V_LAM:info_st->V_LAM-us_powderv;
- if(diff < 2)
- {
- ok_flg++;
- if(ok_flg > 2)
- {
- info_st->V_LAM_DAC = us_basedac_m;
- break;
- }
- else{
- continue;
- }
- }
- ok_flg = 0;
- diff = diff *10;
- if( us_powderv > info_st->V_LAM)
- {
- us_basedac_m += diff;
- uc_down_up_flag = 1;
- }else{
- uc_down_up_flag = 2;
- us_basedac_m -= diff;
- }
- if(us_basedac_m < 100)
- us_basedac_m = 100;
- if(us_basedac_m > 4050)
- us_basedac_m = 4050;
- }
-
-}
-//设置总线电压
-void PowerSetVoltage(PowerInfo_st* info_st)
-{
- memcpy(&def_power_st,info_st,sizeof(PowerInfo_st));
- PowerUpFilter(info_st->V_LAH_DAC);
- C_H_DAC_Set(info_st->V_LAH_DAC);
- C_M_DAC_Set(info_st->V_LAM_DAC);
- POWER_ON;
-
-}
-//获取当前电压配置值
-void PowerGetSet(PowerInfo_st* info_st)
-{
- uint16_t h_dac = DAC_GetDataOutputValue(DAC_Channel_1);
- uint16_t m_dac = DAC_GetDataOutputValue(DAC_Channel_2);
- info_st->V_LAH = 0;
- info_st->V_LAH_DAC = h_dac;
- if(h_dac == def_power_st.V_LAH_DAC)
- {
- info_st->V_LAH = def_power_st.V_LAH;
- }
- info_st->V_LAM = 0;
- info_st->V_LAM_DAC = h_dac;
- if(m_dac == def_power_st.V_LAM_DAC)
- {
- info_st->V_LAM_DAC = m_dac;
- }
-}
-/*
-@brief 设置总线电压
-@param h_v/10 设置高电平电压
-@param m_v/10 设置中电平电压
-@rtv 0 执行成功 1 执行失败
-*/
-
-uint8_t PowerCalibration_set(uint16_t h_v,uint16_t m_v)
-{
- uint32_t ul_index = 0;
- PowerInfo_st powerinfo_st;
- rt_memset(&powerinfo_st,0,sizeof(PowerInfo_st));
- while(ul_index < POWER_SET_COUNT)
- {
- //if( powerinfo_arrayst[ul_index].V_LAH == h_v && powerinfo_arrayst[ul_index].V_LAM == m_v)
- if( powerinfo_arrayst[ul_index].V_LAH == h_v)
- {
- break;
- }
- ul_index++;
- }
- //在现有电压列表中能够查询到校准后的电压
- if(ul_index < POWER_SET_COUNT)
- {
- memcpy(&powerinfo_st,&powerinfo_arrayst[ul_index],sizeof(PowerInfo_st));
- PowerSetVoltage(&powerinfo_st);
- return 0;
- }
-
- powerinfo_st.V_LAH = h_v;
- powerinfo_st.V_LAM = m_v;
- PowerCalibration(&powerinfo_st);
- if(powerinfo_st.V_LAH_DAC == 0 || powerinfo_st.V_LAM_DAC == 0)
- {
- LED1_Out = 1;
- return 1;
- }
- //校准完成后,设置总线电压
- PowerSetVoltage(&powerinfo_st);
- //查找为使用的配置缓存,将新设置的电压保存
- ul_index = 0;
- while(ul_index < POWER_SET_COUNT)
- {
- if( powerinfo_arrayst[ul_index].V_LAH_DAC == 0 || powerinfo_arrayst[ul_index].V_LAM_DAC == 0)
- {
- memcpy(&powerinfo_arrayst[ul_index],&powerinfo_st,sizeof(PowerInfo_st));
- break;
- }
- ul_index++;
- }
-
- return 0;
-}
-
diff --git a/source/elec_det/hardware/power.h b/source/elec_det/hardware/power.h
deleted file mode 100644
index 23a3948..0000000
--- a/source/elec_det/hardware/power.h
+++ /dev/null
@@ -1,115 +0,0 @@
-#ifndef __POWER_H__
-#define __POWER_H__
-#include "base/define.h"
-#include "dac_cfg.h"
-#include "adc_cfg.h"
-#include "gpio_cfg.h"
-
-#define R10_ON_Out PBout(R10_ON_Pin_Nu)
-#define R10_SW_ON R10_ON_Out=1
-#define R10_SW_OFF R10_ON_Out=0
-#define R510_ON_Out PBout(R510_ON_Pin_Nu)
-#define R510_SW_ON R510_ON_Out=1
-#define R510_SW_OFF R510_ON_Out=0
-#define R100_ON_Out PCout(R100_ON_Pin_Nu)
-#define R100_SW_ON R100_ON_Out=1
-#define R100_SW_OFF R100_ON_Out=0
-
-
-
-#define POWER_DEF_V 60
-
-
-typedef enum{
-R510_0uA_32uA_UC = (uint8_t)0,//x201
- R510_0uA_580uA_MC = (uint8_t)1,//x11
- R100_0uA_160uA_UC = (uint8_t)2,//x201
- R100_0p2mA_3mA_MC = (uint8_t)3,//x11
- R10_0p1mA_1p6mA_UC = (uint8_t)4,//x201
- R10_2mA_30mA_MC = (uint8_t)5,//x11
- Current_Max = (uint8_t)6,
- Current_SampleR_OFF = (uint8_t)9,
-} CurrentSample_Range_eu;
-
-typedef struct {
-uint16_t V_LAH;
-uint16_t V_LAM;
-uint16_t V_LAH_DAC;
-uint16_t V_LAM_DAC;
-}PowerInfo_st;
-
-
-
-
- /*
-@brief 采样总线输出电压
-*/
-uint32_t Power_GetBousV(void);
-/*
-@brief 采样高电平电压
-*/
-uint32_t Power_GetHPowerV(void);
-/*
-@brief 采样中电平电压
-*/
-uint32_t Power_GetMPowerV(void);
-/*
-@brief 获取内部基准1.2V电压对应的AD
-*/
-uint32_t Power_GetBaseVAD(void);
-//获取总线电流
-uint32_t Power_GetCurrent(void);
-//根据电流大小的范围,设置采样电阻
-CurrentSample_Range_eu Power_SetSampleCurrentRange(CurrentSample_Range_eu range) ;
-#define CurrentSampleR_Def Power_SetSampleCurrentRange(Current_Max);
-/*
-@brief 设置电阻采样通道和AD采样配置
-*/
-CurrentSample_Range_eu Power_SetSampleRange_Seep(CurrentSample_Range_eu range , uint32_t speed);
-//检测方案,上电充能采样电阻
-#define Checker_PowerOn_Sample_R R100_0p2mA_3mA_MC
-#define Checker_OnLine_Sample_R R100_0uA_160uA_UC
-#define Checker_MonitorBuf_Sample_R R100_0p2mA_3mA_MC
-
-#define JQChecker_ChgEnger_Sample_R R100_0p2mA_3mA_MC
-#define XTChecker_ChgEnger_Sample_R R10_2mA_30mA_MC
-//模块通信采样电阻
-#define XTDriver_Sample_R R10_2mA_30mA_MC
-#define JQDriver_Sample_R R10_2mA_30mA_MC
-
-
-//电压调节的关系为线性函数
-void PowerCalibration(PowerInfo_st* info_st);
-//设置总线电压
-void PowerSetVoltage(PowerInfo_st* info_st);
-//获取当前电压配置值
-void PowerGetSet(PowerInfo_st* info_st);
-/*
-@brief 设置总线电压
-@param h_v/10 设置高电平电压
-@param m_v/10 设置中电平电压
-@rtv 0 执行成功 1 执行失败
-*/
-
-uint8_t PowerCalibration_set(uint16_t h_v,uint16_t m_v);
-/*
-@brief 将获取的ADC值转换为电压值
-@param1 ul_adv 采样AD原始值
-@rtv 返回AD采集到的电压值 扩大1000000倍
-*/
-uint32_t Power_ADVGetCalVal_106(uint16_t ul_adv);
-
-/*
-@brief 电源调压准备,计数频率和电压的线性关系
-@rtv 返回值:0 成功 其他失败
-*/
-
-uint8_t PowerCalPrapare(void);
-/*
-@brief 通过采样adc,换算电流
-@param adv adc 采样值
-@param rang 采样电阻
-@rtv uint32_t 电流值 0.1uA
-*/
-uint32_t Power_ConvCur(uint16_t adv,CurrentSample_Range_eu range);
-#endif
diff --git a/source/elec_det/hardware/timer_cfg.c b/source/elec_det/hardware/timer_cfg.c
deleted file mode 100644
index 07f271f..0000000
--- a/source/elec_det/hardware/timer_cfg.c
+++ /dev/null
@@ -1,365 +0,0 @@
-#include "base/define.h"
-#include "timer_cfg.h"
-#include "base/delay.h"
-Timerupdatefunc p_timer4update_func = NULL;
-
-
-/*
-@brief 发送时钟校准波形
-@param pre_us 发送的周期
-@param count 发送周期的个数
-*/
-static volatile uint16_t amend_plus_count = 0;
-
-TimerTriger p_timertriger = NULL;
-void FireBus_ClkAmend(uint16_t pre_us,uint16_t trigger_us,uint16_t count,void *p_fun)
-{
-
- TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;//定时器初始化结构
- TIM_OCInitTypeDef TIM_OCInitStructure;//通道输出初始化结构
- NVIC_InitTypeDef NVIC_InitStructure;
-
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE );
- p_timertriger = (TimerTriger)p_fun;
- amend_plus_count = count;
- NVIC_DisableIRQ(TIM3_IRQn);
- //TIM初始化
- TIM_TimeBaseStructure.TIM_Period = pre_us-1; //周期0~FFFF
- TIM_TimeBaseStructure.TIM_Prescaler = 71 ; //时钟分频
- TIM_TimeBaseStructure.TIM_ClockDivision = 0; //时钟分 1us
- TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//模式
- TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;
- TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //基本初始化
-
- //TIM3通道初始化
- TIM_OCStructInit(& TIM_OCInitStructure); //默认参数
- TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Timing; //工作状态
- TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //设定为输出,需要PWM输出才需要这行代码
- TIM_OCInitStructure.TIM_Pulse = pre_us-trigger_us - 1; //占空长度
- TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; //高电平
-
- TIM_OC1Init(TIM3, &TIM_OCInitStructure);
- TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);
- TIM_ClearFlag(TIM3,TIM_IT_CC1);
- TIM_ITConfig(TIM3, TIM_IT_CC1 , ENABLE);//使能CC1中断
- TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);
- TIM_ARRPreloadConfig(TIM3, ENABLE);
- TIM_SetCompare3(TIM3,0);
- TIM_Cmd(TIM3, ENABLE); //开启定时器
-
- NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 9;
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //TIM2全局中断使能
- NVIC_ClearPendingIRQ(TIM3_IRQn);
- NVIC_Init(&NVIC_InitStructure);
-
-}
-
-/*
-使用轮询的方式检测校准结束
-*/
-void FireBus_ClkAmendCycle(void)
-{
- //使用查询的方式,关闭中断
- NVIC_DisableIRQ(TIM3_IRQn);
- TIM_ITConfig(TIM3, TIM_IT_CC1 , DISABLE);//使能CC1中断
- TIM_ITConfig(TIM3,TIM_IT_Update,DISABLE);
- if(p_timertriger == NULL)
- {
- return;
- }
- __disable_irq();
- while(1)
- {
- uint8_t flag = 0;
- if( TIM_GetITStatus(TIM3,TIM_IT_Update))
- {
- if(amend_plus_count > 0)
- amend_plus_count--;
- flag = 1;
- p_timertriger(flag);
- TIM3->SR = 0;
- }else if(TIM_GetITStatus(TIM3,TIM_IT_CC1))
- {
- flag = 2;
- p_timertriger(flag);
- TIM3->SR = 0;
- }
- if(amend_plus_count == 0)
- {
- flag = 3;
- TIM_DeInit(TIM3);
- p_timertriger(flag);
- p_timertriger = NULL;
- break;
- }
- }
- __enable_irq();
-}
-
-
-void TIM3_IRQHandler()
-{
- uint8_t flag = 0;
- rt_interrupt_enter();
- if( TIM_GetITStatus(TIM3,TIM_IT_Update))
- {
- if(amend_plus_count > 0)
- amend_plus_count--;
- flag = 1;
- }else if(TIM_GetITStatus(TIM3,TIM_IT_CC1))
- {
- flag = 2;
- }
- //timer_interrupt_flag_clear(TIMER2,TIMER_FLAG_UP|TIMER_FLAG_CH2|TIMER_FLAG_CH2O);
- TIM3->SR = 0;
- if(p_timertriger != NULL)
- {
- p_timertriger(flag);
- }
- if(amend_plus_count == 0)
- {
- flag = 3;
- NVIC_DisableIRQ(TIM3_IRQn);
- TIM_DeInit(TIM3);
- p_timertriger(flag);
- p_timertriger = NULL;
- }
- rt_interrupt_leave();
-}
-
-
-/*
-@brief 超时定时器,单位10ms
-@param ms 最大可设置6553。
-@param pfunc 超时回调函数,注意回调函数中不能做长延时任务
-*/
-void RunTimeOut_Timer(uint16_t ms,Timerupdatefunc pfunc )
-{
- NVIC_InitTypeDef NVIC_InitStructure;
- //定时器初始化数据结构定义
- TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE );
- p_timer4update_func = pfunc;
- ms = ms*2-1;
-
- NVIC_DisableIRQ(TIM1_UP_IRQn);
- //复位计数器
- TIM_DeInit(TIM1);
- TIM_TimeBaseStructure.TIM_Period = ms; //计数上限,100*100us = 10000us = 10ms
- TIM_TimeBaseStructure.TIM_Prescaler = 36000-1;//2K; //预分频72MHz主频,分频后时钟周期0.5ms
- TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //不分频
- TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上计数
- TIM_TimeBaseStructure.TIM_RepetitionCounter=0;
- //初始化
- TIM_TimeBaseInit(TIM1,&TIM_TimeBaseStructure);
- //清中断
- TIM_ClearFlag(TIM1, TIM_FLAG_Update);
- TIM_ITConfig(TIM1,TIM_IT_Update,ENABLE);
-
- //定时器清零
- TIM_SetCounter(TIM1,0);
-
- TIM_ARRPreloadConfig(TIM1, DISABLE);
-
- //定时器启动
- TIM_Cmd(TIM1,ENABLE);
-
- NVIC_InitStructure.NVIC_IRQChannel = TIM1_UP_IRQn;
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 10;
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //TIM2全局中断使能
- NVIC_ClearPendingIRQ(TIM1_UP_IRQn);
- NVIC_Init(&NVIC_InitStructure);
-}
-
-
-//停止超时定时器计数
-void RunTimeoutStop(void)
-{
- TIM_DeInit(TIM1);
-}
-//获取超时定时器计数值
-uint16_t GetRunTimeOutCount(void)
-{
- return TIM1->CNT;
-}
-
-void TIM1_UP_IRQHandler()
-{
-// uint8_t flag = 0;
- rt_interrupt_enter();
- if(TIM_GetITStatus(TIM1,TIM_IT_Update))
- {
- if(p_timer4update_func != NULL)
- {
- TIM_Cmd(TIM1,DISABLE);
- p_timer4update_func();
-
- }
- }
- TIM1->SR = 0x00;
- rt_interrupt_leave();
-
-}
-/*
-延时定时器初始化,单次向上计数
-*/
-void DelayTimer_Init(void)
-{
- //定时器初始化数据结构定义
- TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE );
- TIM_DeInit(TIM2);
-
- TIM_TimeBaseStructure.TIM_Period = 0xFFFF; //计数上限,100*100us = 10000us = 10ms
- TIM_TimeBaseStructure.TIM_Prescaler = 7200-1; //预分频48,48MHz主频,分频后时钟周期1us
- TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //不分频
- TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上计数
- TIM_TimeBaseStructure.TIM_RepetitionCounter=0;
-
- TIM_ARRPreloadConfig(TIM2, DISABLE);
- //初始化
- TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);
- StartDelayTime();
-}
-/*
-延时定时器初始化,单次向上计数
-*/
-void TimerCount_Init(void)
-{
- //定时器初始化数据结构定义
- TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE );
- TIM_DeInit(TIM2);
-
- TIM_TimeBaseStructure.TIM_Period = 0xFFFF; //计数上限,100*100us = 10000us = 10ms
- TIM_TimeBaseStructure.TIM_Prescaler = 7200-1; //预分频48,48MHz主频,分频后时钟周期1us
- TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //不分频
- TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上计数
- TIM_TimeBaseStructure.TIM_RepetitionCounter=0;
-
- TIM_ARRPreloadConfig(TIM2, DISABLE);
- //初始化
- TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);
-}
-/*
-@brief 重启延时定时器
-*/
-void StartDelayTime()
-{
- TIM_Cmd(TIM2,DISABLE);
- TIM2->CNT = 0;
- TIM2->PSC = (uint32_t)7200-1;//10K 0.1ms
- TIM2->EGR |= TIM_EventSource_Update;
- TIM2->SR = 0;
- TIM_Cmd(TIM2,ENABLE);
-
-}
-/*
-@brief 定时器是否运行到大于当前值
-@param 当前比较值
-*/
-uint8_t isDelayEnd(uint16_t wait_time)
-{
- if((TIM2->CNT > wait_time) && (TIM2->SR > 0) )
- return 0;
- return 1;
-}
-/*
-@breif 等待定时器计数值大于设定值
-@param 等待定时器的结束值,单位0.1ms
-*/
-void WaitDelayEnd(uint16_t wait_time)
-{
- while((TIM2->CNT < wait_time) && (TIM2->SR < 1))
- {
-
- }
-}
-/*
-@brief 获取当前定时器计数值,单位1us。并重启计数
-@rtv 返回上次的计数值
-*/
-uint16_t Get1usCount(void)
-{
- uint16_t us_value ;
- if(TIM2->SR > 0)
- {
- us_value = 65535;
- }else{
- us_value = TIM2->CNT;
- }
-
- TIM_Cmd(TIM2,DISABLE);
- TIM2->CNT = 0;
- TIM2->PSC = (uint32_t)71;//1M 1us
- TIM2->EGR |= TIM_EventSource_Update;
- TIM2->SR = 0;
- TIM_Cmd(TIM2,ENABLE);
- return us_value;
-}
-
-/*
-@brief 获取当前定时器计数值,单位10us。并重启计数
-@rtv 返回上次的计数值
-*/
-uint16_t Get10usCount(void)
-{
-
- uint16_t us_value ;
- if(TIM2->SR > 0)
- {
- us_value = 65535;
- }else{
- us_value = TIM2->CNT;
- }
-
- TIM_Cmd(TIM2,DISABLE);
- TIM2->CNT = 0;
- TIM2->PSC = (uint32_t)720-1;//100K 10us
- TIM2->EGR |= TIM_EventSource_Update;
- TIM2->SR = 0;
- TIM_Cmd(TIM2,ENABLE);
- return us_value;
-
-
-
-
-}
-
-/*
-@brief 获取当前定时器计数值,单位0.1ms。并重启计数
-@rtv 返回上次的计数值
-*/
-uint16_t Get100usCount(void)
-{
-
- uint16_t us_value ;
- if(TIM2->SR > 0)
- {
- us_value = 65535;
- }else{
- us_value = TIM2->CNT;
- }
-
- TIM_Cmd(TIM2,DISABLE);
- TIM2->CNT = 0;
- TIM2->PSC = (uint32_t)7200-1;//10K 100us
- TIM2->EGR |= TIM_EventSource_Update;
- TIM2->SR = 0;
- TIM_Cmd(TIM2,ENABLE);
- return us_value;
-
-
-}
-
-/*
-@brief 直接获取定时器的值
-*/
-uint16_t GetCountTimerCnt()
-{
- return TIM2->CNT;
-}
-
diff --git a/source/elec_det/hardware/timer_cfg.h b/source/elec_det/hardware/timer_cfg.h
deleted file mode 100644
index 88858fc..0000000
--- a/source/elec_det/hardware/timer_cfg.h
+++ /dev/null
@@ -1,68 +0,0 @@
-#ifndef TIMER_CFG_H_
-#include "base/define.h"
-#include "stm32f10x_tim.h"
-typedef void (*Timerupdatefunc)(void );
-typedef void (*TimerTriger)(uint8_t );
-//停止超时定时器计数
-void RunTimeoutStop(void);
-/*
-@brief 发送时钟校准波形
-@param pre_us 发送的周期
-@param count 发送周期的个数
-*/
-void FireBus_ClkAmend(uint16_t pre_us,uint16_t trigger_us,uint16_t count,void *p_fun);
-
-/*
-@brief 超时定时器,单位0.1ms
-@param ms 最大可设置6553。
-@param pfunc 超时回调函数,注意回调函数中不能做长延时任务
-*/
-void RunTimeOut_Timer(uint16_t ms,Timerupdatefunc pfunc );
-//获取超时定时器计数值
-uint16_t GetRunTimeOutCount(void);
-/*
-延时定时器初始化,单次向上计数
-*/
-void DelayTimer_Init(void);
-/*
-延时定时器初始化,单次向上计数
-*/
-void TimerCount_Init(void);
-
-/*
-@breif 等待定时器计数值大于设定值
-@param 等待定时器的结束值,单位0.1ms
-*/
-void WaitDelayEnd(uint16_t wait_time);
-
-/*
-@brief 重启延时定时器
-*/
-void StartDelayTime(void);
-
-#define GET_COUNTTIM_VAL() (TIM2->CNT)
-
-/*
-@brief 获取当前定时器计数值,单位1us。并重启计数
-@rtv 返回上次的计数值
-*/
-uint16_t Get1usCount(void);
-/*
-@brief 获取当前定时器计数值,单位10us。并重启计数
-@rtv 返回上次的计数值
-*/
-uint16_t Get10usCount(void);
-/*
-@brief 获取当前定时器计数值,单位0.1ms。并重启计数
-@rtv 返回上次的计数值
-*/
-uint16_t Get100usCount(void);
-/*
-@brief 直接获取定时器的值
-*/
-uint16_t GetCountTimerCnt(void);
-/*
-使用轮询的方式检测校准结束
-*/
-void FireBus_ClkAmendCycle(void);
-#endif
diff --git a/source/elec_det/interface/BaseChecker.c b/source/elec_det/interface/BaseChecker.c
deleted file mode 100644
index 297a66a..0000000
--- a/source/elec_det/interface/BaseChecker.c
+++ /dev/null
@@ -1,216 +0,0 @@
-#include "Basechecker.h"
-#include "base/utility.h"
-#include "hardware/power.h"
-#include "base/delay.h"
-#include "hardware/gpio_cfg.h"
-Checker_RunCfg_st checker_runcfg;
-uint8_t Checker_FacBuf[CHECKER_FAC_BUF_LEN];
-volatile uint8_t ThreeBindResult_flag = 1;
-uint16_t Checker_First_Set_Voltage = 88;
-/*
-@brief 标记执行结果
-@param rtv 执行返回值 1表示失败 0 表示成功
-@param taskindex 任务项目ID号
-*/
-void Checker_MaskResult(uint8_t rtv,uint8_t taskindex)
-{
- uint8_t uc_index = taskindex >> 3;
- uint8_t uc_bitindex = taskindex & 0x07;
- if(taskindex >= CHECKER_MAXRT_COUNT)
- {
- return;
- }
- checker_runcfg.excue_rtv = rtv;
- uc_bitindex = (0x01<> 3;
- uint8_t uc_bitindex = taskindex & 0x07;
- if(taskindex >= CHECKER_MAXRT_COUNT)
- {
- return;
- }
- uc_bitindex = (0x01< 0)
- {
- checker_runcfg.Test_Rtv[checker_runcfg.rtv_index++] = *pus_rtv;
- pus_rtv++;
- count--;
- }
-}
-
-/*
-brief 准备测试用电压
-@param 设置电压值,最多支持10个参数
-*/
-void Checker_PowerPrapare(void)
-{
- uint8_t uc_index = 0;
- uint8_t uc_rtv = 0;
- uint16_t us_h_v,us_m_v;
- if(checker_runcfg.power_prapare_exe > 0 || checker_runcfg.param_count == 0){
- Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
- return ;
- }
- Checker_First_Set_Voltage = checker_runcfg.params[0];
- Bubble_Sort_u16(checker_runcfg.params,checker_runcfg.param_count);
- POWER_OFF;
- while(uc_index < checker_runcfg.param_count)
- {
- us_h_v = checker_runcfg.params[uc_index];
- uc_index++;
- if(us_h_v < 55)
- {
- uc_rtv = 1;
- continue;
- }
- us_m_v = (us_h_v>>1) > 50 ? (us_h_v>>1):50;
- uc_rtv |= PowerCalibration_set(us_h_v,us_m_v);
-
- }
- PowerCalibration_set(POWER_DEF_V,POWER_DEF_V-10);
- Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
-}
-
-/*
-@brief 延时
-@pram1 延时时间 0.1S
-@param 使能总线电流监控
-@rtv1 波动AD值
-*/
-void Checker_WaitDelay(void)
-{
- uint32_t ul_delaytime = checker_runcfg.params[0];
- uint8_t us_monito_flag = checker_runcfg.params[1];
- uint16_t us_temp;
- if(us_monito_flag == 0)
- {
- while(ul_delaytime > 0)
- {
- delay_os_ms(100);
- ul_delaytime--;
- }
- }else{
-
- Power_SetSampleRange_Seep(Checker_MonitorBuf_Sample_R,ADC_SPEED_MIDLE);
- delay_ms(1);
- us_temp = AD_CurMonitor(ul_delaytime*1000);
- CurrentSampleR_Def;
- }
- Power_SetSampleCurrentRange(Current_Max);
- Checker_MaskResult(0,checker_runcfg.task_info.runindex);
- Checker_SetRtv(&us_temp,checker_runcfg.rtv_count);
-}
-
-/*
-@brief 电阻检测
-@param0 电阻检测模式 0 4线制 1 2线 1-4,2 2线 2-3 通
-@rtv0 电阻检测值
-*/
-void Checker_ResistorSample(void)
-{
- /*
- 1 通道1-4通,过桥丝
- 2 通道2-3通,过桥丝
- 3 通道1-3通,测阻抗
- 4 通道2-4通,测阻抗
- */
- uint16_t aus_sample[5];
- uint16_t us_resistor;
- uint8_t uc_index = 0;
- AD_SampleResistor(aus_sample);
- for(uc_index = 0; uc_index < 5; uc_index++)
- {
- aus_sample[uc_index] -= board_st.resistor_diff;
- }
- switch(checker_runcfg.params[0])
- {
- case 0: us_resistor = aus_sample[0];break;
- case 1: us_resistor = aus_sample[1];break;
- case 2: us_resistor = aus_sample[2];break;
- case 3: us_resistor = aus_sample[3];break;
- case 4: us_resistor = aus_sample[4];break;
- default : us_resistor = 0;break;
- }
- Checker_MaskResult(0,checker_runcfg.task_info.runindex);
- Checker_SetRtv(&us_resistor,checker_runcfg.rtv_count);
-}
-
-/*
-@brief 判断是否需要注码
-@rtv 0 不需要注码 1 注码
-*/
-uint8_t JQXT_Test_IsNeedBind(void)
-{
- uint8_t uc_index = 0;
-
- if(checker_runcfg.uid_len == 0 || checker_runcfg.pwd_len == 0)
- {
- return 0;
- }
- for(uc_index = 0; uc_index < checker_runcfg.uid_len ; uc_index++)
- {
- if(checker_runcfg.writeuid[uc_index] != 0)
- {
- break;
- }
- }
- if(uc_index != checker_runcfg.uid_len)
- {
- return 1;
- }
-
- for(uc_index = 0; uc_index < checker_runcfg.pwd_len ; uc_index++)
- {
- if(checker_runcfg.writepwd[uc_index] != 0)
- {
- break;
- }
- }
- if(uc_index != checker_runcfg.pwd_len)
- {
- return 1;
- }
- return 0;
-}
-/*
-检测执行函数是否正常
-*/
-uint8_t Checker_FunIsValid(CheckerTask* taskArray,uint16_t run_index)
-{
- uint16_t index = 0;
- while((*taskArray !=0) && (index < CHECKER_MAXID_COUNT))
- {
- index++;
- }
- if(run_index >= index)
- {
- return 1;
- }
- return 0;
-}
-
diff --git a/source/elec_det/interface/BaseChecker.h b/source/elec_det/interface/BaseChecker.h
deleted file mode 100644
index ca597d2..0000000
--- a/source/elec_det/interface/BaseChecker.h
+++ /dev/null
@@ -1,101 +0,0 @@
-#ifndef BASECHECKER_H_
-#define BASECHECKER_H_
-#include "stm32f10x.h"
-
-
-#define CHECKER_NET_ID 10
-#define CHECKER_DELAY_TIME 10
-#define CHECKER_MAXRT_COUNT 64
-#define CHECKER_MAXID_COUNT 100
-
-
-
-typedef void (*CheckerTask)(void );
-
-#pragma pack(1)
-typedef struct {
-uint8_t taskid; //任务ID
-uint8_t runindex;//任务序列
-uint8_t retry_time;//重试次数
-uint8_t error_jumpto;//失败后跳转
-uint8_t param_rtv_count;//参数个数和返回值个数
-uint16_t params[10];
-}CheckerTask_Info_st;
-
-
-typedef struct{
-CheckerTask_Info_st task_info;
-uint16_t params[10];//运行参数1
-uint16_t rtv_index;//返回值下标
-uint8_t rtv_count;//当前任务返回值个数
-uint8_t param_count;//参数个数
-uint8_t excue_rtv; //任务执行结果
-uint8_t power_prapare_exe;//电源准备任务执行
-uint16_t Test_Rtv[100];//保存返回参数
-uint8_t Task_Result[8];//保存运行状态
-uint8_t Task_Excute[8];//保存执行序列号
-uint16_t netid;//电子模块最新的网络ID
-uint8_t user_otp[4];//用户区OTP数据
-uint8_t writeuid[13];//注码uid
-uint8_t writepwd[8];//注码密码
-uint8_t uid_len;//密码长度 XT 7 JQ 8
-uint8_t pwd_len;//密码长度 XT 4 JQ 4
-uint8_t uid_pwd_bind_flag;
-uint8_t code_bind_check_flag;//三码绑定检测一起执行
-}Checker_RunCfg_st ;
-
-#pragma pack()
-
-extern Checker_RunCfg_st checker_runcfg;
-#define CHECKER_WRITE_BUF 48 //(CHECKER_FAC_BUF_LEN-2)
-#define CHECKER_FAC_BUF_LEN 50 //len+crc8+48bytes
-extern uint8_t Checker_FacBuf[CHECKER_FAC_BUF_LEN];
-extern volatile uint8_t ThreeBindResult_flag ;
-extern uint16_t Checker_First_Set_Voltage ;//方案设置内部第一个电压
-/*
-@brief 标记执行结果
-@param rtv 执行返回值 1表示失败 0 表示成功
-@param taskindex 任务项目ID号
-*/
-void Checker_MaskResult(uint8_t rtv,uint8_t taskindex);
-/*
-@brief 标记任务序列执行
-@param taskindex 任务序列号
-*/
-void Checker_Excueindex(uint8_t taskindex);
-
-/*
-@brief 保存测试结果值
-@param *pus_rtv 测量结果缓存
-@param count 缓存个数
-*/
-void Checker_SetRtv(uint16_t* pus_rtv, uint8_t count);
-
-/*
-brief 准备测试用电压
-@param 设置电压值,最多支持10个参数
-*/
-void Checker_PowerPrapare(void);
-/*
-@brief 延时
-@pram1 延时时间 0.1S
-@param 使能总线电流监控
-@rtv1 波动AD值
-*/
-void Checker_WaitDelay(void);
-/*
-@brief 电阻检测
-@param0 电阻检测模式 0 4线制 1 2线 1-4,2 2线 2-3 通
-@rtv0 电阻检测值
-*/
-void Checker_ResistorSample(void);
-/*
-@brief 判断是否需要注码
-@rtv 0 不需要注码 1 注码
-*/
-uint8_t JQXT_Test_IsNeedBind(void);
-/*
-检测执行函数是否正常
-*/
-uint8_t Checker_FunIsValid(CheckerTask* taskArray,uint16_t run_index);
-#endif
diff --git a/source/elec_det/interface/JQChecker.c b/source/elec_det/interface/JQChecker.c
deleted file mode 100644
index 6ec197f..0000000
--- a/source/elec_det/interface/JQChecker.c
+++ /dev/null
@@ -1,1099 +0,0 @@
-#include "driver/JQDriver.h"
-#include "base/delay.h"
-#include "hardware/adc_cfg.h"
-#include "base/utility.h"
-#include "hardware/power.h"
-#include "JQChecker.h"
-
-/*
-@brief 统计模块的上电充能,具有电压设置功能,采集档位 R10_0p1mA_1p6mA_UC
-@param0 总线电压
-@param1 超时时间 0.1ms
-@param2 充电结束时的AD值
-@rtv1 返回总线电流低于设置AD值的时间
-*/
-void JQ_Test_PowerOn(void)
-{
- uint8_t uc_rtv = 0;
- uint16_t us_rsult[2];
- uint16_t us_max;
- uint16_t us_shake;
- JQBUS_OFF;
- uc_rtv = PowerCalibration_set(checker_runcfg.params[0],checker_runcfg.params[0]-1);
-
- Power_SetSampleRange_Seep(Checker_PowerOn_Sample_R,ADC_SPEED_HIGH);
- //POWER_ON
- delay_os_ms(100);
- JQBUS_ON;
- delay_us(20);
- us_rsult[1] = AD_GetChgEnergy(checker_runcfg.params[1],checker_runcfg.params[2], &us_max,&us_shake);
- delay_os_ms(100);
- us_rsult[0] = Power_GetBousV();
- Checker_SetRtv(us_rsult,checker_runcfg.rtv_count);
- Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
-
-
-
-}
-/*
-@brief 设置总线电压
-@param1 总线电压
-@rtv1 总线电压
-*/
-void JQ_Test_SetBusV(void)
-{
- uint8_t uc_rtv = 0;
- uint16_t us_h_v,us_m_v;
- us_h_v = checker_runcfg.params[0];
- if(us_h_v < 55)
- {
- uc_rtv = 1;
-
- }else{
- us_m_v = 50;
- uc_rtv |= PowerCalibration_set(us_h_v,us_m_v);
- JQBUS_ON;
- delay_ms(100);
- us_h_v = Power_GetBousV();
- Checker_SetRtv(&us_h_v,checker_runcfg.rtv_count);
- }
- Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
-
-}
-/*
-@brief 测量总线基本电压
-@rtv1 返回总线电流 单位0.01uA
-*/
-void JQ_Test_BaseCur(void)
-{
- uint16_t ul_cur[2];
- JQBUS_W_1
- delay_ms(250);
- ul_cur[0] = ADC_GetBaseStableCur();
- JQBUS_W_0
- delay_ms(100);
- ul_cur[1] = ADC_GetBaseStableCur();
- JQBUS_W_1
- delay_ms(20);
- Checker_MaskResult(0,checker_runcfg.task_info.runindex);
- Checker_SetRtv(ul_cur,checker_runcfg.rtv_count);
-}
-/*
-@brief 扫描总线上的电子模块 1发
-@param0 使能或失能通信反码信息采集
-@param1 1 uid数据全0验证 其他不验证
-@rtv1 最大反馈电流
-@rtv2 最大反馈时间
-@rtv3 最小反馈电流
-@rtv4 最小反馈时间
-@rtv5 UID 2Bytes
-@rtv6 UID 2Bytes
-@rtv7 UID 2Bytes
-@rtv8 UID 2Bytes
-*/
-void JQ_Test_ScanUID(void)
-{
- uint16_t aus_temp[8];
- uint8_t uc_rtv = 0;
- uint8_t uc_ack;
- uint8_t uc_count = 0;
- uint32_t ul_temp;
- for(uc_count = 0; uc_count < 4; uc_count++)
- {
- aus_temp[uc_count] = 0x00;
- }
- for(uc_count = 4; uc_count < 8; uc_count++)
- {
- aus_temp[uc_count] = 0x55;
- }
- JQ_ScanUIDBegin();
- if(checker_runcfg.params[0] > 0)
- {
- JQ_FreeBack_Prapare(1);
- }
- uc_ack = JQ_ScanReadUID(CHECKER_NET_ID,(uint8_t*)&aus_temp[4]);
-// uc_rtv = JQ_ScanReadUID(checker_runcfg.jq_params[2],(uint8_t*)&aus_temp[4]);
-
- if(uc_ack < 1)
- {
- uc_rtv = 1;
- }
-
- ul_temp = Power_ConvCur(JQ_FreeBack_MaxCur,JQDriver_Sample_R);
- ul_temp = (ul_temp + 500)/1000;
-
- aus_temp[0] = ul_temp ;
- aus_temp[1] = (uint16_t)((((589u*1000)*JQ_FreeBack_MaxTime)/JQ_Read_AD_Sample_C+400)/1000) ;
- ul_temp = Power_ConvCur(JQ_FreeBack_MinCur,JQDriver_Sample_R);
- ul_temp = (ul_temp + 500)/1000;
- aus_temp[2] = ul_temp;
- aus_temp[3] = (uint16_t)((((589u*1000)*JQ_FreeBack_MinTime)/JQ_Read_AD_Sample_C+400)/1000) ;
- if(checker_runcfg.params[1] == 0)
- {
- for(uc_count = 4; uc_count < 8; uc_count++)
- {
- if(aus_temp[uc_count] != 0x00)
- {
- uc_rtv |= 0x01;
- }
- }
- }
- Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
- Checker_SetRtv(aus_temp,checker_runcfg.rtv_count);
-}
-/*
-@brief 读取芯片码
-@rtv 芯片代码2字节
-*/
-void JQ_Test_ReadChipID(void)
-{
- uint8_t uc_rtv = 0;
- uint16_t us_chipid;
- uint8_t uc_ack;
- uc_ack = JQ_ReadChipID(CHECKER_NET_ID,&us_chipid);
- if(uc_ack < 1)
- {
- uc_rtv = 1;
- }
- Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
- Checker_SetRtv(&us_chipid,checker_runcfg.rtv_count);
-}
-/*
-@brief 密码验证
-@param0 密码原码验证使能
-*/
-void JQ_Test_PWCheck(void)
-{
- uint8_t auc_pwd[4]={0,0,0,0};
- uint8_t uc_count = 0,uc_ack = 0,uc_rtv = 0;
- if(checker_runcfg.params[0] > 0)
- {
- uc_ack = JQ_ReadOTP(CHECKER_NET_ID,11,4,auc_pwd);
- if(uc_ack != 4)
- {
- uc_rtv = 1;
- }
- uc_ack = auc_pwd[3] ;
- auc_pwd[3] = auc_pwd[0];
- auc_pwd[0] = uc_ack;
- uc_ack = auc_pwd[2] ;
- auc_pwd[2] = auc_pwd[1];
- auc_pwd[1] = uc_ack;
- }
- JQ_VerifyPWD(auc_pwd);
- Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
-}
-
-/*
-@brief OTP全0检测
-@param0 UID区和密码区验证标志 1不验证 0 验证
-@param1 延时区和保留区验证 1不验证 0验证,错误标记区
-@param2 用户存储区
-*/
-
-void JQ_Test_OTPCheck(void)
-{
- uint8_t uc_optbuf[16];
- uint8_t uc_rtv = 0;
- uint8_t uc_ack;
- uint8_t uc_count = 0;
- //出厂校准
- uc_ack = JQ_ReadOTP(CHECKER_NET_ID,0,1,uc_optbuf);
- if(uc_ack !=1 || uc_optbuf[0] == 0xFF || uc_optbuf[0] == 0)
- {
- uc_rtv = 1;
- Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
- return ;
- }
- if(checker_runcfg.params[0] < 1)
- {
- uc_count = 0;
- while(uc_count < 16)
- {
- uc_optbuf[uc_count++] = 0x55;
- }
- uc_ack = JQ_ReadOTP(CHECKER_NET_ID,3,12,uc_optbuf);
- if(uc_ack != 12)
- {
- uc_rtv = 1;
- }
- uc_count = 0;
- while(uc_count < 12)
- {
- if(uc_optbuf[uc_count++] != 0)
- {
- uc_rtv = 1;
- }
- }
- }
- if(checker_runcfg.params[1] < 1)
- {
- uc_count = 0;
- while(uc_count < 16)
- {
- uc_optbuf[uc_count++] = 0x55;
- }
- //延时区
- uc_ack = JQ_ReadOTP(CHECKER_NET_ID,15,2,uc_optbuf); //2Bytes
- if(uc_ack != 2)
- {
- uc_rtv = 1;
- }
- //保留区 3-16损坏使用
- uc_ack = JQ_ReadOTP(CHECKER_NET_ID,17,3,uc_optbuf+2);//3Bytes
- if(uc_ack != 3)
- {
- uc_rtv = 1;
- }
- //错误标记区
- uc_ack = JQ_ReadOTP(CHECKER_NET_ID,26,6,uc_optbuf+5);//6Bytes
- if(uc_ack != 6)
- {
- uc_rtv = 1;
- }
-
- uc_count = 0;
- //OTP31 30 特殊处理,其高4bit不错比较
- uc_optbuf[10] &= 0x0F;
- uc_optbuf[9] &= 0x0F;
- while(uc_count < 11)
- {
- if(uc_optbuf[uc_count++] != 0)
- {
- uc_rtv = 1;
- }
- }
- }
-
- if(checker_runcfg.params[2] < 1)
- {
- uc_count = 0;
- while(uc_count < 16)
- {
- uc_optbuf[uc_count++] = 0x55;
- }
- uc_ack = JQ_ReadOTP(CHECKER_NET_ID,20,4,uc_optbuf);
- if(uc_ack != 4)
- {
- uc_rtv = 1;
- }
- uc_count = 0;
- while(uc_count < 4)
- {
- if(uc_optbuf[uc_count++] != 0)
- {
- uc_rtv = 1;
- }
- }
- }
- Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
-}
-/*
-@brief 工厂成测标志检测
-*/
-void JQ_Test_FTCheck(void)
-{
- uint16_t us_opt;
- uint8_t uc_rtv = 0;
- uint8_t uc_ack;
- us_opt = 0x00;
- uc_ack = JQ_ReadOTP(CHECKER_NET_ID,24,2,(uint8_t*)&us_opt);
- if(uc_ack != 2)
- {
- uc_rtv = 1;
- }
- if(us_opt != 0xFFFF)
- {
- uc_rtv = 1;
- }
- Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
-}
-
-/*
-@brief 读芯片状态
-@param0 比较掩码,状态与掩码与等于掩码返回正常
-*/
-void JQ_Test_ReadState(void)
-{
- uint8_t state = 0x00;
- uint8_t uc_rtv = 0;
- uint8_t uc_ack;
- uc_ack = JQ_ReadState(CHECKER_NET_ID,&state);
- if((state & checker_runcfg.params[0]) != checker_runcfg.params[0])
- {
- uc_rtv = 1;
- }
- if(uc_ack < 1)
- {
- uc_rtv = 1;
- }
- checker_runcfg.params[0] = state;
- Checker_SetRtv(checker_runcfg.params,checker_runcfg.rtv_count);
- Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
-}
-
-/*
-@brief 写入OTP数据
-@param0 2字节OTP数据
-@param1 2字节OTP数据
-*/
-void JQ_Test_WriteUserInfo(void)
-{
- uint8_t uc_rtv = 0;
- uint8_t uc_ack;
- uint8_t uc_count = 0;
- uint8_t uc_wcount ;
- uint32_t ul_temp = 0;
- uint32_t ul_write = checker_runcfg.params[1];
- ul_write <<= 16;
- ul_write |= checker_runcfg.params[0];
- JQ_EnWOTP();
- JQ_EnWOTP();
-
- uc_ack = JQ_ReadOTP(CHECKER_NET_ID,20,4,(uint8_t*)&ul_temp);
- if(uc_ack < 1)
- {
- uc_rtv = 1;
- }
- uc_wcount = 0;
- //要不全部为0,要不除去低5位一致,其他bits为0
- if(ul_temp == 0)
- {
- uc_wcount = 4;
- }
- if((ul_temp & (~0x01Fu)) == 0)
- {
- if((ul_temp & 0x01Fu) == (ul_write & 0x01Fu))
- {
- uc_wcount = 4;
- }
- }
- if(uc_wcount == 0 || uc_rtv == 1)
- {
- uc_rtv = 1;
- Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
- return;
- }
-
- uc_wcount = JQ_WriteOTP(20,4,(uint8_t*)&ul_write);
- if(uc_count != 4)
- {
- uc_rtv = 1;
- Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
- return;
- }
- ul_temp = 0;
- uc_ack = JQ_ReadOTP(CHECKER_NET_ID,20,4,(uint8_t*)&ul_temp);
- if(uc_ack < 1)
- {
- uc_rtv = 1;
- }
- if(ul_temp != ul_write)
- {
- uc_rtv = 1;
- }
- Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
-}
-
-/*
-@brief 写入OTP数据
-@param0 OTP 地址
-@param1 写入数据长度
-@param2 2Bytes OTP数据
-@param3 2Bytes OTP数据
-@param4 2Bytes OTP数据
-@param5 2Bytes OTP数据
-*/
-void JQ_Test_WriteOTP(void)
-{
- uint8_t uc_rtv = 0;
- uint8_t uc_ack;
- uint8_t uc_count = 0;
- uint8_t uc_wcount ;
- uint8_t uc_otpaddr;
- uint8_t* uc_pbuf;
- uint8_t uc_optbuf[8];
- JQ_EnWOTP();
- JQ_EnWOTP();
- uc_otpaddr = checker_runcfg.params[0];
- uc_count = checker_runcfg.params[1];
- if(uc_count > 8)
- uc_count = 8;
- uc_pbuf = (uint8_t*)(&checker_runcfg.params[2]);
- uc_wcount = JQ_WriteOTP(uc_otpaddr,uc_count,uc_pbuf);
- if(uc_wcount != uc_count)
- {
- uc_rtv = 1;
- Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
- return;
- }
- uc_ack = JQ_ReadOTP(CHECKER_NET_ID,uc_otpaddr,uc_count,(uint8_t*)uc_optbuf);
- if(uc_ack < 1)
- {
- uc_rtv = 1;
- }
- for(uc_wcount = 0; uc_wcount < uc_count; uc_wcount++)
- {
- if(uc_optbuf[uc_wcount] != uc_pbuf[uc_wcount])
- {
- break;
- }
- }
- if(uc_wcount != uc_count)
- {
- uc_rtv = 1;
- }
- Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
-}
-
-
-
-/*
-@brief 读OTP
-@param0 OTP地址
-@param1 OTP 数量
-*/
-
-void JQ_Test_ReadOTP(void)
-{
- uint8_t uc_rtv = 0;
- uint8_t uc_ack;
- uint8_t uc_count = 0;
- uint8_t uc_wcount ;
- uint8_t uc_otpaddr;
- uint16_t uc_optbuf[16];
- uc_otpaddr = checker_runcfg.params[0];
- uc_count = checker_runcfg.params[1];
- if((uc_otpaddr+uc_count) > 32)
- {
- Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
- return;
- }
- uc_ack = JQ_ReadOTP(CHECKER_NET_ID,uc_otpaddr,uc_count,(uint8_t*)uc_optbuf);
- if(uc_ack < 1)
- {
- uc_rtv = 1;
- }
- Checker_SetRtv(uc_optbuf,checker_runcfg.rtv_count);
- Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
-}
-
-/*
-@brief 充能统计
-@param0 充电超时0.1us
-@param1 充电电流判线值,AD值
-@param2 充电末电流结束值,单位0.1uA
-@param3 充电最长时间,单位100ms
-@param4 充电高压保持时间,单位0.1s
-
-@rtv0 充能值 单位0.1ms
-@rtv1 充末电流 单位0.1uA
-@rtv2 充电最大电流 单位0.1Ma
-@rtv3 充电抖动幅值 adv
-*/
-
-void JQ_Test_ChgEnergy(void)
-{
- uint16_t us_sample_timeout = checker_runcfg.params[0];
- uint16_t us_adend = checker_runcfg.params[1];
- uint16_t us_chgend_cur = checker_runcfg.params[2];
- uint16_t us_timeout = checker_runcfg.params[3];
- uint32_t ul_holdtime = checker_runcfg.params[4];
-
-
- uint16_t us_array[4];
- uint16_t us_energy = 0;
- uint16_t us_end_cur = 2000;
- uint16_t us_max_cur = 0;
- uint16_t us_shake = 65535;
- uint32_t ul_temp;
- uint8_t uc_rtv = 0;
-
- JQ_Chage(0);
- Power_SetSampleRange_Seep(JQChecker_ChgEnger_Sample_R,ADC_SPEED_HIGH);
- delay_ms(1);
- us_energy = AD_GetChgEnergy(us_sample_timeout,us_adend,&us_max_cur,&us_shake);
- us_max_cur = (Power_ConvCur(us_max_cur,JQChecker_ChgEnger_Sample_R) /100+5)/10;
- ADC_CurChnnelSet(AN_MAL_CH, ADC_SPEED_MIDLE);
- ul_temp = AD_CurMonitor(ul_holdtime*1000);
- if(ul_temp > us_shake)
- {
- us_shake = ul_temp;
- }
- us_timeout++;
- while(us_timeout > 0)
- {
-
- us_end_cur = ADC_GetBaseStableCur();
-
- if(us_end_cur < us_chgend_cur)
- {
- break;
- }
- us_timeout--;
- }
- if(us_end_cur > us_chgend_cur)
- {
- uc_rtv = 1;
- }
- CurrentSampleR_Def;
- Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
- us_array[0] = us_energy;
- us_array[1] = us_end_cur;
- us_array[2] = us_max_cur;
- us_array[3] = us_shake;
-
- Checker_SetRtv(us_array,checker_runcfg.rtv_count);
-
-}
-
-/*
-@brief DAC检测
-@param DAC检测的起始值
-@param DAC检测的结束值
-*/
-void JQ_Test_CheckDAC(void)
-{
- uint16_t uc_bg_dac = checker_runcfg.params[0];
- uint16_t uc_end_dac = checker_runcfg.params[1];
- uint8_t uc_rtv = 1,uc_state;
- while(uc_bg_dac >= uc_end_dac)
- {
- JQ_ChargJudge(uc_bg_dac);
- uc_state = 0;
- if( JQ_ReadState(CHECKER_NET_ID,&uc_state) < 1)
- {
- uc_bg_dac = 0;
- uc_rtv = 1;
- break;
- }
- if(uc_state & 0x80)
- {
- uc_rtv = 0;
- break;
- }
- if(uc_bg_dac == 0)
- {
- break;
- }
- uc_bg_dac--;
- }
- if(uc_bg_dac < uc_end_dac)
- {
- uc_bg_dac = 0;
- }
- Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
- Checker_SetRtv(&uc_bg_dac,checker_runcfg.rtv_count);
-}
-
-
-/*
-@brief 写延时
-@param 延时时间
-*/
-void JQ_Test_SetDelay(void)
-{
- uint16_t us_delaytime = checker_runcfg.params[0];
- JQ_WriteDelay(CHECKER_NET_ID,us_delaytime);
- Checker_MaskResult(0,checker_runcfg.task_info.runindex);
-}
-/*
-@brief 读延时
-@param 延时时间
-*/
-void JQ_Test_ReadDelay(void)
-{
- uint8_t uc_rtv = 0;
- uint16_t us_delaytime,us_temp;
- uc_rtv = JQ_ReadDelay(CHECKER_NET_ID,&us_delaytime);
- uc_rtv = uc_rtv < 1?1:0;
-
- us_temp = (us_delaytime >> 8) & 0x0FF;
- us_temp |= (us_delaytime << 8) & 0xFF00;
- Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
- Checker_SetRtv(&us_temp,checker_runcfg.rtv_count);
-}
-
-/*
-@brief 校准
-@param1 校准周期
-@param2 脉冲个数
-*/
-void JQ_Test_ClkTrim(void)
-{
- uint16_t us_cycle = checker_runcfg.params[0];
- uint16_t us_count = checker_runcfg.params[1];
- JQ_TimeAmend(us_cycle,us_count);
- Checker_MaskResult(0,checker_runcfg.task_info.runindex);
-}
-/*
-@brief 放电,快速放电仅JQ2012才有
-@param0 放电功能 0 普通放电 1 快速放电
-@param1 快速放电时间
-*/
-
-void JQ_Test_Discharge(void)
-{
- uint16_t us_time = checker_runcfg.params[1];
- JQ_DisChage();
- if(checker_runcfg.params[0] == 1 && us_time > 0)
- {
- JQ_FastDisChage(1);
- delay_os_ms(100*us_time);
- JQ_FastDisChage(0);
- }
- Checker_MaskResult(0,checker_runcfg.task_info.runindex);
-}
-
-/*
-@brief 复位
-*/
-void JQ_Test_Reset(void)
-{
- uint8_t ack = 0,uc_state;
- uint8_t i = 0;
- for(i = 0; i < 5;i++)
- {
- delay_os_ms(20);
- JQ_Reset(); //软复位
- delay_os_ms(20);
- ack = JQ_ReadState(0,&uc_state); //读状态
- if(ack == 0)
- continue;
- if((uc_state & 0x7B) == 0x18)
- {
- break;
- }
- }
- delay_os_ms(20);
- JQ_DisChage(); //内部放电
- if(i < 5)
- {
- ack = 0;
- }else{
- ack = 1;
- }
- Checker_MaskResult(ack,checker_runcfg.task_info.runindex);
-}
-
-/*
-@brief 起爆使能
-*/
-void JQ_Test_BootEn(void)
-{
- JQ_BoomActive();
- Checker_MaskResult(0,checker_runcfg.task_info.runindex);
-}
-/*
-@brief 清除起爆命令
-*/
-void JQ_Test_ClearBoom()
-{
- uint16_t us_temp;
- JQ_CheckerBoomCmd(1,&us_temp);
-
-}
-/*
-@brief 起爆充能
-@param0 启动电流 adc
-@param1 脉冲个数
-@param2 延时采集起爆充能
-
-@rtv1 起爆后充电能量
-@rtv2 起爆脉冲波动
-@rtv3 起爆后充电电流
-@rtv4 起爆后充电电流波动
-*/
-
-void JQ_Test_BoomEnergy(void)
-{
- uint16_t us_adc_bg = checker_runcfg.params[0];
- uint16_t us_plus_count = checker_runcfg.params[1];
- uint16_t us_delay = checker_runcfg.params[2];
- uint16_t aus_rtv[4];// us_shake,max_cul,us_shake2,us_energy;
- uint32_t ul_max_cur;
- us_plus_count = JQ_CheckerBoomCmd(us_plus_count,&aus_rtv[1]);
- if(checker_runcfg.params[1] > 652)
- {
-
- Power_SetSampleRange_Seep(JQChecker_ChgEnger_Sample_R,ADC_SPEED_HIGH);
- delay_ms(us_delay);
- aus_rtv[0] = AD_GetChgEnergy(40000,us_adc_bg,&aus_rtv[2],&aus_rtv[3]);
- ul_max_cur = Power_ConvCur(aus_rtv[2],JQChecker_ChgEnger_Sample_R);
- ul_max_cur = (ul_max_cur + 500)/1000;//0.01mA
- aus_rtv[2] = ul_max_cur;
-
- }else{
- aus_rtv[0] = aus_rtv[2] = aus_rtv[3] = 0;
- }
- if(us_plus_count != CHECKER_NET_ID)
- {
- Checker_MaskResult(1,checker_runcfg.task_info.runindex);
- }else{
- Checker_MaskResult(0,checker_runcfg.task_info.runindex);
- }
-
- Checker_SetRtv(aus_rtv,checker_runcfg.rtv_count);
-
-}
-
-/*
-@brief 使能通讯末电流采样
-*/
-void JQ_Test_EnCommEndCur(void)
-{
- JQ_CommEnd_MaxCur = 0;
- JQ_CommEnd_CurEn = 1;
- Checker_MaskResult(0,checker_runcfg.task_info.runindex);
-}
-/*
-@brief 获取通讯末电流采样,关闭电流采样
-@rtv 返回上次采集的通讯末电流
-*/
-void JQ_Test_GetCommEndCur(void)
-{
- JQ_CommEnd_CurEn = 0;
- Checker_SetRtv(&JQ_CommEnd_MaxCur,checker_runcfg.rtv_count);
- Checker_MaskResult(0,checker_runcfg.task_info.runindex);
-}
-/*
-@brief 关总线
-*/
-void JQ_Test_PowerOff(void)
-{
- JQ_Test_Discharge();
- delay_ms(20);
- JQBUS_OFF;
- PowerCalibration_set(POWER_DEF_V,POWER_DEF_V-10);
-}
-/*
-@brief 缓存数据写入OTP数据
-@param0 OTP 地址
-@param1 缓存区起始
-@param2 写入数据长度
-*/
-void JQ_Test_WriteBuf2OTP(void)
-{
- uint8_t uc_rtv = 0;
- uint8_t uc_ack;
- uint8_t uc_count = 0;
- uint8_t uc_wcount ;
- uint8_t uc_otpaddr;
- uint8_t* uc_pbuf;
- uint8_t uc_optbuf[16];
- JQ_EnWOTP();
- JQ_EnWOTP();
- if((checker_runcfg.params[1] + checker_runcfg.params[2] > CHECKER_WRITE_BUF) || (checker_runcfg.params[1] > 16))
- {
- uc_rtv = 1;
- Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
- return;
- }
- if(CheckCRC_8(&Checker_FacBuf[2],Checker_FacBuf[0]) != Checker_FacBuf[1])
- {
- uc_rtv = 1;
- Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
- return;
- }
- memset(uc_optbuf,0x55,16);
- uc_otpaddr = checker_runcfg.params[0];
- uc_count = checker_runcfg.params[2];
- uc_pbuf = &Checker_FacBuf[2]+checker_runcfg.params[1];
-
- uc_wcount = JQ_WriteOTP(uc_otpaddr,uc_count,uc_pbuf);
- if(uc_wcount != uc_count)
- {
- uc_rtv = 1;
- Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
- return;
- }
- uc_ack = JQ_ReadOTP(CHECKER_NET_ID,uc_otpaddr,uc_count,(uint8_t*)uc_optbuf);
- if(uc_ack < 1)
- {
- uc_rtv = 1;
- }
- for(uc_wcount = 0; uc_wcount < uc_count; uc_wcount++)
- {
- if(uc_optbuf[uc_wcount] != uc_pbuf[uc_wcount])
- {
- break;
- }
- }
- if(uc_wcount != uc_count)
- {
- uc_rtv = 1;
- }
- Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
-}
-/*
-@brief 写入三码数据
-*/
-void JQ_UID_PWD_Bind(void)
-{
- uint8_t uc_rtv = 0;
- uint8_t uc_ack;
- uint8_t uc_count = 0;
- uint8_t uc_optbuf[16];
- uint32_t ul_write_mask = 0;
-
- if(JQXT_Test_IsNeedBind() == 0)
- {
- Checker_MaskResult(0,checker_runcfg.task_info.runindex);
- }
-
- uc_ack = JQ_ReadOTP(CHECKER_NET_ID,0x03,12,(uint8_t*)uc_optbuf);
- if(uc_ack < 1)
- {
- uc_rtv = 1;
- Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
- return;
- }
- JQ_EnWOTP();
- JQ_EnWOTP();
- for(uc_count = 0; uc_count < 8; uc_count++)
- {
- if((checker_runcfg.writeuid[uc_count] & uc_optbuf[uc_count]) != uc_optbuf[uc_count])
- {
- uc_rtv = 1;
- Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
- return;
-
- }
- if(checker_runcfg.writeuid[uc_count] != uc_optbuf[uc_count])
- {
- ul_write_mask |= ((0x01ul)<>= 1;
- }
- if(uc_count != 12)
- {
- uc_rtv = 1;
- }
- Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
-}
-/*
-@brief UID PWD 验证
-*/
-void JQ_Verify_UID_PWD(void)
-{
- uint8_t uc_ack;
- uint8_t auc_uid_temp[8];
- uint8_t auc_pwd_temp[4];
- uint8_t uc_state;
-
- if(JQXT_Test_IsNeedBind() == 0)
- {
- Checker_MaskResult(0,checker_runcfg.task_info.runindex);
- return;
- }
-
- JQ_ScanUIDBegin();
- if(checker_runcfg.params[0] > 0)
- {
- JQ_FreeBack_Prapare(1);
- }
- uc_ack = JQ_ScanReadUID(CHECKER_NET_ID,auc_uid_temp);
- if(uc_ack < 1)
- {
- Checker_MaskResult(1,checker_runcfg.task_info.runindex);
- return;
- }
- for(uc_ack = 0; uc_ack < 4; uc_ack++)
- {
- auc_pwd_temp[uc_ack] = checker_runcfg.writepwd[3-uc_ack];
- }
- JQ_VerifyPWD(auc_pwd_temp);
- uc_state = 0;
- uc_ack = JQ_ReadState(CHECKER_NET_ID,&uc_state);
- if((uc_state & 0x40) == 0)
- {
- Checker_MaskResult(1,checker_runcfg.task_info.runindex);
- return;
- }
- for(uc_ack = 0; uc_ack < 8; uc_ack++)
- {
- if(checker_runcfg.writeuid[uc_ack] != auc_uid_temp[7-uc_ack])
- {
- break;
- }
- }
- if(uc_ack != 8)
- {
- Checker_MaskResult(1,checker_runcfg.task_info.runindex);
- }else{
- Checker_MaskResult(0,checker_runcfg.task_info.runindex);
- }
-}
-/*
-@breif 测量电容电压差
-@param0 两次测量间隔 0.1s
-@rtv0 电压差值
-*/
-void JQ_Test_CapVoltage(void)
-{
- uint16_t us_capv1;
-
-
- POWER_OFF;
- Power_SetSampleCurrentRange(Checker_OnLine_Sample_R);
- HMOS_FAST_DISCHG;
- HMOS_SWITCH_GND;
- delay_os_ms(1000);
- us_capv1 = AD_SampleCap(checker_runcfg.params[0]);
- POWER_ON;
- delay_os_ms(500);
- JQBUS_ON
- Power_SetSampleCurrentRange(Current_Max);
-
- Checker_MaskResult(0,checker_runcfg.task_info.runindex);
- Checker_SetRtv(&us_capv1,checker_runcfg.rtv_count);
-
-}
-/*
-@breif OTP 读写使能
-*/
-
-void JQ_Test_EnOTPW(void)
-{
- JQ_EnWOTP();
- Checker_MaskResult(0,checker_runcfg.task_info.runindex);
-}
-/*
-@breif 写模块版本 前提是要使能OTP (ENWOTP)
-@param0 模块版本号
-*/
-void JQ_Test_WriteVersion(void)
-{
- uint8_t uc_rtv = 0;
- uint8_t uc_ack;
- uint8_t uc_temp = 0;
- uint8_t uc_write = checker_runcfg.params[0] & 0x1F;
-
- uc_ack = JQ_ReadOTP(CHECKER_NET_ID,20,1,(uint8_t*)&uc_temp);
- if(uc_ack < 1)
- {
- uc_rtv = 1;
- Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
- return;
- }
- if((uc_temp & 0x1F) == uc_write)
- {
- uc_rtv = 0;
- Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
- return;
- }
- uc_temp |= uc_write;
- if((uc_temp & 0x1F) != uc_write)
- {
- uc_rtv = 1;
- Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
- return;
- }
- JQ_EnWOTP();
- JQ_EnWOTP();
-
- uc_ack = JQ_WriteOTP(20,1,(uint8_t*)&uc_temp);
- if(uc_ack != 1)
- {
- uc_rtv = 1;
- Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
- return;
- }
- uc_write = uc_temp;
- uc_ack = JQ_ReadOTP(CHECKER_NET_ID,20,1,(uint8_t*)&uc_temp);
- if(uc_ack < 1)
- {
- uc_rtv = 1;
- }
- if(uc_temp != uc_write)
- {
- uc_rtv = 1;
- }
- Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
-}
-/*
-@brief 获取版本号
-
-*/
-void JQ_Test_ReadVersion(void)
-{
- uint16_t us_temp = 0xFF;
- uint8_t uc_ack;
- uint8_t uc_rtv = 0;
- uc_ack = JQ_ReadOTP(CHECKER_NET_ID,20,1,(uint8_t*)&us_temp);
- if(uc_ack < 1)
- {
- uc_rtv = 1;
- }
- us_temp &= 0x1F;
- Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
- Checker_SetRtv(&us_temp,checker_runcfg.rtv_count);
-}
-
-CheckerTask jqtaskArray[CHECKER_MAXID_COUNT] ={
-Checker_PowerPrapare, //0 电源准备
-JQ_Test_PowerOn, //1 上电充能
-JQ_Test_SetBusV, //2 设置总线电压
-JQ_Test_BaseCur, //3 获取总线电流
-JQ_Test_ScanUID, //4 扫描UID
-JQ_Test_PWCheck, //5 密码验证
-JQ_Test_ReadChipID, //6 读取芯片代码
-JQ_Test_OTPCheck, //7 OTP检测
-JQ_Test_FTCheck, //8 工厂测试检测
-JQ_Test_ReadState, //9 读取状态
-JQ_Test_WriteUserInfo,//10 写工厂信息
-JQ_Test_ChgEnergy ,//11 充能统计
-JQ_Test_CheckDAC ,//12 充电电压检测
-Checker_WaitDelay ,//13 延时等待
-JQ_Test_SetDelay ,//14 设置延时
-JQ_Test_ReadDelay ,//15 读取延时
-JQ_Test_ClkTrim ,//16 时钟校准
-JQ_Test_Discharge ,//17 放电
-JQ_Test_Reset ,//18 复位
-JQ_Test_BootEn ,//19 起爆使能
-JQ_Test_BoomEnergy ,//20 起爆充能
-JQ_Test_EnCommEndCur ,//21 使能通讯末电流采集
-JQ_Test_GetCommEndCur ,//22 获取通讯末电流
-JQ_Test_WriteOTP ,//23 写OTP
-JQ_Test_ReadOTP ,//24 读OTP
-JQ_Test_ClearBoom ,//25 清除起爆计数
-JQ_Test_PowerOff ,//26 关总线
-JQ_Test_WriteBuf2OTP ,//27 将缓存区数据写入OTP
-JQ_UID_PWD_Bind ,//28 三码写入错误
-JQ_Verify_UID_PWD ,//29 三码验证错误
-JQ_Test_CapVoltage ,//30 测量电容压差
-Checker_ResistorSample,//31 测量桥丝阻值
-JQ_Test_EnOTPW ,//32 使能OTP写
-JQ_Test_WriteVersion ,//33 写模块版本
-JQ_Test_ReadVersion ,//34 读取版本号
-(void*)0 //数组结束
-};
-
diff --git a/source/elec_det/interface/JQChecker.h b/source/elec_det/interface/JQChecker.h
deleted file mode 100644
index 904ce5a..0000000
--- a/source/elec_det/interface/JQChecker.h
+++ /dev/null
@@ -1,218 +0,0 @@
-#ifndef JQCHECKER_H_
-#define JQCHECKER_H_
-#include "base/define.h"
-#include "basechecker.h"
-
-
-
-
-extern Checker_RunCfg_st checker_runcfg;
-
-
-
-
-extern CheckerTask jqtaskArray[CHECKER_MAXID_COUNT];
-
-
-/*
-brief 准备测试用电压
-@param 设置电压值,最多支持10个参数
-*/
-void JQ_Test_PowerPrapare(void);
-
-/*
-@brief 统计模块的上电充能,具有电压设置功能,采集档位 R10_0p1mA_1p6mA_UC
-@param1 总线电压
-@param2 充电结束时的AD值
-@rtv1 返回总线电流低于设置AD值的时间
-*/
-void JQ_Test_PowerOn(void);
-/*
-@brief 扫描总线上的电子模块 1发
-@param0 使能或失能通信反码信息采集
-@param1 1 uid数据全0验证 其他不验证
-*/
-void JQ_Test_ScanUID(void);
-/*
-@brief 设置总线电压
-@param1 总线电压
-@rtv1 总线电压
-*/
-void JQ_Test_SetBusV(void);
-/*
-@brief 测量总线基本电压
-@rtv1 返回总线电流 单位0.01uA
-*/
-void JQ_Test_BaseCur(void);
-/*
-@brief 读取芯片码
-@rtv 芯片代码2字节
-*/
-void JQ_Test_ReadChipID(void);
-/*
-@brief OTP全0检测
-@param0 UID区和密码区验证标志 1不验证 0 验证
-@param1 延时区和保留区验证 1不严重 0验证,错误标记区
-@param2 用户存储区
-*/
-
-void JQ_Test_OTPCheck(void);
-/*
-@brief 工厂成测标志检测
-*/
-void JQ_Test_FTCheck(void);
-/*
-@brief 读芯片状态
-@param0 比较掩码,状态与掩码与等于掩码返回正常
-*/
-void JQ_Test_ReadState(void);
-/*
-@brief 写入OTP数据
-@param0 2字节OTP数据
-@param1 2字节OTP数据
-*/
-void JQ_Test_WriteUserInfo(void);
-/*
-@brief 充能统计
-@param0 充电电流判线值,AD值
-@param1 充电末电流结束值,单位0.1uA
-@param2 充电最长时间,单位100ms
-@param3 充电高压保持时间,单位0.1s
-@rtv0 充能值 单位0.1ms
-@rtv1 充末电流 单位0.1uA
-@rtv2 充电最大电流 单位0.1Ma
-@rtv3 充电抖动幅值 adv
-*/
-
-void JQ_Test_ChgEnergy(void);
-/*
-@brief DAC检测
-@param DAC检测的起始值
-@param DAC检测的结束值
-*/
-void JQ_Test_CheckDAC(void);
-/*
-@brief 延时
-@pram1 延时时间 0.1S
-@param 使能总线电流监控
-@rtv1 波动AD值
-*/
-void JQ_Test_WaitDelay(void);
-/*
-@brief 写延时
-@param 延时时间
-*/
-void JQ_Test_SetDelay(void);
-/*
-@brief 读延时
-@param 延时时间
-*/
-void JQ_Test_ReadDelay(void);
-/*
-@brief 校准
-@param1 校准周期
-@param2 脉冲个数
-*/
-void JQ_Test_ClkTrim(void);
-/*
-@brief 放电
-*/
-
-void JQ_Test_Discharge(void);
-/*
-@brief 复位
-*/
-void JQ_Test_Reset(void);
-/*
-@brief 起爆使能
-*/
-void JQ_Test_BootEn(void);
-/*
-@brief 起爆充能
-@param1 启动电流 adc
-@param2 脉冲个数
-@param3 延迟采集充能
-@param4 使能电压波动监控
-@rtv1 起爆后充电能量
-@rtv2 起爆脉冲波动
-@rtv3 起爆后充电电流
-@rtv4 起爆后充电电流波动
-*/
-
-void JQ_Test_BoomEnergy(void);
-/*
-@brief 使能通讯末电流采样
-*/
-void JQ_Test_EnCommEndCur(void);
-/*
-@brief 获取通讯末电流采样,关闭电流采样
-@rtv 返回上次采集的通讯末电流
-*/
-void JQ_Test_GetCommEndCur(void);
-/*
-@brief 关总线
-*/
-void JQ_Test_PowerOff(void);
-/*
-@brief 密码验证
-@param0 密码源码验证使能
-*/
-void JQ_Test_PWCheck(void);
-/*
-@brief 写入OTP数据
-@param0 OTP 地址
-@param1 写入数据长度
-@param2 2Bytes OTP数据
-@param3 2Bytes OTP数据
-@param4 2Bytes OTP数据
-@param5 2Bytes OTP数据
-*/
-void JQ_Test_WriteOTP(void);
-/*
-@brief 读OTP
-@param0 OTP地址
-@param1 OTP 数量
-*/
-
-void JQ_Test_ReadOTP(void);
-/*
-@brief 清除起爆命令
-*/
-void JQ_Test_ClearBoom(void);
-/*
-@brief 缓存数据写入OTP数据
-@param0 OTP 地址
-@param1 缓存区起始
-@param2 写入数据长度
-*/
-void JQ_Test_WriteBuf2OTP(void);
-/*
-@brief 写入三码数据
-*/
-void JQ_UID_PWD_Bind(void);
-/*
-@brief UID PWD 验证
-*/
-void JQ_Verify_UID_PWD(void);
-/*
-@breif 测量电容电压差
-@param0 两次测量间隔 0.1s
-@rtv0 电压差值
-*/
-void JQ_Test_CapVoltage(void);
-/*
-@breif OTP 读写使能
-*/
-
-void JQ_Test_EnOTPW(void);
-/*
-@brief 获取版本号
-
-*/
-void JQ_Test_ReadVersion(void);
-/*
-@breif 写模块版本 前提是要使能OTP (ENWOTP)
-@param0 模块版本号
-*/
-void JQ_Test_WriteVersion(void);
-#endif
diff --git a/source/elec_det/interface/XTChecker.c b/source/elec_det/interface/XTChecker.c
deleted file mode 100644
index f639666..0000000
--- a/source/elec_det/interface/XTChecker.c
+++ /dev/null
@@ -1,1390 +0,0 @@
-
-#include "base/delay.h"
-#include "hardware/adc_cfg.h"
-#include "base/utility.h"
-#include "hardware/power.h"
-#include "driver/XTDriver.h"
-#include "XTChecker.h"
-#include "hardware/timer_cfg.h"
-#define XT_CHECKER_RUN_BUF 56
-uint8_t XT_Test_UID[13]="123456789ACDE";
-uint8_t XT_Test_PWD[8]="FBCDabcd";
-uint8_t XT_RunBuf[XT_CHECKER_RUN_BUF];
-/*
-@brief 注码检测
-@rtv 0 已经注码,1 不能注码 2 需要注码
-*/
-static uint8_t XT_Test_CheckeThreeCode(void);
-/*
-@brief 三码绑定验证
-*/
-static uint8_t XT_Test_UID_PWD_Verify_(void);
-/*
-@brief 统计模块的上电充能,具有电压设置功能,采集档位 R10_0p1mA_1p6mA_UC
-@param0 总线电压
-@param1 超时时间 0.1ms
-@param2 充电结束时的AD值
-@rtv1 返回总线电流低于设置AD值的时间
-*/
-void XT_Test_PowerOn(void)
-{
- uint8_t uc_rtv = 0;
- uint16_t us_rsult[2];
- uint16_t us_max;
- uint16_t us_shake;
- XTBUS_OFF;
- uc_rtv = PowerCalibration_set(checker_runcfg.params[0],checker_runcfg.params[0]-1);
- Power_SetSampleRange_Seep(Checker_PowerOn_Sample_R,ADC_SPEED_HIGH);
- //POWER_ON
- delay_os_ms(100);
- XTBUS_ON;
- delay_us(20);
- us_rsult[1] = AD_GetChgEnergy(checker_runcfg.params[1],checker_runcfg.params[2], &us_max,&us_shake);
- delay_os_ms(100);
- us_rsult[0] = Power_GetBousV();
- Checker_SetRtv(us_rsult,checker_runcfg.rtv_count);
- Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
- XT_Init(0x78);
-}
-
-/*
-@brief 设置总线电压
-@param1 总线电压
-@rtv1 总线电压
-*/
-void XT_Test_SetBusV(void)
-{
- uint8_t uc_rtv = 0;
- uint16_t us_h_v,us_m_v;
- us_h_v = checker_runcfg.params[0];
- if(us_h_v < 55)
- {
- uc_rtv = 1;
-
- }else{
- us_m_v = 50;
- uc_rtv |= PowerCalibration_set(us_h_v,us_m_v);
- XTBUS_ON
-// if(checker_runcfg.params[1] == 0)
-// {
-// XTBUS_ON;
-// }else{
-// HMOS_SWITCH_RW_1;
-// }
- us_m_v = ((us_h_v/80)+2)*60;
- delay_ms(us_m_v);
- us_h_v = Power_GetBousV();
- Checker_SetRtv(&us_h_v,checker_runcfg.rtv_count);
- }
- Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
-
-}
-
-/*
-@brief 测量总线基本电压
-@rtv1 返回总线电流 单位0.01uA
-*/
-void XT_Test_BaseCur(void)
-{
- uint16_t ul_cur[2];
- XTBUS_W_1
- delay_ms(200);
- ul_cur[0] = ADC_GetBaseStableCur();
- XTBUS_W_0
- delay_ms(100);
- ul_cur[1] = ADC_GetBaseStableCur();
- XTBUS_W_1
- delay_ms(50);
-// if(ul_cur[0] < 100 || ul_cur[1] < 100)
-// {
-// __disable_irq();
-// while(1){};
-// }
- Checker_MaskResult(0,checker_runcfg.task_info.runindex);
- Checker_SetRtv(ul_cur,checker_runcfg.rtv_count);
-}
-
-/*
-@brief 扫描总线上的电子模块 1发
-@param0 UID长度
-@param1 使能或失能 UID对比
-*/
-
-void XT_Test_ScanUID(void)
-{
- uint8_t uc_rtv = 0;
- uint8_t uc_count = 0;
- uint16_t us_temp[12];
- XT_Clear_Read();
- memset(XT_RunBuf,0,XT_CHECKER_RUN_BUF);
- if(checker_runcfg.params[0] == 0)
- {
- checker_runcfg.params[0] = checker_runcfg.uid_len;
- if(checker_runcfg.params[0] == 0)
- {
- checker_runcfg.params[0] = 7;
- }
- }
-
- uc_rtv = XT_Read_Uid(XT_RunBuf,checker_runcfg.params[0]);
-
- if(checker_runcfg.params[1] > 0)
- {
- for(uc_count = 0; uc_count < checker_runcfg.params[0];uc_count++)
- {
- if(checker_runcfg.writeuid[uc_count] != XT_RunBuf[uc_count])
- {
- uc_rtv |= 0x01;
- }
- }
- }
- uc_count = 0;
- if(uc_rtv == 0)
- {
- checker_runcfg.uid_len = checker_runcfg.params[0];
- memcpy(checker_runcfg.writeuid,XT_RunBuf,checker_runcfg.uid_len);
- uc_count = (checker_runcfg.params[0]+8+1)/2;
- }
- Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
- memcpy(us_temp,XT_RunBuf,24);
- Checker_SetRtv(us_temp,checker_runcfg.rtv_count);
-}
-/*
-@brief 写芯片配置
-@param0 UID长度
-@param1 密码长度
-@param2 反馈电流挡位
-@param4 版本标识
-*/
-void XT_Test_WriteChipCfg(void)
-{
- uint8_t uc_rtv = 0;
- XT_RunBuf[0] = (((checker_runcfg.params[0] & 0x0F)-7) << 4) & 0xF0;
- XT_RunBuf[0] += ((checker_runcfg.params[1] - 4) & 0x0F) ;
- XT_RunBuf[1] = 0x8C;//((checker_runcfg.params[2] & 0x0F) << 2) & 0xF0;
- XT_RunBuf[2] = checker_runcfg.params[3];
- uc_rtv = XT_Write_Config(XT_RunBuf);
- checker_runcfg.uid_len = (uint8_t)checker_runcfg.params[0];
- checker_runcfg.pwd_len = (uint8_t)checker_runcfg.params[1];
- Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
-}
-/*
-@brief 芯片配置并比对
-@param0 UID长度
-@param1 密码长度
-@param2 反馈电流挡位
-@param4 版本标识
-*/
-void XT_Test_CheckChipCfg(void)
-{
- uint8_t uc_rtv = 0;
- uint8_t uc_count = 0;
- memset(XT_RunBuf,0,10);
- XT_RunBuf[0] = (((checker_runcfg.params[0] & 0x0F)-7) << 4) & 0xF0;
- XT_RunBuf[0] += ((checker_runcfg.params[1] - 4) & 0x0F) ;
- XT_RunBuf[1] = 0x8C;//((checker_runcfg.params[2] & 0x0F) << 2) & 0xF0;
- XT_RunBuf[2] = checker_runcfg.params[3];
- uc_rtv = XT_Read_Config(XT_RunBuf+5);
- for(uc_count = 0; uc_count < 3; uc_count++)
- {
- if(XT_RunBuf[uc_count] != XT_RunBuf[6+uc_count])
- {
- uc_rtv |= 0x01;
- }
- }
- XT_RunBuf[1] = XT_RunBuf[2];//验证密码/UID 和版本号
- if(XT_Check_Config(XT_RunBuf) == 0)
- {
- checker_runcfg.uid_len = (uint8_t)checker_runcfg.params[0];
- checker_runcfg.pwd_len = (uint8_t)checker_runcfg.params[1];
- }else{
- uc_rtv |= 0x01;
- }
-
- Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
-
-}
-
-
-/*
-@brief 模拟注码,优先写入配置项
-*/
-void XT_Test_BindTestCode(void)
-{
- uint8_t uc_rtv = 0;
- if(checker_runcfg.uid_len == 0)
- {
- checker_runcfg.uid_len = 7;
- }
- memcpy(XT_RunBuf,XT_Test_UID,checker_runcfg.uid_len);
- uc_rtv = XT_Write_Uid(XT_RunBuf, checker_runcfg.uid_len);
- if(uc_rtv == 0)
- {
- memcpy(checker_runcfg.writeuid,XT_RunBuf,checker_runcfg.uid_len);
- }
- if(checker_runcfg.pwd_len == 0)
- {
- checker_runcfg.pwd_len = 7;
- }
- memcpy(XT_RunBuf,XT_Test_PWD,checker_runcfg.pwd_len);
- uc_rtv |= XT_Write_Bmid(XT_RunBuf, checker_runcfg.pwd_len);
- if(uc_rtv == 0)
- {
- memcpy(checker_runcfg.writepwd,XT_RunBuf,checker_runcfg.pwd_len);
- }
-
- Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
-}
-
-/*
-@brief 充能统计
-@param0 充电挡位
-@param1 充电电流判线值,AD值
-@param2 充电末电流结束值,单位0.1uA
-@param3 充电最长时间,单位100ms
-@param4 充电高压保持时间,单位0.1s
-
-@rtv0 充能值 单位0.1ms
-@rtv1 充末电流 单位0.1uA
-@rtv2 充电最大电流 单位0.1Ma
-@rtv3 充电抖动幅值 adv
-*/
-
-void XT_Test_ChgEnergy(void)
-{
- uint8_t uc_charge_class = checker_runcfg.params[0];
- uint16_t us_sample_timeout = checker_runcfg.params[1];
- uint16_t us_adend = checker_runcfg.params[2];
- uint16_t us_chgend_cur = checker_runcfg.params[3];
- uint16_t us_timeout = checker_runcfg.params[4];
- uint32_t ul_holdtime = checker_runcfg.params[5];
-
- uint16_t us_array[4];
- uint16_t us_energy = 0;
- uint16_t us_end_cur = 2000;
- uint16_t us_max_cur = 0;
- uint16_t us_shake = 65535;
- uint32_t ul_temp;
- uint8_t uc_rtv = 0;
-
-
- XT_Init(0x78);
- XT_Charge_All(uc_charge_class);
- if(us_adend > 10)
- {
- Power_SetSampleRange_Seep(XTChecker_ChgEnger_Sample_R,ADC_SPEED_HIGH);
- delay_ms(1);
- us_energy = AD_GetChgEnergy(us_sample_timeout,us_adend,&us_max_cur,&us_shake);
- us_max_cur = ( Power_ConvCur(us_max_cur,XTChecker_ChgEnger_Sample_R) /100+5)/10;
- ADC_CurChnnelSet(AN_MAL_CH, ADC_SPEED_MIDLE);
- ul_temp = AD_CurMonitor(ul_holdtime*1000);
- if(ul_temp > us_shake)
- {
- us_shake = ul_temp;
- }
- }else{
- us_shake = 0;
- us_max_cur = 0;
- us_energy = 0;
- }
-
-
- us_timeout++;
- us_array[0] = ADC_GetBaseStableCur();
- us_array[1] = ADC_GetBaseStableCur();
- us_array[2] = ADC_GetBaseStableCur();
- while(us_timeout > 0)
- {
- us_array[3] = ADC_GetBaseStableCur();
- Bubble_Sort_u16(us_array,3);
-
- us_end_cur = us_array[0];
-
- if(us_end_cur < us_chgend_cur )
- {
- break;
- }
- us_timeout--;
- }
- if(us_end_cur > us_chgend_cur)
- {
- uc_rtv = 1;
- }
- CurrentSampleR_Def;
- Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
- us_array[0] = us_energy;
- us_array[1] = us_end_cur;
- us_array[2] = us_max_cur;
- us_array[3] = us_shake;
-
- Checker_SetRtv(us_array,checker_runcfg.rtv_count);
-}
-
-/*
-@brief 写现场值,如果UID已经写入,会将现场值读取进行比对
-@param 0 编号
-@param 1 延时
-@param 2 孔号
-*/
-
-void XT_Test_WriteRunField(void)
-{
- uint8_t uc_rtv = 0;
- uint8_t uc_count = 0;
- memset(XT_RunBuf,0,XT_CHECKER_RUN_BUF);
- XT_RunBuf[0] = 0xFF & (checker_runcfg.params[0] >> 8);
- XT_RunBuf[1] = 0xFF & (checker_runcfg.params[0]);
- XT_RunBuf[2] = 0;
- XT_RunBuf[3] = 0xFF & (checker_runcfg.params[1] >> 8);
- XT_RunBuf[4] = 0xFF & (checker_runcfg.params[1]);
- XT_RunBuf[5] = 0xFF & (checker_runcfg.params[2] >> 8);
- XT_RunBuf[6] = 0xFF & (checker_runcfg.params[2]);
-
- if(checker_runcfg.uid_len > 0)
- {
- uc_rtv = XT_Write_Field(checker_runcfg.writeuid,checker_runcfg.uid_len,XT_RunBuf);
- delay_os_ms(40);
- uc_rtv |= XT_Read_Field(checker_runcfg.writeuid,checker_runcfg.uid_len,XT_RunBuf+10);
- for(uc_count = 0; uc_count < 7; uc_count++)
- {
- if(XT_RunBuf[uc_count] != XT_RunBuf[uc_count+10])
- {
- uc_rtv |= 0x01;
- }
- }
- }else{
- uc_rtv = XT_Write_Field_All(XT_RunBuf);
- }
- Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
-}
-/*
-@brief 比对现场值
-@param0 比对网络号
-@param1 比对延时
-@param2 比对孔位
-@param3 1使能或 0失能通信反码信息采集
-@rtv1 最大反馈电流
-@rtv2 最大反馈时间
-@rtv3 最小反馈电流
-@rtv4 最小反馈时间
-*/
-
-void XT_Test_CheckRunField(void)
-{
- uint8_t uc_rtv = 0;
- uint8_t uc_count = 0;
- uint16_t aus_temp[4];
- uint32_t ul_temp;
- memset(XT_RunBuf,0,XT_CHECKER_RUN_BUF);
-
- XT_RunBuf[0] = 0xFF & (checker_runcfg.params[0] >> 8);
- XT_RunBuf[1] = 0xFF & (checker_runcfg.params[0]);
- XT_RunBuf[2] = 0;
- XT_RunBuf[3] = 0xFF & (checker_runcfg.params[1] >> 8);
- XT_RunBuf[4] = 0xFF & (checker_runcfg.params[1]);
- XT_RunBuf[5] = 0xFF & (checker_runcfg.params[2] >> 8);
- XT_RunBuf[6] = 0xFF & (checker_runcfg.params[2]);
-
-
- if(checker_runcfg.uid_len == 0)
- {
- memset(aus_temp,0,8);
- Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
- Checker_SetRtv(aus_temp,checker_runcfg.rtv_count);
- return;
- }
- if(checker_runcfg.params[3] > 0)
- {
- XT_FreeBack_Prapare(1);
- }
- uc_rtv |= XT_Read_Field(checker_runcfg.writeuid,checker_runcfg.uid_len,XT_RunBuf+10);
-
- ul_temp = Power_ConvCur(XT_FreeBackMaxCur, XTDriver_Sample_R); //通信电流
- ul_temp = (ul_temp / 10+4)/10;//0.01mA
-
- aus_temp[0] = ul_temp ;
- aus_temp[1] = (uint16_t)((((XT_ADC_SAMPLE_TIME*1000)*XT_FreeBackMaxTime)/XT_Read_AD_Sample_C+400)/1000) ;
- ul_temp = Power_ConvCur(XT_FreeBackMinCur, XTDriver_Sample_R); //通信电流
- ul_temp = (ul_temp / 10+4)/10;//0.01mA
- aus_temp[2] = ul_temp;
- aus_temp[3] = (uint16_t)((((XT_ADC_SAMPLE_TIME*1000)*XT_FreeBackMinTime)/XT_Read_AD_Sample_C+400)/1000) ;
-
- if(uc_rtv == 0)
- {
- for(uc_count = 0; uc_count < 7; uc_count++)
- {
- if(XT_RunBuf[uc_count] != XT_RunBuf[10+uc_count])
- {
- uc_rtv |= 0x01;
- }
- }
- }
- Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
- Checker_SetRtv(aus_temp,checker_runcfg.rtv_count);
-}
-
-/*
-@brief 桥丝通断检测,如果测试器有uid,将采用uid方式通信
-*/
-void XT_Test_Resister(void)
-{
- uint16_t us_rtv = 0;
- if(checker_runcfg.uid_len > 0)
- {
- us_rtv = XT_Get_UID_R(checker_runcfg.writeuid,checker_runcfg.uid_len);
- }else{
- us_rtv = XT_Get_R();
- }
- Checker_MaskResult(0,checker_runcfg.task_info.runindex);
- Checker_SetRtv(&us_rtv,checker_runcfg.rtv_count);
-}
-/*
-@brief 电容容量检测,如果测试器有uid,将采用uid方式通信
-@param0 检测电压参数
-@param1 超时时间
-@rtv0 电容容量 0.1uF
-*/
-void XT_Test_Cap(void)
-{
- uint8_t uc_rtv = 0;
- uint16_t us_temp;
- uint32_t ul_time_out = checker_runcfg.params[1] ;
- float f_cap = 0.0f;
- if(checker_runcfg.params[0] == 0)
- {
- checker_runcfg.params[0] = 0x11;//默认1V挡位
- }
- if(ul_time_out == 0)
- {
- ul_time_out = XTSingleCollectAckTimerOverflowCnt;
- }
- if(checker_runcfg.uid_len > 0)
- {
- uc_rtv = XT_Get_UID_C(checker_runcfg.writeuid,checker_runcfg.uid_len,checker_runcfg.params[0],ul_time_out,&f_cap);
- }else{
- uc_rtv = XT_Get_C(checker_runcfg.params[0],ul_time_out,&f_cap);
- }
-
- XT_Charge_All(0x00);
- Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
- us_temp = (uint16_t)(f_cap*10);
- Checker_SetRtv(&us_temp,checker_runcfg.rtv_count);
-}
-
-/*
-@brief 写管壳码 如果测试器有uid,将采用uid方式通信
-@param 命令缓存参数的起始
-@param 写入数据长度
-*/
-void XT_Test_WriteShell(void)
-{
- uint8_t uc_rtv = 0;
- uint8_t uc_count = 0;
- if((checker_runcfg.params[0] + checker_runcfg.params[1] > CHECKER_WRITE_BUF))
- {
- uc_rtv = 1;
- Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
- return;
- }
- if(CheckCRC_8(&Checker_FacBuf[2],Checker_FacBuf[0]) != Checker_FacBuf[1])
- {
- uc_rtv = 1;
- Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
- return;
- }
- memset(XT_RunBuf,0,XT_CHECKER_RUN_BUF);
- memcpy(XT_RunBuf,&Checker_FacBuf[2]+checker_runcfg.params[0],checker_runcfg.params[1]);
- uc_rtv |= XT_Write_Shell(XT_RunBuf);
- if(checker_runcfg.uid_len > 0)
- {
- uc_rtv |= XT_Read_Shell(checker_runcfg.writeuid,checker_runcfg.uid_len,XT_RunBuf+16);
- }else{
- uc_rtv |= XT_Read_Shell_All(XT_RunBuf+16);
- }
- for(uc_count = 0; uc_count < 13;uc_count++)
- {
- if(XT_RunBuf[uc_count] != XT_RunBuf[13+uc_count])
- {
- uc_rtv |= 0x01;
- }
- }
- Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
-}
-
-/*
-@brief 写UID
-@param 命令缓存参数的起始
-@param 写入数据长度
-*/
-void XT_Test_WriteUID(void)
-{
- uint8_t uc_rtv = 0;
- uint8_t uc_count = 0;
- if((checker_runcfg.params[0] + checker_runcfg.params[1] > CHECKER_WRITE_BUF))
- {
- uc_rtv = 1;
- Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
- return;
- }
- if(CheckCRC_8(&Checker_FacBuf[2],Checker_FacBuf[0]) != Checker_FacBuf[1])
- {
- uc_rtv = 1;
- Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
- return;
- }
- memset(XT_RunBuf,0,XT_CHECKER_RUN_BUF);
- if(checker_runcfg.params[1] > 13)
- {
- checker_runcfg.params[1] = 13;
- }
- memcpy(XT_RunBuf,&Checker_FacBuf[2]+checker_runcfg.params[0],checker_runcfg.params[1]);
-
- uc_rtv = XT_Write_Uid(XT_RunBuf,checker_runcfg.params[1]);
- XT_Clear_Read();
- uc_rtv |= XT_Read_Uid(XT_RunBuf+16,checker_runcfg.params[1]);
- if(uc_rtv == 0)
- {
- for(uc_count = 0; uc_count < checker_runcfg.params[1];uc_count++)
- {
- if(XT_RunBuf[uc_count] != XT_RunBuf[16+uc_count])
- {
- uc_rtv |= 0x01;
- }
- }
- }
- if(uc_rtv == 0)
- {
- checker_runcfg.uid_len = checker_runcfg.params[1];
- memcpy(checker_runcfg.writeuid,XT_RunBuf,checker_runcfg.uid_len);
- }
- Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
-}
-
-/*
-@brief 写密码
-@param 命令缓存参数的起始
-@param 写入数据长度
-*/
-void XT_Test_WritePWD(void)
-{
- uint8_t uc_rtv = 0;
- uint8_t uc_state;
- if((checker_runcfg.params[0] + checker_runcfg.params[1] > CHECKER_WRITE_BUF))
- {
- uc_rtv = 1;
- Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
- return;
- }
- if(CheckCRC_8(&Checker_FacBuf[2],Checker_FacBuf[0]) != Checker_FacBuf[1])
- {
- uc_rtv = 1;
- Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
- return;
- }
- memset(XT_RunBuf,0,XT_CHECKER_RUN_BUF);
- if(checker_runcfg.params[1] > 13)
- {
- checker_runcfg.params[1] = 13;
- }
- memcpy(XT_RunBuf,&Checker_FacBuf[2]+checker_runcfg.params[0],checker_runcfg.params[1]);
-
- uc_rtv = XT_Write_Bmid(XT_RunBuf,checker_runcfg.params[1]);
- uc_rtv |= XT_Check_Bmid(XT_RunBuf,checker_runcfg.params[1]);
- if(checker_runcfg.uid_len > 0)
- {
- memset(XT_RunBuf+16,0,8);
- uc_rtv |= XT_Read_Field(checker_runcfg.writeuid,checker_runcfg.uid_len,XT_RunBuf+16);
- uc_state = XT_RunBuf[16+7];
- if( (uc_state & 0x20) == 0)
- {
- uc_rtv = 0x01;
- }
- }
-
- if(uc_rtv == 0)
- {
- checker_runcfg.pwd_len = checker_runcfg.params[1];
- memcpy(checker_runcfg.writepwd,XT_RunBuf,checker_runcfg.pwd_len);
- }
- Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
-}
-/*
-@brief 备份区标记检测,备份区用于存储检测标记
-@param0 0备份区标记 或 1比对
-@param1 备份区数据掩码 1Bytes
-@param1 备份区写入数据 1Bytes
-
-*/
-
-void XT_Test_CheckBackFlag(void)
-{
- uint8_t uc_rtv = 0;
- uint16_t us_temp1;
- if(checker_runcfg.uid_len > 0)
- {
- uc_rtv = XT_Read_Param(checker_runcfg.writeuid,checker_runcfg.uid_len,XT_RunBuf);
- }else{
- uc_rtv = XT_Read_Param_All(XT_RunBuf);
- }
- if(uc_rtv != 0)
- {
- Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
- return;
- }
- us_temp1 = XT_RunBuf[1];
- if(checker_runcfg.params[0] == 0)
- {
- us_temp1 &= (~checker_runcfg.params[1]);
- us_temp1 |= checker_runcfg.params[2];
- XT_RunBuf[1] = 0x0FF & us_temp1;
- uc_rtv |= XT_Write_Param(XT_RunBuf);
- }
- else{
- us_temp1 = us_temp1 & checker_runcfg.params[1] ;
- if(us_temp1 != checker_runcfg.params[2])
- {
- uc_rtv = 1;
- }
- }
- Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
-}
-/*
-@brief 读取备份区数据
-@rtv0 备份区2字节
-@rtv0 备份区2字节
-*/
-void XT_Test_ReadBackFlag(void)
-{
- uint8_t uc_rtv = 0;
- uint16_t us_temp[2];
- if(checker_runcfg.uid_len > 0)
- {
- uc_rtv = XT_Read_Param(checker_runcfg.writeuid,checker_runcfg.uid_len,XT_RunBuf);
- }else{
- uc_rtv = XT_Read_Param_All(XT_RunBuf);
- }
- memcpy(us_temp,XT_RunBuf,4);
-
- Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
- Checker_SetRtv(us_temp,checker_runcfg.rtv_count);
-}
-
-/*
-@brief 时钟校准
-@param0 校准模式 1 快速 0 全
-@param1 校准周期
-@param2 校准时长
-*/
-void XT_Test_Trim(void)
-{
- uint8_t uc_rtv = 0;
- if(checker_runcfg.params[0] > 0)
- {
- XT_Trim_Faset_Cycle(checker_runcfg.params[1],checker_runcfg.params[1]>>1);
- }else{
- XT_Trim_Complete_Cycle(checker_runcfg.params[1],checker_runcfg.params[1]>>1,checker_runcfg.params[2]);
- }
- Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
-}
-
-/*
-@brief 放电
-*/
-void XT_Test_Discharge(void)
-{
- uint8_t uc_rtv = 0;
- XT_Charge_All(0x00);
- Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
-}
-
-/*
-@brief 失能通信末电流采集
-*/
-void XT_Test_EnCommEndCur(void)
-{
- XT_CommEndMaxCur = 0;
- XT_CommEnd_CurEn = 1;
- Checker_MaskResult(0,checker_runcfg.task_info.runindex);
-}
-
-/*
-@brief 获取通信末电流
-*/
-void XT_Test_GetCommEndCur(void)
-{
- XT_CommEnd_CurEn = 0;
- Checker_SetRtv(&XT_CommEndMaxCur,checker_runcfg.rtv_count);
- Checker_MaskResult(0,checker_runcfg.task_info.runindex);
-}
-
-/*
-@brief 在线检测
-@param 检测网络号
-*/
-void XT_Test_OneLineCheck(void)
-{
- uint8_t uc_rtv = 0;
- uint8_t uc_temp;
- memset(XT_RunBuf,0,XT_CHECKER_RUN_BUF);
- uc_rtv = XT_Check_Online(400,XT_RunBuf);
- if(checker_runcfg.params[0] > 400)
- {
- checker_runcfg.params[0] = 400;
- }
- if(checker_runcfg.params[1] > 400)
- {
- checker_runcfg.params[1] = 400;
- }
- if(checker_runcfg.params[0] > 0)
- checker_runcfg.params[0]--;
- uc_temp = checker_runcfg.params[0] >> 3;
- uc_temp = XT_RunBuf[uc_temp] << (checker_runcfg.params[0] & 0x07);
- if(uc_temp != 0x80)
- {
- uc_rtv = 0x01;
- }
- Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
-}
-
-/*
-@brief 状态检测,如果UID已经存在,使用UID读取。否则通过扫描的方式
-@param0 状态比较掩码
-@rtv0 与掩码后的状态值
-*/
-void XT_Test_CheckState(void)
-{
- uint8_t uc_rtv = 0;
- uint16_t us_state = 0;
- memset(XT_RunBuf,0,XT_CHECKER_RUN_BUF);
- if(checker_runcfg.uid_len > 0)
- {
- uc_rtv = XT_Read_Field(checker_runcfg.writeuid,checker_runcfg.uid_len,XT_RunBuf);
- us_state = XT_RunBuf[7];
- if((us_state & checker_runcfg.params[0]) != checker_runcfg.params[1])
- {
- uc_rtv = 1;
- }
- }else{
- uc_rtv = 1;
- us_state = 0;
- }
- Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
- Checker_SetRtv(&us_state,checker_runcfg.rtv_count);
-}
-
-/*
-@brief 起爆
-@param 起爆超时
-@param 巡检脉冲个数
-*/
-void XT_Test_Boom(void)
-{
- uint8_t uc_rtv,uc_temp;
- uint16_t us_index = 0;
- uint16_t us_count = 0;
- uint16_t us_res[2];
- uint32_t ul_maxdelay = checker_runcfg.params[0];
- memset(XT_RunBuf,0,XT_CHECKER_RUN_BUF);
- if(checker_runcfg.params[1] == 0)
- {
- checker_runcfg.params[1] = 400;
- }
- uc_rtv = XT_Check_Fire_Each(checker_runcfg.params[1],XT_RunBuf);
- for(us_index = 0; us_index < XT_CHECKER_RUN_BUF;us_index++)
- {
- if(XT_RunBuf[us_index] != 0)
- {
- uc_temp = XT_RunBuf[us_index];
- us_res[1] = us_index*8;
- while(uc_temp > 0)
- {
- us_res[1]++;
- if((uc_temp & 0x80) > 0)
- {
- us_count++;
- }
- uc_temp <<= 1;
- }
- }
- }
- if(us_count != 1)
- {
- uc_rtv = 1;
- }
- uc_rtv |= XT_Check_Fire_All();
- uc_rtv |= XT_MeasureFire(&ul_maxdelay);
- us_res[0] = (uint16_t)ul_maxdelay;
-
- Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
- Checker_SetRtv(us_res,checker_runcfg.rtv_count);
-
-
-}
-/*
-@brief 复位
-*/
-void XT_Test_Reset(void)
-{
- uint8_t uc_rtv = 0;
- XT_Reset();
- delay_os_ms(40);
- Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
-}
-/*
-@brief 关总线
-*/
-void XT_Test_PowerOFF(void)
-{
- uint8_t uc_rtv = 0;
- XT_Charge_All(0x00);
- delay_os_ms(100);
- XTBUS_OFF;
- Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
-}
-/*
-@brief 芯片锁存
-*/
-void XT_Test_LockCmdC(void)
-{
- uint8_t uc_rtv = 0;
- XT_Lock();
- delay_ms(20);
- XT_Clear_Read();
- if(0 != XT_Read_Uid(XT_RunBuf,checker_runcfg.uid_len))
- {
- uc_rtv = 0x01;
- }
- else{
- if((XT_RunBuf[checker_runcfg.uid_len+7] & 0x80) != 0x80)//锁存后是bit7 = 1;
- {
- uc_rtv = 0x01;
- }
- }
- Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
-}
-
-/*
-@brief 赋码设备失能
-*/
-
-void XT_Test_CodeBindEn(void)
-{
- uint8_t uc_rtv = 0;
- checker_runcfg.uid_pwd_bind_flag = 0xAA;
- Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
-}
-
-static uint8_t XT_Test_InputChek_(uint16_t us_count )
-{
- uint8_t uc_rtv = 0;
- uint8_t uc_flag = 0;
- uint32_t ul_timeout,ul_time;
- Power_SetSampleRange_Seep(Checker_OnLine_Sample_R,ADC_SPEED_MIDLE);
-
- ul_timeout = us_count;
- ul_timeout *= 100;
- ul_time = 0;
- Get10usCount();
- while(ul_time <= ul_timeout )
- {
- ul_time += Get10usCount();
- if(ADC_GetCurADCFast() > 25)
- {
- uc_flag++;
- if(uc_flag > 50)
- {
- if( ADC_GetBaseStableCur() > 120)
- {
- Power_SetSampleCurrentRange(Current_Max) ;
- delay_ms(2);
- ul_time += Get10usCount();
- XT_Clear_Read();
- if( 0 == XT_Read_Uid(XT_RunBuf,checker_runcfg.uid_len))
- {
- break;
- }else{
- ul_time += 250000;
- Get10usCount();//XT通信超时定时器也是使用tim2,产生通信后需要请您
- Power_SetSampleRange_Seep(Checker_OnLine_Sample_R,ADC_SPEED_MIDLE);
- delay_ms(1);
- }
-
- }else{
- Power_SetSampleRange_Seep(Checker_OnLine_Sample_R,ADC_SPEED_MIDLE);
- delay_ms(1);
- }
- }else{
- delay_ms(1);
- }
- continue;
- }else{
- delay_ms(1);
- }
- uc_flag = 0;
- }
- uc_rtv = 1;
- if(uc_flag > 50)
- {
- uc_rtv = 0;
- }
- return uc_rtv;
-}
-
-/*
-@brief 接入检测
-@param0 上电电压
-@param1 超时次数
-*/
-
-void XT_Test_InputCheck(void)
-{
- uint8_t uc_rtv = 0;
- uint16_t us_h_v = checker_runcfg.params[0];
- uint16_t us_count = checker_runcfg.params[1];
- us_h_v = checker_runcfg.params[0];
- if(us_h_v < 55)
- {
- uc_rtv = 1;
- }else{
- uc_rtv |= PowerCalibration_set(us_h_v,50);
- XTBUS_ON;
- delay_ms(100);
- us_h_v = Power_GetBousV();
- }
- uc_rtv = XT_Test_InputChek_(us_count);
- Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
- Checker_SetRtv(&us_h_v,checker_runcfg.rtv_count);
-
-}
-/*
-@brief 密码验证
-*/
-
-void XT_Test_CheckPWD(void)
-{
- uint8_t uc_rtv = 0;
- if(checker_runcfg.pwd_len == 0)
- {
- checker_runcfg.pwd_len = 7;
- }
- uc_rtv = XT_Check_Bmid(checker_runcfg.writepwd,checker_runcfg.pwd_len);
- Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
-}
-
-/*
-@brief 加载配置参数
-@rtv UID长度
-@rtv 密码长度
-@rtv 版本号
-@rtv 反码数据
-*/
-void XT_Test_LoadChipCfg(void)
-{
- uint8_t uc_rtv = 0;
- uint16_t us_temp[4];
- memset(XT_RunBuf,0,10);
- memset(us_temp,0,8);
- uc_rtv = XT_Read_Config(XT_RunBuf);
- if(uc_rtv == 0)
- {
- us_temp[0] = ((XT_RunBuf[1] >> 4) & 0x0F)+7;
- us_temp[1] = (XT_RunBuf[1] & 0x0F)+4;
- us_temp[2] = XT_RunBuf[3];
- us_temp[3] = (XT_RunBuf[2] >> 2) & 0x0F;
- checker_runcfg.uid_len = us_temp[0];
- checker_runcfg.pwd_len = us_temp[1];
- }
-
- Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
- Checker_SetRtv(us_temp,checker_runcfg.rtv_count);
-}
-
-/*
-@breif 测量电容电压差
-@param0 两次测量间隔 0.1s
-@rtv0 电压差值
-*/
-void XT_Test_CapVoltage(void)
-{
- uint16_t us_capv1;
- POWER_OFF;
- Power_SetSampleCurrentRange(Checker_OnLine_Sample_R);
- HMOS_FAST_DISCHG;
- HMOS_SWITCH_GND;
- delay_os_ms(1000);
- us_capv1 = AD_SampleCap(checker_runcfg.params[0]);
- POWER_ON;
- delay_os_ms(500);
- XTBUS_ON
- Power_SetSampleCurrentRange(Current_Max);
- Checker_MaskResult(0,checker_runcfg.task_info.runindex);
- Checker_SetRtv(&us_capv1,checker_runcfg.rtv_count);
-}
-/*
-@brief 注码检测
-@rtv 0 已经注码,1 不能注码 2 需要注码
-*/
-static uint8_t XT_Test_CheckeThreeCode(void)
-{
- uint8_t uc_index;
- /*
- 已经注码验证
- */
- XT_Check_Bmid(checker_runcfg.writepwd,checker_runcfg.pwd_len);//密码验证
- XT_Clear_Read();
- memset(XT_RunBuf,0,XT_CHECKER_RUN_BUF);
- XT_Read_Uid(XT_RunBuf,checker_runcfg.uid_len);//扫描UID
- uc_index = XT_RunBuf[checker_runcfg.uid_len+7];
- if((uc_index & 0x80) == 0x80)//已经上锁
- {
- if((uc_index & 0xA0) != 0xA0)//已经上锁,密码验证失败
- {
- return 0x01;
- }
- //已经上锁,但UID比对错误
- if(rt_memcmp(checker_runcfg.writeuid,XT_RunBuf,checker_runcfg.uid_len) != 0)
- {
- return 0x01;
- }
- //已经上锁,比对成功
- XTBUS_OFF;
- return 0;
- }
- return 2;
-}
-
-/*
-@brief 写入三码数据
-*/
-void XT_Test_UID_PWD_Bind(void)
-{
- uint8_t uc_rtv = 0;
- uint8_t uc_ack;
- uint8_t uc_count = 0;
- uint8_t uc_optbuf[16];
- uint32_t ul_write_mask = 0;
-
- if(JQXT_Test_IsNeedBind() == 0)
- {
- Checker_MaskResult(0,checker_runcfg.task_info.runindex);
- }
- uc_rtv = XT_Test_CheckeThreeCode();
- if(uc_rtv != 2)
- {
- Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
- }
- uc_rtv = XT_Write_Uid(checker_runcfg.writeuid,checker_runcfg.uid_len);
- delay_ms(40);
-
- uc_rtv |= XT_Write_Bmid(checker_runcfg.writepwd,checker_runcfg.pwd_len);
-
- Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
-}
-/*
-@brief 三码绑定验证
-@rtv 0 验证通过 1 UID验证不通过 2 密码验证不通过
-*/
-static uint8_t XT_Test_UID_PWD_Verify_(void)
-{
- uint8_t uc_rtv = 0;
- uint8_t uc_state;
- XT_Check_Bmid(checker_runcfg.writepwd,checker_runcfg.pwd_len);
- XT_Clear_Read();
- memset(XT_RunBuf,0,XT_CHECKER_RUN_BUF);
- XT_Read_Uid(XT_RunBuf,checker_runcfg.uid_len);
- uc_rtv = rt_memcmp(checker_runcfg.writeuid , XT_RunBuf,checker_runcfg.uid_len);
- if(uc_rtv != 0)
- {
- return 0x01;
- }
- uc_state = XT_RunBuf[checker_runcfg.uid_len+7];
- if((uc_state & 0x20) == 0)
- {
- uc_rtv = 0x02;
- }
- return uc_rtv;
-}
-
-/*
-@brief 三码绑定验证
-*/
-void XT_Test_UID_PWD_Verify(void)
-{
- uint8_t uc_rtv = XT_Test_UID_PWD_Verify_();
- if(uc_rtv != 0)
- {
- uc_rtv = 0x01;
- }
- Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
-}
-
-
-/*
-@breif 在线检测 并扫描通信
-@param0 总线电压
-@param1 超时时间1ms 最大6S
-@param2 UID长度
-*/
-
-void XT_OnLine_SCAN(void)
-{
- uint16_t us_h_v;
- uint8_t uc_rtv = 0;
- PowerCalibration_set(checker_runcfg.params[0],50);
- XTBUS_ON;
- delay_os_ms(100);
- us_h_v = Power_GetBousV();
- if((us_h_v > (checker_runcfg.params[0]+5)) || (us_h_v < (checker_runcfg.params[0]-5)))
- {
- XTBUS_OFF;
- Checker_MaskResult(1,checker_runcfg.task_info.runindex);
- Checker_SetRtv(&us_h_v,checker_runcfg.rtv_count);
- }
- if(0 != XT_Test_InputChek_(checker_runcfg.params[1]))
- {
- XTBUS_OFF;
- Checker_MaskResult(1,checker_runcfg.task_info.runindex);
- Checker_SetRtv(&us_h_v,checker_runcfg.rtv_count);
- }
- delay_ms(10);
- XT_Init(0x78);
- XT_Clear_Read();
- memset(XT_RunBuf,0,XT_CHECKER_RUN_BUF);
- if(checker_runcfg.params[2] == 0)
- {
- Checker_MaskResult(0,checker_runcfg.task_info.runindex);
- Checker_SetRtv(&us_h_v,checker_runcfg.rtv_count);
- return;
- }
- uc_rtv = XT_Read_Uid(XT_RunBuf,checker_runcfg.params[2]);
- Checker_MaskResult(1,checker_runcfg.task_info.runindex);
- Checker_SetRtv(&us_h_v,checker_runcfg.rtv_count);
-
-}
-
-/*
-@brief 芯片离线检测
-@param0 超时时间 1ms
-@param1 离线电流 0.1uA
-@param2 稳定次数
-*/
-
-void XT_OFFLine_SCAN(void)
-{
- uint32_t ul_timeout = checker_runcfg.params[0];
- uint16_t us_cur = checker_runcfg.params[1];
- uint16_t us_count = checker_runcfg.params[2];
- uint16_t us_temp = 0,ul_time = 0;
- ul_timeout *= 1000;
- Get1usCount();
- while((us_temp < us_count) && (ul_time < ul_timeout))
- {
- ul_time += Get1usCount();
- if(us_cur >= ADC_GetBaseStableCur())
- {
- us_temp++;
- continue;
- }
- us_temp = 0;
- }
- if(us_temp >= us_count)
- {
- Checker_MaskResult(0,checker_runcfg.task_info.runindex);
- }
- Checker_MaskResult(1,checker_runcfg.task_info.runindex);
-}
-
-/*
-@brief 芯片离线检测
-@param0 充电使能
-@param1 采样周期 10ms
-@param2 采样次数
-*/
-
-void XT_CurMonitor(void)
-{
- uint16_t us_charge_en = checker_runcfg.params[0];
- uint32_t ul_timeout = checker_runcfg.params[1];
- uint16_t us_count = checker_runcfg.params[2];
- uint16_t us_temp = 0,ul_time = 0;
- uint32_t ul_runTimer = 0,ul_cur,ul_1sCount;
- ul_timeout *= 1000;
- if(us_charge_en > 0)
- {
- XT_Charge_All(us_charge_en);
- }
- while(us_count > 0)
- {
- Get1usCount();
- // ul_cur = Power_GetCurrent();
- ul_cur = (uint32_t) (Get_Temperature()*100);
- printf("CurM %d\r\n",ul_cur);
- ul_runTimer= Get1usCount();
-
- if((ul_runTimer+5) > ul_timeout)
- {
- continue;
- }
- ul_runTimer = ul_timeout - ul_timeout -5;
- ul_1sCount = ul_runTimer / 1000000;
- ul_runTimer = ul_runTimer - ul_1sCount*1000000;
- while(ul_1sCount > 0)
- {
- delay_us(1000000);
- }
- delay_us(ul_runTimer);
- }
- Checker_MaskResult(0,checker_runcfg.task_info.runindex);
-}
-
-
-
-CheckerTask xttaskArray[CHECKER_MAXID_COUNT] ={
-Checker_PowerPrapare, //0 电源准备
-XT_Test_PowerOn, //1 上电充能
-XT_Test_SetBusV, //2 设置总线电压
-XT_Test_BaseCur, //3 获取总线电流
-XT_Test_ScanUID, //4 扫描UID
-XT_Test_WriteChipCfg, //5 写配置参数
-XT_Test_CheckChipCfg, //6 验证配置
-XT_Test_BindTestCode, //7 模拟注码
-XT_Test_ChgEnergy, //8 充能统计
-XT_Test_WriteRunField,//9 写现场值 网络id 延时
-XT_Test_CheckRunField,//10比对现场值
-XT_Test_Resister ,//11 桥丝通断检测
-XT_Test_Cap ,//12 电容容量统计
-Checker_WaitDelay ,//13 延时等待
-XT_Test_WriteShell ,//14 写管壳号/工厂信息
-XT_Test_WriteUID ,//15 写UID
-XT_Test_WritePWD ,//16 写密码
-XT_Test_CheckBackFlag ,//17 写入/检测备份区标志
-XT_Test_ReadBackFlag ,//18 读取备份区数据
-XT_Test_Trim ,//19 校准
-XT_Test_EnCommEndCur ,//20 使能通讯末电流采集
-XT_Test_GetCommEndCur ,//21 获取通讯末电流
-XT_Test_Discharge ,//22 放电
-XT_Test_OneLineCheck ,//23 在线检测
-XT_Test_CheckState ,//24 状态检测
-XT_Test_Boom ,//25 起爆
-XT_Test_Reset ,//26 复位
-XT_Test_PowerOFF ,//27 关总线
-XT_Test_LockCmdC ,//28 芯片锁存
-XT_Test_CodeBindEn ,//29 使能赋码设备
-XT_Test_InputCheck ,//30 在线检测
-XT_Test_CheckPWD ,//31 密码验证
-XT_Test_LoadChipCfg ,//32 加载芯片配置
-XT_Test_CapVoltage ,//33 电容压差测试
-Checker_ResistorSample,//34 桥丝电阻测试
-XT_Test_UID_PWD_Bind ,//35 检测过程中注码
-XT_Test_UID_PWD_Verify,//36 验证注码
-XT_OnLine_SCAN ,//37 模块在线检测
-(void*)0 //数组结束
-};
-
-/*
-@brief 三码写入
-@rtv 0 执行成功
- 1 电压设置失败
- 3 UID写入失败
- 4 密码写入失败
- 5 获取UID失败
- 6 UID写入失败
- 7 锁存失败
- 8 等待接入超时
- 9 已经其他数据
-*/
-
-uint8_t XT_UID_PWD_Bind(void)
-{
- uint16_t us_h_v;
- uint8_t uc_index = 0, uc_rtv = 0;
- // 雷管厂代码为0时不锁定
- uint8_t lock=checker_runcfg.writeuid[1];
- uint8_t stat_check=0x20;
- ThreeBindResult_flag = 0x00;
- if(checker_runcfg.uid_pwd_bind_flag != 0xAA)
- {
- PowerCalibration_set(Checker_First_Set_Voltage,50);
- XTBUS_ON;
- delay_os_ms(100);
- us_h_v = Power_GetBousV();
- if((us_h_v > (Checker_First_Set_Voltage+5)) || (us_h_v < (Checker_First_Set_Voltage-5)))
- {
- XTBUS_OFF;
- return 1;
- }
-
- if(0 != XT_Test_InputChek_(2000))
- {
- XTBUS_OFF;
- return 8;
- }
- delay_ms(10);
- XT_Init(0x78);
- delay_ms(10);
- }
- /*
- 已经注码验证
- */
- uc_rtv = XT_Test_CheckeThreeCode();
- if(uc_rtv == 0)
- {
- XTBUS_OFF;
- ThreeBindResult_flag = 0x55;
- return 0x55;
- }
- else if(uc_rtv == 1)
- {
- XTBUS_OFF;
- return 0x09;
- }
-
- XT_Write_Uid(checker_runcfg.writeuid,checker_runcfg.uid_len);
- delay_ms(40);
-
- XT_Write_Bmid(checker_runcfg.writepwd,checker_runcfg.pwd_len);
- delay_ms(40);
-
- uc_rtv = XT_Test_UID_PWD_Verify_();
- if(uc_rtv == 0x01)
- {
-
- XTBUS_OFF;
- return 2;
- }else if(uc_rtv == 0x02)
- {
- XTBUS_OFF;
- return 4;
- }
-
-
- if(lock){
- //设置电流挡位0x11 1档。锁定前必须执行该命令
- XT_Set_Current(0x11);
- delay_ms(30);
- XT_Lock();
- delay_ms(40);
- stat_check=0xa0;//锁存后是0xa0
- }
- XT_Clear_Read();
- if(0 != XT_Read_Uid(XT_RunBuf,checker_runcfg.uid_len))
- {
- XTBUS_OFF;
- return 5;//扫描UID不存在
- }
- uc_rtv = rt_memcmp(checker_runcfg.writeuid,XT_RunBuf,checker_runcfg.uid_len);
- if(uc_rtv != 0)
- {
- XTBUS_OFF;
- return 6;
- }
- uc_index = XT_RunBuf[checker_runcfg.uid_len+7];
- if((uc_index & stat_check) != stat_check)
- {
- XTBUS_OFF;
- return 7;
- }
- ThreeBindResult_flag = 0x55;
- XTBUS_OFF;
- return 0x55;
-}
diff --git a/source/elec_det/interface/XTChecker.h b/source/elec_det/interface/XTChecker.h
deleted file mode 100644
index c492f1d..0000000
--- a/source/elec_det/interface/XTChecker.h
+++ /dev/null
@@ -1,250 +0,0 @@
-#ifndef XTCHECKER_H_
-#define XTCHECKER_H_
-#include "base/define.h"
-#include "basechecker.h"
-
-extern Checker_RunCfg_st checker_runcfg;
-extern CheckerTask xttaskArray[CHECKER_MAXID_COUNT] ;
-/*
-@brief 统计模块的上电充能,具有电压设置功能,采集档位 R10_0p1mA_1p6mA_UC
-@param1 总线电压
-@param2 充电结束时的AD值
-@rtv1 返回总线电流低于设置AD值的时间
-*/
-void XT_Test_PowerOn(void);
-/*
-@brief 设置总线电压
-@param1 总线电压
-@rtv1 总线电压
-*/
-void XT_Test_SetBusV(void);
-/*
-@brief 测量总线基本电压
-@rtv1 返回总线电流 单位0.01uA
-*/
-void XT_Test_BaseCur(void);
-/*
-@brief 扫描总线上的电子模块 1发
-@param0 UID长度
-@param1 使能或失能 UID对比
-*/
-
-void XT_Test_ScanUID(void);
-/*
-@brief 写芯片配置
-@param0 UID长度
-@param1 密码长度
-@param2 反馈电流挡位
-@param4 版本标识
-@rtv 芯片配置3字节
-*/
-void XT_Test_WriteChipCfg(void);
-/*
-@brief 读取芯片配置并比对
-@param0 UID长度
-@param1 密码长度
-@param2 反馈电流挡位
-@param4 版本标识
-*/
-void XT_Test_CheckChipCfg(void);
-/*
-@brief 模拟注码
-*/
-void XT_Test_BindTestCode(void);
-/*
-@brief 充能统计
-@param0 充电电流判线值,AD值
-@param1 充电末电流结束值,单位0.1uA
-@param2 充电最长时间,单位100ms
-@param3 充电高压保持时间,单位0.1s
-@param4 充电挡位
-@rtv0 充能值 单位0.1ms
-@rtv1 充末电流 单位0.1uA
-@rtv2 充电最大电流 单位0.1Ma
-@rtv3 充电抖动幅值 adv
-*/
-
-void XT_Test_ChgEnergy(void);
-/*
-@brief 写现场值,如果UID已经写入,会将现场值读取进行比对
-@param 0 编号
-@param 1 延时
-@param 2 孔号
-*/
-
-void XT_Test_WriteRunField(void);
-/*
-@brief 比对现场值
-@param0 比对网络号
-@param1 比对延时
-@param2 比对孔位
-@param3 1使能或 0失能通信反码信息采集
-@rtv1 最大反馈电流
-@rtv2 最大反馈时间
-@rtv3 最小反馈电流
-@rtv4 最小反馈时间
-*/
-
-void XT_Test_CheckRunField(void);
-/*
-@brief 桥丝通断检测,如果测试器有uid,将采用uid方式通信
-*/
-void XT_Test_Resister(void);
-/*
-@brief 电容容量检测,如果测试器有uid,将采用uid方式通信
-@pram 检测电压参数
-*/
-void XT_Test_Cap(void);
-/*
-@brief 写管壳码 如果测试器有uid,将采用uid方式通信
-@param 命令缓存参数的起始
-@param 写入数据长度
-*/
-void XT_Test_WriteShell(void);
-/*
-@brief 写UID
-@param 命令缓存参数的起始
-@param 写入数据长度
-*/
-void XT_Test_WriteUID(void);
-/*
-@brief 写密码
-@param 命令缓存参数的起始
-@param 写入数据长度
-*/
-void XT_Test_WritePWD(void);
-/*
-@brief 备份区标记检测,备份区用于存储检测标记
-@param0 0备份区标记 或 1比对
-@param1 备份区数据掩码 2Bytes
-@param1 备份区写入数据 2Bytes
-
-*/
-
-void XT_Test_CheckBackFlag(void);
-/*
-@brief 备份区标记检测,备份区用于存储检测标记
-*/
-void XT_Test_ReadBackFlag(void);
-/*
-@brief 时钟校准
-@param0 校准模式 1 快速 0 全
-@param1 校准周期
-@param2 校准时长
-*/
-void XT_Test_Trim(void);
-/*
-@brief 放电
-*/
-void XT_Test_Discharge(void);
-
-/*
-@brief 失能通信末电流采集
-*/
-void XT_Test_EnCommEndCur(void);
-/*
-@brief 获取通信末电流
-*/
-void XT_Test_GetCommEndCur(void);
-/*
-@brief 在线检测
-@param 检测网络号
-*/
-void XT_Test_OneLineCheck(void);
-/*
-@brief 状态检测,如果UID已经存在,使用UID读取。否则通过扫描的方式
-@param0 状态比较掩码
-*/
-void XT_Test_CheckState(void);
-/*
-@brief 起爆
-*/
-void XT_Test_Boom(void);
-/*
-@brief 复位
-*/
-void XT_Test_Reset(void);
-/*
-@brief 关总线
-*/
-void XT_Test_PowerOFF(void);
-/*
-@brief 芯片锁存
-*/
-void XT_Test_LockCmdC(void);
-/*
-@brief 赋码设备失能
-*/
-
-void XT_Test_CodeBindEn(void);
-/*
-@brief 接入检测
-@param0 上电电压
-@param1 超时次数
-*/
-void XT_Test_InputCheck(void);
-/*
-@brief 密码验证
-*/
-
-void XT_Test_CheckPWD(void);
-/*
-@brief 三码写入
-@rtv 0 执行成功
- 1 电压设置失败
- 3 UID写入失败
- 4 密码写入失败
- 5 获取UID失败
- 6 UID写入失败
- 7 锁存失败
- 8 等待接入超时
-*/
-
-uint8_t XT_UID_PWD_Bind(void);
-/*
-@brief 加载配置参数
-@rtv UID长度
-@rtv 密码长度
-@rtv 版本号
-@rtv 反码数据
-*/
-void XT_Test_LoadChipCfg(void);
-/*
-@breif 测量电容电压差
-@param0 两次测量间隔 0.1s
-@rtv0 电压差值
-*/
-void XT_Test_CapVoltage(void);
-/*
-@brief 三码绑定验证
-*/
-void XT_Test_UID_PWD_Verify(void);
-/*
-@brief 写入三码数据
-*/
-void XT_Test_UID_PWD_Bind(void);
-/*
-@breif 在线检测 并扫描通信
-@param0 总线电压
-@param1 超时时间1ms 最大6S
-@param2 UID长度
-*/
-
-void XT_OnLine_SCAN(void);
-/*
-@brief 芯片离线检测
-@param0 超时时间 1ms
-@param1 离线电流 0.1uA
-@param2 稳定次数
-*/
-
-void XT_OFFLine_SCAN(void);
-/*
-@brief 芯片离线检测
-@param0 充电使能
-@param1 采样周期 10ms
-@param2 采样次数
-*/
-
-void XT_CurMonitor(void);
-#endif
diff --git a/source/interface/if_can.c b/source/interface/if_can.c
deleted file mode 100644
index 0b9dc9f..0000000
--- a/source/interface/if_can.c
+++ /dev/null
@@ -1,435 +0,0 @@
-#include "if_can.h"
-#include "rtthread.h"
-#include "rthw.h"
-#include "elec_det.h"
-#include "board.h"
-CanRxMsg receive_message;
-static YeCanRxFrame_st canrx_st;
-static uint8_t Can_Device_ID = 0;
-static uint32_t GetCanFilter(YeCanID_un yeid);
-uint32_t ul_exid,ul_can_mask;
-
-rt_mutex_t can_tx_mutex;
-
-volatile uint8_t CAN0_TX_BUSY_Flag = 0;
-/*
-@brief CAN通讯初始化, 包括CANgpio 过滤器
-*/
-void YeCanInit(void)
-{
- uint32_t ul_filter,ul_mask;
- CAN_InitTypeDef CAN_InitStructure;
- GPIO_InitTypeDef GPIO_InitStructure;
- YeCanID_un yeid_un;
- CAN_FilterInitTypeDef CAN_FilterInitStructure;
-
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
- //CAN GPIO 初始化
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(GPIOA, &GPIO_InitStructure);
-
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(GPIOA, &GPIO_InitStructure);
-
- CAN_DeInit(CAN1);
- CAN_StructInit(&CAN_InitStructure);
- CAN_InitStructure.CAN_TTCM = DISABLE;
- CAN_InitStructure.CAN_ABOM = DISABLE;
- CAN_InitStructure.CAN_AWUM = DISABLE;
- CAN_InitStructure.CAN_NART = DISABLE;
- CAN_InitStructure.CAN_RFLM = DISABLE;
- CAN_InitStructure.CAN_TXFP = ENABLE;
- CAN_InitStructure.CAN_Mode = CAN_Mode_Normal;
- CAN_InitStructure.CAN_SJW = CAN_SJW_1tq;
- CAN_InitStructure.CAN_BS1 = CAN_BS1_3tq;
- CAN_InitStructure.CAN_BS2 = CAN_BS2_2tq;
- CAN_InitStructure.CAN_Prescaler = 30;
-
- CAN_Init(CAN1, &CAN_InitStructure);
-
- Can_Device_ID = elec_local_addr();
-
- yeid_un.Exide = 0;
- yeid_un.yecanid.ACK = 0;
- yeid_un.yecanid.FunClass = 0;
- yeid_un.yecanid.Reserve1 = 0;
- yeid_un.yecanid.Reserve0 = 0;
- yeid_un.yecanid.SegFlag = 0;
- yeid_un.yecanid.SegNum = 0;
- yeid_un.yecanid.srcMACID = 0x00;
-
- yeid_un.yecanid.destMACID = 0x1F;
- ul_mask = GetCanFilter(yeid_un);
- ul_can_mask =ul_mask;
- yeid_un.yecanid.destMACID = Can_Device_ID;
- ul_filter = GetCanFilter(yeid_un);
-
- CAN_FilterInitStructure.CAN_FilterNumber = 0;
- CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdMask;
- CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_32bit;
- CAN_FilterInitStructure.CAN_FilterIdHigh = (ul_filter >> 16) & 0x0FFFF;;
- CAN_FilterInitStructure.CAN_FilterIdLow = ul_filter & 0x0FFFF;;
- CAN_FilterInitStructure.CAN_FilterMaskIdHigh = (ul_mask >> 16) & 0x0FFFF;;
- CAN_FilterInitStructure.CAN_FilterMaskIdLow = ul_mask & 0x0FFFF; ;
- CAN_FilterInitStructure.CAN_FilterFIFOAssignment = CAN_FIFO0;
- CAN_FilterInitStructure.CAN_FilterActivation = ENABLE;
- CAN_FilterInit(&CAN_FilterInitStructure);
-
- yeid_un.yecanid.destMACID = 0x1E;
- ul_filter = GetCanFilter(yeid_un);
- CAN_FilterInitStructure.CAN_FilterNumber = 1;
- CAN_FilterInitStructure.CAN_FilterIdHigh = (ul_filter >> 16) & 0x0FFFF;;
- CAN_FilterInitStructure.CAN_FilterIdLow = ul_filter & 0x0FFFF;;
- CAN_FilterInit(&CAN_FilterInitStructure);
-
- yeid_un.yecanid.destMACID = 0x1F;
- ul_filter = GetCanFilter(yeid_un);
- CAN_FilterInitStructure.CAN_FilterNumber = 2;
- CAN_FilterInitStructure.CAN_FilterIdHigh = (ul_filter >> 16) & 0x0FFFF;;
- CAN_FilterInitStructure.CAN_FilterIdLow = ul_filter & 0x0FFFF;;
- CAN_FilterInit(&CAN_FilterInitStructure);
-
-
- CAN_OperatingModeRequest(CAN1,CAN_OperatingMode_Normal);
-
- NVIC_InitTypeDef NVIC_InitStructure;
-
- NVIC_InitStructure.NVIC_IRQChannel = USB_LP_CAN1_RX0_IRQn;
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 4;
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
- NVIC_Init(&NVIC_InitStructure);
-
- CAN_ClearITPendingBit(CAN1, CAN_IT_FMP0);
- CAN_ITConfig(CAN1, CAN_IT_FMP0, ENABLE);
- can_tx_mutex = rt_mutex_create ("can0_tx_mutex",RT_IPC_FLAG_PRIO);
-
-}
-/*
-@brief 根据设置CAN 的ID协议,获取帧过滤值
-*/
-static uint32_t GetCanFilter(YeCanID_un yeid)
-{
- uint32_t filter = 0;
- filter = yeid.Exide << 3;
- filter |= 0x04;//只接收扩展帧
- filter &= ~((uint32_t)0x003);//不限定帧类型
- return filter;
-}
-/*
-@brief CAN发送通讯帧
-@param 源地址
-@param 主机地址
-@param 发送数据缓存
-@param 发送数据长度
-@rtv 0 成功 1 失败
-*/
-uint8_t YeCan_SendFrame(uint8_t srcaddr,uint8_t dstaddr,const uint8_t* txdata, uint16_t len)
-{
- CanTxMsg transmit_message;
- uint8_t mailbox_number;
- YeCanID_un yeid_un;
- uint32_t time_out = 0;
- uint8_t uc_rtv = 0;
- //can_transmission_stop(CAN1,0);
- /* initialize transmit message */
- transmit_message.ExtId = 0x00;
- transmit_message.StdId = 0x00;
- transmit_message.RTR = CAN_RTR_DATA;
- transmit_message.IDE = CAN_ID_EXT;
- yeid_un.Exide = 0;
- yeid_un.yecanid.srcMACID = srcaddr;
- yeid_un.yecanid.destMACID = dstaddr;
- yeid_un.yecanid.ACK = 0;
- yeid_un.yecanid.FunClass = 1;
- yeid_un.yecanid.SegFlag = 0;
- yeid_un.yecanid.SegNum = 0;
- if(srcaddr == 0x00 || srcaddr == 0x1f)
- {
- time_out = 0;
- while(time_out < 5)
- {
- elec_led1_power(0);
- rt_thread_mdelay(50);
- elec_led1_power(1);
- rt_thread_mdelay(50);
- time_out++;
-
- }
- }
- if(can_tx_mutex != RT_NULL)
- {
- if(RT_EOK != rt_mutex_take (can_tx_mutex,500))
- {
- return 1;
- }
- }
- if(len <= 8)
- {
- transmit_message.DLC = len;
- transmit_message.ExtId = yeid_un.Exide;
- memcpy(transmit_message.Data,txdata,8);
-
- mailbox_number = CAN_Transmit(CAN1, &transmit_message);
- time_out = 5000;
- while( CAN_TxStatus_Ok != CAN_TransmitStatus(CAN1,mailbox_number) && time_out > 0)
- {
- time_out --;
- rt_hw_us_delay(20);
- }
- if(time_out == 0)
- {
- uc_rtv = 1;
- goto can0_tx_end;
- }
- goto can0_tx_end;
- }
- while(len > 8)
- {
- memcpy(transmit_message.Data,txdata,8);
- len -= 8;
- txdata += 8;
-
- if(yeid_un.yecanid.SegNum == 0)
- {
- yeid_un.yecanid.SegFlag = 0x01;
- }else
- {
- yeid_un.yecanid.SegFlag = 0x02;
- }
- transmit_message.ExtId = yeid_un.Exide;
- transmit_message.DLC = 8;
- mailbox_number = CAN_Transmit(CAN1, &transmit_message);
- time_out = 5000;
- while( CAN_TxStatus_Ok != CAN_TransmitStatus(CAN1,mailbox_number) && time_out > 0)
- {
- time_out --;
- rt_hw_us_delay(20);
- }
- if(time_out == 0)
- {
- uc_rtv = 1;
- goto can0_tx_end;
- }
- yeid_un.yecanid.SegNum ++;
- }
- yeid_un.yecanid.SegFlag = 0x3;
- memcpy(transmit_message.Data,txdata,len);
- transmit_message.DLC = len;
- transmit_message.ExtId = yeid_un.Exide;
- mailbox_number = CAN_Transmit(CAN1, &transmit_message);
- time_out = 5000;
- while(CAN_TxStatus_Ok != CAN_TransmitStatus(CAN1,mailbox_number) && time_out > 0)
- {
-
- time_out --;
- rt_hw_us_delay(20);
- }
- if(time_out == 0)
- {
-
- uc_rtv = 1;
- }
-
-can0_tx_end:
- CAN0_TX_BUSY_Flag = 0;
- rt_mutex_release(can_tx_mutex);
- return uc_rtv;
-}
-
-
-typedef struct{
- void (*end_irq)(void *t,uint32_t len);
- void *t;
- uint32_t rx_buff_size;
-}self_def;
-
-static self_def g_self;
-
-
-
-
-static void save_data(void)
-{
- YeCanID_un yeid_un;
- if(receive_message.DLC > 0)
- {
- yeid_un.Exide = receive_message.ExtId;
- ul_exid = yeid_un.Exide << 3;
- ul_exid &= ul_can_mask;
- if(yeid_un.yecanid.SegFlag == 00)
- {
- memcpy(canrx_st.rx_databuf,receive_message.Data,receive_message.DLC);
- canrx_st.rx_index = receive_message.DLC;
- g_self.end_irq(g_self.t,canrx_st.rx_index);
- }
- else if(yeid_un.yecanid.SegFlag == 0x01)
- {
- canrx_st.seg_num = 0;
- memcpy(canrx_st.rx_databuf,receive_message.Data,receive_message.DLC);
- canrx_st.rx_index = receive_message.DLC;
- }else if(yeid_un.yecanid.SegFlag == 0x02)
- {
- if((canrx_st.seg_num+1) == yeid_un.yecanid.SegNum )
- {
- canrx_st.seg_num++;
- memcpy(canrx_st.rx_databuf+canrx_st.rx_index,receive_message.Data,receive_message.DLC);
- canrx_st.rx_index += receive_message.DLC;
-
- }else{
- //error
- }
- }else if(yeid_un.yecanid.SegFlag == 0x03)
- {
- memcpy(canrx_st.rx_databuf+canrx_st.rx_index,receive_message.Data,receive_message.DLC);
- canrx_st.rx_index += receive_message.DLC;
- g_self.end_irq(g_self.t,canrx_st.rx_index);
- }
- }
-}
-
-
-
-void USB_LP_CAN1_RX0_IRQHandler(void)
-{
- rt_interrupt_enter();
- CAN_Receive(CAN1, CAN_FIFO0, &receive_message);
- if(g_self.end_irq&&canrx_st.rx_databuf){
- save_data();
- }
- CAN_ClearITPendingBit(CAN1, CAN_IT_FMP0);
- rt_interrupt_leave();
-}
-
-
-
-
-
-
-static int init(uart_def *u,int bsp)
-{
- YeCanInit();
- return 0;
-}
-static int deinit(uart_def *u)
-{
- return 0;
-}
-static int set_irq(uart_def *u,void (*irq)(void *t,uint8_t d),void *t)
-{
- return 0;
-}
-static int set_end_irq(uart_def *u,uint8_t *rx_buff,int rx_buff_size,
- void (*irq)(void *t,uint32_t len),void *t)
-{
- irq_disable();
- g_self.end_irq=irq;
- canrx_st.rx_databuf=rx_buff;
- g_self.rx_buff_size=rx_buff_size;
- g_self.t=t;
- irq_enable();
- return 0;
-}
-static int read(uart_def *u,uint8_t *b,int len)
-{
- return 0;
-}
-static int write(uart_def *u,const uint8_t *b,int len)
-{
- uint8_t src=b[4];
- uint8_t dst=b[5];
- uint8_t ret;
- ret=YeCan_SendFrame(src,dst,b,len);
- if(ret==0) return len;
- else return 0;
-}
-
-uart_init_export(can,init,deinit,set_irq,set_end_irq,read,write,0)
-
-
-
-
-typedef struct{
- uart_def *dev[2];
- int dev_index;
- int inited;
- void (*end_irq)(void *t,uint32_t len);
- void *t;
-}h_self_def;
-
-static h_self_def g_hself;
-
-static int h_init(uart_def *u,int bsp)
-{
- h_self_def *h=&g_hself;
- if(h->inited) return 0;
- h->dev[0]=dev_get("uart1");
- h->dev[1]=dev_get("can");
- h->dev[0]->init(h->dev[0],0);
- h->dev[1]->init(h->dev[1],0);
- return 0;
-}
-
-static int h_deinit(uart_def *u)
-{
- return 0;
-}
-
-
-static int h_set_irq(uart_def *u,void (*irq)(void *t,uint8_t d),void *t)
-{
- return 0;
-}
-static void h_end_irq0(void *t,uint32_t len)
-{
- h_self_def *h=&g_hself;
- h->dev_index=0;
- if(h->end_irq)
- {
- h->end_irq(h->t,len);
- }
-}
-static void h_end_irq1(void *t,uint32_t len)
-{
- h_self_def *h=&g_hself;
- h->dev_index=1;
- if(h->end_irq)
- {
- h->end_irq(h->t,len);
- }
-}
-static int h_set_end_irq(uart_def *u,uint8_t *rx_buff,int rx_buff_size,
- void (*irq)(void *t,uint32_t len),void *t)
-{
- h_self_def *h=&g_hself;
- irq_disable();
- h->end_irq=irq;
- h->t=t;
- irq_enable();
- h->dev[0]->set_end_irq(h->dev[0],rx_buff,rx_buff_size,h_end_irq0,h);
- h->dev[1]->set_end_irq(h->dev[1],rx_buff,rx_buff_size,h_end_irq1,h);
- return 0;
-}
-static int h_read(uart_def *u,uint8_t *b,int len)
-{
- return 0;
-}
-static int h_write(uart_def *u,const uint8_t *b,int len)
-{
- h_self_def *h=&g_hself;
- uart_def *s=h->dev[h->dev_index];
- return s->write(s,b,len);
-}
-
-
-uart_init_export(host,h_init,h_deinit,h_set_irq,h_set_end_irq,h_read,h_write,0)
-
-
-
-
diff --git a/source/interface/if_can.h b/source/interface/if_can.h
deleted file mode 100644
index eab95da..0000000
--- a/source/interface/if_can.h
+++ /dev/null
@@ -1,50 +0,0 @@
-#ifndef if_can_h__
-#define if_can_h__
-
-//#include "define.h"
-#include "stm32f10x_can.h"
-
-typedef struct{
- uint32_t Reserve1 :3;
- uint32_t srcMACID :5;
- uint32_t Reserve0 :2;
- uint32_t destMACID :5;
- uint32_t ACK :1;
- uint32_t FunClass :6;
- uint32_t SegFlag :2;
- uint32_t SegNum :8;
-
-}YeCanID_st;
-
-typedef union{
- uint32_t Exide;
- YeCanID_st yecanid;
-}YeCanID_un;
-
-
-
-typedef struct{
-
- uint8_t *rx_databuf; //接收数据缓存
- uint8_t seg_num; //分段号
- uint8_t seg_flag;//分段标志
- uint16_t rx_index;//接收缓存下标
-}YeCanRxFrame_st;
-
-extern volatile uint8_t CAN0_TX_BUSY_Flag;
-
-/*
-@brief CAN通讯初始化, 包括CANgpio 过滤器
-*/
-void YeCanInit(void);
-/*
-@brief CAN发送通讯帧
-@param 源地址
-@param 主机地址
-@param 发送数据缓存
-@param 发送数据长度
-@rtv 0 成功 1 失败
-*/
-uint8_t YeCan_SendFrame(uint8_t srcaddr,uint8_t dstaddr,const uint8_t* txdata, uint16_t len);
-
-#endif
diff --git a/source/main/compiler_info.h b/source/main/compiler_info.h
index 254cf00..c1b5fc1 100644
--- a/source/main/compiler_info.h
+++ b/source/main/compiler_info.h
@@ -6,7 +6,7 @@
-#define BUILD_DATE "2023-10-06 18:40:44"
+#define BUILD_DATE "2023-09-20 17:48:39"
#define SOFT_VERSION "0.03"
diff --git a/source/main/main.c b/source/main/main.c
index 72d8d64..7535abc 100644
--- a/source/main/main.c
+++ b/source/main/main.c
@@ -12,6 +12,7 @@
#include "signal.h"
#include "prot_mcu.h"
#include "debug.h"
+#include "handle.h"
#include "prot_uc.h"
#include "transmit.h"
#include "commend.h"
@@ -19,6 +20,7 @@
#include "mymisc.h"
#include "dev_backup.h"
#include "compiler_info.h"
+#include "moter.h"
@@ -119,9 +121,70 @@ commend_export(scheme,scheme_info,"print scheme info")
+typedef struct{
+ int updata_run;
+}updata_def;
+static updata_def g_updata;
+static int updata_slave(list_def *argv)
+{
+ void *ptr=flash_get_slave();
+ tran_def *tran=app_variable("tran",0,0);
+ uint8_t *data=ptr;
+ data+=FLASH_FILE_HEAD_SIZE;
+ flash_file *file=ptr;
+ if(tran==0){
+ DBG_WARN("can not find variable \"tran\"");
+ return -1;
+ }
+ if(list_length(argv)<2){
+ cmd_print("param num too less.");
+ return -1;
+ }
+ list_def *addrs=str_atod_list(list_get_str(argv,1),',');
+ for(int i=0;ifile_size));
+ g_updata.updata_run++;
+ }
+ }
+ cmd_print("start updata,addr=%s",str_temp(list_string(addrs)));
+ return 0;
+}
+
+static void cmd_end_slot(void *obj,port_mcu *src,void *data,int ack,char *err_str)
+{
+ updata_def *self=obj;
+ if(self->updata_run>0)
+ {
+ cmd_print("addr:%d %s",port_get_addr(src),err_str);
+ self->updata_run--;
+ }
+}
+// 挂载命令行槽函数
+static int cmd_slot_init(void)
+{
+ void *tr=app_variable("tran",0,0);
+ if(tr){
+ for(int i=0;i<20;i++){
+ port_mcu *mcu=tran_get_portm(tr,i);
+ // 连接操作结束信号
+ if(mcu)
+ connect(mcu,port_end_signal,0,&g_updata,cmd_end_slot);
+ }
+ }
+ else{
+ app_valid_call("tran",(void (*)(void *))cmd_slot_init,0);
+ }
+ return 0;
+}
+app_init_export(cmd_slot_init);
+commend_export(updatas,updata_slave,"updata slave")
@@ -156,6 +219,23 @@ commend_export(reboot,reboot,"reboot mcu")
+static int moter(list_def *argv)
+{
+ const sys_param_def *par=sys_param();
+ cmd_print("moter ctl");
+ if(list_length(argv)<3){
+ cmd_print("param num too less.");
+ return -1;
+ }
+ int fre=str_atoi(list_get_str(argv,1));
+ int count=str_atoi(list_get_str(argv,2));
+ moter_start(fre,count);
+ cmd_print("moter start,fre=%d,count=%d",fre,count);
+ return 0;
+}
+
+
+commend_export(moter,moter,"control moter up or down|use:moter [frequency] [count]")
diff --git a/source/mycopy.py b/source/mycopy.py
index 5f27f73..aafbdae 100644
--- a/source/mycopy.py
+++ b/source/mycopy.py
@@ -6,15 +6,15 @@ import prebuild as time
# 定义app和boot文件路径(没有尾缀)
-APP_FILE_SRC = "./Objects/app/checker_slave_app"
-BOOT_FILE_SRC = "./Objects/boot/checker_slave_boot"
-# APP_FILE_DST = "./Objects/checker_slave_app"
-APP_FILE_DST = "./python/file/checker_slave_app"
-BOOT_FILE_DST = "./Objects/checker_slave_boot"
+APP_FILE_SRC = "./Objects/app/coder_2channel_app"
+BOOT_FILE_SRC = "./Objects/boot/coder_2channel_boot"
+# APP_FILE_DST = "./Objects/coder_2channel_app"
+APP_FILE_DST = "./python/file/coder_2channel_app"
+BOOT_FILE_DST = "./Objects/coder_2channel_boot"
# 定义app和boot的数据库目录
-SQL_APP_PATH = "checker_slave_app"
-SQL_BOOT_PATH = "checker_slave_boot"
+SQL_APP_PATH = "coder_stm32f1_app"
+SQL_BOOT_PATH = "coder_stm32f1_boot"
diff --git a/source/rt_thread/board.c b/source/rt_thread/board.c
index c112833..fc81678 100644
--- a/source/rt_thread/board.c
+++ b/source/rt_thread/board.c
@@ -36,7 +36,7 @@ static uint32_t _SysTick_Config(rt_uint32_t ticks)
}
#if defined(RT_USING_USER_MAIN) && defined(RT_USING_HEAP)
-static uint32_t g_heap[10*1024/4];
+static uint32_t g_heap[20*1024/4];
RT_WEAK void *rt_heap_begin_get(void)
{
return (void *)g_heap;
diff --git a/source/soft/mystdlib.c b/source/soft/mystdlib.c
index 6224d60..b832bdb 100644
--- a/source/soft/mystdlib.c
+++ b/source/soft/mystdlib.c
@@ -22,7 +22,7 @@ typedef struct
-#define SRAM_USER_SIZE (9*1024)
+#define SRAM_USER_SIZE (18*1024)
#define MEM_BLOCK_SIZE (32)
#define MEM_MAX_SIZE (((SRAM_USER_SIZE))*MEM_BLOCK_SIZE/(MEM_BLOCK_SIZE+2))
#define MEM_ALLOC_TABLE_SIZE ((MEM_MAX_SIZE/MEM_BLOCK_SIZE)&(~3))
diff --git a/source/task/history/handle.c b/source/task/handle.c
similarity index 100%
rename from source/task/history/handle.c
rename to source/task/handle.c
diff --git a/source/task/history/handle.h b/source/task/handle.h
similarity index 100%
rename from source/task/history/handle.h
rename to source/task/handle.h
diff --git a/source/task/history/handle_for_checker.c b/source/task/handle_for_checker.c
similarity index 100%
rename from source/task/history/handle_for_checker.c
rename to source/task/handle_for_checker.c
diff --git a/source/task/history/handle_for_checker.h b/source/task/handle_for_checker.h
similarity index 100%
rename from source/task/history/handle_for_checker.h
rename to source/task/handle_for_checker.h
diff --git a/source/task/history/handle_for_coder.c b/source/task/handle_for_coder.c
similarity index 100%
rename from source/task/history/handle_for_coder.c
rename to source/task/handle_for_coder.c
diff --git a/source/task/history/handle_for_coder.h b/source/task/handle_for_coder.h
similarity index 100%
rename from source/task/history/handle_for_coder.h
rename to source/task/handle_for_coder.h
diff --git a/source/task/history/prot_mcu.c b/source/task/history/prot_mcu.c
new file mode 100644
index 0000000..e9242d7
--- /dev/null
+++ b/source/task/history/prot_mcu.c
@@ -0,0 +1,470 @@
+#include "stdio.h"
+#include "rtthread.h"
+#include "board.h"
+#include "mystdlib.h"
+#include "list.h"
+#include "mystring.h"
+#include "signal.h"
+#include "prot_mcu.h"
+#include "buff.h"
+#include "bytearray.h"
+#include "debug.h"
+#include "crc.h"
+
+
+
+typedef struct{
+ uint16_t no;
+ list_def *cmds;//int
+ uint8_t addr;
+ uint8_t cmd;
+ array_def *data;
+ int retry;
+ int timeout_ms;
+}protm_slave;
+
+
+
+static int protm_slave_sub(void *a,void *b)
+{
+ protm_slave *a_=a;
+ protm_slave *b_=b;
+ return a_->addr-b_->addr;
+}
+
+static int protm_slave_del(void *t)
+{
+ protm_slave *p=t;
+ CHECK_DO(p->cmds,list_delete);
+ return 0;
+}
+
+
+static protm_slave *protm_slave_creat(void)
+{
+ protm_slave *p=calloc(1,sizeof(protm_slave));
+ param_check(p);
+ return p;
+}
+
+
+
+
+
+
+
+array_def *protm_decode(protm_def *p,array_def *data);
+protm_slave *protm_get_slave(protm_def *p,uint8_t addr);
+
+
+
+typedef struct{
+ array_def *data;
+ int addr;
+}send_data_def;
+
+
+// 定义事件
+#define EVENT_RECV 0x1
+#define EVENT_SEND 0x2
+#define EVENT_TIMEOUT 0x4
+
+
+
+struct _protm_def{
+ uart_def *uart;
+ array_def *buff;
+ int num_to_recv;
+ rt_event_t event;
+ rt_timer_t timer;
+ int run;
+ char *str_err;
+ list_def *slaves;//protm_slave
+ list_def *slaves_addr;//int
+ list_def *send_data;//send_data_def
+ int in_send;//在发送状态时为1
+ uint8_t recv_cmd;
+ uint8_t recv_src;
+
+};
+
+
+
+
+
+static void recv_irq(void *t,uint8_t d)
+{
+ protm_def *p=t;
+ arr_append(p->buff,d);
+ switch(arr_length(p->buff)){
+ case 2:
+ if(arr_get(p->buff,0)=='Y'&&arr_get(p->buff,1)=='e')
+ {
+ p->num_to_recv=4;
+ }else{
+ arr_remove(p->buff,0,1);
+ p->num_to_recv=0;
+ }
+ break;
+ case 4:
+ {
+ int len=arr_get(p->buff,2)|(arr_get(p->buff,3)<<8);
+ p->num_to_recv=len;
+ }
+ break;
+ default:
+ break;
+ }
+ // 此时一帧数据已完成
+ if(p->num_to_recv>0&&p->num_to_recv==arr_length(p->buff))
+ {
+ rt_event_send(p->event,EVENT_RECV);
+ }
+}
+
+
+
+/*
+* 与从机通信的串口是串行的,一个通信事务完成之后才能开始下一个通信
+* 协议层接收的通信事务是并行的,应用层来的通信任务会被放入队列
+*/
+
+static void protm_send_next(void *t);
+int protm_send(protm_def *p,send_data_def *d);
+static void protm_send_timeout(void *t);
+static void protm_run(void *t)
+{
+ protm_def *p=t;
+ array_def *data;
+ array_def *decode_data;
+ uint32_t ev;
+ while(p->run)
+ {
+ rt_event_recv(p->event,0xffffffff,RT_EVENT_FLAG_OR|RT_EVENT_FLAG_CLEAR,RT_WAITING_FOREVER,&ev);
+ if(ev&EVENT_RECV)
+ {
+ // DBG_LOG("protmcu:recv event.");
+ data=arr_duplicate(p->buff);
+ arr_clear(p->buff);
+ //DBG_LOG("recv:%s",str_temp(arr_string(data)));
+ decode_data=protm_decode(p,data);
+ arr_delete(data);
+ emit protm_recv_signal(p,p->recv_src,p->recv_cmd,arr_temp(decode_data),str_temp(str_duplicate(p->str_err)));
+ irq_disable();
+ p->num_to_recv=0;
+ irq_enable();
+ protm_send_next(p);
+ }
+ else if(ev&EVENT_TIMEOUT)
+ {
+ protm_send_timeout(p);
+ }
+ if (ev&EVENT_SEND)
+ {
+ // DBG_LOG("protmcu:send event.");
+ if(list_length(p->send_data)>0)
+ {
+ send_data_def *a=(send_data_def *)list_get(p->send_data,0);
+ protm_send(p,a);
+ }
+ }
+ ev=0;
+ }
+}
+
+
+// 发送下一个
+static void protm_send_next(void *t)
+{
+ protm_def *p=t;
+ rt_timer_stop(p->timer);
+ list_remove(p->send_data,0);
+ // 如果发送列表中有数据,此时发送
+ if (list_length(p->send_data)>0)
+ {
+ // DBG_LOG("protmcu:EVENT_SEND.");
+ rt_event_send(p->event,EVENT_SEND);
+ }
+ else{
+ irq_disable();
+ p->in_send=0;
+ irq_enable();
+ }
+}
+
+
+static void protm_send_timeout_cb(void *t)
+{
+ protm_def *p=t;
+ rt_event_send(p->event,EVENT_TIMEOUT);
+}
+
+// 接收超时
+static void protm_send_timeout(void *t)
+{
+ protm_def *p=t;
+ send_data_def *s=list_get(p->send_data,0);
+ protm_slave *sl=protm_get_slave(p,s->addr);
+ if(sl->retry>0){
+ sl->retry--;
+ DBG_WARN("slave:%d retry left ",s->addr,sl->retry);
+ list_shift(p->send_data);
+ }else{
+ DBG_WARN("slave:%d retry timeout,remove the send data.",s->addr);
+ list_remove(p->send_data,0);
+ }
+ // 如果发送列表中有数据,此时发送
+ if (list_length(p->send_data)>0)
+ {
+ // DBG_LOG("protmcu:EVENT_SEND.");
+ rt_event_send(p->event,EVENT_SEND);
+ }
+ else{
+ irq_disable();
+ p->in_send=0;
+ irq_enable();
+ }
+}
+
+
+
+
+
+// 发送队列删除条目
+static int _list_send_data_del(void *t)
+{
+ send_data_def *a=t;
+ arr_delete(a->data);
+ return 0;
+}
+
+
+protm_def *protm_creat(uart_def *uart,int *addrs,int num)
+{
+ static int count=0;
+ char name[20]={0};
+ protm_def *p=calloc(1,sizeof(protm_def));
+ param_check(p);
+ p->uart=uart;
+ sprintf(name,"protm_event#%d",count);
+ p->event=rt_event_create(name,RT_IPC_FLAG_FIFO);
+ p->buff=arr_creat();
+ p->run=1;
+ p->slaves=list_creat(sizeof(protm_slave),protm_slave_sub,protm_slave_del,0);
+ p->slaves_addr=list_creat_int();
+ p->send_data=list_creat(sizeof(send_data_def),0,_list_send_data_del,0);
+ // 创建超时定时器,超过指定时间则不再等待从机返回
+ p->timer=rt_timer_create("port_timer",protm_send_timeout_cb,p,
+ rt_tick_from_millisecond(55),
+ RT_TIMER_FLAG_ONE_SHOT|RT_TIMER_FLAG_SOFT_TIMER);
+ list_appends(p->slaves_addr,addrs,num);
+ sprintf(name,"protm_t#%d",count);
+ rt_thread_t rt_t=rt_thread_create(name,protm_run,p,512,5,20);
+ rt_thread_startup(rt_t);
+ p->uart->init(p->uart);
+ p->uart->set_irq(p->uart,recv_irq,p);
+
+ count++;
+ return p;
+}
+
+
+// 得到指定地址的从机,找不到则添加
+protm_slave *protm_get_slave(protm_def *p,uint8_t addr)
+{
+ protm_slave *r=0;
+ for(int i=0;islaves);i++)
+ {
+ r=list_get(p->slaves,i);
+ if(r->addr==addr)
+ return r;
+ }
+ r=protm_slave_creat();
+ r->addr=addr;
+ r->cmds=list_creat_int();
+ r->no=0;
+ list_append(p->slaves,r);
+ free(r);
+ return list_get(p->slaves,-1);
+}
+
+
+
+// 设置所有从机流水号
+void protm_set_no_all(protm_def *p,uint16_t no,list_def *cmd/*int*/)
+{
+ for(int i=0;islaves);i++)
+ {
+ protm_slave *s=list_get(p->slaves,i);
+ s->no=no;
+ list_clear(s->cmds);
+ list_append_from(s->cmds,cmd);
+ }
+}
+
+
+// 设置单个从机流水号
+void protm_set_no(protm_def *p,uint8_t addr,uint16_t no,list_def *cmd/*int*/)
+{
+ protm_slave *s=protm_get_slave(p,addr);
+ s->no=no;
+ list_clear(s->cmds);
+ list_append_from(s->cmds,cmd);
+}
+
+
+
+
+
+// 解码
+array_def *protm_decode(protm_def *p,array_def *data)
+{
+ array_def *r=arr_creat();
+ param_check(r);
+ str_set(p->str_err,"ok");
+ if(arr_length(data)<10)
+ {
+ DBG_WARN("recv data len too less.");
+ str_set(p->str_err,"recv data len too less.");
+ return r;
+ }
+ uint8_t src=arr_get(data,4);
+ p->recv_src=src;
+ uint16_t len=arr_get(data,2)|(arr_get(data,3)<<8);
+ uint8_t crc=crc_crc8(arr_data(data),arr_length(data)-1);
+ if(len!=arr_length(data))
+ {
+ // 如果长度不相等则产生了数据丢失
+ DBG_WARN("recv data have lossed.");
+ str_set(p->str_err,"recv data have lossed.");
+ return r;
+ }
+ uint16_t no=arr_get(data,7)|(arr_get(data,8)<<8);
+ uint16_t h_no=protm_get_slave(p,src)->no;
+ if(no!=h_no)
+ {
+ // 发送一条指令等待其返回,此时流水号应相同
+ //DBG_WARN("slave_addr=%d cmd_no error:h_no=%d,no=%d.",src,h_no,no);
+ //str_set(p->str_err,"cmd no err.");
+ //return r;
+ }
+ if(crc!=arr_get(data,-1))
+ {
+ DBG_WARN("recv data crc check error:%02x,%02x.",crc,arr_get(data,-1));
+ str_set(p->str_err,"crc check err.");
+ }
+ p->recv_cmd=arr_get(data,6);
+ list_def *cmds=protm_get_slave(p,src)->cmds;
+ if(list_contains(cmds,(int []){p->recv_cmd})==0){
+ // 命令号校验不对
+ DBG_WARN("cmd check err.cmds=%s,recv_cmd=%d",tappend(list_string(cmds),0),p->recv_cmd);
+ str_set(p->str_err,"cmd check err.");
+ }
+ arr_delete(r);
+ return arr_mid(data,9,len-10);
+}
+
+
+// 编码
+array_def *protm_encode(protm_def *p,uint8_t dst,uint8_t cmd,list_def *comp_cmd/*int*/,array_def *data)
+{
+ array_def *t=arr_creat();
+ param_check(t);
+ uint16_t len=arr_length(data)+10;
+ protm_slave *slave=protm_get_slave(p,dst);
+ slave->no++;
+ protm_set_no(p,dst,slave->no,comp_cmd);
+ arr_append(t,'Y');
+ arr_append(t,'e');
+ arr_append(t,len&0xff);
+ arr_append(t,len>>8);
+ arr_append(t,0);// 源地址
+ arr_append(t,dst);// 目标地址
+ arr_append(t,cmd);// 命令码
+ arr_append(t,slave->no&0xff);
+ arr_append(t,slave->no>>8);
+ arr_appends_from(t,data);
+ arr_append(t,crc_crc8(arr_data(t),arr_length(t)));
+ return t;
+}
+
+// 发送数据,发送前先开启超时定时器
+int protm_send(protm_def *p,send_data_def *d)
+{
+ rt_tick_t tick=0;
+ protm_slave *s=protm_get_slave(p,d->addr);
+ //DBG_LOG("send:%s",str_temp(arr_string(d->data)));
+ tick=rt_tick_from_millisecond(s->timeout_ms);
+ rt_timer_control(p->timer,RT_TIMER_CTRL_SET_TIME,&tick);
+ rt_timer_start(p->timer);
+ if(d->data==0)
+ {
+ DBG_WARN("addr=%d,d->data=0",d->addr);
+ return 0;
+ }
+ return p->uart->write(p->uart,arr_data(d->data),arr_length(d->data));
+}
+
+
+//// 槽函数,发送数据到指定地址
+//void protm_send_call(protm_def *p,list_def *addrs/*int*/,uint8_t cmd,list_def *comp_cmd/*int*/,array_def *data)
+//{
+// param_check(p);
+// for(int i=0;islaves_addr,(int []){dst})==1)
+// {
+// array_def *t=0;
+// t=protm_encode(p,dst,cmd,comp_cmd,data);
+// protm_send(p,t);
+// arr_delete(t);
+// }
+// }
+//}
+
+
+
+// 槽函数,发送数据到指定地址
+void protm_send_call(protm_def *p,uint8_t addr,uint8_t cmd,list_def *comp_cmd/*int*/,array_def *data,int timeout_ms,int retry)
+{
+ param_check(p);
+ if(list_contains(p->slaves_addr,(int []){addr})==1)
+ {
+ array_def *t=0;
+ t=protm_encode(p,addr,cmd,comp_cmd,data);
+ //protm_send(p,t);
+ //arr_delete(t);
+ // 添加到发送队列,发送必须等到回应或超时才能发送下一个
+ DBG_LOG("send to:%d",addr);
+ send_data_def sd={0};
+ sd.addr=addr;sd.data=t;
+ protm_slave *s=protm_get_slave(p,addr);
+ s->retry=retry;
+ s->timeout_ms=timeout_ms;
+ list_append(p->send_data,&sd);
+ if(p->in_send==0){
+ irq_disable();
+ p->in_send=1;
+ irq_enable();
+ //DBG_LOG("send call");
+ rt_event_send(p->event,EVENT_SEND);
+ }
+ }
+}
+
+
+
+
+// 返回1表示此地址可以发送到这个端口
+int protm_contains(protm_def *p,uint8_t addr)
+{
+ param_check(p);
+ return list_contains(p->slaves_addr,(int []){addr});
+}
+
+
+
+
+
+
diff --git a/source/task/history/input.c b/source/task/input.c
similarity index 100%
rename from source/task/history/input.c
rename to source/task/input.c
diff --git a/source/task/history/input.h b/source/task/input.h
similarity index 100%
rename from source/task/history/input.h
rename to source/task/input.h
diff --git a/source/task/history/log.c b/source/task/log.c
similarity index 100%
rename from source/task/history/log.c
rename to source/task/log.c
diff --git a/source/task/history/log.h b/source/task/log.h
similarity index 100%
rename from source/task/history/log.h
rename to source/task/log.h
diff --git a/source/task/mod_signals.c b/source/task/mod_signals.c
index c582cdf..bcbd205 100644
--- a/source/task/mod_signals.c
+++ b/source/task/mod_signals.c
@@ -1,11 +1,22 @@
#include "stdlib.h"
#include "signal.h"
#include "commend.h"
+#include "handle.h"
+#include "handle_for_checker.h"
+#include "handle_for_coder.h"
+#include "input.h"
+#include "log.h"
+#include "moter.h"
+#include "process.h"
#include "prot_mcu.h"
#include "prot_uc.h"
+#include "tcp.h"
#include "transmit.h"
+#include "tran_for_checker.h"
+#include "tran_for_coder.h"
+#include "tran_for_coder2.h"
#include "tran_for_coder2ch.h"
-#include "tran_for_slave.h"
+#include "udp.h"
@@ -23,6 +34,53 @@ signal_export(cmd_reply_signal);
+void port_send_signal(port_mcu *obj,uint8_t addr,uint8_t cmd,list_def *comp_cmd,array_def *data,int timeout_ms,int retry)
+{
+ uint32_t param[6];
+ param[0]=(uint32_t)addr;
+ param[1]=(uint32_t)cmd;
+ param[2]=(uint32_t)comp_cmd;
+ param[3]=(uint32_t)data;
+ param[4]=(uint32_t)timeout_ms;
+ param[5]=(uint32_t)retry;
+ _signal_emit(obj,port_send_signal,param,6);
+}
+signal_export(port_send_signal);
+
+
+
+void port_end_signal(port_mcu *obj,port_mcu *src,void *data,int ack,char *err_str)
+{
+ uint32_t param[4];
+ param[0]=(uint32_t)src;
+ param[1]=(uint32_t)data;
+ param[2]=(uint32_t)ack;
+ param[3]=(uint32_t)err_str;
+ _signal_emit(obj,port_end_signal,param,4);
+}
+signal_export(port_end_signal);
+
+
+
+void moter_end_signal(void *m)
+{
+ _signal_emit(m,moter_end_signal,0,0);
+}
+signal_export(moter_end_signal);
+
+
+
+void process_send_signal(void *obj,uint8_t cmd,array_def *data)
+{
+ uint32_t param[2];
+ param[0]=(uint32_t)cmd;
+ param[1]=(uint32_t)data;
+ _signal_emit(obj,process_send_signal,param,2);
+}
+signal_export(process_send_signal);
+
+
+
void protm_recv_signal(void *obj,uint8_t src,uint8_t cmd,array_def *data,char *err_str)
{
uint32_t param[4];
@@ -49,6 +107,24 @@ signal_export(protu_recv_signal);
+void tcp_connect_signal(void *obj)
+{
+ _signal_emit(obj,tcp_connect_signal,0,0);
+}
+signal_export(tcp_connect_signal);
+
+
+
+void tcp_recv_signal(void *obj,array_def *data)
+{
+ uint32_t param[1];
+ param[0]=(uint32_t)data;
+ _signal_emit(obj,tcp_recv_signal,param,1);
+}
+signal_export(tcp_recv_signal);
+
+
+
void tran_reply_signal(tran_def *p,array_def *data)
{
uint32_t param[1];
@@ -70,6 +146,28 @@ signal_export(tran_send_signal);
+void coder_live_send_signal(void *obj,uint8_t cmd,array_def *data)
+{
+ uint32_t param[2];
+ param[0]=(uint32_t)cmd;
+ param[1]=(uint32_t)data;
+ _signal_emit(obj,coder_live_send_signal,param,2);
+}
+signal_export(coder_live_send_signal);
+
+
+
+void coder2_live_send_signal(void *obj,uint8_t cmd,array_def *data)
+{
+ uint32_t param[2];
+ param[0]=(uint32_t)cmd;
+ param[1]=(uint32_t)data;
+ _signal_emit(obj,coder2_live_send_signal,param,2);
+}
+signal_export(coder2_live_send_signal);
+
+
+
void code2_end_signal(void *obj,int ack,array_def *data)
{
uint32_t param[2];
@@ -89,3 +187,16 @@ signal_export(code2_start_signal);
+void udp_recv_signal(void *obj,const char *codec_name,uint8_t cmd,array_def *data,char *err_str)
+{
+ uint32_t param[4];
+ param[0]=(uint32_t)codec_name;
+ param[1]=(uint32_t)cmd;
+ param[2]=(uint32_t)data;
+ param[3]=(uint32_t)err_str;
+ _signal_emit(obj,udp_recv_signal,param,4);
+}
+signal_export(udp_recv_signal);
+
+
+
diff --git a/source/task/history/moter.c b/source/task/moter.c
similarity index 100%
rename from source/task/history/moter.c
rename to source/task/moter.c
diff --git a/source/task/history/moter.h b/source/task/moter.h
similarity index 100%
rename from source/task/history/moter.h
rename to source/task/moter.h
diff --git a/source/task/history/process.c b/source/task/process.c
similarity index 100%
rename from source/task/history/process.c
rename to source/task/process.c
diff --git a/source/task/history/process.h b/source/task/process.h
similarity index 100%
rename from source/task/history/process.h
rename to source/task/process.h
diff --git a/source/task/history/tcp.c b/source/task/tcp.c
similarity index 100%
rename from source/task/history/tcp.c
rename to source/task/tcp.c
diff --git a/source/task/history/tcp.h b/source/task/tcp.h
similarity index 100%
rename from source/task/history/tcp.h
rename to source/task/tcp.h
diff --git a/source/task/history/tran_for_checker.c b/source/task/tran_for_checker.c
similarity index 100%
rename from source/task/history/tran_for_checker.c
rename to source/task/tran_for_checker.c
diff --git a/source/task/history/tran_for_checker.h b/source/task/tran_for_checker.h
similarity index 100%
rename from source/task/history/tran_for_checker.h
rename to source/task/tran_for_checker.h
diff --git a/source/task/history/tran_for_coder.c b/source/task/tran_for_coder.c
similarity index 100%
rename from source/task/history/tran_for_coder.c
rename to source/task/tran_for_coder.c
diff --git a/source/task/history/tran_for_coder.h b/source/task/tran_for_coder.h
similarity index 100%
rename from source/task/history/tran_for_coder.h
rename to source/task/tran_for_coder.h
diff --git a/source/task/history/tran_for_coder2.c b/source/task/tran_for_coder2.c
similarity index 100%
rename from source/task/history/tran_for_coder2.c
rename to source/task/tran_for_coder2.c
diff --git a/source/task/history/tran_for_coder2.h b/source/task/tran_for_coder2.h
similarity index 100%
rename from source/task/history/tran_for_coder2.h
rename to source/task/tran_for_coder2.h
diff --git a/source/task/tran_for_coder2ch.c b/source/task/tran_for_coder2ch.c
index fc23aac..8ca45a4 100644
--- a/source/task/tran_for_coder2ch.c
+++ b/source/task/tran_for_coder2ch.c
@@ -1,16 +1,20 @@
+#include "tran_for_coder2.h"
#include "tran_for_coder2ch.h"
#include "debug.h"
#include "mymisc.h"
#include "mystdlib.h"
#include "board.h"
#include "dev_flash.h"
+#include "tcp.h"
#include "prot_uc.h"
+#include "handle_for_coder.h"
+#include "handle_for_checker.h"
#include "coder_lib.h"
#include "JQ_PSDGenerate.h"
#include "mystring.h"
#include "coder_judge.h"
#include "JQ_UIDGenerate.h"
-#include "transmit.h"
+
@@ -150,10 +154,10 @@ static uint32_t in_range_err(const uint8_t *src_data,const uint8_t *errbit)
// 注码完成
-static void write_uid_end(ucport_def *u,void *src,void *data,int ack,char *err_str)
+static void write_uid_end(ucport_def *u,port_mcu *src,void *data,int ack,char *err_str)
{
write_uid_def *w=(write_uid_def *)u;
- uint8_t addr=0;
+ uint8_t addr=port_get_addr(src);
if(addr<=0||addr>w->addrs_num){
DBG_WARN("addr err:%d",addr);
return;
@@ -259,14 +263,17 @@ static ucport_def *write_uid(tran_def *t, uint8_t cmd,array_def *data)
u->ack[i*38+0]=i+slave_addr_off();
u->ack[i*38+1]=1;
if(1){
- if(check_shell_code(u->item[i].shell_code)){
- // 开始注码
- //port_start(mcu,code2_creat(8,4,u->item[i].uid_pw_hex));
- }else{
- // 管壳码无效,不注码,此时默认已ack
- // 管壳码无效不视为失败
- ret=0;
- write_uid_fillret(u,i+1,0xff);
+ port_mcu *mcu=tran_get_portm(u->u.p,i);
+ // 这里打开赋码操作
+ if(mcu){
+ if(check_shell_code(u->item[i].shell_code)){
+ port_start(mcu,code2_creat(8,4,u->item[i].uid_pw_hex));
+ }else{
+ // 管壳码无效,不注码,此时默认已ack
+ // 管壳码无效不视为失败
+ ret=0;
+ write_uid_fillret(u,i+1,0xff);
+ }
}
}
@@ -309,6 +316,89 @@ transmit_export(ym_checker,0x02,write_uid)
+typedef struct{
+ rt_timer_t timer;
+ void *protu;
+}live_keeper_def;
+
+
+static void live_start(live_keeper_def *t)
+{
+ rt_tick_t tick=0;
+ tick=rt_tick_from_millisecond(1000);
+ rt_timer_control(t->timer,RT_TIMER_CTRL_SET_TIME,&tick);
+ rt_timer_start(t->timer);
+}
+static void live_recv(live_keeper_def *t)
+{
+ rt_tick_t tick=0;
+ tick=rt_tick_from_millisecond(5000);
+ rt_timer_control(t->timer,RT_TIMER_CTRL_SET_TIME,&tick);
+ rt_timer_start(t->timer);
+ //rt_timer_stop(t->timer);
+}
+
+
+// cmd=0x8a
+static void live_send(void *p)
+{
+ live_keeper_def *live=p;
+ const sys_param_def *par=sys_param();
+ tran_def *t=app_variable("tran",0,0);
+ uint16_t slave_online=0;
+ if(t){
+ slave_online=tran_get_slave_online(t);
+ }
+ //protu_codec_set(live->protu,protu_find_codec("ym_checker"));
+
+ array_def *d=arr_creat();
+ arr_append(d,coder_extract_chip(0));// 模块类型
+ arr_append(d,0xff);
+ arr_append(d,0x03);
+ arr_append(d,par->local_id&0xff);
+ arr_append(d,slave_online&0xff);// 在线的小板
+ arr_append(d,(slave_online>>8)&0xff);
+ emit coder2_live_send_signal(p,0x8a,arr_temp(d));
+ //DBG_LOG("send liver data.");
+
+}
+
+
+static void init_for_coder2ch(void *t)
+{
+ void *protu=app_variable("protu",0,0);
+ if(protu){
+ live_keeper_def *live=calloc(1,sizeof(live_keeper_def));
+ live->protu=protu;
+ live->timer=rt_timer_create("live_t",live_send,live,
+ rt_tick_from_millisecond(1000),
+ RT_TIMER_FLAG_PERIODIC|RT_TIMER_FLAG_SOFT_TIMER);
+ protu_codec_set(protu,protu_find_codec("ym_checker"));
+ connect(protu,protu_recv_signal,0,live,live_recv);
+ connect(live,coder2_live_send_signal,0,protu,protu_send_call);
+ DBG_LOG("coder2ch liver created");
+ live_start(live);
+ }else{
+ DBG_WARN("can not fond variable \"protu\"");
+ }
+}
+
+
+
+
+// 如果本机为赋码仪并且连接类型为tcp
+// 初始化心跳
+static int init_live_keeper(void)
+{
+ const sys_param_def *par=sys_param();
+ app_valid_call("protu",init_for_coder2ch,0);
+ return 0;
+}
+app_init_export(init_live_keeper);
+
+
+
+
diff --git a/source/task/tran_for_slave.c b/source/task/tran_for_slave.c
deleted file mode 100644
index 86c5f9f..0000000
--- a/source/task/tran_for_slave.c
+++ /dev/null
@@ -1,34 +0,0 @@
-#include "tran_for_slave.h"
-#include "debug.h"
-#include "mymisc.h"
-#include "mystdlib.h"
-#include "board.h"
-#include "dev_flash.h"
-#include "prot_uc.h"
-#include "coder_lib.h"
-#include "JQ_PSDGenerate.h"
-#include "mystring.h"
-#include "coder_judge.h"
-#include "JQ_UIDGenerate.h"
-#include "transmit.h"
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/source/task/tran_for_slave.h b/source/task/tran_for_slave.h
deleted file mode 100644
index 7685ae5..0000000
--- a/source/task/tran_for_slave.h
+++ /dev/null
@@ -1,14 +0,0 @@
-#ifndef tran_for_slave_h__
-#define tran_for_slave_h__
-
-
-
-
-
-
-
-
-
-
-
-#endif
diff --git a/source/task/transmit.c b/source/task/transmit.c
index c71ddd2..7f63c19 100644
--- a/source/task/transmit.c
+++ b/source/task/transmit.c
@@ -20,15 +20,49 @@
+#define PORT_NUM 2
typedef struct _tran_def{
ucport_def *u;
+ port_mcu *port[PORT_NUM];
+ uint32_t slave_online;// 对应位为1则从机在线
int is_busy;
}tran_def;
+// 打印从机状态
+static void tran_print_slave_stat(void *t)
+{
+ list_def *l=list_creat_int();
+ uint32_t a=tran_get_slave_online(t);
+ for(int i=0;islave_online=0xfffff;
app_variable("tran",tran,0);
+ later_execute(tran_scan_slave,tran,500);
return 0;
}
app_init_export(tran_init);
-void tran_end_slot(tran_def *obj,void *src,void *data,int ack,char *err_str);
+void tran_end_slot(tran_def *obj,port_mcu *src,void *data,int ack,char *err_str);
tran_def *tran_creat(sig_thread t)
{
tran_def *tr=calloc(1,sizeof(tran_def));
param_check(tr);
+ port_init();
+ for(int i=0;iport[i]=port_creat(i+1,t);
+ // 连接操作结束信号
+ connect(tr->port[i],port_end_signal,0,tr,tran_end_slot);
+ }
return tr;
}
@@ -90,16 +133,33 @@ void tran_recv_slot(tran_def *t,const char *codec_name,uint8_t cmd,array_def *da
}
}
+void tran_set_slave_online(tran_def *t,uint8_t addr,int stat)
+{
+ param_check(t);
+ uint32_t a=0;
+ a=1<<(addr-1);
+ if(stat)
+ t->slave_online|=a;
+ else{
+ t->slave_online&=(~a);
+ //DBG_LOG("a=%08x",a);
+ }
+}
+uint32_t tran_get_slave_online(tran_def *t)
+{
+ param_check(t);
+ return t->slave_online;
+}
-
-
-void tran_end_slot(tran_def *obj,void *src,void *data,int ack,char *err_str)
+void tran_end_slot(tran_def *obj,port_mcu *src,void *data,int ack,char *err_str)
{
//DBG_LOG("tran end slot");
param_check(obj);
if(strcmp(err_str,"timeout")==0)
{
+ tran_set_slave_online(obj,port_get_addr(src),0);
}else{
+ tran_set_slave_online(obj,port_get_addr(src),1);
}
if((obj->u)&&obj->u->doend)
obj->u->doend(obj->u,src,data,ack,err_str);
@@ -115,7 +175,13 @@ int tran_get_busy(tran_def *t)
}
-
+// 获取指定通道
+port_mcu *tran_get_portm(tran_def *t,int index)
+{
+ if(index<0||index>=PORT_NUM)
+ return 0;
+ return t->port[index];
+}
@@ -308,6 +374,13 @@ static void when_scheme_done(ucport_def *u)
DBG_LOG("memused:%d",mem_perused());
rt_thread_mdelay(100);
DBG_LOG("memused:%d",mem_perused());
+ for(int i=0;islave_data,2048));
+ }
}
static ucport_def *tran_scheme(tran_def *t, uint8_t cmd,array_def *data)
{
diff --git a/source/task/transmit.h b/source/task/transmit.h
index 20a8349..10c3e1c 100644
--- a/source/task/transmit.h
+++ b/source/task/transmit.h
@@ -2,9 +2,9 @@
#define transmit_h__
#include "rtthread.h"
+#include "handle.h"
#include "signal.h"
-#include "stdint.h"
-#include "bytearray.h"
+
// 错误码定义
@@ -25,7 +25,7 @@ typedef struct _ucport_def{
tran_def *p;
int (*dolater)(struct _ucport_def *u,uint8_t cmd,array_def *data,char *err_str);
void (*del)(struct _ucport_def *h);
- void (*doend)(struct _ucport_def *h,void *src,void *data,int ack,char *err_str);
+ void (*doend)(struct _ucport_def *h,port_mcu *src,void *data,int ack,char *err_str);
}ucport_def;
@@ -57,6 +57,8 @@ void tran_recv_slot(tran_def *t,const char *codec_name,uint8_t cmd,array_def *da
void tran_set_busy(tran_def *t,int busy);
int tran_get_busy(tran_def *t);
+port_mcu *tran_get_portm(tran_def *t,int index);
+uint32_t tran_get_slave_online(tran_def *t);
signal tran_reply_signal(tran_def *p,array_def *data);
diff --git a/source/task/history/udp.c b/source/task/udp.c
similarity index 100%
rename from source/task/history/udp.c
rename to source/task/udp.c
diff --git a/source/task/history/udp.h b/source/task/udp.h
similarity index 100%
rename from source/task/history/udp.h
rename to source/task/udp.h