WDT中断实验

提示:几乎每种处理器都支持特定的异常处理,中断也是异常的一种。


提示:本次实验我们需要做的是一个关于WDT中断实验,由于我缺少相关理论部分,就对理论不展开过多的解释。

文章目录

  • WDT中断实验
  • 前言
  • 一、中断
  • 二、WDT中断实验
    • 1.WDT是什么
    • 2、对上图的理解
  • 三、实验代码
  • 总结

前言

本次是实验是关于WDT的中断实验。


提示:以下是本篇文章正文内容,仅供参考。

一、中断

1、什么是 中断?

在处理器中,中断是一个过程,即CPU在正常执行程序的过程中,遇到 外部 / 内部 的紧急事件需要处理,暂时中断(中止)当前程序的执行,而转去为事件服务,待服务完毕,再返回暂停处(断点)执行原来的程序

2、什么是 中断源?

在处理器中,可以引起中断的信号叫做中断源。

3、中断的种类?

ARM处理器中有7种类型的异常,按照优先级的顺序,从高到低的顺序依次是:
复位异常(Reset)
数据异常(Data Abort)
快速中断异常(FIQ)
外部中断异常(IRQ)
预取异常(Prefetch Abort)
软件中断(SWI)
未定义指令异常(Undefined Instruction)

异常类型 处理器模式 运行低地址 执行高地址
复位异常 特权模式 0x00000000 0xffff0000
未定义指令异常 未定义指令中止模式 0x00000004 0xffff0004
软中断异常 特权模式 0x00000008 0xffff0008
预取异常 指令访问中止模式 0x0000000c 0xffff000c
数据异常 数据访问中止模式 0x00000010 0xffff0010
外部中断异常 外部中断请求模式 0x00000018 0xffff0018
快速中断异常 快速中断请求模式 0x0000001c 0xffff001c

4、中断和异常的区别?

异常是从处理器被动接受异常的角度出发。
而中断具有主动向处理器申请的色彩。

二、WDT中断实验

1.WDT是什么

看门狗,又叫 WatchDog Timer(缩写WDT),是一个定时器电路,一般有一个输入,叫喂狗,一个输出到MCU的RST端,MCU正常工作的时候,每隔一端时间输出一个信号到喂狗端,给 WDT 清零,如果超过规定的时间不喂狗,(一般在程序跑飞时),WDT 定时超过,就回给出一个复位信号到MCU,是MCU复位防止MCU死机。

看门狗的作用就是防止程序发生死循环,或者说程序跑飞

工作原理:在系统运行以后也就启动了看门狗的计数器,看门狗就开始自动计数,如果到了一定的时间还不去清看门狗,那么看门狗计数器就会溢出从而引起看门狗中断,造成系统复位。所以在使用有看门狗的芯片时要注意清看门狗。

硬件看门狗是利用了一个定时器,来监控主程序的运行,也就是说在主程序的运行过程中,我们要在定时时间到之前对定时器进行复位如果出现死循环,或者说PC指针不能回来。那么定时时间到后就会使单片机复位。

2、对上图的理解

1、WTCON[0]
Reset enable / disable,复位信号使能端,1可以复位,0不可以复位。

2、WTCON[2]
Interrupt Generation,中断信息使能端,0禁止中断,1可以中断。

3、WTCON[4:3]
Clock Select,分频器。控制时钟频率,两位来控制分频比例。

WTCON[4:3] 分频比例
00 16
01 32
10 64
11 128

4、WTCON[15:8]
Prescaler value, 预分频器选择,分频器范围在28−1\ 2^8-1 28−1,但实际值要+1,因为是从0开始的。

5、PCLK
默认66 mHZ。

6、WTDAT
WTDAT寄存器存储了一个固定值,每次执行完中断,重新赋值给WTCNT。

7、WTCNT
WTCNT的中断时间,每个时钟周期-1,直到减到0,又会重新从WTDAT中获取值。

三、实验代码

题目:

