SDRAM和重定位(一)---看门狗详解

看门狗(watch dog timer),是s5pv210芯片内部的一种外设,其本质从名字也可以看出就是一种16位的定时器。

看门狗定时器(WDT)有两种用法:

  • 在某些情况下,当出现了芯片中的程序跑飞了或者设备由于外界影响出现错误执行的情况时,我们希望设备能够自动进行复位操作(因为可能这种情况下,人为复位操作很难实现)。看门狗就是这种设备,能够自动进行复位操作。
  • 看门狗定时器也可以用作于普通的定时器中断。

看门狗(WDT)的工作原理:

  当开启看门狗后,经过一段时间(看门狗就是定时器)后,看门狗就会产生复位信号或者产生一个中断信号,让cpu进行自动复位或者进入中断。而正常工作的时候,我们不希望看门狗自动复位,就要在看门狗定时时间到达之前,进行喂狗操作(重新给定时器赋值)。

s5pv210数据手册中与看门狗相关的硬件原理图和相关特殊功能寄存器:

从WDT的逻辑图可以看出,看门狗(WDT)的源时钟是 PCLK 时钟,然后 PCLK 时钟经过预分频(prescaler,大小范围是 0~2^8-1)后,再除以一个因子,便得到最终定时器的时钟。由此可以得出看门狗定时时钟的周期:

=====================================================

WTCON寄存器:

bit[0]:用来控制看门狗是否产生复位信号(自动复位功能开关)

bit[2]:用来控制是否产生中断信号(中断功能开关)

bit[3-4]:选择除数因子的大小

bit[5]:用来控制看门狗定时器是否开启(总开关)

bit[8-15]:预分频的大小

WTDAT寄器:

用来存放定时器的初始值。当刚开启看门狗定时器的时候,WTDAT中的值不会被自动加载到WTCNT寄存器中(开启之后,如果定时器再溢出会自动被加载到WTCNT中),所以在开启看门狗之前,必须要给WTCNT一个初始值。

WTCNT寄存器:

  用来存放定时器的当前值,每经过一个定时器时钟,该寄存器中的值便减 1 ,当此寄存器中的值减为 0 的时候,便根据WTCON中的设置产生一个复位信号或者是一个中断信号。

时间: 2024-12-29 14:42:21

SDRAM和重定位(一)---看门狗详解的相关文章

SDRAM和重定位(四)---链接地址和运行地址

在了解重定位之前,必须先区分开链接地址和运行地址,位置有关代码和位置无关代码 ========================================================= 链接地址和运行地址: 链接地址:指在链接时指定的地址,是我们设想的将来程序要运行的地址.程序中所有标号的地址在链接后便确定了,不管程序在哪运行,都不会改变.使用arm-linux-objdump反汇编查看的就是链接地址. 运行地址:指程序在板子中实际运行的地址 从上面的定义可以看出,链接地址和运行地址可以

SDRAM和重定位(二)---开始在汇编代码中调用 C 语言

前面的点亮led的代码由于比较简单,所以全部用汇编代码完成,但是随着代码越来越多,逻辑关系越来越复杂,想要完全用汇编代码来写程序不太现实,必须要借助 c 语言程序,那么就会有从汇编语言到 c 语言的一个过渡阶段. ======================================================= 如何在汇编语言中调用 c 语言? 在汇编中调用 c语言程序的方法很简单,只需利用汇编代码:bl xxx(函数名)即可,但是重点不是如何调用 c 程序,而是汇编代码要为运行 c

SDRAM和重定位(三)---icache的开启和关闭

这里只是简单的介绍下 icache,对于 icache和 dcache 以后有时间再去深入研究下.dcache 主要和虚拟内存管理(MMU)相关. 之所以会出现 cache,主要是为了解决 cpu 和 RAM之间的速度差异.通常来说 cpu 的主频很高速度非常快,但是内存ram的速度相对于cpu来说就慢了很多,这就导致系统整体的速度将会被拖慢. 为了解决这个问题,就在 cpu 和 ram 之间加入一层cache.cache的特点就是容量小,速度比ram快,价格高.这样先将 ram 中的内容放到

