Part5.4 设置中断屏蔽寄存器

在Part5.2开启svc时已经将I、F置一,屏蔽了中断和快速中断

现在需要关闭中断屏蔽寄存器

 

 下面是处理屏蔽的请求过程,在其中MASK就是屏蔽中断字寄存器(写入1相应中断就被屏蔽,这里屏蔽所有中断,写入全1

 

首先将第三课的代码复制到第四课,使用cp lesson3 lesson4 -rf指令

地址:

ENABLE只能用来使能寄存器,CLEAR只能用来关闭寄存器

(有两组寄存器管理中断,分别是第0组和第1组)

所以共有4组寄存器管理中断     所以6410要对两组寄存器写入1

 

 

 

 

 

 

同理,放在reset下面

 

reset:  

  bl set_svc

  bl disable_watchdog

  bl disable_interrupt

set_svc:

  mrs r0,cpsr

  bic r0,r0,#0x1f

  orr r0,r0,#0x13   //uboot里面是0xd3,转化为二进制11010011,后五位一样,他屏蔽了中断和快速中断,我们也可以照它的来

  msr cpsr,r0

  mov pc,lr    //LR(R14)保存了返回地址,PC(R15)保存了当前地址,这句话意思就是从子程序返回

 

#define pWTCON 0x7e004000    //这里定义的是看门狗控制器的地址,实现对里面值的操作

disable_watchdog:

  ldr r0, =pWTCON     //这个伪指令把常量转载到r0里面

  mov r1,#0x0     //为了方便直接把寄存器所有位  置零

  str r1,[r0]      //不直接把立即数0放到r0里面  是因为mov指令只能访问通用寄存器

  mov pc,lr

 

disable_interrupt:

  mvn r1,#0x0      //mvn是取反后填入r1当中,这样就可以不需要知道r0位数将其全部置一

  ldr r0, =0x71200014

  str r1,[r0]

  ldr r0, =0x71300014

  str r1,[r0]

  mov pc,lr

posted @ 2017-06-11 16:15  郁兴力  阅读(1516)  评论(0)    收藏  举报