您的位置:首页 > 其它

S5PV210的Uart应用

2014-11-03 16:37 92 查看
准备分析

        S5PV210的NandFlash应用(一)出现很多bug,所以要先把Uart搞出来了。Uart一般是和clock相关联的,但是IROM中的代码已经提升了PCLK到66.5MHZ,这里就不进行CLOCK的设置了。

        


资源工具

        同《 S5PV210的LED应用(一)

着手写程序

        为实现代码最简化,只是在LED程序的基础上进行添加,其它硬件如NandFlash,重定向等等都不涉及。函数设计如下:

        (1) void uart_init (void) ,初始化Uart

        (2) char getc (void),接收一个字符

        (3) void putc (char c) ,发送一个字符

        (4) puthex(volatile char a),发送一个16进制数,对调试NandFlash有帮助,可以输出寄存器的值。(参考:这里

        (5) void main (void),测试以上代码。

具体的实现:

// 初始化串口   

void uart_init()  

{  

    // 1 配置引脚用于RX/TX功能  

    GPA0CON = 0x22222222;  

    GPA1CON = 0x2222;  

  

    // 2 设置数据格式等  

    // 使能fifo  

    UFCON0 = 0x1;  

    // 无流控  

    UMCON0 = 0x0;  

    // 数据位:8, 无校验, 停止位: 1  

    ULCON0 = 0x3;  

    // 时钟:PCLK,禁止中断,使能UART发送、接收  

    UCON0  = 0x5;                 

  

    // 3 设置波特率  

    UBRDIV0 = UART_UBRDIV_VAL;  

    UDIVSLOT0 = UART_UDIVSLOT_VAL;  

}  

// 接收一个字符   

char getc(void)  

{  

    // 如果RX FIFO空,等待  

    while (!(UTRSTAT0 & (1<<0)));  

    // 取数据  

    return URXH0;                         

}  

// 发送一个字符  

void putc(char c)  

{  

    // 如果TX FIFO满,等待  

    while (!(UTRSTAT0 & (1<<2)));  

    // 写数据  

    UTXH0 = c;                            

}  

/* 

 * 打印16进制数 

 * 例如:int a = 0x68; puthex(a);输出"68"; 

 */  

int puthex(volatile char a)  

{  

    volatile char cTmp;  

   

    //putchar(a);  

    //方法一printf  

    //printf("\n%x\n", a);  

   

    //方法二,计算  

    cTmp=a>>4;//右移4位,把高位放到低位  

    if(cTmp<10)//如果是小于10的数  

    {  

        cTmp+='0';//以0-9输出  

    }  

    else  

    {  

        cTmp+='A'-10;  //大于等于10的就是ABCDEF了。  

    }  

    putc(cTmp);  

    cTmp=a&0x0f;  

    if(cTmp<10)  

    {  

        cTmp+='0';  

    }  

    else  

    {  

        cTmp+='A'-10;  

    }  

    putc(cTmp);  

   

    return 0;  

}  

void main()             //LED 闪烁  

{  

    char c = 0;  

      

    int a = 0x68;  

      

    GPJ2CON = 0x00001111;       // 配置引脚  

  

    GPJ2DAT = 0;            // LED on  

    delay(0x100000);  

      

  

  

    // 初始化串口   

    uart_init();  

      

    // 开发板发送字符'A'  

    putc('A');  

      

    // 开发板发送"68"  

    puthex(a);    

  

    while (1)  

    {  

        // 开发板接收字符  

        c = getc();  

          

        // 开发板发送字符c+1  

        putc(c+1);        

    }  

  

}  

下载运行

        同《 S5PV210的LED应用(一)

运行调试

       

        测试OK:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: