我试图做一些相对简单的事情,但肯定是遗漏了一些东西。
我有一个CC3220SF-LAUNCHXL项目,该项目建立在亚马逊FreeRTOS上(与SimpleLink SDKv 2.10 .00.04 一起运行),并通过UART连接到外部调制解调器。 CC3220的调制解调器上的线绕引脚16和17被配置 为UART1。 我有一个连接的内窥镜,可以清楚地看到CC3220正在将AT命令正确地传输到调制解调器(开始时,我只是将“ATE0”发送到调制解调器),并且调制解调器正在响应“\r\nOK\r\n",这是我的问题开始的地方。
对于UART1,我已启用FIFO并将级别设置为1/8 (2字节),我可以在UARTA1DR (数据)寄存器中看到至少正在接收字符(出现'O'和'K')。 但是,当我的中断触发时,我尝试使用UART_CONTROL和 UART_CMD_GETRXCOUNT,它返回0表示可用字节数。 如果我试图调用UART_READ,并且将size参数设置为1 (读取一个字节),则回调可能永远不会执行,因为由于某种原因事务从未完成。
我在查找类似的示例时遇到了问题,例如此设置。 一般而言,通过UART与外部设备通信的预期设置/流程是什么?
这是我的UART配置功能。 大部分的实际功能都没有填好,现在我只是想接收一个字符/字符串并将其存储到缓冲区,但不清楚如何正确地执行此操作。 回调函数与中断应执行什么操作? 我应该只使用中断还是回调?
/ *-----------------------------------------------------------*/
static CellularCommInterfaceError_t prxOpenCellularUart(void){ CellularCommInterfaceError_t xRetVal = IOT_COMM_INTERFACE_SUCCESS; UART_Params xUartParams = {0};
UART_Params_init(&xUartParams);
// Read config xUartParams.readMode = UART_MODE_CALLBACK; xUartParams.readTimeout = UART_WAIT_FOREVER; xUartParams.readCallback = uart_rx_cb; xUartParams.readReturnMode = UART_RETURN_NEWLINE; xUartParams.readDataMode = UART_DATA_TEXT; xUartParams.readEcho = UART_ECHO_OFF;
// Write config xUartParams.writeMode = UART_MODE_BLOCKING; xUartParams.writeTimeout = UART_WAIT_FOREVER; xUartParams.writeCallback = NULL; xUartParams.writeDataMode = UART_DATA_TEXT;
// Protocol config xUartParams.baudRate = CELLULAR_BAUD_RATE; xUartParams.dataLength = UART_LEN_8; xUartParams.stopBits = UART_STOP_ONE; xUartParams.parityType = UART_PAR_NONE; xUartParams.custom = NULL;
/* RX is enabled by default */ xCellularUartHandle = UART_open(CELLULAR_UART_INDEX, &xUartParams);
// Set 6mA drive strength and Pull-Up Resistor for Tx pin PinConfigSet(CELLULAR_UART_TX_PIN, PIN_STRENGTH_6MA, PIN_TYPE_STD_PU);
if(NULL == xCellularUartHandle) { xRetVal = IOT_COMM_INTERFACE_DRIVER_ERROR; } else { UARTDisable(CELLULAR_UART_BASE);
// Set up UART Rx Interrupt // Disable Rx UART_control(xCellularUartHandle, UART_CMD_RXDISABLE, NULL);
// Enable FIFOs UARTFIFOEnable(CELLULAR_UART_BASE);
// Set Rx trigger level to 1/8 (2 bytes) UARTFIFOLevelSet(CELLULAR_UART_BASE, UART_FIFO_TX1_8, UART_FIFO_RX2_8);
// // Disable all interrupt sources UARTIntDisable(CELLULAR_UART_BASE, 0xFFFFFFFF);
// Enable receive interrupt UARTIntEnable(CELLULAR_UART_BASE, UART_INT_RX);
// Hook up interrupt handler UARTIntRegister(CELLULAR_UART_BASE, prvProcessUartInt);
// Clear interrupt flags UARTIntClear(CELLULAR_UART_BASE, UART_INT_RX);
UART_control(xCellularUartHandle, UART_CMD_RXENABLE, NULL);
UARTEnable(CELLULAR_UART_BASE); }
return xRetVal;}