(1)内部中断—watdog

原创 2013年12月05日 15:39:58

还有几天的时间,反反复复,借这个机会,重来一下bootloader,一直以来是一个yihan.

也复习一下,6410的裸版开发。这么些天没有学习,大概一个月的时间,好好整理一下心情,进入工作了!加油啊!


step 1 :set arm cpsr

   mrs r0,cpsr      #将cpsr中的内容取出来,放在r0中。
   bic r0,r0           #0x80取0x80的非,清楚第七位(0-7,也是第八)

   msr r0,cpsr      #将处理好的数据,放回到cpsr中。
step 2:set  Vectored Interrupt Controller(两个VIC其中有64位个中断源,watdog是VIC   0中的26位)
step 3:irq source

*******************************************************************************

vector.s异常处理如下(共七种):

undefine swi是在译码阶段发生异常,其它异常发在执行阶段;(取指,译码,执行,访存,回写),而pc指针,总是指向取指的那一条指令。在发生异常的时候,下面的代码是选择跳过发生异常的指令。所以在非undefine与swi时,我们就要sub lr,lr,#4;执行发生错误,下一条指令还在译码,下下条指令才是在取指,减4是为了不跳过正在译码的那条指令。


b reset

b und

b swi

b pre_abt

b data_abt

.word 0x0

b irq

b firq

reset:
und:

mov sp,#0x56000000    //这里申请一个栈,地址0x5600 0000

mov ip,sp //压栈保存上一个模式的现场

stmdb sp!,{fp,ip,lr}

sub fp,ip,#4

//处理异常,打印一句话。在arm中调用一个函数(arm过程调用,归定将参数放在r0-r3寄存器中,过多的参数放在栈中)

ldr r0,=string_und

ldr r1,printf

blx r1      //调用函数


mov sp,#0x5600 0000     //回到之前的模式

ldmdb sp,{fp,sp,pc}^

swi:

mov sp,#0x56000000

mov ip,sp

stmdb sp!,{fp,ip,lr}

sub fp,ip,#4


ldr r0,=string_swi

ldr r1,printf

blx r1


mov sp,#0x56000000

ldmdb sp,{fp,sp,pc}^

pre_abt:


data_abt:

mov sp,#0x56000000

mov ip,sp

sub lr,lr,#4

stmdb sp!,{fp,ip,lr}

sub fp,ip,#4


ldr r0,=string_pre_abt

ldr r1,printf

blx r1


mov sp,#0x56000000

ldmdb sp,{fp,sp,pc}^

irq:

mov sp,#0x56000000

mov ip,sp

sub lr,lr,#4

stmdb sp!,{fp,ip,lr}

sub fp,ip,#4



#ldr r0,=0x71200014

#mov r1,#0x4000000

#str r1,[r0]



     //当watdog中断一打开,watdog中断一来,就进入vector.s: b irq;执行中断处理程序。进来的第一步就是清 除中断源,这时watdog已经打开。

ldr r0,=0x7120001C  

mov r1,#0xffffffff

str r1,[r0]


ldr r0,=string_irq

ldr r1,printf

blx r1


mov sp,#0x56000000

ldmdb sp,{fp,sp,pc}^

firq:

printf:

.word 0x57e11d4c

string_und:

.asciz "hello undefine \n"

.align 2

string_swi:

.asciz "hello swi\n"

.align 2

string_pre_abt:

.asciz "hell data_abt\n"

.align 2

string_irq:

.asciz "hello irq ,wang wang wang\n"

.align 2

*********************************************************************

test.s我们的主程序,最开始就从这里执行起:

#interrupt

mov ip,sp

stmdb sp!,{fp,ip,lr}

sub fp,ip,#4


mrs r0,cpsr

bic r0,r0,#0x80

msr cpsr,r0

#enable

ldr r0,=0x71200010

mov r1,#0x4000000

str r1,[r0]

#select

ldr r0,=0x7120000C

mov r1,#0

str r1,[r0]

#softirq

ldr r0,=0x71200018

mov r1,#0x4000000   //There is one bit of the register for each interrupt source.

str r1,[r0]

  

//.....进入vector.s处理,watdog中断。

ldr r0,=string

ldr r1,printf

blx r1


sub sp,fp,#8

ldmia sp,{fp,sp,pc}

string:

.asciz "welcome back\n"

.align 2

