串口

例如,UART协议可用于发送和接收RS232/RS485帧。

有一个8位帧的示例,无奇偶校验和一位停止位:

../../../_images/uart.png

总线定义

case class Uart() extends Bundle with IMasterSlave {
  val txd = Bool() // Used to emit frames
  val rxd = Bool() // Used to receive frames

  override def asMaster(): Unit = {
    out(txd)
    in(rxd)
  }
}

UartCtrl

库中实现了Uart控制器。该控制器的特性是使用一个采样窗口读取 rxd 引脚,然后使用多数投票制来过滤其值。

IO名称

方向

类型

描述

config

in

UartCtrlConfig

用于设置控制器的时钟分频器/奇偶校验/停止/数据长度

write

slave

Stream[Bits]

用于请求帧传输的反压流端口

read

master

Flow[Bits]

用于接收解码帧的流端口

uart

master

Uart

与实际实现的连接接口

控制器可以通过一个 UartCtrlGenerics 配置对象来实例化:

属性

类型

描述

dataWidthMax

Int

帧内最大位数

clockDividerWidth

Int

内部时钟分频器的位宽

preSamplingSize

Int

指定在一个UART波特开始时丢弃多少samplingTick

samplingSize

Int

指定有多少samplingTick用于采样UART波特中段的 rxd

postSamplingSize

Int

指定在UART波特结束时丢弃多少个samplingTick