s5pv210学习<三>看门狗

本文介绍了s5pv210微控制器中的看门狗功能,解释了在系统运行异常时看门狗如何通过计时器机制重置CPU。内容涉及看门狗的工作原理、启动模式中的IROM如何关闭看门狗并初始化堆栈,以及通过C语言程序验证IROM的作用。同时,文章提及了如何操作看门狗的寄存器WTCON和WTDATA,并提供了一个简单的代码示例。
摘要由CSDN通过智能技术生成

一、前置知识

在上面两个章节我们点亮了LED灯,了解了s5pv210的启动模式,在启动模式中,我们发现一个很重要的东西,叫做看门狗,首先要了解看门狗i是什么,在板子运行时,系统会发生一些错误,或者跑飞,那么这个时候,板子就处于不正常的运行状态,那么就需要一种机制,来监视系统的运行状态,在系统跑飞时将CPU重置,于是就有了看门狗,看门狗实际上是一个计时器,程序在正常运行时需要每隔一段时间复位看门狗,让看门狗计时器重新及时,如果超时则将CPU复位。


二、问题

在第一个程序中:

1.我们并没有将看门狗关闭,也没有执行过喂狗步骤,为什么CPU并没有重置?

2.点灯的程序必然在ram中执行,而我们并没有初始化你内存堆栈,那么程序在哪里运行的?

仔细看我们的启动过程,我们会发现,关闭看门狗是在BL0中执行的,而BL0是在IROM中执行的,其实IROM中是一段固话的程序,也就是说只要板子启动了,那么irom就会运行,所以irom替我们关闭了看门狗,初始化了堆栈,所以我们的程序可以执行。


三、程序

要证明irom替我们初始化了堆栈关闭了看门狗其实非常简单,只要我们用C语言来点灯,因为C语言的程序一定是运行在堆栈的,所以只要C语言的程序执行了,那么就可以证明IROM执行了。

汇编

.globl _start

_start:
        bl led_main	跳转至led_main执行

halt:
        b halt

bl 行标 跳转到子函数运行


C语言


#define GPCON *((volatile unsigned int *)0xE0200280)
#define GPDAT *((volatile unsigned int *)0xE0200284)
void dalay( unsigned int i );
void dalay( unsigned int i )
{
        while (i--)
                ;
}
int led_main()
{

        GPCON = 0x00001111;
        while (1) {
                GPDAT = 0xf;
                dalay(0x500000);
                GPDAT = 0x0;
                dalay(0x500000);
        }


}

程序运行可以看到LED灯闪烁,所以bl0执行了,并且搬移了flash中或者SD卡的代码至内存,需要注意,搬移的时候会去校验数据的前十六个字节,将前十六个字节累加起来,将校验和放到头的第8~11位。

四、看门狗

上面扯了那么多,终于进入了正题,如何操作看门狗,在芯片手册中搜索watchdog,可以看到如下信息。

和gpio一样,主要的有两个WTCON和WTDATA,WTCON主要用来使能或者关闭WTCON,今天天色已晚,懒得写了,

将WTCON赋值0就关闭了看门狗,后头再说吧,反正前面UBOOT也只是需要关闭看门狗

详细代码见git上面bareOS中的led_wtd

号外:

所有程序在github上,一直会更新至应用层,github地址https://github.com/kentGC/s5pv210,嵌入式交流学习qq群:363361058 欢迎各位大神交流!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值