printf:

.word 0x57e11d4c

*************************************************************************************

makefile:

all:

arm-none-linux-gnueabi-gcc -c vector.s -o vector.o

arm-none-linux-gnueabi-ld -Ttext=0 vector.o -o vetor

arm-none-linux-gnueabi-objcopy -Ielf32-littlearm -O binary vector vector.bin

cp vector.bin /tftpboot/


arm-none-linux-gnueabi-gcc -c test.s -o test.o

arm-none-linux-gnueabi-ld -Ttext=0x51000000 test.o -o test

arm-none-linux-gnueabi-objcopy -Ielf32-littlearm -O binary test test.bin

cp test.bin /tftpboot/

clean:

rm -rf *.o *.bin   /tftpboot/*.bin



版权声明:本文为博主原创文章,未经博主允许不得转载。

时钟中断(1)

在所有外部中断中,时钟中断起着特殊的作用。因为计算机是以精确的时间进行数值运算的数据处理的,最基本的时间单元是时钟周期,例如取指令,执行指令,存取内存等,我们将要讨论的是操作系统建立的时间系统,这个时...
  • wrx1721267632
  • wrx1721267632
  • 2016年01月16日 12:16
  • 756

外部中断和内部中断 硬中断 软中断 中断下半部

重要声明: 以下代码有粘贴 截取他人劳动成果的成分 如有雷同 不胜荣幸 如您不能容忍 请不要独自忍受@weChat:iisssssssssii 联系小民 主动删除        中断含义:  ...
  • linkedin_35878439
  • linkedin_35878439
  • 2018年01月09日 15:51
  • 48

03 AVR单片机中断的学习探究(外部中断与内部中断)

最开始的一点,所有中断的配置都必须要打开全局中断控制#asm(“sei”) //打开SREG的全局使能I置位 首先博主先探究了一下AVR单片机的外部中断。 外部中断需要用的必须先看原理图的IN...
  • baidu_25505611
  • baidu_25505611
  • 2017年03月15日 11:20
  • 537

番茄工作法——中断(笔记)

1.电子邮件和电话很容易对付:把他们关掉。2.使用三顶帽子:休闲是一定小丑帽;工作帽匠我变成一头狮子,用百分之百的注意力狩猎羚羊;战略帽用来决定优先级次序以及下一个工作周期做什么,让我感觉像一位国王。...
  • aixiaoxiaoyu
  • aixiaoxiaoyu
  • 2017年09月16日 17:30
  • 166

C51单片机学习(二):中断系统和定时器

C51单片机学习(二)中断系统定时器
  • qq_29183809
  • qq_29183809
  • 2015年12月12日 09:33
  • 1166

中断和异常的再总结

中断和异常的再总结@(OS)内部异常(内中断) 故障(fault) 自陷(trap) 终止(abort) 是源自CPU执行指令内部的事件。如:非法操作码,地址越界,算术溢出,虚存系统的缺页,陷入指令等...
  • u011240016
  • u011240016
  • 2016年11月10日 16:32
  • 3146

watdog(3)

把watdog一直开着,当来一个watdog 中断,打印一句话,当灯亮/灯灭。 ************************************************************...
  • youhaibo1990
  • youhaibo1990
  • 2013年12月05日 17:02
  • 405

STC89C52中断系统

中断的控制 51单片机一共有5个中断源:两个外部中断(0,2),两个定时器中断(1,3),一个串行口中断(4) 中断允许寄存器IE EX0(IE.0),外部中断0...
  • lg_799974296
  • lg_799974296
  • 2017年05月20日 18:24
  • 486

Arduino学习(七)中断

一、中断(Interrupt)的基本概念 中断(Interrupt)是计算机的一个重要概念,现代计算机普遍采用中断技术。 什么是中断呢? CPU执行时原本是按程序指令一条一条向下顺序...
  • c80486
  • c80486
  • 2016年09月28日 23:26
  • 15908

51单片机定时器实验

2006-05-11 09:56:09 51单片机定时器实验 一.实验要求由8031内部定时器1,按方式1工作,即作为16位定时器使用每0.05秒钟T1溢出中断一次。P1口的...
  • mybirdsky
  • mybirdsky
  • 2008年01月17日 16:09
  • 995
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:(1)内部中断—watdog
举报原因:
原因补充:

(最多只允许输入30个字)