S5PV210的Uart应用

来源:互联网 发布:c语言运算符号优先级 编辑:程序博客网 时间:2024/05/17 22:21

准备分析

        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 设置数据格式等// 使能fifoUFCON0 = 0x1;// 无流控UMCON0 = 0x0;// 数据位:8, 无校验, 停止位: 1ULCON0 = 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 ondelay(0x100000);// 初始化串口 uart_init();// 开发板发送字符'A'putc('A');// 开发板发送"68"puthex(a);while (1){// 开发板接收字符c = getc();// 开发板发送字符c+1putc(c+1);}}

下载运行

        同《 S5PV210的LED应用(一)》

运行调试
       
        测试OK:


遗留问题
  
        1.无


原创粉丝点击