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