diff --git a/arch/arm/src/nrf52/chip.h b/arch/arm/src/nrf52/chip.h index c790efa77a0..ab62e8c8ef4 100644 --- a/arch/arm/src/nrf52/chip.h +++ b/arch/arm/src/nrf52/chip.h @@ -33,8 +33,8 @@ * ************************************************************************************/ -#ifndef __ARCH_ARM_SRC_NRF53_CHIP_H -#define __ARCH_ARM_SRC_NRF53_CHIP_H +#ifndef __ARCH_ARM_SRC_NRF52_CHIP_H +#define __ARCH_ARM_SRC_NRF52_CHIP_H /************************************************************************************ * Included Files @@ -74,4 +74,4 @@ * Public Functions ************************************************************************************/ -#endif /* __ARCH_ARM_SRC_NRF53_CHIP_H */ +#endif /* __ARCH_ARM_SRC_NRF52_CHIP_H */ diff --git a/arch/arm/src/nrf52/nrf52_gpio.c b/arch/arm/src/nrf52/nrf52_gpio.c index 22f0d2a8d27..edda8e4438b 100644 --- a/arch/arm/src/nrf52/nrf52_gpio.c +++ b/arch/arm/src/nrf52/nrf52_gpio.c @@ -194,4 +194,5 @@ void nrf52_gpio_write(nrf52_pinset_t pinset, bool value) bool nrf52_gpio_read(nrf52_pinset_t pinset) { +#warning Missing implementation! } diff --git a/arch/arm/src/nrf52/nrf52_lowputc.c b/arch/arm/src/nrf52/nrf52_lowputc.c index a6f8f3de068..d4fff9296d2 100644 --- a/arch/arm/src/nrf52/nrf52_lowputc.c +++ b/arch/arm/src/nrf52/nrf52_lowputc.c @@ -176,8 +176,6 @@ void nrf52_usart_configure(uintptr_t base, const struct uart_config_s *config) /* Enable */ putreg32(NRF52_UART_ENABLE_ENABLE, base + NRF52_UART_ENABLE_OFFSET); - putreg32(1, base + NRF52_UART_TASKS_STARTTX_OFFSET); - putreg32(1, base + NRF52_UART_TASKS_STARTRX_OFFSET); } #endif @@ -216,10 +214,13 @@ void nrf52_usart_disable(uintptr_t base) void up_lowputc(char ch) { #ifdef HAVE_UART_CONSOLE + putreg32(1, CONSOLE_BASE + NRF52_UART_TASKS_STARTTX_OFFSET); putreg32(0, CONSOLE_BASE + NRF52_UART_EVENTS_TXDRDY_OFFSET); putreg32(ch, CONSOLE_BASE + NRF52_UART_TXD_OFFSET); while (getreg32(CONSOLE_BASE + NRF52_UART_EVENTS_TXDRDY_OFFSET) == 0 ) { } + + putreg32(1, CONSOLE_BASE + NRF52_UART_TASKS_STOPTX_OFFSET); #endif } diff --git a/arch/arm/src/nrf52/nrf52_serial.c b/arch/arm/src/nrf52/nrf52_serial.c index 10f4f90ed88..653dcb32cbd 100644 --- a/arch/arm/src/nrf52/nrf52_serial.c +++ b/arch/arm/src/nrf52/nrf52_serial.c @@ -212,11 +212,17 @@ static uart_dev_t g_uart0port = static int nrf52_setup(struct uart_dev_s *dev) { #ifndef CONFIG_SUPPRESS_UART_CONFIG - struct nrf52_dev_s *priv = (struct nrf52_dev_s *)dev->priv; + /* struct nrf52_dev_s *priv = (struct nrf52_dev_s *)dev->priv; */ /* Configure the UART as an RS-232 UART */ - nrf52_usart_configure(priv->uartbase, &priv->config); + /* REVISIT: If nrf52_usart_configure() called 2nd time uart stops working. + * Rx interrupt keeps firing. + * configuring is done on __start + */ + + /* nrf52_usart_configure(priv->uartbase, &priv->config); */ + #endif return OK; @@ -290,6 +296,7 @@ static void nrf52_detach(struct uart_dev_s *dev) /* Disable interrupts */ + putreg32(NRF52_UART_INTENSET_RXDRDY, priv->uartbase + NRF52_UART_INTENCLR_OFFSET); up_disable_irq(priv->irq); /* Detach from the interrupt(s) */ @@ -313,17 +320,25 @@ static int nrf52_interrupt(int irq, void *context, FAR void *arg) { struct uart_dev_s *dev = (struct uart_dev_s *)arg; struct nrf52_dev_s *priv; + uint32_t regval; DEBUGASSERT(dev != NULL && dev->priv != NULL); priv = (struct nrf52_dev_s *)dev->priv; - /* Clear RX event */ - putreg32(0 , priv->uartbase + NRF52_UART_EVENTS_RXDRDY_OFFSET); - priv->rx_available = true; + /* Check RX event */ - uart_recvchars(dev); + regval = getreg32(priv->uartbase + NRF52_UART_EVENTS_RXDRDY_OFFSET); - //uart_xmitchars(dev); + if (regval != 0) + { + putreg32(0, priv->uartbase + NRF52_UART_EVENTS_RXDRDY_OFFSET); + priv->rx_available = true; + uart_recvchars(dev); + } + + /* Clear errors */ + + putreg32(0, priv->uartbase + NRF52_UART_ERRORSRC_OFFSET); return OK; } @@ -394,6 +409,7 @@ static void nrf52_rxint(struct uart_dev_s *dev, bool enable) putreg32(NRF52_UART_INTENSET_RXDRDY, priv->uartbase + NRF52_UART_INTENSET_OFFSET); + putreg32(1, priv->uartbase + NRF52_UART_TASKS_STARTRX_OFFSET); #endif } @@ -401,6 +417,7 @@ static void nrf52_rxint(struct uart_dev_s *dev, bool enable) { putreg32(NRF52_UART_INTENSET_RXDRDY, priv->uartbase + NRF52_UART_INTENCLR_OFFSET); + putreg32(1, priv->uartbase + NRF52_UART_TASKS_STOPRX_OFFSET); } } @@ -434,10 +451,15 @@ static void nrf52_send(struct uart_dev_s *dev, int ch) struct nrf52_dev_s *priv = (struct nrf52_dev_s *)dev->priv; putreg32(0, priv->uartbase + NRF52_UART_EVENTS_TXDRDY_OFFSET); + putreg32(1, priv->uartbase + NRF52_UART_TASKS_STARTTX_OFFSET); + putreg32(ch, priv->uartbase + NRF52_UART_TXD_OFFSET); while (getreg32(priv->uartbase + NRF52_UART_EVENTS_TXDRDY_OFFSET) == 0 ) { } + + putreg32(1, priv->uartbase + NRF52_UART_TASKS_STOPTX_OFFSET); + } /****************************************************************************