From c38e94f0ae05a1317b1fb0533a78eeb416f41a5a Mon Sep 17 00:00:00 2001 From: zhaohe Date: Fri, 2 Feb 2024 14:01:26 +0800 Subject: [PATCH] =?UTF-8?q?=E6=95=B0=E6=8D=AE=E4=B8=8A=E4=BC=A0OK?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/app_ble_service.c | 28 +++----- app/src/basic/config.h | 27 ------- app/src/board/board.h | 2 +- app/src/heart_wave_sample_service.c | 84 +++++++++++++++------- .../ble_app_uart_c_pca10100_s122.uvguix.h_zha | 2 +- 5 files changed, 70 insertions(+), 73 deletions(-) delete mode 100644 app/src/basic/config.h diff --git a/app/src/app_ble_service.c b/app/src/app_ble_service.c index baa9ddc..846d78f 100644 --- a/app/src/app_ble_service.c +++ b/app/src/app_ble_service.c @@ -121,26 +121,14 @@ void prvf_report_sample_data(uint32_t frameIndex, uint32_t data, uint32_t data2, /** * @brief 第一导联数据 */ - reportpacket->data[0] = (data >> 0) & 0xFF; - reportpacket->data[1] = (data >> 8) & 0xFF; - reportpacket->data[2] = (data >> 16) & 0xFF; - reportpacket->data[3] = 0; - - /** - * @brief 第二导联数据 - */ - reportpacket->data[4] = (data2 >> 0) & 0xFF; - reportpacket->data[5] = (data2 >> 8) & 0xFF; - reportpacket->data[6] = (data2 >> 16) & 0xFF; - reportpacket->data[7] = 0; - - /** - * @brief 第三导联数据 - */ - reportpacket->data[8] = (data3 >> 0) & 0xFF; - reportpacket->data[9] = (data3 >> 8) & 0xFF; - reportpacket->data[10] = (data3 >> 16) & 0xFF; - reportpacket->data[11] = 0; + // reportpacket->data[0] = (data >> 0) & 0xFF; + // reportpacket->data[1] = (data >> 8) & 0xFF; + // reportpacket->data[2] = (data >> 16) & 0xFF; + // reportpacket->data[3] = + + *(uint32_t*)(reportpacket->data) = data; + *(uint32_t*)(reportpacket->data + 4) = data2; + *(uint32_t*)(reportpacket->data + 8) = data3; // reportpacket->data[12] = 0xFE; // reportpacket->data[13] = 0xEF; diff --git a/app/src/basic/config.h b/app/src/basic/config.h deleted file mode 100644 index a4438b1..0000000 --- a/app/src/basic/config.h +++ /dev/null @@ -1,27 +0,0 @@ -#pragma once - -/** - * @brief - * - * 200HZ,16bit - * -> - * 1s => 200*2 => 400BYTE - * 248k - * -> - * 1s => 248*1024/400 => 634_S => 10.5min - */ - -#define MAX_STORAGE_TIMEOUT_S (60 * 10) -#define MAX_STORAGE_SIZE (MAX_STORAGE_TIMEOUT_S * 400) // 存储最大限制为 (256-8)kbyte -#define MAX_FILE_NUM 10 - -#define SAMPLE_RATE 200 -#define SAMPLE_PRECISION 12 - -#define AUTOMATIC_SLEEP_TIME 15000 -#define SAMPLE_MIN_TIME_S (30.0) - -/******************************************************************************* - * 优先级 * - *******************************************************************************/ - diff --git a/app/src/board/board.h b/app/src/board/board.h index 8a5fc51..b0999e7 100644 --- a/app/src/board/board.h +++ b/app/src/board/board.h @@ -60,7 +60,7 @@ #define FILE_MAX_COUNT 1 #define SDCARD_MAX_FILE_SIZE (uint32_t)(3 * 1024 * 1024 * 1024) // -#define SAMPLE_RATE 800 +#define SAMPLE_RATE 500 #define SAMPLE_PRECISION 24 #define APP_MAX_EVEN_SIZE MAX(APP_TIMER_SCHED_EVENT_DATA_SIZE, sizeof(app_event_t)) diff --git a/app/src/heart_wave_sample_service.c b/app/src/heart_wave_sample_service.c index f5df314..990c764 100644 --- a/app/src/heart_wave_sample_service.c +++ b/app/src/heart_wave_sample_service.c @@ -12,6 +12,7 @@ #define SENSOR0_ID 0 #define SENSOR1_ID 3 #define SENSOR2_ID 4 +static const nrfx_timer_t m_timer = NRFX_TIMER_INSTANCE(1); /**< Timer used for channel sweeps and tx with duty cycle. */ /******************************************************************************* * STRUCT * @@ -26,16 +27,20 @@ typedef struct { *******************************************************************************/ static adscfg_t m_prvads0cfg[] = // - {{0x00, 0x00}, {0x01, 0x19}, {0x02, 0x11}, {0x03, 0x00}, {0x04, 0x00}, {0x05, 0x00}, {0x06, 0x00}, {0x07, 0x0f}, {0x08, 0xff}, {0x09, 0x00}, {0x0a, 0x07}, {0x0b, 0x07}, {0x0c, 0x74}, {0x0d, 0x01}, {0x0e, 0x02}, {0x0f, 0x03}, {0x10, 0x04}, - {0x11, 0x00}, {0x12, 0x05}, {0x13, 0x39}, {0x14, 0x36}, {0x15, 0x06}, {0x16, 0x00}, {0x17, 0x05}, {0x18, 0x00}, {0x19, 0x00}, {0x1a, 0x00}, {0x1b, 0x00}, {0x1c, 0x00}, {0x1d, 0x00}, {0x21, 0x01}, {0x22, 0x20}, {0x23, 0x20}, {0x24, 0x02}, - {0x25, 0x00}, {0x26, 0x00}, {0x27, 0x08}, {0x28, 0x08}, {0x29, 0x00}, {0x2a, 0x00}, {0x2b, 0x00}, {0x2c, 0x00}, {0x2d, 0x00}, {0x2e, 0x33}, {0x2f, 0x30}, {0x30, 0x00}, {0x31, 0x00}, {0x32, 0x00}, {0x33, 0x00}, {0x34, 0x00}, {0x35, 0x00}, - {0x36, 0x00}, {0x37, 0x00}, {0x38, 0x00}, {0x39, 0x00}, {0x3a, 0x00}, {0x3b, 0x00}, {0x3c, 0x00}, {0x3d, 0x00}, {0x3e, 0x00}, {0x3f, 0x00}, {0x40, 0xff}, {0x50, 0x00}, {0x60, 0x00}, {0x62, 0x00}}; + { + {0x00, 0x00}, {0x01, 0x19}, {0x02, 0x11}, {0x03, 0x00}, {0x04, 0x00}, {0x05, 0x00}, {0x06, 0x00}, {0x07, 0x0f}, {0x08, 0xff}, {0x09, 0x00}, {0x0a, 0x07}, {0x0b, 0x07}, {0x0c, 0x74}, {0x0d, 0x01}, {0x0e, 0x02}, {0x0f, 0x03}, {0x10, 0x04}, + {0x11, 0x00}, {0x12, 0x05}, {0x13, 0x39}, {0x14, 0x36}, {0x15, 0x06}, {0x16, 0x00}, {0x17, 0x05}, {0x18, 0x00}, {0x19, 0x00}, {0x1a, 0x00}, {0x1b, 0x00}, {0x1c, 0x00}, {0x1d, 0x00}, {0x21, 0x01}, {0x22, 0x20}, {0x23, 0x20}, {0x24, 0x02}, + {0x25, 0x00}, {0x26, 0x00}, {0x27, 0x08}, {0x28, 0x08}, {0x29, 0x00}, {0x2a, 0x00}, {0x2b, 0x00}, {0x2c, 0x00}, {0x2d, 0x00}, {0x2e, 0x33}, {0x2f, 0x30}, {0x30, 0x00}, {0x31, 0x00}, {0x32, 0x00}, {0x33, 0x00}, {0x34, 0x00}, {0x35, 0x00}, + {0x36, 0x00}, {0x37, 0x00}, {0x38, 0x00}, {0x39, 0x00}, {0x3a, 0x00}, {0x3b, 0x00}, {0x3c, 0x00}, {0x3d, 0x00}, {0x3e, 0x00}, {0x3f, 0x00}, {0x40, 0xff}, {0x50, 0x00}, {0x60, 0x00}, {0x62, 0x00}, +}; static adscfg_t m_prvads1cfg[] = // - {{0x00, 0x00}, {0x01, 0x19}, {0x02, 0x11}, {0x03, 0x00}, {0x04, 0x00}, {0x05, 0x00}, {0x06, 0x00}, {0x07, 0x0f}, {0x08, 0xff}, {0x09, 0x00}, {0x0a, 0x07}, {0x0b, 0x07}, {0x0c, 0x74}, {0x0d, 0x01}, {0x0e, 0x02}, {0x0f, 0x03}, {0x10, 0x04}, - {0x11, 0x00}, {0x12, 0x05}, {0x13, 0x39}, {0x14, 0x36}, {0x15, 0x06}, {0x16, 0x00}, {0x17, 0x05}, {0x18, 0x00}, {0x19, 0x00}, {0x1a, 0x00}, {0x1b, 0x00}, {0x1c, 0x00}, {0x1d, 0x00}, {0x21, 0x01}, {0x22, 0x20}, {0x23, 0x20}, {0x24, 0x02}, - {0x25, 0x00}, {0x26, 0x00}, {0x27, 0x08}, {0x28, 0x08}, {0x29, 0x00}, {0x2a, 0x00}, {0x2b, 0x00}, {0x2c, 0x00}, {0x2d, 0x00}, {0x2e, 0x33}, {0x2f, 0x30}, {0x30, 0x00}, {0x31, 0x00}, {0x32, 0x00}, {0x33, 0x00}, {0x34, 0x00}, {0x35, 0x00}, - {0x36, 0x00}, {0x37, 0x00}, {0x38, 0x00}, {0x39, 0x00}, {0x3a, 0x00}, {0x3b, 0x00}, {0x3c, 0x00}, {0x3d, 0x00}, {0x3e, 0x00}, {0x3f, 0x00}, {0x40, 0xff}, {0x50, 0x00}, {0x60, 0x00}, {0x62, 0x00}}; + { + {0x00, 0x00}, {0x01, 0x0c}, {0x02, 0x14}, {0x03, 0x00}, {0x04, 0x00}, {0x05, 0x00}, {0x06, 0x00}, {0x07, 0x0f}, {0x08, 0xff}, {0x09, 0x00}, {0x0a, 0x00}, {0x0b, 0x07}, {0x0c, 0x78}, {0x0d, 0x00}, {0x0e, 0x00}, {0x0f, 0x00}, {0x10, 0x04}, + {0x11, 0x00}, {0x12, 0x07}, {0x13, 0x3b}, {0x14, 0x24}, {0x15, 0x04}, {0x16, 0x00}, {0x17, 0x05}, {0x18, 0x00}, {0x19, 0x00}, {0x1a, 0x00}, {0x1b, 0x00}, {0x1c, 0x00}, {0x1d, 0x00}, {0x21, 0x01}, {0x22, 0x20}, {0x23, 0x20}, {0x24, 0x02}, + {0x25, 0x00}, {0x26, 0x00}, {0x27, 0x08}, {0x28, 0x40}, {0x29, 0x00}, {0x2a, 0x00}, {0x2b, 0x00}, {0x2c, 0x00}, {0x2d, 0x00}, {0x2e, 0x33}, {0x2f, 0x30}, {0x30, 0x00}, {0x31, 0x00}, {0x32, 0x00}, {0x33, 0x00}, {0x34, 0x00}, {0x35, 0x00}, + {0x36, 0x00}, {0x37, 0x00}, {0x38, 0x00}, {0x39, 0x00}, {0x3a, 0x00}, {0x3b, 0x00}, {0x3c, 0x00}, {0x3d, 0x00}, {0x3e, 0x00}, {0x3f, 0x00}, {0x40, 0xff}, {0x50, 0x00}, {0x60, 0x00}, {0x62, 0x00}, +}; /******************************************************************************* * VARIABLE * *******************************************************************************/ @@ -124,7 +129,17 @@ static inline void prvf_light_block_cache_clear(void) { m_little_frame_index = 0 static inline void prvf_light_block_trigger_event() { static app_event_t event; event.eventType = kevent_capture_little_data_block_event; - memcpy(event.val.little_data_block.data, m_sensor_little_frame_cache, LITTLE_DATA_BLOCK_FRAME_NUM); + // memcpy(event.val.little_data_block.data, m_sensor_little_frame_cache, LITTLE_DATA_BLOCK_FRAME_NUM * sizeof(one_frame_data_t)); + + for (uint32_t i = 0; i < LITTLE_DATA_BLOCK_FRAME_NUM; i++) { + event.val.little_data_block.data[i].data0 = m_sensor_little_frame_cache[0].data0; + event.val.little_data_block.data[i].data1 = m_sensor_little_frame_cache[0].data1; + event.val.little_data_block.data[i].data2 = m_sensor_little_frame_cache[0].data2; + // event.val.little_data_block.data[0].data0 = 1111111111; + // event.val.little_data_block.data[0].data1 = 2222222222; + // event.val.little_data_block.data[0].data2 = 3333333333; + } + event.val.little_data_block.frameIndex = m_frame_index - LITTLE_DATA_BLOCK_FRAME_NUM; AppEvent_pushEvent(&event); } @@ -227,22 +242,22 @@ static void ads1293_init() { { // nrf_gpio_cfg_input(ADS1293_READY_PIN, NRF_GPIO_PIN_PULLUP); // ZERROR_CHECK(nrfx_gpiote_init()); - nrf_drv_gpiote_in_config_t inConfig = GPIOTE_CONFIG_IN_SENSE_TOGGLE(false); // 双边沿中断触发 - inConfig.pull = NRF_GPIO_PIN_PULLUP; // 默认上拉 - inConfig.sense = NRF_GPIOTE_POLARITY_LOTOHI; // 上升沿触发 - - ZERROR_CHECK(nrfx_gpiote_in_init(ADS1293_READY_PIN, &inConfig, ads1293_ready_pin_irq)); - nrfx_gpiote_in_event_enable(ADS1293_READY_PIN, true); + // nrf_drv_gpiote_in_config_t inConfig = GPIOTE_CONFIG_IN_SENSE_TOGGLE(false); // 双边沿中断触发 + // inConfig.pull = NRF_GPIO_PIN_PULLUP; // 默认上拉 + // inConfig.sense = NRF_GPIOTE_POLARITY_LOTOHI; // 上升沿触发 + // ZERROR_CHECK(nrfx_gpiote_in_init(ADS1293_READY_PIN, &inConfig, ads1293_ready_pin_irq)); + // nrfx_gpiote_in_event_enable(ADS1293_READY_PIN, true); } + + {} } -/** - * @brief 数据准备号中断回调函数 - * - * @param pin - * @param action - */ -static void ads1293_ready_pin_irq(nrfx_gpiote_pin_t pin, nrf_gpiote_polarity_t action) { +void ads1293_sample_one_frame(); +void nrfx_timer_event_handler(nrf_timer_event_t event_type, void* p_context) { // + ads1293_sample_one_frame(); +} +static void ads1293_ready_pin_irq(nrfx_gpiote_pin_t pin, nrf_gpiote_polarity_t action) { ads1293_sample_one_frame(); } +static void ads1293_sample_one_frame() { if (!m_work_flag) { return; } @@ -310,20 +325,41 @@ static void ads1293_uninit() { void hwss_init(void) { /** - * @brief 初始化ads1293硬件接口 + * @brief 初始化定时器 */ + nrfx_err_t err; + nrfx_timer_config_t timer_cfg = { + .frequency = NRF_TIMER_FREQ_125kHz, + .mode = NRF_TIMER_MODE_TIMER, + .bit_width = NRF_TIMER_BIT_WIDTH_24, + .p_context = NULL, + .interrupt_priority = NRFX_TIMER_DEFAULT_CONFIG_IRQ_PRIORITY, + }; + + err = nrfx_timer_init(&m_timer, &timer_cfg, nrfx_timer_event_handler); + if (err != NRFX_SUCCESS) { + NRF_LOG_ERROR("nrfx_timer_init failed with: %d\n", err); + } + uint32_t timer_ticks = nrfx_timer_ms_to_ticks(&m_timer, 2); // 500HZ + nrfx_timer_extended_compare(&m_timer, NRF_TIMER_CC_CHANNEL0, timer_ticks, NRF_TIMER_SHORT_COMPARE0_CLEAR_MASK, true); } void hwss_load(void) { ads1293_init(); } -void hwss_unload(void) { ads1293_uninit(); } +void hwss_unload(void) { + nrfx_timer_disable(&m_timer); + ads1293_uninit(); +} void hwss_start_capture(void) { m_drop_state_triggered = false; m_work_flag = true; ads1293_start_conversion(&m_ads1293_0); ads1293_start_conversion(&m_ads1293_1); + nrfx_timer_enable(&m_timer); } void hwss_stop_capture(void) { + nrfx_timer_disable(&m_timer); + m_work_flag = false; ads1293_stop_conversion(&m_ads1293_0); ads1293_stop_conversion(&m_ads1293_1); diff --git a/ble_app_uart_c/ble_app_uart_c_pca10100_s122.uvguix.h_zha b/ble_app_uart_c/ble_app_uart_c_pca10100_s122.uvguix.h_zha index c2e9985..89add2c 100644 --- a/ble_app_uart_c/ble_app_uart_c_pca10100_s122.uvguix.h_zha +++ b/ble_app_uart_c/ble_app_uart_c_pca10100_s122.uvguix.h_zha @@ -1822,7 +1822,7 @@ Build 1024 - 00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000004001C0000000000000000000000000000000001000000010000000180D07F0000000002001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000000000000100000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA00000000000000000000000000000000000000000000000001000000010000009600000003002050000000000D6E726635323833335F78786161960000000000000002000D6E726635323833335F7878616121666C6173685F733132325F6E726635325F382E302E305F736F667464657669636500000000000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000 + 00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000004001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000000000000100000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA00000000000000000000000000000000000000000000000001000000010000009600000003002050000000000D6E726635323833335F78786161960000000000000002000D6E726635323833335F7878616121666C6173685F733132325F6E726635325F382E302E305F736F667464657669636500000000000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000 583