嵌入式

您所在的位置:网站首页 arm处理器的作用是什么 嵌入式

嵌入式

2023-08-14 10:38| 来源: 网络整理| 查看: 265

嵌入式-ARM-学习总结(8):定时器 一、定时器1.什么是定时器2.定时器有什么用3.定时器的原理4.与定时器有关的器件(1)PWM定时器(2)系统定时器(3)看门狗(4)实时时钟RTC(real time clock) 5.PWM定时器6.看门狗7.RTC

一、定时器 1.什么是定时器

定时器是SoC的常见外设 (1)定时器和计数器。计数器是用来计数的(每隔一个固定时间会计一个数);因为计数器的计数时间周期是固定的,因此到了一定时间只要用计数值x计数时间周期,就可以得到一个时间段,这个时间段就是我们定的时间(这就是定时器)。 (2)定时器/计数器作为SoC的外设,主要用来实现定时执行代码的功能。定时器相对于SoC来说,就好象闹钟相对于人来说意义一样。

2.定时器有什么用

(1)定时器可以让SoC在执行主程序的同时,具有计时功能(通过定时器),到了一定时间(计时结束)后,定时器会产生中断提醒CPU,CPU会去处理中断并执行定时器中断的ISR。从而去执行预先设定好的事件。 (2)定时器就好象是CPU的一个秘书一样,这个秘书专门管帮CPU来计时,并到时间后提醒CPU要做某件事情。所以CPU有了定时器之后,只需预先把自己xx时间之后必须要做的事情绑定到定时器中断ISR即可,到了时间之后定时器就会以中断的方式提醒CPU来处理这个事情。

3.定时器的原理

(1)定时器计时其实是通过计数来实现的。 定时器内部有一个计数器,这个计数器根据一个时钟(这个时钟源来自于ARM的APB总线 66MHz,然后经过时钟模块内部的分频器来分频得到)来工作。每隔一个时钟周期,计数器就计数一次,定时器的时间就是计数器计数值×时钟周期。

(2)定时器内部有1个寄存器TCNT,计时开始时我们会把一个总的计数值(初值)放入TCNT寄存器中,然后每隔一个时钟周期(假设为1ms)TCNT中的值会自动减1(硬件自动完成,不需要CPU软件去干预),直到TCNT中减为0的时候,TCNT就会触发定时器中断。

(3)定时时间是由2个东西共同决定的:一个是TCNT中的计数值,一个是时钟周期,两者的乘积即为最终定时的时间。

4.与定时器有关的器件 (1)PWM定时器

PWM(pulse wide modulation 脉宽调制) PWM波形是一个周期性波形,周期为T,在每个周期内波形是完全相同的。每个周期内由一个高电平和一个低电平组成。 PWM波形有2个重要参数:一个是周期T,另一个是占空比 duty(占空比就是一个周期内高电平的时间除以周期时间的商)。 对于一个PWM波形,知道了周期 T和占空比duty,就可以算出这个波形的所有细节。譬如高电平时间为T x duty,低电平时间为T*(1-duty)。

PWM波形有很多用处,譬如通信上用PWM来进行脉宽调制对基波进行载波调制;在发光二极管LED照明领域可以用PWM波形来调制电流进行调光;用来驱动蜂鸣器等设备。

(2)系统定时器 (3)看门狗

其实是一个定时器,只不过定时器时间到了之后不只是中断,还可以复位CPU。

看门狗定时器和普通的定时器并无本质区别。定时器可以设定一个时间,在这个时间完成之前定时器不断计时,时间到的时候定时器会复位CPU(重启系统)。 普通设备重启不是问题,但是有些设备人工重启存在困难。这时候我们希望系统能够自己检验自己是否已经跑飞,并且在意识到自己跑飞的时候,可以很快的(几个ms或者更短)自我重启。这个功能就要靠看门狗定时器来实现。 我们在应用程序中打开看门狗设备,初始化好给它一个时间,然后应用程序使用一个线程来喂狗,这个线程的执行时间安全短于看门狗的复位时间。当系统(或者应用程序)异常后,喂狗线程自然就不工作了,然后到时候看门狗就会复位。 实战中有时候为了绝对的可靠,我们并不会用SoC中自带的看门狗,而是使用专门的外置的看门狗芯片来实现看门狗。

(4)实时时钟RTC(real time clock)

RTC是实时时钟,RTC是实时时钟,它和定时器的差别就好象闹钟(定时器)和钟表(RTC)的差别一样。 RTC是SoC中一个内部外设,RTC有自己独立的晶振提供RTC时钟源(32.768KHz),内部有一些寄存器用来记录时间(年月日时分秒星期)。一般情况下为了在系统关机时时间仍然在走,还会给RTC提供一个电池供电。

5.PWM定时器

PWM定时器主要寄存器 (1)TCFG0、TCFG1 这两个寄存器是用来进行预分频和分频的,通过将PCLK进行分频处理的到一个频率较低的时钟信号,用于驱动PWM定时器。

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

在这里插入图片描述

两级分频是串联(级联)的,所以两级分频的分频数是相乘的。预分频器有2个,prescaler0为timer0&timer1共用;prescaler1为timer2、3、4共用;两个prescaler都是8个bit位,因此prescaler value范围为0~255;所以预分频器的分频值范围为1~256(注意实际分频值为prescaler value + 1)。

// 设置PWM定时器的一干寄存器,使其工作 rTCFG0 &= ~(0xff // 第一步,把56拆分成5和6 // 第二步,把5和6组合成0x56 return (((num / 10) // 第一步,打开RTC读写开关 rRTCCON |= (1month); rBCDDATE = num_2_bcd(p->date); rBCDHOUR = num_2_bcd(p->hour); rBCDMIN = num_2_bcd(p->minute); rBCDSEC = num_2_bcd(p->second); rBCDDAY = num_2_bcd(p->day); // 最后一步,关上RTC的读写开关 rRTCCON &= ~(1 rALMSEC = num_2_bcd(23); rRTCALM |= 1


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3