||
第一章 串口设置之输入输出字符第一节 Exynos 4412 UART相关说明
通用异步收发器简称UART,即UNIVERSAL ASYNCHRONOUS RECEIVER AND TRANSMITTER,它用来传输串行数据。发送数据时,CPU将并行数据写入UART,UART按照一定的格式在一根电线上串行发出;接收数据时,UART检测另一根电线的信号,将串行收集在缓冲区中,CPU即可读取UART获得这些数据。
通用异步收发器(UART)中的Exynos4412提供4个独立通道异步和串行输入/输出(I / O)端口,通用(CH0到3)。它也提供了一个专用信道来与全球定位系统(GPS)(CH4)的通信。所有端口进行操作无论是在基于中断的或基于DMA模式。 UART产生中断或DMA请求将数据传送到CPU。 UART支持比特率最高可达3 Mbps的。每个UART通道包含两个先入先输出(FIFO的),通道0有256byte的的发送FIFO和256byte的接收FIFO,通道1和通道4有64byte的的发送FIFO和64byte的接收FIFO,FIFO,而通道2和3只有16byte的的发送FIFO和16byte的接收FIFO。
Exynos 4412的UART结构图如下:
UART使用标准的TTL/CMCOS逻辑电平来表示数据,为了增强数据抗干扰能力和提高传输长度,通常将TTL/CMOS逻辑电平转换为RS-232逻辑电平,在这里我们使用的是UART0:
通过设置UART相关寄存器,我们就可以驱动UART工作,达到发送和接收字符的目的。
第二节 程序相关讲解完整代码见目录5.uart。代码和前面的代码没什么区别,只是main.c和uart.c的区别,下面解释下:
1. main.c
int main (void)
{
char c;
uart_init();
put_s("Text UART: add one and output\n\r");
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_PERIL0和CLK_DIV_PERIL0。
3) UART相关设置:
ULCON0设置为8个数据位,没有较验位,1个停止位;
UCON0设置UART工作与工作于中断/查询模式;
UFCON0设置使能FIFO;
UMCON0设置是否使用流控,我们是使用默认值,无流控。
4) 设置波特率,通过设置UBRDIV0和UFRACVAL0寄存器,这里我们设置波特率为115200,具体的计算方法在手册有说明。
设置好UART之后,我们就可以使用了。函数get_c()是接收字符函数,函数put_c()是发送字符函数,函数put_s()是发送字符串函数。
第三节 编译代码和烧写运行
将sd卡插入PC,在Ubuntu终端执行如下命令:
#cd 5.uart
#make
#sudo ./sd_fusing.sh /dev/sdb bl2.bin
第四节 实验现象将sd卡插入UT4412BV03中,选择sd卡启动,然后上电。
输入a后的现象