FPGA实验——串口发送/接收学习笔记
2015-07-23 14:54
239 查看
1. 基础知识
1.1 波特率的概念
波特率(Baud rate),指的是信号被调制以后在单位时间内的变化,即单位时间内载波参数变化的次数,如每秒钟传送240个字符,而每个字符格式包含10位(1个起始位,1个停止位,8个数据位),这时的波特率为240Bd,比特率为10位*240个/秒=2400bps。又比如每秒钟传送240个二进制位,这时的波特率为240Bd,比特率也是240bps。(但是一般调制速率大于波特率,比如曼彻斯特编码)。波特率,可以通俗的理解为一个设备在一秒钟内发送(或接收)了多少码元的数据。它是对符号传输速率的一种度量,1波特即指每秒传输1个码元符号(通过不同的调制方式,可以在一个码元符号上负载多个bit位信息),1比特每秒是指每秒传输1比特(bit)。单位“波特”本身就已经是代表每秒的调制数,以“波特每秒”(Baud per second)为单位是一种常见的错误。
1.2 串口发送/接收的比特率的时钟计算
串口的比特率为9600bps时,dt = 1s/9600 = 104.1667us。即每bit数据发送的时间间隔为 dt = 104.1667us。当 主系统时钟MCLK = 50MHz,其周期T = 0.02us。则要计数 dt/T = 104.1667/0.02 = 5208 个MCLK才发送一位(bit))数据。
则在RS232(串口)的时钟周期 rsT = dt,要计数5208个MCLK。当时钟为方波时,只要计数5208/2 = 2604个MCLK,就翻转IO口产生需要的时钟信号。
1.3 代码
`timescale 1ns / 1ps module UART_BpsClkGen( // << input port mclk, // 50MHz master clock rst, // reset signal bps_startFlag, // clk start generate flag // >> output port bps_clk // clk output signal ); input mclk,rst,bps_startFlag; output bps_clk; reg[12:0] cnt_mclk = 13'd0; // mclk counter reg bps_clk_r = 1'b0; // bps clk regsister `define BPS_CNT (5208) `define BPS_CNT_HALF (`BPS_CNT/2-1) always @ (posedge mclk, posedge rst) begin if(rst) begin cnt_mclk <= 13'd0; end else if(cnt_mclk > `BPS_CNT_HALF) begin bps_clk_r <= ~bps_clk_r; cnt_mclk <= 13'd0; end else begin cnt_mclk <= cnt_mclk + 1'b1; end end assign bps_clk = bps_clk_r&bps_startFlag; endmodule
相关文章推荐
- [ASP.NET MVC 小牛之路]14 - Unobtrusive Ajax
- Android版本和API Level对应关系
- Hadoop命令
- 算法导论-最大子数组问题-线性时间复杂度算法分析与实现
- Linux 远程控制 SSH 配置
- Linux自启动设置详解
- Search a 2D Matrix II
- C++中内置变量的初始化
- android webview js交互 第一节 (java和js交互)
- P2P平台的"我要借款"功能,是否需要上传借款人的相关资料
- [ASP.NET MVC 小牛之路]13 - Helper Method
- 高精度加法模板
- Keil 界面配置保存和共享
- Android代码内存优化建议-OnTrimMemory优化
- 查看ssh是否已启动
- P2P平台的"我要借款"功能,是否需要上传借款人的相关资料
- Swift学习: The Swift Programming Language 01
- Jfinal学习笔记
- Mysql日期处理方式
- 送水(笑话)