UART控制器——驱动程序该如何编写?
每个UART包含一个波特率产生器,发送器,接收器和一个控制单元,如上图所示:
发送数据CPU 先将数据写入发送FIFO 中,然后 UART 会自动将FIFO 中的数据复制到“发送移位器” (Transmit Shifter )中,发送移位器将数据一位一位地发送到 TxDn 数据线上 (根据设定的格式,插入开始位 、校验和停止)。接收数据“移位器” (Receive Shifter )将 RxDn 数据线上的数据一位一位的接收进来,然后复制到FIFO 中, CPU即可从中读取数据。
UART是以异步方式实现通信的,其采样速度由波特率决定,波特率产生器的工作频率可以由PCLK(外围设备频率),FCLK/n(CPU工作频率的分频),UEXTCLK(外部输入时钟)三个时钟作为输入频率,波特率设置寄存器是可编程的,用户可以设置其波特率决定发送和接收的频率。
发送器和接收器包含了64Byte的FIFO和数据移位器。UART通信是面向字节流的,待发送数据写到FIFO之后,被拷贝到数据移位器(1字节大小)里,数据通过发送数据管脚TXDn发出。
同样道理,接收数据通过RXDn管脚来接收数据(1字节大小)到接收移位器,然后将其拷贝到FIFO接收缓冲区里。
(1)数据发送发送的数据帧可编程的,它的一个帧长度是用户指定的,它包括一个开始位,5~8个数据位,一个可选的奇偶校验位和1~2个停止位,数据帧格式可以通过设置ULCONn寄存器来设置。发送器也可以产生一个终止信号,它是由一个全部为0的数据帧组成。在当前发送数据被完全传输完以后,该模块发送一个终止信号。在终止信号发送后,它可以继续通过FIFO(FIFO)或发送保持寄存器(NON-FIFO)发送数据。
(2)数据接收同样接收端的数据也是可编程的,接收器可以侦测到溢出错误奇偶校验错误,帧错误和终止条件,每个错误都可以设置一个错误标志。? 溢出错误 :在旧数据被读取到之前,新数据覆盖了旧数据? 奇偶校验错误:接收器侦测到了接收数据校验结果失败,接收数据无效? 帧错误 :接收到的数据没有一个有效的停止位,无法判定数据帧结束? 终止条件 :RxDn接收到保持逻辑0状态持续长于一个数据帧的传输时间
(3)自动流控AFC(Auto Float Control)UART0和UART1支持有nRTS和nCTS的自动流控。在AFC情况下,通信双方nRTS和nCTS管脚分别连接对方的nCTS和nRTS管脚。通过软件控制数据帧的发送和接收。在开启AFC时,发送端接收发送前要判断nCTS信号状态,当接收到nCTS激活信号时,发送数据帧。该nCTS管脚连接对方nRTS管脚。接收端在准备接收数据帧前,其接收器FIFO有大于32个字节的空闲空间,nRTS管脚会发送激活信号,当其接收FIFO小于32个字节的空闲空间,nRTS必须置非激活状态。
3)选择时钟源
Exynos4412 UART的时钟源有八种选择:XXTI 、XusbXTI 、SCLK_HDMI24M 、SCLK_USBPHY0 、 SCLK_HDMIPHY 、SCLKMPLL_USER_T 、SCLKEPLL 、SCLKVPLL ,由 CLK_SRC_PERIL0 寄存器控制。
选择好时钟源后,还可以通过 DIVUART0 ~4设置分频系数,由 CLK_DIV_PERIL0 寄存器控制。从分频器得到的时钟被称为SCLK UART 。
SCLK UART 经过上图中的“ UCLK Generator”后,得到UCLK ,它的频率就是UART 的波特率。“ Generator UCLK Generator ”通过这 2个寄存器来设置:UBRDIVn(UART BAUD RATE DIVISOR) 、UFRACVALn 。
4)UART配置寄存器
ULCONn
bite [6] 红外模式选择串口0是否使用红外模式:0 = 正常通信模式1 = 红外通信模式
bite [5:3] 校验模式设置串口0在数据接收和发送时采用的校验方式:0xx = 无校验100 = 奇校验101 = 偶校验110 = 强制校验/检测是否为1111 = 强制校验/检测是否为0
[2] 停止位设置串口0停止位数:0 = 每个数据帧一个停止位1 = 每个数据帧二个停止位
[1:0] 数据位设置串口0数据位数:00 = 5个数据位 01 = 6个数据位10 = 7个数据位 11 = 8个数据位
该寄存器我们通用的配置是:
ULCON2 = 0x3; //Normal mode, No parity,One stop bit,8 data bits
UCONn
[15:12] FCLK分频因子 当UART0选择FCLK作为时钟源时,设置其FCLK的分频因子UART0 工作时钟频率 = FCLK/ FCLK分频因子 + 6
[11:10] UART时钟源选择选择UART0的工作时钟PCLK,UEXTCLK,FCLK/n:00,10 = PCLK01 = UEXTCLK11 = FCLK/n当选择FCLK/n作为UART0工作时钟时还要做其它设置,具体请读者自行查看硬件手册
[9] 发送数据中断产生类型设置UART0中断请求类型,在非FIFO传输模式下,一旦发送数据缓冲区为空,立即产生中断信号,在FIFO传输模式下达到发送数据触发条件时立即产生中断信号:0 = 脉冲触发1 = 电平触发
[8] 接收数据中断产生类型设置UART0中断请求类型,在非FIFO传输模式下,一旦接收到数据,立即产生中断信号,在FIFO传输模式下达到接收数据触发条件时立即产生中断信号:0 = 脉冲触发1 = 电平触发
[7] 接收数据超时设置当接收数据时,如果数据超时,是否产生接收中断:0 = 不开启超时中断 1 = 开启超时中断10 = 7个数据位 11 = 8个数据位
[6] 接收数据错误中断设置当接收数据时,如果产生异常,如传输中止,帧错误,校验错误时,是否产生接收状态中断信号:0 = 不产生错误状态中断 1 = 产生错误状态中断
[5] 回送模式设置该位时UART会进入回送模式,该模式仅用于测试0 = 正常模式 1 = 回送模式
[4] 发送终止信号设置该位时,UART会发送一个帧长度的终止信号,发送完毕后,该位自动恢复为00 = 正常传输 1 = 发送终止信号
[3:2] 发送模式设置采用哪个方式执行数据写入发送缓冲区00 = 无效01 = 中断请求或查询模式10 = DMA0请求
[1:0] 接收模式设置采用哪个方式执行数据写入接收缓冲区00 = 无效01 = 中断请求或查询模式10 = DMA0请求
最新活动更多
-
11月22日立即报名>> 【线下论坛】华邦电子与莱迪思联合技术论坛
-
12月19日立即报名>> 【线下会议】OFweek 2024(第九届)物联网产业大会
-
7.30-8.1马上报名>>> 【展会】全数会 2025先进激光及工业光电展
-
精彩回顾立即查看>> 【线下论坛】华邦电子与恩智浦联合技术论坛
-
精彩回顾立即查看>> 【线下巡回】2024 STM32 全球巡回研讨会
-
精彩回顾立即查看>> 2024先进激光技术博览展
-
10 携程集团,彻底爆了!
发表评论
请输入评论内容...
请输入评论/评论长度6~500个字
暂无评论
暂无评论