1、查看用户手册,编写c程序1c.c,用c编写子程序vic0_init, 完成vic0第27号中断的初始化,子程序 wdt_init,完成wdt初始化,使得wdt每隔1秒发生中断一次,子程序clear_int清除wdt和vic中断,子程序led_init完成初始化led,led_on( char on)完成根据参数on的值控制led灯的亮灭(相应位为1点亮,0熄灭)。在汇编文件1s.S中编写子程序cpu_int_on,使能cpu中断(或直接在C中使用内联汇编)。中断处理子程序isr(c或汇编),调用led_on函数使4个led灯交替点亮和熄灭。在1c.c中编写主程序_start,分别调用上述子程序,使得wdt每秒发生一次中断,用来控制led灯交替点亮和熄灭。
代码如下(示例):

答案











实验代码:

//led
#define gpj2con *((volatile unsigned*)0xe0200280)
#define gpj2dat *((volatile unsigned*)0xe0200284)// wtchdog
#define  wtd_con    *(unsigned*)0xe2700000
#define  wtd_dat    *(unsigned*)0xe2700004
#define  wtd_cnt    *(unsigned*)0xe2700008
#define  wtd_int_clr    *(unsigned*)0xe270000c//vic0int
#define vic0_int_select *(unsigned*)0xf200000c
#define vic0_int_enable *(unsigned*)0xf2000010
#define vic0_addr27 *(unsigned*)0xf200016c  //0xf2000100+27*4=0xf200016c
#define vic0_vectaddress    *(unsigned*)0xf2000f00
#define vic1_vectaddress    *(unsigned*)0xf2100f00
#define vic2_vectaddress    *(unsigned*)0xf2200f00
#define vic3_vectaddress    *(unsigned*)0xf2300f00
void wtd_init(void );
void vic0_init( void );
void cpu_int_on( void );void led_init( void);
void led( char );
void clear_int(void);
void __attribute__((interrupt)) isr(void);
char on=0xf;
void _start(void )
{led_init();vic0_init();wtd_init();cpu_int_on();
}void wtd_init( void )
{//clock wtdcon:[3:4]=0x3  [8:15]=0xff    ==>4028HZwtd_con=wtd_con|(0x3<<3)|(0xff<<8);//wtd_nt[0:15]=wtddat[0:15]=4028wtd_cnt =  4028;wtd_dat    =  4028;//wtdcon [0]=0 [2]=1wtd_con  =  wtd_con&~0x1|(0x1<<2);//startwtd_con  =  wtd_con|(0x1<<5);
}void vic0_init(void)
{//vic0intselect[27]=0  vic0intenable[27]=1 vic0vectaddr27;vic0_int_select    =  vic0_int_select & ~(0x1<<27);  //IRQvic0_int_enable   =  vic0_int_enable | (0x1<<27);vic0_addr27   =  isr;
}void led_init( void )
{gpj2con        =  gpj2con & ~0xffff | 0x1111;led(0x0);
}
void led( char on)
{gpj2dat        =  gpj2dat & ~0xf | ~on;}void __attribute__((interrupt)) isr(void)
{led(on);on =  on^0xf;clear_int();
}void cpu_int_on(void)
{__asm__ __volatile__("mrs r0,cpsr\n""bic r0,r0,#0x80\n""msr cpsr,r0\n"::);}void clear_int(void)
{vic0_vectaddress   =  0x0;vic1_vectaddress    =  0x0;vic2_vectaddress    =  0x0;vic3_vectaddress    =  0x0;wtd_int_clr     =  0x0;
}

以上就是本次WDT中断实验的过程!


总结

WDT中断实验很有意思,永远滴神!

