新闻中心

EEPW首页>嵌入式系统>设计应用> 嵌入式UART接口模块的设计

嵌入式UART接口模块的设计

作者: 时间:2011-08-31 来源:网络 收藏

移位寄存器仿真波形图

图4 移位寄存器仿真波形图

  如图4所示,移位寄存器在复位后的每个时钟的上升沿工作。由于数据发送时是先发送有效数据的最低位,因此移位寄存器是将接收的数据由高位向低位移动,dout输出移位寄存器的最低位。图中的regs数据用16进制表示。

  2.3 波特率发生器模块

  波特率发生器的功能是产生和RS232通信所采用的波特率同步的时钟,这样才能方便地按照RS232串行通信的时序要求进行数据接收或者发送。比如,波特率为9600b/s,即每秒传输9600b数据,则同步的波特率时钟频率为9600Hz,周期为1/9600=0.10417。

  设计波特率时钟的基本思路就是设计一个计数器,该计数器工作在速度很高的系统时钟下,当计数器计数到某数值时将输出置高,再计数到一定的数值后再将输出置低,如此反复便能够得到所需的波特率时钟。该系统所用的FPGA系统时钟为50MHz,RS232通信的波特率为9600b/s,则波特率时钟的每个周期相当于

  5208个系统时钟周期。假如要得到占空比为50%的波特率时钟,只要使得计数器在计数到1604时将输出置高,之后在计数到5208时将输出置低并且重新计数,就能实现和9600波特率同步的时钟。

  为了便于仿真,使计数器计到2时将输出置高,之后计到4时将输出置地并且重新计数。波特率发生器的仿真波形图如图5所示。

波特率发生器仿真波形图

图5 波特率发生器仿真波形图

  观察波形可以看到波特率发生器每经过4个时钟周期输出1个完整的波特率时钟周期,占空比为1/2,并且在每次输出波特率时钟周期之后输出1个系统时钟脉宽的提示信号indicator,UART通过此信号来了解波特率发生器已输出的波特率时钟周期个数。由波形图可见波特率发生器的工作完全满足设计的要求。

  2.4 计数器模块

  计数器模块的功能是可控的,在输入时钟的驱动下进行计数,当达到计数上阈时给UART内核一个提示信号。在不同的工作状态下,计数器模块的输入时钟是不同的。UART在数据发送之前需要进行数据加载(即将串行序列保存在移位寄存器内),在此工程中计数器模块的输入时钟为系统时钟,因为此时移位寄存器也工作在系统时钟下。除了数据加载,另外2个需要计数器模块的过程是数据接收和数据发送。

  由于这两个过程中移位寄存器工作在波特率时钟下,所以计数器模块的时钟就是与波特率时钟同步的波特率发生器提示信号indicator,这样每输出1个完整的波特率时钟周期计数器就能增加1。

  计数器的仿真波形图如图6所示。

计数器仿真波形图

图6 计数器仿真波形图

  计数器在复位后并且ce有效时开始计数,并且在第10个时钟周期输出提示信号overflow。

  2.5 发送数据缓冲器模块

  发送数据缓冲器模块的功能是将要发送的并行数据转换成串行数据,并且在输出的串行数据流中加人起始位和停止位。缓冲器首先将要发送的8位数据寄存,并在最低位后添加起始位‘0’,在最高位前添加停止位‘1’,组成10位要发送的数据,然后根据UART内核模块的计数值将相应的数据送入移位寄存器输入端。

  UART内核模块输出的计数值是从0依次计到9,即先将要发送数据的最低位送入移位寄存器。发送数据缓冲器的仿真波形图如图7所示。

linux操作系统文章专题:linux操作系统详解(linux不再难懂)


评论


相关推荐

技术专区

关闭