通过串口中断的方式, MAP_UARTIntRegister(UARTA1_BASE, UARTIntHandler);
只能接收到16个字节, 也看到cc3200 串口 FIFO只有16个字节。
请教大家,怎么接收串口数据? 程序上怎么设置。
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.
关于CC3200的UART的FIFO的大小最大为 16 x 8bit,注意UART的FIFO的level最少可以设置为1/8,也就是最少串口收到2个字节就会触发UART硬件中断,转入进行串口中断处理程序。当然也可以关闭UART的FIFO,参考程序如下:
void Uart1InterruptInit(void)
{
unsigned long ulStatus;
UARTFlowControlSet(UARTA1_BASE, UART_FLOWCONTROL_NONE);
// UARTFIFOLevelSet(UARTA1_BASE,UART_FIFO_TX1_8,UART_FIFO_RX1_8); //FIFO 最小为1/8*16Byte 即串口接收2Bytes产生中断
// MAP_UARTTxIntModeSet(UARTA0_BASE, UART_RXINT_MODE_EOT);
MAP_IntPriorityGroupingSet(1);
MAP_IntPrioritySet(INT_UARTA1, HIGH_PRIORITY);
ulStatus = MAP_UARTIntStatus(UARTA1_BASE, false);
MAP_UARTIntClear(UARTA1_BASE, ulStatus);
UARTIntRegister(UARTA1_BASE, UART1BaseIntHandler);
MAP_UARTIntEnable(UARTA1_BASE, UART_INT_RX);
UARTIntClear(UARTA1_BASE, UART_INT_RT);
UARTIntClear(UARTA1_BASE, UART_INT_TX);
// g_ulUart1APriority = MAP_IntPriorityGet(INT_UARTA1);
// MAP_IntPrioritySet(INT_UARTA1, (unsigned char)g_ulUart1APriority);
//-----------------------------------串口单字节接收数据-超时检测打开--------------------------------------
UARTIntEnable(UARTA1_BASE, UART_INT_RT); //使能超时中断检测
//--------------------------------------------------------------------------------------------------------
UARTIntDisable(UARTA1_BASE, UART_INT_TX); //关闭Transmit Interrupt
MAP_UARTFIFODisable(UARTA1_BASE); //关闭串口FIFO
MAP_UARTEnable(UARTA1_BASE);
}
谢谢你的回复, 我试了, 还是不行。 有时可以接收到16个字节, 有时就接收不到。 程序上有些改动。 这是我的中断处理函数。
请教一下, 问题出在哪里了? 程序上是DMA TX
void UARTIntHandler() {
char cCharacter;
unsigned long status = UARTIntStatus(UARTA1_BASE, true);
if (status & UART_INT_RX) {
UARTIntClear(UARTA1_BASE, UART_INT_RX);
while (UARTCharsAvail(UARTA1_BASE)) {
cCharacter = UARTCharGet(UARTA1_BASE);
Report("=%d ", cCharacter);
}//while
}
if (status & UART_INT_RT) {
UARTIntClear(UARTA1_BASE, UART_INT_RT);
while (UARTCharsAvail(UARTA1_BASE)) {
cCharacter = UARTCharGet(UARTA1_BASE);
Report("==%d ", cCharacter);
}
}
if(status & UART_INT_DMATX) {
MAP_UARTDMADisable(/*UARTA0_BASE*/ UARTA1_BASE,UART_DMA_TX);
UARTIntClear(UARTA1_BASE, UART_INT_DMATX);
}
}