上一节根据uboot架构分析我们一步一步的设置系统为SVC,小节根据架构设计步骤来关闭看门狗和中断中断!(架构中的第二步和第三步)
相信做嵌入式这行的对看门狗不承认!
1.看门狗的作用:在嵌入式领域,某些系统需要长期运行在无人看守的环境。在运行过程中,免难不出现系统死机的情况,这时就需要系统自身带有一种自动重启的功能.watchdog一般就是一个硬件模块,其作用就是在系统死机时帮助系统实现自动重启。
2.看门狗的工作方式:看门狗在硬件上实现了计时功能,启动计时后,用户软件必须在计时结束前开始计时,日常称“喂狗”,如果到了时间还没有重开始计时,那么就认为系统是死机了,就自动重启系统。
这里贴上6410 Watchdog ARM芯片手册上看门狗部分的英文原版!
34 WATCHDOG TIMER
本章介绍了S3C6410X RISC微处理器中看门狗定时器的功能和用法。
34.1 概述
S3C6410X RISC 微处理器看门狗定时器用于在
受到噪声和系统错误等故障干扰时恢复控制器操作 。看门狗定时器产生复位信号。
它可以作为一个普通的 16 位间隔定时器来请求中断服务。
使用 WDT 代替 PWM 定时器的优点是 WDT 产生复位信号。
34.2 特性
看门狗定时器包括以下特性:
•
具有中断请求的正常间隔定时器模式。
•
当定时器计数值达到0(超时)时,内部复位信号被激活。
• 电
平触发中断机制。
34.3 功能描述
34.3.1 看门狗定时器操作
图 34-1 显示了看门狗定时器 的功能框图。看门狗定时器只使用 PCLK 作为它的
源时钟。对PCLK频率进行预分频,生成对应的看门狗定时器时钟,
再分频得到的频率。
下面的一张图可以分为三个部分:
1. 时钟源PCLK,分频器将时钟源分频出来的时钟就是看门狗所用的时钟!
2.计数逻辑模块,减1操作,设置一个时间,会一直减减,所以一定时间要定时重新设置新值
3。减到0时会产生一个信号复位信号发生器---》RESET
一般uboot程序比较简单,所以一开始都是把看门狗关闭
预分频值和分频系数在看门狗定时器控制(WTCON)
寄存器中指定。有效的预分频器值范围为 0 到 28-1。分频因子可以选择为
16、32、64 或 128。
使用以下公式计算看门狗定时器时钟频率和每个定时器时钟
周期的持续时间 :
t_watchdog = 1/( PCLK / (Prescaler value + 1) / Division_factor )
34.3.2 WTDAT & WTCNT
一旦看门狗定时器被启用,看门狗定时器数据(WTDAT)寄存器的值不能自动
重新加载到定时器计数器(WTCNT)中。 因此,
在看门狗定时器启动之前,必须将初始值写入看门狗定时器 计数 (WTCNT) 寄存器。
34.3.3 调试环境的考虑
当 S3C6410 处于使用 Embedded ICE 的调试模式时,看门狗定时器不能工作。
看门狗定时器可以从CPU内核信号判断当前是否处于调试模式
(DBGACK 信号)。一旦 DBGACK 信号被置位,看门狗定时器的复位输出不会被激活,因为
看门狗定时器已到期。
34.4 特殊功能寄存器
34.4.1 存储器映射
34.5 个别寄存器说明
34.5.1 看门狗定时器控制(WTCON)寄存器
WTCON 寄存器允许用户启用/禁用看门狗定时器,从 4 个不同的
中断源中选择时钟信号 ,启用/禁用,并启用/禁用看门狗定时器输出。
看门狗定时器用于 S3C6410 上电后恢复故障重启。此时,
禁止中断产生,使能看门狗定时器输出复位信号。
如果不希望控制器重启,并且用户想使用
看门狗定时器提供的普通定时器,则 启用中断产生并禁用看门狗定时器仅输出复位信号。
从下面的表格可以:WTCON可以控制看门狗的开关,看下面的表格设置第0位为0就禁用了看门狗
1。设置词句,句柄地址
2. 设置视频哪一位可以关闭看门狗
3. 然后用代码实现
注意:‘Reset enable/disable’的初始状态为1(reset enable)。如果用户
不禁用该位,S3C6410 将在大约 5.63 秒内 重新启动(在 PCLK 为 12MHz 的情况下)。所以在引导加载程序中,这个位应该
在操作系统或固件控制之前被禁用 。
这可以先了解一下,这里暂时用不到!
34.5.2 WATCHDOG TIMER DATA (WTDAT) REGISTER
WTDAT 寄存器用于指定超时持续时间。WTDAT 的内容不能
在初始看门狗定时器操作时自动 加载到定时器计数器中。但是,使用 0x8000(WTCNT 的初始值)
将驱动第一次超时。然后,WTDAT 的值将自动重新加载到 WTCNT。
34.5.3 看门狗定时器计数(WTCNT)寄存器
WTCNT 寄存器包含正常操作期间看门狗定时器的当前计数值。
注意:
当
看门狗定时器最初启用时,WTDAT 寄存器的内容不能自动加载到定时器计数寄存器中 ,因此在启用之前必须将 WTCNT 寄存器设置为初始值
。
接着上一课,这里贴上关闭看门狗的程序代码(OK6410)
《span style=“font-size:18px;”》reset:
bl set_svc
bl disable_watchdog
set_svc: mrs r0, cpsr
bic r0, r0, #0x1f @后5位清零
orr r0, r0, #0xd3 @相应位置1 10011
msr cpsr, r0 @写入GPSR寄存器
mov pc, lr
#define pWTCON 0x7e004000 @watchdog CON寄存器地址
disable_watchdog:
ldr r0, =pWTCON @将地址装载到通用寄存器
mov r1, #0x0 @将0传到r1寄存器中
str r1, [r0] @将值传到到寄存器地址所在的内存中
mov pc, lr《/span》
下面来关闭中断部分:(还是看数据表)
6410采用中断中断的方式,硬件自动跳转!
关闭中断选择两个控制动作:
1. CPSR我位中断,还有F位控制快速中断,这里实际上在设置SVC模式时就自带!这里可以在前面的博文中找到CPSR屏蔽手册截图!(看看可以继续连接起来)
2. 还需要中断屏蔽屏蔽
同上面,先找到那个谁最后捕捉,然后那个寄存器要设置什么值,从下面手册上的截图表格可以看到Interupt Enable Register 就是我们要找的
从数据表中找到这个寄存器:
这里可以看到6410的中断批评,VIC0和VIC1,下面来看看这两个诉求的描述!
破坏使能运动从上面的表格工具,这里这个运动能力使能破坏,要屏蔽使用VICINTENEAR
运动控制再考虑VICINTENCLEAR:
写是没有效果,看的截图可以看到要向两个
上面的博中写入这全1这里的贴上代码,还是在之前的文上开始。S基础上加上部分的代码!
reset:
bl set_svc
bl disable_watchdog
bl disable_interrupt
set_svc:
mrs r0, cpsr
bic r0, r0, #0x1f @后5位清零
orr r0, r0, #0xd3 @相应位置1 10011
msr cpsr, r0 @写入GPSR寄存器
mov pc, lr
#define pWTCON 0x7e004000 @watchdog CON寄存器地址
disable_watchdog:
ldr r0, =pWTCON @将地址装载到通用寄存器
mov r1, #0x0 @将0传到r1寄存器中
str r1, [r0] @将值传到到寄存器地址所在的内存中
mov pc, lr
disable_interrupt:
mvn r1,#0x0 @写入全1 取反然后填入到r1寄存器中
ldr r0,=0x71200014 @用r0保存地址
str r1,[r0] @然后将r1中的值写入到ro地址中去
ldr r0,=0x71300014
str r1,[r0]
mov pc, lr
上一节根据uboot架构分析我们一步一步的设置系统为SVC,小节根据架构设计步骤来关闭看门狗和中断中断!(架构中的第二步和第三步)
相信做嵌入式这行的对看门狗不承认!
1.看门狗的作用:在嵌入式领域,某些系统需要长期运行在无人看守的环境。在运行过程中,免难不出现系统死机的情况,这时就需要系统自身带有一种自动重启的功能.watchdog一般就是一个硬件模块,其作用就是在系统死机时帮助系统实现自动重启。
2.看门狗的工作方式:看门狗在硬件上实现了计时功能,启动计时后,用户软件必须在计时结束前开始计时,日常称“喂狗”,如果到了时间还没有重开始计时,那么就认为系统是死机了,就自动重启系统。
这里贴上6410 Watchdog ARM芯片手册上看门狗部分的英文原版!
34 WATCHDOG TIMER
本章介绍了S3C6410X RISC微处理器中看门狗定时器的功能和用法。
34.1 概述
S3C6410X RISC 微处理器看门狗定时器用于在
受到噪声和系统错误等故障干扰时恢复控制器操作 。看门狗定时器产生复位信号。
它可以作为一个普通的 16 位间隔定时器来请求中断服务。
使用 WDT 代替 PWM 定时器的优点是 WDT 产生复位信号。
34.2 特性
看门狗定时器包括以下特性:
•
具有中断请求的正常间隔定时器模式。
•
当定时器计数值达到0(超时)时,内部复位信号被激活。
• 电
平触发中断机制。
34.3 功能描述
34.3.1 看门狗定时器操作
图 34-1 显示了看门狗定时器 的功能框图。看门狗定时器只使用 PCLK 作为它的
源时钟。对PCLK频率进行预分频,生成对应的看门狗定时器时钟,
再分频得到的频率。
下面的一张图可以分为三个部分:
1. 时钟源PCLK,分频器将时钟源分频出来的时钟就是看门狗所用的时钟!
2.计数逻辑模块,减1操作,设置一个时间,会一直减减,所以一定时间要定时重新设置新值
3。减到0时会产生一个信号复位信号发生器---》RESET
一般uboot程序比较简单,所以一开始都是把看门狗关闭
预分频值和分频系数在看门狗定时器控制(WTCON)
寄存器中指定。有效的预分频器值范围为 0 到 28-1。分频因子可以选择为
16、32、64 或 128。
使用以下公式计算看门狗定时器时钟频率和每个定时器时钟
周期的持续时间 :
t_watchdog = 1/( PCLK / (Prescaler value + 1) / Division_factor )
34.3.2 WTDAT & WTCNT
一旦看门狗定时器被启用,看门狗定时器数据(WTDAT)寄存器的值不能自动
重新加载到定时器计数器(WTCNT)中。 因此,
在看门狗定时器启动之前,必须将初始值写入看门狗定时器 计数 (WTCNT) 寄存器。
34.3.3 调试环境的考虑
当 S3C6410 处于使用 Embedded ICE 的调试模式时,看门狗定时器不能工作。
看门狗定时器可以从CPU内核信号判断当前是否处于调试模式
(DBGACK 信号)。一旦 DBGACK 信号被置位,看门狗定时器的复位输出不会被激活,因为
看门狗定时器已到期。
34.4 特殊功能寄存器
34.4.1 存储器映射
34.5 个别寄存器说明
34.5.1 看门狗定时器控制(WTCON)寄存器
WTCON 寄存器允许用户启用/禁用看门狗定时器,从 4 个不同的
中断源中选择时钟信号 ,启用/禁用,并启用/禁用看门狗定时器输出。
看门狗定时器用于 S3C6410 上电后恢复故障重启。此时,
禁止中断产生,使能看门狗定时器输出复位信号。
如果不希望控制器重启,并且用户想使用
看门狗定时器提供的普通定时器,则 启用中断产生并禁用看门狗定时器仅输出复位信号。
从下面的表格可以:WTCON可以控制看门狗的开关,看下面的表格设置第0位为0就禁用了看门狗
1。设置词句,句柄地址
2. 设置视频哪一位可以关闭看门狗
3. 然后用代码实现
注意:‘Reset enable/disable’的初始状态为1(reset enable)。如果用户
不禁用该位,S3C6410 将在大约 5.63 秒内 重新启动(在 PCLK 为 12MHz 的情况下)。所以在引导加载程序中,这个位应该
在操作系统或固件控制之前被禁用 。
这可以先了解一下,这里暂时用不到!
34.5.2 WATCHDOG TIMER DATA (WTDAT) REGISTER
WTDAT 寄存器用于指定超时持续时间。WTDAT 的内容不能
在初始看门狗定时器操作时自动 加载到定时器计数器中。但是,使用 0x8000(WTCNT 的初始值)
将驱动第一次超时。然后,WTDAT 的值将自动重新加载到 WTCNT。
34.5.3 看门狗定时器计数(WTCNT)寄存器
WTCNT 寄存器包含正常操作期间看门狗定时器的当前计数值。
注意:
当
看门狗定时器最初启用时,WTDAT 寄存器的内容不能自动加载到定时器计数寄存器中 ,因此在启用之前必须将 WTCNT 寄存器设置为初始值
。
接着上一课,这里贴上关闭看门狗的程序代码(OK6410)
《span style=“font-size:18px;”》reset:
bl set_svc
bl disable_watchdog
set_svc: mrs r0, cpsr
bic r0, r0, #0x1f @后5位清零
orr r0, r0, #0xd3 @相应位置1 10011
msr cpsr, r0 @写入GPSR寄存器
mov pc, lr
#define pWTCON 0x7e004000 @watchdog CON寄存器地址
disable_watchdog:
ldr r0, =pWTCON @将地址装载到通用寄存器
mov r1, #0x0 @将0传到r1寄存器中
str r1, [r0] @将值传到到寄存器地址所在的内存中
mov pc, lr《/span》
下面来关闭中断部分:(还是看数据表)
6410采用中断中断的方式,硬件自动跳转!
关闭中断选择两个控制动作:
1. CPSR我位中断,还有F位控制快速中断,这里实际上在设置SVC模式时就自带!这里可以在前面的博文中找到CPSR屏蔽手册截图!(看看可以继续连接起来)
2. 还需要中断屏蔽屏蔽
同上面,先找到那个谁最后捕捉,然后那个寄存器要设置什么值,从下面手册上的截图表格可以看到Interupt Enable Register 就是我们要找的
从数据表中找到这个寄存器:
这里可以看到6410的中断批评,VIC0和VIC1,下面来看看这两个诉求的描述!
破坏使能运动从上面的表格工具,这里这个运动能力使能破坏,要屏蔽使用VICINTENEAR
运动控制再考虑VICINTENCLEAR:
写是没有效果,看的截图可以看到要向两个
上面的博中写入这全1这里的贴上代码,还是在之前的文上开始。S基础上加上部分的代码!
reset:
bl set_svc
bl disable_watchdog
bl disable_interrupt
set_svc:
mrs r0, cpsr
bic r0, r0, #0x1f @后5位清零
orr r0, r0, #0xd3 @相应位置1 10011
msr cpsr, r0 @写入GPSR寄存器
mov pc, lr
#define pWTCON 0x7e004000 @watchdog CON寄存器地址
disable_watchdog:
ldr r0, =pWTCON @将地址装载到通用寄存器
mov r1, #0x0 @将0传到r1寄存器中
str r1, [r0] @将值传到到寄存器地址所在的内存中
mov pc, lr
disable_interrupt:
mvn r1,#0x0 @写入全1 取反然后填入到r1寄存器中
ldr r0,=0x71200014 @用r0保存地址
str r1,[r0] @然后将r1中的值写入到ro地址中去
ldr r0,=0x71300014
str r1,[r0]
mov pc, lr
举报