This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

How to transfer data through UART

Hi,

I used nrf51822- EK board.

GATT - s110 6.2.1 softdevice

I transfer data through UART for nrf51822-EK(PCA10001).

But this time. I used nrf51822 smart beacon kit(PCA20006).

PCA20006 is received data through UART.

But PCA20006 is not transfer data through UART.

PCA20006 UART

rx ------------------------- tx (OK)

tx ------------------------- rx (XX)<-- this problem...

I guess NRF_UART0->EVENTS_TXDRDY not set 1.

So. How to solve this problem ?

Parents
  • /* Copyright (c) 2009 Nordic Semiconductor. All Rights Reserved. * * The information contained herein is property of Nordic Semiconductor ASA. * Terms and conditions of usage are described in detail in NORDIC * SEMICONDUCTOR STANDARD SOFTWARE LICENSE AGREEMENT. * * Licensees are granted free, non-transferable use of the information. NO * WARRANTY of ANY KIND is provided. This heading must NOT be removed from * the file. * */

    #include <stdint.h>
    
    #include "nrf.h"
    #include "simple_uart.h"
    #include "nrf_delay.h"
    #include "nrf_gpio.h"
    
    uint8_t simple_uart_get(void)
    {
      while (NRF_UART0->EVENTS_RXDRDY != 1)
      {
        // Wait for RXD data to be received
      }
      
      NRF_UART0->EVENTS_RXDRDY = 0;
      return (uint8_t)NRF_UART0->RXD;
    }
    
    bool simple_uart_get_with_timeout(int32_t timeout_ms, uint8_t *rx_data)
    {
      bool ret = true;
      
      while (NRF_UART0->EVENTS_RXDRDY != 1)
      {
        if (timeout_ms-- >= 0)
        {
          // wait in 1ms chunk before checking for status
          nrf_delay_us(1000);
        }
        else
        {
          ret = false;
          break;
        }
      }  // Wait for RXD data to be received
    
      if (timeout_ms >= 0)
      {
        // clear the event and set rx_data with received byte
          NRF_UART0->EVENTS_RXDRDY = 0;
          *rx_data = (uint8_t)NRF_UART0->RXD;
      }
    
      return ret;
    }
    
    void simple_uart_put(uint8_t cr)
    {
      NRF_UART0->TXD = (uint8_t)cr;
    
      while (NRF_UART0->EVENTS_TXDRDY!=1)
      {
        // Wait for TXD data to be sent
      }
    
      NRF_UART0->EVENTS_TXDRDY=0;
    }
    
    void simple_uart_putstring(const uint8_t *str)
    {
      uint_fast8_t i = 0;
      uint8_t ch = str[i++];
      while (ch != '\0')
      {
        simple_uart_put(ch);
        ch = str[i++];
      }
    }
    
    void simple_uart_config(  uint8_t rts_pin_number,
                              uint8_t txd_pin_number,
                              uint8_t cts_pin_number,
                              uint8_t rxd_pin_number,
                              bool    hwfc)
    {
    /** @snippet [Configure UART RX and TX pin] */
      nrf_gpio_cfg_output(txd_pin_number);
    	nrf_gpio_pin_set(txd_pin_number);
      nrf_gpio_cfg_input(rxd_pin_number, NRF_GPIO_PIN_NOPULL);  
    
      NRF_UART0->PSELTXD = txd_pin_number;
      NRF_UART0->PSELRXD = rxd_pin_number;
    /** @snippet [Configure UART RX and TX pin] */
      if (hwfc)
      {
        nrf_gpio_cfg_output(rts_pin_number);
        nrf_gpio_cfg_input(cts_pin_number, NRF_GPIO_PIN_NOPULL);
        NRF_UART0->PSELCTS = cts_pin_number;
        NRF_UART0->PSELRTS = rts_pin_number;
        NRF_UART0->CONFIG  = (UART_CONFIG_HWFC_Enabled << UART_CONFIG_HWFC_Pos);
      }
    
      NRF_UART0->BAUDRATE         = (UART_BAUDRATE_BAUDRATE_Baud9600 << UART_BAUDRATE_BAUDRATE_Pos);
      NRF_UART0->ENABLE           = (UART_ENABLE_ENABLE_Enabled << UART_ENABLE_ENABLE_Pos);
      NRF_UART0->TASKS_STARTTX    = 1;
      NRF_UART0->TASKS_STARTRX    = 1;
      NRF_UART0->EVENTS_RXDRDY    = 0;
    }
    
