ARM 汇编写启动代码之关看门狗
admin
2024-03-16 16:55:25
0

一、什么是看门狗?

看门狗(watch dog timer 看门狗定时器)。大家想象这样一个场景:家门口有一只狗,这个狗定时会饿(譬如说 2 小时一饿),够饿了会胡乱咬死人。人进进出出要想保证安全必须提前喂狗(必须在上次喂过后的2小时内喂狗才行)。如果超时没喂狗就会被咬死,如果提前喂狗没关系,但是本次喂狗时间就会从这里开始计算。

现实中因为一些外部因素,电子设备经常会跑飞或者死机(譬如极端炎热、极端寒冷、工业复杂场合)。在这种情况下我们希望设备自动复位而不需要人工干预(无人值守)。看门狗用来完成这个工作。看门狗其实是我们 SoC 内部的一个定时器(类似于闹钟,类似于门口的狗),定好时间之后看门狗定时器会去计时,时间到之前(狗饿了之前)必须去重新置位看门狗定时器(喂狗),如果没有喂狗则系统会被强制复位。

系统在正常工作时,系统软件会自己去喂狗,所以看门狗定时器不会复位。但是系统一旦故障跑飞啥的,看门狗就没人喂了,然后下一个周期就会自动复位,达到我们期望的效果。


二、分析硬件物理特性、原理图、数据手册

物理特性上看门狗其实是个定时器(跟现实中的闹钟类似),硬件上就是SoC内部的一个内部外设。

原理图:看门狗不用分析原理图,因为看门狗属于内部外设,且没有外部相关的原件与他有关,所以不需要原理图分析,原理图上根本找不到和看门狗有关的地方。

数据手册:在数据手册的Section7.3。

找到关键性操作SFR(特殊功能寄存器)

WTCON(0xE2700000),其中bit5是看门狗的开关:0代表关,1代表开

源代码

root@ubuntu:/home/aston/workspace/git_xxxx# cat led.S 
/** 文件名: led.S* 作者: xxx* 描述: 演示汇编关闭看门狗  */#define GPJ0CON 0xE0200240
#define GPJ0DAT 0xE0200244 #define WTCON   0xE2700000.global _start  //解决 make 编译警告: arm-linux-ld: warning: cannot find entry symbol _start; defaulting to 00000000// 把 _start 链接属性改为外部,这样其他文件就可以看见 _start 了
_start://第 1 步,关看门狗(向 WTCON 的 bit5 写入 0 即可)ldr r0, =WTCONldr r1, =0x0str r1, [r0]//之后的为功能代码//第一步: 把所有引脚设置成输出模式 ldr r0, =0x11111111     //从后面的 = 可以看出用的是 ldr 伪指令,因为需要编译器来判断这个数ldr r1, =GPJ0CON        //是合法立即数还是非法立即数,一般写代码都用 ldr 伪指令str r0, [r1]            // 寄存器间接寻址。功能是把 r0 中的数写入到 r1 中的数为地址的内存中去//要实现流水灯,只要在主循环中实现 1 圈的流水显示效果即可
flash://第 1 步: 点亮 LED1, 其他熄灭ldr r0, =~(1 << 3) ldr r1, =GPJ0DATstr r0, [r1]            //把 0 写入到 GPJ0DAT 寄存器中,引脚即输出低电平,LED 点亮//然后延时bl  delay               // 使用 bl 进行函数调用//第 2 步: 点亮 LED2, 其他熄灭ldr r0, =~(1 << 4) ldr r1, =GPJ0DATstr r0, [r1]            //把 0 写入到 GPJ0DAT 寄存器中,引脚即输出低电平,LED 点亮//然后延时bl  delay               // 使用 bl 进行函数调用//第 3 步: 点亮 LED3, 其他熄灭ldr r0, =~(1 << 5) ldr r1, =GPJ0DATstr r0, [r1]            //把 0 写入到 GPJ0DAT 寄存器中,引脚即输出低电平,LED 点亮//然后延时bl  delay               // 使用 bl 进行函数调用b flashb .                     // . 代表当前这一句指令的地址,这个就是高大上的死循环//延时函数
delay:ldr r2, =10000000ldr r3, =0x0
delay_loop:sub r2, r2, #1          // r2 = r2 -1cmp r2, r3              // cmp 会影响 z 标志位,如果 r2 等于 r3 则 z =1,下一句中 eq 就会成立bne delay_loopmov pc, lr              // 函数调用返回

三、总结 210 中看门狗特性(iROM 中已经关看门狗)

