临近研三了,自己倾向于要找数字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串口的更多相关文章

  1. Dubbo -- 系统学习 笔记 -- 入门

    Dubbo -- 系统学习 笔记 -- 目录 入门 背景 需求 架构 用法 入门 背景 随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行, ...

  2. Linux系统学习笔记:文件I/O

    Linux支持C语言中的标准I/O函数,同时它还提供了一套SUS标准的I/O库函数.和标准I/O不同,UNIX的I/O函数是不带缓冲的,即每个读写都调用内核中的一个系统调用.本篇总结UNIX的I/O并 ...

  3. Dubbo -- 系统学习 笔记 -- 配置

    Dubbo -- 系统学习 笔记 -- 目录 配置 Xml配置 属性配置 注解配置 API配置 配置 Xml配置 配置项说明 :详细配置项,请参见:配置参考手册 API使用说明 : 如果不想使用Spr ...

  4. Dubbo -- 系统学习 笔记 -- 示例 -- 集群容错

    Dubbo -- 系统学习 笔记 -- 目录 示例 想完整的运行起来,请参见:快速启动,这里只列出各种场景的配置方式 集群容错 在集群调用失败时,Dubbo提供了多种容错方案,缺省为failover重 ...

  5. Dubbo -- 系统学习 笔记 -- 配置参考手册

    Dubbo -- 系统学习 笔记 -- 目录 配置参考手册 <dubbo:service/> <dubbo:reference/> <dubbo:protocol/> ...

  6. Dubbo -- 系统学习 笔记 -- 快速启动

    Dubbo -- 系统学习 笔记 -- 目录 快速启动 服务提供者 服务消费者 快速启动 Dubbo采用全Spring配置方式,透明化接入应用,对应用没有任何API侵入,只需用Spring加载Dubb ...

  7. Dubbo -- 系统学习 笔记 -- 示例 -- 泛化引用

    Dubbo -- 系统学习 笔记 -- 目录 示例 想完整的运行起来,请参见:快速启动,这里只列出各种场景的配置方式 泛化引用 泛接口调用方式主要用于客户端没有API接口及模型类元的情况,参数及返回值 ...

  8. Dubbo -- 系统学习 笔记 -- 示例 -- 结果缓存

    Dubbo -- 系统学习 笔记 -- 目录 示例 想完整的运行起来,请参见:快速启动,这里只列出各种场景的配置方式 结果缓存 结果缓存,用于加速热门数据的访问速度,Dubbo提供声明式缓存,以减少用 ...

  9. Dubbo -- 系统学习 笔记 -- 示例 -- 分组聚合

    Dubbo -- 系统学习 笔记 -- 目录 示例 想完整的运行起来,请参见:快速启动,这里只列出各种场景的配置方式 分组聚合 按组合并返回结果,比如菜单服务,接口一样,但有多种实现,用group区分 ...

随机推荐

  1. Lua Table转C# Dictionary

    因为在游戏公司做web后台开发,经常会涉及到取游戏服务器的数据库里面读写各种操作. 昨天下午,服务器那边让我读一个配置显示到后台,让运营大佬们可以在web后台配置游戏参数. 本来以为很简单个事情,结果 ...

  2. Navicat远程连接阿里云服务器的mysql

    问题描述: 本机为win10,mysql安装在阿里云(Ubuntu系统)上,本机使用Navicat远程连接mysql,遇到一些坑,求助于阿里云,最终解决,特此记录一下! 安装mysql sudo ap ...

  3. Android自定义Seekbar滑动条,Pop提示跟随滑动按钮一起滑动

    由于项目需要做出此效果,自定义写了一个. 效果图 思路: 原始的seekbar只有滑动条并没有下方的提示文字,所以我们必须要继承Seekbar重写这个控件. 代码: 在values文件夹下新建attr ...

  4. 笔记︱基于网络节点的node2vec、论文、算法python实现

    看到一个很有意思的算法,而且腾讯朋友圈lookalike一文中也有提及到,于是蹭一波热点,学习一下.论文是也发KDD2016 . . 一.主要论文:node2vec: Scalable Feature ...

  5. Srtuts2实现登录界面(不连接数据库)报错(三)

    二月 28, 2014 11:41:20 下午 org.apache.catalina.core.AprLifecycleListener init 严重: An incompatible versi ...

  6. Unhandled event loop exception Java heap space

    1 错误描述 2 错误原因 3 解决办法

  7. Java考查“==”和equals

    /** * */ package com.you.demo; /** * @author YouHaiDong * @date 2015-04-02 */ public class Welcome { ...

  8. Linux显示指定区块大小为1048576字节

    Linux显示指定区块大小为1048576字节 youhaidong@youhaidong-ThinkPad-Edge-E545:~$ df -m 文件系统 1M-blocks 已用 可用 已用% 挂 ...

  9. Flash Builder4.0运行应用程序报错

    1.错误描述 SecurityError: Error #2148: SWF 文件 file:///D:/Adobe Flash Builder 4 Installer/HVBox/bin-debug ...

  10. 利用Python爬虫爬取淘宝商品做数据挖掘分析实战篇,超详细教程

    项目内容 本案例选择>> 商品类目:沙发: 数量:共100页  4400个商品: 筛选条件:天猫.销量从高到低.价格500元以上. 项目目的 1. 对商品标题进行文本分析 词云可视化 2. ...