当前位置:文档之家› dsp第四章

dsp第四章


2812的中断系统
• 清除T1PINT标志位: EvaRegs.EVAIFRA.bit.T1PINT = 1; • 中断屏蔽位使能 : EvaRegs.EVAIMRA.bit.T1PINT = 1;
16
2812的中断系统
(2)PIE级中断控制 ) 级中断控制
• 当外设产生中断事件,相关中断标志位置位,中 断使能位使能之后,外设就会把中断请求提交PIE 模块。PIE模块将96个外设和外部引脚的中断进 行了分组,每8个中断为1组,一共是12组,分别 是PIE1-PIE12。每个组的中断被多路汇集进入1 个CPU中断。
13
2812的中断系统
• 我们用具体的T1PINT来进行进一步的说明。当定时器T1 的计数器寄存器T1CNT计数到和T1周期寄存器T1PINT的 值匹配时(相等时),就产生了一个T1PINT事件,即T1 的周期中断。这时候,事件管理器EVA的中断标志寄存器 A(EVAIFRA)中的第7位T1PINT FLAG被置为1,这时 候如果EVA的中断屏蔽寄存器A(EVAIMRA)中的第7位 T1PINT的使能位是1,则EVA就会向PIE发出中断请求, 当然,如果该位的值是0,也就是该中断未被使能(被屏 蔽),则EVA不会向PIE发出中断请求,而且EVAIFRA中 T1PINT FLAG位将一直保持为1,除非通过程序将其清除。 需要注意的是,不管在什么情况下,外设寄存器中的中断 标志位都必须手工清除。
5
2812的中断系统
• 2812内部具有很多外设,每个外设又可以产生一 个或者多个中断请求,对于2812的CPU而言,它 没有足够的能力去同时处理所有外设的中断请求。 • 2812的CPU为了能够及时有效的处理好各个外设 的中断请求,特别设计了一个专门处理外设中断 的扩展模块(the Peripheral Interrupt Expansion block),叫做外设中断控制器PIE,它能够对各 种中断请求源(例如来自于外设或者其他外部引 脚的请求)做出判断以及相应的决策。
7
2812的中断系统
8
2812的中断系统
• ,黄色部分表示已经使用的中断,来看看 事件管理器EVA中定时器T1的周期中断 T1PINT在图中的哪里?我们可以看到 T1PINT在行号为INT2,列号为INTx.4的位 置,也就是说T1INT对应于INT2,是INT2 中的第四个中断。这样,我们就可以找到 所有外设中断的所属分组情况以及在该组 中的位置。
22
2812的中断系统
(3)CPU级 中断 和前面两级类似的,CPU也有标志寄存 器IFR和使能寄存器IER。当某一个外设中 断请求通过PIE发送到CPU时,CPU级中与 INTx相关的中断标志位就会被置位。
23
2812的中断系统
例如,T1的周期中断T1PINT的请求到 达CPU这边时,与其相关的INT2的标志位 就会被置位。这时候,该标志位就会被所 存在IFR中,这时候,CPU不会马上去执行 相应的中断,而是等待CPU使能IER寄存器 的相关位,如果IER中的相关位被置位了, 并且INTM的值为0,则中断就会被CPU响 应。在T1PINT的例子里,当IER的第2位即 INT2被置位,INTM为0,则CPU就会响应 定时器T1的周期中断。
10
2812的中断系统
11
2812的中断系统
• • • • IFR外设中断标志寄存器 IER外设中断使能寄存器 PIEACK外设中断状态寄存器 INTM全局中断使能
12
2812的中断系统
中断的执行过程
(1)外设级 假如在程序的执行过程中,某一个外设产生了一个中 断事件,那么在这个外设的某个寄存器中与该中断事件相 关的中断标志位(IF=Interrupt Flag)被置为1。此时,如 果该中断相应的中断使能位(IE=Interrupt Flag)已经被 置位,也就是为1,外设就会向PIE控制器发出一个中断请 求。但是该中断没有被使能(相应的使能位为0),那么 外设就不会向PIE发出中断请求,但是相应的中断标志位 会一直保持置位状态,一旦该中断被使能了,那么外设立 马会向PIE发出中断申请。
25
2812的中断系统
• 我们可以看到,与前两级中断不同,CPU 级的操作都是自动的,不管是中断标志位, 还是中断的使能位。
26
2812的中断系统
27
2812的中断系统
• 一个完整的 一个完整的T1PINT中断过程 中断过程
主程序部分 DINT; IER = 0x0000; IFR = 0x0000; EvaRegs.EVAIMRA.bit.T1PINT = 1; PieCtrlRegs.PIEIER2.bit.INTx4=1; IER |=M_INT2; EINT;
32
2812的中断系统
• 例子
33
30
2812的中断系统
两种中断程序定义方式
第一种方式: • 首先在程序开头声明中断子程序 interrupt void xxx(void); • 然后再将子程序入口地址赋给中断向量表中相应 的中断位 PieVectTable.TINT0 = &xxx;
31
2812的中断系统
第二种方式 直接在TI提供的中断子程序 DSP281x_DefaultIsr.c 中找到所需要的中断程 序进行修改。
19
2812的中断系统
总结一下,在PIE级需要我们手动的地方有:
• PIE中断的使能和屏蔽。需要使能某个外设中断, 就得将其相应组的使能寄存器PIEIERx的相应位 进行置位; • PIE应答寄存器PIEACK相关位的清除,以使得 CPU能够响应同组的其他中断。
20
281Байду номын сангаас的中断系统
• 清除PIE中与T1PINT相关的应答位: PieCtrl.PIEACK.bit.ACK2=1; • 使能PIE中断INT2.4(T1PINT中断): PieCtrlRegs.PIEIER2.all=M_INT4; //M_INT4=0x0008
24
2812的中断系统
• CPU接到了终端的请求,会将相应的IER和 IFR位进行清除,INTM被置位,就是不能 响应其他中断了,CPU向其他中断发出了 通知,正在忙,没空来处理你们的请求了。 然后,CPU会存储返回地址并自动保存相 关的信息,例如将正在处理的数据放入堆 栈等等,做好这些准备工作之后,CPU会 从PIE块中取出对应的中断向量ISR,从而 转去执行中断子程序。
2812的中断系统
1
中断的概念
• 同学们应该都知道中断这个词汇,任何一 款事件驱动型的CPU里面都应该会有中断, 因为中断就是为响应某种事件而存在的。 中断的灵活使用不仅可以实现我们想要实 现的功能,而且合理的中断安排可以提高 事件执行的效率,因此中断在DSP应用中 的地位是很重要的。
2
中断的概念
• 中断(Interrupt)是硬件和软件驱动事件, 它使得CPU暂停当前的主程序,并转而去 执行一个中断服务程序。
3
中断的概念
• 试举例一个电机控制系统中可能用到的中 断。
4
2812的中断系统
• 2812的CPU能 够支持一个不 可屏蔽中断NMI 和16个可屏蔽 16 的中断INT1INT14、 RTOSINT(实 时操作系统中 断)和 DLOGINT(数 据标志中断)
21
2812的中断系统
• 将PIE级的中断和外设级的中断相比较之后 发现,外设中断的中断标志位是需要手工 清除的,而PIE级的中断标志位都是自动置 位或者清除的。但是PIE多了一个PIEACK 寄存器,相当于一个同行的关卡,同一时 间只能放一个中断过去,只有等到这个中 断被响应,给关卡一个放行命令之后,才 能让同组的下一个中断过去,被CPU响应。
17
2812的中断系统
• 和外设级类似的,PIE控制器中的每个 组都会有一个中断标志寄存器PIEIFRx 和和中断使能寄存器PIEIERx。每个寄 存器的低8位对应于8个外设中断,高8 位保留。例如T1PINT对应于PIEIFR2 的第4位和PIEIER2的第4位。
18
2812的中断系统
• PIE模块是多路复用的,那么每一组同一时间应该只能是 一个中断被响应,PIE是怎么做到的呢?PIE还有一个 PIEACK寄存器,它的低12位分别对应着12个组,即 INT1-INT12,高位保留。假如T1的周期中断被响应了, 则PIEACK寄存器的第2位(对应于INT2)就会被置位, 并且一直保持直到手动清除这个标志位。当CPU在响应 T1PNT的时候,PIEACK的第2位一直是1,这时候如果 PIE2组内发生其他的外设中断,则暂时不会被PIE响应送 给CPU,必须等到PIEACK的第2位被复位之后。所以, 每个外设中断被响应之后,一定要对PIEACK的相关位进 行手动服务,否则同组内的其他中断都不会被响应。
14
2812的中断系统
总结一下外设级中断需要我们手动的地方有:
• 外设中断的使能,需要将与该中断相关的外设 寄存中的中断使能位置1; • 外设中断的屏蔽,需要将与该中断相关的外设 寄存中的中断使能位置0; • 外设中断标志位的清除,需要将与该中断相关 的外设寄存中的中断标志位置1;
15
9
2812的中断系统
• 2812的中断是3级中断机制,分别是外设级, PIE级以及CPU级,对于某一个具体的外设 中断请求,任意一级的不许可,CPU最终 都不会执行该外设中断。就像一个文件需 要三级领导批示一样,任意一级领导的不 同意,都不能被送至上一级领导,更不可 能得到最终的批准,中断机制的原理也是 如此。
6
2812的中断系统
• PIE可以支持96个不同的中断,这些中断分 成了12个组,每个组有8个中断,而且每个 组都被反馈到CPU内核的12条中断线中的 某一条上(INT1-INT12),我们平时用到 的所有的外设中断都被归入了这96个中断 中,被分布在不同的组里,这里其实也是 用到了多路复用的原理。
相关主题