微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > ARM中的看门狗程序

ARM中的看门狗程序

时间:11-09 来源:互联网 点击:
ARM中,有一个硬件部分叫WATCH DOG。这个硬件,一直在做一件事情:就是,从某一数值,一直数,各一段时间减一,隔一段时间减一,直到减到0的时候将会触发重启或者中断。而有时候,为了预防死机,我们在操作系统跑起来的时候会有一个特定的程序来做一件事情:减到特定是值的时候数值将会重新置到100.这样,看门狗将会循环往复做一件事情:一直数数,而不会死机。

这个程序叫做守护程序:又叫做喂狗程序。

看门狗的逻辑运算图如下:

今天,有看门狗来写了一个程序:隔一段时间来触发一个中断,每次中断来的时候,将会让板子上面的灯和蜂鸣器做出相应的反映:

首先:在头文件中将具体的寄存器声明:

1 2 #define gpiobase        0x113 #define GPM4CON         (*(volatile unsigned long *)(gpiobase + 0x02E0)) 4 #define GPM4DAT         (*(volatile unsigned long *)(gpiobase + 0x02E4))5 #define GPX3CON         (*(volatile unsigned long *)(gpiobase + 0x0C60))6 #define GPX3DAT         (*(volatile unsigned long *)(gpiobase + 0x0C64))7 #define GPD0CON         (*(volatile unsigned long *)(gpiobase + 0x4A0))8 #define GPD0DAT         (*(volatile unsigned long *)(gpiobase + 0x4A4))9 10 #define ICC 0x1048011 12 #define ICCICR_CPU0     (*(volatile unsigned long *)(ICC + 0x0)) 13 #define ICCPMR_CPU0     (*(volatile unsigned long *)(ICC + 0x4)) 14 #define ICCBPR_CPU0     (*(volatile unsigned long *)(ICC + 0x8)) 15 #define ICCIAR_CPU0     (*(volatile unsigned long *)(ICC + 0xC)) 16 #define ICCEOIR_CPU0    (*(volatile unsigned long *)(ICC + 0x0010)) 17 #define ICCRPR_CPU0     (*(volatile unsigned long *)(ICC + 0x0014)) 18 #define ICCHPIR_CPU0    (*(volatile unsigned long *)(ICC + 0x0018)) 19 #define ICCABPR_CPU0    (*(volatile unsigned long *)(ICC + 0x001C)) 20 #define INTEG_EN_C_CPU0 (*(volatile unsigned long *)(ICC + 0x0040)) 21 #define ICCIIDR         (*(volatile unsigned long *)(ICC + 0x00FC))22 23 #define ICD 0x1049024 25 #define ICDDCR            (*(volatile unsigned long *)(ICD + 0x0))26 #define ICDICTR           (*(volatile unsigned long *)(ICD + 0x4))27 #define ICDIIDR           (*(volatile unsigned long *)(ICD + 0x8))28 #define ICDISR0_CPU0      (*(volatile unsigned long *)(ICD + 0x0080))29 #define ICDISER0_CPU0     (*(volatile unsigned long *)(ICD + 0x0100))30 #define ICDISER2_CPU0     (*(volatile unsigned long *)(ICD + 0x0108))31 #define ICDICER0_CPU0     (*(volatile unsigned long *)(ICD + 0x0180))32 #define ICDISPR0_CPU0     (*(volatile unsigned long *)(ICD + 0x0200))33 #define ICDICPR0_CPU0     (*(volatile unsigned long *)(ICD + 0x0280))34 #define ICDABR0_CPU0      (*(volatile unsigned long *)(ICD + 0x0300))35 #define ICDIPR0_CPU0      (*(volatile unsigned long *)(ICD + 0x0400))36 #define ICDIPR1_CPU0      (*(volatile unsigned long *)(ICD + 0x0404))37 #define ICDIPR2_CPU0      (*(volatile unsigned long *)(ICD + 0x0408))38 #define ICDIPR3_CPU0      (*(volatile unsigned long *)(ICD + 0x040C))39 #define ICDIPR4_CPU0      (*(volatile unsigned long *)(ICD + 0x0410))40 #define ICDIPR5_CPU0      (*(volatile unsigned long *)(ICD + 0x0414))41 #define ICDIPR6_CPU0      (*(volatile unsigned long *)(ICD + 0x0418))42 #define ICDIPR7_CPU0      (*(volatile unsigned long *)(ICD + 0x041C))43 #define ICDIPR18_CPU0      (*(volatile unsigned long *)(ICD + 0x448))44 45 #define ICDIPTR0_CPU0   (*(volatile unsigned long *)(ICD + 0x0800))46 #define ICDIPTR1_CPU0   (*(volatile unsigned long *)(ICD + 0x0804))47 #define ICDIPTR18_CPU0  (*(volatile unsigned long *)(ICD + 0x0848))48 #define ICDSGIR     (*(volatile unsigned long *)(ICD + 0x0F00))49 50 51 #define WTCON    (*(volatile unsigned long *)0x10060)52 #define WTDAT    (*(volatile unsigned long *)0x10064)53 #define WTCNT    (*(volatile unsigned long *)0x10068)54 #define WTCLRINT (*(volatile unsigned long *)0x1006C) 55 56 57 

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top