新闻中心

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

嵌入式UART接口模块的设计

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

发送数据缓冲器仿真波形图

图7 发送数据缓冲器仿真波形图

  由波形图可知,发送数据缓冲器在复位后,在输入的计数值si_count为0时,send_si输出起始位‘0’。在输入的计数值si_count为1~8时,send_si分别输出send_bus上相应的数据位。在输入的计数值si_count为9时,send_si输出停止位‘1’。

  2.6 UART内核模块

  UART内核模块是整个设计的核心。在数据接收时,UART内核模块负责控制波特率发生器和移位寄存器,使得移位寄存器在波特率时钟的驱动下同步地接收并且保存RS232接收端口上的数据。在数据发送时,UART内核模块首先根据待发送数据产生完整的发送数据序列(包括起始位、数据位和停止位),之后控制移位寄存器将序列加载到移位寄存器的内部寄存器里,最后再控制波特率发生器驱动移位寄存器将数据串行输出。UART内核模块的主要功能是控制数据接收、数据加载和数据发送的过程,这可以用状态机来实现,其状态图如图8所示。

UART内核状态转移图

图8 UART内核状态转移图

  (1)数据加载过程。数据的接收过程可以定义3个状态:空闲“idle”状态、接收“receive”和接收完成“receive_over”。UART内核模块在复位后进入空闲状态。如果信号检测器检测到数据传输,即new_data=‘1’,UART内核检测到此信号就会进入接收状态。

  在UART进入由空闲状态转为接收状态过程中,需要进行一系列的接收预备操作,包括将子模块复位、选择移位寄存器串行输入数据以及选择移位寄存器的输入时钟等。进入接收状态后,波特率发生器开始工作,其输出波特率时钟驱动移位寄存器同步的存储RS232接收端口上的数据,并且其提示信号“indicator”驱动计数器进行计数。当所有数据接收完成,计数器也达到了其计数的上阈,此时overflow=‘1’,通知UART内核进入接收状态。UART内核进入接收完成状态的同时,会检奇偶校验的结果,同时使得子模块使能信号无效,以停止各个子模块。

  UART内核的接收完成状态仅保持1个时钟周期,设置这个状态的作用是借用一个时钟周期复位信号检测器,准备接收下次数据传输。

  检测器,准备接收下次数据传输。

  (2)数据加载和发送过程。数据加载和发送的过程都是为发送数据而设定的,所以将它们放在一起进行介绍,可以用4个状态来实现上述的过程,即空闲、加载、发送和发送完成。其中的空闲状态是UART内核复位后的空闲状态,与上面介绍的数据接收过程的空闲状态一致。数据加载过程在数据发送过程之前进行。

  UART内核复位后进入空闲状态,当探测到发送控制信号有效时,即send=‘1’,便会进入加载状态开始数据加载。在进入加载状态的同时,UART内核会将移位寄存器、计数器复位,并且通过选择信号使得移位寄存器的输入为发送数据缓冲器模块产生的串行数据序列,使得移位寄存器和计数器的工作时钟为系统时钟。

  进入加载状态后,在UART内核控制下,发送数据缓冲器模块会将完整的待发送序列加载到移位寄存器的数据输入端,发送的序列是和系统时钟同步的,移位寄存器在系统时钟的驱动下不断读入输入端数据并保存在内部寄存器内。在移位寄存器加载数据的同时,计数器也在时钟的驱动下进行计数,由于都是工作在系统时钟下,所以当所有数据被加载时,计数器也达到了计数的上阈(即串行数据的总量),此时overflow=‘1’,通知UART内核进入发送状态。UART内核进入发送状态的同时会改变几个选择信号,比如将移位寄存器的时钟设为波特率时钟,将计数器时钟设为波特率的提示信号,最重要的是将输出信号送到RS232的发送端口TxD上。发送的过程和接收类似,移位寄存器在波特率时钟的驱动下内部寄存器的数据串行的发送出去,同时计数器在波特率发生器的提示信号驱动下进行计数。

  UART内核在计数器到达计数上阈后便进入发送完成模式,并且输出发送完成信号。

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


评论


相关推荐

技术专区

关闭