目录
资料来自韦东山嵌入式
硬件介绍
通用异步收发器简称 UART,全双工方式传输数据,最精简的连线方法只有三根电线:TxD 用于发送数据,RxD 用于接收数据,Gnd 用于给双方提供参考电平。
连接方式:1. 2440使用TTL逻辑电平,而PC使用的是RS232电平,所以加入电平转换芯片将TTL转换为RS232与PC通信。
2. 2440外接USB串口芯片,通过USB接入PC。
数据包格式
数据传输流程:
(1)空闲为高电平
(2)当要发送数据时,UART 改变 TxD 数据线的状态(变为 0 状态)并维持 1 位的时间──这
样接收方检测到开始位后,再等待 1.5 位的时间就开始一位一位地检测数据线的状态得到所传输的数据。
(3)UART 一帧中可以有 5、6、7 或 8 位的数据,发送方一位一位地改变数据线的状态将它
们发送出去,首先发送最低位。
(4)如果使用较验功能,UART 在发送完数据位后,还要发送 1 个较验位。有两种较验方法:
奇较验、偶较验──数据位连同较验位中,“1”的数目等于奇数或偶数。
(5)最后,发送停止位,数据线恢复到“空闭”状态(1 状态)。停止位的长度有 3 种:1 位、
1.5 位、2 位。
波特率计算
假设波特率115200,8n1 (数据位8位,无奇偶校验,1位停止位)
每一位传输t=1/115200
传输1Byte需要10位(开始为,数据位,停止位)
则传输1Byte T=10/115200
则一秒可以传输:1/T=115200/10=11520 Byte
串口框架
串口中存在数据缓存FIFO,移位寄存器。发送数据时,CPU从内存中取得数据,放入FIFO,UART将FIFO中的数据通过移位寄存器一位一位发送出去。接收数据同理。
S3C2440_UART编程
修改007_clock
添加usrt.c
void urat0_init()
{
/*设置引脚用于串口 */
/*GPH2,3用于TxD0,RxD0*/
GPHCON &= ~((3<<4)|(3<<6));//清零
GPHCON |= (2<<4)|(2<<6);
GPHUP &= ~((1<<2)|(1<<3)); //设置GPH2,3引脚上拉
/*设置波特率
*UBRDIVn = (int) (UART clock / (buad rate x 16)) –1
* UART clock=50M //前面时钟章节设置的
* UBRDIVn = (int) (50 000 000 / (115200 x 16)) –1 =26
*/
UCON0=0x00000005; //设置UCON为PCLK,中断/查询模式
UBRDIV0=26;
/*设置数据格式*/
ULCON0=0x00000003; //无校验,1停止位 8位数据长度 8n1
/*其他设置*/
}
void putchar(int c)//输出字符
{
/*UTXH0 UART通道 0 发送缓存寄存器
*UTRSTAT0 UART通道 0 接收发送状态 寄存器
*/
while(!(UTRSTAT0 & (1<<2))); //等待发送器空
UTXH0 =(unsigned char)c; //写入一个字节
}
int getchar(void)
{
while(!(UTRSTAT0 & (1<<0))); //等待接收器有数据
return URXH0;
}
int puts(const char *s)//输出字符串
{
while(*s)
{
putchar(*s);
s++;
}
}
添加uart.h