DSP F28系列 外部中断基本结构及启动方法

中断概述

中断定义:由硬件或软件驱动的信号,使DSP将当前的程序挂起,执行另一个称为中断服务子程序(ISR)的任务。
但是中断服务程序独立于主程序,当有一部分资源在中断程序与主程序中均使用到时,应当注意中断服务程序与主程序之间的资源冲突。
中断事件通过一系列的flag and enable registers 传递到CPU。其中,Flag registers 保持中断标志直到该中断被执行,enable registers 控制中断是否能够向下一级继续传递。当中断信号到达CPU时,CPU从向量表中获取合适的中断服务程序地址(ISR address),执行中断服务程序。

C28X系列中断结构

C28X 系类CPU有着14条外部中断线,其中的INT13 和INT14分别直接与CPU的定时器1和定时器2相连。剩下的12条地址线通过ePIE 模块(增强型中断外部扩展模块)和外部中断源相连。
PIE将最多16条外部中断复用至每一个CPU中断线。所以每一个CPU中断线可以对应处理16条外部中断。PIE同时扩展了中断向量表,为每一个中断提供它自己的ISR。
每一条中断路径可以分为三个阶段-外围,PIE,CPU。每一集都有着自己的enable and flag register。这些结构能够使得CPU在处理一些中断的同时,将另外一些中断挂起,在软件中实现中断嵌套和中断优先级排序,或者在某些时候禁止中断(关掉中断)
在这里插入图片描述

外部资源的中断

每一个外设都有自己独立的中断配置。一些中断允许多重事件共同触发同一个中断信号。本处主要记录ePWM 的中断触发方式。

PIE

PIE为每一个外设的中断信号提供独立的flag and enable register,有时会称之为 PIE channels.这些频道被根据他们与CPU 关联的中断线路分组(group)。每一个中断向量组有一个16位的enable register(PIEIERx)和一个16位的flag register (PIEIFRx),还有1位控制位在PIE acknowledge register(PIEACK),这个PIEAC寄存器控制位 控制整个中断群的工作与否。

CPU

与PIE相似,CPU也为每一个中断信号提供独立的flag and enable register,同样也有一个enable register (IER)和一个flag register (IFR)。同样也有一个全局的中断屏蔽位,这个中断屏蔽位被INTM位控制,INTM位处于ST1寄存器中。这个中断屏蔽通过CPU的SETC和CLRC指令控制。在C语言中,DINT和EINT能够实现这一功能。

中断信号行进示意

在这里插入图片描述当一个外设产生中断时(假设这个中断在PIE group x,channel y),将会依次触发以下事件:
1、在PIEIFRx,y中,中断被获取;
2、如果PIEIERx,y被设置,中断继续向下一级传播;
3、如果PIEACK.x被清零,中断继续向下传播,中断通过后,PIEACK.x被设置;
4、中断被IFR.x获取;
5、如果IER.x被设置,中断继续向下传播;
6、如果INTM被清零,CPU将接受中断;
7、CPU接受中断后,当前运行的指令中,在流水线D2或者D2之后阶段的指令将会被继续执行直到完成,在此之前的指令将会被挂起;
8、CPU将当前执行的指令保存至堆栈中;
9、IFR.x和IER.x被清零,INTM被设置,EALLOW被清零;
10、CPU从PIE中获取中断服务程序地址向量表,PIEIFRx.y被清零;
11、CPU开始执行中断服务程序
**中断延迟:**中断延迟是PIEIFRx.y获取中断和第一条ISR指令到达CPU流水线开始被执行这两个时间之间的时间差。中断延迟时间最小为14个SYSCLK cycles。
堆栈寄存器和ISR执行的等待状态会增加中断延迟时间。

配置及使用中断

在系统刚上电时,默认状态下没有中断是使能的。PIEIRE和IER寄存器默认被清零,INTM被设置。
使能中断
通过以下方式使能一个外设中断:
1、全局中断禁用(DINT or SETC INTM)
2、使能PIE。通过设置PIECTRL 寄存器中的ENPIE位使能PIE;
3、在PIC向量表中的合适位置,写好每一个中断的ISR向量;
4、为相关中断设置合适的PIEIER.x控制位;(不适用于定时器1和定时器2,这两个外设的中断直接与CPU相连);
5、在CPU中的IER中设置相应的控制位;
6、在外设中使能中断;
7、只能全局中断(EINT or CLRC INTM)
处理中断
ISR与一般的程序相似,但是有以下特点:
1、保存和储存相关寄存器的状态;
2、清除中断向量组的PIEACK位;
3、返回时使用IRET命令;

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值