FPGA串口接收与发送 详解 (part 1 ) |
您所在的位置:网站首页 › 串口发送流程图怎么设置的 › FPGA串口接收与发送 详解 (part 1 ) |
关于串口的基本知识我在上一篇文章中有提及,链接如下:串口通讯详解_居安士的博客-CSDN博客 FPGA串口的完整设计包括波特率生成,单个数据的接收与发送,一帧数据的接收与发送,我把内容分散来进行 目录 一、波特率生成程序 1.1发送数据波特率生成 1.2接收数据波特率生成 二、单个数据发送程序 如上图,串口数据传输流程如下: 1、平时数据线处于“空闭”状态(1状态)。 2、当要发送或者接收数据时,UART改变TX、RX数据线的状态(变为0状态)并维持1位的时间,这样,接收方检测到开始位后,就开始一位一位地检测数据线的状态,得到所传输的数据。 3、UART一帧中可以有5、6、7或8位数据,发送方一位一位地改变数据线的状态,将它们发送出去,首先发送最低位。 4、如果使用奇偶校验功能,UART在发送完数据位后,还要发送1个校验位。有两种校验方法,即奇校验和偶校验(数据位连同校验位中“1”的数目分别等于奇数或偶数)。 5、发送停止位,数据线恢复到“空闭”状态(1状态)。停止位的长度有三种:1位、1.5位、2位。 一、波特率生成程序 1.1发送数据波特率生成传输数据之前,UART之间要约定数据的传输速率(即每位所占时间,其倒数成为波特率)、数据的帧格式(即有多少个数据位、是否使用校验位、是奇校验还是偶校验、有几位停止位)。因此,我们首先需要确定波特率,根据波特率确定位传送时间宽度Td。 Td=波特率的倒数 波特率就是每秒钟传输的数据位数。 串口典型的传输波特率600bps,1200bps,2400bps,4800bps,9600bps,19200bps,38400bps,57600bps,115200bps。 在这里我们用115200bps的传输波特率: Td=1115200 =8680×10^9 s = 8680ns因此用计数器构造一个8680ns的clk PLL产生的clk为25MHZ,T=40ns 8680=40×217 217=8’b1101 1001 需要一个8位的计数器 module TX_baud( input clk_25m, input reset, input TX_start,//开始发送数据标志位 output TX_baud_en//发送数据波特率使能 ); reg [7:0] TX_baud_cnt; always@(posedge clk_25m)begin if(reset)begin TX_baud_en |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |