diff --git a/.clang-format b/.clang-format
index 4c41736..45866f9 100644
--- a/.clang-format
+++ b/.clang-format
@@ -2,7 +2,7 @@
# http://clang.llvm.org/docs/ClangFormatStyleOptions.html
Language: Cpp
BasedOnStyle: Google
-ColumnLimit: 300
+ColumnLimit: 160
AlignConsecutiveMacros: true
AlignConsecutiveDeclarations: true
AlignConsecutiveAssignments: true
diff --git a/.vscode/settings.json b/.vscode/settings.json
index e9f48ee..190f974 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -200,7 +200,10 @@
"ble_cmd_process_service.h": "c",
"storage_service.h": "c",
"board_ssd1306_interface.h": "c",
- "zsdk_ble_slave_config.h": "c"
+ "zsdk_ble_slave_config.h": "c",
+ "ads129x.h": "c",
+ "ads129x_if_impl.h": "c",
+ "ads129x_type.h": "c"
},
"files.encoding": "gbk"
}
\ No newline at end of file
diff --git a/app/app.uvoptx b/app/app.uvoptx
index 30b741f..5f30502 100644
--- a/app/app.uvoptx
+++ b/app/app.uvoptx
@@ -667,6 +667,30 @@
0
0
+
+ 1
+ 26
+ 1
+ 0
+ 0
+ 0
+ .\src\board\ads129x\ads129x.c
+ ads129x.c
+ 0
+ 0
+
+
+ 1
+ 27
+ 1
+ 0
+ 0
+ 0
+ .\src\board\app_board.c
+ app_board.c
+ 0
+ 0
+
@@ -677,7 +701,7 @@
0
2
- 26
+ 28
1
0
0
@@ -697,7 +721,7 @@
0
3
- 27
+ 29
1
0
0
@@ -709,7 +733,7 @@
3
- 28
+ 30
1
0
0
@@ -729,7 +753,7 @@
0
4
- 29
+ 31
1
0
0
@@ -749,7 +773,7 @@
0
5
- 30
+ 32
1
0
0
@@ -761,7 +785,7 @@
5
- 31
+ 33
1
0
0
@@ -773,7 +797,7 @@
5
- 32
+ 34
1
0
0
@@ -785,7 +809,7 @@
5
- 33
+ 35
1
0
0
@@ -797,7 +821,7 @@
5
- 34
+ 36
1
0
0
@@ -809,7 +833,7 @@
5
- 35
+ 37
1
0
0
@@ -821,7 +845,7 @@
5
- 36
+ 38
1
0
0
@@ -833,7 +857,7 @@
5
- 37
+ 39
1
0
0
@@ -853,7 +877,7 @@
0
6
- 38
+ 40
1
0
0
@@ -873,7 +897,7 @@
0
7
- 39
+ 41
1
0
0
@@ -885,7 +909,7 @@
7
- 40
+ 42
1
0
0
@@ -897,7 +921,7 @@
7
- 41
+ 43
1
0
0
@@ -909,7 +933,7 @@
7
- 42
+ 44
1
0
0
@@ -921,7 +945,7 @@
7
- 43
+ 45
1
0
0
@@ -933,7 +957,7 @@
7
- 44
+ 46
1
0
0
@@ -945,7 +969,7 @@
7
- 45
+ 47
1
0
0
@@ -957,7 +981,7 @@
7
- 46
+ 48
1
0
0
@@ -969,7 +993,7 @@
7
- 47
+ 49
1
0
0
@@ -981,7 +1005,7 @@
7
- 48
+ 50
1
0
0
@@ -993,7 +1017,7 @@
7
- 49
+ 51
1
0
0
@@ -1005,7 +1029,7 @@
7
- 50
+ 52
1
0
0
@@ -1017,7 +1041,7 @@
7
- 51
+ 53
1
0
0
@@ -1029,7 +1053,7 @@
7
- 52
+ 54
1
0
0
@@ -1041,7 +1065,7 @@
7
- 53
+ 55
1
0
0
@@ -1053,7 +1077,7 @@
7
- 54
+ 56
1
0
0
@@ -1065,7 +1089,7 @@
7
- 55
+ 57
1
0
0
@@ -1077,7 +1101,7 @@
7
- 56
+ 58
1
0
0
@@ -1089,7 +1113,7 @@
7
- 57
+ 59
1
0
0
@@ -1101,7 +1125,7 @@
7
- 58
+ 60
1
0
0
@@ -1121,7 +1145,7 @@
0
8
- 59
+ 61
1
0
0
@@ -1133,7 +1157,7 @@
8
- 60
+ 62
1
0
0
@@ -1145,7 +1169,7 @@
8
- 61
+ 63
1
0
0
@@ -1157,7 +1181,7 @@
8
- 62
+ 64
1
0
0
@@ -1169,7 +1193,7 @@
8
- 63
+ 65
1
0
0
@@ -1181,7 +1205,7 @@
8
- 64
+ 66
1
0
0
@@ -1193,7 +1217,7 @@
8
- 65
+ 67
1
0
0
@@ -1205,7 +1229,7 @@
8
- 66
+ 68
1
0
0
@@ -1217,7 +1241,7 @@
8
- 67
+ 69
1
0
0
@@ -1229,7 +1253,7 @@
8
- 68
+ 70
1
0
0
@@ -1241,7 +1265,7 @@
8
- 69
+ 71
1
0
0
@@ -1253,7 +1277,7 @@
8
- 70
+ 72
1
0
0
@@ -1265,7 +1289,7 @@
8
- 71
+ 73
1
0
0
@@ -1277,7 +1301,7 @@
8
- 72
+ 74
1
0
0
@@ -1289,7 +1313,7 @@
8
- 73
+ 75
1
0
0
@@ -1301,7 +1325,7 @@
8
- 74
+ 76
1
0
0
@@ -1313,7 +1337,7 @@
8
- 75
+ 77
1
0
0
@@ -1325,7 +1349,7 @@
8
- 76
+ 78
1
0
0
@@ -1337,7 +1361,7 @@
8
- 77
+ 79
1
0
0
@@ -1349,7 +1373,7 @@
8
- 78
+ 80
1
0
0
@@ -1361,7 +1385,7 @@
8
- 79
+ 81
1
0
0
@@ -1373,7 +1397,7 @@
8
- 80
+ 82
1
0
0
@@ -1385,7 +1409,7 @@
8
- 81
+ 83
1
0
0
@@ -1397,7 +1421,7 @@
8
- 82
+ 84
1
0
0
@@ -1409,7 +1433,7 @@
8
- 83
+ 85
1
0
0
@@ -1421,7 +1445,7 @@
8
- 84
+ 86
1
0
0
@@ -1433,7 +1457,7 @@
8
- 85
+ 87
1
0
0
@@ -1453,7 +1477,7 @@
0
9
- 86
+ 88
1
0
0
@@ -1465,7 +1489,7 @@
9
- 87
+ 89
1
0
0
@@ -1477,7 +1501,7 @@
9
- 88
+ 90
1
0
0
@@ -1489,7 +1513,7 @@
9
- 89
+ 91
1
0
0
@@ -1501,7 +1525,7 @@
9
- 90
+ 92
1
0
0
@@ -1513,7 +1537,7 @@
9
- 91
+ 93
1
0
0
@@ -1533,7 +1557,7 @@
0
10
- 92
+ 94
1
0
0
@@ -1545,7 +1569,7 @@
10
- 93
+ 95
1
0
0
@@ -1557,7 +1581,7 @@
10
- 94
+ 96
1
0
0
@@ -1577,7 +1601,7 @@
0
11
- 95
+ 97
1
0
0
@@ -1589,7 +1613,7 @@
11
- 96
+ 98
1
0
0
@@ -1601,7 +1625,7 @@
11
- 97
+ 99
1
0
0
@@ -1621,7 +1645,7 @@
0
12
- 98
+ 100
1
0
0
@@ -1633,7 +1657,7 @@
12
- 99
+ 101
1
0
0
@@ -1645,7 +1669,7 @@
12
- 100
+ 102
1
0
0
@@ -1665,7 +1689,7 @@
0
13
- 101
+ 103
1
0
0
@@ -1677,7 +1701,7 @@
13
- 102
+ 104
1
0
0
@@ -1697,7 +1721,7 @@
0
14
- 103
+ 105
1
0
0
@@ -1709,7 +1733,7 @@
14
- 104
+ 106
1
0
0
@@ -1721,7 +1745,7 @@
14
- 105
+ 107
1
0
0
@@ -1733,7 +1757,7 @@
14
- 106
+ 108
1
0
0
diff --git a/app/app.uvprojx b/app/app.uvprojx
index fa261df..13cc01b 100644
--- a/app/app.uvprojx
+++ b/app/app.uvprojx
@@ -508,6 +508,16 @@
1
.\src\basic_service\app_event_distribute.c
+
+ ads129x.c
+ 1
+ .\src\board\ads129x\ads129x.c
+
+
+ app_board.c
+ 1
+ .\src\board\app_board.c
+
@@ -4397,6 +4407,16 @@
1
.\src\basic_service\app_event_distribute.c
+
+ ads129x.c
+ 1
+ .\src\board\ads129x\ads129x.c
+
+
+ app_board.c
+ 1
+ .\src\board\app_board.c
+
diff --git a/app/config/sdk_config.h b/app/config/sdk_config.h
index 8ffb981..d1db7a5 100644
--- a/app/config/sdk_config.h
+++ b/app/config/sdk_config.h
@@ -3,5 +3,6 @@
#define NRF_LOG_ENABLED 1
#define NRF_LOG_BACKEND_UART_ENABLED 1
#define NRF_LOG_BACKEND_UART_TX_PIN 41
+#define DEBUG
#include "libznordic/zsdk_config/zsdk_ble_slave_config.h"
\ No newline at end of file
diff --git a/app/src/aproject_config/config.h b/app/src/aproject_config/config.h
index 9acfc73..9e59a04 100644
--- a/app/src/aproject_config/config.h
+++ b/app/src/aproject_config/config.h
@@ -33,6 +33,8 @@
#define BATTERY_ADC_CHANNEL 1 // 不重复即可
#define BATTERY_CHARGE_DETECT_PIN 6
+
+
/**
* @brief
*/
diff --git a/app/src/board/ads1291/ads1291.c b/app/src/board/ads1291/ads1291.c
deleted file mode 100644
index 556b9fa..0000000
--- a/app/src/board/ads1291/ads1291.c
+++ /dev/null
@@ -1,133 +0,0 @@
-#include "ads1291.h"
-
-#include "ads1291_type.h"
-
-/** @addtogroup ADS1292R
- * @{
- */
-/* Private typedef -----------------------------------------------------------*/
-typedef struct {
- uint8_t id; /* id,ads1292r固定为0x73 ads1291 0x52 */
- uint8_t cfg1; /* 设置寄存器 */
- uint8_t cfg2; /* 设置寄存器 */
- uint8_t loff; /* 导联 */
- uint8_t ch1set; /* 通道一设置 */
- uint8_t ch2set; /* 通道二设置 */
- uint8_t rld_sens; /* 右腿驱动 */
- uint8_t loff_sens; /* 导联 */
- uint8_t loff_stat; /* 导联 */
- uint8_t resp1; /* 呼吸 */
- uint8_t resp2; /* 呼吸 */
- uint8_t gpio; /* gpio1,2的控制 */
-} ads1292r_regs_s;
-
-/* Private define ------------------------------------------------------------*/
-
-/* Private macro -------------------------------------------------------------*/
-
-/* Private variables ---------------------------------------------------------*/
-/* 局部全局变量,包含ads1292寄存器默认值 */
-static ads1292r_regs_s ads1292r_reg = {
- /* 默认参数 */
- 0x73, /* 默认地址0x73 */
- 0x02, /* 连续转换,500sps采样率 */
- 0x80, /* 导联脱落比较器关,内部参考电压关,2.42v参考电压,晶振输出关,测试信号关,测试信号频率为0HZ */
- 0x10, /* 脱落比较器正端阈值为95%,负端为5%,引出模式电流大小6na,频率为0HZ */
- 0x00, /* 通道一关闭,6倍增益,正常电极输入 */
- 0x00, /* 通道二关闭,6倍增益,正常电极输入 */
- 0x00, /* 未启用 */
- 0x00, /* 未启用 */
- 0x00, /* fmod为clk四分频,其他未用 */
- 0x02, /* 呼吸相关配置 */
- 0x03, /* 呼吸相关配置 */
- 0x0c /* gpio1、2皆为输入模式 */
-};
-/* Private function prototypes -----------------------------------------------*/
-
-/* Private functions ---------------------------------------------------------*/
-
-/* Exported functions --------------------------------------------------------*/
-/* 不必要,尽量不要对外开放以下函数,最好设置成static类型 */
-
-/* ads1292r发送指令 */
-uint8_t ads1292r_send_cmd(uint8_t cmd) {
- uint8_t rx = 0;
-
- ADS1292_CS_RESET(); /* 选中设备 */
- port_delay_us(100);
-
- rx = port_spi_transmit_receive(cmd);
-
- port_delay_us(100);
- ADS1292_CS_SET(); /* 释放设备 */
-
- return rx;
-}
-
-/* ads1292r读写寄存器,自动根据指令类型区分读和写操作 */
-uint8_t ads1292r_rw_reg(uint8_t cmd, uint8_t data) {
- uint8_t rx = 0;
-
- ADS1292_CS_RESET(); /* 选中设备 */
- port_delay_us(1);
-
- port_spi_transmit_receive(cmd); /* 发送读写指令 */
- port_spi_transmit_receive(0X00); /* 只写一个数据 */
-
- if ((cmd & ADS1292R_COMMAND_RREG) == ADS1292R_COMMAND_RREG) /* 判断指令类型 */
- rx = port_spi_transmit_receive(0X00); /* 返回寄存器值 */
- else
- rx = port_spi_transmit_receive(data); /* 写入数值 */
-
- port_delay_us(1);
- ADS1292_CS_SET(); /* 释放设备 */
-
- return rx;
-}
-
-/* 从指定寄存器开始读写一定数量的寄存器 */
-void ads1292r_write_multiregs(uint8_t reg, uint8_t *ch, uint8_t size) {
- uint8_t i;
-
- ADS1292_CS_RESET(); /* 选中设备 */
- port_delay_us(100);
-
- port_spi_transmit_receive(ADS1292R_COMMAND_WREG | reg);
- port_delay_us(100);
- port_spi_transmit_receive(size - 1);
-
- for (i = 0; i < size; i++) {
- port_delay_us(100);
- port_spi_transmit_receive(*ch);
- ch++;
- }
-
- port_delay_us(100);
- ADS1292_CS_SET();
-}
-
-/* 从指定寄存器开始读写一定数量的寄存器 */
-void ads1292r_read_multiregs(uint8_t reg, uint8_t *ch, uint8_t size) {
- uint8_t i;
-
- ADS1292_CS_RESET(); /* 选中设备 */
- port_delay_us(100);
-
- port_spi_transmit_receive(ADS1292R_COMMAND_RREG | reg);
- port_delay_us(100);
- port_spi_transmit_receive(size - 1);
-
- for (i = 0; i < size; i++) {
- port_delay_us(100);
- *ch = port_spi_transmit_receive(0);
- ch++;
- }
-
- port_delay_us(100);
- ADS1292_CS_SET();
-}
-
-uint8_t ads1292r_init(uint8_t timeout);
-void ads1292r_normal_adc_start(void);
-void ads1292r_test_adc_start(void);
-void ads1292r_get_value(uint8_t *ad_buf);
diff --git a/app/src/board/ads1291/ads1291.h b/app/src/board/ads1291/ads1291.h
deleted file mode 100644
index daac12f..0000000
--- a/app/src/board/ads1291/ads1291.h
+++ /dev/null
@@ -1,28 +0,0 @@
-#ifndef __ADS1292R_H
-#define __ADS1292R_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#include
-uint8_t ads1292r_init(uint8_t timeout);
-
-/** @brief 开启双通道正常模式采样,用于心电采集
- * @details 500sps,6倍增益,调用该函数后需调用读函数,读取ad数据
- * @retval NONE
- */
-void ads1292r_normal_adc_start(void);
-
-/** @brief 开启双测试信号adc转换。
- * @details 500sps,6倍增益,1HZ方波,调用该函数后需调用读函数,读取ad数据
- * @retval NONE
- */
-void ads1292r_test_adc_start(void);
-
-void ads1292r_get_value(uint8_t *ad_buf);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __ADS1292R_H */
diff --git a/app/src/board/ads1291/ads1291_type.h b/app/src/board/ads1291/ads1291_type.h
deleted file mode 100644
index 3b7089f..0000000
--- a/app/src/board/ads1291/ads1291_type.h
+++ /dev/null
@@ -1,330 +0,0 @@
-/**
- ******************************************************************************
- * @file : ads1291_typ.h
- * @brief : ads1291相关数据类型定义
- * @details : 寄存器标、命令表、
- * @author :
- * @date : 2020/9/2
- * @version : V0.1
- * @copyright : Copyright (C)
- ******************************************************************************
- * @attention
- * NONE
- ******************************************************************************
- * @verbatim
- * 修改历史:
- * 1. 日期:2020/9/2
- * 作者:Charmander
- * 修改:
- * @endverbatim
- ******************************************************************************
- */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __ADS1292_TYP_H
-#define __ADS1292_TYP_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/** @defgroup ADS1291_TYP ADS1291 TYP
- * @{
- */
-/* Exported types ------------------------------------------------------------*/
-/** @addtogroup ADS1291_TYP_Exported_types ADS1291 TYP Exported types
- * @{
- */
-
-/** @brief 寄存器地址枚举
- * @details 11个寄存器
- */
-typedef enum {
- ADS1291_REG_ID = 0x00,
- ADS1291_REG_CONFIG1 = 0x01,
- ADS1291_REG_CONFIG2 = 0x02,
- ADS1291_REG_LOFF = 0x03,
- ADS1291_REG_CH1SET = 0x04,
- ADS1291_REG_CH2SET = 0x05,
- ADS1291_REG_RLDSENS = 0x06,
- ADS1291_REG_LOFFSENS = 0x07,
- ADS1291_REG_LOFFSTAT = 0x08,
- ADS1291_REG_RESP1 = 0x09,
- ADS1291_REG_RESP2 = 0x0A,
- ADS1291_REG_GPIO = 0x0B
-} ADS1291_REG_E;
-
-/**
- * @}
- */
-
-/** @addtogroup ADS1291_TYP_Exported_constants ADS1291 TYP Exported constants
- * @brief 一下内容也可以全部由位域+枚举实现,考虑到不是所有编译器都支持,
- * 采用宏+掩码方式实现。
- * @{
- */
-
-/* Exported constants --------------------------------------------------------*/
-#define ADS1291_REG_SIZE_MAX 12 /* ADS1291寄存器数量 */
-
-/** @addtogroup ADS1291_TYP_REG_CONTENT ADS1291 TYP Exported content
- * @brief 各寄存器内容
- * @{
- */
-/* 芯片ID */
-#define ADS1291_ID 0x73
-
-/* 属于ADS1291_REG_CONFIG1的寄存器设置 */
-#define ADS1291_SINGLE_SHOT_OFF 0 /* 连续转换模式,默认 */
-#define ADS1291_SINGLE_SHOT_ON 1 /* 单次转换模式 */
-/* 采样率,该模块采用fclk为512k,0分频模式,其他配置下采样率会改变 */
-#define ADS1291_OVERSAMPLING_125SPS 0
-#define ADS1291_OVERSAMPLING_250SPS 1
-#define ADS1291_OVERSAMPLING_500SPS 2 /* 默认 */
-#define ADS1291_OVERSAMPLING_1000SPS 3
-#define ADS1291_OVERSAMPLING_2000SPS 4
-#define ADS1291_OVERSAMPLING_4000SPS 5
-#define ADS1291_OVERSAMPLING_8000SPS 6
-#define ADS1291_OVERSAMPLING_NONESPS 7
-
-/* 属于ADS1291_REG_CONFIG2的寄存器设置 */
-#define ADS1291_PDB_LOFF_COMP_OFF 0 /* 导联脱落比较器关,默认 */
-#define ADS1291_PDB_LOFF_COMP_ON 1 /* 导联脱落比较器开 */
-#define ADS1291_PDB_REFBUF_OFF 0 /* 内部参考电压关,默认 */
-#define ADS1291_PDB_REFBUF_ON 1 /* 内部参考电压开 */
-#define ADS1291_VREF_2420MV 0 /* 选择参考电压为2.42v,默认 */
-#define ADS1291_VREF_4033MV 1 /* 选择参考电压为4.033v */
-#define ADS1291_CLK_OUTPUT_OFF 0 /* 时钟输出关,默认 */
-#define ADS1291_CLK_OUTPUT_ON 1 /* 时钟输出开 */
-#define ADS1291_INT_TEST_OFF 0 /* 内部测试电压关,默认 */
-#define ADS1291_INT_TEST_ON 1 /* 内部测试电压开 */
-#define ADS1291_INT_FREQ_DC 0 /* 直流,默认 */
-#define ADS1291_INT_FREQ_AC 1 /* 1HZ方波 */
-
-/* 属于ADS1291_REG_LOFF的寄存器设置 */
-
-/* 属于ADS1291_REG_CH1SET,与ADS1291_REG_CH2SET的寄存器设置 */
-#define ADS1291_CHx_OFF 1 /* 禁止使用通道一 */
-#define ADS1291_CHx_ON 0 /* 使用通道一,默认 */
-
-#define ADS1291_GAIN_6 0 /* 使用通道一6倍增益,默认 */
-#define ADS1291_GAIN_1 1 /* 使用通道一1倍增益 */
-#define ADS1291_GAIN_2 2 /* 使用通道一2倍增益 */
-#define ADS1291_GAIN_3 3 /* 使用通道一3倍增益 */
-#define ADS1291_GAIN_4 4 /* 使用通道一4倍增益 */
-#define ADS1291_GAIN_8 5 /* 使用通道一8倍增益 */
-#define ADS1291_GAIN_12 6 /* 使用通道一12倍增益 */
-/* 选择通道一的输入 */
-#define ADS1291_CHx_INPUT_NORMAL 0 /* 正常电极输入,默认 */
-#define ADS1291_CHx_INPUT_SHORTED 1 /* 短路,测偏执用 */
-#define ADS1291_CHx_INPUT_RLD 2 /* 右腿驱动 */
-/* For channel 1, (MVDDP – MVDDN) is [0.5(AVDD + AVSS)]; for channel 2, (MVDDP – MVDDN) is DVDD / 4. */
-/* For channel 2,VDD / 2 for supply measurement */
-#define ADS1291_CHx_INPUT_MVDD 3
-#define ADS1291_CHx_INPUT_TEMP 4 /* 板载温度 */
-#define ADS1291_CHx_INPUT_TEST 5 /* 内部测试信号 */
-#define ADS1291_CHx_INPUT_RLDDRP 6
-#define ADS1291_CHx_INPUT_RLDDRM 7
-#define ADS1291_CHx_INPUT_RLDDRPM 8
-#define ADS1291_CHx_INPUT_ROUTE 9 /* 连接到通道三 */
-#define ADS1291_CHx_INPUT_RESERVED 10 /* 预留 */
-
-/* 属于ADS1291_REG_RLDSENS的寄存器设置 */
-#define ADS1291_CHOP_FREQ_DIV4 3 /* PGA斩波频率未fMOD/4 */
-#define ADS1291_PDB_RLD_OFF 0 /* 右腿驱动电源关,默认 */
-#define ADS1291_PDB_RLD_ON 1 /* 右腿驱动电源开 */
-#define ADS1291_PDB_RLD_SENSE_OFF 0 /* 右腿驱动导联脱落检测关,默认 */
-#define ADS1291_PDB_RLD_SENSE_ON 1 /* 右腿驱动导联脱落检测开 */
-#define ADS1291_RLD2N_OFF 0 /* 通道二负极为右腿输入关,默认 */
-#define ADS1291_RLD2N_ON 1 /* 通道二负极为右腿输入开 */
-#define ADS1291_RLD2P_OFF 0 /* 通道二正极为右腿输入关,默认 */
-#define ADS1291_RLD2P_ON 1 /* 通道二正极为右腿输入开 */
-#define ADS1291_RLD1N_OFF 0 /* 通道一负极为右腿输入关,默认 */
-#define ADS1291_RLD1N_ON 1 /* 通道一负极为右腿输入开 */
-#define ADS1291_RLD1P_OFF 0 /* 通道一正极为右腿输入关,默认 */
-#define ADS1291_RLD1P_ON 1 /* 通道一正极为右腿输入开 */
-
-/* 属于ADS1291_REG_LOFFSENS的寄存器设置 */
-#define ADS1291_FLIP2_OFF 0 /* 导联脱落检测通道二电流方向关,默认 */
-#define ADS1291_FLIP2_ON 1 /* 导联脱落检测通道二电流方向开 */
-#define ADS1291_FLIP1_OFF 0 /* 导联脱落检测通道一电流方向关,默认 */
-#define ADS1291_FLIP1_ON 1 /* 导联脱落检测通道一电流方向开 */
-#define ADS1291_LOFF2N_OFF 0 /* 通道二负极导联脱落检测关,默认 */
-#define ADS1291_LOFF2N_ON 1 /* 通道二负极导联脱落检测开 */
-#define ADS1291_LOFF2P_OFF 0 /* 通道二正极导联脱落检测关,默认 */
-#define ADS1291_LOFF2P_ON 1 /* 通道二正极导联脱落检测开 */
-#define ADS1291_LOFF1N_OFF 0 /* 通道一负极导联脱落检测关,默认 */
-#define ADS1291_LOFF1N_ON 1 /* 通道一负极导联脱落检测开 */
-#define ADS1291_LOFF1P_OFF 0 /* 通道一正极导联脱落检测关,默认 */
-#define ADS1291_LOFF1P_ON 1 /* 通道一正极导联脱落检测开 */
-
-/* 属于ADS1291_REG_LOFFSTAT的寄存器设置 */
-#define ADS1291_CLK_DIV4 0 /* 0 = fMOD = fCLK / 4 (default, use when fCLK = 512 kHz) */
-#define ADS1291_CLK_DIV16 1 /* 1 = fMOD = fCLK / 16 (use when fCLK = 2.048 MHz) */
-
-/* 属于ADS1291_REG_RESP1的寄存器设置 */
-#define ADS1291_DEMOD_EN1_OFF 0 /* 通道一上的呼吸解调电路关,默认 */
-#define ADS1291_DEMOD_EN1_ON 1 /* 通道一上的呼吸解调电路开 */
-#define ADS1291_DEMOD_EN_OFF 0 /* 通道一上的呼吸调制电路关,默认 */
-#define ADS1291_DEMOD_EN_ON 1 /* 通道一上的呼吸调制电路开 */
-#define ADS1291_RESPPH_0 0 /* 解调信号相位偏移0,默认 */
-#define ADS1291_RESPPH_135 0x0c /* 解调信号相位偏移135度 */
-#define ADS1291_RESP_CTRL_INT 0 /* 内部呼吸内部时钟,默认 */
-#define ADS1291_RESP_CTRL_EXT 1 /* 内部呼吸外部时钟 */
-
-/* 属于ADS1291_REG_RESP2的寄存器设置 */
-#define ADS1291_CALIB_ON_OFF 0 /* 校准关,默认 */
-#define ADS1291_CALIB_ON_ON 1 /* 校准开 */
-#define ADS1291_RESP_FREQ_36 0 /* 通道一上的呼吸调制电路关,默认 */
-#define ADS1291_RESP_FREQ_64 1 /* 通道一上的呼吸调制电路开 */
-#define ADS1291_RLDREF_EXT 0 /* 右腿驱动参考电压选择外部反馈,默认 */
-#define ADS1291_RLDREF_INT 1 /* 右腿驱动参考电压选择内部信号 */
-
-/* 属于ADS1291_REG_GPIO的寄存器设置 */
-/**
- * @}
- */
-
-/** @addtogroup ADS1291_TYP_REG_MASK ADS1291 TYP Reg Mask
- * @brief 各寄存器值与位置掩码,被ADS1291_GET_BITS与ADS1291_SET_BITS函数调用
- * @{
- */
-#define ADS1291_ID_POS 0
-#define ADS1291_ID_MASK 0xFF
-
-#define ADS1291_SINGLE_SHOT_POS 7
-#define ADS1291_SINGLE_SHOT_MASK 0x80
-#define ADS1291_DR_POS 0
-#define ADS1291_DR_MASK 0x07
-
-#define ADS1291_PDB_LOFF_COMP_POS 6
-#define ADS1291_PDB_LOFF_COMP_MASK 0x40
-#define ADS1291_PDB_REFBUF_POS 5
-#define ADS1291_PDB_REFBUF_MASK 0x20
-#define ADS1291_VREF_4V_POS 4
-#define ADS1291_VREF_4V_MASK 0x10
-#define ADS1291_CLK_EN_POS 3
-#define ADS1291_CLK_EN_MASK 0x80
-#define ADS1291_INT_TEST_POS 1
-#define ADS1291_INT_TEST_MASK 0x02
-#define ADS1291_INT_FREQ_POS 0
-#define ADS1291_INT_FREQ_MASK 0x01
-
-#define ADS1291_PDx_POS 7
-#define ADS1291_PDx_MASK 0x80
-#define ADS1291_GAINx_POS 4
-#define ADS1291_GAINx_MASK 0x70
-#define ADS1291_MUXx_POS 0
-#define ADS1291_MUXx_MASK 0x0F
-
-#define ADS1291_CHOP_POS 6
-#define ADS1291_CHOP_MASK 0xC0
-#define ADS1291_PDB_RLD_POS 5
-#define ADS1291_PDB_RLD_MASK 0x20
-#define ADS1291_RLD_LOFF_SENSE_POS 4
-#define ADS1291_RLD_LOFF_SENSE_MASK 0x10
-#define ADS1291_RLD2N_POS 3
-#define ADS1291_RLD2N_MASK 0x08
-#define ADS1291_RLD2P_POS 2
-#define ADS1291_RLD2P_MASK 0x04
-#define ADS1291_RLD1N_POS 1
-#define ADS1291_RLD1N_MASK 0x02
-#define ADS1291_RLD1P_POS 0
-#define ADS1291_RLD1P_MASK 0x01
-
-#define ADS1291_FLIP2_POS 5
-#define ADS1291_FLIP2_MASK 0x20
-#define ADS1291_FLIP1_POS 4
-#define ADS1291_FLIP1_MASK 0x10
-#define ADS1291_LOFF2N_POS 3
-#define ADS1291_LOFF2N_MASK 0x08
-#define ADS1291_LOFF2P_POS 2
-#define ADS1291_LOFF2P_MASK 0x04
-#define ADS1291_LOFFN_POS 1
-#define ADS1291_LOFF1N_MASK 0x02
-#define ADS1291_LOFF1P_POS 0
-#define ADS1291_LOFF1P_MASK 0x01
-
-#define ADS1291_CLK_DIV_POS 6
-#define ADS1291_CLK_DIV_MASK 0x40
-
-#define ADS1291_RESP_DEMOD_EN1_POS 7
-#define ADS1291_RESP_DEMOD_EN1_MASK 0x80
-#define ADS1291_RESP_MOD_EN_POS 6
-#define ADS1291_RESP_MOD_EN_MASK 0x40
-#define ADS1291_RESP_PH_POS 2
-#define ADS1291_RESP_PH_MASK 0x3c
-#define ADS1291_RESP_CTRL_POS 0
-#define ADS1291_RESP_CTRL_MASK 0x01
-
-#define ADS1291_CALIB_ON_POS 7
-#define ADS1291_CALIB_ON_MASK 0x80
-#define ADS1291_RESP_FREQ_POS 2
-#define ADS1291_RESP_FREQ_MASK 0x04
-#define ADS1291_RLDREF_INT_POS 1
-#define ADS1291_RLDREF_INT_MASK 0x02
-
-/**
- * @}
- */
-
-/** @addtogroup ADS1291_TYP_COMMAND ADS1291 TYP COMMAND
- * @brief 命令
- * @{
- */
-/* System Commands */
-#define ADS1291_COMMAND_WAKEUP 0x02
-#define ADS1291_COMMAND_STANDBY 0x04
-#define ADS1291_COMMAND_RESET 0x06
-#define ADS1291_COMMAND_START 0x08
-#define ADS1291_COMMAND_STOP 0x0A
-#define ADS1291_COMMAND_OFFSETCAL 0x1A
-
-/* Data Read Commands */
-#define ADS1291_COMMAND_RDATAC 0x10
-#define ADS1291_COMMAND_SDATAC 0x11
-#define ADS1291_COMMAND_RDATA 0x12
-
-/* Register Read Commands,最后5位为读写的地址 */
-#define ADS1291_COMMAND_RREG 0x20
-#define ADS1291_COMMAND_WREG 0x40
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/* Exported macro ------------------------------------------------------------*/
-/** @brief 读取ADS1291的指定寄存器的指定位
- * @details
- * @param[in] bitname 位名字
- * @param[in] reg 寄存器名字
- * @retval 该位的值
- */
-#define ADS1291_GET_BITS(bitname, reg) ((reg & bitname##_MASK) >> bitname##_POS)
-
-/** @brief 设置ADS1291的指定寄存器的指定位
- * @details
- * @param[in] reg 寄存器名字
- * @param[in] bitname 位名字
- * @param[in] val 要设置的值
- * @retval NONE
- */
-#define ADS1291_SET_BITS(reg, bitname, val) ((reg & ~bitname##_MASK) | ((val << bitname##_POS) & bitname##_MASK))
-/* Exported functions --------------------------------------------------------*/
-
-/**
- * @}
- */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __ADS1292_TYP_H */
diff --git a/app/src/board/ads129x/ads129x.c b/app/src/board/ads129x/ads129x.c
new file mode 100644
index 0000000..c2bd6a4
--- /dev/null
+++ b/app/src/board/ads129x/ads129x.c
@@ -0,0 +1,151 @@
+#include "ads129x.h"
+
+#include "ads129x_type.h"
+#include "board/app_board.h"
+
+#define ADS129X_CS_SET() nrf_gpio_pin_set(ADS1291_SPI_CS0_PIN);
+#define ADS129X_CS_RESET() nrf_gpio_pin_clear(ADS1291_SPI_CS0_PIN);
+#define ADS129X_START_SET() nrf_gpio_pin_set(ADS1291_START_PIN);
+#define ADS129X_START_RESET() nrf_gpio_pin_clear(ADS1291_START_PIN);
+#define ADS129X_REST_SET() nrf_gpio_pin_set(ADS1291_PWDN_PIN);
+#define ADS129X_REST_RESET() nrf_gpio_pin_clear(ADS1291_PWDN_PIN);
+#define ADS129X_DRDY_GET() nrf_gpio_pin_read(ADS1291_READY_PIN)
+
+static void port_ads129x_delay_us(uint32_t us) { nrf_delay_us(us); }
+static void port_ads129x_delay_ms(uint32_t ms) { nrf_delay_ms(ms); }
+
+/***********************************************************************************************************************
+ * BASE_FUNCTION_IMPL *
+ ***********************************************************************************************************************/
+static ads129x_regs_t ads129X_reg = {0};
+
+uint8_t port_spi_transmit_receive(uint8_t tx) {
+ uint8_t data;
+ nrf_drv_spi_transfer(&ads129x_spi, &tx, 1, &data, 1);
+ return data;
+}
+
+/* ads129X发送指令 */
+uint8_t ads129X_send_cmd(uint8_t cmd) {
+ uint8_t rx = 0;
+
+ ADS129X_CS_RESET(); /* 选中设备 */
+ port_ads129x_delay_us(100);
+
+ rx = port_spi_transmit_receive(cmd);
+
+ port_ads129x_delay_us(100);
+ ADS129X_CS_SET(); /* 释放设备 */
+
+ return rx;
+}
+
+/* ads129X读写寄存器,自动根据指令类型区分读和写操作 */
+uint8_t ads129X_rw_reg(uint8_t cmd, uint8_t data) {
+ uint8_t rx = 0;
+
+ ADS129X_CS_RESET(); /* 选中设备 */
+ port_ads129x_delay_us(1);
+
+ port_spi_transmit_receive(cmd); /* 发送读写指令 */
+ port_spi_transmit_receive(0X00); /* 只写一个数据 */
+
+ if ((cmd & ADS129X_COMMAND_RREG) == ADS129X_COMMAND_RREG) /* 判断指令类型 */
+ rx = port_spi_transmit_receive(0X00); /* 返回寄存器值 */
+ else
+ rx = port_spi_transmit_receive(data); /* 写入数值 */
+
+ port_ads129x_delay_us(1);
+ ADS129X_CS_SET(); /* 释放设备 */
+
+ return rx;
+}
+
+/* 从指定寄存器开始读写一定数量的寄存器 */
+void ads129X_write_multiregs(uint8_t reg, uint8_t* ch, uint8_t size) {
+ uint8_t i;
+
+ ADS129X_CS_RESET(); /* 选中设备 */
+ port_ads129x_delay_us(100);
+
+ port_spi_transmit_receive(ADS129X_COMMAND_WREG | reg);
+ port_ads129x_delay_us(100);
+ port_spi_transmit_receive(size - 1);
+
+ for (i = 0; i < size; i++) {
+ port_ads129x_delay_us(100);
+ port_spi_transmit_receive(*ch);
+ ch++;
+ }
+
+ port_ads129x_delay_us(100);
+ ADS129X_CS_SET();
+}
+
+/* 从指定寄存器开始读写一定数量的寄存器 */
+void ads129X_read_multiregs(uint8_t reg, uint8_t* ch, uint8_t size) {
+ uint8_t i;
+
+ ADS129X_CS_RESET(); /* 选中设备 */
+ port_ads129x_delay_us(100);
+
+ port_spi_transmit_receive(ADS129X_COMMAND_RREG | reg);
+ port_ads129x_delay_us(100);
+ port_spi_transmit_receive(size - 1);
+
+ for (i = 0; i < size; i++) {
+ port_ads129x_delay_us(100);
+ *ch = port_spi_transmit_receive(0);
+ ch++;
+ }
+
+ port_ads129x_delay_us(100);
+ ADS129X_CS_SET();
+}
+
+/***********************************************************************************************************************
+ * EXTERN *
+ ***********************************************************************************************************************/
+
+uint8_t ads129x_init() {
+ /**
+ * @brief
+ */
+
+ ADS129X_CS_SET();
+
+ ADS129X_REST_RESET();
+ ADS129X_START_RESET();
+ port_ads129x_delay_ms(1000);
+ ADS129X_REST_SET();
+ port_ads129x_delay_ms(100); /* 硬件复位 */
+
+ ads129X_send_cmd(ADS129X_COMMAND_SDATAC); /* 软件复位,并停止连续读状态 */
+ port_ads129x_delay_ms(100);
+ ads129X_send_cmd(ADS129X_COMMAND_RESET);
+ port_ads129x_delay_ms(1000);
+ ads129X_send_cmd(ADS129X_COMMAND_SDATAC);
+ port_ads129x_delay_ms(100);
+
+ nrf_gpio_pin_set(ADS1291_PWDN_PIN);
+ nrf_delay_ms(2000);
+ char txdata[] = {1, 2, 3, 4};
+ while (true) /* 识别芯片型号,1291:0x52 */
+ {
+ uint8_t id = ads129X_rw_reg(ADS129X_COMMAND_RREG | ADS129X_REG_ID, 0);
+ // nrf_log_backend_uart_tx_raw(txdata, 4);
+ // znordic_force_flush_log();
+
+ ZLOGI("ads129X id: %x", id);
+ nrf_delay_ms(1000);
+ }
+}
+
+uint8_t ads129x_start_capture(uint8_t* cfg, bool test) { return 0; }
+uint8_t ads129x_enter_low_power_mode() { return 0; }
+uint8_t ads129x_enter_lead_off_detect_mode() { return 0; }
+
+uint8_t ads129x_data_is_ready() { return 0; }
+void ads129x_read_data(uint8_t* data, uint8_t len) {}
+
+uint8_t ads129x_get_lead_off_state() { return 0; }
\ No newline at end of file
diff --git a/app/src/board/ads129x/ads129x.h b/app/src/board/ads129x/ads129x.h
new file mode 100644
index 0000000..d9047fe
--- /dev/null
+++ b/app/src/board/ads129x/ads129x.h
@@ -0,0 +1,26 @@
+#pragma once
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#include
+#include
+
+/**
+ * @brief 初始化SPI
+ */
+
+uint8_t ads129x_init();
+
+uint8_t ads129x_start_capture(uint8_t* cfg, bool test);
+uint8_t ads129x_enter_low_power_mode();
+uint8_t ads129x_enter_lead_off_detect_mode();
+
+uint8_t ads129x_data_is_ready();
+void ads129x_read_data(uint8_t* data, uint8_t len);
+
+uint8_t ads129x_get_lead_off_state();
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/app/src/board/ads129x/ads129x_type.h b/app/src/board/ads129x/ads129x_type.h
new file mode 100644
index 0000000..fc387b1
--- /dev/null
+++ b/app/src/board/ads129x/ads129x_type.h
@@ -0,0 +1,286 @@
+#pragma once
+#include
+#ifdef __cplusplus
+extern "C" {
+#endif
+typedef enum {
+ ADS129X_REG_ID = 0x00,
+ ADS129X_REG_CONFIG1 = 0x01,
+ ADS129X_REG_CONFIG2 = 0x02,
+ ADS129X_REG_LOFF = 0x03,
+ ADS129X_REG_CH1SET = 0x04,
+ ADS129X_REG_CH2SET = 0x05,
+ ADS129X_REG_RLDSENS = 0x06,
+ ADS129X_REG_LOFFSENS = 0x07,
+ ADS129X_REG_LOFFSTAT = 0x08,
+ ADS129X_REG_RESP1 = 0x09,
+ ADS129X_REG_RESP2 = 0x0A,
+ ADS129X_REG_GPIO = 0x0B
+} ADS129X_REG_E;
+
+typedef struct {
+ uint8_t id; /* id,ads1292r固定为0x73 */
+ uint8_t cfg1; /* 设置寄存器 */
+ uint8_t cfg2; /* 设置寄存器 */
+ uint8_t loff; /* 导联 */
+ uint8_t ch1set; /* 通道一设置 */
+ uint8_t ch2set; /* 通道二设置 */
+ uint8_t rld_sens; /* 右腿驱动 */
+ uint8_t loff_sens; /* 导联 */
+ uint8_t loff_stat; /* 导联 */
+ uint8_t resp1; /* 呼吸 */
+ uint8_t resp2; /* 呼吸 */
+ uint8_t gpio; /* gpio1,2的控制 */
+} ads129x_regs_t;
+
+#define ADS129X_REG_SIZE_MAX 12 /* ADS1291寄存器数量 */
+#define ADS129X_ID 0x52
+
+/* 属于ADS129X_REG_CONFIG1的寄存器设置 */
+#define ADS129X_SINGLE_SHOT_OFF 0 /* 连续转换模式,默认 */
+#define ADS129X_SINGLE_SHOT_ON 1 /* 单次转换模式 */
+/* 采样率,该模块采用fclk为512k,0分频模式,其他配置下采样率会改变 */
+#define ADS129X_OVERSAMPLING_125SPS 0
+#define ADS129X_OVERSAMPLING_250SPS 1
+#define ADS129X_OVERSAMPLING_500SPS 2 /* 默认 */
+#define ADS129X_OVERSAMPLING_1000SPS 3
+#define ADS129X_OVERSAMPLING_2000SPS 4
+#define ADS129X_OVERSAMPLING_4000SPS 5
+#define ADS129X_OVERSAMPLING_8000SPS 6
+#define ADS129X_OVERSAMPLING_NONESPS 7
+
+/* 属于ADS129X_REG_CONFIG2的寄存器设置 */
+#define ADS129X_PDB_LOFF_COMP_OFF 0 /* 导联脱落比较器关,默认 */
+#define ADS129X_PDB_LOFF_COMP_ON 1 /* 导联脱落比较器开 */
+#define ADS129X_PDB_REFBUF_OFF 0 /* 内部参考电压关,默认 */
+#define ADS129X_PDB_REFBUF_ON 1 /* 内部参考电压开 */
+#define ADS129X_VREF_2420MV 0 /* 选择参考电压为2.42v,默认 */
+#define ADS129X_VREF_4033MV 1 /* 选择参考电压为4.033v */
+#define ADS129X_CLK_OUTPUT_OFF 0 /* 时钟输出关,默认 */
+#define ADS129X_CLK_OUTPUT_ON 1 /* 时钟输出开 */
+#define ADS129X_INT_TEST_OFF 0 /* 内部测试电压关,默认 */
+#define ADS129X_INT_TEST_ON 1 /* 内部测试电压开 */
+#define ADS129X_INT_FREQ_DC 0 /* 直流,默认 */
+#define ADS129X_INT_FREQ_AC 1 /* 1HZ方波 */
+
+/* 属于ADS129X_REG_LOFF的寄存器设置 */
+
+/* 属于ADS129X_REG_CH1SET,与ADS129X_REG_CH2SET的寄存器设置 */
+#define ADS129X_CHx_OFF 1 /* 禁止使用通道一 */
+#define ADS129X_CHx_ON 0 /* 使用通道一,默认 */
+
+#define ADS129X_GAIN_6 0 /* 使用通道一6倍增益,默认 */
+#define ADS129X_GAIN_1 1 /* 使用通道一1倍增益 */
+#define ADS129X_GAIN_2 2 /* 使用通道一2倍增益 */
+#define ADS129X_GAIN_3 3 /* 使用通道一3倍增益 */
+#define ADS129X_GAIN_4 4 /* 使用通道一4倍增益 */
+#define ADS129X_GAIN_8 5 /* 使用通道一8倍增益 */
+#define ADS129X_GAIN_12 6 /* 使用通道一12倍增益 */
+/* 选择通道一的输入 */
+#define ADS129X_CHx_INPUT_NORMAL 0 /* 正常电极输入,默认 */
+#define ADS129X_CHx_INPUT_SHORTED 1 /* 短路,测偏执用 */
+#define ADS129X_CHx_INPUT_RLD 2 /* 右腿驱动 */
+/* For channel 1, (MVDDP – MVDDN) is [0.5(AVDD + AVSS)]; for channel 2, (MVDDP – MVDDN) is DVDD / 4. */
+/* For channel 2,VDD / 2 for supply measurement */
+#define ADS129X_CHx_INPUT_MVDD 3
+#define ADS129X_CHx_INPUT_TEMP 4 /* 板载温度 */
+#define ADS129X_CHx_INPUT_TEST 5 /* 内部测试信号 */
+#define ADS129X_CHx_INPUT_RLDDRP 6
+#define ADS129X_CHx_INPUT_RLDDRM 7
+#define ADS129X_CHx_INPUT_RLDDRPM 8
+#define ADS129X_CHx_INPUT_ROUTE 9 /* 连接到通道三 */
+#define ADS129X_CHx_INPUT_RESERVED 10 /* 预留 */
+
+/* 属于ADS129X_REG_RLDSENS的寄存器设置 */
+#define ADS129X_CHOP_FREQ_DIV4 3 /* PGA斩波频率未fMOD/4 */
+#define ADS129X_PDB_RLD_OFF 0 /* 右腿驱动电源关,默认 */
+#define ADS129X_PDB_RLD_ON 1 /* 右腿驱动电源开 */
+#define ADS129X_PDB_RLD_SENSE_OFF 0 /* 右腿驱动导联脱落检测关,默认 */
+#define ADS129X_PDB_RLD_SENSE_ON 1 /* 右腿驱动导联脱落检测开 */
+#define ADS129X_RLD2N_OFF 0 /* 通道二负极为右腿输入关,默认 */
+#define ADS129X_RLD2N_ON 1 /* 通道二负极为右腿输入开 */
+#define ADS129X_RLD2P_OFF 0 /* 通道二正极为右腿输入关,默认 */
+#define ADS129X_RLD2P_ON 1 /* 通道二正极为右腿输入开 */
+#define ADS129X_RLD1N_OFF 0 /* 通道一负极为右腿输入关,默认 */
+#define ADS129X_RLD1N_ON 1 /* 通道一负极为右腿输入开 */
+#define ADS129X_RLD1P_OFF 0 /* 通道一正极为右腿输入关,默认 */
+#define ADS129X_RLD1P_ON 1 /* 通道一正极为右腿输入开 */
+
+/* 属于ADS129X_REG_LOFFSENS的寄存器设置 */
+#define ADS129X_FLIP2_OFF 0 /* 导联脱落检测通道二电流方向关,默认 */
+#define ADS129X_FLIP2_ON 1 /* 导联脱落检测通道二电流方向开 */
+#define ADS129X_FLIP1_OFF 0 /* 导联脱落检测通道一电流方向关,默认 */
+#define ADS129X_FLIP1_ON 1 /* 导联脱落检测通道一电流方向开 */
+#define ADS129X_LOFF2N_OFF 0 /* 通道二负极导联脱落检测关,默认 */
+#define ADS129X_LOFF2N_ON 1 /* 通道二负极导联脱落检测开 */
+#define ADS129X_LOFF2P_OFF 0 /* 通道二正极导联脱落检测关,默认 */
+#define ADS129X_LOFF2P_ON 1 /* 通道二正极导联脱落检测开 */
+#define ADS129X_LOFF1N_OFF 0 /* 通道一负极导联脱落检测关,默认 */
+#define ADS129X_LOFF1N_ON 1 /* 通道一负极导联脱落检测开 */
+#define ADS129X_LOFF1P_OFF 0 /* 通道一正极导联脱落检测关,默认 */
+#define ADS129X_LOFF1P_ON 1 /* 通道一正极导联脱落检测开 */
+
+/* 属于ADS129X_REG_LOFFSTAT的寄存器设置 */
+#define ADS129X_CLK_DIV4 0 /* 0 = fMOD = fCLK / 4 (default, use when fCLK = 512 kHz) */
+#define ADS129X_CLK_DIV16 1 /* 1 = fMOD = fCLK / 16 (use when fCLK = 2.048 MHz) */
+
+/* 属于ADS129X_REG_RESP1的寄存器设置 */
+#define ADS129X_DEMOD_EN1_OFF 0 /* 通道一上的呼吸解调电路关,默认 */
+#define ADS129X_DEMOD_EN1_ON 1 /* 通道一上的呼吸解调电路开 */
+#define ADS129X_DEMOD_EN_OFF 0 /* 通道一上的呼吸调制电路关,默认 */
+#define ADS129X_DEMOD_EN_ON 1 /* 通道一上的呼吸调制电路开 */
+#define ADS129X_RESPPH_0 0 /* 解调信号相位偏移0,默认 */
+#define ADS129X_RESPPH_135 0x0c /* 解调信号相位偏移135度 */
+#define ADS129X_RESP_CTRL_INT 0 /* 内部呼吸内部时钟,默认 */
+#define ADS129X_RESP_CTRL_EXT 1 /* 内部呼吸外部时钟 */
+
+/* 属于ADS129X_REG_RESP2的寄存器设置 */
+#define ADS129X_CALIB_ON_OFF 0 /* 校准关,默认 */
+#define ADS129X_CALIB_ON_ON 1 /* 校准开 */
+#define ADS129X_RESP_FREQ_36 0 /* 通道一上的呼吸调制电路关,默认 */
+#define ADS129X_RESP_FREQ_64 1 /* 通道一上的呼吸调制电路开 */
+#define ADS129X_RLDREF_EXT 0 /* 右腿驱动参考电压选择外部反馈,默认 */
+#define ADS129X_RLDREF_INT 1 /* 右腿驱动参考电压选择内部信号 */
+
+/* 属于ADS129X_REG_GPIO的寄存器设置 */
+/**
+ * @}
+ */
+
+/** @addtogroup ADS129X_TYP_REG_MASK ADS1291 TYP Reg Mask
+ * @brief 各寄存器值与位置掩码,被ADS129X_GET_BITS与ADS129X_SET_BITS函数调用
+ * @{
+ */
+#define ADS129X_ID_POS 0
+#define ADS129X_ID_MASK 0xFF
+
+#define ADS129X_SINGLE_SHOT_POS 7
+#define ADS129X_SINGLE_SHOT_MASK 0x80
+#define ADS129X_DR_POS 0
+#define ADS129X_DR_MASK 0x07
+
+#define ADS129X_PDB_LOFF_COMP_POS 6
+#define ADS129X_PDB_LOFF_COMP_MASK 0x40
+#define ADS129X_PDB_REFBUF_POS 5
+#define ADS129X_PDB_REFBUF_MASK 0x20
+#define ADS129X_VREF_4V_POS 4
+#define ADS129X_VREF_4V_MASK 0x10
+#define ADS129X_CLK_EN_POS 3
+#define ADS129X_CLK_EN_MASK 0x80
+#define ADS129X_INT_TEST_POS 1
+#define ADS129X_INT_TEST_MASK 0x02
+#define ADS129X_INT_FREQ_POS 0
+#define ADS129X_INT_FREQ_MASK 0x01
+
+#define ADS129X_PDx_POS 7
+#define ADS129X_PDx_MASK 0x80
+#define ADS129X_GAINx_POS 4
+#define ADS129X_GAINx_MASK 0x70
+#define ADS129X_MUXx_POS 0
+#define ADS129X_MUXx_MASK 0x0F
+
+#define ADS129X_CHOP_POS 6
+#define ADS129X_CHOP_MASK 0xC0
+#define ADS129X_PDB_RLD_POS 5
+#define ADS129X_PDB_RLD_MASK 0x20
+#define ADS129X_RLD_LOFF_SENSE_POS 4
+#define ADS129X_RLD_LOFF_SENSE_MASK 0x10
+#define ADS129X_RLD2N_POS 3
+#define ADS129X_RLD2N_MASK 0x08
+#define ADS129X_RLD2P_POS 2
+#define ADS129X_RLD2P_MASK 0x04
+#define ADS129X_RLD1N_POS 1
+#define ADS129X_RLD1N_MASK 0x02
+#define ADS129X_RLD1P_POS 0
+#define ADS129X_RLD1P_MASK 0x01
+
+#define ADS129X_FLIP2_POS 5
+#define ADS129X_FLIP2_MASK 0x20
+#define ADS129X_FLIP1_POS 4
+#define ADS129X_FLIP1_MASK 0x10
+#define ADS129X_LOFF2N_POS 3
+#define ADS129X_LOFF2N_MASK 0x08
+#define ADS129X_LOFF2P_POS 2
+#define ADS129X_LOFF2P_MASK 0x04
+#define ADS129X_LOFFN_POS 1
+#define ADS129X_LOFF1N_MASK 0x02
+#define ADS129X_LOFF1P_POS 0
+#define ADS129X_LOFF1P_MASK 0x01
+
+#define ADS129X_CLK_DIV_POS 6
+#define ADS129X_CLK_DIV_MASK 0x40
+
+#define ADS129X_RESP_DEMOD_EN1_POS 7
+#define ADS129X_RESP_DEMOD_EN1_MASK 0x80
+#define ADS129X_RESP_MOD_EN_POS 6
+#define ADS129X_RESP_MOD_EN_MASK 0x40
+#define ADS129X_RESP_PH_POS 2
+#define ADS129X_RESP_PH_MASK 0x3c
+#define ADS129X_RESP_CTRL_POS 0
+#define ADS129X_RESP_CTRL_MASK 0x01
+
+#define ADS129X_CALIB_ON_POS 7
+#define ADS129X_CALIB_ON_MASK 0x80
+#define ADS129X_RESP_FREQ_POS 2
+#define ADS129X_RESP_FREQ_MASK 0x04
+#define ADS129X_RLDREF_INT_POS 1
+#define ADS129X_RLDREF_INT_MASK 0x02
+
+/**
+ * @}
+ */
+
+/** @addtogroup ADS129X_TYP_COMMAND ADS1291 TYP COMMAND
+ * @brief 命令
+ * @{
+ */
+/* System Commands */
+#define ADS129X_COMMAND_WAKEUP 0x02
+#define ADS129X_COMMAND_STANDBY 0x04
+#define ADS129X_COMMAND_RESET 0x06
+#define ADS129X_COMMAND_START 0x08
+#define ADS129X_COMMAND_STOP 0x0A
+#define ADS129X_COMMAND_OFFSETCAL 0x1A
+
+/* Data Read Commands */
+#define ADS129X_COMMAND_RDATAC 0x10
+#define ADS129X_COMMAND_SDATAC 0x11
+#define ADS129X_COMMAND_RDATA 0x12
+
+/* Register Read Commands,最后5位为读写的地址 */
+#define ADS129X_COMMAND_RREG 0x20
+#define ADS129X_COMMAND_WREG 0x40
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/* Exported macro ------------------------------------------------------------*/
+/** @brief 读取ADS1291的指定寄存器的指定位
+ * @details
+ * @param[in] bitname 位名字
+ * @param[in] reg 寄存器名字
+ * @retval 该位的值
+ */
+#define ADS129X_GET_BITS(bitname, reg) ((reg & bitname##_MASK) >> bitname##_POS)
+
+/** @brief 设置ADS1291的指定寄存器的指定位
+ * @details
+ * @param[in] reg 寄存器名字
+ * @param[in] bitname 位名字
+ * @param[in] val 要设置的值
+ * @retval NONE
+ */
+#define ADS129X_SET_BITS(reg, bitname, val) ((reg & ~bitname##_MASK) | ((val << bitname##_POS) & bitname##_MASK))
+/* Exported functions --------------------------------------------------------*/
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/app/src/board/app_board.c b/app/src/board/app_board.c
new file mode 100644
index 0000000..8791ca1
--- /dev/null
+++ b/app/src/board/app_board.c
@@ -0,0 +1,70 @@
+#include "app_board.h"
+
+/***********************************************************************************************************************
+ * MARCO *
+ ***********************************************************************************************************************/
+#define APP_BOARD_INIT_CHECK(exptr) \
+ do { \
+ ret_code_t ecode = (exptr); \
+ if (ecode != NRF_SUCCESS) { \
+ ZLOGE("%s:%d ZERROR_CHECK(%s) fail:%d", __FILE__, __LINE__, #exptr, ecode); \
+ } \
+ } while (0)
+
+/***********************************************************************************************************************
+ * HARDWARE_INSTANCE *
+ ***********************************************************************************************************************/
+
+nrf_drv_spi_t ads129x_spi = NRF_DRV_SPI_INSTANCE(ADS1291_SPI_INSTANCE); // global
+static nrf_drv_spi_config_t ads129x_spi_config = {
+ .sck_pin = ADS1291_SPI_SCK_PIN,
+ .mosi_pin = ADS1291_SPI_MOSI_PIN,
+ .miso_pin = ADS1291_SPI_MISO_PIN,
+ .ss_pin = NRF_DRV_SPI_PIN_NOT_USED,
+ .irq_priority = SPI_DEFAULT_CONFIG_IRQ_PRIORITY,
+ .orc = 0xFF,
+ .frequency = NRF_DRV_SPI_FREQ_8M,
+ .mode = NRF_DRV_SPI_MODE_1,
+ .bit_order = NRF_DRV_SPI_BIT_ORDER_MSB_FIRST,
+};
+on_irq_t ads129x_ready_pin_listener;
+
+static void ads1291_ready_pin_irq(nrfx_gpiote_pin_t pin, nrf_gpiote_polarity_t action) { //
+ if (ads129x_ready_pin_listener) ads129x_ready_pin_listener(kon_irq_ads1291_ready_pin);
+}
+
+void app_board_init() {
+ nrfx_gpiote_init();
+
+ /***********************************************************************************************************************
+ * ads129x *
+ ***********************************************************************************************************************/
+ APP_BOARD_INIT_CHECK(nrf_drv_spi_init(&ads129x_spi, &ads129x_spi_config, NULL, NULL));
+ znrf_gpio_cfg_output(ADS1291_PWDN_PIN, NRF_GPIO_PIN_NOPULL);
+ znrf_gpio_cfg_output(ADS1291_START_PIN, NRF_GPIO_PIN_NOPULL);
+ znrf_gpio_cfg_output(ADS1291_SPI_CS0_PIN, NRF_GPIO_PIN_NOPULL);
+ nrf_gpio_pin_clear(ADS1291_PWDN_PIN);
+ nrf_gpio_pin_clear(ADS1291_START_PIN);
+ nrf_gpio_pin_set(ADS1291_SPI_CS0_PIN);
+
+ // ---------------------------------------------------------------------------
+ nrf_gpio_cfg_input(ADS1291_READY_PIN, NRF_GPIO_PIN_NOPULL);
+ {
+ nrf_gpio_cfg_input(ADS1291_READY_PIN, NRF_GPIO_PIN_PULLUP);
+ nrf_drv_gpiote_in_config_t inConfig = GPIOTE_CONFIG_IN_SENSE_TOGGLE(false); //
+ inConfig.pull = NRF_GPIO_PIN_PULLUP; // 默认上拉
+ inConfig.sense = NRF_GPIOTE_POLARITY_HITOLO; // 下降沿触发
+ nrfx_gpiote_in_init(ADS1291_READY_PIN, &inConfig, ads1291_ready_pin_irq);
+ }
+}
+
+void app_board_reg_irq_listener(app_board_irq_event_t event, on_irq_t listener) {
+ switch (event) {
+ case kon_irq_ads1291_ready_pin:
+ ads129x_ready_pin_listener = listener;
+ break;
+ default:
+ break;
+ }
+}
+void app_board_change_state(app_board_power_state_t state) {}
diff --git a/app/src/board/app_board.h b/app/src/board/app_board.h
new file mode 100644
index 0000000..33846ae
--- /dev/null
+++ b/app/src/board/app_board.h
@@ -0,0 +1,38 @@
+#pragma once
+#include "nrf_drv_gpiote.h"
+#include "znordic.h"
+
+#define ADS1291_SPI_INSTANCE 2
+
+/***********************************************************************************************************************
+ * ADS1291_IF *
+ ***********************************************************************************************************************/
+#define ADS1291_SPI_CS0_PIN 3
+#define ADS1291_SPI_SCK_PIN (32 + 3)
+#define ADS1291_SPI_MOSI_PIN 19
+#define ADS1291_SPI_MISO_PIN (32 + 5)
+#define ADS1291_PWDN_PIN 28
+#define ADS1291_START_PIN 2
+#define ADS1291_READY_PIN 23
+
+typedef enum {
+ kapp_power_state_uint,
+ kapp_power_state_standby,
+ kapp_power_state_working,
+} app_board_power_state_t;
+
+typedef enum {
+ kon_irq_ads1291_ready_pin,
+ kon_irq_max,
+} app_board_irq_event_t;
+
+typedef void (*on_irq_t)(app_board_irq_event_t event);
+
+void app_board_init();
+void app_board_reg_irq_listener(app_board_irq_event_t event, on_irq_t listener);
+void app_board_change_state(app_board_power_state_t state);
+
+/***********************************************************************************************************************
+ * GLOBAL *
+ ***********************************************************************************************************************/
+extern nrf_drv_spi_t ads129x_spi;
diff --git a/app/src/board/board_ecg_sensor.c b/app/src/board/board_ecg_sensor.c
index 48d19c0..77c8676 100644
--- a/app/src/board/board_ecg_sensor.c
+++ b/app/src/board/board_ecg_sensor.c
@@ -186,7 +186,7 @@ uint8_t ads1292r_send_cmd(uint8_t cmd) {
return rx;
}
-void znrf_serial_tx(char const * p_buffer, size_t len);
+void nrf_log_backend_uart_tx_raw(char const * p_buffer, size_t len);
void BoardEcgSensor_init() {
/**
@@ -216,7 +216,7 @@ void BoardEcgSensor_init() {
while (true) /* 识别芯片型号,1291:0x52 */
{
uint8_t id = ads1292r_rw_reg(ADS1292R_COMMAND_RREG | ADS1292R_REG_ID, 0);
- znrf_serial_tx(txdata,4);
+ nrf_log_backend_uart_tx_raw(txdata,4);
znordic_force_flush_log();
nrf_delay_ms(1000);
}
diff --git a/app/src/main.c b/app/src/main.c
index d1e9149..5044b76 100644
--- a/app/src/main.c
+++ b/app/src/main.c
@@ -6,10 +6,10 @@
#include
#include
//
+#include "aproject_config/config.h"
#include "basic_service/app_event.h"
#include "basic_service/app_event_distribute.h"
#include "basic_service/device_version_info_mgr.h"
-#include "aproject_config/config.h"
#include "zble_module.h"
#include "zdatachannel_service.h"
//
@@ -18,9 +18,9 @@ ZDATACHANNEL_DEF(m_zhrs, 2 /*
/**
* @brief 蓝牙消息解析
*/
-void zdatachannel_data_handler(zdatachannel_evt_t* p_evt) {
+void zdatachannel_data_handler(zdatachannel_evt_t *p_evt) {
if (p_evt->type == ZDATACHANNEL_EVT_RX_DATA) {
- ble_cmder_process_rx((uint8_t*)p_evt->params.rx_data.p_data, p_evt->params.rx_data.length);
+ ble_cmder_process_rx((uint8_t *)p_evt->params.rx_data.p_data, p_evt->params.rx_data.length);
}
}
void on_service_init(void) {
diff --git a/app/src/one_conduction_main.c b/app/src/one_conduction_main.c
index 3352b45..1d17d9f 100644
--- a/app/src/one_conduction_main.c
+++ b/app/src/one_conduction_main.c
@@ -11,11 +11,12 @@
#include "board/board_light_ctrl.h"
#include "board/board_power_mgr.h"
//
+#include "board/ads129x/ads129x.h"
+#include "board/app_board.h"
#include "service/ble_cmd_processer/ble_cmd_process_service.h"
#include "service/display_mgr/display_manager.h"
#include "service/heart_wave_sample_service/heart_wave_sample_service.h"
#include "service/storage/storage_service.h"
-
#include "zble_module.h"
#include "zdatachannel_service.h"
#include "znordic.h"
@@ -268,7 +269,8 @@ static void app_event_listener(void* p_event_data, uint16_t event_size) {
// BoardLight_setGreenLightEffect(kLightEffect_close);
state_machine__change_to_standby_state();
}
- // ZLOGI("bt:%d plod:%d has_disc:%d state:%d", zdatachannel_is_connected(), BoardEcgSensor_plod_get_connected_state_after_filter(), plod_state_has_disconnected_ms(), ds_cur_state_haspassed_ms());
+ // ZLOGI("bt:%d plod:%d has_disc:%d state:%d", zdatachannel_is_connected(), BoardEcgSensor_plod_get_connected_state_after_filter(),
+ // plod_state_has_disconnected_ms(), ds_cur_state_haspassed_ms());
}
/*******************************************************************************
@@ -445,6 +447,8 @@ void one_conduction_main() {
BoardEcgSensor_init();
BoardLight_Init();
BoardBattery_load();
+ app_board_init();
+ ads129x_init();
// power_on();
#if 0
diff --git a/app/src/service/heart_wave_sample_service/heart_wave_sample_service.c b/app/src/service/heart_wave_sample_service/heart_wave_sample_service.c
index e2e9dc3..766c887 100644
--- a/app/src/service/heart_wave_sample_service/heart_wave_sample_service.c
+++ b/app/src/service/heart_wave_sample_service/heart_wave_sample_service.c
@@ -2,6 +2,7 @@
#include "basic_service/app_event.h"
#include "basic_service/app_event_distribute.h"
+#include "board/ads129x/ads129x.h"
#include "board/board_ecg_sensor.h"
#include "heart_ware_sample_data_mgr.h"
#include "heart_wave_sample_data_pre_process.h"
diff --git a/libznordic b/libznordic
index 2668dd6..0122505 160000
--- a/libznordic
+++ b/libznordic
@@ -1 +1 @@
-Subproject commit 2668dd622893481e990fadd346385af93af3f2d7
+Subproject commit 01225055c1cbd6e6b3bc50a5f084d4e515063512
diff --git a/scripter/build_app.bat b/scripter/build_app.bat
index 425ae5f..cc053b0 100644
--- a/scripter/build_app.bat
+++ b/scripter/build_app.bat
@@ -7,7 +7,7 @@ call scripter\keil_build.bat app\app.uvprojx app\_build\app.hex
del output\app_whole.hex
del output\app.zip
del output\one_lead_ecg.zip
-del output\one_lead_ecg.hexb
+del output\one_lead_ecg.hex
@REM 检查是否编译成功
if not exist app\_build\app.hex (
diff --git a/sdk b/sdk
index 1d34e6a..864d182 160000
--- a/sdk
+++ b/sdk
@@ -1 +1 @@
-Subproject commit 1d34e6ac316c27dc0e1149835d5f1ad53e074c88
+Subproject commit 864d18285a795072cd58f877237749e22c5baf27