Reply
  • /* Copyright (c) 2009 Nordic Semiconductor. All Rights Reserved. * * The information contained herein is property of Nordic Semiconductor ASA. * Terms and conditions of usage are described in detail in NORDIC * SEMICONDUCTOR STANDARD SOFTWARE LICENSE AGREEMENT. * * Licensees are granted free, non-transferable use of the information. NO * WARRANTY of ANY KIND is provided. This heading must NOT be removed from * the file. * */

    #include <stdint.h>
    
    #include "nrf.h"
    #include "simple_uart.h"
    #include "nrf_delay.h"
    #include "nrf_gpio.h"
    
    uint8_t simple_uart_get(void)
    {
      while (NRF_UART0->EVENTS_RXDRDY != 1)
      {
        // Wait for RXD data to be received
      }
      
      NRF_UART0->EVENTS_RXDRDY = 0;
      return (uint8_t)NRF_UART0->RXD;
    }
    
    bool simple_uart_get_with_timeout(int32_t timeout_ms, uint8_t *rx_data)
    {
      bool ret = true;
      
      while (NRF_UART0->EVENTS_RXDRDY != 1)
      {
        if (timeout_ms-- >= 0)
        {
          // wait in 1ms chunk before checking for status
          nrf_delay_us(1000);
        }
        else
        {
          ret = false;
          break;
        }
      }  // Wait for RXD data to be received
    
      if (timeout_ms >= 0)
      {
        // clear the event and set rx_data with received byte
          NRF_UART0->EVENTS_RXDRDY = 0;
          *rx_data = (uint8_t)NRF_UART0->RXD;
      }
    
      return ret;
    }
    
    void simple_uart_put(uint8_t cr)
    {
      NRF_UART0->TXD = (uint8_t)cr;
    
      while (NRF_UART0->EVENTS_TXDRDY!=1)
      {
        // Wait for TXD data to be sent
      }
    
      NRF_UART0->EVENTS_TXDRDY=0;
    }
    
    void simple_uart_putstring(const uint8_t *str)
    {
      uint_fast8_t i = 0;
      uint8_t ch = str[i++];
      while (ch != '\0')
      {
        simple_uart_put(ch);
        ch = str[i++];
      }
    }
    
    void simple_uart_config(  uint8_t rts_pin_number,
                              uint8_t txd_pin_number,
                              uint8_t cts_pin_number,
                              uint8_t rxd_pin_number,
                              bool    hwfc)
    {
    /** @snippet [Configure UART RX and TX pin] */
      nrf_gpio_cfg_output(txd_pin_number);
    	nrf_gpio_pin_set(txd_pin_number);
      nrf_gpio_cfg_input(rxd_pin_number, NRF_GPIO_PIN_NOPULL);  
    
      NRF_UART0->PSELTXD = txd_pin_number;
      NRF_UART0->PSELRXD = rxd_pin_number;
    /** @snippet [Configure UART RX and TX pin] */
      if (hwfc)
      {
        nrf_gpio_cfg_output(rts_pin_number);
        nrf_gpio_cfg_input(cts_pin_number, NRF_GPIO_PIN_NOPULL);
        NRF_UART0->PSELCTS = cts_pin_number;
        NRF_UART0->PSELRTS = rts_pin_number;
        NRF_UART0->CONFIG  = (UART_CONFIG_HWFC_Enabled << UART_CONFIG_HWFC_Pos);
      }
    
      NRF_UART0->BAUDRATE         = (UART_BAUDRATE_BAUDRATE_Baud9600 << UART_BAUDRATE_BAUDRATE_Pos);
      NRF_UART0->ENABLE           = (UART_ENABLE_ENABLE_Enabled << UART_ENABLE_ENABLE_Pos);
      NRF_UART0->TASKS_STARTTX    = 1;
      NRF_UART0->TASKS_STARTRX    = 1;
      NRF_UART0->EVENTS_RXDRDY    = 0;
    }
    
Children
No Data
Related