s5pv210开发与学习:1.14之定时器、看门狗和RTC

目录

1.原理图

2.资料查阅

2.1脉宽调制(PWM)定时器(PULSE WIDTH MODULATION TIMER)

2.2系统定时器(SYSTEM TIMER)

2.3看门狗定时器(WATCHDOG TIMER)

2.4实时时钟(REAL TIMER CLOCK(RTC))

3.编码

4.参考与拓展


1.原理图

核心板相关原理图

蜂鸣器部分

PWM控制蜂鸣器:
(1)查阅原理图可知,开发板底板上的蜂鸣器通过GPD0_2(XpwmTOUT2)引脚连接在SoC上。
(2)GPD0_2引脚通过限流电阻接在三极管基极上,引脚有电蜂鸣器就会有电(三极管导通);引脚没电蜂鸣器就会
没电(三极管关闭)。这些都是硬件问题,软件工程师不用管,软件工程师只要写程序控制GPD0_2引脚的电平产
生PWM波形即可。
(3)GPD0CON(0xE02000A0),要把bit8~bit11设置为0b0010(功能选择为TOUT_2,就是把这个引脚设置为PWM
输出功能)
(4)从GPD0_2引脚可以反推出使用的是timer2这个PWM定时器。

PWM定时器的主要寄存器详解
(1)相关的寄存器有TCFG0、TCFG1、TCON、TCNTB2、TCMPB2、TCNTO2

2.资料查阅

2.1脉宽调制(PWM)定时器(PULSE WIDTH MODULATION TIMER)

2.1.1脉宽调制定时器概述
S5PV210具有五个32位脉宽调制(PWM)计时器。这些定时器产生内部中断ARM子系统。此外,定时器0、1、2和3具有PWM功能,可驱动外部I / O信号定时器0中的PWM具有可选的死区发生器功能,以支持大电流设备计时器4为内部定时器不带输出引脚
定时器使用APB-PCLK作为源时钟计时器0和1共用一个可编程的8位预分频器提供PCLK的第一级划分定时器2、3和4共享不同的8位预分频器每个计时器都有它自己的专用时钟分频器提供第二级时钟分频(预分频器除以2、4、8或16)
另外,计时器可以从CMU中选择时钟源。定时器0、1、2、3和4选择SCLK_PWM。
每个定时器都有自己的32位递减计数器,该计数器由定时器时钟驱动。倒数计数器最初已加载来自定时器计数缓冲寄存器(TCNTBn)。如果递减计数器达到零,则定时器中断请求为生成以通知CPU定时器操作已完成。如果计时器递减计数器达到零,则相应的TCNTBn的值将自动重新加载到递减计数器中,以开始下一个周期。但是,如果定时器停止,例如,通过在定时器运行模式期间将TCONn的定时器使能位清零,可将TCNTBn不会重新加载到计数器中。
PWM功能使用TCMPBn寄存器的值。如果发生以下情况,计时器控制逻辑将更改输出电平减计数器值与定时器控制逻辑中比较寄存器的值匹配。因此,比较寄存器确定PWM输出的开启时间(或关闭时间)。
TCNTBn和TCMPBn寄存器是双缓冲的,以允许在定时器中更新定时器参数。
一个周期的中间。在当前定时器周期完成之前,新值不会生效。

图1-1给出了一个PWM周期的简单示例

PWM周期的步骤:
•用159(50 + 109)初始化TCNTBn寄存器,用109初始化TCMPBn。
•启动计时器:设置启动位并手动将该位更新为关闭。TCNTBn值为159加载到递减计数器中,然后将输出TOUTn设置为低电平。
•如果递减计数器将TCNTBn中的值递减到TCMPBn寄存器109中的值,则输出从低变高
•如果递减计数器达到0,它将产生一个中断请求。
•倒数计数器会自动重新加载TCNTBn。 这将重新启动循环。

图1-2显示了各个PWM通道的时钟产生方案。
每个定时器都可以产生电平中断。

2.1.2脉冲宽度调制计时器的主要功能
PWM支持的功能包括:
•五个32位定时器。
•两个8位时钟预分频器为PCLK提供第一级分频,五个时钟分频器和多路复用器为预分频器时钟和SCLK_PWM提供第二级除法
•单个PWM通道的可编程时钟选择逻辑。
•四个独立的PWM通道,具有可编程的占空比控制和极性。
•静态配置:PWM停止
•动态配置:PWM正在运行。
•自动重装和单脉冲模式。
•一个外部输入启动PWM。
•两个PWM输出上的死区发生器。
•电平中断产生。
PWM具有两种工作模式,即自动重载和单次脉冲:
•自动重装模式
在此模式下,基于编程的占空比和极性生成连续的PWM脉冲。
•单脉冲模式
在此模式下,基于编程的占空比和极性仅生成一个PWM脉冲。为了控制PWM的功能,提供了18个特殊功能寄存器。 PWM是可编程的输出,双时钟输入AMBA从模块,并连接到高级外围总线(APB)。这18通过APB事务访问PWM中的特殊功能寄存器。

2.1.3 PWM操作
2.1.3.1预分频器和分频器
8位预分频器和3位分频器产生以下输出频率:
Table 1-1 Minimum and Maximum Resolution based on Prescaler and Clock Divider Values

