(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



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

OpenGLes学习之路(一)————opengles内部执行顺序(1)

公认OpenGLes是入门很难,难在哪里,我认为,初学时过分追求对于OpenGLes本身API的学习,而忽视了其只是作为一种3D渲染的手段工具,就像我们学汽车一样,我们首先是会开了汽车,然后逐渐了解汽...

watdog(3)

把watdog一直开着,当来一个watdog 中断,打印一句话,当灯亮/灯灭。 ************************************************************...

H3C内部培训—企业网网络规划

  • 2016年12月15日 09:55
  • 1.53MB
  • 下载

NanoPi—M1(H3)———基于该平台的一个内核中的按键中断程序开发历程

以前用的是Tiny210的开发板,在那个上面做过一个按键中断的驱动程序。现在在这个H3的开发板上照着以前的的驱动程序做一个按键的中断程序。         首先是硬件初始化,主要是配置相应的寄存器: ...

‘javac’不是内部或外部命令,也不是可运行的程序或批处理文件 — 解决过程

今天在Windows下尝试反编译apk,在自己电脑里用cmd编辑java时,提示“‘javac’不是内部或外部命令,也不是可运行的程序或批处理文件”的错误。主要是因为还没装Java SDK,因此记录...

Java—内部类(普通,静态,局部,匿名)

昨天晚上本来是拉着学长给我讲RecycleView如何实现加载更多效果的,结果——————————————————————————————————就扯到了内部类学长昨天给我讲了好多好多 自己回去也写...

第50章 读写内部FLASH—零死角玩转STM32-F429系列

第50章     读写内部FLASH 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/f...

黑马程序员————引用型变量的形式参数和返回值,权限修饰符,内部类

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 一.形式参数和返回值         形式参数:基本数据类型和引用数据类型         ...
  • lgplf
  • lgplf
  • 2015年06月04日 23:50
  • 518
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:(1)内部中断—watdog
举报原因:
原因补充:

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