|
avr32的中断管理由硬件和软件协同完成。主要由文件intc.c,intc.h和vectoers.s三个文件完成,我的理解是:
其中intc文件主要是完成了中断源的注册,也就是说,中断组和中断号以及中断程序的入口地址获得是在该文件完成的。
vectoers文件主要定义evba以及一些中断操作。例如如下代码段:
Int0:
SSRF VECTORS_SR_GM_OFFSET /* Set global interrupt mask (disable interrupts) */
NOP
NOP
MFSR R12, VECTORS_SR_OFFSET
BFEXTU R12, R12, VECTORS_SR_MX_OFFSET, 3
CP.W R12, VECTORS_SR_MX_EXCEPTION_MODE /* check execution mode */
BRHS __exception_stack /* if (R12 == {Exception, NMI}) then change interrupt stack */
/* ... to exception stack */
MOV R12, VECTORS_INT0 /* Pass int_level parameter to BSP_INTC_IntGetHandler */
RCALL BSP_INTC_IntGetHandler
CP.W R12, 0 /* Test returned interrupt handler pointer */
BRNE OSIntISRHandler /* if (R12 != 0) then, jump to the OSIntISRHandler */
RETE /* if (R12 == 0) it was a spurious interrupt then, return */
/* ... from event handler */
当中断来到的时候,根据注册的相应信息,配合vectoers里面的中断向量,转跳至用户的中断程序入口。
以上这些可以算作是软件完成部分吧。。
问题来了:
对于avr32uc3a的架构,所需要的中断都已近注册好了,当中断来的时候,是硬件完成pc(程序指针)的转跳吗?另外,硬件会不会自动将当前sr,pc,lr以及通用的r0-r12压栈??
avr32到底是如何完成的第一次转跳的??
在此先谢谢各位了 |
阿莫论坛20周年了!感谢大家的支持与爱护!!
月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!
|