1 什么是看门狗?

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

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

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

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

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

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

数据手册:在数据手册的Section7.3,大家可以详细来看。如果直接看不懂数据手册,可以百度看门狗,然后看别人的博客来学习。

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

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

4 编写汇编代码

#define GPJ0CON 0xE0200240

#define GPJ0DAT 0xE0200244

#define WTCON 0xE2700000

.global _start // 把_start链接属性改为外部,这样其他文件就可以看见_start了

_start:

// 第1步:关看门狗(向WTCON的bit5写入0即可)

ldr r0, =WTCON

ldr r1, =0x0

str r1, [r0]

// 之后的为功能代码

// 第一步:把所有引脚都设置为输出模式,代码不变

ldr r0, =0x11111111 // 从后面的=可以看出用的是ldr伪指令,因为需要编译器来判断这个数

ldr r1, =GPJ0CON // 是合法立即数还是非法立即数。一般写代码都用ldr伪指令

str r0, [r1] // 寄存器间接寻址。功能是把r0中的数写入到r1中的数为地址的内存中去

// 要实现流水灯,只要在主循环中实现1圈的流水显示效果即可

flash:

// 第1步:点亮LED1,其他熄灭

//ldr r0, =((0<<3) | (1<<4) | (1<<5)) // 清清楚楚的看到哪个灭,哪个是亮

ldr r0, =~(1<<3)

ldr r1, =GPJ0DAT

str r0, [r1] // 把0写入到GPJ0DAT寄存器中,引脚即输出低电平,LED点亮

// 然后延时

bl delay // 使用bl进行函数调用

// 第2步:点亮LED2,其他熄灭

ldr r0, =~(1<<4)

ldr r1, =GPJ0DAT

str r0, [r1] // 把0写入到GPJ0DAT寄存器中,引脚即输出低电平,LED点亮

// 然后延时

bl delay // 使用bl进行函数调用

// 第3步:点亮LED3,其他熄灭

ldr r0, =~(1<<5)

ldr r1, =GPJ0DAT

str r0, [r1] // 把0写入到GPJ0DAT寄存器中,引脚即输出低电平,LED点亮

// 然后延时

bl delay // 使用bl进行函数调用

b flash

// 延时函数:函数名:delay

delay:

ldr r2, =9000000

ldr r3, =0x0

delay_loop:

sub r2, r2, #1 //r2 = r2 -1

cmp r2, r3 // cmp会影响Z标志位,如果r2等于r3则Z=1,下一句中eq就会成立

bne delay_loop

mov pc, lr // 函数调用返回

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

为什么要关看门狗?

一般CPU设计,在CPU启动后看门狗默认是工作的(为什么默认不关闭而要工作?猜测是因为怕你的程序在启动代码前端就死机了或者跑飞了没人管,在打开看门狗之前程序就跑飞了),好处就是没有空当和漏洞,坏处就是在启动代码段我们不方便去喂狗(或者说懒得去喂狗)时看门狗会复位,所以为了偷懒我们就在启动代码前端先去关闭看门狗,然后在后面系统启动起来之后再根据需要决定是否要打开看门狗(一旦打开就必须同时提供喂狗)。

在S5PV210内部的iROM代码(BL0)中,其实已经关过看门狗了。所以我们的启动代码实际上是不用去关也没事的,也就是说今天写的关闭看门狗的代码运行后没有任何现象(没有现象就是正常现象)。

很多CPU内部是没有BL0的,因此也没人给你关看门狗,都要在启动代码前段自己写代码关看门狗,所以今天学习的内容也是有价值的。