4-bit Divider Settings Minimum Resolution
(prescaler value=1)
Maximum Resolution
(prescaler value=255)
Maximum Interval
(TCNTBn=4294967295)
1/1( PCLK=66MHz ) 0.030us( 33.0MHz) 3.879us( 257.8KHz) 16659.27s
1/2 ( PCLK=66MHz ) 0.061us ( 16.5MHz ) 7.758us ( 128.9KHz ) 33318.53s
1/4 ( PCLK=66MHz ) 0.121us ( 8.25MHz ) 15.515us ( 64.5KHz ) 66637.07s
1/8 ( PCLK=66MHz ) 0.242us ( 4.13MHz ) 31.03us ( 32.2KHz ) 133274.14s
1/16 ( PCLK=66MHz ) 0.485us ( 2.06MHz ) 62.061us ( 16.1KHz ) 266548.27s

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

2.1.3.2基本定时器操作

定时器(定时器通道4除外)包括四个寄存器,即TCNTBn,TCNTn,TCMPBn和TCMPn。 如果定时器达到0,则将TCNTBn和TCMPBn寄存器加载到TCNTn和TCMPn中。 如果TCNTn达到0,然后如果允许了中断,就会产生中断请求(TCNTn和TCMPn是名称内部寄存器。 从TCNTOn寄存器读取TCNTn寄存器)。

要以XpwmTOUTn的间隔3个周期产生中断,请按如下所示设置TCNTBn,TCMPBn和TCON寄存器图1-3。
产生中断的步骤:
1.设置TCNTBn = 3和TCMPBn = 1。
2.设置自动重新加载= 1,手动更新= 1。
如果手动更新位为1,则将TCNTBn和TCMPBn值加载到TCNTn和TCMPn。
3.为下一个操作设置TCNTBn = 2和TCMPBn = 0。 4.设置自动重新加载= 1,手动更新= 0。
如果此时将手动更新设置为1,则TCNTn更改为2,而TCMP更改为0。
因此,中断以间隔两个周期而不是三个周期生成。您必须为下一个操作自动设置auto-reload = 1。
5.将start设置为1以开始操作。 然后,TCNTn向下计数。
如果TCNTn为0,则产生中断,并且如果使能自动重载,则TCNTn被装入2(TCNTBn值),并且TCMPn加载为0(TCMPn值)。
6. TCNTn在停止之前递减计数。

2.1.3.3自动重载和双缓冲
PWM定时器具有双重缓冲功能,可更改下一次定时器操作的重载值无需停止当前定时器操作。
定时器值被写入TCNTBn(定时器计数缓冲寄存器),定时器的当前计数器值为从TCNTOn(定时器计数观察寄存器)读取。 如果读取了TCNTBn,则读取的值不会反映出计数器的当前状态,但下一个计时器持续时间的重载值。
自动重载是指操作,如果TCNTn达到0,则会将TCNTBn复制到TCNTn中。如果TCNTn达到0并且启用了自动重载,则将TCNTn加载到TCNTn。 如果TCNTn为0并且自动重载位为0,则TCNTn不进一步操作。

(1)定时器工作的时候,一次定时算一个工作循环。定时器默认是单个循环工作的,也就是说定时一次,计时一次,到期中断一次就完了。下次如果还要再定时中断,需要另外设置。
(2)但是现实中用定时器来做的时候往往是循环的,最简单最笨的方法就是写代码反复重置定时器寄存器的值(在每次中断处理的isr中再次给TCNTB中赋值,再次刷到TCNT中再次启动定时器),早期的单片机定时器就是这样的;但是现在的高级SoC中的定时器已经默认内置了这种循环定时工作模式,就叫自动装载(auto-reload)机制。
(3)自动装载机制就是当定时器初始化好开始计时后再不用管了,他一个周期到了后会自己从TCNTB中再次装载值到TCNT中,再次启动定时器开始下个循环。

2.1.3.4定时器操作示例
定时器操作示例如图1-5所示。

计时器操作步骤:
1.启用自动重新加载功能。将TCNTBn设置为159(50 + 109),将TCMPBn设置为109。
更新位打开,将手动更新位设置为关闭。将变频器的开/关位置位。手动更新位集
将TCNTn和TCMPn设置为TCNTBn和TCMPBn的值。
2.将TCNTBn和TCMPBn设置为79(40 + 39)和39。
3.启动定时器:在TCON中设置启动位
4.如果TCNTn和TCMPn具有相同的值,则TOUTn的逻辑电平从低变为高
5.当TCNTn达到0时,它产生中断请求。
6. TCNTn和TCMPBn自动以(79(40 + 39))和39重新加载TCNTBn和TCMPBn。
在中断服务程序(ISR)中,将TCNTBn和TCMPBn设置为79(20 + 59)和59。
7.如果TCNTn和TCMPn具有相同的值,则TOUTn的逻辑电平从低变为高
8.当TCNTn达到0时,它产生中断请求。
9. TCNTn和TCMPn自动以(79(20 + 59))和59重新加载TCNTBn,TCMPBn。
自动重载和中断请求被禁用以停止ISR中的计时器。
10.如果TCNTn和TCMPn具有相同的值,则TOUTn的逻辑电平从低变为高
11.即使TCNTn达到0,也不会产生中断请求。
12. TCNTn没有被重载,并且定时器被停止,因为自动重载被禁用了。

