2分六合

IT技术互动交流平台

ADIdsp上UART驱动的伪代码实现

来源:将在谋而不在勇  发布日期:2012-10-12 08:55:29

今天笔试题里面有一个关于UART驱动的伪代码实现,实在是没有仔细看过,直接拿来就用了
回来打开VDSP里面UART实现的源码分析了一下,学习学习

 

/*******************************************************************

* Function: PutChar

* Description: Writes a character to the UART.

*******************************************************************/

int PutChar(const char cVal)
{
    int nStatus = 0;
    unsigned int count = 0;
    do
    {
        if( (*pUART0LSR & UARTTHRE) )
        {
            *pUART0THR = cVal;
            nStatus = 1;
            break;
        }
        count++;
    } while( count < 0x100000 );
    return nStatus;
}


*pUART0LSR & UARTTHRE表示uart0通道空闲可用 UART0_THR Empty
返回1
如果尝试0x100000次无法获得UART,就放弃返回0
/*******************************************************************
* Function: GetChar
* Description: Reads a character from the UART.hkcren.com
*******************************************************************/

int GetChar(char *const cVal)
{
    int nStatus = 0;
    unsigned int count = 0x0;
    do{
        if( 1 /*UARTDR == (*pUART0LSR & UARTDR)*/ )
        {
            *cVal = (char)*pUART0RBR;
            nStatus = 1;
            break;
        }
        /*count++;*/
    }while( count < 0x100000 );
    return nStatus;
}

同样,getchar从寄存器*pUART0RBR中读取数据,这些都是在没有中断没有DMA的情况下使用UART的函数
如果要判断读取时是UARTDR位表示Data Ready
上层的调用程序会判断读取的是否为0,不为0则继续进行
while(UARTflag)
            {
                if( 1 == GetChar( &Testputchar ) )
                {
                    if( 0 != Testputchar&&Testputchar==TST_CHAR[i])
                    {        
                            UARTflag=0;
//                          DEBUG_STATEMENT( "\nUartGerChar" );
//                          DEBUG_PRINT("\nTestputchar is %c ",Testputchar);
                            OK_number++;
                    }
                    else if( 'z' == Testputchar )
                            break;
                }
            }

上层会忽视取回来是0的字符,这样就可以等到有用数据并且保存在Testputchar里

延伸阅读:

Tag标签:      
  • 专题推荐

About IT165 - 广告服务 - 隐私声明 - 版权申明 - 免责条款 - 网站地图 - 网友投稿 - 联系方式
本站内容来自于互联网,仅供用于网络技术学习,学习中请遵循相关法律法规