s3c2440 中断



void __init early_trap_init(void)

     memcpy((void *)KERN_SIGRETURN_CODE, sigreturn_codes,
        sizeof(sigreturn_codes));  //复制代码向量表
     memcpy((void *)KERN_RESTART_CODE, syscall_restart_code,
        sizeof(syscall_restart_code));//复制应用代码部分




 .globl __vectors_start
__vectors_start:
 ARM( swi SYS_ERROR0 )//复位是,cpu跳转的指令
 THUMB( svc #0  )
 THUMB( nop   )
 W(b) vector_und + stubs_offset  //未定义异常时,CPU将执行的指令
 W(ldr) pc, .LCvswi + stubs_offset  //SWI 异常
 W(b) vector_pabt + stubs_offset //指令预取终止异常
 W(b) vector_dabt + stubs_offset   //数据访问终止异常
 W(b) vector_addrexcptn + stubs_offset  //没有到
 W(b) vector_irq + stubs_offset//IRQ 异常
 W(b) vector_fiq + stubs_offset //FIQ异常
/*
 * Interrupt dispatcher
 */
	vector_stub	irq, IRQ_MODE, 4   //计算处理完异常后返回的地址,保存寄存器(r0,lr,spsr)然后进入管理员模式,最后根据被被中断的工作模式调用下面的某个分支

	.long	__irq_usr			@  0  (USR_26 / USR_32)   //在用户模式下发生的中断
	.long	__irq_invalid			@  1  (FIQ_26 / FIQ_32)    //不可能发生的情况,用irq_invalid处理
	.long	__irq_invalid			@  2  (IRQ_26 / IRQ_32)
	.long	__irq_svc			@  3  (SVC_26 / SVC_32)   //在管理员模式下发生的异常
	.long	__irq_invalid			@  4
	.long	__irq_invalid			@  5
	.long	__irq_invalid			@  6
	.long	__irq_invalid			@  7
	.long	__irq_invalid			@  8
	.long	__irq_invalid			@  9
	.long	__irq_invalid			@  a
	.long	__irq_invalid			@  b
	.long	__irq_invalid			@  c
	.long	__irq_invalid			@  d
	.long	__irq_invalid			@  e
	.long	__irq_invalid			@  f


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值