2.1.3.5初始化计时器(设置手动数据和逆变器)
用户必须定义TCNTn的起始值,因为当递减计数器达到0。在这种情况下,必须通过手动更新位加载起始值。
启动计时器的顺序如下:
1.将初始值写入TCNTBn和TCMPBn。
2.设置手动更新位,并仅清除相应定时器的手动更新位。
注意:建议将逆变器的开/关位置位(无论是否使用逆变器)。
3.设置相应计时器的开始位以启动计时器。

2.1.3.6 PWM(脉冲宽度调制)

使用TCMPBn来实现PWM功能。 PWM频率由TCNTBn确定。 PWM值为由TCMPBn确定,如图1-6所示。
对于较高的PWM值,请减小TCMPBn值。 对于较低的PWM值,增加TCMPBn值。 如果输出逆变器使能,增量/减量可以相反。
由于具有双缓冲功能TCMPBn,ISR在当前PWM的任意点写入下一个PWM周期周期。

2.1.3.7输出电平控制

保持TOUT为高或低的步骤(假设逆变器关闭)。
1.关闭自动重装位。 然后,TOUTn变为高电平,并且在TCNTn之后停止定时器达到0。建议使用此方法。
2.通过将定时器启动/停止位清零来停止定时器。如果TCNTn <= TCMPn,则输出电平为高。
如果TCNTn> TCMPn,则输出电平为低电平
3. TOUTn由TCON中的反相器开/关位反相。 逆变器去掉附加电路进行调节输出水平。

2.1.3.8死区生成器
此功能在两个不同开关设备的关闭和打开之间插入时间间隔。 这个时间间隔即使在很短的时间内,也禁止两个开关设备同时导通。
TOUT_0指定PWM输出。 nTOUT_0指定TOUT_0的反相。 如果启用了死区,TOUT_0和nTOUT_0的输出波形为TOUT_0_DZ和nTOUT_0_DZ。 TOUT0_DZ和死区间隔不能同时打开nTOUT_0_DZ。 为了功能正确,死者区域长度必须设置为小于比较计数器值。

2.1.4I/O描述

Signal I/O Description Pad Type
TOUT_0 Output PWMTIMER TOUT[0] XpwmTOUT[0] muxed
TOUT_1 Output PWMTIMER TOUT[1] XpwmTOUT[1] muxed
TOUT_2 Output PWMTIMER TOUT[2] XpwmTOUT[2] muxed
TOUT_3 Output PWMTIMER TOUT[3] XpwmTOUT[3] muxed

注意:“类型”字段指示焊盘是专用于信号还是焊盘已连接到多路复用信号。

2.1.5寄存器描述

1.5.1 REGISTER MAP
1.5.1.1 Timer Configuration Register (TCFG0, R/W, Address = 0xE250_0000)

定时器输入时钟频率= PCLK /({预分频器值+ 1})/ {分频器值}
{预分频值} = 1〜255
{分频器值} = 1,2,4,8,16,TCLK
死区长度= 0〜254

注意:如果将死区长度设置为“ n”,则实际死区长度为“ n + 1”(n = 0〜254)。
1.5.1.2 Timer Configuration Register (TCFG1, R/W, Address = 0xE250_0004)

注意:如果使用SCLK_PWM,则TOUT的占空比可以显示出最小的误差。 SCLK_PWM由PWM中的PCLK采样模块。
但是SCLK_PWM和PCLK是异步时钟。 因此,SCLK_PWM不会在准确的时间采样。 这个最小如果SCLK_PWM慢于PCLK,则可以减少错误。 因此,建议在以下情况下使用SCLK_PWM1兆赫。(例如:如果PCLK为66MHz,SCLK_PWM为1MHz,则占空比误差为1.5%。如果PCLK为66MHz,并且SCLK_PWM为0.5MHz,占空比误差为0.75%)。
1.5.1.3 Timer Control Register (CON, R/W, Address = 0xE250_0008)
1.5.1.4 Timer0 Counter Register (TCNTB0, R/W, Address = 0xE250_000C)
1.5.1.5 Timer0 Compare Register (TCMPB0, R/W, Address = 0xE250_0010)
1.5.1.6 Timer0 Observation Register (TCNTO0, R, Address = 0xE250_0014)
1.5.1.7 Timer1 Counter Register (TCNTB1, R/W, Address = 0xE250_0018)
1.5.1.8 Timer1 Compare Register (TCMPB1, R/W, Address = 0xE250_001C)
1.5.1.9 Timer1 Observation Register (TCNTO1, R, Address = 0xE250_0020)
1.5.1.10 Timer2 Counter Register (TCNTB2, R/W, Address = 0xE250_0024)
1.5.1.11 Timer2 Compare Register (TCMPB2, R/W, Address = 0xE250_0028)
1.5.1.12 Timer2 Observation Register (TCNTO2, R, Address = 0xE250_002C)
1.5.1.13 Timer3 Counter Register (TCNTB3, R/W, Address = 0xE250_0030)
1.5.1.14 Timer2 Compare Register (TCMPB2, R/W, Address = 0xE250_0034)
1.5.1.15 Timer3 Observation Register (TCNTO3, R, Address = 0xE250_0038)
1.5.1.16 Timer4 Counter Register (TCNTB4, R/W, Address = 0xE250_003C)
1.5.1.17 Timer4 Observation Register (TCNTO4, R, Address = 0xE250_0040)
1.5.1.18 Interrupt Control and Status Register (TINT_CSTAT, R/W, Address = 0xE250_0044)

 

