S5PV210中断向量表理解

在uboot中,重新设置了中断向量表,即不在0地址处了,而在裸机中,第一种可以重新设置中断向量表,在_start标号处(这样的裸机代码要参考uboot的流程写法),第二种可以不重新设置,直接把中断处理程序地址放入0xd003,7400处,一旦发生异常,就会跳过去执行。

上述过程针对210,因为210的0地址处放的是固化代码,不能再放用户写的程序了,所以设置了这个机制。而2440发生异常时,就直接在0地址处可跳转了。

如果中断向量表从0地址开始,那么就会跳到0xd003,7400处执行, 这时如果不将中断处理程序和0xd003,7400地址绑定,这样一旦发生异常,跑到0xd003,7400地址去取,会发现没有东西可执行,因为此时的处理函数的地址不在0xd003,7400处了,而在别的地方了如果中断向量表不是从0地址开始,那么会跳到相应的地位执行。

如果b reset,ldr指令在0地址处构建异常向量表,跳转到reset标号处(在irom运行)执行,而iromcode代码固定,不能在标号处放入用户所写的异常处理函数,于是irom固化代码在标号处设立了那个0xd003,7400跳转机制,(可参考关于《s5pv210启动后的IROM的中断向量》这篇文章:http://donglu.100.blog.163.com/blog/static/2989132420146179411456/),于是用户将异常处理程序放到0xd003,7400地址处。固化代码实现了跳到0xd003,7400地址处执行,是为了将保证将中断程序放在sram里面执行,避免使得其放在irom里面,因为irom代码固定,不处理用户写的异常处理函数。三星的210芯片如果直接写异常处理标号,放在程序里面,而不放到0xd003,7400地址地址处,就永不会执行该异常处理函数。

如果不写b reset这些构建异常向量表的指令,这样会默认在0地址处构建向量表,通过直接将函数地址写到0地址开始的地方,实现了异常向量表和中断函数的绑定,但是这个方法是错误的,不能将中断函数放在向量表中,是因为iromcode代码固定。

以上是个人理解的,可作为参考,谢谢!



你可能感兴趣的:(裸机与uboot)