学习内容
将介绍ZYNQ 的定时器的原理和实现。
实现步骤

1 定时器中断原理分析

定时器是 ARM 系统中的必要单元,在ARM 开发过程中起到重要的作用。定
时器作为处理器外设独立于处理器之外单独运行,是处理器系统不可或缺的最重
要外设,任何一个单片或者处理器都有一个或者多个定时器。
定时器的使用场景主要可以分为产生中断,延时,计数器三类:
(1)时钟中断。这种时钟中断一般是周期性的,我们跑操作系统都需要有一个
心跳时钟,比方说UCOS 系统,每10ms 中断一次,进入核心态管理状态,对有
延时的进程处理一下,并处理因此带来的调度状态的变化。定时中断也用在前后
台程序,前后台程序实际最简单操作系统的雏形,中断处理程序周期性到来做一
些检查工作并触发一些新的状态。
(2)实现延迟。最早接触单片机我们可能用到的循环操作来实现延迟,这种方
式计算不准确,并且容易受中断影响而造成时间增加,所以都采用定时器方式延
迟。我们来简单看一下SDK 中 usleep 函数的实现:(ctlr + 鼠标左键就能找到函
数的定义)。
s32 usleep(u32 useconds)
{
XTime tEnd, tCur;
XTime_GetTime(&tCur);
tEnd = tCur + (((XTime) useconds) * COUNTS_PER_USECOND);
do
{
XTime_GetTime(&tCur);
} while (tCur < tEnd);
return 0;
}
实现思路就是先获取在的时刻 tCur,之后计算延迟了 ,之后计算延迟了 useconds之后的时刻 之后的时刻 tEnd, 之后不断询问定时器当前刻,随着间流逝就会到达或者超过 tEnd, 此时认 为延迟完成,就可以退出了。这里 XTime_GetTime读的是全局时钟,后面详细 说。
(3)计数器 conter 也都算作了定时器 也都算作了定时器 timer里,可以用来记录引脚输入的边缘 个数,也可以用于产生 pwm 波。在 ZYNQ 平台 非常典型的是 TRIPLE TIMER CONTER,这些是处理器 PS部分保留的功能 。

2 分析 ZYNQ 的 Timer


分析 zynq 用户手册 UG585 中的 Timer 模块介绍。 模块介绍。 Global Timer Counter 经常 用作系统时钟基准, 看门狗可以于防止死锁用作系统时钟基准, 看门狗可以于防止死锁CPU_3x2x 代表了 CPU 的时钟域。
下面对 ZYNQ PS 部分使用的定时器主要寄存进行析:
Private_Timer_Load_Register

Private_Timer_Counter_Register

Private_Timer_Control_Register

Private_Timer_Interrupt_Status_Register

私有定时器中断状态寄存: 31:1 为 UNK/SBZP ,第 0 位为状态提示,复 位为状态提示,复 位为状态提示,复 位 值0,当计数寄存器为 0 时会自动置位。

3 分析 SDK所提供的函数和宏定义

Step1 新建最小系统的工程,导入 SDK 。


Step2 在 SDK 中新建 helloworld 模板 Application Project。

可在 ps_timer_bsp文件夹下 ps7_cortexa9_0文件夹, libsrc为 SDK 自动生成的设 备驱动文件,其中 scutimer_v2_1 将是本节中使用到的主要代码。
Step3 分析 xscutimer.h 中的宏定义函数和 xscutimer.c 中的函数。
xscutimer.h 中通过对地址操作实现寄存器设置,并且进行宏定义方便用户的调 用

例如 XscuTimer_EnableInterrupt 就是通过使用基地址和偏移相加,对 就是通过使用基地址和偏移相加,对 Register Private_Timer_Control_Registe 寄存器进行操作,对 寄存器进行操作,对 IRQ_Enable 位进行 赋值实现使能中断。


Step4向SDK中添加课程提供的源代码。


Step5分析主函数中的定时器模块使用。

系统中断初始化


定时器中断设置

Step6 下 载代码到板上,在串口即可观测效果至此本课结束最后总一下 载代码到板上,在串口即可观测效果至此本课结束最后总一下 载代码到板上,在串口即可观测效果至此本课结束最后总一下 载代码到板上,在串口即可观测效果至此本课结束最后总一定时器中断产生和处理的过程。