-------------------------------------------------------------------------------------------------------------------------

2.2系统定时器(SYSTEM TIMER)

2.2.1系统计时器概述
系统计时器提供两个独特的功能,即:
它在除睡眠模式以外的任何功耗模式下提供1ms的时间间隔。
可更改中断间隔,而无需停止参考滴答定时器。

2.2.2系统计时器的主要功能
•ST的时钟源,例如主OSC(XXTI),RTC OSC(XrtcXTI),USB OSC(XusbXTI)和PCLK
•计数器位:32位,如PWM定时器
•可变的中断间隔,无需停止参考滴答
•在除睡眠模式以外的所有电源模式下使用。
•滴答声生成:使用RTC时钟频率(32.768 kHz)的1ms滴答声分频器。

2.2.3系统定时器的内部功能

S5PV210中有两个单独的系统计时器。 第一个计时器用于生成刻度,而另一个计时器用于用于产生中断。 滴答和中断区域使用两个独立的SFR集和逻辑块。
每个逻辑块分别工作。 因此,您可以独立于参考刻度更改中断间隔代。 这对于某些省电模式非常有用。

2.2.4默认操作

通常,滴答间隔在初始设置后是固定的,您可以在运行时更改中断间隔。 图2-3显示了中断计数器(INTCNT)和中断计数器观察SFR(ICNTO)的详细操作自动重新加载。 每个矩形块显示一个刻度时间。 尽管中断间隔已更改,但一个滴答时间之所以固定是因为滴答和中断计数器彼此独立。
当INTCNT值过期(INTCNT = 0)时,将声明中断。 SW读取ICNTO以了解经过的时间。
注意:如图2-3所示,通过中断手动更新(TCON [4]或ICNTB [31])更改了ICNTB时,新更改后的值将应用于那时的中断计数器(INTCNT)。 当ICNTB更改而没有中断手动更新时(TCON [4]或ICNTB [31])(图2-3中的@),新的更改值将在中断后应用于INTCNT(中断计数器)计数器到期。 需要自动重载时,将中断类型(TCON [5])写为1。

当需要单发模式时,将中断类型(TCON [5])设置为0。计时器到期后,INTCNT(中断)计数器)设置为0,并在每个TICK发生中断。

2.2.5用分数除法生成刻度
系统计时器使用小数分频器以任何输入时钟生成时钟信号。 特别是系统计时器可以使带有RTC输入时钟(32.768 kHz)的大约1毫秒刻度。
小数分频器的输出时钟可能会有局部频率误差。 如果本地频率误差对于在某些应用中不是很重要,您可以使用低功耗的输出时钟。

图2-5显示了一个简单的示例,描述了分数除法器的理论。如图2-5所示,小数分频器可以产生任何具有变化的时钟占空比的输出时钟。
尽管存在本地频率误差(在这种情况下为1.667Hz和2.5Hz),但没有全局频率误差。如果输出时钟频率比输入时钟频率慢得多,本地频率误差降低。
要配置分数除法器,不能将mux和pre-scaler用于分数除法器。 (写TCFG [10:0]为0)将TCFG [14]写为1。
1.一般将TCFG [15]写入0。
输入频率必须是目标频率的4倍。
值= TCLKB的频率/ 2 /目标频率
如果VALUE是小数(a.b),则将TICNTB写为a-1,将TFCNTB写为b * 65536。
例如,如果要使用9kHz输入生成2kHz输出,则VALUE为9/2/2 = 2.25。这意味着a是2,b为0.25。在这种情况下,将TICNTB写为1(= 2 -1),将TFCNTB写为16384(= 0.25 * 65536)。
注意:如果TFCNTB不是整数,则小数分频器不可避免地会产生时序误差。 SEC可以给出定时误差表
确定是否可以将系统计时器用于特定的应用程序。
如果您需要时序误差表,请联系SEC。

2. RTC时钟为1ms
将TCFG [15]写为1
将TICNTB写入15,并将任何值写入TFCNTB。
然后,您可以获得大约1ms的滴答声。 尽管此刻度具有局部误差(一个刻度的频率为0.993 kHz或1.024kHz,它们不是1ms的滴答声),在125个滴答声之后,它表示经过了确切的125ms。 换句话说,没有累积误差。

如果您不需要使用分数除法器来制作刻度线,则编写TICNTB和TFCNTB的方法如下:
如下:
−将TCFG [14]写为0
−将TICNTB写入要除的值– 1

