异步Usart IO_READ始终为null SAMD20J16

时间:2018-12-27 00:22:48

标签: c microcontroller cortex-m atmelstudio usart

Atmel软件框架刚入门,通常使用MPLab / PIC设备,但是对于我的项目,我需要构建一个能够将6个UART设备连接在一起的UART路由器,因此我选择了SAMD20J16芯片。到目前为止,我已经使用ATMEL配置了所有USART模块的驱动程序,其中USART HAL_ASYNC驱动程序开始。

我已经获得了可以写入所有6个USART模块的设备,并且已经获得了读取中断来触发,但是我无法从usart缓冲区中读取数据。就目前而言,香港专业教育学院将其缩减为可能的最小代码,以尝试找出其为何不起作用,这可能只是我的一个简单疏忽,但我已经在互联网上搜索了2天,并且找到了所有我可以使用的文档ASF4中的HAL_ASYNC驱动程序充其量是不稳定的。

#include <atmel_start.h>



int main(void)
{
    int nRead=0;
    uint8_t rxPData;

    /* Initializes MCU, drivers and middleware */
    atmel_start_init();

    //DECLARE UART STRUCTURTES
    struct io_descriptor *uartD1;
    usart_async_get_io_descriptor(&USART_0, &uartD1);
    usart_async_enable(&USART_0);

    struct io_descriptor *uartP;
    usart_async_get_io_descriptor(&USART_1, &uartP);
    usart_async_enable(&USART_1);


    struct io_descriptor *uartD3;
    usart_async_get_io_descriptor(&USART_2, &uartD3);
    usart_async_enable(&USART_2);

    struct io_descriptor *uartD4;
    usart_async_get_io_descriptor(&USART_3, &uartD4);
    usart_async_enable(&USART_3);

    struct io_descriptor *uartS;
    usart_async_get_io_descriptor(&USART_4, &uartS);
    usart_async_enable(&USART_4);

    struct io_descriptor *uartD2;io_write(uartP, (uint8_t *) "UART P\r\n", 8);
    usart_async_get_io_descriptor(&USART_5, &uartD2);
    usart_async_enable(&USART_5);

    void uartP_callback(const struct usart_async_descriptor *const io_descriptor){
        if(usart_async_is_rx_not_empty(uartP)){
                io_write(uartP, (uint8_t *) "TEST P\r\n", 8);


                    nRead=io_read(uartP,&rxPData,6);

                    io_write(uartP,&rxPData,nRead);
        }



    }

    usart_async_register_callback(&USART_1, USART_ASYNC_RXC_CB, uartP_callback);

    while (1) {


    }     
}

现在,观察到的行为是我发送UART数据包触发中断,并传递IF rx_buffer_is_not_empty并发回“ TEST P \ r \ n”。经过一些测试后,我添加了这行代码,只是为了查看中断是否正在触发。

但是,无论我发送给它的输入大小如何,它都永远不会回传发送给它的任何数据。

现在,我只是在尝试验证我可以在所有usart端口上进行接收和发送,最终代码不会在接收中断内进行发送。

0 个答案:

没有答案