重识Activity——生命周期详解

1. 单个Activity生命周期*  显示状态--onCreate().onStart().onResume()* 隐藏状态--onPause():部分可见.onStop():隐藏,黑屏状态* 销毁--onDestroy() 2. 多个Activity生命周期交互* 第一个Activity启动--依次调用onCreate().onStart().onResume ()* 第二个Activity启动--第一个activity调用onPause (),第二个activity调用onCreate (

韦东山yy公开课笔记(2)--汇编,段,栈,重定位/链接地址,位置无关吗

1. 要不要学习汇编 可以只懂一点,工作中基本不用,一旦用就是出了大问题 ldr : load 读内存 ldr r0, [r1]  : r1里存放的是地址值, 去这个地址读取4字节的内容,存入r0 str : stroe 写内存 str r0, [r1]  : r1里存放的是地址值, 把r0里的4字节数据存入这个地址 所有的汇编.C程序也好,终极目标就是:读写某个地址 2. 程序为何要分为代码段.数据段.BSS段 程序的指令等是只读的,可以把它们归为一类,以便运行时可以放在ROM等设备上, 当然

s3c2440裸机-代码重定位(2.编程实现代码重定位)

代码重定位(2.编程实现代码重定位) 1.引入链接脚本 我们上一节讲述了为什么要重定位代码,那么怎么去重定位代码呢? 上一节我们发现"arm-linux-ld -Ttext 0 -Tdata 0x30000000"这种方式编译出来的bin文件有800多M,这肯定是不行的,那么需要怎么把.data段重定位到sdram呢? 可以通过AT参数指定.data段在编译时的存放位置,我们发现这样指定太不方便了,而且不好确定要放在bin文件的哪个位置.这里就要引入链接脚本,它可以帮我们解决这个不必要

Mysql高手系列 - 第14篇:详解事务

这是Mysql系列第14篇. 环境:mysql5.7.25,cmd命令中进行演示. 开发过程中,会经常用到数据库事务,所以本章非常重要. 本篇内容 什么是事务,它有什么用? 事务的几个特性 事务常见操作指令详解 事务的隔离级别详解 脏读.不可重复读.可重复读.幻读详解 演示各种隔离级别产生的现象 关于隔离级别的选择 什么是事务? 数据库中的事务是指对数据库执行一批操作,这些操作最终要么全部执行成功,要么全部失败,不会存在部分成功的情况. 举个例子 比如A用户给B用户转账100操作,过程如下: 1

十四、详解事务

本篇内容 什么是事务,它有什么用? 事务的几个特性 事务常见操作指令详解 事务的隔离级别详解 脏读.不可重复读.可重复读.幻读详解 演示各种隔离级别产生的现象 关于隔离级别的选择 一.什么是事务? 数据库中的事务是指对数据库执行一批操作,这些操作最终要么全部执行成功,要么全部失败,不会存在部分成功的情况. 二.事务的几个特性(ACID) 原子性(Atomicity) 事务的整个过程如原子操作一样,最终要么全部成功,或者全部失败,这个原子性是从最终结果来看的,从最终结果来看这个过程是不可分割的.

PE文件结构详解(六)重定位

前面两篇 PE文件结构详解(四)PE导入表 和 PE文件结构详解(五)延迟导入表 介绍了PE文件中比较常用的两种导入方式,不知道大家有没有注意到,在调用导入函数时系统生成的代码是像下面这样的: 在这里,IE的iexplorer.exe导入了Kernel32.dll的GetCommandLineA函数,可以看到这是个间接call,00401004这个地址的内存里保存了目的地址, 根据图中显示的符号信息可知,00401004这个地址是存在于iexplorer.exe模块中的,实际上也就是一项IAT的