2.2.6使用模式
请遵循以下限制:
•TCLKB必须等于或慢于PCLK。
•将计数值设置得尽可能高(以提高分辨率)。
•在运行时不得更改TCFG和滴答间隔。如果要更改它们,请停止计时器,然后单击“勾号”预先进行SW复位(TCFG [16]),然后进行更改。 TICK SW重置TICK生成区域中的所有逻辑,并TICNTO SFR。
2.2.6.1计数器设置
1. TICNTB和TFCNTB:请参阅“代号生成”
2. ICNTB:中断计数器值= ICNTB + 1。
2.2.6.2中断
系统定时器中有五种中断源。第一个是中断计数器已过期,另一个
四是SFR的写状态。
当您将值写入TCON,TICNTB,TFCNTB和ICNTB SFR时,该值可能不会立即更新
到系统计时器的内部计数器,因为有时系统计时器使用RTC或XXTI时钟作为计数器。
这些时钟比SFR的工作时钟PCLK慢。确认写状态中断后,
软件可以在内部计数器处检查新值是否真的被更新。软件必须等到那个时候。
如果不想断言中断,请连续读取INT_CSTAT(轮询方法)以了解更新时间。在
在这种情况下,您可以有选择地启用或禁用每个中断源。有关更多信息,请参阅
INT_CSTAT [10:6]和INT_CSTAT [0]。
2.2.6.3计数值更新
将计数器值写入TICNTB或TFCNTB后,如果TFCNTB或TICNTB写入中断被置为有效,则勾选
计时器计数器已更新。
手动中断更新(TCON [4]或ICNTB [31])此时将更新中断定时器。如本章所述
2.6.2在发生写状态中断后,可以检查内部计数器是否真正更新。
中断间隔模式(TCON [5])允许中断定时器在中断后自动更新ICNTB中的值
计时器计数器已过期。

