先说一下我的目的,我现在使用的UART,无论从中断还是查询都能够正常工作。但是当我音频中断任务跑的比较多的时候,UART的中断就会发生数据丢失的情况,因此我想采用DMA查寻的方式来接收UART的数据。这样可以防止数据丢失。
void initUART( void )
{
(*pUART0RXCTL) = 0;
(*pUART0RXCTL) = 0;
// set the DMA parameter registers
(*pIIUART0RX) = (int)RX_Buffer;
(*pIMUART0RX) = 1;
(*pCUART0RX) = sizeof(RX_Buffer);
*pUART0LCR=0;
/* Sets the Baud rate for UART0 */
*pUART0LCR = UARTDLAB; //enables access to Divisor register to set bauda rate
*pUART0DLL = 0xd0; //
*pUART0DLH = 0x02;
/* Configures UART0 LCR */
*pUART0LCR = UARTWLS8;//| // word length 8
// UARTPEN| // parity enable ODD parity
// UARTSTB ; // Two stop bits
(*pUART0TXCTL) = UARTEN; //enables UART0 in core driven mode
(*pUART0RXCTL) = (UARTEN| UARTDEN); // Enables UART0 in receive DMA mode
}
这是我的串口初始化函数。然后再主函数里面只运行一个读数据的函数和检验数据的函数。
void UARTisr( void ) //读取
{
int RxTemp=0;
if((*pUART0RXSTAT) & UARTDMASTAT)
{
rNewAdr=*pCUART0RX;
}
if(rOldAdr!=rNewAdr)
{
LED_Count=LED_Count+0x0002ffff;
RxTemp = RX_Buffer[rOldAdr];
rOldAdr++;
}
}
LED_Count是LED闪烁的计数变量,只要有数据接收,LED会闪烁。
但是读取的RxTemp不对。请各位看看我的程序代码,问题在哪里。
谁有以前成功的代码,感激不尽。
谢谢