为什么要关看门狗?

  • 一般 CPU 设计,在 CPU 启动后看门狗默认是工作的(为什么默认不关闭而要工作?我猜测是因为怕你的程序在启动代码前端就死机了或者跑飞了没人管),好处就是没有空挡和漏洞,坏处就是在启动代码段我们不方便去喂狗(或者说懒得去喂狗)时看门狗会复位,所以为了偷懒我们就在启动代码前端先去关闭看门狗,然后在后面系统启动起来之后再根据需要决定是否要打开看门狗(一旦打开就必须同时提供喂狗)。
  • 在 S5PV210 内部的 iROM 代码( BL0 )中,其实已经关过看门狗了。所以我们的启动代码实际上是不用去关也没事的,也就是说今天写的关闭看门狗的代码运行后没有任何现象(没有现象就是正常现象).
  • 很多 CPU 内部是没有 BL0 的,因此也没人给你关看门狗,都要在启动代码前段自己写代码关看门狗,所以今天学习的内容也是有价值的。

源自朱有鹏老师.

相关内容

热门资讯

2025年“艺海流金·多彩贵州... 7月7日,由文化和旅游部、贵州省人民政府共同主办,中央港澳工作办公室、国务院港澳事务办公室支持的20...
养驴怎么样? 养驴怎么样?想养驴养驴的投资成本高,而且回收慢,需谨慎。驴的生长周期长,繁殖数度慢,这是主要弱点。当...
开手动挡起步时,到底是直接怠速... 开手动挡起步时,到底是直接怠速还是给油?我觉得应该选择直接怠速,因为这样的做法是比较安全的,也不会导...
五十而知四十九年非的下一句 五十而知四十九年非的下一句何者?先者难为知,而后者易为攻也。五十而知四十九年非意思是:活到五十岁的时...
孙睿有什么新书吗? 孙睿有什么新书吗?继《我是你儿子》后,孙睿打算明年开写《草样年华3》。
杭州有一个别称叫武林,那“人在... 杭州有一个别称叫武林,那“人在武陵微醉”的“武陵”有是指现在的那里呢?“人在武陵微醉”一句用了“武陵...
能使毛孔快速变小的产品是不是含... 能使毛孔快速变小的产品是不是含激素,城野医生水就能,会不会含激素?是有激素的产品会直接破坏脸上原本能...
恋爱的经验技巧 恋爱的经验技巧他的技巧有很多种,但是我认为恋爱中最好的技巧就是真诚恋爱里面最重要的是你要懂得体贴,关...
完美国际暗影会在哪 完美国际暗影会在哪答案:完美国际暗影会位于游戏内的“暗影城”。玩家可以通过传送或使用地图快捷键直接到...
奥日与黑暗森林第一关为什么拿到... 奥日与黑暗森林第一关为什么拿到第一个能量核心以后往右就回不去了继续向前走,要拿到 飞檐走壁 这项技能...
05《傲慢与偏见》的女主角是《... 05《傲慢与偏见》的女主角是《加勒比海盗》的女主角演的吗?顶 楼上的 和楼上的楼上的~!!我很喜欢...
熟悉沈阳的朋友进 熟悉沈阳的朋友进
小说《异世灵武天下》全集 小说《异世灵武天下》全集到思路客 更新到三千一百六十七章
湖心亭看雪怎么预习? 湖心亭看雪怎么预习?湖心亭看雪 这篇文章怎么预习希望要快!!!~~~(*^__^*) 嘻嘻……试着翻...
九州缥缈录 Ⅱ苍云古齿 Ⅲ天下... 九州缥缈录 Ⅱ苍云古齿 Ⅲ天下名将 Ⅳ辰月之征有声电子版,不要广播剧版的最快回答那个是对的,太大了传...
《射雕英雄传》中第九回所记的岳... 《射雕英雄传》中第九回所记的岳飞所作的四首词的内容是什么。这四首词分别是《菩萨蛮》、《丑奴儿》、《贺...
网恋让我很痛苦我该怎么办 网恋让我很痛苦我该怎么办其实现实与网络有很大的差别,有些比较喜欢现实一点,有些人则喜欢比较理想化一点...
对于男人来说,爱与性,哪个更重... 对于男人来说,爱与性,哪个更重要?对于男人来说,性肯定比爱重要。性更重要,没事无聊的时候这个可以解决...
老舍的文章有什么风格 老舍的文章有什么风格具有独特的幽默风格和浓郁的民族色彩,以及从内容到形式的雅俗共赏浓郁的地方色彩,生...
和“蓄势待发”意思相近的成语有... 和“蓄势待发”意思相近的成语有哪些? 整装待发;万事俱备只欠东风;箭在弦上不得不发;蓄势待发 发音 ...