关闭中断
/* * mask all IRQs by setting all bits in the INTMR - default */ mov r1, #0xffffffff ldr r0, =INTMSK str r1, [r0]
上面这几行代码,和前面的很类似,作用很简单,就是将INTMSK寄存器设置为0xffffffff,即,将所有的中断都mask了。
关于每一位的定义,其实可以不看的,反正此处都已mask了,不过还是贴出来,以备后用:
此处,关于mask这个词,解释一下。
mask这个单词,是面具的意思,而中断被mask了,就是中断被掩盖了,即虽然硬件上中断发生了**,但是此处被屏蔽了,所以从效果上来说,就相当于中断被禁止了,硬件上即使发生了中断,CPU也不会去执行对应中断服务程序ISR了。**
此处CPU是是S3C2440,所以用到0x7fff这段代码。
其意思也很容易看懂,就是将INTSUBMSK寄存器的值设置为0x7fff。
先贴出对应每一位的含义:
此处,关于CLKDIVN的具体含义,参见下表:
bl指令
b指令,是单纯的跳转指令,即CPU直接跳转到某地址继续执行。
而BL是Branch with Link,带分支的跳转,而Link指的是Link Register,链接寄存器R14,即lr,所以,bl的含义是,除了包含b指令的单纯的跳转功能,在跳转之前,还把r15寄存器=PC=cpu地址,赋值给r14=lr,然后跳转到对应位置,等要做的事情执行完毕之后,再用
mov pc, lr
使得cpu再跳转回来,所以整个逻辑就是调用子程序的意思。
bl的语法为:
BL指令的格式为
(记得最后要有一行,mov pc, lr)