ARM:嵌入式系统之WDT中断实验相关推荐

  1. 网络上所谓的《ARM嵌入式系统入门最好的文章》

    一 首先说说ARM的发展 可以用一片大好来形容,翻开各个公司的网站,招聘里面嵌入式占据了大半工程师职位. 广义的嵌入式无非几种:传统的什么51.AVR.PIC称做嵌入式微控制器:ARM是嵌入式微处理器 ...

  2. ARM嵌入式系统malloc的实现(C源码)

    在ARM嵌入式系统实现malloc内存分配机制. 在ARM cpu上验证通过. ps:也可在pc ubuntu linux进行验证 #include "include/lib_replace ...

  3. 8、ARM嵌入式系统:UART初始化

    一.UART概述 百度上UART的定义:通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称作UART.它将要传输的资料在串行通信与并行 ...

  4. 7、ARM嵌入式系统:LCD/数码管/OLED初始化

    一.LCD/数码管模块在板子上的位置 LCD和数码管在板子上都分别有一个插槽. 二.LCD/数码管初始化代码 //SMG init void SMG_Init() { /* PORTB and POR ...

  5. [ARM嵌入式系统开发]第一章之嵌入式系统的软硬件

    本章的最后,通过描述ARM为核心的嵌入式系统,来介绍了嵌入式系统的软件和硬件构成和结构.这里根据这部分的介绍以及其他的文章,描述下通用的嵌入式系统的软件和硬件.     首先来说下硬件,书中说,包含有 ...

  6. 嵌入式:ARM嵌入式系统开发流程概述

    文章目录 嵌入式开发的具体过程 开发流程图 嵌入式软件开发环境 交叉开发环境 远程调试结构图 嵌入式应用软件开发的基本流程 软件模拟环境 目标板与评估板 嵌入式软件开发的可移植性和可重用性 嵌入式开发 ...

  7. 移植tcpdump到ARM嵌入式系统

    移植tcpdump到嵌入式系统 tcpdump和libpcap的下载链接:Home | TCPDUMP & LIBPCAP 百度网盘下载链接:https://pan.baidu.com/s/1 ...

  8. ARM嵌入式系统开发:软件设计与优化--第二章ARM处理器基础

    注:本文资料全部来源于网络或书籍,同时加上个人理解.若有侵权,告知即删.若有错误,留言商讨. 1.寄存器: 总共有37个寄存器,最多可以有17个活动寄存器(16个数据寄存器,2个状态寄存器:CPSR和 ...

  9. [ARM嵌入式系统开发]第一章之Dhrystone

    在书的第一章开头部分,作者提到了"最成功的ARM内核之一ARM7TDMI,具有最高120 Dhrystone MIPS的性能.高的代码密度和低功耗等特性,使它成为移动嵌入式设备的最佳选择&q ...

最新文章

  1. mysql 选项_mysql常用选项
  2. OPPO和微软合作,开放“召唤小冰”
  3. 实验一 linux命令使用,实验一XXXXX常用linux命令的使用(一)
  4. vue----常用实例方法--$mount(),$destroy(),$watch(),$forceUpdate()
  5. 文巾解题 189. 旋转数组
  6. 爬虫工程师是干什么的?你真的知道了吗?
  7. 关于Direct2D
  8. Android之context相关类图
  9. “约见“面试官系列之各系列目录汇总(建议学习收藏)
  10. 在系统启动时至少有一个服务或驱动程序产生错误_Cassandra Java驱动程序
  11. 计算机桌面图标有小纸张,电脑桌面图标上都有个小图标,为什么
  12. fcm脑图像分割matlab,MATLAB程序:用FCM分割脑图像
  13. 11.python之线程,协程,进程,
  14. Navicat-数据库管理工具
  15. Kaggle酒推荐,winemag-data-130k-v2.csv
  16. 半导体器件物理【7】固体量子 —— 统计力学
  17. ai怎么渐变颜色_AI渐变工具怎么使用?AI渐变工具使用方法介绍
  18. UIPATH 调用SAP BAPI
  19. Docker 安装和部署
  20. 用swoole实现简单IM聊天室demo

热门文章

  1. 计算机考试重点题目与答案
  2. 【算法设计与分析】-- 分治法
  3. Spark大数据分析与实战:基于Spark MLlib 实现音乐推荐
  4. GScan:Linux Checklist自动化检测
  5. java-在IDEA中,如何在代码和注释之间自动添加空格?
  6. 华为云发布代码检查服务;微软向其美国雇员提供“无限制”休假时间;付费版 ChatGPT|极客头条
  7. npm安装慢 ,卡在sill idealTree buildDeps不动
  8. 单片机定时器中断倒计时c语言,我用定时器中断控制倒计时30秒。程序不报错,但是显示一直停在30..请问好友们,帮我看看问题出在哪里?...
  9. 期末前端web大作业:用DIV+CSS技术设计的动漫网站——火影忍者6页 带报告
  10. Java入门(四):进阶