准备分析
资源工具
同《
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: