fix: 1.Measure OUT=L、Measure OUT=H是不同relay, Anode, Cathode 的訊號

2.更改dev mode指令:
0x60: 打pulse+設定阻值+ADC讀ouput_r1/r2/vo/vc/ve
0x61: 把ouput_r1/r2/vo/vc/ve 傳給 central
0xF0: pel io init
0xF1: start/stop testing output pin task
This commit is contained in:
Roy_01
2024-05-24 13:37:31 +08:00
parent 17f3120ed9
commit aaaa331bcb
2 changed files with 94 additions and 51 deletions
+93 -50
View File
@@ -61,7 +61,7 @@ static float _load_set_by_ohms(float ohms)
return ohms;
}
static void _sample(void)
static void _sample_measure_out_is_low(void)
{
nrf_gpio_pin_set(ANODE_PIN);
nrf_gpio_pin_clear(CATHODE_PIN);
@@ -83,6 +83,28 @@ static void _sample(void)
nrf_gpio_pin_toggle(SAMPLE_V_PIN);
}
static void _sample_measure_out_is_high(void)
{
nrf_gpio_pin_clear(ANODE_PIN);
nrf_gpio_pin_set(CATHODE_PIN);
nrf_gpio_pin_clear(SAMPLE_R_PIN);
nrf_gpio_pin_clear(SAMPLE_V_PIN);
nrf_delay_us(10);
nrf_gpio_pin_toggle(ANODE_PIN);
nrf_gpio_pin_toggle(CATHODE_PIN);
nrf_delay_us(5);
nrf_gpio_pin_toggle(SAMPLE_R_PIN);
nrf_gpio_pin_toggle(SAMPLE_V_PIN);
nrf_delay_us(5);
nrf_gpio_pin_toggle(CATHODE_PIN);
nrf_gpio_pin_toggle(ANODE_PIN);
nrf_gpio_pin_toggle(SAMPLE_R_PIN);
nrf_gpio_pin_toggle(SAMPLE_V_PIN);
}
void pel_relays_set(uint32_t measure_out)
{
if (measure_out)
@@ -99,7 +121,7 @@ void pel_relays_set(uint32_t measure_out)
vTaskDelay(pdMS_TO_TICKS(30));
}
pel_output_t pel_smaple_and_convt_all(uint32_t load_mask)
pel_output_t pel_smaple_and_convt_all(uint32_t measure_out, uint32_t load_mask)
{
uint32_t ch_list[] = {
OUTPUT_R1_CHANNEL,
@@ -112,7 +134,14 @@ pel_output_t pel_smaple_and_convt_all(uint32_t load_mask)
/* config E-load */
_load_set(load_mask);
/* send a pulse to sample and then read ADC channels */
adc_read_mutiple_channels_ex(ch_list, results, COUNTOF(ch_list), _sample);
if (measure_out)
{
adc_read_mutiple_channels_ex(ch_list, results, COUNTOF(ch_list), _sample_measure_out_is_high);
}
else
{
adc_read_mutiple_channels_ex(ch_list, results, COUNTOF(ch_list), _sample_measure_out_is_low);
}
/* copy results */
output_data.output_r1 = results[0];
output_data.output_r2 = results[1];
@@ -227,66 +256,80 @@ static void dev_mode(uint8_t *ins, uint16_t size)
return;
}
struct
{
uint8_t status;
uint16_t mask;
} __PACKED *p_param = (void *)p_ins->param;
switch (p_ins->opcode)
{
case 0x00: {
case 0x60: {
struct
{
uint8_t status;
uint16_t mask;
} __PACKED *p_param = (void *)p_ins->param;
pel_relays_set(p_param->status);
dev_mode_pel_output = pel_smaple_and_convt_all(p_param->mask);
dev_mode_pel_output = pel_smaple_and_convt_all(p_param->status, __REVSH(p_param->mask));
break;
}
case 0x01: {
extern ret_code_t le_data_upadate(uint8_t * p_value, uint16_t len);
le_data_upadate((void *)&dev_mode_pel_output.output_r1, sizeof(dev_mode_pel_output.output_r1));
break;
}
case 0x02: {
extern ret_code_t le_data_upadate(uint8_t * p_value, uint16_t len);
le_data_upadate((void *)&dev_mode_pel_output.output_r2, sizeof(dev_mode_pel_output.output_r2));
break;
}
case 0x03: {
extern ret_code_t le_data_upadate(uint8_t * p_value, uint16_t len);
le_data_upadate((void *)&dev_mode_pel_output.output_vo, sizeof(dev_mode_pel_output.output_vo));
break;
}
case 0x04: {
extern ret_code_t le_data_upadate(uint8_t * p_value, uint16_t len);
le_data_upadate((void *)&dev_mode_pel_output.output_vc, sizeof(dev_mode_pel_output.output_vc));
break;
}
case 0x05: {
extern ret_code_t le_data_upadate(uint8_t * p_value, uint16_t len);
le_data_upadate((void *)&dev_mode_pel_output.output_ve, sizeof(dev_mode_pel_output.output_ve));
break;
}
case 0x06: {
if (test_gpio_task_Handle == NULL)
case 0x61: {
struct
{
NRF_LOG_INFO("[test] start test_gpio_task task");
xTaskCreate(test_gpio_task, "test_gpio_task", 1024, NULL, 4, &test_gpio_task_Handle);
uint8_t channel;
} __PACKED *p_param = (void *)p_ins->param;
if (p_param->channel == 0x01) {
extern ret_code_t le_data_upadate(uint8_t * p_value, uint16_t len);
le_data_upadate((void *)&dev_mode_pel_output.output_r1, sizeof(dev_mode_pel_output.output_r1));
}
else if (p_param->channel == 0x02) {
extern ret_code_t le_data_upadate(uint8_t * p_value, uint16_t len);
le_data_upadate((void *)&dev_mode_pel_output.output_r2, sizeof(dev_mode_pel_output.output_r2));
}
else if (p_param->channel == 0x03) {
extern ret_code_t le_data_upadate(uint8_t * p_value, uint16_t len);
le_data_upadate((void *)&dev_mode_pel_output.output_vo, sizeof(dev_mode_pel_output.output_vo));
}
else if (p_param->channel == 0x04) {
extern ret_code_t le_data_upadate(uint8_t * p_value, uint16_t len);
le_data_upadate((void *)&dev_mode_pel_output.output_vc, sizeof(dev_mode_pel_output.output_vc));
}
else if (p_param->channel == 0x05) {
extern ret_code_t le_data_upadate(uint8_t * p_value, uint16_t len);
le_data_upadate((void *)&dev_mode_pel_output.output_ve, sizeof(dev_mode_pel_output.output_ve));
}
break;
}
case 0x07: {
if (test_gpio_task_Handle != NULL)
{
NRF_LOG_INFO("[test] delete test_gpio_task task");
vTaskDelete(test_gpio_task_Handle);
test_gpio_task_Handle = NULL;
}
break;
}
case 0x08: {
case 0xF0: {
pel10_io_init();
break;
}
case 0xF1: {
struct
{
uint8_t status;
} __PACKED *p_param = (void *)p_ins->param;
if (p_param->status == 0x01)
{
if (test_gpio_task_Handle == NULL)
{
NRF_LOG_INFO("[test] start test_gpio_task task");
xTaskCreate(test_gpio_task, "test_gpio_task", 1024, NULL, 4, &test_gpio_task_Handle);
}
}
else if (p_param->status == 0x00)
{
if (test_gpio_task_Handle != NULL)
{
NRF_LOG_INFO("[test] delete test_gpio_task task");
vTaskDelete(test_gpio_task_Handle);
test_gpio_task_Handle = NULL;
}
}
break;
}
default: {
break;
}
+1 -1
View File
@@ -29,7 +29,7 @@ typedef struct
} pel_output_t;
void pel_relays_set(uint32_t measure_out);
pel_output_t pel_smaple_and_convt_all(uint32_t load_mask);
pel_output_t pel_smaple_and_convt_all(uint32_t measure_out, uint32_t load_mask);
const elite_instance_t *pel_init(void);
#endif // !__PEL_H__