Part Number:IWR6843AOP
串口配置如下,
int32_t UartInit(void)
{
int32_t errCode;
UART_Params uartParams;
DMA_Params dmaParams;
DMA_Handle dmaHandle;
gUartLastError = UART_ERROR;
/* Initialize the UART */
UART_init();
/* Initialize the DMA for UART */
DMA_init();
/* Open the DMA Instance */
DMA_Params_init(&dmaParams);
dmaHandle = DMA_open(0, &dmaParams, &errCode);
if (dmaHandle == NULL)
{
printf("Error: Unable to open the DMA Instance [Error code %d]\n", errCode);
return gUartLastError;
}
/* Platform specific configuration */
UartPlatformInit(&gMmwMssMCB.cfg.platformCfg);
/* Setup the default UART Parameters */
UART_Params_init(&uartParams);
uartParams.writeDataMode = UART_DATA_BINARY;
uartParams.readDataMode = UART_DATA_BINARY;
uartParams.clockFrequency = MSS_SYS_VCLK;
uartParams.baudRate = 921600;
uartParams.isPinMuxDone = 1U;
uartParams.dmaHandle = dmaHandle;
uartParams.txDMAChannel = UART_DMA_TX_CHANNEL;
uartParams.rxDMAChannel = UART_DMA_RX_CHANNEL;
uartParams.readEcho = UART_ECHO_OFF;
uartParams.readReturnMode = UART_RETURN_FULL;
/* Open the Logging UART Instance: */
gMmwMssMCB.loggingUartHandle = UART_open(1, &uartParams);
if (gMmwMssMCB.loggingUartHandle == NULL)
{
System_printf("Error: Unable to open the Logging UART Instance\n");
Pcount3DDemo_debugAssert(0);
return gUartLastError;
}
gUartLastError = UART_OK;
return gUartLastError;
}
在使用UART_read接口:
static void UartRead_Task(UArg arg0, UArg arg1)
{
uint8_t rx;
CLI_write ("[%s]\n", __FUNCTION__);
while(1)
{
int32_t ret = UART_read(gMmwMssMCB.loggingUartHandle, (uint8_t *)&rx, 1U);
if(ret > 0)
CLI_write ("UART_read(%d):%u\n", ret, rx);
}
}
问题点:
1)该 UART_read接口未处于等待接收数据状态,而是一直重复被调用,按照配置是一直等待数据的。
2)另外该task中如果加入Task_sleep()就会系统崩溃,不知啥原因。
但将UART-B换为UART-A,初始化UART-A,则该接口正常.
UART-B的接收处理是怎么做的才正常呢?
Shine:
请问是自己的板子吗?UARTA和UARTB硬件上接法一样吗?uart TX, RX管脚上的时序正确么?
,
houguo chen:
1)自己的硬件板子,用的是6843。2)UARTA和UARTB硬件上接法一样,因为软件上的配置pinmux将他们都可以绑定到相同的引脚出来。3)管脚时序看不出,我软件上的配置就是Uart_open时换了一个口,一个是0一个是1,然后UART_read就会有区别,个人感觉应该是驱动层面上的原因。4)在ti众多的工程中没看到用UARTB的接收实现例子,只有用它的发送接口。请问:
1)有用过这个UARTB的接收实现参考没?2)接收处理这块你们能否测试一下,就是Uart_open时把0换为1(uartA换为uartB),然后pinmux时,引脚绑定改到对应串口,然后观察现象如何?
,
Chris Meng:
你好,
你是否有修改下面标黄部分代码为UartSci_Duplexity_FULL?
mmwave_sdk_03_05_00_04\packages\ti\drivers\uart\platform\uart_xwr68xx.c
/** * @brief This is the XWR18xx MSS specific UART configuration. There are * 2 UART instances available on the MSS. UART1 is tied to SCI-A and UART3 is * tied to SCI-B. This should *NOT* be modified by the customer. */UartSci_HwCfg gUartSciHwCfg[2] ={ /* UART1 Hardware configuration: * – Capable of sending and receiving data * – PIN MUX is required */ { ((volatile SCIRegs*)SOC_XWR18XX_MSS_SCI_A_BASE_ADDRESS), UartSci_Duplexity_FULL, UartSci_PinMux_REQUIRED, SOC_XWR18XX_MSS_SCIA_LVL0_INT, SOC_XWR18XX_MSS_SCIA_TX_DMA_REQ, SOC_XWR18XX_MSS_SCIA_RX_DMA_REQ, &UartSci_openDMA, &UartSci_closeDMA, &UartSci_isDMAEnabled, &UartSci_initiateRxDMA, &UartSci_initiateTxDMA },
/* UART3 Hardware configuration: * – Capable of only sending data * – PIN MUX is required */ { ((volatile SCIRegs*)SOC_XWR18XX_MSS_SCI_B_BASE_ADDRESS), UartSci_Duplexity_TX_ONLY, UartSci_PinMux_REQUIRED, SOC_XWR18XX_MSS_SCIB_LVL0_INT, SOC_XWR18XX_MSS_SCIB_TX_DMA_REQ, SOC_XWR18XX_MSS_SCIB_RX_DMA_REQ, &UartSci_openDMA, &UartSci_closeDMA, &UartSci_isDMAEnabled, &UartSci_initiateRxDMA, &UartSci_initiateTxDMA }};