aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStephane D'Alu <sdalu@sdalu.com>2016-02-02 21:58:31 +0100
committerStephane D'Alu <sdalu@sdalu.com>2016-02-02 21:58:31 +0100
commit3c7efdb21f8c9196aa6d2ff5c21e111ad6e03907 (patch)
tree9dbaa486f678edf75599213927b942a423a700d8
parent137836fb19623735351e411f30d7d6bd29e28012 (diff)
downloadChibiOS-Contrib-3c7efdb21f8c9196aa6d2ff5c21e111ad6e03907.tar.gz
ChibiOS-Contrib-3c7efdb21f8c9196aa6d2ff5c21e111ad6e03907.tar.bz2
ChibiOS-Contrib-3c7efdb21f8c9196aa6d2ff5c21e111ad6e03907.zip
cleaned up PINs configuration and selection
-rw-r--r--os/hal/ports/NRF51/NRF51822/serial_lld.c41
1 files changed, 25 insertions, 16 deletions
diff --git a/os/hal/ports/NRF51/NRF51822/serial_lld.c b/os/hal/ports/NRF51/NRF51822/serial_lld.c
index bddc4c3..1451857 100644
--- a/os/hal/ports/NRF51/NRF51822/serial_lld.c
+++ b/os/hal/ports/NRF51/NRF51822/serial_lld.c
@@ -94,47 +94,56 @@ static void configure_uart(const SerialConfig *config)
default: osalDbgAssert(0, "invalid baudrate"); break;
};
- /* Configure PINs */
+ /* Configure PINs mode */
if (config->tx_pad != NRF51_SERIAL_PAD_DISCONNECTED) {
palSetPadMode(IOPORT1, config->tx_pad, PAL_MODE_OUTPUT_PUSHPULL);
- NRF_UART0->PSELTXD = config->tx_pad;
}
if (config->rx_pad != NRF51_SERIAL_PAD_DISCONNECTED) {
palSetPadMode(IOPORT1, config->rx_pad, PAL_MODE_INPUT);
- NRF_UART0->PSELRXD = config->rx_pad;
}
#if (NRF51_SERIAL_USE_HWFLOWCTRL == TRUE)
if (config->rts_pad != NRF51_SERIAL_PAD_DISCONNECTED) {
palSetPadMode(IOPORT1, config->rts_pad, PAL_MODE_OUTPUT_PUSHPULL);
- NRF_UART0->PSELRTS = config->rts_pad;
}
if (config->cts_pad != NRF51_SERIAL_PAD_DISCONNECTED) {
palSetPadMode(IOPORT1, config->cts_pad, PAL_MODE_INPUT);
- NRF_UART0->PSELCTS = config->cts_pad;
}
#endif
+
+ /* Select PINs used by UART */
+ NRF_UART0->PSELTXD = config->tx_pad;
+ NRF_UART0->PSELRXD = config->rx_pad;
+#if (NRF51_SERIAL_USE_HWFLOWCTRL == TRUE)
+ NRF_UART0->PSELRTS = config->rts_pad;
+ NRF_UART0->PSELCTS = config->cts_pad;
+#else
+ NRF_UART0->PSELRTS = NRF51_SERIAL_PAD_DISCONNECTED;
+ NRF_UART0->PSELCTS = NRF51_SERIAL_PAD_DISCONNECTED;
+#endif
+ /* Set baud rate */
NRF_UART0->BAUDRATE = speed;
+
+ /* Set parity */
NRF_UART0->CONFIG = (UART_CONFIG_PARITY_Excluded << UART_CONFIG_PARITY_Pos);
- NRF_UART0->ENABLE = UART_ENABLE_ENABLE_Enabled;
- NRF_UART0->EVENTS_RXDRDY = 0;
- NRF_UART0->EVENTS_TXDRDY = 0;
+ /* Set flow control */
#if (NRF51_SERIAL_USE_HWFLOWCTRL == TRUE)
if ((config->rts_pad < TOTAL_GPIO_PADS) ||
(config->cts_pad < TOTAL_GPIO_PADS)) {
- NRF_UART0->CONFIG |= UART_CONFIG_HWFC_Enabled << UART_CONFIG_HWFC_Pos;
+ NRF_UART0->CONFIG |= UART_CONFIG_HWFC_Enabled << UART_CONFIG_HWFC_Pos;
} else {
- NRF_UART0->CONFIG &= ~(UART_CONFIG_HWFC_Enabled << UART_CONFIG_HWFC_Pos);
+ NRF_UART0->CONFIG &= ~(UART_CONFIG_HWFC_Enabled << UART_CONFIG_HWFC_Pos);
}
- NRF_UART0->PSELRTS = config->rts_pad;
- NRF_UART0->PSELCTS = config->cts_pad;
#else
- NRF_UART0->CONFIG &= ~(UART_CONFIG_HWFC_Enabled << UART_CONFIG_HWFC_Pos);
-
- NRF_UART0->PSELRTS = NRF51_SERIAL_PAD_DISCONNECTED;
- NRF_UART0->PSELCTS = NRF51_SERIAL_PAD_DISCONNECTED;
+ NRF_UART0->CONFIG &= ~(UART_CONFIG_HWFC_Enabled << UART_CONFIG_HWFC_Pos);
#endif
+
+ /* Enable UART and clear events */
+ NRF_UART0->ENABLE = UART_ENABLE_ENABLE_Enabled;
+ NRF_UART0->EVENTS_RXDRDY = 0;
+ NRF_UART0->EVENTS_TXDRDY = 0;
+
if (config->rx_pad != NRF51_SERIAL_PAD_DISCONNECTED) {
while (NRF_UART0->EVENTS_RXDRDY != 0) {