您的位置: OpenADSP社区论坛 -> SHARC/TigerSHARC专区 -> 新手上路 -> ADSP-21489中的UART采用查询方式的DMA模式
本帖共有843个阅读者
发表帖子 发表投票 回复主题
ADSP-21489中的UART采用查询方式的DMA模式
黑白子(论坛新手)
黑白子
头衔:社区公民
帮派:无帮无派
帖数:2
金钱:120
积分:4
注册时间:2014/3/18
楼主信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
ADSP-21489中的UART采用查询方式的DMA模式
先说一下我的目的,我现在使用的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不对。请各位看看我的程序代码,问题在哪里。
谁有以前成功的代码,感激不尽。



谢谢









这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2014/10/22 11:03:13
Powered by OpenADSP Copyright © 2010 www.Openadsp.com. All rights reserved.154295 Call, 1 Queries, Processed in 0.015625 second(s),