You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mynewt.apache.org by ju...@apache.org on 2017/05/10 13:00:55 UTC
[2/5] incubator-mynewt-core git commit: hw: mcu: pic32mz2048efg100:
Configure pins in hal_uart_config
hw: mcu: pic32mz2048efg100: Configure pins in hal_uart_config
Signed-off-by: Francois Berder <fb...@outlook.fr>
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/master
Commit: bdd92f700f438385f9499d6569f6bb8c581f5354
Parents: 2bdc9c1
Author: Francois Berder <fb...@outlook.fr>
Authored: Tue May 9 11:29:13 2017 +0200
Committer: Francois Berder <fb...@outlook.fr>
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) {