S5PV210的Uart应用

准备分析

         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),测试以上代码。
具体的实现:

  1. // 初始化串口   
  2. void uart_init()  
  3. {  
  4.     // 1 配置引脚用于RX/TX功能  
  5.     GPA0CON = 0x22222222;  
  6.     GPA1CON = 0x2222;  
  7.   
  8.     // 2 设置数据格式等  
  9.     // 使能fifo  
  10.     UFCON0 = 0x1;  
  11.     // 无流控  
  12.     UMCON0 = 0x0;  
  13.     // 数据位:8, 无校验, 停止位: 1  
  14.     ULCON0 = 0x3;  
  15.     // 时钟:PCLK,禁止中断,使能UART发送、接收  
  16.     UCON0  = 0x5;                 
  17.   
  18.     // 3 设置波特率  
  19.     UBRDIV0 = UART_UBRDIV_VAL;  
  20.     UDIVSLOT0 = UART_UDIVSLOT_VAL;  
  21. }  

  1. // 接收一个字符   
  2. char getc(void)  
  3. {  
  4.     // 如果RX FIFO空,等待  
  5.     while (!(UTRSTAT0 & (1<<0)));  
  6.     // 取数据  
  7.     return URXH0;                         
  8. }  

  1. // 发送一个字符  
  2. void putc(char c)  
  3. {  
  4.     // 如果TX FIFO满,等待  
  5.     while (!(UTRSTAT0 & (1<<2)));  
  6.     // 写数据  
  7.     UTXH0 = c;                            
  8. }  

  1. /* 
  2.  * 打印16进制数 
  3.  * 例如:int a = 0x68; puthex(a);输出"68"; 
  4.  */  
  5. int puthex(volatile char a)  
  6. {  
  7.     volatile char cTmp;  
  8.    
  9.     //putchar(a);  
  10.     //方法一printf  
  11.     //printf("\n%x\n", a);  
  12.    
  13.     //方法二,计算  
  14.     cTmp=a>>4;//右移4位,把高位放到低位  
  15.     if(cTmp<10)//如果是小于10的数  
  16.     {  
  17.         cTmp+='0';//以0-9输出  
  18.     }  
  19.     else  
  20.     {  
  21.         cTmp+='A'-10;  //大于等于10的就是ABCDEF了。  
  22.     }  
  23.     putc(cTmp);  
  24.     cTmp=a&0x0f;  
  25.     if(cTmp<10)  
  26.     {  
  27.         cTmp+='0';  
  28.     }  
  29.     else  
  30.     {  
  31.         cTmp+='A'-10;  
  32.     }  
  33.     putc(cTmp);  
  34.    
  35.     return 0;  
  36. }  

  1. void main()             //LED 闪烁  
  2. {  
  3.     char c = 0;  
  4.       
  5.     int a = 0x68;  
  6.       
  7.     GPJ2CON = 0x00001111;       // 配置引脚  
  8.   
  9.     GPJ2DAT = 0;            // LED on  
  10.     delay(0x100000);  
  11.       
  12.   
  13.   
  14.     // 初始化串口   
  15.     uart_init();  
  16.       
  17.     // 开发板发送字符'A'  
  18.     putc('A');  
  19.       
  20.     // 开发板发送"68"  
  21.     puthex(a);    
  22.   
  23.     while (1)  
  24.     {  
  25.         // 开发板接收字符  
  26.         c = getc();  
  27.           
  28.         // 开发板发送字符c+1  
  29.         putc(c+1);        
  30.     }  
  31.   
  32. }  

下载运行

        同《  S5PV210的LED应用(一)

运行调试
       
        测试OK:


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值