深圳市航顺芯片技术研发有限公司
直播中

李勇俊

7年用户 1489经验值
私信 关注
[问答]

关闭看门狗定时器中断的步骤有哪些

看门狗的作用是什么?

看门狗的工作方式有哪些?
关闭看门狗定时器中断的步骤有哪些?

回帖(1)

林倩倩

2021-11-9 16:12:11
  上一节根据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
举报

更多回帖

发帖
×
20
完善资料,
赚取积分