标签:跳转 ok6410 logs 控制 cpu class detail 指令 有用
arm11处理器裸机的异常与中断处理参考:
在ARM V4及V4T以后的大部分处理器中,中断向量表的位置可以有两个位置:一个是0,另一个是0xffff0000。可以通过CP15协处理器c1寄存器中V位(bit[13])控制。V和中断向量表的对应关系如下:
V=0 ~ 0x00000000~0x0000001C
V=1 ~ 0xffff0000~0xffff001C 。Linux内核使用0xffff0000。
异常向量的代码很简单,只是一些跳转指令。地址__vectors_start~__vectors_end间的代码就是异常向量,在arch/arm/kernel/entry-armv.S中定义,这些异常向量会被复制到0xffff0000处。
.globl __vectors_start __vectors_start: swi SYS_ERROR0 //复位时,cpu将执行这条指令 b vector_und + stubs_offset //未定义异常时,cpu执行这条指令 ldr pc, .LCvswi + stubs_offset //swi异常 b vector_pabt + stubs_offset //指令预取终止 b vector_dabt + stubs_offset //数据访问终止 b vector_addrexcptn + stubs_offset //没有用到 b vector_irq + stubs_offset //irq异常 b vector_fiq + stubs_offset //fiq异常 .globl __vectors_end __vectors_end:
标签:跳转 ok6410 logs 控制 cpu class detail 指令 有用
原文地址:http://www.cnblogs.com/yangjiguang/p/7629843.html