您的位置 首页 ADAS

飞凌ok6410定时器准确操控led

关于借鉴与版权的说明:飞凌提供的代码有一定问题,并且部分关键代码没有解释,我在搜集各方面资料后综合网友指正和自己的理解,注释了部分

关于学习与版权的阐明:飞凌供给的代码有必定问题,并且部分要害代码没有解说,我在收集各方面材料后归纳网友纠正和自己的了解,注释了部分自己以为重要的部分。当然假如大神觉得可不注释,也能够。此篇文章征引多家大神的微博,如需看大神原作,请百度查找标题,此处个人见解不恰当的请各位纠正。

6410中的PWM 守时器

1.简略介绍 :

S3C6410X中有5个守时器,这些守时器发生内部中止。其间,Timer0和Timer1具有PWM功用,而Timer2,3,4没有此功用。

PWM具有两种操作形式:主动装载形式,一次触发形式。为完结PWM功用,芯片供给了16个功用寄存器。这些功用寄存器都衔接APB总线。

守时器具有双缓冲特性,这样就能在不中止当时守时器操作的情况下,为下次守时器运转装入新的数值。虽然为守时器设置了新数值,但当时的守时操作能够成功完结。守时器从TCNTBn读取的值是为下次延时守时用的,并不影响当时守时器的运转。当TCNTn减小到0的时分,TCNTBn的值会主动复制到TCNTn中,这就是说的主动装载操作。守时器的当时计数值能够从守时计数调查寄存器中TCNTOn读取。假如TCNTn为0且从装载也为0的话则TCNTn不在进行下次操作。

2.守时器的电路结够图: 

3.守时器架构流程。

PCLK —à 经过8位的预分频器【8bit prescaler0】 –à 分频器divider [1/1 1/2 1/4 1/81/16] -à 多路选择器 MUX -à 逻辑操控器【比较TCMPBn和TCNTBn的数值】–à(deadzone generator ) –à时钟

计算公式:

4.守时器的作业原理是什么。 

每个守时器有32位的递减计数器。递减计数器的初始值由TCNTBn来加载。 当计数器的值变为0时, 守时器发生中止信号告诉cpu守时器操作完结。 当计数器的值变为0时,TCNTBn的值主动加载到递减计数器并开端下个周期的操作。 假如守时器中止作业(比方,在守时器作业形式期间清空寄存器TCONn的守时器使能位,这样对应的守时器就会中止作业),这时TCNTBn的值就不会加载到守时器。

而关于PWM 功用,要用到寄存器TCMPBn,当递减计数器down-counter的值和比较寄存器TCMPBn的值相一起,守时操控逻辑模块就会改动输出电平。因而比较寄存器TCMPBn决议了PWM的输出。

并且TCNTBn 和 TCMPBn寄存器具有双缓冲特性,这样就能在不中止当时守时器操作的情况下,为下次守时器运转装入新的数值。虽然为守时器设置了新数值,但当时的守时操作能够成功完结。

5. 守时器的作业时序

我说怎样在上面的第一步中忽然冒出个TCNTn和TCMPn,我以为是数据手册错了,由于在PWM供给的16个寄存器中没有这两个寄存器。 那么请看下面: 

从上面内容看出。TCNTn和TCMPn是内部的寄存器(internal registers ).而TCNTn寄存器的值能够经过读取寄存器TCNTOn来取得。

6. 16个特别功用寄存器

7.接下来看一下飞凌供给的准确操控LED的程序。【使用守时器来准确操控LED跑马灯,每隔1s轮询点亮】

#define rGPMCON (*(volatile unsigned*)(0x7F008820))

#define rGPMDAT (*(volatileunsigned*)(0x7F008824))

#define rGPMPUD (*(volatile unsigned*)(0x7F008828))

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qiche/adas/255140.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部