中断初始化相关知识.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
1.InitPieVectTable(): 每个中断都有自己的中断向量,即每个中断源都对应着自己的中断服务程序的入口地址,这些中断向量连续存在于RAM中,就是整个系统的中断向量表; Uint32 *Source = (void *) PIE_RESERVED;中断服务函数入口地址; 取PIE_RESERVED地址,强制转换为void*。换后的void*直接赋值给Uint32 *指针。这里要把PIE_RESERVED的首地址给指针Source,Source是Uint32型的,不能够直接给地址的,需要类型转换,在C语言里面指针强制转换要求两边的类型要是一样的,同时也指出了void类型是可以赋值给任何类型的,所以这里用了(void*),其实改成(Uint32*)。Uint32 *Dest = (void *) PieVectTable;中断向量表 extern struct PIE_VECT_TABLE PieVectTable;(Device.h) 一共128个中断,即128个中断向量ID: EALLOW; for(i=0; i 128; i++) *Dest++ = *Source; EDIS; 把中断入口地址送给中断向量表,达到关联的目的; #define EALLOW asm( EALLOW) #define EDIS asm( EDIS) (Device.h) EALLOW是指允许对受保护的寄存器操作,通常和EDIS配套使用,EDIS是指恢复被保护寄存器的状态,只有执行了EALLOW命令之后才能对受保护的寄存器操作。 PieCtrlRegs.PIECTRL.bit.ENPIE = 1;使能中断向量表。 2.InitPieCtrl(): DINT;关闭CPU总中断; #define DINT asm( setc INTM) ( Device.h) PieCtrlRegs.PIECTRL.bit.ENPIE = 0; 关闭PIE模块总中断。 关闭所有PIE模块的中断: PieCtrlRegs.PIEIERn.all = 0;(n=0……12) 清除所有中断标志位: PieCtrlRegs.PIEIFRn.all = 0;(n=0…….12) 对于不可屏蔽中断来说,它直接进入CPU级。对于可屏蔽中断来说,PIE模块有相关的标志寄存器(PIEIFRx和PIEIERx)(x=1……12)每一个位设为y(y=1……8)当有中断请求进入PIE控制器的时候,相关的PIE中断标志位PIEIFRx.y置高。如果PIE中断允许位PIEIERx.y也置高的时候,PIE控制器机会检查PIEACKx标志位来决定CPU是否已经准备好接收这个PIE中断组的中断。如果PIEACKZx被清零了,那么PIE会把这个中断请求送到CPU如果PIEACKx位置,那么PIE就会等待直到这个标志位清零然后发送中断请求给CPU级的INTx。一旦中断请求到达CPU级,CPU级和INTx相对应的中断标志位(IFR)置,如果CPU中断允许寄存器(IER)或者调试中断允许寄存器(DBGIER)和全局中断屏蔽位(INTM)允许的话,CPU才会这个中断申extern cregister volatile unsigned int IER; (Device.h) CPU中断使能寄存器是一个16位的CPU寄存器,包含可屏蔽CPU中断(INT1-INT12,DLOGINT和RTOSINT中断)的使能位。 IFR:CPU中断标志寄存器; extern cregister volatile unsigned int IFR;(Device.h) #define EINT asm( clrc INTM) ( Device.h) 使能CPU中断;INTM只是个位不是寄存器,编程中不会出现,由硬件控制,同时其清除也在中断程序执行完后由硬件自动清除。判断INTM是否为0. 如果为0,CPU保存当前工作状态经过9个周期后开始执行中断。如过INTM为1,则只有等待。一般INTM为1,说CPU正在处理别的中断 INTM Bit?0:中断全局屏蔽位。此位从全局上使能或禁止所有可屏蔽CPU中断(那些可由软件阻止的中断):? 0?可屏蔽中断被全局使能。为了被CPU认可,则可屏蔽中断也必须被中断使能寄存器(IER)局部使能。 1?可屏蔽中断被全局禁止。即使一个可屏蔽中断被IER局部使能,也不会被CPU认可。? ??INTM对非可屏蔽中断没有影响,包括硬件复位或软件复位中断NMI。此外,当CPU在实时仿真模式下被停止时,由IER和DBGIER使能的中断将被响应,即使INTM设置为禁止可屏蔽中断。?

文档评论(0)

jiayou10 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8133070117000003

1亿VIP精品文档

相关文档