iTop-4412 裸机程序(十三)- 串口初始化

目录

  • Exynos4412 串口介绍
  • 串口框图
  • 串口的三种常见模式
  • 串口初始化


Exynos4412 串口介绍

见 《SEC_Exynos4412_Users Manual_Ver.1.00.00.pdf》Section.28 Universal Asynchronous Receiver and Transmitter

  • Exynos4412 中的通用异步接收和发送器(UART)提供 4 个独立通道,具有通用异步和串行输入/输出(I/O)端口(CH0 到 CH3)。它还提供一个与全球定位系统(GPS)通信的专用通道(CH4)。所有端口都基于中断或基于 DMA 的模式运行。UART 生成一个中断或 DMA 请求在 CPU 和UART 之间传输数据。UART 支持z最大 3Mbps的比特率。每个 UART 通道包含两个 FIFO(先进先出队列)接收和传输数据。

串口框图

UART - Universal Asynchronous Receiver and Transmitter,通用异步接收器与发送器。从串口的名字上就可以得知串口的一些特性:异步、接收器与发送器。从下图我们可以得知 Exynos4412 的一些工作原理。
iTop-4412 裸机程序(十三)- 串口初始化_第1张图片

  • 串口具有一个发送缓存区和一个接收缓存区。在 non-FIFO 模式下只能缓存一个字节的数据。在 FIFO 模式缓存的数据由 FIFO 寄存器决定。
  • 串口工作的时钟由一个波特率发生器产生,波特率发生器实际上是一个分频器,将从 Peripheral Bus 得到的时钟分频供给串口使用。由下图可知,该总线时钟的时钟域是 PERI-L,典型的时钟频率是 100MHz
    iTop-4412 裸机程序(十三)- 串口初始化_第2张图片

串口的三种常见模式

由于在普通模式下,发送缓存区和接收缓存区只有一字节,所以发送和接收数据就需要CPU不断地切换上下文,效率低下。所以一般需要其他方式扩大发送和接收缓存区。

  • FIFO
    FIFO(First In First Out,先进先出),是一种先进先出的数据缓存器,他与普通存储器的区别是没有外部读写地址线。详细的本篇博客不作介绍,可以参考《深入理解FIFO(包含有FIFO深度的解释)》一文

  • DMA
    DMA(Direct memory access,直接内存访问)。DMA本来是DSP中的一种技术。DMA技术的核心就是在交换数据时不需要CPU参与,模块可以自己完成

  • Ir-Mode
    Exynos 4412 UART模块支持红外(IR)传输和接收。

    红外通信的原理是发送方固定间隔时间向接收方发送红外信号(表示1或0)或者不发送红外信号(表示0或者1),接收方每隔固定时间去判断有无红外线信号来接收1和0.

    红外通信和串口通信非常像,都是每隔固定时间发送1或者0(判断1或0的物理方式不同)给接收方来通信。

串口初始化

串口初始化可以分成以下几个步骤:

  1. 时钟初始化
    由图Table7-1可知,UART使用的时钟总线是 PERI-L,时钟典型值是 100MHz。
    iTop-4412 裸机程序(十三)- 串口初始化_第3张图片由上图可知,串口的时钟由CLK_SRC_PERIL0和CLK_DIV_PERIL0控制。我们选择SCLKMPLL_USER_T和8分频
    SCLKMPLL的时钟在时钟初始化已知为800MHz,这样就可以得到100MHz的串口时钟信号。
  2. 设置串口模式
    串口模式由GPIO控制,需要将串口对应的GPIO口设置为串口模式。
  3. 设置数据位、停止位、奇偶校验位、其他串口配置
    由ULCONn、UCONn、UFCONn、UMCONn寄存器控制
  4. 设置波特率
    波特率的计算由UBRDIVn和UFRACVALn寄存器控制,计算方式如下:
DIV_VAL = UBRDIVn + UFRACVALn/16
DIV_VAL = (SCLK_UART/(bps * 16)) - 1
例如在100MHZ的串口时钟信号下计算得到115200bps的波特率,则	
DIV_VAL = (100000000/(115200 * 16)) – 1 = 13.02 – 1 = 12.02
UBRDIVn = 12 (integer part of DIV_VAL)
UFRACVALn/16 = 0.02
UFRACVALn = 0
  1. 读写缓存区及对应状态寄存器
    UTXHn:发送缓存区
    URXHn:接收缓存区
    UTRSTATn:读写缓存区状态

2022年06月14日

Kilento

你可能感兴趣的:(Exynos4412,Linux,单片机,stm32,嵌入式硬件)