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

UART RX executed when connected via BT

Hi,

I have the following code with SD110 7.1.0:

static void uart_init(void) // device inter-communication
{

// Configure RX and TX pins.
nrf_gpio_pin_set(0);
nrf_gpio_cfg_output(0);
nrf_gpio_cfg_input(0, NRF_GPIO_PIN_PULLUP);


NRF_UART0->PSELTXD = 0;
NRF_UART0->PSELRXD = 1;

// Configure baud rate and parity.
NRF_UART0->BAUDRATE = (115200 << UART_BAUDRATE_BAUDRATE_Pos);

NRF_UART0->CONFIG = (UART_CONFIG_PARITY_Excluded << UART_CONFIG_PARITY_Pos);

NRF_UART0->ENABLE        = (UART_ENABLE_ENABLE_Enabled << UART_ENABLE_ENABLE_Pos);
NRF_UART0->EVENTS_RXDRDY = 0;
NRF_UART0->EVENTS_TXDRDY = 0;

NRF_UART0->CONFIG       &= ~(UART_CONFIG_HWFC_Enabled << UART_CONFIG_HWFC_Pos);

#define  UART_PIN_DISCONNECTED 0xFFFFFFFF /**< Value indicating that no pin is connected to this UART register. */

NRF_UART0->PSELRTS       = UART_PIN_DISCONNECTED;
NRF_UART0->PSELCTS       = UART_PIN_DISCONNECTED;

NRF_UART0->TASKS_STARTTX = 1;
NRF_UART0->TASKS_STARTRX = 1;

// Enable UART interrupt
NRF_UART0->INTENCLR = 0xffffffffUL;
NRF_UART0->INTENSET = (UART_INTENSET_RXDRDY_Set << UART_INTENSET_RXDRDY_Pos) |
                      (UART_INTENSET_TXDRDY_Set << UART_INTENSET_TXDRDY_Pos) |
                      (UART_INTENSET_ERROR_Set << UART_INTENSET_ERROR_Pos);

NVIC_ClearPendingIRQ(UART0_IRQn);
NVIC_SetPriority(UART0_IRQn, APP_IRQ_PRIORITY_LOW);
NVIC_EnableIRQ(UART0_IRQn);
}

/**@brief Function for handling the UART Interrupt.
 *
 * @details UART interrupt handler to process TX Ready when TXD is available, RX Ready when a byte
 *          is received, or in case of error when receiving a byte.
 */
void UART0_IRQHandler(void)
{
// Handle reception
if ((NRF_UART0->EVENTS_RXDRDY != 0) && (NRF_UART0->INTENSET & UART_INTENSET_RXDRDY_Msk))
{
    // This event executed when connected via BT (from phone)
    // Clear UART RX event flag
    NRF_UART0->EVENTS_RXDRDY  = 0;
    uart_rx_buff[in_wr_ptr++] = (uint8_t)NRF_UART0->RXD;
	if(in_wr_ptr >= sizeof(uart_rx_buff))
	{
		in_wr_ptr = 0;
	}
}

// Handle transmission.
if ((NRF_UART0->EVENTS_TXDRDY != 0) && (NRF_UART0->INTENSET & UART_INTENSET_TXDRDY_Msk))
{
    // Clear UART TX event flag.
    NRF_UART0->EVENTS_TXDRDY = 0;
    //on_uart_event(ON_TX_READY);
}

// Handle errors.
if ((NRF_UART0->EVENTS_ERROR != 0) && (NRF_UART0->INTENSET & UART_INTENSET_ERROR_Msk))
{
    uint32_t       error_source;

    // Clear UART ERROR event flag.
    NRF_UART0->EVENTS_ERROR = 0;

    // Clear error source.
    error_source        = NRF_UART0->ERRORSRC;
    NRF_UART0->ERRORSRC = error_source;
}
}

Could anybody explain me why receive RX event when I connect via BT? I don't use UART through BT just I want to use UART module of this chip via pin1-2 (RX-TX only)

Thanks!

  • Hi

    Hmm, that sounds a bit strange. You should call uart_init function before you call the softdevice. Are you doing that?

    One question: Why do you not use app_uart library directly?

    Update 30.1.2014 Perhaps it has something to do with the gpio configuration of the RXD and TXD pins. I would suggest to configure this as follows:

    // Configure RX and TX pins.
    nrf_gpio_cfg_output(0);
    nrf_gpio_pin_set(0);
    nrf_gpio_cfg_input(1, NRF_GPIO_PIN_NOPULL);
    
    NRF_UART0->PSELTXD = 0;
    NRF_UART0->PSELRXD = 1;
    

    It seems that in your code you have configured pin 0 both as output and input.

    I copy also the NOPULL configuration from the app_uart library, as the peer UART device should drive the signal for the RXD input pin.

  • Of course I call it before SD:

    int main(void)
    {
    // Initialize
    leds_init();
    timers_init();
    gpiote_init();
    controls_init();
    uart_init();
    ble_stack_init();
    scheduler_init();    
    gap_params_init();
    services_init();
    advertising_init();
    sensor_sim_init();
    conn_params_init();
    sec_params_init();
    ...
    }
    

    Hmmm. You are right. I configured both pin as output. I will check it... Thank you for your help!

Related