ZYNQ7000 学习(三十) 定时器终端的原理和实现相关推荐

  1. 推荐系统遇上深度学习(三十九)-推荐系统中召回策略演进!

    推荐系统中的核心是从海量的商品库挑选合适商品最终展示给用户.由于商品库数量巨大,因此常见的推荐系统一般分为两个阶段,即召回阶段和排序阶段.召回阶段主要是从全量的商品库中得到用户可能感兴趣的一小部分候选 ...

  2. 深度学习三十年创新路

    深度学习三十年创新路 编者注:深度学习火了,从任何意义上,大家谈论它的热衷程度,都超乎想象.但是,似乎很少有人提出不同的声音,说深度学习的火热,有可能是过度的繁荣,乃至不理性的盲从.而这次,有不同的想 ...

  3. Linux的冒号和波浪号用法,shell 学习三十五天---波浪号展开与通配符

    shell 学习三十五天---波浪号展开与通配符 shell 中两种与文件名相关的展开.第一种是波浪号展开,第二种是通配符展开式. 波浪号展开 如果命令行字符串的第一个字符为波浪号(~),或者变量指定 ...

  4. Linux学习之CentOS(三十六)--FTP服务原理及vsfptd的安装、配置

    本篇随笔将讲解FTP服务的原理以及vsfptd这个最常用的FTP服务程序的安装与配置... 一.FTP服务原理 FTP(File Transfer Protocol)是一个非常古老并且应用十分广泛的文 ...

  5. ZYNQ7000学习(十八)多路 PWM 原理分析以及实现试验

    多路 PWM 原理分析以及实现试验 基本原理(参考 http͗//www͘fpga4fun͘com/PWM_D_C͘html) PWM_(Pulse_Width_Modulation) A PWM t ...

  6. 【深度学习】深度学习三十问!一位算法工程师经历30+场CV面试后总结的常见问题合集(含答案)...

    作者丨灯会 来源丨极市平台 编辑丨极市平台 导读 作者灯会为21届中部985研究生,凭借自己整理的面经,去年在腾讯优图暑期实习,七月份将入职百度cv算法工程师.在去年灰飞烟灭的算法求职季中,经过30+ ...

  7. Java多线程学习三十八:你知道什么是 CAS 吗

    CAS 简介 CAS 其实是我们面试中的常客,因为它是原子类的底层原理,同时也是乐观锁的原理,所以当你去面试的时候,经常会遇到这样的问题"你知道哪些类型的锁"?你可能会回答&quo ...

  8. 深度学习三十问!一位算法工程师经历30+场CV面试后总结的常见问题合集(含答案)...

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨灯会 来源丨极市平台 编辑丨极市平台 极市导读 作者灯会为21届中部985研究生,凭借自己整理的 ...

  9. Java多线程学习三十四:使用 Future 有哪些注意点?Future 产生新的线程了吗

    Future 的注意点 1. 当 for 循环批量获取 Future 的结果时容易 block,get 方法调用时应使用 timeout 限制 对于 Future 而言,第一个注意点就是,当 for ...

最新文章

  1. python 空指针_python 空指针
  2. tablestore换mysql_mysql数据迁移到tablestore
  3. Reveal.js:把你的 Markdown 文稿变成 PPT
  4. Windows下tomcat进程监控批处理程序
  5. Seata多微服务互相调用_全局分布式事物使用案例_@GlobalTransactional验证---微服务升级_SpringCloud Alibaba工作笔记0065
  6. C#中ToString()格式详解
  7. 剑指offer之字符流中第一个不重复的字符
  8. 【操作系统】死锁-思维导图
  9. 2017 Multi-University Training Contest - Team 4 hdu6071 Lazy Running
  10. 阿里云DataV数据可视化 回调ID详解 API数据展示
  11. 【基础教程】Python的特点(优点和缺点)
  12. Logo小变动,心境大不同,SVG矢量动画格式网站Logo图片制作与实践教程(Python3)
  13. 新年将至, 程序员如何以代码送出新春祝福
  14. 数据的封装与解封装:TCP/IP五层协议
  15. 直方图均衡化、规定化、局部直方图、直方图统计
  16. 嵌入式软件测试(黑盒测试)-----三年嵌入式软件测试的理解
  17. ds18B20_verilog
  18. echarts 盒须图配置
  19. 计算机用户名密码不知道了怎么改,电脑系统账号administrator设置了密码,密码忘记了怎么办?...
  20. shell判断所输整数是否为质数

热门文章

  1. 【电脑使用】硬盘无法引导进入系统,无法退出BIOS
  2. 解决微信环境下无法通过链接唤起App Store、微信访问App Store 链接白屏问题
  3. python 检测车速_Python+树莓派监测汽车车速
  4. 朋也社区 v5.2.0 更新,新增手机号,微信登录外加主题一套
  5. java中UPD的一个简单的例子
  6. 通过uart串口和printf函数打印
  7. numpy中数据不以科学记数法显示
  8. 基于单片机的电子琴设计
  9. 网站反爬指南:政府网站篇
  10. 探索C++0x: 1. 静态断言(static_assert)