热门标签 | HotTags
当前位置:  开发笔记 > 程序员 > 正文

第十天:定时器、看门狗、PWM、蜂鸣器、RTC原理及代码实战

什么是定时器定时器是SoC中常见外设定时器与计数器。计数器是用来计数的(每
  1. 什么是定时器
    1. 定时器是SoC中常见外设
      1. 定时器与计数器。计数器是用来计数的(每隔一个固定时间会计一个数);因为计数器的计数时间周期是固定的,因此到了一定时间只要用计数值 x 计数时间周期,就能得到一个时间段,这个时间段就是我们定的时间(这就是定时器了)
      2. 定时器/计数器作为SoC的外设,主要用来实现定时执行代码的功能。定时器相对于SoC来说,就好像闹钟相对于人来说意义一样。       对于单核CPU,是单线程的,在同一时间内,只能做一件事情,就像人需要闹钟,SoC需要定时器一样

 

  1. 定时器有什么用
    1. 定时器可以让SoC在执行主程序的同时,可以(通过定时器)具有计时功能,到了一定时间(计时结束),定时器会产生中断CPU,CPU会去处理中断并执行定时器中断的ISR.从而去执行预先设定好的时间,     重点是产生中断的条件是定时器产生的,定时器产生的信号就是计时结束标志.
    2. 定时器就好像CPU 的一个秘书一样,这个秘书专门帮CPU计时,并到时间后提醒CPU要做某件事情.所以CPU有了定时器之后,只需预先自己xx时间之后必须要做的事情绑定到定时器中断ISR即可,到了时间之后定时器就会以中断的方式提醒CPU来处理这个事情。
  2. 定时器的原理
    1. 定时器计时其实是通过计数来实现的。定时器内部有一个计数器,这个计数器更加·根据一个时钟(这个时钟源来自于ARMAPB总线,然后经过内部时钟模块内部的分频器来分频得到)来工作。 每隔一个时钟周期,计数器就计一次,定时器的时间就是计数器计数值x时钟周期。
    2. 定时器内部有一个寄存器TCNT,计时开始时我们会把一个总的计数值(譬如300)放入TCNT寄存器中,然后每隔一个时钟周期(假设1msTCNT中的值会自动减1(硬件自动完成,不需要CPU软件去干预),直到TCNT中减为0的时候,TCNT就会触发定时器中断。
    3. 定时时间是由两个东西共同决定的:一个是TCNT中的计数值,一个是时钟周期。譬如上例中,定时周期就为300x1ms = 300ms

 

  1. 定时器和看门狗、RTC、蜂鸣器
    1. 这几个东西都是和时间有关的部件
    2. 看门狗其实就是一个定时器,只不过定时时间到了之后不只是中断,还可以复位CPU
    3. RTC是实时时钟,它和定时器的差别就好像闹钟(定时器)和钟表(RTC)的差别一样。
    4. 蜂鸣器是一个发声设备,在我们ARM里面蜂鸣器是用定时器来驱动的。

 

  1. S5PV210中的定时器

S5PV210内部,一共有4类定时器件。这4类定时器件的功能、特征是不同的。

  1. PWM定时器
    1. 这种是最常用的,平时所说的定时器一般指的是这个。像简单单片机(譬如51单片机)中的定时器也是这类。
    2. 为什么叫PWM定时器,因为一般SoC中产生PWM都是靠这个定时器模块的。
  2. 系统定时器
    1. 系统(指的是操作系统)定时器,系统定时器也是用来产生固定时间间隔(TCNTx时钟周期)信号的,称为systick,这个用来给操作系统提供tick信号。
    2. 产生systick作为操作系统的时间片(time slice)的。
    3. 一般做操作系统移植的时候,这里不会由自己来做,一般原厂提供的基础移植部分就已经包含了,不用深究。
  3. 看门狗定时器本质也是一个定时器,和上面两个没有任何本质区别
  4. 看门狗定时器可以设置在时间到了的时候产生中断,也可以选择发出复位信号复位CPU
  5. 看门狗定时器在实践中应用很多,尤其是工业领域(环境复杂、干扰多)机器容易出问题,而且出问题后果很严重,此时一般都会用看门狗来进行系统复位。 本章节用两节课对210的看门狗进行讲解和编程
  6. 实时时钟RTCreal time clock
    1. 区分时间段和时间点。时间段是相对的,两个时间点相减会得到一个时间段;而时间点是绝对的,是绝无仅有的一个时间点
    2. 定时器关注的是时间段(而不是时间点),定时器计时从开启定时启动的那一刻开始,到定的时间段结束为止产生中断;RTC中工作用的是时间点(xxxxxxxxxxxx秒)。
    3. RTC和定时的区别,就相当于是钟表和闹钟的的区别。

以数据手册为教材:

  1. S5PV210 中的PWM定时器 1
    1. 为什么叫PWM定时器
      1. 叫定时器说明它本质上的原理是定时器
      2. PWM定时器,是因为这些定时器天然是用来产生PWM波形的。
    2. PWM定时器介绍
      1. S5PV2105PWM定时器。其中0123各自对应一个外部GPIO,可以通过这些对应的GPIO产生PWM波形信号并输出;timer4没有对应的外部GPIO(因此不是为了生成PWM波形而是为了产生内部定时器中断产生的)
      2. S5PV2105PWM定时器的时钟源为 PCLK_PSYStime0time1共同使用一个预分频器、timer234共同使用一个预分频器;每个timer有一个专用的独立的分频器;预分频器和分频器构成了两级分频系统,将PCLK_PSYS两级分频后生成的时钟供给timer模块
    3. 框图解析

 

 

  1. S5PV210PWM定时器2
    1. 预分频器与分频器
      1. 两级分频是串联的,或者叫级联,所以两级分频的分频数是相乘 的。
      2. 两级分频的分频系数分别在TCFG0 TCFG1两个寄存器中设置;
      3. 预分频器有两个,prescaler0timer0&timer1共用;prescaler1timer234共用;两个prescaler都是8bit位,因此prescaler value 范围为0~255;所以预分频器的分频值范围为1~256 (注意实际分频值位prescaler value +1)。
      4. 分频器实质是一个MUX开关,多选一开关决定了走哪个分频系数路线。可以选择的有1/1,1/2,1/4,1/8,/1/16
      5. 计算一下两级分频下来,分频最小为1/2,分频最大为1/4096等。
      6. 使用PCLK_PSYS66MHz的情况下(默认时钟设置就是66MHz的),此时两级分频后的时钟周期范围为0.03us62.061us;再结合TCNTB的值的设置的(范围为1~32次方),可知能定出来的时间最长为266548.27s(折合74小时多)

 

 

  1. TCNT&TCMPTCNTB&TCMPBTCNTO
    1. TCNTTCNTB是相对应的,TCNB是有地址的寄存器,供程序员操作;TCNT在内部和TCNTB相对应,他没有寄存器地址,程序员不能编程访问这个寄存器
    2. TCNT寄存器功能就是用来减一的,他是内部的不能读写,我们想TCNT中写要通过TCNTB往进写;读取TCNT寄存器中的值要通过读取相对应的TCNTO寄存器。
    3. 工作流程就是:我们事先算好TCNT寄存器中开始减的那个数(譬如300),然后将之写入TCNTB寄存器中,启动timer前,将TCNTB中的值刷到TCNT寄存器中(有一位寄存器专门用来操作刷数据过去的),刷过去后就可以启动定时器开始计时;在计时过程中如果想知道TCNT寄存器中的值减到多少了,可以读取相应的TCNTO寄存器来得知
    4. 定时功能只需要TCNTTCNTB两个即可;TCNTO寄存器用来做一些捕获计时;TCMPB用来生成PWM波形。
    5. 自动重载和双缓冲(auto-reload and double buffering
      1. 定时器工作的时候,一次定时算一个工作循环。定时器默认是单个循环工作的,也就是说定时一次,计时一次,到期中断一次就完了。下次如果还要再定时中断,需要另外设置。
      2. 但是现实中用定时器来做到的时候往往是循环的最简单最笨的方法就是写代码反复充重置定时器寄存器的值(在每次中断处理的isr中再次给TCNTB中赋值,再次刷到TCNT中再次启动定时器),早期的单片机定时器就是这样的;但是现在的高级SoC中的定时器已经默认内置了这种循环定时工作模式就叫自动装载(auto-reload)机制。
      3. 自动装载机制就是当定时器初始化好开始计时后不用管了,它一个周期到了后会自己从TCNTB中再次装载值到TCNT中,再次启动定时器开始下个循环。

 

  1. S5PV210PWM定时器3
    1. 什么是PWM
      1. PWMpulse wide modulation   脉宽调制)
      2. PWM波形是一个周期性波形,周期为T,在每个周期内波形是完全相同的。每个周期内由一个高电平和一个低电平组成
      3. PWM波形有两个重要参数一个周期T,另一个是占空比duty
推荐阅读
  • 乐视手机S1 Pro发布,声称手机真不卡,外观酷似iPhone
    乐视宣布即将发布乐视手机S1 Pro,搭载虎贲T7510芯片,声称手机真不卡。该手机外观与iPhone 14 Pro相似,采用居中药丸式挖孔屏和方形三摄模组。官方定位该手机为便宜的5G手机,售价预计在千元价位。 ... [详细]
  • 海马s5近光灯能否直接更换为H7?
    本文主要介绍了海马s5车型的近光灯是否可以直接更换为H7灯泡,并提供了完整的教程下载地址。此外,还详细讲解了DSP功能函数中的数据拷贝、数据填充和浮点数转换为定点数的相关内容。 ... [详细]
  • 嵌入式处理器的架构与内核发展历程
    本文主要介绍了嵌入式处理器的架构与内核发展历程,包括不同架构的指令集的变化,以及内核的流水线和结构。通过对ARM架构的分析,可以更好地理解嵌入式处理器的架构与内核的关系。 ... [详细]
  • 本文概述了JNI的原理以及常用方法。JNI提供了一种Java字节码调用C/C++的解决方案,但引用类型不能直接在Native层使用,需要进行类型转化。多维数组(包括二维数组)都是引用类型,需要使用jobjectArray类型来存取其值。此外,由于Java支持函数重载,根据函数名无法找到对应的JNI函数,因此介绍了JNI函数签名信息的解决方案。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文详细介绍了云服务器API接口的概念和作用,以及如何使用API接口管理云上资源和开发应用程序。通过创建实例API、调整实例配置API、关闭实例API和退还实例API等功能,可以实现云服务器的创建、配置修改和销毁等操作。对于想要学习云服务器API接口的人来说,本文提供了详细的入门指南和使用方法。如果想进一步了解相关知识或阅读更多相关文章,请关注编程笔记行业资讯频道。 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • SpringBoot整合SpringSecurity+JWT实现单点登录
    SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
  • PL2303HXD电路图(USB转UART)介绍及应用
    本文介绍了PL2303HXD电路图(USB转UART)的特性和应用,该电路图可以实现RS232和USB信号的转换,方便嵌入到手持设备中。PL2303HXD作为USB/RS232双向转换器,可以将USB数据转换为RS232信息流格式发送给外设,并将RS232外设的数据转换为USB数据格式传送回主机。通过利用USB块传输模式和自动流量控制,PL2303HXD能够实现更高的数据传输吞吐量比传统的UART端口。 ... [详细]
  • 解决Sharepoint 2013运行状况分析出现的“一个或多个服务器未响应”问题的方法
    本文介绍了解决Sharepoint 2013运行状况分析中出现的“一个或多个服务器未响应”问题的方法。对于有高要求的客户来说,系统检测问题的存在是不可接受的。文章详细描述了解决该问题的步骤,包括删除服务器、处理分布式缓存留下的记录以及使用代码等方法。同时还提供了相关关键词和错误提示信息,以帮助读者更好地理解和解决该问题。 ... [详细]
  • 本文整理了Java中com.evernote.android.job.JobRequest.getTransientExtras()方法的一些代码示例,展示了 ... [详细]
  • python中安装并使用redis相关的知识
    本文介绍了在python中安装并使用redis的相关知识,包括redis的数据缓存系统和支持的数据类型,以及在pycharm中安装redis模块和常用的字符串操作。 ... [详细]
  • 本文介绍了在Ubuntu 11.10 x64环境下安装Android开发环境的步骤,并提供了解决常见问题的方法。其中包括安装Eclipse的ADT插件、解决缺少GEF插件的问题以及解决无法找到'userdata.img'文件的问题。此外,还提供了相关插件和系统镜像的下载链接。 ... [详细]
  • 本文介绍了利用ARMA模型对平稳非白噪声序列进行建模的步骤及代码实现。首先对观察值序列进行样本自相关系数和样本偏自相关系数的计算,然后根据这些系数的性质选择适当的ARMA模型进行拟合,并估计模型中的位置参数。接着进行模型的有效性检验,如果不通过则重新选择模型再拟合,如果通过则进行模型优化。最后利用拟合模型预测序列的未来走势。文章还介绍了绘制时序图、平稳性检验、白噪声检验、确定ARMA阶数和预测未来走势的代码实现。 ... [详细]
  • 如何使用PLEX播放组播、抓取信号源以及设置路由器
    本文介绍了如何使用PLEX播放组播、抓取信号源以及设置路由器。通过使用xTeve软件和M3U源,用户可以在PLEX上实现直播功能,并且可以自动匹配EPG信息和定时录制节目。同时,本文还提供了从华为itv盒子提取组播地址的方法以及如何在ASUS固件路由器上设置IPTV。在使用PLEX之前,建议先使用VLC测试是否可以正常播放UDPXY转发的iptv流。最后,本文还介绍了docker版xTeve的设置方法。 ... [详细]
author-avatar
邱文馨4966
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有