(嵌入式Linux 4 )UART串口

目录

资料来自韦东山嵌入式

硬件介绍

数据包格式

波特率计算

串口框架

S3C2440_UART编程

手动实现printf

手动实验可变参数

字节对齐

自动确定可变参数


硬件介绍

      通用异步收发器简称 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
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值