关于cc3200的串口空闲接收中断
TI工程师你好,
我在官方例程“uart_demo”内增加配置了一个串口接收中断和串口接收空闲中断,但只有串口接收中断生效了,空闲中断一直没有生效,请问是我初始化配置的有问题吗?
串口配置函数如下:
//
// Initialising the Terminal.
//
InitTerm();
MAP_UARTFIFODisable(UARTA0_BASE);
MAP_UARTIntRegister(UARTA0_BASE,uart0_handle);
MAP_UARTIntEnable(UARTA0_BASE,UART_INT_RT|UART_INT_RX);
串口接收中断函数如下:
void uart0_handle(void)
{
int lRetVal = 0;
lRetVal = MAP_UARTIntStatus(UARTA0_BASE,true); //读取串口中断源
if(lRetVal & UART_INT_RT) //串口空闲中断,(已使能此中断,但一直不进)
{
UARTRxCplish = 1;
}
if(lRetVal & UART_INT_RX) //串口接收中断
{
while(UARTCharsAvail(UARTA0_BASE))
{
*UART0WtPtr = MAP_UARTCharGet(UARTA0_BASE);
if(UART0WtPtr < &g_ucUARTBuffer[MaxUART0RxBufLen])
{
UART0WtPtr++;
}
else
{
UART0WtPtr = &g_ucUARTBuffer[0];
}
}
}
MAP_UARTIntClear(UARTA0_BASE,UART_INT_RT|UART_INT_RX); //清中断
}
我在main函数中如果捕捉到 UARTRxCplish == 1(触发了串口空闲中断),串口就会打印出 Message("\n\rUART_INT_RT\n\r"); ,结果手动串口给3200发数据,3200串口发回了很多的“UART_INT_RT”,像是一直在触发串口空闲中断一样,不明原因,以下为整个main函数,串口接收中断函数如上所示没有修改。请工程师帮我分析一下,谢谢了!
void main()
{
UART0RdPtr = &g_ucUARTBuffer[0];
UART0WtPtr = &g_ucUARTBuffer[0];
//
// Initailizing the board
//
BoardInit();
//
// Muxing for Enabling UART_TX and UART_RX.
//
PinMuxConfig();
//
// Initialising the Terminal.
//
MAP_UARTIntRegister(UARTA0_BASE,uart0_handle);
MAP_UARTIntEnable(UARTA0_BASE,UART_INT_RT|UART_INT_RX);
MAP_UARTFIFODisable(UARTA0_BASE);
InitTerm();
DisplayBanner(APP_NAME);
Message("cmd#\n\r");
while(1)
{
if(UARTRxCplish) //如果串口空闲中断(即接收完一帧数据),就会置位,但串口空闲中断一直不进,只能暂时屏蔽了~
{
Message("\n\rUART_INT_RT\n\r");
while(UART0WtPtr != UART0RdPtr)
{
MAP_UARTCharPut(UARTA0_BASE,(*UART0RdPtr));
if(UART0RdPtr < &g_ucUARTBuffer[MaxUART0RxBufLen])
{
UART0RdPtr++;
}
else
{
UART0RdPtr = &g_ucUARTBuffer[0];
}
}
UARTRxCplish = 0;
}
}
}
你如果要实现UART中断的话,能否参考uart_dma, 这个例程是中断的实现方法。
你好!你对中断理解错了,RT中断是接收超时中断。你的实际使用中没用出现这个情况,当然不会进这个中断。
串口的功能是比较清晰的,基本上绝大部分的芯片软件代码都是相似的,请自行学习基础知识。
//*****************************************************************************
//
// Values that can be passed to UARTIntEnable, UARTIntDisable, and UARTIntClear
// as the ulIntFlags parameter, and returned from UARTIntStatus.
//
//*****************************************************************************
#define UART_INT_DMATX 0x20000 // DMA Tx Done interrupt Mask
#define UART_INT_DMARX 0x10000 // DMA Rx Done interrupt Mask
#define UART_INT_EOT 0x800 // End of transfer interrupt Mask
#define UART_INT_OE 0x400 // Overrun Error Interrupt Mask
#define UART_INT_BE 0x200 // Break Error Interrupt Mask
#define UART_INT_PE 0x100 // Parity Error Interrupt Mask
#define UART_INT_FE 0x080 // Framing Error Interrupt Mask
#define UART_INT_RT 0x040 // Receive Timeout Interrupt Mask
#define UART_INT_TX 0x020 // Transmit Interrupt Mask
#define UART_INT_RX 0x010 // Receive Interrupt Mask
#define UART_INT_CTS 0x002 // CTS Modem Interrupt Mask