inside uboot (三) 异常向量表

1. 异常向量表概述

从上面的地址映射来看,中断向量表的地址为0xD0037400,因此如果我们想在SRAM中,也就是BL1中处理异常的话,

就需要把我们的异常向量表拷贝到这个地址上。或者我们可以在链接脚本中直接指定代码的地址。

如果在主内存中,我们要使用异常向量表的话,我们需要配置CP15协处理器中的VBAR寄存器。

2. 中断向量表代码

_start: b	reset
	ldr	pc, _undefined_instruction
	ldr	pc, _software_interrupt
	ldr	pc, _prefetch_abort
	ldr	pc, _data_abort
	ldr	pc, _not_used
	ldr	pc, _irq
	ldr	pc, _fiq
#ifdef CONFIG_SPL_BUILD
_undefined_instruction: .word _undefined_instruction
_software_interrupt:	.word _software_interrupt
_prefetch_abort:	.word _prefetch_abort
_data_abort:		.word _data_abort
_not_used:		.word _not_used
_irq:			.word _irq
_fiq:			.word _fiq
_pad:			.word 0x12345678 /* now 16*4=64 */
#else
_undefined_instruction: .word undefined_instruction
_software_interrupt:	.word software_interrupt
_prefetch_abort:	.word prefetch_abort
_data_abort:		.word data_abort
_not_used:		.word not_used
_irq:			.word irq
_fiq:			.word fiq
_pad:			.word 0x12345678 /* now 16*4=64 */
#endif	/* CONFIG_SPL_BUILD */

从上面代码可以看出,b reset后面就是异常向量表了,但是异常向量表的实际函数地址被通过一个CONFIG_SPL_BUILD的

宏分别定义。v210 的uboot被同过这个宏分别编译成了两个uboot,BL1和BL2,一个在SRAM中执行,一个在主内存中执行。

从上面代码可以看出,BL1中的异常函数什么也没有做,BL2中是有真正的实际用途的异常函数。

3. 设置异常向量表,在BL1中的异常向量表地址应该设置在0xD0037400这个地址上。但是搜索了整个uboot代码,并没有找

到。可以是因为BL1中的异常函数本身没有用处吧。下面说一下,在BL2中的异常向量表的地址设置。

4. BL2中的异常向量表设置代码。

/* Set V=0 in CP15 SCTRL register - for VBAR to point to vector */
	mrc	p15, 0, r0, c1, c0, 0	@ Read CP15 SCTRL Register
	bic	r0, #CR_V		@ V = 0
	mcr	p15, 0, r0, c1, c0, 0	@ Write CP15 SCTRL Register

首先操作CP15的SCTLR寄存的的第13位为0,目的是将异常向量的基地址设置为0。

datasheet手册的寄存器说明见下图。

 

/* Set vector address in CP15 VBAR register */
	ldr	r0, =_start
	mcr	p15, 0, r0, c12, c0, 0	@Set VBAR

然后将异常向量表的地址设置到VBAR寄存器中,寄存器的地址说明见下图。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值