下面就开始串口的学习了,关于串口的基本知识,稍微说下:
首先OK6410向PC机发送数据。具体流程为:TXD,平时为高电平,当要发送数据的时候那么TXD就要拉低一段时间,这称为起始位。然后发送需要发送的数据(先高后低),这段称为数据位。最后还有一个停止位,当然肯定是拉高了(等待下一次的数据发送)
同时PC机要接收来自OK6410的数据。接收流程为:开始PC机接收到的是高电平,当出现低电平的时候就知道要发数据了。然后进行检测接收数据(先高后低)
校验位:发送完数据位后,不放停止位,而是放校验位(奇、偶)学过51当单片机的人都明白串口的通信原理(感觉我也是在废话啊)~~~步入正题。。。。串口学习
首先声明,这里提到的串口都是指S3C6410 RSIC 微处理器上的通用异步接收/发送器(UART)串行端口。
该 S3C6410 通用异步接收和发送器( UART)提供了四个独立的异步串行 I / O (SIO)端口。每个异步串行 I/O(SIO)端口通过中断或者直接存储器存取(DMA)模式来操作。换句话说,UART 是通过产生一个中断或 DMA 请求,在 CPU 和 UART 之间传输数据的。该 UART 使用系统时钟的时间可以支持的比特率最高为115.2kb/s。如果一外部设备提供 ext_uclk0 或 ext_uclk1 ,则 UART 可以以更高的速度运行。每个UART 的通道包含了两个 64 字节收发 FIFO 存储器。
因为我们是在uboot上面进行的裸机程序实验,所以应该了解并不完全是裸的,uboot上面已经对串口进行初始化了的。下面以串口0为例来说明
在地板手册上可以看到这个
说明GPA是控制穿口0的GPIO口,我们就需要设置GPA了,从s3c6410的手册上面可以看到这个
可以看出我们需要设置为串口模式,也就是00100010的模式以下代码可以完成
GPACON &= ~0xff;
GPACON |= 0x22;
接下来我们还需要设置串口的格式:
8位数据位,1位停止位,无校验8N1
ULCON0 = 0x3; /* 数据位:8, 无较验, 停止位: 1, 8n1 */
/* ULCON0 */
ULCON0 = 0x3; /* 数据位:8, 无较验, 停止位: 1, 8n1 */
UCON0 = 0x5; /* 使能UART发送、接收/使用PCLK */
UFCON0 = 0x01; /* FIFOENABLE */
UMCON0 = 0;
/* 波特率 */
/* DIV_VAL = (PCLK /(bps x 16 ) ) - 1
* bps = 115200
* DIV_VAL = (66500000 / ( x 16 ) ) - 1
* = 35.08
*/
UBRDIV0 = 35;
/* x/16 = 0.08
* x = 1
*/
UDIVSLOT0 = 0x1;
串口就学习到这里了。。。。。