资源描述:
《s3c44b0与s3c2410的多重中断的实现(原创)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、s3c44b0与s3c2410的多重中断的实现作者:蔡伦辉写在前面作者一直支持GPL的精神。允许任何人自由使用、转载、复制和再分发,但必须保留作者署名,必须保证全文完整转载,包括完整的版权声明。由于作者水平有限,因此不能保证文章内容准确无误,请批判阅读。如果你发现任何错误或对文章内容有任何建议,欢迎你与我联系:Email:caiallen@tom.comQQ群:14765968最近因为公司项目忙,好久没更新这里了。也因为项目,才发现原来ARM的bootloader默认是不支持中断嵌套的,所以必须得自己实现。同时也发现,44b0有向量中断和非向量中断之分,而2410是没有向量中断的
2、。也许这样说并不准确。因为对2410来说,它有:bResetHandler;0x00000000bHandlerUndef;0x00000004handlerforUndefinedmodebHandlerSWI;0x00000008handlerforSWIinterruptbHandlerPabort;0x0000000chandlerforPAbortbHandlerDabort;0x00000010handlerforDAbortb.;0x00000014bHandlerIRQ;0x00000018handlerforIRQinterruptbHandlerFIQ;0x0
3、000001chandlerforFIQinterrupt这几个地址存放的就是向量表。然而它又不像44b0存在以下地址的向量表:;44b0的中断向量表ResetEntrybResetHandler;fordebugbHandlerUndef;handlerUndefbHandlerSWI;SWIinterrupthandlerbHandlerPabort;handlerPAbortbHandlerDabort;handlerDAbortb.;handlerReservedbHandlerIRQbHandlerFIQVECTOR_BRANCHldrpc,=HandlerEINT0;
4、mGA0x20ldrpc,=HandlerEINT1;ldrpc,=HandlerEINT2;ldrpc,=HandlerEINT3;ldrpc,=HandlerEINT4567;ldrpc,=HandlerTICK;mGA0x34b.b.ldrpc,=HandlerZDMA0;mGB0x40ldrpc,=HandlerZDMA1;ldrpc,=HandlerBDMA0;ldrpc,=HandlerBDMA1;ldrpc,=HandlerWDT;ldrpc,=HandlerUERR01;mGB0x54b.b.ldrpc,=HandlerTIMER0;mGC0x60ldrpc,=H
5、andlerTIMER1;ldrpc,=HandlerTIMER2;ldrpc,=HandlerTIMER3;ldrpc,=HandlerTIMER4;ldrpc,=HandlerTIMER5;mGC0x74b.b.ldrpc,=HandlerURXD0;mGD0x80ldrpc,=HandlerURXD1;ldrpc,=HandlerIIC;ldrpc,=HandlerSIO;ldrpc,=HandlerUTXD0;ldrpc,=HandlerUTXD1;mGD0x94b.b.ldrpc,=HandlerRTC;mGKA0xa0b.b.b.b.b.;mGKAb.b.ldrpc,
6、=HandlerADC;mGKB0xc0b.;b.;b.;b.;b.;mGKBb.b.ldrpc,=EnterPWDN;0xe0=EnterPWDN这里就必须讲一下向量中断模式和非向量中断模式的概念向量中断模式是当cpu读取位于0x18处的IRQ中断指令的时候,系统自动读取对应于该中断源确定地址上的指令取代0x18处的指令,通过跳转指令系统就直接跳转到对应地址,函数中,节省了中断处理时间提高了中断处理速度标例如ADC中断的向量地址为0xC0,则在0xC0处放如下代码:ldrPC,=HandlerADC当ADC中断产生的时候系统会自动跳转到HandlerADC函数中。非向量中断模式
7、处理方式是一种传统的中断处理方法,当系统产生中断的时候,系统将interruptpending寄存器中对应标志位置位然后跳转到位于0x18处的统一中断函数中,该函数通过读取interruptpending寄存器中对应标志位来判断中断源,并根据优先级关系再跳到对应中断源的处理代码中。现在说回中断嵌套。要想实现中断可嵌套并安全正确地返回,现场保护是关键。在IRQ中断发生时,先在IRQ模式保护现场,然后转到SVC模式把现场环境拷贝到SVC的堆栈,处理IRQ中断,并在这个模式下恢复现场。