This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] RTOS/CC2640R2F:硬件中断上的 UART

Guru**** 2606725 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/585354/rtos-cc2640r2f-uart-on-hardware-interrupts

器件型号:CC2640R2F

工具/软件:TI-RTOS

您好!

我对 UART 驱动程序的工作原理有一个简短的问题。

据我了解、在使用 UART 驱动程序时、硬件中断会自动启用。 但是、如何使 HWI 指向我的函数、在其中处理数据?

我的代码:

在任务中:

        uint8_t buffer[20];
        UART_Handle UART;
        UART_Params uartParams;

        //初始化 UART 驱动程序。
        UART_INIT();

        //创建一个数据处理关闭的 UART。
        UART_PARAMS_INIT (uartParams);
        uartParams.readMode = UART_MODE_BLOCKING;
        uartParams.readCallback = UartRxFxn;
        uartParams.writeDataMode = UART_DATA_BINARY;
        uartParams.readDataMode = UART_DATA_BINARY;
        uartParams.readReturnMode = UART_return_full;
        uartParams.readEcho = UART_ECHO_OFF;
        uartParams.baudrate = 9600;

UART = UART_OPEN (Board_UART0、uartParams);

静态空 UartRxFxn (UART_Handle handle、void *buf、size_t count){
   system_printf ("任务触发\n");
   system_flush();
   Semaphore_post (uartSem);

通过调用 UART_read()和 UART_write()可以很好地对 UART 进行读写操作。 但是、如何使硬件中断指向"UartRxFxn"?

如果我尝试自己定义 HWI (中断矢量21)、应用程序将锁定在 UART_open()中。

有什么想法吗? :-)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Viggo、

    UART 驱动程序有2种可在参数中设置的运行模式(可针对读取和写入操作进行独立配置):阻塞和回调。  当处于阻塞模式时、调用读取/写入操作的任务将被阻止(执行暂停)、直到发送/接收到所有数据。  在回调模式下、调用读取/写入操作的任务继续执行、并且当驱动程序完成发送/接收所有数据时、它会调用相应的回调函数(这些必须在参数中设置)。

    从上面的代码剪切中、您似乎希望注册自己的回调函数以进行读取。  它看起来很好、您只需要更改:

    uartParams.readMode = UART_MODE_CALLACK

    希望这对您有所帮助、

    伊曼纽尔