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.

[参考译文] CC3220SF-LAUNCHXL:UART 中断问题

Guru**** 2588175 points
Other Parts Discussed in Thread: CC3220SF

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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/829403/cc3220sf-launchxl-uart-interrupt-issues

器件型号:CC3220SF-LAUNCHXL
主题中讨论的其他器件:CC3220SF

你好!

我使用的是具有 SDK 版本2.40.02.00的 CC3220SF。 我的项目基于 FreeRTOS 配置示例。 我尝试使用 UART0 RX 中断、但无法运行回调函数。 我已经按照下面的 InitTerm 函数所示配置了 UART、现在我的回调函数只会打印到触发回调的终端。 基本上、当通过 UART 接收字符时、我需要运行该回调函数。 它需要由中断驱动、以便不会干扰正在运行的其他线程。

UART_Handle InitTerm (void)
{
UART_Params uartParams;

UART_INIT();
UART_PARAMS_INIT (uartParams);

uartParams.readMode = UART_MODE_CALLACK;
uartParams.writeDataMode = UART_DATA_BINARY;
uartParams.readDataMode = UART_DATA_BINARY;
uartParams.readReturnMode = UART_return_full;
uartParams.readEcho = UART_ECHO_OFF;
uartParams.baudrate = 115200;
uartParams.readCallback = UART_Callback_Test;

uartHandle = UART_OPEN (Board_UART0、uartParams);
/*从 LPDS 依赖项中删除 UART 接收*/
//uart_control (uartHandle、UART_CMD_RXDISABLE、NULL);

return (uartHandle);
}

void UART_Callback_Test (){
log_message("UART Int trigged");
} 

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

    您好 Brian、

    UART 驱动程序在回调模式下工作的方式是,您必须首先向 uartHandle 发出 UART_READ()以启用中断,然后在读取指定字节数后,将触发回调。 您是否完成了 UART_READ()?

    我建议您查看 uartecho 示例、然后对其进行修改以使用回调。 请参阅以下我的文章以获取参考: https://e2e.ti.com/support/wireless-connectivity/wifi/f/968/p/732341/2702996#2702996

    如果您需要更多地了解我们的 UART 驱动程序、或者您对此主题有更多问题、请告诉我。

    此致、

    Michael

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

    您好、Michael、

    似乎我每次调用 UART_read()时,我的程序都会被抛出一个 FAULTISR,并停留在一个 while (1)中,该 while (1)不执行任何操作,并阻止程序执行任何其他操作。 我可以使用一些帮助来确定发生这种情况的原因。 在调用 UART_READ 函数之前调用了上面可以看到的 InitTerm 函数。 我不确定其他什么会导致这种情况发生。

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

    在混乱之后、我已经解决了我的问题。
    1) 1)我的 uartHandle 被定义为静态、我将其取走、我停止获取故障 ISR。
    2) 2)在我的 UART_Callback_Test()中,我设置了一个标志,使程序知道是否已接收到字符
    3) 3)我创建了一个线程、该线程具有检查该标志的 while (1)循环。 如果接收到需要处理的字符、则运行用户应用程序(确保重置字符接收标志)。 如果没有字符、则继续检查标志、直到有字符。  我必须向 while (1)循环添加 vTaskDelay、以阻止它阻止其他线程。