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区分 ...
随机推荐
- Navicat远程连接阿里云服务器的mysql
问题描述: 本机为win10,mysql安装在阿里云(Ubuntu系统)上,本机使用Navicat远程连接mysql,遇到一些坑,求助于阿里云,最终解决,特此记录一下! 安装mysql sudo ap ...
- 【Unity3D】Unity3D开发《我的世界》之六、创建地形(视频 + 源码)
转载请注明出处:http://www.cnblogs.com/shamoyuu/p/unity_minecraft_06.html 一.引入LibNoise 虽然Unity3D里也有一个Mathf.P ...
- Android内核解读-应用的安装过程
前言 我们知道,在android手机上安装一个apk很简单,只要打开apk文件,默认就会弹出安装界面,然后点击确定,经过若干秒后,apk就安装成功了,可是你知道apk的安装过程是什么吗?你知道andr ...
- RFM模型及R语言实现
每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 一.基本概念 根据美国数据库营销研究所Arth ...
- am335x在ubuntu下使用StarterWare编写裸机程序并在CCS中用Jlink调试
StarterWare在AM335X上的烧录运行 步骤:1.下载安装StarterWare,我们团购的SK需要02.00.00.07版本.最近外网访问慢,我上传到论坛.2.找一张miniSD卡,不需要 ...
- Caused by: java.sql.SQLException: Field 'id' doesn't have a default value
1.错误描述 org.hibernate.exception.GenericJDBCException: error executing work at org.hibernate.exception ...
- (二十五)svn的问题
今天更新代码到svn中的时候出现了错误,准确的说是在操作更新之前的步骤出现了错误,因此对svn有了更近一步的理解. check:下载svn中的代码到指定的储存路径中: update:更新s ...
- java.lang.NullPointerException: No FileItemFactory has been set.
1.错误描述 java.lang.NullPointerException: No FileItemFactory has been set. at org.apache.commons.fileup ...
- java.sql.SQLException: ORA-01841
1.错误描述 body = (null) clientId = "DB719904-1E0C-35DC-725D-86ABCF2B6EEC" correlationId = &qu ...
- ubuntu16.04搭建ftp服务器
因为习惯了vs进行开发,所以对于Linux的代码编辑开发都在vs里面进行,通常我们都是ssh远程登录到Linux,使用ftp或者sftp共享Linux目录里面的文件方便对文件的共享,这里介绍一下在ub ...