首页
技术博客
PHP教程
数据库技术
前端开发
HTML5
Nginx
php论坛
新用户注册
|
会员登录
PHP教程
技术博客
编程问答
PNG素材
编程语言
前端技术
Android
PHP教程
HTML5教程
数据库
Linux技术
Nginx技术
PHP安全
WebSerer
职场攻略
JavaScript
开放平台
业界资讯
大话程序猿
登录
极速注册
取消
热门标签 | HotTags
soap
intel
编译
outlook
push
cdn
diff
jira
运维
cas
graphql
pthread
native
sas
gpu
service
职场
抓站
分支结构
sdk
安全
日志
websocket
seo
以太坊
数字化
pdf
压缩
mapkit
程序员
egmentfault
cloud
lucene
zip
final
widget
加密
composer
二维码
编程
360搜索
gps
架构
图片
udp
https
homebrew
amazon
乱码
区块链
rpc
keyboard
文件
架构设计
repository
branch
key
比特币
验证码
arm
搜狗搜索
sass
漏洞
login
xss
扩展
cpu
wifi
restful
搜索
web3
地图
csrf
gitlab
数据统计
csv
64bit
智能合约
开发者
当前位置:
开发笔记
>
程序员
> 正文
第十天:定时器、看门狗、PWM、蜂鸣器、RTC原理及代码实战
作者:邱文馨4966 | 来源:互联网 | 2023-05-16 18:40
什么是定时器定时器是SoC中常见外设定时器与计数器。计数器是用来计数的(每
什么是定时器
定时器是
SoC
中常见外设
定时器与计数器。计数器是用来计数的(每隔一个固定时间会计一个数);因为计数器的计数时间周期是固定的,因此到了一定时间只要用计数值
x
计数时间周期,就能得到一个时间段,这个时间段就是我们定的时间(这就是定时器了)
定时器
/
计数器作为
SoC
的外设,主要用来实现定时执行代码的功能。定时器相对于
SoC
来说,就好像闹钟相对于人来说意义一样。
对于单核
CPU,
是单线程的
,
在同一时间内
,
只能做一件事情
,
就像人需要闹钟
,SoC
需要定时器一样
定时器有什么用
定时器可以让
SoC
在执行主程序的同时
,
可以
(
通过定时器
)
具有计时功能
,
到了一定时间
(
计时结束
)
后
,
定时器会产生中断
CPU,CPU
会去处理中断并执行定时器中断的
ISR.
从而去执行预先设定好的时间
,
重点是产生中断的条件是定时器产生的
,
定时器产生的信号就是计时结束标志
.
定时器就好像
CPU
的一个秘书一样
,
这个秘书专门帮
CPU
计时
,
并到时间后提醒
CPU
要做某件事情
.
所以
CPU
有了定时器之后
,
只需预先自己
xx
时间之后必须要做的事情绑定到定时器中断
ISR
即可,到了时间之后定时器就会以中断的方式提醒
CPU
来处理这个事情。
定时器的原理
定时器计时其实是通过计数来实现的。定时器内部有一个计数器,这个计数器更加·根据一个时钟(这个时钟源来自于
ARM
的
APB
总线,然后经过内部时钟模块内部的分频器来分频得到)来工作。
每隔一个时钟周期,计数器就计一次,定时器的时间就是计数器计数值
x
时钟周期。
定时器内部有一个寄存器
TCNT
,计时开始时我们会把一个总的计数值(譬如
300
)放入
TCNT
寄存器中,然后每隔一个时钟周期(假设
1ms
)
TCNT
中的值会自动减
1
(硬件自动完成,不需要
CPU
软件去干预),直到
TCNT
中减为
0
的时候,
TCNT
就会触发定时器中断。
定时时间是由两个东西共同决定的:一个是
TCNT
中的计数值,一个是时钟周期。譬如上例中,定时周期就为
300x1ms =
300ms
。
定时器和看门狗、
RTC
、蜂鸣器
这几个东西都是和时间有关的部件
看门狗其实就是一个定时器,只不过定时时间到了之后不只是中断,还可以复位
CPU
RTC
是实时时钟,它和定时器的差别就好像闹钟(定时器)和钟表(
RTC
)的差别一样。
蜂鸣器是一个发声设备,在我们
ARM
里面蜂鸣器是用定时器来驱动的。
S5PV210
中的定时器
在
S5PV210
内部,一共有
4
类定时器件。这
4
类定时器件的功能、特征是不同的。
PWM
定时器
这种是最常用的,平时所说的定时器一般指的是这个。像简单单片机(譬如
51
单片机)中的定时器也是这类。
为什么叫
PWM
定时器,因为一般
SoC
中产生
PWM
都是靠这个定时器模块的。
系统定时器
系统(指的是操作系统)定时器,系统定时器也是用来产生固定时间间隔(
TCNT
x
时钟周期)信号的,称为
systick
,
这个用来给操作系统提供
tick
信号。
产生
systick
作为操作系统的时间片(
time
slice
)的。
一般做操作系统移植的时候,这里不会由自己来做,一般原厂提供的基础移植部分就已经包含了,不用深究。
看门狗定时器本质也是一个定时器,和上面两个没有任何本质区别
看门狗定时器可以设置在时间到了的时候产生中断,也可以选择发出复位信号复位
CPU
。
看门狗定时器在实践中应用很多,尤其是工业领域(环境复杂、干扰多)机器容易出问题,而且出问题后果很严重,此时一般都会用看门狗来进行系统复位。
本章节用两节课对
210
的看门狗进行讲解和编程
实时时钟
RTC
(
real
time clock
)
区分时间段和时间点。时间段是相对的,两个时间点相减会得到一个时间段;而时间点是绝对的,是绝无仅有的一个时间点
定时器关注的是时间段(而不是时间点),定时器计时从开启定时启动的那一刻开始,到定的时间段结束为止产生中断;
RTC
中工作用的是时间点(
xx
年
xx
月
xx
日
xx
时
xx
分
xx
秒)。
RTC
和定时的区别,就相当于是钟表和闹钟的的区别。
以数据手册为教材:
S5PV210
中的
PWM
定时器
1
为什么叫
PWM
定时器
叫定时器说明它本质上的原理是定时器
叫
PWM
定时器,是因为这些定时器天然是用来产生
PWM
波形的。
PWM
定时器介绍
S5PV210
有
5
个
PWM
定时器。其中
0
、
1
、
2
、
3
各自对应一个外部
GPIO
,可以通过这些对应的
GPIO
产生
PWM
波形信号并输出;
timer
4
没有对应的外部
GPIO
(因此不是为了生成
PWM
波形而是为了产生内部定时器中断产生的)
S5PV210
的
5
个
PWM
定时器的时钟源为
PCLK_PSYS
,
time
0
和
time1
共同使用一个预分频器、
timer2
、
3
、
4
共同使用一个预分频器;每个
timer
有一个专用的独立的分频器;预分频器和分频器构成了两级分频系统,将
PCLK_PSYS
两级分频后生成的时钟供给
timer
模块
框图解析
S5PV210
的
PWM
定时器
2
预分频器与分频器
两级分频是串联的,或者叫级联,所以两级分频的分频数是相乘
的。
两级分频的分频系数分别在
TCFG
0
和
TCFG1
两个寄存器中设置;
预分频器有两个,
prescaler
0
位
timer0&timer1
共用;
prescaler1
为
timer2
、
3
、
4
共用;两个
prescaler
都是
8
个
bit
位,因此
prescaler value
范围为
0~255
;所以预分频器的分频值范围为
1~256
(注意实际分频值位
prescaler value +1
)。
分频器实质是一个
MUX
开关,多选一开关决定了走哪个分频系数路线。可以选择的有
1/1,1/2,1/4,1/8,/1/16
等
计算一下两级分频下来,分频最小为
1/2
,分频最大为
1/4096
等。
使用
PCLK_PSYS
为
66MHz
的情况下(默认时钟设置就是
66MHz
的),此时两级分频后的时钟周期范围为
0.03us
到
62.061us
;再结合
TCNTB
的值的设置的(范围为
1~
32
次方),可知能定出来的时间最长为
266548.27s
(折合
74
小时多)
TCNT&TCMP
、
TCNTB&TCMPB
、
TCNTO
TCNT
和
TCNTB
是相对应的,
TCNB
是有地址的寄存器,供程序员操作;
TCNT
在内部和
TCNTB
相对应,他没有寄存器地址,程序员不能编程访问这个寄存器
TCNT
寄存器功能就是用来减一的,他是内部的不能读写,我们想
TCNT
中写要通过
TCNTB
往进写;读取
TCNT
寄存器中的值要通过读取相对应的
TCNTO
寄存器。
工作流程就是:我们事先算好
TCNT
寄存器中开始减的那个数(譬如
300
),然后将之写入
TCNTB
寄存器中,启动
timer
前,将
TCNTB
中的值刷到
TCNT
寄存器中(有一位寄存器专门用来操作刷数据过去的),刷过去后就可以启动定时器开始计时;在计时过程中如果想知道
TCNT
寄存器中的值减到多少了,可以读取相应的
TCNTO
寄存器来得知
定时功能只需要
TCNT
、
TCNTB
两个即可;
TCNTO
寄存器用来做一些捕获计时;
TCMPB
用来生成PWM波形。
自动重载和双缓冲(
auto
-reload and double buffering
)
定时器工作的时候,一次定时算一个工作循环。定时器默认是单个循环工作的,也就是说定时一次,计时一次,到期中断一次就完了。下次如果还要再定时中断,需要另外设置。
但是现实中用定时器来做到的时候往往是循环的最简单最笨的方法就是写代码反复充重置定时器寄存器的值(在每次中断处理的
isr
中再次给
TCNTB
中赋值,再次刷到
TCNT
中再次启动定时器),早期的单片机定时器就是这样的;但是现在的高级
SoC
中的定时器已经默认内置了这种循环定时工作模式就叫自动装载(
auto-reload
)机制。
自动装载机制就是当定时器初始化好开始计时后不用管了,它一个周期到了后会自己从
TCNTB
中再次装载值到
TCNT
中,再次启动定时器开始下个循环。
S5PV210
的
PWM
定时器
3
什么是
PWM
?
PWM
(
pulse wide modulation
脉宽调制)
PWM
波形是一个周期性波形,周期为
T
,在每个周期内波形是完全相同的。每个周期内由一个高电平和一个低电平组成
PWM
波形有两个重要参数一个周期
T
,另一个是占空比
duty
cpu
arm
写下你的评论吧 !
吐个槽吧,看都看了
会员登录
|
用户注册
推荐阅读
gpu
乐视手机S1 Pro发布,声称手机真不卡,外观酷似iPhone
乐视宣布即将发布乐视手机S1 Pro,搭载虎贲T7510芯片,声称手机真不卡。该手机外观与iPhone 14 Pro相似,采用居中药丸式挖孔屏和方形三摄模组。官方定位该手机为便宜的5G手机,售价预计在千元价位。 ...
[详细]
蜡笔小新 2023-12-14 10:51:51
程序员
海马s5近光灯能否直接更换为H7?
本文主要介绍了海马s5车型的近光灯是否可以直接更换为H7灯泡,并提供了完整的教程下载地址。此外,还详细讲解了DSP功能函数中的数据拷贝、数据填充和浮点数转换为定点数的相关内容。 ...
[详细]
蜡笔小新 2023-12-12 11:39:00
程序员
嵌入式处理器的架构与内核发展历程
本文主要介绍了嵌入式处理器的架构与内核发展历程,包括不同架构的指令集的变化,以及内核的流水线和结构。通过对ARM架构的分析,可以更好地理解嵌入式处理器的架构与内核的关系。 ...
[详细]
蜡笔小新 2023-12-11 15:38:57
native
JNI原理及常用方法概述
本文概述了JNI的原理以及常用方法。JNI提供了一种Java字节码调用C/C++的解决方案,但引用类型不能直接在Native层使用,需要进行类型转化。多维数组(包括二维数组)都是引用类型,需要使用jobjectArray类型来存取其值。此外,由于Java支持函数重载,根据函数名无法找到对应的JNI函数,因此介绍了JNI函数签名信息的解决方案。 ...
[详细]
蜡笔小新 2023-12-09 17:55:40
native
如何限制php数据库链接数和连接超时时间?
本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ...
[详细]
蜡笔小新 2023-12-14 14:06:10
程序员
云服务器API接口的入门使用及功能解析
本文详细介绍了云服务器API接口的概念和作用,以及如何使用API接口管理云上资源和开发应用程序。通过创建实例API、调整实例配置API、关闭实例API和退还实例API等功能,可以实现云服务器的创建、配置修改和销毁等操作。对于想要学习云服务器API接口的人来说,本文提供了详细的入门指南和使用方法。如果想进一步了解相关知识或阅读更多相关文章,请关注编程笔记行业资讯频道。 ...
[详细]
蜡笔小新 2023-12-14 12:43:39
程序员
阿里云物联网 .NET Core 客户端 | CZGL.AliIoTClient:4. 设备上报属性
阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ...
[详细]
蜡笔小新 2023-12-14 12:40:20
程序员
SpringBoot整合SpringSecurity+JWT实现单点登录
SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ...
[详细]
蜡笔小新 2023-12-11 08:21:41
程序员
PL2303HXD电路图(USB转UART)介绍及应用
本文介绍了PL2303HXD电路图(USB转UART)的特性和应用,该电路图可以实现RS232和USB信号的转换,方便嵌入到手持设备中。PL2303HXD作为USB/RS232双向转换器,可以将USB数据转换为RS232信息流格式发送给外设,并将RS232外设的数据转换为USB数据格式传送回主机。通过利用USB块传输模式和自动流量控制,PL2303HXD能够实现更高的数据传输吞吐量比传统的UART端口。 ...
[详细]
蜡笔小新 2023-12-10 13:46:22
service
解决Sharepoint 2013运行状况分析出现的“一个或多个服务器未响应”问题的方法
本文介绍了解决Sharepoint 2013运行状况分析中出现的“一个或多个服务器未响应”问题的方法。对于有高要求的客户来说,系统检测问题的存在是不可接受的。文章详细描述了解决该问题的步骤,包括删除服务器、处理分布式缓存留下的记录以及使用代码等方法。同时还提供了相关关键词和错误提示信息,以帮助读者更好地理解和解决该问题。 ...
[详细]
蜡笔小新 2023-12-10 13:37:58
service
com.evernote.android.job.JobRequest.getTransientExtras()方法的使用及代码示例
本文整理了Java中com.evernote.android.job.JobRequest.getTransientExtras()方法的一些代码示例,展示了 ...
[详细]
蜡笔小新 2023-12-09 10:33:37
push
python中安装并使用redis相关的知识
本文介绍了在python中安装并使用redis的相关知识,包括redis的数据缓存系统和支持的数据类型,以及在pycharm中安装redis模块和常用的字符串操作。 ...
[详细]
蜡笔小新 2023-12-09 10:31:54
sdk
Ubuntu 11.10 x64环境下安装Android开发环境及解决常见问题
本文介绍了在Ubuntu 11.10 x64环境下安装Android开发环境的步骤,并提供了解决常见问题的方法。其中包括安装Eclipse的ADT插件、解决缺少GEF插件的问题以及解决无法找到'userdata.img'文件的问题。此外,还提供了相关插件和系统镜像的下载链接。 ...
[详细]
蜡笔小新 2023-12-09 09:41:58
cas
利用ARMA模型对平稳非白噪声序列进行建模的步骤及代码实现
本文介绍了利用ARMA模型对平稳非白噪声序列进行建模的步骤及代码实现。首先对观察值序列进行样本自相关系数和样本偏自相关系数的计算,然后根据这些系数的性质选择适当的ARMA模型进行拟合,并估计模型中的位置参数。接着进行模型的有效性检验,如果不通过则重新选择模型再拟合,如果通过则进行模型优化。最后利用拟合模型预测序列的未来走势。文章还介绍了绘制时序图、平稳性检验、白噪声检验、确定ARMA阶数和预测未来走势的代码实现。 ...
[详细]
蜡笔小新 2023-12-09 08:30:08
cas
如何使用PLEX播放组播、抓取信号源以及设置路由器
本文介绍了如何使用PLEX播放组播、抓取信号源以及设置路由器。通过使用xTeve软件和M3U源,用户可以在PLEX上实现直播功能,并且可以自动匹配EPG信息和定时录制节目。同时,本文还提供了从华为itv盒子提取组播地址的方法以及如何在ASUS固件路由器上设置IPTV。在使用PLEX之前,建议先使用VLC测试是否可以正常播放UDPXY转发的iptv流。最后,本文还介绍了docker版xTeve的设置方法。 ...
[详细]
蜡笔小新 2023-12-09 01:31:00
邱文馨4966
这个家伙很懒,什么也没留下!
Tags | 热门标签
soap
intel
编译
outlook
push
cdn
diff
jira
运维
cas
graphql
pthread
native
sas
gpu
service
职场
抓站
分支结构
sdk
安全
日志
websocket
seo
以太坊
数字化
pdf
压缩
mapkit
程序员
RankList | 热门文章
1
oracle主键和唯一索引,Oracle 主键、唯一键与唯一索引的区别
2
存储过程删除 用于更改,
3
从字符串中删除指定字符串
4
最近我的手机二三事
5
dp按照规模分类总结
6
【简单】1、两数之和
7
JVM学习总结体系结构、内存管理和垃圾回收
8
【Golang接口自动化07】struct转map的三种方式
9
MTK的铃声修改与替换
10
MySQL的合并查询结果UNION和UNION All的区别
11
Android开发——ListView的setOnItemClickListener和setOnItemLongClickListener同时响应的问题
12
大话设计模式职责链模式的实践请求加薪
13
deb包转化为rpm包
14
Leetcode题解之数学问题(3) 3的幂
15
de.tudarmstadt.ukp.wikipedia.api.Wikipedia.getCategories()方法的使用及代码示例
PHP1.CN | 中国最专业的PHP中文社区 |
DevBox开发工具箱
|
json解析格式化
|
PHP资讯
|
PHP教程
|
数据库技术
|
服务器技术
|
前端开发技术
|
PHP框架
|
开发工具
|
在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved |
京公网安备 11010802041100号
|
京ICP备19059560号-4
| PHP1.CN 第一PHP社区 版权所有