fix: replace 'pusle' with 'pulse'

This commit is contained in:
Roy_01
2024-09-12 09:23:24 +08:00
parent ba55256b91
commit d8b82b6edf
5 changed files with 395 additions and 395 deletions
+3 -3
View File
@@ -14,9 +14,9 @@
#define VERSION_DATE_YEAR 24
#define VERSION_DATE_MONTH 9
#define VERSION_DATE_DAY 11
#define VERSION_DATE_HOUR 17
#define VERSION_DATE_MINUTE 45
#define VERSION_DATE_DAY 12
#define VERSION_DATE_HOUR 9
#define VERSION_DATE_MINUTE 23
static void cis_version(uint8_t *ins, uint16_t size)
{
NRF_LOG_INFO("%s", __FUNCTION__);
+184 -184
View File
@@ -56,9 +56,9 @@ const uint32_t pin_to_gpio_table[] = {
#define PULSE_GEN_A_NUMB 2
#define PULSE_GEN_B_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 pulse_gen_t p_pulse_genA[PULSE_GEN_A_NUMB];
static pulse_gen_t p_pulse_genB[PULSE_GEN_B_NUMB];
static pulse_gen_t pulse_gen[PULSE_GEN_A_NUMB + PULSE_GEN_B_NUMB];
static uint32_t bmd380pins_convert_to_gpio(uint32_t pin)
{
@@ -310,22 +310,22 @@ static void cpg11_electrodes(uint32_t electrodes_mode)
}
}
void reset_pusle(pusle_gen_t *p_pusle_gen)
void reset_pulse(pulse_gen_t *p_pulse_gen)
{
p_pusle_gen->VAxH = 0xFFFFFFFF;
p_pusle_gen->VAxL = 0xFFFFFFFF;
p_pusle_gen->VBxH = 0xFFFFFFFF;
p_pusle_gen->VBxL = 0xFFFFFFFF;
p_pusle_gen->idle_us = 0;
p_pusle_gen->point_us[0] = 0;
p_pusle_gen->point_us[1] = 0;
p_pusle_gen->point_us[2] = 0;
p_pusle_gen->point_us[3] = 0;
p_pusle_gen->point_us[4] = 0;
p_pusle_gen->point_us[5] = 0;
p_pusle_gen->point_us[6] = 0;
p_pusle_gen->pulse_cnt = 1;
p_pusle_gen->pulse_id = PULSE_ID_NULL;
p_pulse_gen->VAxH = 0xFFFFFFFF;
p_pulse_gen->VAxL = 0xFFFFFFFF;
p_pulse_gen->VBxH = 0xFFFFFFFF;
p_pulse_gen->VBxL = 0xFFFFFFFF;
p_pulse_gen->idle_us = 0;
p_pulse_gen->point_us[0] = 0;
p_pulse_gen->point_us[1] = 0;
p_pulse_gen->point_us[2] = 0;
p_pulse_gen->point_us[3] = 0;
p_pulse_gen->point_us[4] = 0;
p_pulse_gen->point_us[5] = 0;
p_pulse_gen->point_us[6] = 0;
p_pulse_gen->pulse_cnt = 1;
p_pulse_gen->pulse_id = PULSE_ID_NULL;
}
void set_cpg_pulse_parameter(uint8_t *ins)
@@ -338,14 +338,14 @@ void set_cpg_pulse_parameter(uint8_t *ins)
uint32_t pulse_width_us = ins[6] << 24 | ins[7] << 16 | ins[8] << 8 | ins[9];
uint32_t freq_hz = ins[10] << 24 | ins[11] << 16 | ins[12] << 8 | ins[13];
reset_pusle(&p_pusle_genA[0]);
reset_pusle(&p_pusle_genA[1]);
reset_pusle(&p_pusle_genB[0]);
reset_pusle(&p_pusle_genB[1]);
reset_pulse(&p_pulse_genA[0]);
reset_pulse(&p_pulse_genA[1]);
reset_pulse(&p_pulse_genB[0]);
reset_pulse(&p_pulse_genB[1]);
if (electrodes1_pulse_gen_sel)
{
pusle_gen[0] = (pusle_gen_t) {
pulse_gen[0] = (pulse_gen_t) {
.VBxH = VB1H_PIN,
.VBxL = VB1L_PIN,
.VAxH = VA1H_PIN,
@@ -366,36 +366,36 @@ void set_cpg_pulse_parameter(uint8_t *ins)
NRF_LOG_INFO("[%d]user freq_hz = %u Hz", 1, freq_hz);
if (freq_hz == 0)
{
pusle_gen[0].idle_us = 0;
pulse_gen[0].idle_us = 0;
}
else
{
pusle_gen[0].idle_us = 1000000 / freq_hz - (pusle_gen[0].point_us[0] + pusle_gen[0].point_us[1] + pusle_gen[0].point_us[2] +
pusle_gen[0].point_us[3] + pusle_gen[0].point_us[4] + pusle_gen[0].point_us[5] +
pusle_gen[0].point_us[6]);
NRF_LOG_INFO("[%d]user idle = %u us", 1, pusle_gen[0].idle_us);
pulse_gen[0].idle_us = 1000000 / freq_hz - (pulse_gen[0].point_us[0] + pulse_gen[0].point_us[1] + pulse_gen[0].point_us[2] +
pulse_gen[0].point_us[3] + pulse_gen[0].point_us[4] + pulse_gen[0].point_us[5] +
pulse_gen[0].point_us[6]);
NRF_LOG_INFO("[%d]user idle = %u us", 1, pulse_gen[0].idle_us);
if (electrodes1_pulse_gen_sel && electrodes2_pulse_gen_sel) {
pusle_gen[0].idle_us = (1000000 / freq_hz - (pusle_gen[0].point_us[0] + pusle_gen[0].point_us[1] + pusle_gen[0].point_us[2] +
pusle_gen[0].point_us[3] + pusle_gen[0].point_us[4] + pusle_gen[0].point_us[5] +
pusle_gen[0].point_us[6]) *
pulse_gen[0].idle_us = (1000000 / freq_hz - (pulse_gen[0].point_us[0] + pulse_gen[0].point_us[1] + pulse_gen[0].point_us[2] +
pulse_gen[0].point_us[3] + pulse_gen[0].point_us[4] + pulse_gen[0].point_us[5] +
pulse_gen[0].point_us[6]) *
2) / 2;
}
}
NRF_LOG_INFO("[%d]a = %u us", 1, pusle_gen[0].point_us[0]);
NRF_LOG_INFO("[%d]b = %u us", 1, pusle_gen[0].point_us[1]);
NRF_LOG_INFO("[%d]c = %u us", 1, pusle_gen[0].point_us[2]);
NRF_LOG_INFO("[%d]d = %u us", 1, pusle_gen[0].point_us[3]);
NRF_LOG_INFO("[%d]e = %u us", 1, pusle_gen[0].point_us[4]);
NRF_LOG_INFO("[%d]f = %u us", 1, pusle_gen[0].point_us[5]);
NRF_LOG_INFO("[%d]g = %u us", 1, pusle_gen[0].point_us[6]);
NRF_LOG_INFO("[%d]idle = %u us", 1, pusle_gen[0].idle_us);
NRF_LOG_INFO("[%d]a = %u us", 1, pulse_gen[0].point_us[0]);
NRF_LOG_INFO("[%d]b = %u us", 1, pulse_gen[0].point_us[1]);
NRF_LOG_INFO("[%d]c = %u us", 1, pulse_gen[0].point_us[2]);
NRF_LOG_INFO("[%d]d = %u us", 1, pulse_gen[0].point_us[3]);
NRF_LOG_INFO("[%d]e = %u us", 1, pulse_gen[0].point_us[4]);
NRF_LOG_INFO("[%d]f = %u us", 1, pulse_gen[0].point_us[5]);
NRF_LOG_INFO("[%d]g = %u us", 1, pulse_gen[0].point_us[6]);
NRF_LOG_INFO("[%d]idle = %u us", 1, pulse_gen[0].idle_us);
}
if (electrodes2_pulse_gen_sel)
{
pusle_gen[1] = (pusle_gen_t) {
pulse_gen[1] = (pulse_gen_t) {
.VBxH = VB2H_PIN,
.VBxL = VB2L_PIN,
.VAxH = VA2H_PIN,
@@ -416,36 +416,36 @@ void set_cpg_pulse_parameter(uint8_t *ins)
NRF_LOG_INFO("[%d]user freq_hz = %u Hz", 2, freq_hz);
if (freq_hz == 0)
{
pusle_gen[0].idle_us = 0;
pulse_gen[0].idle_us = 0;
}
else
{
pusle_gen[1].idle_us = (1000000 / freq_hz) - (pusle_gen[1].point_us[0] + pusle_gen[1].point_us[1] + pusle_gen[1].point_us[2] +
pusle_gen[1].point_us[3] + pusle_gen[1].point_us[4] + pusle_gen[1].point_us[5] +
pusle_gen[1].point_us[6]);
NRF_LOG_INFO("[%d]user idle = %u us", 2, pusle_gen[1].idle_us);
pulse_gen[1].idle_us = (1000000 / freq_hz) - (pulse_gen[1].point_us[0] + pulse_gen[1].point_us[1] + pulse_gen[1].point_us[2] +
pulse_gen[1].point_us[3] + pulse_gen[1].point_us[4] + pulse_gen[1].point_us[5] +
pulse_gen[1].point_us[6]);
NRF_LOG_INFO("[%d]user idle = %u us", 2, pulse_gen[1].idle_us);
if (electrodes1_pulse_gen_sel && electrodes2_pulse_gen_sel) {
pusle_gen[1].idle_us = (1000000 / freq_hz - (pusle_gen[1].point_us[0] + pusle_gen[1].point_us[1] + pusle_gen[1].point_us[2] +
pusle_gen[1].point_us[3] + pusle_gen[1].point_us[4] + pusle_gen[1].point_us[5] +
pusle_gen[1].point_us[6]) *
pulse_gen[1].idle_us = (1000000 / freq_hz - (pulse_gen[1].point_us[0] + pulse_gen[1].point_us[1] + pulse_gen[1].point_us[2] +
pulse_gen[1].point_us[3] + pulse_gen[1].point_us[4] + pulse_gen[1].point_us[5] +
pulse_gen[1].point_us[6]) *
2) / 2;
}
}
NRF_LOG_INFO("[%d]a = %u us", 2, pusle_gen[1].point_us[0]);
NRF_LOG_INFO("[%d]b = %u us", 2, pusle_gen[1].point_us[1]);
NRF_LOG_INFO("[%d]c = %u us", 2, pusle_gen[1].point_us[2]);
NRF_LOG_INFO("[%d]d = %u us", 2, pusle_gen[1].point_us[3]);
NRF_LOG_INFO("[%d]e = %u us", 2, pusle_gen[1].point_us[4]);
NRF_LOG_INFO("[%d]f = %u us", 2, pusle_gen[1].point_us[5]);
NRF_LOG_INFO("[%d]g = %u us", 2, pusle_gen[1].point_us[6]);
NRF_LOG_INFO("[%d]idle = %u us", 2, pusle_gen[1].idle_us);
NRF_LOG_INFO("[%d]a = %u us", 2, pulse_gen[1].point_us[0]);
NRF_LOG_INFO("[%d]b = %u us", 2, pulse_gen[1].point_us[1]);
NRF_LOG_INFO("[%d]c = %u us", 2, pulse_gen[1].point_us[2]);
NRF_LOG_INFO("[%d]d = %u us", 2, pulse_gen[1].point_us[3]);
NRF_LOG_INFO("[%d]e = %u us", 2, pulse_gen[1].point_us[4]);
NRF_LOG_INFO("[%d]f = %u us", 2, pulse_gen[1].point_us[5]);
NRF_LOG_INFO("[%d]g = %u us", 2, pulse_gen[1].point_us[6]);
NRF_LOG_INFO("[%d]idle = %u us", 2, pulse_gen[1].idle_us);
}
if (electrodes3_pulse_gen_sel)
{
pusle_gen[2] = (pusle_gen_t) {
pulse_gen[2] = (pulse_gen_t) {
.VBxH = VB3H_PIN,
.VBxL = VB3L_PIN,
.VAxH = VA3H_PIN,
@@ -466,35 +466,35 @@ void set_cpg_pulse_parameter(uint8_t *ins)
NRF_LOG_INFO("[%d]user freq_hz = %u Hz", 3, freq_hz);
if (freq_hz == 0)
{
pusle_gen[0].idle_us = 0;
pulse_gen[0].idle_us = 0;
}
else
{
pusle_gen[2].idle_us = 1000000 / freq_hz - (pusle_gen[2].point_us[0] + pusle_gen[2].point_us[1] + pusle_gen[2].point_us[2] +
pusle_gen[2].point_us[3] + pusle_gen[2].point_us[4] + pusle_gen[2].point_us[5] +
pusle_gen[2].point_us[6]);
NRF_LOG_INFO("[%d]user idle = %u us", 3, pusle_gen[2].idle_us);
pulse_gen[2].idle_us = 1000000 / freq_hz - (pulse_gen[2].point_us[0] + pulse_gen[2].point_us[1] + pulse_gen[2].point_us[2] +
pulse_gen[2].point_us[3] + pulse_gen[2].point_us[4] + pulse_gen[2].point_us[5] +
pulse_gen[2].point_us[6]);
NRF_LOG_INFO("[%d]user idle = %u us", 3, pulse_gen[2].idle_us);
if (electrodes3_pulse_gen_sel && electrodes4_pulse_gen_sel) {
pusle_gen[2].idle_us = (1000000 / freq_hz - (pusle_gen[2].point_us[0] + pusle_gen[2].point_us[1] + pusle_gen[2].point_us[2] +
pusle_gen[2].point_us[3] + pusle_gen[2].point_us[4] + pusle_gen[2].point_us[5] +
pusle_gen[2].point_us[6]) *
pulse_gen[2].idle_us = (1000000 / freq_hz - (pulse_gen[2].point_us[0] + pulse_gen[2].point_us[1] + pulse_gen[2].point_us[2] +
pulse_gen[2].point_us[3] + pulse_gen[2].point_us[4] + pulse_gen[2].point_us[5] +
pulse_gen[2].point_us[6]) *
2) / 2;
}
}
NRF_LOG_INFO("[%d]a = %u us", 3, pusle_gen[2].point_us[0]);
NRF_LOG_INFO("[%d]b = %u us", 3, pusle_gen[2].point_us[1]);
NRF_LOG_INFO("[%d]c = %u us", 3, pusle_gen[2].point_us[2]);
NRF_LOG_INFO("[%d]d = %u us", 3, pusle_gen[2].point_us[3]);
NRF_LOG_INFO("[%d]e = %u us", 3, pusle_gen[2].point_us[4]);
NRF_LOG_INFO("[%d]f = %u us", 3, pusle_gen[2].point_us[5]);
NRF_LOG_INFO("[%d]g = %u us", 3, pusle_gen[2].point_us[6]);
NRF_LOG_INFO("[%d]idle = %u us", 3, pusle_gen[2].idle_us);
NRF_LOG_INFO("[%d]a = %u us", 3, pulse_gen[2].point_us[0]);
NRF_LOG_INFO("[%d]b = %u us", 3, pulse_gen[2].point_us[1]);
NRF_LOG_INFO("[%d]c = %u us", 3, pulse_gen[2].point_us[2]);
NRF_LOG_INFO("[%d]d = %u us", 3, pulse_gen[2].point_us[3]);
NRF_LOG_INFO("[%d]e = %u us", 3, pulse_gen[2].point_us[4]);
NRF_LOG_INFO("[%d]f = %u us", 3, pulse_gen[2].point_us[5]);
NRF_LOG_INFO("[%d]g = %u us", 3, pulse_gen[2].point_us[6]);
NRF_LOG_INFO("[%d]idle = %u us", 3, pulse_gen[2].idle_us);
}
if (electrodes4_pulse_gen_sel)
{
pusle_gen[3] = (pusle_gen_t) {
pulse_gen[3] = (pulse_gen_t) {
.VBxH = VB4H_PIN,
.VBxL = VB4L_PIN,
.VAxH = VA4H_PIN,
@@ -515,30 +515,30 @@ void set_cpg_pulse_parameter(uint8_t *ins)
NRF_LOG_INFO("[%d]user freq_hz = %u Hz", 4, freq_hz);
if (freq_hz == 0)
{
pusle_gen[0].idle_us = 0;
pulse_gen[0].idle_us = 0;
}
else
{
pusle_gen[3].idle_us = (1000000 / freq_hz) - (pusle_gen[3].point_us[0] + pusle_gen[3].point_us[1] + pusle_gen[3].point_us[2] +
pusle_gen[3].point_us[3] + pusle_gen[3].point_us[4] + pusle_gen[3].point_us[5] +
pusle_gen[3].point_us[6]);
NRF_LOG_INFO("[%d]user idle = %u us", 4, pusle_gen[3].idle_us);
pulse_gen[3].idle_us = (1000000 / freq_hz) - (pulse_gen[3].point_us[0] + pulse_gen[3].point_us[1] + pulse_gen[3].point_us[2] +
pulse_gen[3].point_us[3] + pulse_gen[3].point_us[4] + pulse_gen[3].point_us[5] +
pulse_gen[3].point_us[6]);
NRF_LOG_INFO("[%d]user idle = %u us", 4, pulse_gen[3].idle_us);
if (electrodes3_pulse_gen_sel && electrodes4_pulse_gen_sel) {
pusle_gen[3].idle_us = (1000000 / freq_hz - (pusle_gen[3].point_us[0] + pusle_gen[3].point_us[1] + pusle_gen[3].point_us[2] +
pusle_gen[3].point_us[3] + pusle_gen[3].point_us[4] + pusle_gen[3].point_us[5] +
pusle_gen[3].point_us[6]) *
pulse_gen[3].idle_us = (1000000 / freq_hz - (pulse_gen[3].point_us[0] + pulse_gen[3].point_us[1] + pulse_gen[3].point_us[2] +
pulse_gen[3].point_us[3] + pulse_gen[3].point_us[4] + pulse_gen[3].point_us[5] +
pulse_gen[3].point_us[6]) *
2) / 2;
}
}
NRF_LOG_INFO("[%d]a = %u us", 4, pusle_gen[3].point_us[0]);
NRF_LOG_INFO("[%d]b = %u us", 4, pusle_gen[3].point_us[1]);
NRF_LOG_INFO("[%d]c = %u us", 4, pusle_gen[3].point_us[2]);
NRF_LOG_INFO("[%d]d = %u us", 4, pusle_gen[3].point_us[3]);
NRF_LOG_INFO("[%d]e = %u us", 4, pusle_gen[3].point_us[4]);
NRF_LOG_INFO("[%d]f = %u us", 4, pusle_gen[3].point_us[5]);
NRF_LOG_INFO("[%d]g = %u us", 4, pusle_gen[3].point_us[6]);
NRF_LOG_INFO("[%d]idle = %u us", 4, pusle_gen[3].idle_us);
NRF_LOG_INFO("[%d]a = %u us", 4, pulse_gen[3].point_us[0]);
NRF_LOG_INFO("[%d]b = %u us", 4, pulse_gen[3].point_us[1]);
NRF_LOG_INFO("[%d]c = %u us", 4, pulse_gen[3].point_us[2]);
NRF_LOG_INFO("[%d]d = %u us", 4, pulse_gen[3].point_us[3]);
NRF_LOG_INFO("[%d]e = %u us", 4, pulse_gen[3].point_us[4]);
NRF_LOG_INFO("[%d]f = %u us", 4, pulse_gen[3].point_us[5]);
NRF_LOG_INFO("[%d]g = %u us", 4, pulse_gen[3].point_us[6]);
NRF_LOG_INFO("[%d]idle = %u us", 4, pulse_gen[3].idle_us);
}
NRF_LOG_INFO("set ok......");
@@ -556,125 +556,125 @@ static void start_which_electrodes(uint8_t *ins)
inum = 0;
if (electrodes1_pulse_gen_en)
{
p_pusle_genA[inum] = pusle_gen[0];
p_pusle_genA[inum].pulse_id = PULSE_ID_A;
nrf_gpio_pin_clear(p_pusle_genA[inum].VBxL);
nrf_gpio_pin_set(p_pusle_genA[inum].VBxH);
nrf_gpio_pin_clear(p_pusle_genA[inum].VAxL);
nrf_gpio_pin_set(p_pusle_genA[inum].VAxH);
p_pulse_genA[inum] = pulse_gen[0];
p_pulse_genA[inum].pulse_id = PULSE_ID_A;
nrf_gpio_pin_clear(p_pulse_genA[inum].VBxL);
nrf_gpio_pin_set(p_pulse_genA[inum].VBxH);
nrf_gpio_pin_clear(p_pulse_genA[inum].VAxL);
nrf_gpio_pin_set(p_pulse_genA[inum].VAxH);
NRF_LOG_INFO("start electrodes1_pulse_gen");
}
else
{
p_pusle_genA[inum].VBxL = 0xFFFFFFFF;
p_pusle_genA[inum].VBxH = 0xFFFFFFFF;
p_pusle_genA[inum].VAxL = 0xFFFFFFFF;
p_pusle_genA[inum].VAxH = 0xFFFFFFFF;
p_pulse_genA[inum].VBxL = 0xFFFFFFFF;
p_pulse_genA[inum].VBxH = 0xFFFFFFFF;
p_pulse_genA[inum].VAxL = 0xFFFFFFFF;
p_pulse_genA[inum].VAxH = 0xFFFFFFFF;
}
inum = 1;
if (electrodes2_pulse_gen_en)
{
p_pusle_genA[inum] = pusle_gen[1];
p_pusle_genA[inum].pulse_id = PULSE_ID_B;
nrf_gpio_pin_clear(p_pusle_genA[inum].VBxL);
nrf_gpio_pin_set(p_pusle_genA[inum].VBxH);
nrf_gpio_pin_clear(p_pusle_genA[inum].VAxL);
nrf_gpio_pin_set(p_pusle_genA[inum].VAxH);
p_pulse_genA[inum] = pulse_gen[1];
p_pulse_genA[inum].pulse_id = PULSE_ID_B;
nrf_gpio_pin_clear(p_pulse_genA[inum].VBxL);
nrf_gpio_pin_set(p_pulse_genA[inum].VBxH);
nrf_gpio_pin_clear(p_pulse_genA[inum].VAxL);
nrf_gpio_pin_set(p_pulse_genA[inum].VAxH);
NRF_LOG_INFO("start electrodes2_pulse_gen");
}
else
{
p_pusle_genA[inum].VBxL = 0xFFFFFFFF;
p_pusle_genA[inum].VBxH = 0xFFFFFFFF;
p_pusle_genA[inum].VAxL = 0xFFFFFFFF;
p_pusle_genA[inum].VAxH = 0xFFFFFFFF;
p_pulse_genA[inum].VBxL = 0xFFFFFFFF;
p_pulse_genA[inum].VBxH = 0xFFFFFFFF;
p_pulse_genA[inum].VAxL = 0xFFFFFFFF;
p_pulse_genA[inum].VAxH = 0xFFFFFFFF;
}
if (electrodes1_pulse_gen_en || electrodes2_pulse_gen_en)
{
cpg11_pulse_init(0, &p_pusle_genA[0], 2);
cpg11_pulse_start(0, &p_pusle_genA[0]);
cpg11_pulse_init(0, &p_pulse_genA[0], 2);
cpg11_pulse_start(0, &p_pulse_genA[0]);
}
inum = 0;
if (electrodes3_pulse_gen_en)
{
p_pusle_genB[inum] = pusle_gen[2];
p_pusle_genB[inum].pulse_id = PULSE_ID_C;
nrf_gpio_pin_clear(p_pusle_genB[inum].VBxL);
nrf_gpio_pin_set(p_pusle_genB[inum].VBxH);
nrf_gpio_pin_clear(p_pusle_genB[inum].VAxL);
nrf_gpio_pin_set(p_pusle_genB[inum].VAxH);
p_pulse_genB[inum] = pulse_gen[2];
p_pulse_genB[inum].pulse_id = PULSE_ID_C;
nrf_gpio_pin_clear(p_pulse_genB[inum].VBxL);
nrf_gpio_pin_set(p_pulse_genB[inum].VBxH);
nrf_gpio_pin_clear(p_pulse_genB[inum].VAxL);
nrf_gpio_pin_set(p_pulse_genB[inum].VAxH);
NRF_LOG_INFO("start electrodes3_pulse_gen");
}
else
{
p_pusle_genB[inum].VBxL = 0xFFFFFFFF;
p_pusle_genB[inum].VBxH = 0xFFFFFFFF;
p_pusle_genB[inum].VAxL = 0xFFFFFFFF;
p_pusle_genB[inum].VAxH = 0xFFFFFFFF;
p_pulse_genB[inum].VBxL = 0xFFFFFFFF;
p_pulse_genB[inum].VBxH = 0xFFFFFFFF;
p_pulse_genB[inum].VAxL = 0xFFFFFFFF;
p_pulse_genB[inum].VAxH = 0xFFFFFFFF;
}
inum = 1;
if (electrodes4_pulse_gen_en)
{
p_pusle_genB[inum] = pusle_gen[3];
p_pusle_genB[inum].pulse_id = PULSE_ID_D;
nrf_gpio_pin_clear(p_pusle_genB[inum].VBxL);
nrf_gpio_pin_set(p_pusle_genB[inum].VBxH);
nrf_gpio_pin_clear(p_pusle_genB[inum].VAxL);
nrf_gpio_pin_set(p_pusle_genB[inum].VAxH);
p_pulse_genB[inum] = pulse_gen[3];
p_pulse_genB[inum].pulse_id = PULSE_ID_D;
nrf_gpio_pin_clear(p_pulse_genB[inum].VBxL);
nrf_gpio_pin_set(p_pulse_genB[inum].VBxH);
nrf_gpio_pin_clear(p_pulse_genB[inum].VAxL);
nrf_gpio_pin_set(p_pulse_genB[inum].VAxH);
NRF_LOG_INFO("start electrodes4_pulse_gen");
}
else
{
p_pusle_genB[inum].VBxL = 0xFFFFFFFF;
p_pusle_genB[inum].VBxH = 0xFFFFFFFF;
p_pusle_genB[inum].VAxL = 0xFFFFFFFF;
p_pusle_genB[inum].VAxH = 0xFFFFFFFF;
p_pulse_genB[inum].VBxL = 0xFFFFFFFF;
p_pulse_genB[inum].VBxH = 0xFFFFFFFF;
p_pulse_genB[inum].VAxL = 0xFFFFFFFF;
p_pulse_genB[inum].VAxH = 0xFFFFFFFF;
}
if (electrodes3_pulse_gen_en || electrodes4_pulse_gen_en)
{
cpg11_pulse_init(1, &p_pusle_genB[0], 2);
cpg11_pulse_start(1, &p_pusle_genB[0]);
cpg11_pulse_init(1, &p_pulse_genB[0], 2);
cpg11_pulse_start(1, &p_pulse_genB[0]);
}
for (int i = 0; i < 2; i++)
{
NRF_LOG_INFO("p_pusle_genA[%d]VAxH = %d", i, p_pusle_genA[i].VAxH);
NRF_LOG_INFO("p_pusle_genA[%d]VAxL = %d", i, p_pusle_genA[i].VAxL);
NRF_LOG_INFO("p_pusle_genA[%d]VBxH = %d", i, p_pusle_genA[i].VBxH);
NRF_LOG_INFO("p_pusle_genA[%d]VBxL = %d", i, p_pusle_genA[i].VBxL);
NRF_LOG_INFO("p_pusle_genA[%d]a = %u us", i, p_pusle_genA[i].point_us[0]);
NRF_LOG_INFO("p_pusle_genA[%d]b = %u us", i, p_pusle_genA[i].point_us[1]);
NRF_LOG_INFO("p_pusle_genA[%d]c = %u us", i, p_pusle_genA[i].point_us[2]);
NRF_LOG_INFO("p_pusle_genA[%d]d = %u us", i, p_pusle_genA[i].point_us[3]);
NRF_LOG_INFO("p_pusle_genA[%d]e = %u us", i, p_pusle_genA[i].point_us[4]);
NRF_LOG_INFO("p_pusle_genA[%d]f = %u us", i, p_pusle_genA[i].point_us[5]);
NRF_LOG_INFO("p_pusle_genA[%d]g = %u us", i, p_pusle_genA[i].point_us[6]);
NRF_LOG_INFO("p_pusle_genA[%d]idle = %u us", i, p_pusle_genA[i].idle_us);
NRF_LOG_INFO("p_pusle_genA[%d]pulse_cnt = 0x%08X cnt", i, p_pusle_genA[i].pulse_cnt);
NRF_LOG_INFO("p_pusle_genA[%d]pulse_id = %u", i, p_pusle_genA[i].pulse_id);
NRF_LOG_INFO("p_pulse_genA[%d]VAxH = %d", i, p_pulse_genA[i].VAxH);
NRF_LOG_INFO("p_pulse_genA[%d]VAxL = %d", i, p_pulse_genA[i].VAxL);
NRF_LOG_INFO("p_pulse_genA[%d]VBxH = %d", i, p_pulse_genA[i].VBxH);
NRF_LOG_INFO("p_pulse_genA[%d]VBxL = %d", i, p_pulse_genA[i].VBxL);
NRF_LOG_INFO("p_pulse_genA[%d]a = %u us", i, p_pulse_genA[i].point_us[0]);
NRF_LOG_INFO("p_pulse_genA[%d]b = %u us", i, p_pulse_genA[i].point_us[1]);
NRF_LOG_INFO("p_pulse_genA[%d]c = %u us", i, p_pulse_genA[i].point_us[2]);
NRF_LOG_INFO("p_pulse_genA[%d]d = %u us", i, p_pulse_genA[i].point_us[3]);
NRF_LOG_INFO("p_pulse_genA[%d]e = %u us", i, p_pulse_genA[i].point_us[4]);
NRF_LOG_INFO("p_pulse_genA[%d]f = %u us", i, p_pulse_genA[i].point_us[5]);
NRF_LOG_INFO("p_pulse_genA[%d]g = %u us", i, p_pulse_genA[i].point_us[6]);
NRF_LOG_INFO("p_pulse_genA[%d]idle = %u us", i, p_pulse_genA[i].idle_us);
NRF_LOG_INFO("p_pulse_genA[%d]pulse_cnt = 0x%08X cnt", i, p_pulse_genA[i].pulse_cnt);
NRF_LOG_INFO("p_pulse_genA[%d]pulse_id = %u", i, p_pulse_genA[i].pulse_id);
}
for (int i = 0; i < 2; i++)
{
NRF_LOG_INFO("p_pusle_genB[%d]VAxH = %d", i, p_pusle_genB[i].VAxH);
NRF_LOG_INFO("p_pusle_genB[%d]VAxL = %d", i, p_pusle_genB[i].VAxL);
NRF_LOG_INFO("p_pusle_genB[%d]VBxH = %d", i, p_pusle_genB[i].VBxH);
NRF_LOG_INFO("p_pusle_genB[%d]VBxL = %d", i, p_pusle_genB[i].VBxL);
NRF_LOG_INFO("p_pusle_genB[%d]a = %u us", i, p_pusle_genB[i].point_us[0]);
NRF_LOG_INFO("p_pusle_genB[%d]b = %u us", i, p_pusle_genB[i].point_us[1]);
NRF_LOG_INFO("p_pusle_genB[%d]c = %u us", i, p_pusle_genB[i].point_us[2]);
NRF_LOG_INFO("p_pusle_genB[%d]d = %u us", i, p_pusle_genB[i].point_us[3]);
NRF_LOG_INFO("p_pusle_genB[%d]e = %u us", i, p_pusle_genB[i].point_us[4]);
NRF_LOG_INFO("p_pusle_genB[%d]f = %u us", i, p_pusle_genB[i].point_us[5]);
NRF_LOG_INFO("p_pusle_genB[%d]g = %u us", i, p_pusle_genB[i].point_us[6]);
NRF_LOG_INFO("p_pusle_genB[%d]idle = %u us", i, p_pusle_genB[i].idle_us);
NRF_LOG_INFO("p_pusle_genB[%d]pulse_cnt = 0x%08X cnt", i, p_pusle_genB[i].pulse_cnt);
NRF_LOG_INFO("p_pusle_genB[%d]pulse_id = %u", i, p_pusle_genB[i].pulse_id);
NRF_LOG_INFO("p_pulse_genB[%d]VAxH = %d", i, p_pulse_genB[i].VAxH);
NRF_LOG_INFO("p_pulse_genB[%d]VAxL = %d", i, p_pulse_genB[i].VAxL);
NRF_LOG_INFO("p_pulse_genB[%d]VBxH = %d", i, p_pulse_genB[i].VBxH);
NRF_LOG_INFO("p_pulse_genB[%d]VBxL = %d", i, p_pulse_genB[i].VBxL);
NRF_LOG_INFO("p_pulse_genB[%d]a = %u us", i, p_pulse_genB[i].point_us[0]);
NRF_LOG_INFO("p_pulse_genB[%d]b = %u us", i, p_pulse_genB[i].point_us[1]);
NRF_LOG_INFO("p_pulse_genB[%d]c = %u us", i, p_pulse_genB[i].point_us[2]);
NRF_LOG_INFO("p_pulse_genB[%d]d = %u us", i, p_pulse_genB[i].point_us[3]);
NRF_LOG_INFO("p_pulse_genB[%d]e = %u us", i, p_pulse_genB[i].point_us[4]);
NRF_LOG_INFO("p_pulse_genB[%d]f = %u us", i, p_pulse_genB[i].point_us[5]);
NRF_LOG_INFO("p_pulse_genB[%d]g = %u us", i, p_pulse_genB[i].point_us[6]);
NRF_LOG_INFO("p_pulse_genB[%d]idle = %u us", i, p_pulse_genB[i].idle_us);
NRF_LOG_INFO("p_pulse_genB[%d]pulse_cnt = 0x%08X cnt", i, p_pulse_genB[i].pulse_cnt);
NRF_LOG_INFO("p_pulse_genB[%d]pulse_id = %u", i, p_pulse_genB[i].pulse_id);
}
}
@@ -691,8 +691,8 @@ static void stop_which_electrodes(uint8_t *ins)
cpg11_pulse_stop(0);
NRF_LOG_INFO("stop electrodes1_pulse_gen");
NRF_LOG_INFO("stop electrodes2_pulse_gen");
p_pusle_genA[0].pulse_id = PULSE_ID_NULL;
p_pusle_genA[1].pulse_id = PULSE_ID_NULL;
p_pulse_genA[0].pulse_id = PULSE_ID_NULL;
p_pulse_genA[1].pulse_id = PULSE_ID_NULL;
}
if (electrodes3_pulse_gen_dis || electrodes4_pulse_gen_dis)
@@ -700,17 +700,17 @@ static void stop_which_electrodes(uint8_t *ins)
cpg11_pulse_stop(1);
NRF_LOG_INFO("stop electrodes3_pulse_gen");
NRF_LOG_INFO("stop electrodes4_pulse_gen");
p_pusle_genB[0].pulse_id = PULSE_ID_NULL;
p_pusle_genB[1].pulse_id = PULSE_ID_NULL;
p_pulse_genB[0].pulse_id = PULSE_ID_NULL;
p_pulse_genB[1].pulse_id = PULSE_ID_NULL;
}
for (int i = 0; i < 2; i++)
{
NRF_LOG_INFO("pusle_genA[%d]pulse_id: %d", i, p_pusle_genA[i].pulse_id);
NRF_LOG_INFO("pulse_genA[%d]pulse_id: %d", i, p_pulse_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("pulse_genB[%d]pulse_id: %d", i, p_pulse_genB[i].pulse_id);
}
NRF_LOG_INFO("\n\n")
@@ -726,25 +726,25 @@ static void suspend_which_electrodes(uint8_t *ins)
if (electrodes1_pulse_gen_dis)
{
cpg11_pulse_suspend_by_pulse_id(p_pusle_genA[0].pulse_id);
cpg11_pulse_suspend_by_pulse_id(p_pulse_genA[0].pulse_id);
NRF_LOG_INFO("suspend electrodes1_pulse_gen");
}
if (electrodes2_pulse_gen_dis)
{
cpg11_pulse_suspend_by_pulse_id(p_pusle_genA[1].pulse_id);
cpg11_pulse_suspend_by_pulse_id(p_pulse_genA[1].pulse_id);
NRF_LOG_INFO("suspend electrodes2_pulse_gen");
}
if (electrodes3_pulse_gen_dis)
{
cpg11_pulse_suspend_by_pulse_id(p_pusle_genB[0].pulse_id);
cpg11_pulse_suspend_by_pulse_id(p_pulse_genB[0].pulse_id);
NRF_LOG_INFO("suspend electrodes3_pulse_gen");
}
if (electrodes4_pulse_gen_dis)
{
cpg11_pulse_suspend_by_pulse_id(p_pusle_genB[1].pulse_id);
cpg11_pulse_suspend_by_pulse_id(p_pulse_genB[1].pulse_id);
NRF_LOG_INFO("suspend electrodes4_pulse_gen");
}
}
@@ -759,25 +759,25 @@ static void resume_which_electrodes(uint8_t *ins)
if (electrodes1_pulse_gen_dis)
{
cpg11_pulse_resume_by_pulse_id(p_pusle_genA[0].pulse_id);
cpg11_pulse_resume_by_pulse_id(p_pulse_genA[0].pulse_id);
NRF_LOG_INFO("resume electrodes1_pulse_gen");
}
if (electrodes2_pulse_gen_dis)
{
cpg11_pulse_resume_by_pulse_id(p_pusle_genA[1].pulse_id);
cpg11_pulse_resume_by_pulse_id(p_pulse_genA[1].pulse_id);
NRF_LOG_INFO("resume electrodes2_pulse_gen");
}
if (electrodes3_pulse_gen_dis)
{
cpg11_pulse_resume_by_pulse_id(p_pusle_genB[0].pulse_id);
cpg11_pulse_resume_by_pulse_id(p_pulse_genB[0].pulse_id);
NRF_LOG_INFO("resume electrodes3_pulse_gen");
}
if (electrodes4_pulse_gen_dis)
{
cpg11_pulse_resume_by_pulse_id(p_pusle_genB[1].pulse_id);
cpg11_pulse_resume_by_pulse_id(p_pulse_genB[1].pulse_id);
NRF_LOG_INFO("resume electrodes4_pulse_gen");
}
}
@@ -793,26 +793,26 @@ static void set_cpg_pulse_cnt(uint8_t *ins)
if (electrodes1_pulse_gen_sel)
{
pusle_gen[0].pulse_cnt = pulse_cnt;
NRF_LOG_INFO("[1] pulse_cnt = %u cnt", pusle_gen[0].pulse_cnt);
pulse_gen[0].pulse_cnt = pulse_cnt;
NRF_LOG_INFO("[1] pulse_cnt = %u cnt", pulse_gen[0].pulse_cnt);
}
if (electrodes2_pulse_gen_sel)
{
pusle_gen[1].pulse_cnt = pulse_cnt;
NRF_LOG_INFO("[2] pulse_cnt = %u cnt", pusle_gen[1].pulse_cnt);
pulse_gen[1].pulse_cnt = pulse_cnt;
NRF_LOG_INFO("[2] pulse_cnt = %u cnt", pulse_gen[1].pulse_cnt);
}
if (electrodes3_pulse_gen_sel)
{
pusle_gen[2].pulse_cnt = pulse_cnt;
NRF_LOG_INFO("[3] pulse_cnt = %u cnt", pusle_gen[2].pulse_cnt);
pulse_gen[2].pulse_cnt = pulse_cnt;
NRF_LOG_INFO("[3] pulse_cnt = %u cnt", pulse_gen[2].pulse_cnt);
}
if (electrodes4_pulse_gen_sel)
{
pusle_gen[3].pulse_cnt = pulse_cnt;
NRF_LOG_INFO("[4] pulse_cnt = %u cnt", pusle_gen[3].pulse_cnt);
pulse_gen[3].pulse_cnt = pulse_cnt;
NRF_LOG_INFO("[4] pulse_cnt = %u cnt", pulse_gen[3].pulse_cnt);
}
}
+164 -164
View File
@@ -20,50 +20,50 @@ typedef struct
NRF_TIMER_Type *TMR_A;
NRF_TIMER_Type *TMR_B;
uint32_t IRQn;
pusle_gen_t *p_pusle_gen;
pulse_gen_t *p_pulse_gen;
struct
{
pusle_gen_t *p_pusle_gen;
pulse_gen_t *p_pulse_gen;
uint32_t len;
uint32_t select;
} private;
} pusle_gen_hw_t;
} pulse_gen_hw_t;
pusle_gen_hw_t pusle_gen_hw[] = {
pulse_gen_hw_t pulse_gen_hw[] = {
{.gpiote_idx = { 0, 1, 2, 3 },
.TMR_A = NRF_TIMER1,
.TMR_B = NRF_TIMER3,
.IRQn = TIMER3_IRQn,
.p_pusle_gen = NULL,
.p_pulse_gen = NULL,
.private = { NULL, 0, 0 }},
{.gpiote_idx = { 4, 5, 6, 7 },
.TMR_A = NRF_TIMER2,
.TMR_B = NRF_TIMER4,
.IRQn = TIMER4_IRQn,
.p_pusle_gen = NULL,
.p_pulse_gen = NULL,
.private = { NULL, 0, 0 }},
};
__STATIC_INLINE void cpg11_tmr_cb(uint32_t hw_idx)
{
if (pusle_gen_hw[hw_idx].TMR_B->EVENTS_COMPARE[4])
if (pulse_gen_hw[hw_idx].TMR_B->EVENTS_COMPARE[4])
{
pusle_gen_hw[hw_idx].TMR_B->EVENTS_COMPARE[4] = 0;
pulse_gen_hw[hw_idx].TMR_B->EVENTS_COMPARE[4] = 0;
uint32_t sel = pusle_gen_hw[hw_idx].private.select;
uint32_t sel = pulse_gen_hw[hw_idx].private.select;
if (pusle_gen_hw[hw_idx].private.p_pusle_gen[sel].pulse_cnt > 0)
if (pulse_gen_hw[hw_idx].private.p_pulse_gen[sel].pulse_cnt > 0)
{
pusle_gen_hw[hw_idx].private.p_pusle_gen[sel].pulse_cnt--;
pulse_gen_hw[hw_idx].private.p_pulse_gen[sel].pulse_cnt--;
}
for (uint32_t i = 0; i < pusle_gen_hw[hw_idx].private.len; i++)
for (uint32_t i = 0; i < pulse_gen_hw[hw_idx].private.len; i++)
{
sel = (sel + 1) % pusle_gen_hw[hw_idx].private.len;
if (pusle_gen_hw[hw_idx].private.p_pusle_gen[sel].pulse_cnt > 0)
sel = (sel + 1) % pulse_gen_hw[hw_idx].private.len;
if (pulse_gen_hw[hw_idx].private.p_pulse_gen[sel].pulse_cnt > 0)
{
pusle_gen_hw[hw_idx].private.select = sel;
cpg11_pulse_start(hw_idx, &pusle_gen_hw[hw_idx].private.p_pusle_gen[sel]);
pulse_gen_hw[hw_idx].private.select = sel;
cpg11_pulse_start(hw_idx, &pulse_gen_hw[hw_idx].private.p_pulse_gen[sel]);
return;
}
}
@@ -82,17 +82,17 @@ void TIMER4_IRQHandler(void)
void cpg11_pulse_suspend_by_pulse_id(uint32_t pulse_id)
{
for (uint32_t i = 0; i < COUNTOF(pusle_gen_hw); i++)
for (uint32_t i = 0; i < COUNTOF(pulse_gen_hw); i++)
{
for (uint32_t j = 0; j < pusle_gen_hw[i].private.len; j++)
for (uint32_t j = 0; j < pulse_gen_hw[i].private.len; j++)
{
if (pusle_gen_hw[i].private.p_pusle_gen[j].pulse_id == pulse_id)
if (pulse_gen_hw[i].private.p_pulse_gen[j].pulse_id == pulse_id)
{
taskENTER_CRITICAL();
pusle_gen_hw[i].private.p_pusle_gen[j].VAxH = 0xFFFFFFFF;
pusle_gen_hw[i].private.p_pusle_gen[j].VBxH = 0xFFFFFFFF;
pusle_gen_hw[i].private.p_pusle_gen[j].VAxL = 0xFFFFFFFF;
pusle_gen_hw[i].private.p_pusle_gen[j].VBxL = 0xFFFFFFFF;
pulse_gen_hw[i].private.p_pulse_gen[j].VAxH = 0xFFFFFFFF;
pulse_gen_hw[i].private.p_pulse_gen[j].VBxH = 0xFFFFFFFF;
pulse_gen_hw[i].private.p_pulse_gen[j].VAxL = 0xFFFFFFFF;
pulse_gen_hw[i].private.p_pulse_gen[j].VBxL = 0xFFFFFFFF;
taskEXIT_CRITICAL();
}
}
@@ -101,17 +101,17 @@ void cpg11_pulse_suspend_by_pulse_id(uint32_t pulse_id)
void cpg11_pulse_resume_by_pulse_id(uint32_t pulse_id)
{
for (uint32_t i = 0; i < COUNTOF(pusle_gen_hw); i++)
for (uint32_t i = 0; i < COUNTOF(pulse_gen_hw); i++)
{
for (uint32_t j = 0; j < pusle_gen_hw[i].private.len; j++)
for (uint32_t j = 0; j < pulse_gen_hw[i].private.len; j++)
{
if (pusle_gen_hw[i].private.p_pusle_gen[j].pulse_id == pulse_id)
if (pulse_gen_hw[i].private.p_pulse_gen[j].pulse_id == pulse_id)
{
taskENTER_CRITICAL();
pusle_gen_hw[i].private.p_pusle_gen[j].VAxH = pusle_gen_hw[i].p_pusle_gen[j].VAxH;
pusle_gen_hw[i].private.p_pusle_gen[j].VBxH = pusle_gen_hw[i].p_pusle_gen[j].VBxH;
pusle_gen_hw[i].private.p_pusle_gen[j].VAxL = pusle_gen_hw[i].p_pusle_gen[j].VAxL;
pusle_gen_hw[i].private.p_pusle_gen[j].VBxL = pusle_gen_hw[i].p_pusle_gen[j].VBxL;
pulse_gen_hw[i].private.p_pulse_gen[j].VAxH = pulse_gen_hw[i].p_pulse_gen[j].VAxH;
pulse_gen_hw[i].private.p_pulse_gen[j].VBxH = pulse_gen_hw[i].p_pulse_gen[j].VBxH;
pulse_gen_hw[i].private.p_pulse_gen[j].VAxL = pulse_gen_hw[i].p_pulse_gen[j].VAxL;
pulse_gen_hw[i].private.p_pulse_gen[j].VBxL = pulse_gen_hw[i].p_pulse_gen[j].VBxL;
taskEXIT_CRITICAL();
}
}
@@ -120,141 +120,141 @@ void cpg11_pulse_resume_by_pulse_id(uint32_t pulse_id)
void cpg11_pulse_stop(uint32_t hw_idx)
{
pusle_gen_hw[hw_idx].TMR_B->TASKS_STOP = 1;
pusle_gen_hw[hw_idx].TMR_A->TASKS_STOP = 1;
pulse_gen_hw[hw_idx].TMR_B->TASKS_STOP = 1;
pulse_gen_hw[hw_idx].TMR_A->TASKS_STOP = 1;
sd_nvic_DisableIRQ(pusle_gen_hw[hw_idx].IRQn);
sd_nvic_ClearPendingIRQ(pusle_gen_hw[hw_idx].IRQn);
sd_nvic_DisableIRQ(pulse_gen_hw[hw_idx].IRQn);
sd_nvic_ClearPendingIRQ(pulse_gen_hw[hw_idx].IRQn);
nrf_gpiote_task_disable(pusle_gen_hw[hw_idx].gpiote_idx[0]);
nrf_gpiote_task_disable(pusle_gen_hw[hw_idx].gpiote_idx[1]);
nrf_gpiote_task_disable(pusle_gen_hw[hw_idx].gpiote_idx[2]);
nrf_gpiote_task_disable(pusle_gen_hw[hw_idx].gpiote_idx[3]);
nrf_gpiote_task_disable(pulse_gen_hw[hw_idx].gpiote_idx[0]);
nrf_gpiote_task_disable(pulse_gen_hw[hw_idx].gpiote_idx[1]);
nrf_gpiote_task_disable(pulse_gen_hw[hw_idx].gpiote_idx[2]);
nrf_gpiote_task_disable(pulse_gen_hw[hw_idx].gpiote_idx[3]);
}
void cpg11_pulse_start(uint32_t hw_idx, pusle_gen_t *p_pusle_gen)
void cpg11_pulse_start(uint32_t hw_idx, pulse_gen_t *p_pulse_gen)
{
pusle_gen_hw[hw_idx].TMR_B->TASKS_STOP = 1;
pusle_gen_hw[hw_idx].TMR_A->TASKS_STOP = 1;
pulse_gen_hw[hw_idx].TMR_B->TASKS_STOP = 1;
pulse_gen_hw[hw_idx].TMR_A->TASKS_STOP = 1;
sd_nvic_DisableIRQ(pusle_gen_hw[hw_idx].IRQn);
sd_nvic_ClearPendingIRQ(pusle_gen_hw[hw_idx].IRQn);
sd_nvic_DisableIRQ(pulse_gen_hw[hw_idx].IRQn);
sd_nvic_ClearPendingIRQ(pulse_gen_hw[hw_idx].IRQn);
nrf_gpiote_task_disable(pusle_gen_hw[hw_idx].gpiote_idx[0]);
nrf_gpiote_task_disable(pusle_gen_hw[hw_idx].gpiote_idx[1]);
nrf_gpiote_task_disable(pusle_gen_hw[hw_idx].gpiote_idx[2]);
nrf_gpiote_task_disable(pusle_gen_hw[hw_idx].gpiote_idx[3]);
nrf_gpiote_task_disable(pulse_gen_hw[hw_idx].gpiote_idx[0]);
nrf_gpiote_task_disable(pulse_gen_hw[hw_idx].gpiote_idx[1]);
nrf_gpiote_task_disable(pulse_gen_hw[hw_idx].gpiote_idx[2]);
nrf_gpiote_task_disable(pulse_gen_hw[hw_idx].gpiote_idx[3]);
nrf_gpiote_task_configure(pusle_gen_hw[hw_idx].gpiote_idx[0], p_pusle_gen->VBxH, NRF_GPIOTE_POLARITY_TOGGLE, NRF_GPIOTE_INITIAL_VALUE_HIGH);
nrf_gpiote_task_configure(pusle_gen_hw[hw_idx].gpiote_idx[1], p_pusle_gen->VBxL, NRF_GPIOTE_POLARITY_TOGGLE, NRF_GPIOTE_INITIAL_VALUE_LOW);
nrf_gpiote_task_configure(pusle_gen_hw[hw_idx].gpiote_idx[2], p_pusle_gen->VAxH, NRF_GPIOTE_POLARITY_TOGGLE, NRF_GPIOTE_INITIAL_VALUE_HIGH);
nrf_gpiote_task_configure(pusle_gen_hw[hw_idx].gpiote_idx[3], p_pusle_gen->VAxL, NRF_GPIOTE_POLARITY_TOGGLE, NRF_GPIOTE_INITIAL_VALUE_LOW);
nrf_gpiote_task_configure(pulse_gen_hw[hw_idx].gpiote_idx[0], p_pulse_gen->VBxH, NRF_GPIOTE_POLARITY_TOGGLE, NRF_GPIOTE_INITIAL_VALUE_HIGH);
nrf_gpiote_task_configure(pulse_gen_hw[hw_idx].gpiote_idx[1], p_pulse_gen->VBxL, NRF_GPIOTE_POLARITY_TOGGLE, NRF_GPIOTE_INITIAL_VALUE_LOW);
nrf_gpiote_task_configure(pulse_gen_hw[hw_idx].gpiote_idx[2], p_pulse_gen->VAxH, NRF_GPIOTE_POLARITY_TOGGLE, NRF_GPIOTE_INITIAL_VALUE_HIGH);
nrf_gpiote_task_configure(pulse_gen_hw[hw_idx].gpiote_idx[3], p_pulse_gen->VAxL, NRF_GPIOTE_POLARITY_TOGGLE, NRF_GPIOTE_INITIAL_VALUE_LOW);
nrf_gpiote_task_enable(pusle_gen_hw[hw_idx].gpiote_idx[0]);
nrf_gpiote_task_enable(pusle_gen_hw[hw_idx].gpiote_idx[1]);
nrf_gpiote_task_enable(pusle_gen_hw[hw_idx].gpiote_idx[2]);
nrf_gpiote_task_enable(pusle_gen_hw[hw_idx].gpiote_idx[3]);
nrf_gpiote_task_enable(pulse_gen_hw[hw_idx].gpiote_idx[0]);
nrf_gpiote_task_enable(pulse_gen_hw[hw_idx].gpiote_idx[1]);
nrf_gpiote_task_enable(pulse_gen_hw[hw_idx].gpiote_idx[2]);
nrf_gpiote_task_enable(pulse_gen_hw[hw_idx].gpiote_idx[3]);
uint32_t offs = 8 * hw_idx;
NRF_PPI->CH[offs + 0].EEP = (uint32_t)&pusle_gen_hw[hw_idx].TMR_A->EVENTS_COMPARE[0];
NRF_PPI->CH[offs + 0].TEP = (uint32_t)&NRF_GPIOTE->TASKS_OUT[pusle_gen_hw[hw_idx].gpiote_idx[0]];
NRF_PPI->CH[offs + 0].EEP = (uint32_t)&pulse_gen_hw[hw_idx].TMR_A->EVENTS_COMPARE[0];
NRF_PPI->CH[offs + 0].TEP = (uint32_t)&NRF_GPIOTE->TASKS_OUT[pulse_gen_hw[hw_idx].gpiote_idx[0]];
NRF_PPI->CHENSET = (1 << (offs + 0));
NRF_PPI->CH[offs + 1].EEP = (uint32_t)&pusle_gen_hw[hw_idx].TMR_A->EVENTS_COMPARE[1];
NRF_PPI->CH[offs + 1].TEP = (uint32_t)&NRF_GPIOTE->TASKS_OUT[pusle_gen_hw[hw_idx].gpiote_idx[1]];
NRF_PPI->CH[offs + 1].EEP = (uint32_t)&pulse_gen_hw[hw_idx].TMR_A->EVENTS_COMPARE[1];
NRF_PPI->CH[offs + 1].TEP = (uint32_t)&NRF_GPIOTE->TASKS_OUT[pulse_gen_hw[hw_idx].gpiote_idx[1]];
NRF_PPI->CHENSET = (1 << (offs + 1));
NRF_PPI->CH[offs + 2].EEP = (uint32_t)&pusle_gen_hw[hw_idx].TMR_A->EVENTS_COMPARE[2];
NRF_PPI->CH[offs + 2].TEP = (uint32_t)&NRF_GPIOTE->TASKS_OUT[pusle_gen_hw[hw_idx].gpiote_idx[1]];
NRF_PPI->CH[offs + 2].EEP = (uint32_t)&pulse_gen_hw[hw_idx].TMR_A->EVENTS_COMPARE[2];
NRF_PPI->CH[offs + 2].TEP = (uint32_t)&NRF_GPIOTE->TASKS_OUT[pulse_gen_hw[hw_idx].gpiote_idx[1]];
NRF_PPI->CHENSET = (1 << (offs + 2));
NRF_PPI->CH[offs + 3].EEP = (uint32_t)&pusle_gen_hw[hw_idx].TMR_A->EVENTS_COMPARE[3];
NRF_PPI->CH[offs + 3].TEP = (uint32_t)&NRF_GPIOTE->TASKS_OUT[pusle_gen_hw[hw_idx].gpiote_idx[0]];
NRF_PPI->FORK[offs + 3].TEP = (uint32_t)&pusle_gen_hw[hw_idx].TMR_B->TASKS_START;
NRF_PPI->CH[offs + 3].EEP = (uint32_t)&pulse_gen_hw[hw_idx].TMR_A->EVENTS_COMPARE[3];
NRF_PPI->CH[offs + 3].TEP = (uint32_t)&NRF_GPIOTE->TASKS_OUT[pulse_gen_hw[hw_idx].gpiote_idx[0]];
NRF_PPI->FORK[offs + 3].TEP = (uint32_t)&pulse_gen_hw[hw_idx].TMR_B->TASKS_START;
NRF_PPI->CHENSET = (1 << (offs + 3));
NRF_PPI->CH[offs + 4].EEP = (uint32_t)&pusle_gen_hw[hw_idx].TMR_B->EVENTS_COMPARE[0];
NRF_PPI->CH[offs + 4].TEP = (uint32_t)&NRF_GPIOTE->TASKS_OUT[pusle_gen_hw[hw_idx].gpiote_idx[2]];
NRF_PPI->CH[offs + 4].EEP = (uint32_t)&pulse_gen_hw[hw_idx].TMR_B->EVENTS_COMPARE[0];
NRF_PPI->CH[offs + 4].TEP = (uint32_t)&NRF_GPIOTE->TASKS_OUT[pulse_gen_hw[hw_idx].gpiote_idx[2]];
NRF_PPI->CHENSET = (1 << (offs + 4));
NRF_PPI->CH[offs + 5].EEP = (uint32_t)&pusle_gen_hw[hw_idx].TMR_B->EVENTS_COMPARE[1];
NRF_PPI->CH[offs + 5].TEP = (uint32_t)&NRF_GPIOTE->TASKS_OUT[pusle_gen_hw[hw_idx].gpiote_idx[3]];
NRF_PPI->CH[offs + 5].EEP = (uint32_t)&pulse_gen_hw[hw_idx].TMR_B->EVENTS_COMPARE[1];
NRF_PPI->CH[offs + 5].TEP = (uint32_t)&NRF_GPIOTE->TASKS_OUT[pulse_gen_hw[hw_idx].gpiote_idx[3]];
NRF_PPI->CHENSET = (1 << (offs + 5));
NRF_PPI->CH[offs + 6].EEP = (uint32_t)&pusle_gen_hw[hw_idx].TMR_B->EVENTS_COMPARE[2];
NRF_PPI->CH[offs + 6].TEP = (uint32_t)&NRF_GPIOTE->TASKS_OUT[pusle_gen_hw[hw_idx].gpiote_idx[3]];
NRF_PPI->CH[offs + 6].EEP = (uint32_t)&pulse_gen_hw[hw_idx].TMR_B->EVENTS_COMPARE[2];
NRF_PPI->CH[offs + 6].TEP = (uint32_t)&NRF_GPIOTE->TASKS_OUT[pulse_gen_hw[hw_idx].gpiote_idx[3]];
NRF_PPI->CHENSET = (1 << (offs + 6));
NRF_PPI->CH[offs + 7].EEP = (uint32_t)&pusle_gen_hw[hw_idx].TMR_B->EVENTS_COMPARE[3];
NRF_PPI->CH[offs + 7].TEP = (uint32_t)&NRF_GPIOTE->TASKS_OUT[pusle_gen_hw[hw_idx].gpiote_idx[2]];
NRF_PPI->CH[offs + 7].EEP = (uint32_t)&pulse_gen_hw[hw_idx].TMR_B->EVENTS_COMPARE[3];
NRF_PPI->CH[offs + 7].TEP = (uint32_t)&NRF_GPIOTE->TASKS_OUT[pulse_gen_hw[hw_idx].gpiote_idx[2]];
NRF_PPI->CHENSET = (1 << (offs + 7));
pusle_gen_hw[hw_idx].TMR_B->TASKS_CLEAR = 1;
pusle_gen_hw[hw_idx].TMR_A->TASKS_CLEAR = 1;
pulse_gen_hw[hw_idx].TMR_B->TASKS_CLEAR = 1;
pulse_gen_hw[hw_idx].TMR_A->TASKS_CLEAR = 1;
pusle_gen_hw[hw_idx].TMR_B->CC[0] = 1 + p_pusle_gen->point_us[3] * 16;
pusle_gen_hw[hw_idx].TMR_B->CC[1] = pusle_gen_hw[hw_idx].TMR_B->CC[0] + p_pusle_gen->point_us[4] * 16;
pusle_gen_hw[hw_idx].TMR_B->CC[2] = pusle_gen_hw[hw_idx].TMR_B->CC[1] + p_pusle_gen->point_us[5] * 16;
pusle_gen_hw[hw_idx].TMR_B->CC[3] = pusle_gen_hw[hw_idx].TMR_B->CC[2] + p_pusle_gen->point_us[6] * 16;
pusle_gen_hw[hw_idx].TMR_B->CC[4] = pusle_gen_hw[hw_idx].TMR_B->CC[3] + p_pusle_gen->idle_us * 16;
pusle_gen_hw[hw_idx].TMR_B->SHORTS = NRF_TIMER_SHORT_COMPARE4_STOP_MASK | NRF_TIMER_SHORT_COMPARE4_CLEAR_MASK;
pusle_gen_hw[hw_idx].TMR_B->INTENSET = NRF_TIMER_INT_COMPARE4_MASK;
pulse_gen_hw[hw_idx].TMR_B->CC[0] = 1 + p_pulse_gen->point_us[3] * 16;
pulse_gen_hw[hw_idx].TMR_B->CC[1] = pulse_gen_hw[hw_idx].TMR_B->CC[0] + p_pulse_gen->point_us[4] * 16;
pulse_gen_hw[hw_idx].TMR_B->CC[2] = pulse_gen_hw[hw_idx].TMR_B->CC[1] + p_pulse_gen->point_us[5] * 16;
pulse_gen_hw[hw_idx].TMR_B->CC[3] = pulse_gen_hw[hw_idx].TMR_B->CC[2] + p_pulse_gen->point_us[6] * 16;
pulse_gen_hw[hw_idx].TMR_B->CC[4] = pulse_gen_hw[hw_idx].TMR_B->CC[3] + p_pulse_gen->idle_us * 16;
pulse_gen_hw[hw_idx].TMR_B->SHORTS = NRF_TIMER_SHORT_COMPARE4_STOP_MASK | NRF_TIMER_SHORT_COMPARE4_CLEAR_MASK;
pulse_gen_hw[hw_idx].TMR_B->INTENSET = NRF_TIMER_INT_COMPARE4_MASK;
pusle_gen_hw[hw_idx].TMR_A->CC[0] = 1;
pusle_gen_hw[hw_idx].TMR_A->CC[1] = pusle_gen_hw[hw_idx].TMR_A->CC[0] + p_pusle_gen->point_us[0] * 16;
pusle_gen_hw[hw_idx].TMR_A->CC[2] = pusle_gen_hw[hw_idx].TMR_A->CC[1] + p_pusle_gen->point_us[1] * 16;
pusle_gen_hw[hw_idx].TMR_A->CC[3] = pusle_gen_hw[hw_idx].TMR_A->CC[2] + p_pusle_gen->point_us[2] * 16;
pusle_gen_hw[hw_idx].TMR_A->SHORTS = NRF_TIMER_SHORT_COMPARE3_STOP_MASK | NRF_TIMER_SHORT_COMPARE3_CLEAR_MASK;
pulse_gen_hw[hw_idx].TMR_A->CC[0] = 1;
pulse_gen_hw[hw_idx].TMR_A->CC[1] = pulse_gen_hw[hw_idx].TMR_A->CC[0] + p_pulse_gen->point_us[0] * 16;
pulse_gen_hw[hw_idx].TMR_A->CC[2] = pulse_gen_hw[hw_idx].TMR_A->CC[1] + p_pulse_gen->point_us[1] * 16;
pulse_gen_hw[hw_idx].TMR_A->CC[3] = pulse_gen_hw[hw_idx].TMR_A->CC[2] + p_pulse_gen->point_us[2] * 16;
pulse_gen_hw[hw_idx].TMR_A->SHORTS = NRF_TIMER_SHORT_COMPARE3_STOP_MASK | NRF_TIMER_SHORT_COMPARE3_CLEAR_MASK;
sd_nvic_EnableIRQ(pusle_gen_hw[hw_idx].IRQn);
sd_nvic_EnableIRQ(pulse_gen_hw[hw_idx].IRQn);
pusle_gen_hw[hw_idx].TMR_A->TASKS_START = 1;
pulse_gen_hw[hw_idx].TMR_A->TASKS_START = 1;
}
void cpg11_pulse_init(uint32_t hw_idx, pusle_gen_t *p_pusle_gen, uint32_t len)
void cpg11_pulse_init(uint32_t hw_idx, pulse_gen_t *p_pulse_gen, uint32_t len)
{
taskENTER_CRITICAL();
if (pusle_gen_hw[hw_idx].private.p_pusle_gen != NULL)
if (pulse_gen_hw[hw_idx].private.p_pulse_gen != NULL)
{
pusle_gen_hw[hw_idx].TMR_B->TASKS_STOP = 1;
pusle_gen_hw[hw_idx].TMR_A->TASKS_STOP = 1;
pulse_gen_hw[hw_idx].TMR_B->TASKS_STOP = 1;
pulse_gen_hw[hw_idx].TMR_A->TASKS_STOP = 1;
sd_nvic_DisableIRQ(pusle_gen_hw[hw_idx].IRQn);
sd_nvic_ClearPendingIRQ(pusle_gen_hw[hw_idx].IRQn);
sd_nvic_DisableIRQ(pulse_gen_hw[hw_idx].IRQn);
sd_nvic_ClearPendingIRQ(pulse_gen_hw[hw_idx].IRQn);
nrf_gpiote_task_disable(pusle_gen_hw[hw_idx].gpiote_idx[0]);
nrf_gpiote_task_disable(pusle_gen_hw[hw_idx].gpiote_idx[1]);
nrf_gpiote_task_disable(pusle_gen_hw[hw_idx].gpiote_idx[2]);
nrf_gpiote_task_disable(pusle_gen_hw[hw_idx].gpiote_idx[3]);
nrf_gpiote_task_disable(pulse_gen_hw[hw_idx].gpiote_idx[0]);
nrf_gpiote_task_disable(pulse_gen_hw[hw_idx].gpiote_idx[1]);
nrf_gpiote_task_disable(pulse_gen_hw[hw_idx].gpiote_idx[2]);
nrf_gpiote_task_disable(pulse_gen_hw[hw_idx].gpiote_idx[3]);
vPortFree(pusle_gen_hw[hw_idx].private.p_pusle_gen);
vPortFree(pulse_gen_hw[hw_idx].private.p_pulse_gen);
}
pusle_gen_hw[hw_idx].p_pusle_gen = p_pusle_gen;
pusle_gen_hw[hw_idx].private.len = len;
pusle_gen_hw[hw_idx].private.select = 0;
pulse_gen_hw[hw_idx].p_pulse_gen = p_pulse_gen;
pulse_gen_hw[hw_idx].private.len = len;
pulse_gen_hw[hw_idx].private.select = 0;
pusle_gen_hw[hw_idx].private.p_pusle_gen = pvPortMalloc(sizeof(pusle_gen_t) * len);
memcpy(pusle_gen_hw[hw_idx].private.p_pusle_gen, pusle_gen_hw[hw_idx].p_pusle_gen, sizeof(*p_pusle_gen) * len);
pulse_gen_hw[hw_idx].private.p_pulse_gen = pvPortMalloc(sizeof(pulse_gen_t) * len);
memcpy(pulse_gen_hw[hw_idx].private.p_pulse_gen, pulse_gen_hw[hw_idx].p_pulse_gen, sizeof(*p_pulse_gen) * len);
taskEXIT_CRITICAL();
};
void cpg_pulse_default_demo_ext(void)
{
uint32_t pusle_gen_numb = 2;
uint32_t pulse_gen_numb = 2;
pusle_gen_t *p_pusle_genA = pvPortMalloc(sizeof(pusle_gen_t) * pusle_gen_numb);
pusle_gen_t *p_pusle_genB = pvPortMalloc(sizeof(pusle_gen_t) * pusle_gen_numb);
pulse_gen_t *p_pulse_genA = pvPortMalloc(sizeof(pulse_gen_t) * pulse_gen_numb);
pulse_gen_t *p_pulse_genB = pvPortMalloc(sizeof(pulse_gen_t) * pulse_gen_numb);
memset(p_pusle_genA, 0x00, sizeof(pusle_gen_t) * pusle_gen_numb);
memset(p_pusle_genB, 0x00, sizeof(pusle_gen_t) * pusle_gen_numb);
memset(p_pulse_genA, 0x00, sizeof(pulse_gen_t) * pulse_gen_numb);
memset(p_pulse_genB, 0x00, sizeof(pulse_gen_t) * pulse_gen_numb);
if (pusle_gen_numb > 0)
if (pulse_gen_numb > 0)
{
p_pusle_genA[0] = (pusle_gen_t) {
p_pulse_genA[0] = (pulse_gen_t) {
.VBxH = VB1H_PIN,
.VBxL = VB1L_PIN,
.VAxH = VA1H_PIN,
@@ -272,9 +272,9 @@ void cpg_pulse_default_demo_ext(void)
};
}
if (pusle_gen_numb > 1)
if (pulse_gen_numb > 1)
{
p_pusle_genA[1] = (pusle_gen_t) {
p_pulse_genA[1] = (pulse_gen_t) {
.VBxH = VB2H_PIN,
.VBxL = VB2L_PIN,
.VAxH = VA2H_PIN,
@@ -292,9 +292,9 @@ void cpg_pulse_default_demo_ext(void)
};
}
if (pusle_gen_numb > 0)
if (pulse_gen_numb > 0)
{
p_pusle_genB[0] = (pusle_gen_t) {
p_pulse_genB[0] = (pulse_gen_t) {
.VBxH = VB3H_PIN,
.VBxL = VB3L_PIN,
.VAxH = VA3H_PIN,
@@ -312,9 +312,9 @@ void cpg_pulse_default_demo_ext(void)
};
}
if (pusle_gen_numb > 1)
if (pulse_gen_numb > 1)
{
p_pusle_genB[1] = (pusle_gen_t) {
p_pulse_genB[1] = (pulse_gen_t) {
.VBxH = VB4H_PIN,
.VBxL = VB4L_PIN,
.VAxH = VA4H_PIN,
@@ -332,47 +332,47 @@ void cpg_pulse_default_demo_ext(void)
};
}
for (uint32_t i = 0; i < pusle_gen_numb; i++)
for (uint32_t i = 0; i < pulse_gen_numb; i++)
{
nrf_gpio_pin_clear(p_pusle_genA[i].VBxL);
nrf_gpio_pin_set(p_pusle_genA[i].VBxH);
nrf_gpio_pin_clear(p_pusle_genA[i].VAxL);
nrf_gpio_pin_set(p_pusle_genA[i].VAxH);
nrf_gpio_pin_clear(p_pulse_genA[i].VBxL);
nrf_gpio_pin_set(p_pulse_genA[i].VBxH);
nrf_gpio_pin_clear(p_pulse_genA[i].VAxL);
nrf_gpio_pin_set(p_pulse_genA[i].VAxH);
}
/*
for (uint32_t i = 0; i < pusle_gen_numb; i++)
for (uint32_t i = 0; i < pulse_gen_numb; i++)
{
nrf_gpio_pin_clear(p_pusle_genB[i].VBxL);
nrf_gpio_pin_set(p_pusle_genB[i].VBxH);
nrf_gpio_pin_clear(p_pusle_genB[i].VAxL);
nrf_gpio_pin_set(p_pusle_genB[i].VAxH);
nrf_gpio_pin_clear(p_pulse_genB[i].VBxL);
nrf_gpio_pin_set(p_pulse_genB[i].VBxH);
nrf_gpio_pin_clear(p_pulse_genB[i].VAxL);
nrf_gpio_pin_set(p_pulse_genB[i].VAxH);
}
*/
cpg11_pulse_init(0, p_pusle_genA, pusle_gen_numb);
cpg11_pulse_init(0, p_pulse_genA, pulse_gen_numb);
// cpg11_pulse_init(1, p_pusle_genB, pusle_gen_numb);
// cpg11_pulse_init(1, p_pulse_genB, pulse_gen_numb);
cpg11_pulse_start(0, p_pusle_genA);
cpg11_pulse_start(0, p_pulse_genA);
// cpg11_pulse_start(1, p_pusle_genB);
// cpg11_pulse_start(1, p_pulse_genB);
for (;;)
{
vTaskDelay(10);
cpg11_pulse_suspend_by_pulse_id(p_pusle_genA[0].pulse_id);
cpg11_pulse_suspend_by_pulse_id(p_pulse_genA[0].pulse_id);
vTaskDelay(10);
cpg11_pulse_resume_by_pulse_id(p_pusle_genA[0].pulse_id);
cpg11_pulse_resume_by_pulse_id(p_pulse_genA[0].pulse_id);
}
// cpg11_pulse_suspend_by_pulse_id(p_pusle_gen[0].pulse_id);
// cpg11_pulse_suspend_by_pulse_id(p_pusle_gen[1].pulse_id);
// cpg11_pulse_suspend_by_pulse_id(p_pusle_gen[2].pulse_id);
// cpg11_pulse_suspend_by_pulse_id(p_pusle_gen[3].pulse_id);
// cpg11_pulse_suspend_by_pulse_id(p_pusle_gen[4].pulse_id);
// cpg11_pulse_suspend_by_pulse_id(p_pulse_gen[0].pulse_id);
// cpg11_pulse_suspend_by_pulse_id(p_pulse_gen[1].pulse_id);
// cpg11_pulse_suspend_by_pulse_id(p_pulse_gen[2].pulse_id);
// cpg11_pulse_suspend_by_pulse_id(p_pulse_gen[3].pulse_id);
// cpg11_pulse_suspend_by_pulse_id(p_pulse_gen[4].pulse_id);
vPortFree(p_pusle_genA);
vPortFree(p_pusle_genB);
vPortFree(p_pulse_genA);
vPortFree(p_pulse_genB);
for (;;)
{
@@ -443,37 +443,37 @@ void cpg11_io_init(void)
nrf_gpio_cfg_input(AIN0_PIN, NRF_GPIO_PIN_NOPULL);
nrf_gpio_cfg_input(AIN1_PIN, NRF_GPIO_PIN_NOPULL);
for (uint32_t i = 0; i < COUNTOF(pusle_gen_hw); i++)
for (uint32_t i = 0; i < COUNTOF(pulse_gen_hw); i++)
{
pusle_gen_hw[i].TMR_B->PRESCALER = NRF_TIMER_FREQ_16MHz;
pusle_gen_hw[i].TMR_B->MODE = NRF_TIMER_MODE_TIMER;
pusle_gen_hw[i].TMR_B->BITMODE = NRF_TIMER_BIT_WIDTH_32;
pulse_gen_hw[i].TMR_B->PRESCALER = NRF_TIMER_FREQ_16MHz;
pulse_gen_hw[i].TMR_B->MODE = NRF_TIMER_MODE_TIMER;
pulse_gen_hw[i].TMR_B->BITMODE = NRF_TIMER_BIT_WIDTH_32;
pusle_gen_hw[i].TMR_A->PRESCALER = NRF_TIMER_FREQ_16MHz;
pusle_gen_hw[i].TMR_A->MODE = NRF_TIMER_MODE_TIMER;
pusle_gen_hw[i].TMR_A->BITMODE = NRF_TIMER_BIT_WIDTH_32;
pulse_gen_hw[i].TMR_A->PRESCALER = NRF_TIMER_FREQ_16MHz;
pulse_gen_hw[i].TMR_A->MODE = NRF_TIMER_MODE_TIMER;
pulse_gen_hw[i].TMR_A->BITMODE = NRF_TIMER_BIT_WIDTH_32;
sd_nvic_SetPriority(pusle_gen_hw[i].IRQn, _PRIO_APP_HIGH);
sd_nvic_SetPriority(pulse_gen_hw[i].IRQn, _PRIO_APP_HIGH);
}
for (int i = 0; i < 2; i++)
{
pusle_gen_hw[i].p_pusle_gen[0].VAxH = 0xFFFFFFFF;
pusle_gen_hw[i].p_pusle_gen[0].VBxH = 0xFFFFFFFF;
pusle_gen_hw[i].p_pusle_gen[0].VAxL = 0xFFFFFFFF;
pusle_gen_hw[i].p_pusle_gen[0].VBxL = 0xFFFFFFFF;
pusle_gen_hw[i].p_pusle_gen[1].VAxH = 0xFFFFFFFF;
pusle_gen_hw[i].p_pusle_gen[1].VBxH = 0xFFFFFFFF;
pusle_gen_hw[i].p_pusle_gen[1].VAxL = 0xFFFFFFFF;
pusle_gen_hw[i].p_pusle_gen[1].VBxL = 0xFFFFFFFF;
pusle_gen_hw[i].private.p_pusle_gen[0].VAxH = 0xFFFFFFFF;
pusle_gen_hw[i].private.p_pusle_gen[0].VBxH = 0xFFFFFFFF;
pusle_gen_hw[i].private.p_pusle_gen[0].VAxL = 0xFFFFFFFF;
pusle_gen_hw[i].private.p_pusle_gen[0].VBxL = 0xFFFFFFFF;
pusle_gen_hw[i].private.p_pusle_gen[1].VAxH = 0xFFFFFFFF;
pusle_gen_hw[i].private.p_pusle_gen[1].VBxH = 0xFFFFFFFF;
pusle_gen_hw[i].private.p_pusle_gen[1].VAxL = 0xFFFFFFFF;
pusle_gen_hw[i].private.p_pusle_gen[1].VBxL = 0xFFFFFFFF;
pulse_gen_hw[i].p_pulse_gen[0].VAxH = 0xFFFFFFFF;
pulse_gen_hw[i].p_pulse_gen[0].VBxH = 0xFFFFFFFF;
pulse_gen_hw[i].p_pulse_gen[0].VAxL = 0xFFFFFFFF;
pulse_gen_hw[i].p_pulse_gen[0].VBxL = 0xFFFFFFFF;
pulse_gen_hw[i].p_pulse_gen[1].VAxH = 0xFFFFFFFF;
pulse_gen_hw[i].p_pulse_gen[1].VBxH = 0xFFFFFFFF;
pulse_gen_hw[i].p_pulse_gen[1].VAxL = 0xFFFFFFFF;
pulse_gen_hw[i].p_pulse_gen[1].VBxL = 0xFFFFFFFF;
pulse_gen_hw[i].private.p_pulse_gen[0].VAxH = 0xFFFFFFFF;
pulse_gen_hw[i].private.p_pulse_gen[0].VBxH = 0xFFFFFFFF;
pulse_gen_hw[i].private.p_pulse_gen[0].VAxL = 0xFFFFFFFF;
pulse_gen_hw[i].private.p_pulse_gen[0].VBxL = 0xFFFFFFFF;
pulse_gen_hw[i].private.p_pulse_gen[1].VAxH = 0xFFFFFFFF;
pulse_gen_hw[i].private.p_pulse_gen[1].VBxH = 0xFFFFFFFF;
pulse_gen_hw[i].private.p_pulse_gen[1].VAxL = 0xFFFFFFFF;
pulse_gen_hw[i].private.p_pulse_gen[1].VBxL = 0xFFFFFFFF;
}
// cpg_pulse_default_demo_ext();
+3 -3
View File
@@ -72,7 +72,7 @@ extern "C"
uint32_t point_us[7]; // toggle point timestamp
uint32_t pulse_cnt; // min: 1, max: 0xFFFFFFFF
uint32_t pulse_id; // NO_USE_IRQ / USE_TIMER1_IRQ / USE_TIMER2_IRQ
} pusle_gen_t;
} pulse_gen_t;
void spim_xfer(uint32_t cs_pin,
nrf_spim_mode_t spi_mode,
@@ -82,8 +82,8 @@ extern "C"
uint16_t rx_buffer_length);
void cpg11_io_init(void);
void cpg11_pulse_init(uint32_t hw_idx, pusle_gen_t *p_pusle_gen, uint32_t len);
void cpg11_pulse_start(uint32_t idx, pusle_gen_t *p_pusle_gen);
void cpg11_pulse_init(uint32_t hw_idx, pulse_gen_t *p_pulse_gen, uint32_t len);
void cpg11_pulse_start(uint32_t idx, pulse_gen_t *p_pulse_gen);
void cpg11_pulse_stop(uint32_t hw_idx);
void cpg11_pulse_suspend_by_pulse_id(uint32_t pulse_id);
void cpg11_pulse_resume_by_pulse_id(uint32_t pulse_id);
+41 -41
View File
@@ -82,7 +82,7 @@ typedef struct
uint32_t pulse_idle; // min: 2, max: 32767, unit: us
uint32_t pulse_width; // min: 2, max: 32767, unit: us,
uint32_t pulse_cnt; // min: 1, max: 0xFFFFFFFF
} pusle_gen_t;
} pulse_gen_t;
typedef struct
{
@@ -90,9 +90,9 @@ typedef struct
NRF_TIMER_Type *pulse_tmr;
uint32_t pulse_irq_n;
uint32_t pulse_cnt;
} pusle_gen_hw_t;
} pulse_gen_hw_t;
pusle_gen_hw_t pusle_gen_hw = {
pulse_gen_hw_t pulse_gen_hw = {
.gpiote_idx = {0, 1},
.pulse_tmr = NRF_TIMER3,
.pulse_irq_n = TIMER3_IRQn,
@@ -101,73 +101,73 @@ pusle_gen_hw_t pusle_gen_hw = {
void TIMER3_IRQHandler(void)
{
if (pusle_gen_hw.pulse_tmr->EVENTS_COMPARE[1])
if (pulse_gen_hw.pulse_tmr->EVENTS_COMPARE[1])
{
pusle_gen_hw.pulse_tmr->EVENTS_COMPARE[1] = 0;
pusle_gen_hw.pulse_cnt--;
if (pusle_gen_hw.pulse_cnt == 1)
pulse_gen_hw.pulse_tmr->EVENTS_COMPARE[1] = 0;
pulse_gen_hw.pulse_cnt--;
if (pulse_gen_hw.pulse_cnt == 1)
{
pusle_gen_hw.pulse_tmr->SHORTS |= NRF_TIMER_SHORT_COMPARE1_STOP_MASK;
pulse_gen_hw.pulse_tmr->SHORTS |= NRF_TIMER_SHORT_COMPARE1_STOP_MASK;
}
}
}
bool pel10_pulse_gen(pusle_gen_t *p_pusle_gen)
bool pel10_pulse_gen(pulse_gen_t *p_pulse_gen)
{
/* hardware limitation */
if (p_pusle_gen->pulse_cnt == 0 ||
p_pusle_gen->pulse_idle < MIN_PULSE_IDLE ||
p_pusle_gen->pulse_width < MIN_PULSE_WIDTH ||
p_pusle_gen->pulse_idle > MAX_PULSE_IDLE ||
p_pusle_gen->pulse_width > MAX_PULSE_WIDTH)
if (p_pulse_gen->pulse_cnt == 0 ||
p_pulse_gen->pulse_idle < MIN_PULSE_IDLE ||
p_pulse_gen->pulse_width < MIN_PULSE_WIDTH ||
p_pulse_gen->pulse_idle > MAX_PULSE_IDLE ||
p_pulse_gen->pulse_width > MAX_PULSE_WIDTH)
{
return false;
}
pusle_gen_hw.pulse_cnt = p_pusle_gen->pulse_cnt;
pulse_gen_hw.pulse_cnt = p_pulse_gen->pulse_cnt;
pusle_gen_hw.pulse_tmr->TASKS_STOP = 1;
pulse_gen_hw.pulse_tmr->TASKS_STOP = 1;
sd_nvic_DisableIRQ(pusle_gen_hw.pulse_irq_n);
sd_nvic_ClearPendingIRQ(pusle_gen_hw.pulse_irq_n);
sd_nvic_DisableIRQ(pulse_gen_hw.pulse_irq_n);
sd_nvic_ClearPendingIRQ(pulse_gen_hw.pulse_irq_n);
nrf_gpiote_task_configure(pusle_gen_hw.gpiote_idx[0], p_pusle_gen->anode_pin, NRF_GPIOTE_POLARITY_TOGGLE, NRF_GPIOTE_INITIAL_VALUE_HIGH);
nrf_gpiote_task_configure(pusle_gen_hw.gpiote_idx[1], p_pusle_gen->cathode_pin, NRF_GPIOTE_POLARITY_TOGGLE, NRF_GPIOTE_INITIAL_VALUE_LOW);
nrf_gpiote_task_configure(pulse_gen_hw.gpiote_idx[0], p_pulse_gen->anode_pin, NRF_GPIOTE_POLARITY_TOGGLE, NRF_GPIOTE_INITIAL_VALUE_HIGH);
nrf_gpiote_task_configure(pulse_gen_hw.gpiote_idx[1], p_pulse_gen->cathode_pin, NRF_GPIOTE_POLARITY_TOGGLE, NRF_GPIOTE_INITIAL_VALUE_LOW);
nrf_gpiote_task_enable(pusle_gen_hw.gpiote_idx[0]);
nrf_gpiote_task_enable(pusle_gen_hw.gpiote_idx[1]);
nrf_gpiote_task_enable(pulse_gen_hw.gpiote_idx[0]);
nrf_gpiote_task_enable(pulse_gen_hw.gpiote_idx[1]);
NRF_PPI->CH[0].EEP = (uint32_t)&pusle_gen_hw.pulse_tmr->EVENTS_COMPARE[0];
NRF_PPI->CH[0].TEP = (uint32_t)&NRF_GPIOTE->TASKS_OUT[pusle_gen_hw.gpiote_idx[0]];
NRF_PPI->FORK[0].TEP = (uint32_t)&NRF_GPIOTE->TASKS_OUT[pusle_gen_hw.gpiote_idx[1]];
NRF_PPI->CH[0].EEP = (uint32_t)&pulse_gen_hw.pulse_tmr->EVENTS_COMPARE[0];
NRF_PPI->CH[0].TEP = (uint32_t)&NRF_GPIOTE->TASKS_OUT[pulse_gen_hw.gpiote_idx[0]];
NRF_PPI->FORK[0].TEP = (uint32_t)&NRF_GPIOTE->TASKS_OUT[pulse_gen_hw.gpiote_idx[1]];
NRF_PPI->CHENSET = (1 << (0));
NRF_PPI->CH[1].EEP = (uint32_t)&pusle_gen_hw.pulse_tmr->EVENTS_COMPARE[1];
NRF_PPI->CH[1].TEP = (uint32_t)&NRF_GPIOTE->TASKS_OUT[pusle_gen_hw.gpiote_idx[0]];
NRF_PPI->FORK[1].TEP = (uint32_t)&NRF_GPIOTE->TASKS_OUT[pusle_gen_hw.gpiote_idx[1]];
NRF_PPI->CH[1].EEP = (uint32_t)&pulse_gen_hw.pulse_tmr->EVENTS_COMPARE[1];
NRF_PPI->CH[1].TEP = (uint32_t)&NRF_GPIOTE->TASKS_OUT[pulse_gen_hw.gpiote_idx[0]];
NRF_PPI->FORK[1].TEP = (uint32_t)&NRF_GPIOTE->TASKS_OUT[pulse_gen_hw.gpiote_idx[1]];
NRF_PPI->CHENSET = (1 << (1));
pusle_gen_hw.pulse_tmr->TASKS_CLEAR = 1;
pulse_gen_hw.pulse_tmr->TASKS_CLEAR = 1;
pusle_gen_hw.pulse_tmr->PRESCALER = NRF_TIMER_FREQ_16MHz;
pusle_gen_hw.pulse_tmr->MODE = NRF_TIMER_MODE_TIMER;
pusle_gen_hw.pulse_tmr->BITMODE = NRF_TIMER_BIT_WIDTH_32;
pusle_gen_hw.pulse_tmr->CC[0] = p_pusle_gen->pulse_idle * 16;
pusle_gen_hw.pulse_tmr->CC[1] = pusle_gen_hw.pulse_tmr->CC[0] + p_pusle_gen->pulse_width * 16;
pusle_gen_hw.pulse_tmr->SHORTS = pusle_gen_hw.pulse_cnt > 1 ? NRF_TIMER_SHORT_COMPARE1_CLEAR_MASK : NRF_TIMER_SHORT_COMPARE1_STOP_MASK;
pusle_gen_hw.pulse_tmr->INTENSET = NRF_TIMER_INT_COMPARE1_MASK;
pulse_gen_hw.pulse_tmr->PRESCALER = NRF_TIMER_FREQ_16MHz;
pulse_gen_hw.pulse_tmr->MODE = NRF_TIMER_MODE_TIMER;
pulse_gen_hw.pulse_tmr->BITMODE = NRF_TIMER_BIT_WIDTH_32;
pulse_gen_hw.pulse_tmr->CC[0] = p_pulse_gen->pulse_idle * 16;
pulse_gen_hw.pulse_tmr->CC[1] = pulse_gen_hw.pulse_tmr->CC[0] + p_pulse_gen->pulse_width * 16;
pulse_gen_hw.pulse_tmr->SHORTS = pulse_gen_hw.pulse_cnt > 1 ? NRF_TIMER_SHORT_COMPARE1_CLEAR_MASK : NRF_TIMER_SHORT_COMPARE1_STOP_MASK;
pulse_gen_hw.pulse_tmr->INTENSET = NRF_TIMER_INT_COMPARE1_MASK;
sd_nvic_SetPriority(pusle_gen_hw.pulse_irq_n, _PRIO_APP_HIGH);
sd_nvic_EnableIRQ(pusle_gen_hw.pulse_irq_n);
sd_nvic_SetPriority(pulse_gen_hw.pulse_irq_n, _PRIO_APP_HIGH);
sd_nvic_EnableIRQ(pulse_gen_hw.pulse_irq_n);
pusle_gen_hw.pulse_tmr->TASKS_START = 1;
pulse_gen_hw.pulse_tmr->TASKS_START = 1;
return true;
}
void pel10_pulse_gen_demo(void)
{
pusle_gen_t pusle_gen = {
pulse_gen_t pulse_gen = {
.anode_pin = ANODE_PIN,
.cathode_pin = CATHODE_PIN,
.pulse_width = 10,
@@ -175,7 +175,7 @@ void pel10_pulse_gen_demo(void)
.pulse_cnt = 0xFFFFFFFF
};
if (pel10_pulse_gen(&pusle_gen) == false)
if (pel10_pulse_gen(&pulse_gen) == false)
{
// fail handling
}