- 1、本文档共6页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
dsp2812和28335的中断机制
DSP2812和28335的中断机制(原创)
DSP28x的中断主要由三部分组成,一个是以外设事件组成的公用中断扩展PIE,二是用户自定义的中断,三是其他特殊的中断,包括不可屏蔽中断、非法中断和一部分定时中断。
?
要理解DSP28系列的中断机制,就需要理解以下三个部分,一是PIE,二是中断执行流程,三是CPU级中断执行流程。
?
一、PIE
?
DSP的外设事件很多,DSP内核CPU没有那么多资源来对每个外设事件进行响应,所以就有了PIE(peripheral interrupt expansion)。就好比公司有很多员工,不可能每个员工有事情都去找总经理,那样的话总经理就太忙,所以就搞了N个部门,每个部门管理若干个员工,由部门经理独立向总经理进行汇报,这样总经理面对的汇报对象就少了很多,可以从容的处理公司的事务。带来的问题就是,一个员工要把自己所掌握的情况汇报到总经理那里,需要走很多流程,而且由于“政治”因素,亲疏关系,存在优先级的问题。关系好的员工,总是被总经理优先接待。
dsp的pie有12个部门经理,每个经理管理8个员工。部门内部,部门经理给每个员工都有一个汇报权限(PIEIERx.y),当该权限使能时,员工有事就可以跟部门经理汇报。总经理给每个部门经理也有个汇报权限(IERx),总经理自己还有个按钮(INTM),当总经理哪天需要休息时,将手机一关,所有的汇报都不能到达他那里了。
?
二、中断执行流程
参见《TMS320 x2833x, 2823x System Control and Interrupts》6.3.3节。
?
Step1:当PIE中的外设发生了一个事件,若外设内部允许该事件产生中断,则外设向PIE发送中断。
Step2:如果PIE收到x组的y中断的信号,就将PIEIFRx.y=1。
Step3:PIE要想cpu发送中断请求,必须满足下面两个条件:
? ? a.PIEIERx.y=1
? ? b.PIEACKx必须清零。
Step4:如果步骤3的两个条件均满足,则向CPU发送中断请求,并置位PIEACKx。PIEACKx需要手动清除,以便CPU相应后续的x组的中断。
Step5:IFRx置高,表明中断x挂起。
Step6:如果IERx==1且INTM==0,CPU就响应INTx。
Step7:CPU保存context,清除IFRx,EALLOW,置高INTM。
Step8:CPU向PIE请求中断向量地址。
Step9:对于复用的中断,PIE根据此时的PIEIERx和PIEIFRx来解码取得中断向量地址,并自动清除PIEIFRx.y,然后响应中断程序。
Step10:中断执行完,须手动清除PIEACKx。若外设有需要自身的事件标志位,须手动清除。中断退出时,CPU会清除INTM。
?
中断向量的位置分两种情况,当上电复位时,ENPIE默认为0,此时中断向量对应BROM 0x3FFFC0,初始化后将ENPIE置1,中断向量重新定位于0x000D00。M1和M0两种方式不会用到。
?
?
三、CPU中断执行流程
CPU级的中断主要分为两种,可屏蔽和不可屏蔽中断。两者的主要区别是,可屏蔽中断需要处理IFR和IER寄存器。只有做操作系统移植的人,才会来关心cpu级中断执行流程,操作系统任务的切换主要用的是不可屏蔽中断,所以就详细研究下不可屏蔽中断的流程。详见《TMS320C28x CPU and Instruction Set Reference Guide》的chapter3.
?
Step1:Trap指令执行后,首先冲刷流水线。
Step2:PC增长。
Step3:取回中断向量地址。
Step4:堆栈指针SP增加1.
Step5:自动存储相关寄存器。
Step6:清除相关标志位。
Step7:将中断向量地址载入PC寄存器。
Step8:执行中断服务程序。
?
手册里讲的很简单,其实有几个细节问题需要想明白:
1、Step5的寄存器存储,其实只存储了一些必须的寄存器,还有辅助寄存器XAR1~XAR7等并没有自动存储。如果这些寄存器在中断里面被使用,等中断返回时岂不是不能回到中断前的状态了?所以对于非屏蔽中断,如果中断中用到了这些辅助寄存器,就需要在中断程序执行前进行手动存储。对于可屏蔽中断,编译过程中,编译器会自动帮你存储那些你在中断中使用到的寄存器。对于操作系统的移植,就需要手动将这些寄存器进行存储。
2、对于28+FPU的浮点芯片,还有很多浮点寄存器。如果中断中存在浮点计算,就需要将这些浮点寄存器同时进行存储。
3、Step6中清除了相关的标志位,但这些标志位是保存在ST1寄存器的,ST1寄存器被自动存在了堆栈中,等中断结束后,调用IRET指令,会进行重新恢复。
您可能关注的文档
最近下载
- 信息系统安全管理记录表单汇编.docx
- 炼铁厂1080m3高炉试车方案.doc
- 生物大数据(福建农林大学)中国大学MOOC 慕课 章节测验期末考试答案.docx
- 中国传统节日——冬至节日介绍(教学设计)全国通用五年级上次综合实践活动.docx
- AP微积分BC (2018年真题)全套含选择题及答案.pdf VIP
- OEM代工与加工合同协议书范本 详细版.docx
- 关于农业自动化灌溉浇灌滴灌控制系统设计有关 的外文文献翻译成品:自动灌溉系统的设计与实现(中英文双语对照).docx
- 宪法多选题新题.doc VIP
- Bain-德邦产品融合项目里程碑汇报(上会终稿)-20170525.pptx VIP
- 宪法考试多选题 .pdf VIP
文档评论(0)