BV HiZ: add RS-485 pins test
This commit is contained in:
parent
6afccfdb82
commit
6babde53ee
|
@ -431,7 +431,7 @@ static bool busvoodoo_hiz_test_self(void)
|
|||
gpio_clear(GPIO(BUSVOODOO_RS485_RE_PORT), GPIO(BUSVOODOO_RS485_RE_PIN)); // enable receiver
|
||||
gpio_set_mode(GPIO(BUSVOODOO_RS485_TX_PORT), GPIO_MODE_OUTPUT_2_MHZ, GPIO_CNF_OUTPUT_PUSHPULL, GPIO(BUSVOODOO_RS485_TX_PIN)); // set TX as output
|
||||
gpio_set_mode(GPIO(BUSVOODOO_RS485_RX_PORT), GPIO_MODE_INPUT, GPIO_CNF_INPUT_FLOAT, GPIO(BUSVOODOO_RS485_RX_PIN)); // set RX as input with pull up/down
|
||||
// test high signal
|
||||
// test low signal
|
||||
gpio_set(GPIO(BUSVOODOO_RS485_RX_PORT), GPIO(BUSVOODOO_RS485_RX_PIN)); // pull RX up
|
||||
gpio_clear(GPIO(BUSVOODOO_RS485_TX_PORT), GPIO(BUSVOODOO_RS485_TX_PIN)); // set TX low
|
||||
sleep_us(100); // let voltage settle
|
||||
|
@ -443,7 +443,7 @@ static bool busvoodoo_hiz_test_self(void)
|
|||
goto error;
|
||||
#endif
|
||||
}
|
||||
// test low signal
|
||||
// test high signal
|
||||
gpio_clear(GPIO(BUSVOODOO_RS485_RX_PORT), GPIO(BUSVOODOO_RS485_RX_PIN)); // pull RX down
|
||||
gpio_set(GPIO(BUSVOODOO_RS485_TX_PORT), GPIO(BUSVOODOO_RS485_TX_PIN)); // set TX high
|
||||
sleep_us(100); // let voltage settle
|
||||
|
@ -607,7 +607,7 @@ static bool busvoodoo_hiz_test_pins(void)
|
|||
dac_disable(BUSVOODOO_HVCTL_CHANNEL); // disable HV control
|
||||
sleep_ms(100); // wait for voltage to settle (and debounce)
|
||||
if (busvoodoo_vreg_get(BUSVOODOO_LV_CHANNEL)>0.2) {
|
||||
printf(lv_high);
|
||||
printf("HV output is high while voltage regulator should be switched off\n");
|
||||
#if DEBUG
|
||||
while (true);
|
||||
#else
|
||||
|
@ -615,6 +615,58 @@ static bool busvoodoo_hiz_test_pins(void)
|
|||
#endif
|
||||
}
|
||||
|
||||
// test RS-485 port pin A
|
||||
gpio_set(GPIO(BUSVOODOO_RS485_DE_PORT), GPIO(BUSVOODOO_RS485_DE_PIN)); // enable transmitter
|
||||
gpio_set_mode(GPIO(BUSVOODOO_RS485_TX_PORT), GPIO_MODE_OUTPUT_2_MHZ, GPIO_CNF_OUTPUT_PUSHPULL, GPIO(BUSVOODOO_RS485_TX_PIN)); // set TX as output
|
||||
gpio_set(GPIO(BUSVOODOO_RS485_TX_PORT), GPIO(BUSVOODOO_RS485_TX_PIN)); // set TX high -> A will be high
|
||||
printf("%sRS/CAN pin 3\n", lv_to);
|
||||
led_red(); // notify user to perform action
|
||||
do {
|
||||
sleep_ms(100); // wait for user to make connection
|
||||
} while (busvoodoo_vreg_get(BUSVOODOO_LV_CHANNEL)<2.0 && !user_input_available); // wait until pin is connected
|
||||
led_blue(); // notify user test is running
|
||||
if (user_input_available) { // user interruption
|
||||
goto error;
|
||||
}
|
||||
gpio_clear(GPIO(BUSVOODOO_RS485_TX_PORT), GPIO(BUSVOODOO_RS485_TX_PIN)); // set TX low
|
||||
sleep_ms(100); // wait for voltage to settle (and debounce)
|
||||
if (busvoodoo_vreg_get(BUSVOODOO_LV_CHANNEL)>1.0) {
|
||||
printf("RS-485 output A is high while it should be low\n");
|
||||
#if DEBUG
|
||||
while (true);
|
||||
#else
|
||||
goto error;
|
||||
#endif
|
||||
}
|
||||
gpio_clear(GPIO(BUSVOODOO_RS485_DE_PORT), GPIO(BUSVOODOO_RS485_DE_PIN)); // set low to disable transmitter
|
||||
gpio_set_mode(GPIO(BUSVOODOO_RS485_TX_PORT), GPIO_MODE_INPUT, GPIO_CNF_INPUT_FLOAT, GPIO(BUSVOODOO_RS485_TX_PIN)); // set pin to floating
|
||||
|
||||
// test RS-485 port pin B
|
||||
gpio_set(GPIO(BUSVOODOO_RS485_DE_PORT), GPIO(BUSVOODOO_RS485_DE_PIN)); // enable transmitter
|
||||
gpio_set_mode(GPIO(BUSVOODOO_RS485_TX_PORT), GPIO_MODE_OUTPUT_2_MHZ, GPIO_CNF_OUTPUT_PUSHPULL, GPIO(BUSVOODOO_RS485_TX_PIN)); // set TX as output
|
||||
gpio_clear(GPIO(BUSVOODOO_RS485_TX_PORT), GPIO(BUSVOODOO_RS485_TX_PIN)); // set TX low -> B will be high
|
||||
printf("%sRS/CAN pin 4\n", lv_to);
|
||||
led_red(); // notify user to perform action
|
||||
do {
|
||||
sleep_ms(100); // wait for user to make connection
|
||||
} while (busvoodoo_vreg_get(BUSVOODOO_LV_CHANNEL)<2.0 && !user_input_available); // wait until pin is connected
|
||||
led_blue(); // notify user test is running
|
||||
if (user_input_available) { // user interruption
|
||||
goto error;
|
||||
}
|
||||
gpio_set(GPIO(BUSVOODOO_RS485_TX_PORT), GPIO(BUSVOODOO_RS485_TX_PIN)); // set TX high
|
||||
sleep_ms(100); // wait for voltage to settle (and debounce)
|
||||
if (busvoodoo_vreg_get(BUSVOODOO_LV_CHANNEL)>1.0) {
|
||||
printf("RS-485 output B is high while it should be low\n");
|
||||
#if DEBUG
|
||||
while (true);
|
||||
#else
|
||||
goto error;
|
||||
#endif
|
||||
}
|
||||
gpio_clear(GPIO(BUSVOODOO_RS485_DE_PORT), GPIO(BUSVOODOO_RS485_DE_PIN)); // set low to disable transmitter
|
||||
gpio_set_mode(GPIO(BUSVOODOO_RS485_TX_PORT), GPIO_MODE_INPUT, GPIO_CNF_INPUT_FLOAT, GPIO(BUSVOODOO_RS485_TX_PIN)); // set pin to floating
|
||||
|
||||
// test RS-232 port (with itself)
|
||||
rcc_periph_clock_enable(RCC_GPIO(BUSVOODOO_RS232_EN_PORT)); // enable clock for GPIO domain
|
||||
gpio_clear(GPIO(BUSVOODOO_RS232_EN_PORT), GPIO(BUSVOODOO_RS232_EN_PIN)); // set low to enable receiver
|
||||
|
|
Loading…
Reference in New Issue