主题中讨论的其他器件: CC2340R5
以下详细信息介绍了如何修改 uart2echo SDK 示例、以在 LP-EM-CC2340R5上启用事件屏蔽和事件调用溢出。
摘要:
通过在 uart2echo 示例中实现以下代码片段、您将能够检测何时发生了溢出事件、跟踪总的溢出事件以及在发生溢出事件时看到绿色 LED 切换。
步骤:
- 在 CCS 中、导入 SDK ...\examples\rtos\LP_EM_CC2340R5\drivers 下的 uart2echo 示例。
- 进入 uart2echo.syscfg、在"TI 驱动程序 "中点击 GPIO 并添加 CONFIG_GPIO_GLED;将硬件配置为 LaunchPad LED 绿色 以使用电路板上的绿色 LED。
- 在 uart2echo.c 文件中、定义全局变量以供稍后使用。
/* Declare global variables */ uint32_t glostat = 0; //stat to check the total numver of overrun events uint32_t glostatnot = 0; uint8_t uhOh = 0; //flag to check if overrun event has occurred
4.按照与红色 LED 类似的方式设置绿色 LED 配置
GPIO_setConfig(CONFIG_GPIO_GLED, GPIO_CFG_OUT_STD | GPIO_CFG_OUT_LOW);
5.在 mainThread 的 uartParams 段(在 UART 打开之前)中定义 eventCallback 和 EventMask。
uartParams.eventCallback = eventcallbackFxn; uartParams.eventMask = UART2_EVENT_OVERRUN;
6.设置 eventcallbackFxn、 此函数将在发生溢出事件时发生、并将切换绿色 LED、以及通过递增 globstat 跟踪当前的溢出事件总数; 我们还会更改 uhOH 标志的状态以指示已发生溢出事件(稍后使用)。
/* * ======== eventcallbackFxn ======== */ void eventcallbackFxn(UART2_Handle handle, uint32_t event, uint32_t data, void *userArg) { if (event == UART2_EVENT_OVERRUN) //check if the event is overrun event { //UART2_flushRx(uart); glostat++; uhOh = 1; GPIO_toggle(CONFIG_GPIO_GLED); //if its valid this should still work. } else { glostatnot++; } }
7.在 mainThread 中、在 while (1) 循环中添加以下代码、该代码将在读取特定数量的字节或检测到溢出事件(通过 uhOH 标志)时清除 FIFO 缓冲区。
if(numBytesRead > 64) { UART2_flushRx(uart); } if(uhOh) { uhOh = 0; const char overrunPrompt[] = "\r\nOverrun Event Occurred, clearing RX buffer:\r\n"; UART2_write(uart, overrunPrompt, sizeof(overrunPrompt), NULL); UART2_flushRx(uart); }
8.构建、加载并运行程序,使用 PuTTY 连接到设备,然后通过输入太多字符,您将看到溢出事件的执行,并看到您的电路板上的绿色 LED 切换。
此示例在7_40_00_64 SDK 的 CCS 12.5上进行了评估。