diff --git a/cpg11_dev_mode.c b/cpg11_dev_mode.c index a284ccb..259c046 100644 --- a/cpg11_dev_mode.c +++ b/cpg11_dev_mode.c @@ -54,72 +54,12 @@ const uint32_t pin_to_gpio_table[] = { [62] = NRF_GPIO_PIN_MAP(0, 16), }; -static pusle_gen_t dev_mode_pusle_gen[4] = { - { - .VBxH = VB1H_PIN, - .VBxL = VB1L_PIN, - .VAxH = VA1H_PIN, - .VAxL = VA1L_PIN, - .idle_us = 1000, - .point_us[0] = 1, - .point_us[1] = 250, - .point_us[2] = 1, - .point_us[3] = 0, - .point_us[4] = 1, - .point_us[5] = 250, - .point_us[6] = 1, - .pulse_cnt = 0xFFFFFFFF, - .pulse_id = PULSE_ID_NULL, - }, - { - .VBxH = VB2H_PIN, - .VBxL = VB2L_PIN, - .VAxH = VA2H_PIN, - .VAxL = VA2L_PIN, - .idle_us = 1000, - .point_us[0] = 1, - .point_us[1] = 250, - .point_us[2] = 1, - .point_us[3] = 0, - .point_us[4] = 1, - .point_us[5] = 250, - .point_us[6] = 1, - .pulse_cnt = 0xFFFFFFFF, - .pulse_id = PULSE_ID_NULL, - }, - { - .VBxH = VB3H_PIN, - .VBxL = VB3L_PIN, - .VAxH = VA3H_PIN, - .VAxL = VA3L_PIN, - .idle_us = 1000, - .point_us[0] = 1, - .point_us[1] = 250, - .point_us[2] = 1, - .point_us[3] = 0, - .point_us[4] = 1, - .point_us[5] = 250, - .point_us[6] = 1, - .pulse_cnt = 0xFFFFFFFF, - .pulse_id = PULSE_ID_NULL, - }, - { - .VBxH = VB4H_PIN, - .VBxL = VB4L_PIN, - .VAxH = VA4H_PIN, - .VAxL = VA4L_PIN, - .idle_us = 1000, - .point_us[0] = 1, - .point_us[1] = 250, - .point_us[2] = 1, - .point_us[3] = 0, - .point_us[4] = 1, - .point_us[5] = 250, - .point_us[6] = 1, - .pulse_cnt = 0xFFFFFFFF, - .pulse_id = PULSE_ID_NULL, - } -}; +#define PULSE_GEN_A_NUMB 2 +#define PULSE_GEN_B_NUMB 2 +uint32_t pusle_genB_numb = 2; +static pusle_gen_t p_pusle_genA[PULSE_GEN_A_NUMB]; +static pusle_gen_t p_pusle_genB[PULSE_GEN_B_NUMB]; +static pusle_gen_t pusle_gen[PULSE_GEN_A_NUMB+PULSE_GEN_B_NUMB]; static uint32_t bmd380pins_convert_to_gpio(uint32_t pin) { @@ -374,38 +314,91 @@ static void cpg11_electrodes(uint32_t electrodes_mode) static void set_cpg_pulse_parameter(uint8_t *ins) { NRF_LOG_INFO("%s", __FUNCTION__); - uint8_t electrodes_pulse_gen_sel[] = { - (ins[5] & 0b10000000) >> 7, - (ins[5] & 0b01000000) >> 6, - (ins[5] & 0b00100000) >> 5, - (ins[5] & 0b00010000) >> 4 - }; + uint8_t electrodes1_pulse_gen_sel = (ins[5] & 0b10000000) >> 7; + uint8_t electrodes2_pulse_gen_sel = (ins[5] & 0b01000000) >> 6; + uint8_t electrodes3_pulse_gen_sel = (ins[5] & 0b00100000) >> 5; + uint8_t electrodes4_pulse_gen_sel = (ins[5] & 0b00010000) >> 4; uint32_t pulse_width_us = (uint32_t)ins[6] << 24 | (uint32_t)ins[7] << 16 | (uint32_t)ins[8] << 8 | (uint32_t)ins[9]; uint32_t freq_hz = (uint32_t)ins[10] << 24 | (uint32_t)ins[11] << 16 | (uint32_t)ins[12] << 8 | (uint32_t)ins[13]; - - for (int i = 0; i < 4; i++) - { - if (electrodes_pulse_gen_sel[i]) - { - dev_mode_pusle_gen[i].point_us[1] = pulse_width_us; - dev_mode_pusle_gen[i].point_us[5] = pulse_width_us; - dev_mode_pusle_gen[i].idle_us = (1000000 / freq_hz) - (dev_mode_pusle_gen[i].point_us[0] + - dev_mode_pusle_gen[i].point_us[1] + - dev_mode_pusle_gen[i].point_us[2] + - dev_mode_pusle_gen[i].point_us[3] + - dev_mode_pusle_gen[i].point_us[4] + - dev_mode_pusle_gen[i].point_us[5] + - dev_mode_pusle_gen[i].point_us[6]); - NRF_LOG_INFO("[%d]a = %d us", i + 1, dev_mode_pusle_gen[0].point_us[0]); - NRF_LOG_INFO("[%d]b = %d us", i + 1, dev_mode_pusle_gen[i].point_us[1]); - NRF_LOG_INFO("[%d]c = %d us", i + 1, dev_mode_pusle_gen[i].point_us[2]); - NRF_LOG_INFO("[%d]d = %d us", i + 1, dev_mode_pusle_gen[i].point_us[3]); - NRF_LOG_INFO("[%d]e = %d us", i + 1, dev_mode_pusle_gen[i].point_us[4]); - NRF_LOG_INFO("[%d]f = %d us", i + 1, dev_mode_pusle_gen[i].point_us[5]); - NRF_LOG_INFO("[%d]g = %d us", i + 1, dev_mode_pusle_gen[i].point_us[6]); - NRF_LOG_INFO("[%d]idle = %d us", i + 1, dev_mode_pusle_gen[i].idle_us); - } + + if (electrodes1_pulse_gen_sel) { + pusle_gen[0] = (pusle_gen_t) { + .VBxH = VB1H_PIN, + .VBxL = VB1L_PIN, + .VAxH = VA1H_PIN, + .VAxL = VA1L_PIN, + .point_us[0] = 1, + .point_us[1] = 50, + .point_us[2] = 1, + .point_us[3] = 0, + .point_us[4] = 1, + .point_us[5] = 50, + .point_us[6] = 1, + .idle_us = 500, + .pulse_cnt = UINT32_MAX, + .pulse_id = PULSE_ID_NULL, + }; } + + if (electrodes2_pulse_gen_sel) { + pusle_gen[1] = (pusle_gen_t) { + .VBxH = VB2H_PIN, + .VBxL = VB2L_PIN, + .VAxH = VA2H_PIN, + .VAxL = VA2L_PIN, + .point_us[0] = 1, + .point_us[1] = 50, + .point_us[2] = 1, + .point_us[3] = 0, + .point_us[4] = 1, + .point_us[5] = 50, + .point_us[6] = 1, + .idle_us = 500, + .pulse_cnt = UINT32_MAX, + .pulse_id = PULSE_ID_NULL, + }; + } + + if (electrodes3_pulse_gen_sel) { + pusle_gen[2] = (pusle_gen_t) { + .VBxH = VB3H_PIN, + .VBxL = VB3L_PIN, + .VAxH = VA3H_PIN, + .VAxL = VA3L_PIN, + .point_us[0] = 1, + .point_us[1] = 50, + .point_us[2] = 1, + .point_us[3] = 0, + .point_us[4] = 1, + .point_us[5] = 50, + .point_us[6] = 1, + .idle_us = 500, + .pulse_cnt = UINT32_MAX, + .pulse_id = PULSE_ID_NULL, + }; + } + + if (electrodes4_pulse_gen_sel) { + pusle_gen[3] = (pusle_gen_t) { + .VBxH = VB4H_PIN, + .VBxL = VB4L_PIN, + .VAxH = VA4H_PIN, + .VAxL = VA4L_PIN, + .point_us[0] = 1, + .point_us[1] = 50, + .point_us[2] = 1, + .point_us[3] = 0, + .point_us[4] = 1, + .point_us[5] = 50, + .point_us[6] = 1, + .idle_us = 500, + .pulse_cnt = UINT32_MAX, + .pulse_id = PULSE_ID_NULL, + }; + } + + NRF_LOG_INFO("set ok......"); + } static void start_which_electrodes(uint8_t *ins) @@ -416,63 +409,46 @@ static void start_which_electrodes(uint8_t *ins) uint8_t electrodes3_pulse_gen_en = (ins[5] & 0b00100000) >> 5; uint8_t electrodes4_pulse_gen_en = (ins[5] & 0b00010000) >> 4; - bool timer1_IRQ_running = is_pulse_gen_running(0); - bool timer2_IRQ_running = is_pulse_gen_running(1); - - NRF_LOG_INFO("timer1_IRQ_running = %d", timer1_IRQ_running); - NRF_LOG_INFO("timer2_IRQ_running = %d", timer2_IRQ_running); - NRF_LOG_INFO("[1] pulse_id = %02X", dev_mode_pusle_gen[0].pulse_id); - NRF_LOG_INFO("[2] pulse_id = %02X", dev_mode_pusle_gen[1].pulse_id); - NRF_LOG_INFO("[3] pulse_id = %02X", dev_mode_pusle_gen[2].pulse_id); - NRF_LOG_INFO("[4] pulse_id = %02X", dev_mode_pusle_gen[3].pulse_id); - - if (timer1_IRQ_running && timer2_IRQ_running) + if (electrodes1_pulse_gen_en) { - NRF_LOG_INFO("TIMER1_IRQ & TIMER2_IRQ are already running, so they cannot generate the waveform for electrodes 1~4"); - return; + p_pusle_genA[0] = pusle_gen[0]; + p_pusle_genA[0].pulse_id = PULSE_ID_A; + cpg11_pulse_init(0, &p_pusle_genA[0], 1); + cpg11_pulse_start(0, &p_pusle_genA[0]); + NRF_LOG_INFO("start electrodes1_pulse_gen"); + } + else if (electrodes2_pulse_gen_en) + { + p_pusle_genA[1] = pusle_gen[1]; + p_pusle_genA[1].pulse_id = PULSE_ID_B; + cpg11_pulse_init(0, &p_pusle_genA[1], 1); + cpg11_pulse_start(0, &p_pusle_genA[1]); + NRF_LOG_INFO("start electrodes2_pulse_gen"); } - if (!timer1_IRQ_running) + if (electrodes3_pulse_gen_en) { - if (electrodes1_pulse_gen_en) - { - dev_mode_pusle_gen[0].pulse_id = PULSE_ID_A; - cpg11_pulse_init(0, &dev_mode_pusle_gen[0], 1); - cpg11_pulse_start(0, &dev_mode_pusle_gen[0]); - NRF_LOG_INFO("start electrodes1_pulse_gen"); - } - else if (electrodes2_pulse_gen_en) - { - dev_mode_pusle_gen[1].pulse_id = PULSE_ID_B; - cpg11_pulse_init(0, &dev_mode_pusle_gen[1], 1); - cpg11_pulse_start(0, &dev_mode_pusle_gen[1]); - NRF_LOG_INFO("start electrodes2_pulse_gen"); - } + p_pusle_genB[0] = pusle_gen[2]; + p_pusle_genB[0].pulse_id = PULSE_ID_C; + cpg11_pulse_init(1, &p_pusle_genB[0], 1); + cpg11_pulse_start(1, &p_pusle_genB[0]); + NRF_LOG_INFO("start electrodes3_pulse_gen"); + } + else if (electrodes4_pulse_gen_en) + { + p_pusle_genB[1] = pusle_gen[3]; + p_pusle_genB[1].pulse_id = PULSE_ID_D; + cpg11_pulse_init(1, &p_pusle_genB[1], 1); + cpg11_pulse_start(1, &p_pusle_genB[1]); + NRF_LOG_INFO("start electrodes4_pulse_gen"); } - if (!timer2_IRQ_running) - { - if (electrodes3_pulse_gen_en) - { - dev_mode_pusle_gen[2].pulse_id = PULSE_ID_C; - cpg11_pulse_init(1, &dev_mode_pusle_gen[2], 1); - cpg11_pulse_start(1, &dev_mode_pusle_gen[2]); - NRF_LOG_INFO("start electrodes3_pulse_gen"); - } - else if (electrodes4_pulse_gen_en) - { - dev_mode_pusle_gen[3].pulse_id = PULSE_ID_D; - cpg11_pulse_init(1, &dev_mode_pusle_gen[3], 1); - cpg11_pulse_start(1, &dev_mode_pusle_gen[3]); - NRF_LOG_INFO("start electrodes4_pulse_gen"); - } + for (int i=0; i<2; i++) { + NRF_LOG_INFO("pusle_genA[%d]pulse_id: %d", i, p_pusle_genA[i].pulse_id); + } + for (int i=0; i<2; i++) { + NRF_LOG_INFO("pusle_genB[%d]pulse_id: %d", i, p_pusle_genB[i].pulse_id); } - - NRF_LOG_INFO("after..."); - NRF_LOG_INFO("[1] pulse_id = %02X", dev_mode_pusle_gen[0].pulse_id); - NRF_LOG_INFO("[2] pulse_id = %02X", dev_mode_pusle_gen[1].pulse_id); - NRF_LOG_INFO("[3] pulse_id = %02X", dev_mode_pusle_gen[2].pulse_id); - NRF_LOG_INFO("[4] pulse_id = %02X", dev_mode_pusle_gen[3].pulse_id); } static void stop_which_electrodes(uint8_t *ins) @@ -483,111 +459,121 @@ static void stop_which_electrodes(uint8_t *ins) uint8_t electrodes3_pulse_gen_dis = (ins[5] & 0b00100000) >> 5; uint8_t electrodes4_pulse_gen_dis = (ins[5] & 0b00010000) >> 4; - bool timer1_IRQ_running = is_pulse_gen_running(0); - bool timer2_IRQ_running = is_pulse_gen_running(1); - - NRF_LOG_INFO("timer1_IRQ_running = %d", timer1_IRQ_running); - NRF_LOG_INFO("timer2_IRQ_running = %d", timer2_IRQ_running); - NRF_LOG_INFO("[1] pulse_id = %02X", dev_mode_pusle_gen[0].pulse_id); - NRF_LOG_INFO("[2] pulse_id = %02X", dev_mode_pusle_gen[1].pulse_id); - NRF_LOG_INFO("[3] pulse_id = %02X", dev_mode_pusle_gen[2].pulse_id); - NRF_LOG_INFO("[4] pulse_id = %02X", dev_mode_pusle_gen[3].pulse_id); - - if (!timer1_IRQ_running && !timer2_IRQ_running) - { - NRF_LOG_INFO("TIMER1_IRQ and TIMER2_IRQ have already stopped, so they cannot stop the waveform for electrodes 1~4"); - return; - } - if (electrodes1_pulse_gen_dis) { - cpg11_pulse_stop_by_pulse_id(dev_mode_pusle_gen[0].pulse_id); - dev_mode_pusle_gen[0].pulse_id = PULSE_ID_NULL; + cpg11_pulse_stop_by_pulse_id(p_pusle_genA[0].pulse_id); + p_pusle_genA[0].pulse_id = PULSE_ID_NULL; NRF_LOG_INFO("stop electrodes1_pulse_gen"); } if (electrodes2_pulse_gen_dis) { - cpg11_pulse_stop_by_pulse_id(dev_mode_pusle_gen[1].pulse_id); - dev_mode_pusle_gen[1].pulse_id = PULSE_ID_NULL; + cpg11_pulse_stop_by_pulse_id(p_pusle_genA[1].pulse_id); + p_pusle_genA[1].pulse_id = PULSE_ID_NULL; NRF_LOG_INFO("stop electrodes2_pulse_gen"); } if (electrodes3_pulse_gen_dis) { - cpg11_pulse_stop_by_pulse_id(dev_mode_pusle_gen[2].pulse_id); - dev_mode_pusle_gen[2].pulse_id = PULSE_ID_NULL; + cpg11_pulse_stop_by_pulse_id(p_pusle_genB[0].pulse_id); + p_pusle_genB[0].pulse_id = PULSE_ID_NULL; NRF_LOG_INFO("stop electrodes3_pulse_gen"); } if (electrodes4_pulse_gen_dis) { - cpg11_pulse_stop_by_pulse_id(dev_mode_pusle_gen[3].pulse_id); - dev_mode_pusle_gen[3].pulse_id = PULSE_ID_NULL; - NRF_LOG_INFO("stop electrodes3_pulse_gen"); + cpg11_pulse_stop_by_pulse_id(p_pusle_genB[1].pulse_id); + p_pusle_genB[1].pulse_id = PULSE_ID_NULL; + NRF_LOG_INFO("stop electrodes4_pulse_gen"); } - NRF_LOG_INFO("after"); - NRF_LOG_INFO("[1] pulse_id = %02X", dev_mode_pusle_gen[0].pulse_id); - NRF_LOG_INFO("[2] pulse_id = %02X", dev_mode_pusle_gen[1].pulse_id); - NRF_LOG_INFO("[3] pulse_id = %02X", dev_mode_pusle_gen[2].pulse_id); - NRF_LOG_INFO("[4] pulse_id = %02X", dev_mode_pusle_gen[3].pulse_id); + for (int i=0; i<2; i++) { + NRF_LOG_INFO("pusle_genA[%d]pulse_id: %d", i, p_pusle_genA[i].pulse_id); + } + for (int i=0; i<2; i++) { + NRF_LOG_INFO("pusle_genB[%d]pulse_id: %d", i, p_pusle_genB[i].pulse_id); + } + + NRF_LOG_INFO("\n\n") } static void set_cpg_pulse_cnt(uint8_t *ins) { NRF_LOG_INFO("%s", __FUNCTION__); - uint8_t electrodes_pulse_gen_sel[] = { - (ins[5] & 0b10000000) >> 7, - (ins[5] & 0b01000000) >> 6, - (ins[5] & 0b00100000) >> 5, - (ins[5] & 0b00010000) >> 4 - }; + uint8_t electrodes1_pulse_gen_sel = (ins[5] & 0b10000000) >> 7; + uint8_t electrodes2_pulse_gen_sel = (ins[5] & 0b01000000) >> 6; + uint8_t electrodes3_pulse_gen_sel = (ins[5] & 0b00100000) >> 5; + uint8_t electrodes4_pulse_gen_sel = (ins[5] & 0b00010000) >> 4; uint32_t pulse_cnt = (uint32_t)ins[6] << 24 | (uint32_t)ins[7] << 16 | (uint32_t)ins[8] << 8 | (uint32_t)ins[9]; - for (int i = 0; i < 4; i++) + if (electrodes1_pulse_gen_sel) { - if (electrodes_pulse_gen_sel[i]) - { - dev_mode_pusle_gen[i].pulse_cnt = pulse_cnt; - NRF_LOG_INFO("[%d]pulse_cnt = %d cnt", i + 1, dev_mode_pusle_gen[i].pulse_cnt); - } + p_pusle_genA[0].pulse_cnt = pulse_cnt; + NRF_LOG_INFO("[1] pulse_cnt = %d cnt", p_pusle_genA[0].pulse_cnt); + } + + if (electrodes2_pulse_gen_sel) + { + p_pusle_genA[1].pulse_cnt = pulse_cnt; + NRF_LOG_INFO("[2] pulse_cnt = %d cnt", p_pusle_genA[1].pulse_cnt); + } + + if (electrodes3_pulse_gen_sel) + { + p_pusle_genB[0].pulse_cnt = pulse_cnt; + NRF_LOG_INFO("[3] pulse_cnt = %d cnt", p_pusle_genB[0].pulse_cnt); + } + + if (electrodes1_pulse_gen_sel) + { + p_pusle_genB[1].pulse_cnt = pulse_cnt; + NRF_LOG_INFO("[4] pulse_cnt = %d cnt", p_pusle_genB[1].pulse_cnt); } } void cpg_pulse_default_demo(void) { NRF_LOG_INFO("%s", __FUNCTION__); - bool timer1_IRQ_running = is_pulse_gen_running(0); - bool timer2_IRQ_running = is_pulse_gen_running(1); + pusle_gen_t pusle_gen_demo[PULSE_GEN_A_NUMB+PULSE_GEN_B_NUMB]; - NRF_LOG_INFO("timer1_IRQ_running = %d", timer1_IRQ_running); - NRF_LOG_INFO("timer2_IRQ_running = %d", timer2_IRQ_running); + cpg11_pulse_stop_by_pulse_id(p_pusle_genA[0].pulse_id); + p_pusle_genA[0].pulse_id = PULSE_ID_NULL; + NRF_LOG_INFO("stop electrodes1_pulse_gen"); - if (timer1_IRQ_running || timer2_IRQ_running) - { - NRF_LOG_INFO("please stop running pulse"); - return; - } + cpg11_pulse_stop_by_pulse_id(p_pusle_genA[1].pulse_id); + p_pusle_genA[1].pulse_id = PULSE_ID_NULL; + NRF_LOG_INFO("stop electrodes2_pulse_gen"); - dev_mode_pusle_gen[2].VBxH = VB3H_PIN; - dev_mode_pusle_gen[2].VBxL = VB3L_PIN; - dev_mode_pusle_gen[2].VAxH = VA3H_PIN; - dev_mode_pusle_gen[2].VAxL = VA3L_PIN; - dev_mode_pusle_gen[2].idle_us = 1000; - dev_mode_pusle_gen[2].point_us[0] = 1; - dev_mode_pusle_gen[2].point_us[1] = 250; - dev_mode_pusle_gen[2].point_us[2] = 1; - dev_mode_pusle_gen[2].point_us[3] = 0; - dev_mode_pusle_gen[2].point_us[4] = 1; - dev_mode_pusle_gen[2].point_us[5] = 250; - dev_mode_pusle_gen[2].point_us[6] = 1; - dev_mode_pusle_gen[2].pulse_cnt = 0xFFFFFFFF; - dev_mode_pusle_gen[2].pulse_id = PULSE_ID_B; + cpg11_pulse_stop_by_pulse_id(p_pusle_genB[0].pulse_id); + p_pusle_genB[0].pulse_id = PULSE_ID_NULL; + NRF_LOG_INFO("stop electrodes3_pulse_gen"); - cpg11_pulse_init(0, &dev_mode_pusle_gen[2], 1); - cpg11_pulse_start(0, &dev_mode_pusle_gen[2]); - NRF_LOG_INFO("cpg_pulse_default_demo: start electrodes3_pulse_gen"); + cpg11_pulse_stop_by_pulse_id(p_pusle_genB[1].pulse_id); + p_pusle_genB[1].pulse_id = PULSE_ID_NULL; + NRF_LOG_INFO("stop electrodes4_pulse_gen"); + + pusle_gen_demo[2] = (pusle_gen_t) { + .VBxH = VB3H_PIN, + .VBxL = VB3L_PIN, + .VAxH = VA3H_PIN, + .VAxL = VA3L_PIN, + .point_us[0] = 1, + .point_us[1] = 250, + .point_us[2] = 1, + .point_us[3] = 0, + .point_us[4] = 1, + .point_us[5] = 250, + .point_us[6] = 1, + .idle_us = 1000, + .pulse_cnt = UINT32_MAX, + .pulse_id = PULSE_ID_NULL, + }; + + p_pusle_genB[0] = pusle_gen_demo[2]; + p_pusle_genB[0].pulse_id = PULSE_ID_C; + cpg11_pulse_init(1, &p_pusle_genB[0], 1); + cpg11_pulse_start(1, &p_pusle_genB[0]); + NRF_LOG_INFO("start electrodes3_pulse_gen"); } /* diff --git a/cpg11_io.c b/cpg11_io.c index 3a362cd..611b774 100644 --- a/cpg11_io.c +++ b/cpg11_io.c @@ -407,7 +407,7 @@ void cpg11_io_init(void) sd_nvic_SetPriority(pusle_gen_hw[i].IRQn, _PRIO_APP_HIGH); } - cpg_pulse_default_demo_ext(); + //cpg_pulse_default_demo_ext(); } #endif