首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

基于FPGA实现异步串行通信(2)

基于FPGA实现异步串行通信(2)

1.2 FPGA波特率发生器模块
   
串口通信,就是RS 232/RS 485通信,要求通信的双方波特率等通信格式一样才可以通信成功。在电子通信领域,波特率(Baud Rate)即调制速率,指的是信号被调制以后在单位时间内的变化,即单位时间内载波参数变化的次数。它是对符号传输速率的一种度量,1 Baud即指每秒传输1个符号。在基于FPGA实现通用异步通信时,波特率发生器是一个必不可少的部分。波特率发生器实际上就是一个分频器,可以根据给定的系统时钟频率和要求的波特率算出波特率分频因子,算出的波特率分频因子作为分频器的分频数从而产生所需的时钟频率。在设定发送和接收使用相同的波特率的情况下,UART只需要一个波特率发生器就可以了。
    系统提供的时钟频率为10 MHz,数据信号的传输速率为115 200 Hz,波特率发生器产生的时钟对数据信号进行采样,设定对传输的数据信号进行3倍采样,则波特率发生器产生的频率为:
    3×115 200=345 600 Hz
    那么就可以根据给定的系统时钟和要求的波特率计算出分频因子:
    1×107/345 600=28.94
    对时钟进行28.94分频是很难实现的,因此取整数30作为分频因子。尽管这样会使得分频得到的时钟会比所需的345 600 Hz高3.5%,但这样微小的变化不会影响实际电路的工作。其仿真图如图3所示。


1.3 FPGA数据发送模块
   
发送过程就是把并行总线上的数据发送到串行总线上。数据发送的过程可以分为空闲状态、加载状态、发送状态和发送完成状态。空闲状态就是UART内核复位后的空闲状态,等待加载状态。UART进入空闲状态后,当检测到发送控制信号有效时,就进行加载状态并开始进行数据的加载。加载状态就是发送模块按照串行发送的顺序将要发送的这一帧数据加载到移位寄存器内,将移位寄存器和计数器都复位,使移位寄存器和计数器的工作时钟为系统时钟。当计数器达到了计数的上限时,它会产生一个指示信号通知UART内核进入发送状态。UART内核状态机进入发送状态的同时要改变相应信号,这时移位寄存器时钟必须为波特率时钟,最重要的是将输出信号送到RS 232的发送端口TXD上。在发送状态,也需要计数器的控制,当计数器达到了计数的上限时,它会产生一个信号通知UART内核进入发送完成状态。当UART内核状态机进入发送状态后,并产生发送完成中断信号。这样就可以把数据从串行端口上发送出去了。发送数据和接收数据的状态转换图如图4所示。
    发送一帧数据的部分程序如下:
   
    发送一帧数据的仿真结果如图5所示。

继承事业,薪火相传
返回列表