uart2 RX interrupt not working

I have a nRF9160 custom board. I am using 2 UARTs (UART0 and UART2). I need to have an RX interrupt on both UARTs. I have identical setups and configuration and code. The RX interrupt works for UART0 but not for UART2. polling of the RX works for UART2 but I do not see an RX interrupt on UART2. my setup and test code is shown below

my setup for the interrupts is shown below

   /* enable Uart_0 interrupts so UART_0 */

    uart_irq_callback_set(uart0_dev, uart2_cb);
    uart_irq_rx_enable(uart0_dev);
    uart_irq_tx_disable(uart0_dev);
   /* enable Uart_2 interrupts so UART_2 */
    uart_irq_callback_set(uart2_dev, uart2_cb);
    uart_irq_rx_enable(uart2_dev);
    uart_irq_tx_disable(uart2_dev);
my callbacks are the following
void uart0_cb(const struct device *dev, void *user_data)
{
    uint8_t i;
    int data_length = 0;
    uint8_t temp_buf[16];

    uart_irq_update(dev);
    if (uart_irq_rx_ready(dev))
    {
        data_length = uart_fifo_read(dev, temp_buf, sizeof(temp_buf));
        if(data_length > 0)
        {
            for(i=0; i < data_length; i++)
            {
                uartData.data[fifoPtr++] = temp_buf[i];
                uartData.len = fifoPtr;
                if(temp_buf[i] == '\r')
                {
                    k_fifo_put(&fifo_uart_rx_data, &uartData);
                    fifoPtr = 0;
                }
            }
        }
    }
}
 
void uart2_cb(const struct device *dev, void *user_data)
{
   uint8_t i;
    int data_length = 0;
    uint8_t temp_buf[16];
 
    uart_irq_update(dev);
    if (uart_irq_rx_ready(dev))
    {
        data_length = uart_fifo_read(dev, temp_buf, sizeof(temp_buf));
        if(data_length > 0)
        {
            for(i=0; i < data_length; i++)
            {
                uart2Data.data[fifoPtr2++] = temp_buf[i];
                uart2Data.len = fifoPtr2;
                if(temp_buf[i] == '\r')
                {
                    k_fifo_put(&fifo_uart2_rx_data, &uart2Data);
                    fifoPtr2 = 0;
                }
            }
        }
    }
}
my test is the following

#if 0
    /* test of RX interrupt from UART0 */
    struct uart_data_t *bufx;
    uint8_t uart0In[30];

    while(1)
    {
        printk("UART0 RX test\r\n");
        bufx = k_fifo_get(&fifo_uart_rx_data, K_FOREVER);       /* check if command line seen on UART */
        if (bufx)
        {
            strncpy(uart0In,bufx->data,bufx->len);
            uart0In[bufx->len] = '\n';
            uart0In[bufx->len + 1] = '\0';
            printk("Uart0In: %d %s",strlen(uart0In),uart0In);
        }
    }
#endif

#if 0
    /* test of RX interrupt from UART2 */
    struct uart_data_t *bufx;
    uint8_t uart2In[30];

    while(1)
    {
        printk("UART2 RX test\r\n");
        bufx = k_fifo_get(&fifo_uart2_rx_data, K_FOREVER);      /* check if command line seen on UART */
        if (bufx)
        {
            strncpy(uart2In,bufx->data,bufx->len);
            uart2In[bufx->len] = '\n';
            uart2In[bufx->len + 1] = '\0';
            printk("Uart2In: %d %s",strlen(uart2In),uart2In);
        }
    }
#endif
Parents
  • Hello,

    Could you please try to read out the peripheral register configuration for UART0 and UART2 to see if the configurations match except for the pin assigments? You can do this by starting a debug session in our VS code extension, pause the debugger after the program has started, then use the Peripheral View to inspect the registers.

    First thing you may want to check is if the same interrupts are enabled in the INTEN register.

    Thanks,

    Vidar

Reply
  • Hello,

    Could you please try to read out the peripheral register configuration for UART0 and UART2 to see if the configurations match except for the pin assigments? You can do this by starting a debug session in our VS code extension, pause the debugger after the program has started, then use the Peripheral View to inspect the registers.

    First thing you may want to check is if the same interrupts are enabled in the INTEN register.

    Thanks,

    Vidar

Children
Related