En 0755-86038900
公司新闻

4412开发板Linux开发指南6

发布时间:2015-03-31

Linux平台下UT4412BV03裸机开发指南(六)

 

第一章 串口设置之输入输出字符

第一节 Exynos 4412 UART相关说明

通用异步收发器简称UART,即UNIVERSAL ASYNCHRONOUS RECEIVER AND TRANSMITTER,它用来传输串行数据。发送数据时,CPU将并行数据写入UARTUART按照一定的格式在一根电线上串行发出;接收数据时,UART检测另一根电线的信号,将串行收集在缓冲区中,(友坚4412开发板,5260开发板)*CPU即可读取UART获得这些数据。

通用异步收发器(UART)中的Exynos4412提供4个独立通道异步和串行输入/输出(I / O)端口,通用(CH03)。它也提供了一个专用信道来与全球定位系统(GPS)(CH4)的通信。所有端口进行操作无论是在基于中断的或基于DMA模式。 UART产生中断或DMA请求将数据传送到CPU。 UART支持比特率最高可达3 Mbps的。每个UART通道包含两个先入先输出(FIFO的),通道0256byte的的发送FIFO256byte的接收FIFO,通道1通道464byte的的发送FIFO64byte的接收FIFOFIFO,而通道23只有16byte的的发送FIFO16byte的接收FIFO

Exynos 4412UART结构图如下:

 

 

UART使用标准的TTL/CMCOS逻辑电平来表示数据,为了增强数据抗干扰能力和提高传输长度,通常将TTL/CMOS逻辑电平转换为RS-232逻辑电平,在这里我们使用的是UART0

 

 

通过设置UART相关寄存器,我们就可以驱动UART工作,达到发送和接收字符的目的。

第二节 程序相关讲解

完整代码见目录5.uart。代码前面的代码什么区别,只是main.cuart.c区别,下面解释下:

1. main.c

int main (void)

{

char c;

 

uart_init();

put_s("Text UART: add one and output ");

 

while(1)

{

c = get_c();

put_c(c+1);

}

return 0;

}

main函数中,先调用uart_init()初始化UART0,然后使用get_c接收PC发过来的字符,再调用put_c该字符+1发送PC

2. uart.c

代码大家看源码,下面我简单介绍下设置UART的思路。

1) I/O功能是复用,我们通过看原理图知道UART0使用的是GPA0引脚,因此,需要配置GPA0引脚作为串口引脚。

 

2) 设置UART的时钟源

 

需要设置寄存器CLK_SRC_PERIL0CLK_DIV_PERIL0

3) UART相关设置

ULCON0设置8个数据位,没有较验位,1个停止位;

UCON0设置UART工作与工作于中断/查询模式;

UFCON0设置使能FIFO

UMCON0设置是否使用流控,我们是使用默认值,无流控。

4) 设置波特率,通过设置UBRDIV0UFRACVAL0寄存器,这里我们设置波特率为115200具体的计算方法在手册有说明。

设置UART之后,我们就可以使用了。函数get_c()是接收字符函数,函数put_c()是发送字符函数,函数put_s()发送字符串函数。

 

第三节 编译代码和烧写运行

sd卡插入PCUbuntu终端执行如下命令:

#cd 5.uart

#make

#sudo ./sd_fusing.sh /dev/sdb bl2.bin

第四节 实验现象

sd卡插入UT4412BV03中,选择sd卡启动,然后上电。

 

输入a后的现象