VxWorks基于AT91RM9200处理器的中断处理
向量和异常处理入口函数关联起来了。
3.2 中断向量表的结构及生成
那么当系统产生中断后,VxWorks是如何设置中断向量表,并且将中断向量和中断处理入口程序关联起来的呢?和异常向量表有点类似,但是中断向量表是VxWorks操作系统动态分配的一段连续的内存空间,这个空间的结构如图3所示。
图3 VxWorks中断向量表的结构
因为是动态分配,所以在这段内存空间中,操作系统只给当前中断分配了中断号、中断处理函数的入口和被传递的参数。每个中断源按照中断号顺序排列,在为每个中断源分配的内存空间中头4个字节是中断向量表的初始化函数的入口,该函数对于每个中断源来说是通用的,然后顺序放置的是中断号、中断处理函数入口和被传递的参数.通过intconnect()函数可以将中断向量和中断处理函数关联起来,因此在系统获知了发生中断的中断号时,就可以找到相应的中断处理函数去处理该中断。当发生IRQ异常时,系统强制把程序指针拉到0x18处,在0x18处是这样一条指令ldrpc,[pc,#244],IRQ异常相对于未定义指令异常的偏移是0x14,所以相当于把0x114地址处的内容赋给pc,而0x114处的内容正是IRQ异常向量处理的入口函数intEnt的地址,因此程序跳转到intent处去执行。
4 中断处理跟踪调试的部分反汇编代码
通过使用ARM Developer Site仿真器,在0x18处设置断点后单步执行来分析中断处理的过程。中断处理函数的入口处代码如下:
2070b174[0xe59fb410] ldr r11,0x2070b58c; /*=#0x207a40c8,0x207a40c8是中断向量表的位置*/
2070b178[0xe59dc018] ldr r12,[r13,#0x18] /*将0x207b1ce8中的内容给r12应该是中断号!!!*/
2070b17c[0xe59bb000] ldr r11,[r11,#0] /*0x207a40c8处的内容是0x21ffbef8*/
2070b180[0xe08b318c] add r3,r11,r12,lsl #3 /*将0x21ffbef8(内存地址)给r3,0x21ffbef8的内容是向量0x207064b0,这是debug口中断处理函数的入口*/
2070b184[0xe79ba18c] ldr r10,[r11,r12,lsl#3]
2070b188[0xe5930004] ldr r0,[r3,#4] /*相应的参数传递给r0*/
2070b18c[0xe1a0e00f] mov r14,pc
2070b190[0xe1a0f00a] mov pc,r10 /* r10=0x207064b0,跳转到debug口中断处理函数处执行*/
0x21ffbef8(中断向量表基址)处的情况是:
21ffbef8[0x2070b434] dcd 0x2070b434 4.p
21ffbefc[0x00000000] dcd 0x00000000....
21ffbf00[0x207064b0] dcd 0x207064b0.dp
21ffbf04[0x207a9990] dcd 0x207a9990..z
21ffbf08[0x2070b434] dcd 0x2070b434 4.p
21ffbf0c[0x00000002] dcd 0x00000002....
21ffbf10[0x2070b434] dcd 0x2070b434 4.P
21ffbf14[0x00000003] dcd 0x00000003....
21ffbf18[0x2070b434] dcd 0x2070b434 4.P
21ffbf1c[0x00000004] dcd 0x00000004....
5 结语
Vxworks操作系统首先调用excVecInit()生成一个异常中断向量表excEnterTbl,当有IRQ中断发生时,根据 excEnterTbl中0x00000018处的指令ldr pc,[pc,#244]跳转到0x00000114处,即IRQ异常中断的入口处intEnt执行,随后通过读AIC_IVR寄存器得到当前优先级最高的中断,返回这个中断号,并跳转到intConnect()函数给该中断号关联的中断处理程序入口去执行。在这个过程中,中断向量表的生成是 Vxworks动态分配的,在AT91RM9200中,为0到31号中断源在中断向量表中都分配了空间,该空间的格式固定。中断处理结束后,通过往 AIC_EIOC寄存器中写任意值,从中断中返回。
VxWorks AT91RM9200 中断处理 相关文章:
- 蓝牙无线耳机设计及VxWorks移植方法(07-21)
- 军事指挥系统中VxWorks下汉字显示技术(07-16)
- 基于VxWorks的文件系统的研究与实现(09-18)
- 嵌入式语音通信系统中VxWorks BSP的设计实现(09-18)
- 嵌入式系统的VxWorks安全性问题研究(11-06)
- VxWorks下的多重定时器设计(02-16)