aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFabio Utzig <utzig@utzig.org>2015-05-15 21:08:53 -0300
committerFabio Utzig <utzig@utzig.org>2015-05-15 21:08:53 -0300
commit343042d9d25a80a47d6ba10026d66987a7db3256 (patch)
tree36f32970fac2ac332049bdc1aa2ecdb992347109
parent69d70de9b746094768de835e14d2f3686d15e072 (diff)
downloadChibiOS-Contrib-343042d9d25a80a47d6ba10026d66987a7db3256.tar.gz
ChibiOS-Contrib-343042d9d25a80a47d6ba10026d66987a7db3256.tar.bz2
ChibiOS-Contrib-343042d9d25a80a47d6ba10026d66987a7db3256.zip
Add tx/rx pin configuration to SerialConfig
-rw-r--r--demos/NRF51/RT-WVSHARE_BLE400/main.c8
-rw-r--r--os/hal/ports/NRF51/NRF51822/serial_lld.c22
-rw-r--r--os/hal/ports/NRF51/NRF51822/serial_lld.h2
3 files changed, 23 insertions, 9 deletions
diff --git a/demos/NRF51/RT-WVSHARE_BLE400/main.c b/demos/NRF51/RT-WVSHARE_BLE400/main.c
index 2f1cb2a..df3408d 100644
--- a/demos/NRF51/RT-WVSHARE_BLE400/main.c
+++ b/demos/NRF51/RT-WVSHARE_BLE400/main.c
@@ -37,6 +37,12 @@ static THD_FUNCTION(Thread1, arg) {
*/
int main(void) {
+ SerialConfig serial_config = {
+ .speed = 38400,
+ .tx_pin = UART_TX,
+ .rx_pin = UART_RX,
+ };
+
/*
* System initializations.
* - HAL initialization, this also initializes the configured device drivers
@@ -50,7 +56,7 @@ int main(void) {
/*
* Activates UART0 using the driver default configuration.
*/
- sdStart(&SD1, NULL);
+ sdStart(&SD1, &serial_config);
/*
* Creates the blinker thread.
diff --git a/os/hal/ports/NRF51/NRF51822/serial_lld.c b/os/hal/ports/NRF51/NRF51822/serial_lld.c
index ea687c8..1783b92 100644
--- a/os/hal/ports/NRF51/NRF51822/serial_lld.c
+++ b/os/hal/ports/NRF51/NRF51822/serial_lld.c
@@ -33,6 +33,7 @@
/*===========================================================================*/
#define INVALID_BAUDRATE 0xFFFFFFFF
+#define INVALID_PIN 0xFF
/*===========================================================================*/
/* Driver exported variables. */
@@ -51,7 +52,9 @@ SerialDriver SD1;
* @brief Driver default configuration.
*/
static const SerialConfig default_config = {
- 38400
+ .speed = 38400,
+ .tx_pin = INVALID_PIN,
+ .rx_pin = INVALID_PIN,
};
/*===========================================================================*/
@@ -131,8 +134,7 @@ OSAL_IRQ_HANDLER(Vector48) {
osalSysUnlockFromISR();
}
- //TODO
- //NRF_UART0->EVENTS_ERROR = 0;
+ /* TODO: Error handling for EVENTS_ERROR */
OSAL_IRQ_EPILOGUE();
}
@@ -176,15 +178,19 @@ void sd_lld_start(SerialDriver *sdp, const SerialConfig *config) {
if (sdp == &SD1) {
uint32_t regval;
- /* FIXME: some board specific, some hardcodeds! */
+ /* TODO: Add support for CTS/RTS! */
/* Configure PINs */
NRF_UART0->PSELRTS = ~0;
NRF_UART0->PSELCTS = ~0;
-
- NRF_GPIO->PIN_CNF[9] = 1;
- NRF_UART0->PSELTXD = 9;
- NRF_UART0->PSELRXD = 11;
+ if (config->tx_pin != INVALID_PIN) {
+ palSetPadMode(IOPORT1, config->tx_pin, PAL_MODE_OUTPUT_PUSHPULL);
+ NRF_UART0->PSELTXD = config->tx_pin;
+ }
+ if (config->rx_pin != INVALID_PIN) {
+ palSetPadMode(IOPORT1, config->rx_pin, PAL_MODE_INPUT);
+ NRF_UART0->PSELRXD = config->rx_pin;
+ }
regval = regval_from_baudrate(config->speed);
osalDbgAssert(regval != INVALID_BAUDRATE, "invalid baudrate speed");
diff --git a/os/hal/ports/NRF51/NRF51822/serial_lld.h b/os/hal/ports/NRF51/NRF51822/serial_lld.h
index b7b1beb..62f1302 100644
--- a/os/hal/ports/NRF51/NRF51822/serial_lld.h
+++ b/os/hal/ports/NRF51/NRF51822/serial_lld.h
@@ -71,6 +71,8 @@ typedef struct {
*/
uint32_t speed;
/* End of the mandatory fields.*/
+ uint8_t tx_pin;
+ uint8_t rx_pin;
} SerialConfig;
/**