RTC实时时间系统学习笔记(一)---------------UART串口
临近研三了,自己倾向于要找数字IC方面的工作,苦于教研室的项目一直都是调板子调板子调板子,真正用到FPGA的很少,,本着"工欲善其事必先利其器"的原则,在网上搜寻如何自学FPGA,一咬牙买了块黑金AX515,拿着上面的小例程一个个实现.第一个我觉得有必要记录一下的就是关于UART串口协议的实现.
由于之前也算接触了FPGA(教研室项目用到了Altera的Cyclone iV),所以拿到板子没有从第一个例程开始,直接上手RTC实时时钟系统的实现.先简单描述一下这个系统的功能(网上的资料大把):这个系统的核心是一块DS1302芯片,它的功能大概可以描述成只要给它一个初始值(符合时间格式),它就可以以这个初始值为基础开始计时.DS1302初始值的设定是通过访问寄存器来完成配置,如hour/minute/second都有各自对应的寄存器地址.在这个例程里面,原本官方的做法是将初始值写死在FPGA程序里,上电就通过IIC总线发送到DS1302,DS1302产生的值也通过IIC总线发送回FPGA,然后FPGA通过UART串口发给PC端,再由串口调试助手显示.官方的初始功能大致就是这样,每次复位初始值都是事先写死的,不能更改,因此我的第一个想法就是通过UART发送一个初始值给FPGA,代替原来写死的做法,这样就可以随时改变初始时间,要完成此功能,就需要了解UART串口的工作原理.
UART全称是Universal Asychronous Receiver/Transmitter,通用异步收发器,它仅需要一根数据线即可完成数据传输,是最简单的总线协议.UART的格式为1个起始位,5~8个数据位,一个奇偶校验位(可选),一个停止位,如图1:
要实现UART串口协议,电路至少需要接收模块、发送模块、波特率产生模块。由于UART串口协议没有时钟信号,因此数据传输的同步只能由波特率产生模块来保证。波特率表示每秒钟传输的位数,单位是波特/秒。为保证正确接收数据,一般接收器采用比波特率更高的时钟频率来对数据进行采样,本项目中接收模块的采样频率和PC发送数据的波特率相等(有待进一步探究),波特率为9600,本地时钟SCLK为50MHz,波特率产生模块先对SCLK进行326分频得到CLK,在接收模块中每隔16个CLK周期接收一位PC端发来的数据,以此保证了每秒传送9600bit数据。数据接收开始的标志是起始位拉低,本例程用下降沿检测电路先检测下降沿,然后另有一个信号监视接收进程的状态,若接收进程处于接收数据的过程中(即一帧数据没有接收完),则拉高;若接收完了一帧,则拉低,即此时进程空闲。当检测到下降沿且进程为空闲状态,则开启一帧数据的接收,每16个CLK时钟周期接收1bit数据,周而复始。其中16是预分频因子(PD),326是波特率因子(BD)。采样接收数据应在数据持续时间的中间时刻进行,例如本例中1bit数据持续16个CLK时钟周期,则采样时刻应在该数据为持续时间的第八个CLK周期进行。本例中BD为326,PD为16,SCLK为50MHz,因此接收模块的实际波特率为50000000/(326*16)=9586,与9600有偏差,累积的位时间错位可能会造成错误,但本例中由于一帧数据的持续时间比较长,这种隐患暂时没有体现出来。
RTC实时时间系统学习笔记(一)---------------UART串口的更多相关文章
- Dubbo -- 系统学习 笔记 -- 入门
Dubbo -- 系统学习 笔记 -- 目录 入门 背景 需求 架构 用法 入门 背景 随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行, ...
- Linux系统学习笔记:文件I/O
Linux支持C语言中的标准I/O函数,同时它还提供了一套SUS标准的I/O库函数.和标准I/O不同,UNIX的I/O函数是不带缓冲的,即每个读写都调用内核中的一个系统调用.本篇总结UNIX的I/O并 ...
- Dubbo -- 系统学习 笔记 -- 配置
Dubbo -- 系统学习 笔记 -- 目录 配置 Xml配置 属性配置 注解配置 API配置 配置 Xml配置 配置项说明 :详细配置项,请参见:配置参考手册 API使用说明 : 如果不想使用Spr ...
- Dubbo -- 系统学习 笔记 -- 示例 -- 集群容错
Dubbo -- 系统学习 笔记 -- 目录 示例 想完整的运行起来,请参见:快速启动,这里只列出各种场景的配置方式 集群容错 在集群调用失败时,Dubbo提供了多种容错方案,缺省为failover重 ...
- Dubbo -- 系统学习 笔记 -- 配置参考手册
Dubbo -- 系统学习 笔记 -- 目录 配置参考手册 <dubbo:service/> <dubbo:reference/> <dubbo:protocol/> ...
- Dubbo -- 系统学习 笔记 -- 快速启动
Dubbo -- 系统学习 笔记 -- 目录 快速启动 服务提供者 服务消费者 快速启动 Dubbo采用全Spring配置方式,透明化接入应用,对应用没有任何API侵入,只需用Spring加载Dubb ...
- Dubbo -- 系统学习 笔记 -- 示例 -- 泛化引用
Dubbo -- 系统学习 笔记 -- 目录 示例 想完整的运行起来,请参见:快速启动,这里只列出各种场景的配置方式 泛化引用 泛接口调用方式主要用于客户端没有API接口及模型类元的情况,参数及返回值 ...
- Dubbo -- 系统学习 笔记 -- 示例 -- 结果缓存
Dubbo -- 系统学习 笔记 -- 目录 示例 想完整的运行起来,请参见:快速启动,这里只列出各种场景的配置方式 结果缓存 结果缓存,用于加速热门数据的访问速度,Dubbo提供声明式缓存,以减少用 ...
- Dubbo -- 系统学习 笔记 -- 示例 -- 分组聚合
Dubbo -- 系统学习 笔记 -- 目录 示例 想完整的运行起来,请参见:快速启动,这里只列出各种场景的配置方式 分组聚合 按组合并返回结果,比如菜单服务,接口一样,但有多种实现,用group区分 ...
随机推荐
- Netty(二):Netty为啥去掉支持AIO?
匠心零度 转载请注明原创出处,谢谢! 疑惑 我们都知道bio nio 以及nio2(也就是aio),如果不是特别熟悉可以看看我之前写的网络 I/O模型,那么netty为什么还经常看到类似下面的这段代码 ...
- Ubutu Chrome 出现adobe flash is out of date的解决方法
我们需要到官网下载flash player,网址:https://get.adobe.com/flashplayer/ 不过这里要说明一下: 一般的浏览器使用的是npapi,即adobe flash ...
- echarts中的option.legend.data has not been defined.
1.错误描述 2.错误原因 var map = function(mapData){ require( [ 'echarts', 'echarts/chart/map' ], function (ec ...
- Flex父子窗口相互调用
Flex父子窗口相互调用 1.设计思路 (1)子窗口调用父窗口的方法 (2)子窗口做了修改后,返回父窗口,父窗口调用子窗口函数 2.设计源码 (1)父窗口 ParentWindow.mxml: < ...
- java.lang.NumberFormatException
1.错误描述 Exception in thread "main" java.lang.NumberFormatException: For input string: " ...
- 获取Filter的三种途径
一.通过CLSID [cpp] view plaincopyprint? IBaseFilter *pF = 0; HRESULT hr = CoCreateInstance(clsid, 0, CL ...
- java的几种引用之二
import java.lang.ref.PhantomReference;import java.lang.ref.ReferenceQueue;import java.lang.ref.SoftR ...
- Python机器学习 (Python Machine Learning 中文版 PDF)
Python机器学习介绍(Python Machine Learning 中文版) 机器学习,如今最令人振奋的计算机领域之一.看看那些大公司,Google.Facebook.Apple.Amazon早 ...
- SPOJ:To the moon
题面 vjudge Sol 主席树模板 # include <bits/stdc++.h> # define RG register # define IL inline # define ...
- 使用JSONP实现跨域
什么是跨域? 简单的来说,出于安全方面的考虑,页面中的JavaScript无法访问其他服务器上的数据,即"同源策略".而跨域就是通过某些手段来绕过同源策略限制,实现不同服务器之间通 ...