hw: mcu: pic32mz2048efg100: Configure pins in hal_uart_config Signed-off-by: Francois Berder <[email protected]>
Project: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/commit/bdd92f70 Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/bdd92f70 Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/bdd92f70 Branch: refs/heads/bluetooth5 Commit: bdd92f700f438385f9499d6569f6bb8c581f5354 Parents: 2bdc9c1 Author: Francois Berder <[email protected]> Authored: Tue May 9 11:29:13 2017 +0200 Committer: Francois Berder <[email protected]> Committed: Wed May 10 13:54:43 2017 +0200 ---------------------------------------------------------------------- .../pic32mz2048efg100/include/mcu/mips_hal.h | 6 +++ .../microchip/pic32mz2048efg100/src/hal_uart.c | 44 ++++++++++++++++++++ 2 files changed, 50 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/bdd92f70/hw/mcu/microchip/pic32mz2048efg100/include/mcu/mips_hal.h ---------------------------------------------------------------------- diff --git a/hw/mcu/microchip/pic32mz2048efg100/include/mcu/mips_hal.h b/hw/mcu/microchip/pic32mz2048efg100/include/mcu/mips_hal.h index f29bd2a..a031fb8 100644 --- a/hw/mcu/microchip/pic32mz2048efg100/include/mcu/mips_hal.h +++ b/hw/mcu/microchip/pic32mz2048efg100/include/mcu/mips_hal.h @@ -26,6 +26,12 @@ extern "C" { #endif +/* I/O pins for UART */ +struct mips_uart_cfg { + uint8_t tx; + uint8_t rx; +}; + /* Helper functions to enable/disable interrupts. */ #define __HAL_DISABLE_INTERRUPTS(__os_sr) do {__os_sr = __builtin_get_isr_state(); \ __builtin_disable_interrupts();} while(0) http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/bdd92f70/hw/mcu/microchip/pic32mz2048efg100/src/hal_uart.c ---------------------------------------------------------------------- diff --git a/hw/mcu/microchip/pic32mz2048efg100/src/hal_uart.c b/hw/mcu/microchip/pic32mz2048efg100/src/hal_uart.c index aa33c2c..2c7c434 100644 --- a/hw/mcu/microchip/pic32mz2048efg100/src/hal_uart.c +++ b/hw/mcu/microchip/pic32mz2048efg100/src/hal_uart.c @@ -21,6 +21,7 @@ #include "bsp/bsp.h" #include "syscfg/syscfg.h" #include "mcu/mips_hal.h" +#include "mcu/pps.h" #include <assert.h> #include <stdlib.h> @@ -33,6 +34,7 @@ struct hal_uart { hal_uart_tx_char u_tx_func; hal_uart_tx_done u_tx_done; void *u_func_arg; + const struct mips_uart_cfg *u_pins; }; static struct hal_uart uarts[UART_CNT]; @@ -376,6 +378,12 @@ hal_uart_blocking_tx(int port, uint8_t data) int hal_uart_init(int port, void *arg) { + if (port >= UART_CNT) { + return -1; + } + + uarts[port].u_pins = arg; + return 0; } @@ -417,6 +425,42 @@ hal_uart_config(int port, int32_t baudrate, uint8_t databits, uint8_t stopbits, return -1; } + /* Configure TX/RX pins */ + if (uarts[port].u_pins) { + int ret = 0; + switch(port) { + case 0: + ret += pps_configure_output(uarts[port].u_pins->tx, U1TX_OUT_FUNC); + ret += pps_configure_input(uarts[port].u_pins->rx, U1RX_IN_FUNC); + break; + case 1: + ret += pps_configure_output(uarts[port].u_pins->tx, U2TX_OUT_FUNC); + ret += pps_configure_input(uarts[port].u_pins->rx, U2RX_IN_FUNC); + break; + case 2: + ret += pps_configure_output(uarts[port].u_pins->tx, U3TX_OUT_FUNC); + ret += pps_configure_input(uarts[port].u_pins->rx, U3RX_IN_FUNC); + break; + case 3: + ret += pps_configure_output(uarts[port].u_pins->tx, U4TX_OUT_FUNC); + ret += pps_configure_input(uarts[port].u_pins->rx, U4RX_IN_FUNC); + break; + case 4: + ret += pps_configure_output(uarts[port].u_pins->tx, U5TX_OUT_FUNC); + ret += pps_configure_input(uarts[port].u_pins->rx, U5RX_IN_FUNC); + break; + case 5: + ret += pps_configure_output(uarts[port].u_pins->tx, U6TX_OUT_FUNC); + ret += pps_configure_input(uarts[port].u_pins->rx, U6RX_IN_FUNC); + break; + default: + return -1; + } + if (ret) { + return -1; + } + } + uint16_t divisor = peripheral_clk / (4 * baudrate) - 1; switch (port) {
