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:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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__
|
||||
|
||||
Reference in New Issue
Block a user