C8051关闭看门狗汇编语言,汇编写启动代码之关看门狗相关推荐

  1. 第四天:关看门狗、设置栈、控制icache、重定位、链接脚本

    1.汇编写启动代码:关看门狗 什么是看门狗? 看门狗(watch dog timer看门狗定时器),比如:家门口有一只狗,这个狗定时会饿(譬如两小时一饿),狗饿了就会胡乱咬人,人进进出出要想保证安全必 ...

  2. c语言看门狗的作用,51单片机 c语言看门狗程序怎么写

    51单片机 c语言看门狗程序怎么写 51单片机 c语言看门狗程序怎么写 看门狗在51单片机电路里的作用是防止程序 "跑飞"."死机"后,系统不动作,而采取复位的 ...

  3. 嵌入式开发板03---看门狗、编写启动代码

    看门狗 一般CPU的设计在CPU启动后看门狗默认是工作的,在S5pV210内部的iROM代码(BL0)中,其实已经关过看门狗了.很多CPU内部是没有BL0的因此都要在启动代码的前段自己写代码关闭看门狗 ...

  4. 【单片机】汇编指令入门学习|单片机启动代码汇编

     目录 汇编指令入门学习 [汇编指令]MSP430汇编指令 IAR下的汇编/单片机启动代码汇编 ARM 汇编&ARM 指令集 学习笔记 汇编指令入门学习   在进行汇编程序设计时,MSP430 ...

  5. 第二部分:S5PV210_关看门狗_1

    1.关看门狗 (1)什么是看门狗? 看门狗就好像你家门口的一条狗,我们必须在规定的时间内去喂狗,如果经过了规定的时间,你还不去喂狗的话,它就会咬死你. 看门狗本质上是一个定时器,首先,你给看门狗设置好 ...

  6. (实验6,实验7)单片机,STM32F4学习笔记,代码讲解【看门狗实验】【正点原子】【原创】

    文章目录 其它文章链接,独家吐血整理 实验现象(实验六) 主程序(实验六) 独立看门狗初始化程序(实验六) 代码讲解(实验六) 实验现象(实验七) 主程序(实验七) 窗口看门狗初始化程序(实验七) 代 ...

  7. 用VC写Assembly代码(7)--在Visual C++中使用内联汇编

    在Visual C++中使用内联汇编 一. 优点 使用内联汇编可以在 C/C++ 代码中嵌入汇编语言指令,而且不需要额外的汇编和连接步骤.在 Visual C++ 中,内联汇编是内置的编译器,因此不需 ...

  8. 关闭oracle服务 linux,Linux下启动和关闭Oracle服务与数据库

    一.oracle下常用服务及监听程序的启动和关闭方法 1.启动与关闭数据库 $ sqlplus sql> conn / as sysdba sql> startup (启动数据库) sql ...

  9. STM32开发 -- 烧写/启动模式

    如需转载请注明出处:https://blog.csdn.net/qq_29350001/article/details/80586445 根据我一贯的作风,接下来该讲烧写/启动模式,然后再讲各种烧写方 ...

最新文章

  1. 集显怎么安装android模拟器,集成显卡是不是不能运行Android L模拟器?
  2. mysql什么隔离级别最好_面试必问的 Mysql 四种隔离级别,看完吊打面试官
  3. Elastic-Job中的DataFlowJob
  4. python爬取网页防止重复内容_python解决网站的反爬虫策略总结
  5. sh.k7p.work/index.php,Laowang's Blogs
  6. Redis总结集群方式之主从复制
  7. RTT 使用menuconfig 和cubeMux 在移植过来的模板工程上增加一个串口2
  8. 一加8 Pro渲染图曝光:骁龙865+挖孔屏+后置四摄
  9. 系列文章-- SSIS学习
  10. 中国公有云三巨头,同时支持Rancher Kubernetes平台 1
  11. php连接mib库,常用的一些MIB以及对应的OID
  12. python发送验证码通知短信(互亿无线)
  13. 看你想看的,不受打扰地工作(浏览器屏蔽百度热搜)
  14. java架构师职责_架构师的主要职责
  15. 有监督学习,无监督学习,半监督学习和强化学习
  16. 自动驾驶-YOLOV5目标检测
  17. 百度地图集成,经纬度返回 4.9e-324
  18. 【小白学前端】化腐朽为神奇-HTML+CSS3实现电影票(day01-3)
  19. 微信公众平台订阅号、服务号和企业号三者之间的区别与联系
  20. php 递归 递归方式与算法

热门文章

  1. Vue单位转换 px转换vw
  2. Flutter笔记: 获取网络数据及渲染列表
  3. react-native Cached Bundles 问题
  4. 九宫怎么排列和使用_九宫飞星图如何排列?
  5. 今天开始学习Prepar3D,开篇
  6. destoon二次开发整理
  7. qtabwidget tab样式
  8. 定积分分部积分典型例题_不定积分计算—典型题及解题技巧(上)
  9. 【真人手势动画制作软件】万彩手影大师教程 | 改变动作动画播放顺序
  10. influxDB的group by time(intervals)