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区分 ...
随机推荐
- linux 存储技术 部署iSCSI NFS Multipath多路径
存储技术应用存储是根据不同的应用环境通过采取合理,安全,有效的方式将数据保存到某些介质上并能保证有效的访问另一方面,它是保证数据完整安全存放的方式或行为存储就是把这两方面结合起来,向客户提供一套数据存 ...
- AttributeError: 'TestLogin' object has no attribute 'driver' in Pycharm for python selenium
自动化测试学习中的问题: 最近几天在写登陆测试,遇到一个问题,困惑我的几个小时......... 我各种百度,花费大量时间,才找到我的问题的根本所在,最终解决了我的问题,主要是大小写的问题def Se ...
- Python模拟登录成功与失败处理方式(不涉及前端)
任务说明: (1) 用户输入用户名,如不存在此用户不能登录: (2) 用户在输入密码时,如果连续输入三次错误,则该用户被锁定一段时间; (3) 用户被锁定一段时间后,可再次进行尝试登录: 程序使用库: ...
- Caused by: java.lang.ClassNotFoundException: org.hibernate.annotations.common.reflection.MetadataPro
1.错误描述 信息: MLog clients using java 1.4+ standard logging. 2014-7-12 19:29:20 com.mchange.v2.c3p0.C3P ...
- arttemplate与webpack的应用
模板渲染使用arttemplate,使用方法如下: 普通使用 普通使用把渲染模板写在<script>标签里面,引入arttemplate.js,从服务端接收数据(数组与对象的形式),然后调 ...
- 使用PHPword中文乱码并且下载的方法
如果你的编码格式是utf-8的话就用这个 1.找到 Section.php 的 addText 函数 $givenText = utf8_encode($text); 改成 $givenText = ...
- Java汉字乱码问题
window->preferences->输入框输入"encod" 将text file encoding 从default改成other utf-8 同理,css,H ...
- 【NOIP2006】能量项链
题面 Description 在 Mars 星球上,每个 Mars 人都随身佩带着一串能量项链.在项链上有 N 颗能量珠.能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某个正整数.并且,对于相邻的 ...
- [CQOI2007]余数求和
大于k的部分直接加k 对于小于等于k的cnt个数 ans=cnt*k - Σ(k/i * i) 然后k/i在一段区间内不变,这段区间直接可以数列求和 # include <bits/stdc++ ...
- 【MyBatis源码分析】插件实现原理
MyBatis插件原理----从<plugins>解析开始 本文分析一下MyBatis的插件实现原理,在此之前,如果对MyBatis插件不是很熟悉的朋友,可参看此文MyBatis7:MyB ...