S5PV210的中断模式

异常向量表

      (1)异常向量表中各个向量的相对位置固定的,但是他们的起始地址时不固定的,各种soc可以不一样,而且复杂ARM中还可以让用户通过软件来设置这个异常向量表的基地址。

      (2)异常和中断的区别和联系

                    ·针对Soc来说,发送复位,软中断,中断,快速中断,取指令异常,数据异常,我们统一叫异常,所以说:中断其实是异常的一种。

                     ·异常就是Soc发生突发事件,打断CPU的正常常规业务,CPU不得不跳转到异常向量表中去执行异常处理程序。 中断时异常的一种,一般特指  Soc内部外设产生的打断SoC常规业务,或者外部中断(SoC的GPIO引脚传回来的中断)

      (3)像内存一样去访问异常向量表

                   ·S5PV210的异常向量表可以改变(在CP15协处理器中),以适应操作系统的需求。但是目前系统刚刚启动时,此时DRAM尚未初始化,程序都在SRAM中运行。210在iRAM中设置了异常向量表,供暂时性使用。

                    ·查210的iROM application note 文档中iRAM的地址分配,可知,iRAM中异常向量表起始地址为0xD0037400。知道了异常向量表的起始地址后,各个异常对应的入口通过偏移量就可以很好的知道了。

函数名实质就是函数的首地址

      (1)函数名在C语言中的理解方法和变量名其实没区别。编译器会把这个函数体对应的代码段和这个函数的函数名(实质是符号)对应起来,等我们在使用这个函数名的时候,编译器会将函数的函数体实际上做替换。因为函数体不止4字节,而函数名这个符号只能对应的是函数体那个代码段的首地址。

      (2)c语言语法来说,函数名就是这个函数的函数指针。

为什么中断处理要先在汇编中进行?

      (1)中断处理要注意保护现场(中断从SVC模式来,则保存SVC模式下的必要的寄存器的值)和恢复现场(不然的话中断处理完成后,准备返回SVC模式前,要将保存的SVC模式下的必要寄存器的值恢复回去,不然到了SVC模式后寄存器的值就乱了,SVC模式下正在执行的任务就无法恢复执行)

       (2)保存现场包括

                        第一:设置IRQ栈

                        第二:保存LR(暂存函数地址)

                        第三:保存R0-R12

       (3)为啥保存LR寄存器?要考虑中断返回问题?

                         中断执行完成后返回回来执行原来的代码,中断返回其实取决于我们保存的现场,执行中断前将SCV模式下寄存器PC的值保存在寄存器LR(硬件自动)中,然后写软件将lR的值存到栈中,而cpsr(硬件自动)保存在irq模式下的SPSR中。中断执行完后返回地址(从栈中读出来)给PC,spsr只有在中断返回和模式切换的时候才会有

猜你喜欢

转载自blog.csdn.net/weixin_40405692/article/details/81390267