2.2.6.4启动计时器
1.重置滴答生成逻辑(通过将TCFG [16]设置为1)。 TCFG [16]被自动清除。
2.将TCFG SFR设置为适当的TCLK。
A:选择时钟源。
B:设置预分频器和分频器值。
3.通过将适当的值写入TICNTB和TFCNTB(如果使用分数除法器)SFR来设置刻度计数器。
4.等待直到TICNTB写中断发生,然后向INT_CSTAT [2]写1以清除中断状态位。
5.如果使用小数分频器,则还要等待TFCNTB写中断,然后将1写入INT_CSTAT [3]
清除中断状态位。
6.通过写ICNTB SFR设置中断计数器。
7.等待直到发生ICNTB写中断,然后将1写入INT_CSTAT [4]以清除中断状态位。
8.写入(TCON [4] = 1’b1或ICNTB [31] = 1'b1)和TCON [0] = 1'b1将所需值更新为内部中断
当时柜台。
9.等待直到发生TCON写中断,然后将1写入INT_CSTAT [5]以清除中断状态位。
10.同时写入TCON [3] = 1以运行中断和滴答定时器。并通过TCON [5]设置中断类型
此时。
11.等待直到发生TCON写中断,然后将1写入INT_CSTAT [5]以清除中断状态位。
2.2.6.5停止定时器
1.写入INT_CSTAT [6] = 1’b0以禁用中断计数器过期(INTCNT = 0)中断。
2.写入TCON [3] = 1’b0以停止内部中断计数器。
3.写TCON [0] = 1’b0停止内部定时器计数器。
2.6.6在运行时更改间隔中断
运行系统计时器,如图2-4所示。
1.通过写入ICNTB SFR设置新的中断计数器值。
2.等待直到发生ICNTB写中断,然后将1写入INT_CSTAT [4]以清除中断状态位。
3.写入TCON [4] = 1’b1或ICNTB [31] = 1’b1,以在那时将新值更新到内部中断计数器。
4.等待直到发生TCON写中断,然后将1写入INT_CSTAT [5]以清除中断状态位。
中断计数器过期后,新值将更新。

2.2.7I/O描述

信号 I/O 描述 焊盘 类型
XT_I &
XT_O
In&
Out
用于系统时钟的振荡器引脚 XXTI & XXTO 专用的
XT_RTC_I &
XT_RTC_O
In&
Out
用于RTC时钟的振荡器引脚 XrtcXTI & XrtcXTO 专用的
XT_USB_I &
XT_USB_O
I/O 用于USB时钟的振荡器引脚 XusbXTI & XusbXTO 专用的

注意:“类型”字段指示焊盘是专用于信号还是焊盘已连接到多路复用信号。

2.2.8寄存器描述

2.8.1 REGISTER MAP
2.8.1.1 Timer Configuration Register (TCFG, R/W, Address = 0xE260_0000)

定时器输入时钟频率= TCLKB /({预分频器值+ 1})/ {分频器值}
{预分频器值} = 1〜255 / {分频器值} = 1,2,4,8,16
2.8.1.2 Timer Control Register (TCON, R/W, Address = 0xE260_0004)

如果要使用单发模式进行中断,请将TCON [5]设置为0。在这种情况下,中断发生在每个中断计数器达到零后嘀嗒。
如果要使用间隔模式进行中断,请将TCON [5]设置为1。在这种情况下,ICNTB中的值将自动INTCNT过期时重新加载到INTCNT计数器。
2.8.1.3 TICK Integer Counter Register (TICNTB, R/W, Address = 0xE260_0008)

实际计时器计数器值= TICNTB + 1,请勿对TICNTB使用0。
2.8.1.4 TICK Integer Observation Register (TICNTO, R, Address = 0xE260_000C)
2.8.1.5 TICK Fractional Counter Register (TFCNTB, R/W, Address = 0xE260_0010)
2.8.1.6 Interrupt Counter Register (ICNTB, R/W, Address = 0xE260_0018)
2.8.1.7 Interrupt Observation Register (ICNTO, R, Address = 0xE260_001C)
2.8.1.8 Interrupt Control and Status Register (INT_CSTAT, R/W, Address = 0xE260_0020)

-------------------------------------------------------------------------------------------------------------------------

2.3看门狗定时器(WATCHDOG TIMER)

2.3.1看门狗概述
S5PV210中的看门狗定时器(WDT)是一种计时设备,可在以下时间后恢复控制器操作由于噪音和系统错误而导致故障。 WDT可用作普通的16位间隔定时器来请求中断服务。 WDT产生复位信号。
WDT和PWM定时器的区别在于WDT产生复位信号。

2.3.2看门狗计时器的主要功能
•支持正常间隔定时器模式和中断请求
•如果计时器计数值达到0(超时),则激活内部复位信号。
•支持电平触发的中断机制

2.3.3看门狗功能描述
2.3.3.1看门狗定时器操作

图3-1给出了看门狗定时器的功能框图。 看门狗定时器使用PCLK作为其源时钟。 PCLK频率经过预分频以生成相应的看门狗定时器时钟,并且产生的频率再次被除。

预分频器的值和分频系数在看门狗定时器控制(WTCON)寄存器中指定。有效的预分频值范围为0到28-1。 分频因子可以选择为16、32、64或128。
使用以下方程式计算看门狗定时器时钟频率和每个定时器时钟的持续时间周期:
− t_watchdog = 1 /(PCLK /(预分频器值+ 1)/ Division_factor)
2.3.3.2 WTDAT和WTCNT
看门狗定时器使能后,看门狗定时器数据(WTDAT)寄存器的值不能自动设置重新加载到计时器计数器(WTCNT)中。 因此,必须将初始值写入看门狗定时器计数(WTCNT)寄存器,在看门狗定时器启动之前。

2.3.3.3 WDT启动
要启动WDT,将WTCON [0]和WTCON [5]设置为1。

2.3.3.4调试环境的考虑
如果S5PV210处于使用嵌入式ICE的调试模式,则看门狗定时器不得运行。
看门狗定时器根据CPU内核信号(DBGACK信号)确定当前是否处于调试模式。 一旦DBGACK信号有效,看门狗定时器到期时,看门狗定时器的复位输出将不被激活。

2.3.4寄存器描述
3.4.1 REGISTER MAP

3.4.1.1 Watchdog Timer Control Register (WTCON, R/W, Address = 0xE270_0000)

WTCON寄存器允许您启用/禁用看门狗定时器,从四个不同的源中选择时钟信号,启用/禁用中断以及启用/禁用看门狗定时器输出。
看门狗定时器用于重启S5PV210以恢复故障。 如果不需要重新启动控制器,则应禁用看门狗定时器。
如果要使用看门狗定时器提供的普通定时器,请启用中断并禁用看门狗定时器。
3.4.1.2 Watchdog Timer Data Register (WTDAT, R/W, Address = 0xE270_0004)

WTDAT寄存器指定超时时间。 WTDAT的内容不能在初始看门狗定时器操作时自动加载到定时器计数器中。 但是,使用0x8000(初始值)会导致第一次超时。
在这种情况下,WTDAT的值会自动重新加载到WTCNT中。
3.4.1.3 Watchdog Timer Count Register (WTCNT, R/W, Address = 0xE270_0008)

WTCNT寄存器包含正常操作期间看门狗定时器的当前计数值。 请注意,如果最初使能了看门狗定时器,则WTDAT寄存器的内容将无法自动加载到定时器计数寄存器中,因此必须先将WTCNT寄存器设置为初始值。
3.4.1.4 Watchdog Timer Interrupt Clear Register (WTCLRINT, R/W, Address = 0xE270_000C)

WTCLRINT寄存器用于清除中断。 中断服务程序负责在中断服务完成后清除相关的中断。 在该寄存器上写入任何值将清除中断。 不允许读取该寄存器。

-------------------------------------------------------------------------------------------------------------------------

2.4实时时钟(REAL TIMER CLOCK(RTC))

2.4.1实时时钟概述
当系统电源关闭时,实时时钟(RTC)单元可以使用备用电池工作。 虽然电源关闭,备用电池可以按秒,分钟,小时,星期几,日,月和年存储时间数据。 RTC单元与外部32.768 kHz晶振一起工作,并执行警报功能。

2.4.2实时时钟的主要功能
•支持BCD编号,即秒,分钟,小时,星期几,日,月和年。
•支持润年生成器
•支持警报功能,即,警报中断或从掉电模式唤醒(空闲,深度空闲,停止,深度停止和睡眠)
•支持滴答计数器功能,即滴答中断或从掉电模式唤醒(空闲,深度空闲,停止,深度停止和睡眠)
•支持独立电源引脚(RTCVDD)
•支持RTOS内核时间刻度的毫秒刻度时间中断。

2.4.2.1实时时钟操作说明

2.4.3润年生成器
润年生成器确定28、29、30或31中每个月的最后一天。这是根据BCDDAY,BCDMON和BCDYEAR中的数据计算得出的。 该块在决定一个月的最后一天时会考虑润年。
注意:BCDYEAR寄存器为12位宽。 它最多可以表示三个BCD数字。 千位数的隐式数量为2。因此,它可以表示从400 * n到400 * n + 999(n = 0、1、2、3、4、5,...)的年份。

2.4.4读/写寄存器
要将BCD寄存器写入RTC块,请设置RTCCON寄存器的位0。 要显示秒,分钟,小时,星期几,日,月和年,CPU应该分别在RTC块中读取BCDSEC,BCDMIN,BCDHOUR,BCDDAYWEEK,BCDDAY,BCDMON和BCDYEAR寄存器中的数据 。 但是,由于读取了多个寄存器,因此可能存在一秒的偏差。
例如,如果您从BCDYEAR到BCDMIN读取寄存器,则结果假定为2059(年),12(月),31(日),23(小时)和59(分钟)。 如果您读取BCDSEC寄存器并且其值的范围是1到59(秒),则没有问题。 但是,如果值为0秒,则由于一秒的偏差原因,年,月,日,小时和分钟可以更改为2060(年),1(月),1(天),0(小时)和0(分钟) 。 在这种情况下,如果BCDSEC为零,则必须再次从BCDYEAR读取到BCDSEC。

2.4.4.1备用电池操作
备用电池可以驱动RTC逻辑。 即使系统电源关闭,备用电池也会通过RTCVDD引脚向RTC模块供电。 如果系统关闭,则应阻塞CPU和RTC逻辑的接口,并且为了最大程度地降低功耗,备用电池仅驱动振荡电路和BCD计数器。

2.4.5警报功能
在电源关闭模式或正常操作模式下,RTC在特定时间生成ALARM_INT(警报中断)和ALARM_WK(警报唤醒)。 在正常操作模式下,ALARM_INT被激活。 在断电模式下,ALARM_WK信号和ALARM_INT均被激活。 RTC警报寄存器(RTCALM)确定警报启用/禁用状态以及警报时间设置的条件。

2.4.6滴答时间中断
RTC滴答时间用于中断请求。 TICNT寄存器包含一个中断允许位和该中断的计数值。 如果计数值达到“ 0”(如果发生滴答时间中断)。 那么中断周期如下:
•周期=(n + 1)/(时钟时钟源频率)秒(n =时钟计数器值)

Table 4-1 Tick Interrupt Resolution


注意:您可以选择适当的滴答时间时钟源以延长滴答时间分辨率。
此RTC时间刻度可用于实时操作系统(RTOS)内核时间刻度。 如果RTC时间滴答产生了时间滴答,则RTOS的时间相关功能始终实时同步。

2.4.7 32.768KHZ X-TAL连接示例
图4-2给出了RTC单元以32.768kHz振荡的电路。 负载电容器的电容20pF是示例值。 应根据晶体负载电容进行调整。

2.4.8 RTC启动
要启动RTC,请将RTCCON [0]设置为1。

2.4.9 I/O描述

信号 I/O 描述 引脚 类型
XT_RTC_I Input 32.768 kHz RTC振荡器时钟输入 XrtcXTI 专用的
XT_RTC_O Output 32.768 kHz RTC振荡器时钟输出 XrtcXTO 专用的
XRTCCLKO Output 32.768 kHz RTC时钟输出(1.8〜3.3V)该信号默认关闭 可以通过在RTCCON寄存器的CLKOUTEN字段中设置1来启用它。注:为了使用XRTCCLO,必须提供ALIVE电源。 XRTCCLKO 专用的

2.4.10寄存器描述

4.10.1 REGISTER MAP
4.10.1.1 Interrupt Pending Register (INTP, R/W, Address = 0xE280_0030)
4.10.1.2 Real Time Clock Control Register (RTCCON, R/W, Address = 0xE280_0040)
4.10.1.3 Tick Time Count Register (TICNT, R/W, Address = 0xE280_0044)
4.10.1.4 RTC Alarm Control Register (RTCALM, R/W, Address = 0xE280_0050)
4.10.1.5 Alarm Second Data Register (ALMSEC, R/W, Address = 0xE280_0054)
4.10.1.6 Alarm Min Data Register (ALMMIN, R/W, Address = 0xE280_0058)
4.10.1.7 Alarm Hour Data Register (ALMHOUR, R/W, Address = 0xE280_005C)
4.10.1.8 Alarm DaY Data Register (ALMDAY, R/W, Address = 0xE280_0060)
4.10.1.9 ALARM Month Data Register (ALMMON, R/W, Address = 0xE280_0064)
4.10.1.10 ALARM Year Data Register (ALMYEAR, R/W, Address = 0xE280_0068)
4.10.1.11 BCD Second Register (BCDSEC, R/W, Address = 0xE280_0070)
4.10.1.12 BCD Minute Register (BCDMIN, R/W, Address = 0xE280_0074)
4.10.1.13 BCD Hour Register (BCDHOUR, R/W, Address = 0xE280_0078)
4.10.1.14 BCD Day Register (BCDDAY R/W, Address = 0xE280_007C)
4.10.1.15 BCD Day of the Week Register (BCDDAYWEEK, R/W, Address = 0xE280_0080)
4.10.1.16 BCD Month Register (BCDMON, R/W, Address = 0xE280_0084)
4.10.1.17 BCD Year Register (BCDYEAR, R/W, Address = 0xE280_0088)
4.10.1.18 Tick Counter Register (CURTICCNT, R, Address = 0xE280_0090)


3.编码

1.PWM控制蜂鸣器

2.看门狗设置中断

3.看门狗设置重启

4.RTC时钟设置

4.参考与拓展

1.IGBT百度百科

1.什么是PWM?
(1)PWM(pulse wide modulation 脉宽调制)
(2)PWM波形是一个周期性波形,周期为T,在每个周期内波形是完全相同的。每个周期内由一个高电平和一个低电
平组成。
(3)PWM波形有2个重要参数:一个是周期T,另一个是占空比duty(占空比就是一个周期内高电平的时间除以周期
时间的商)。
(4)对于一个PWM波形,知道了周期T和占空比duty,就可以算出这个波形的所有细节。譬如高电平时间T*duty,
低电平时间为T*(1-duty)。
(5)PWM波形有很多用处,譬如通信上用PWM来进行脉宽调制对基波进行载波调制;在发光二极管LED照明领域可以
用PWM波形来调制电流进行调光;用来驱动蜂鸣器等设备。
2.PWM波形的生成原理
(1)PWM波形其实就是用时间来控制电平高低,所以用定时器来实现PWM波形是天经地义的。
(2)早期的简单单片机里(譬如51单片机)是没有专用的PWM定时器的,那时候我们需要自己结合GPIO和定时器模
块来手工生产PWM波形(流程是这样:先将GPIO引脚电平拉高、同时启动定时器定T*duty时间,时间到了在isr中
将电平拉低,然后定时T*(1-duty)后再次启动定时器,然后时间到了后在isr中将电平拉高,然后再定时T*duty
时间再次启动定时器····如此循环即可得到周期为T,占空比为duty的PWM波形)。
(3)后来因为定时器经常和PWM产生纠结一起,所以设计SoC的时候就直接把定时器和一个GPIO引脚内部绑定起来
了,然后在定时器内部给我们设置了PWM产生的机制,可以更方便的利用定时器产生PWM波形。此时我们利用PWM定
时器来产生PWM波形再不用中断了。绑定了之后坏处就是GPIO引脚是固定的、死板的、不能随便换的;好处是不用
进入中断isr中,直接可以生成PWM。
(4)在S5PV210中,PWM波形产生有2个寄存器很关键,一个是TCNTB、一个是TCMPB。其中,TCNTB决定了PWM波形
的周期,TCMPB决定了PWM波形的占空比。
(5)最终生成的PWM波形的周期是:TCNTB×时钟周期(PCLK_PSYS经过两极分频后得到的时钟周期)。
注意这个周期是PWM中高电平+低电平的总时间,不是其中之一。
(6)最终生成的PWM波形的占空比是:TCMPB/TCNTB
3.输出电平翻转器
(1)PWM定时器可以规定:当TCNT>TCMPB时为高电平,当TCNT<TCMPB时为低电平。也可以规定:当TCNT>TCMPB时
为低电平,当TCNT<TCMPB时为高电平。在这两种规定下,计算时TCMP寄存器的值会变化。
(2)基于上面讲的,当duty从30%变到70%时,我们TCMPB寄存器中的值就要改(譬如TCNTB中是300时,TCMPB就要
从210变化到90)。这样的改变可以满足需要,但是计算有点麻烦。于是乎210的PWM定时器帮我们提供了一个友好
的工具叫做电平翻转器。
(3)电平翻转器在电路上的实质就是一个电平取反的部件,在编程上反映为一个寄存器位。写0就关闭输出电平反
转,写1就开启输出电平反转。开启后和开启前输出电平刚好高低反转。(输出电平一反转30%的duty就变成70%了)
(4)实战中到底是TCNT和TCMPB谁大谁小时高电平还是低电平,一般不用理论分析,只要写个代码然后用示波器实
际看一下出来的波形就知道了;如果反了就直接开启电平翻转器即可。
4.死区生成器
(1)PWM有一个应用就是用在功率电路中用来对交流电压进行整流。整流时2路整流分别在正电平和负电平时导通工
作,不能同时导通(同时导通会直接短路,瞬间的同时导通都会导致电路烧毁)。大功率的开关电源、逆变器等设
备广泛使用了整流技术。特别是逆变器,用SoC的GPIO输出的PWM波形来分别驱动2路整流的IGBT。
(2)PWM波形用来做整理时要求不能同时高或低,因为会短路。但是实际电路是不理想的,不可能同时上升/下降
沿,所以比较安全的做法是留死区。
(3)死区这东西离不了也多不了。死区少了容易短路,死区多了控制精度低了不利于产品性能的提升。
(4)S5PV210给大家提供了自带的死区生成器,只要开启死区生成器,生产出来的PWM波形就自带了死区控制功能,
用户不用再自己去操心死区问题。
(5)大部分人工作是用不到这个的,直接关掉死区生成器即可。
发布了56 篇原创文章 · 获赞 12 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/I_feige/article/details/104558560
今日推荐