DSP的外围中断PIE
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
PIE标志位寄存器(PIEIFRx=1,12)
INTx.8 7 INTx.7 INTx.6 INTx.5 INTx.4 INTx.3 INTx.2 INTx.1 0
外设中断标志位。每一位对应一个外设级中断。
当某一外设产生中断时,相应标志位置1,中断被响应
后,被清0
INTx中断X指CPU级中断INT1-INT12。
struct PIE_CTRL_REGS { union PIECTRL_REG PIECRTL; union PIEACK_REG PIEACK; union PIEIER_REG PIEIER1; union PIEIFR_REG PIEIFR1; union PIEIER_REG PIEIER2; union PIEIFR_REG PIEIFR2; 。。。。。。。 union PIEIER_REG PIEIER9; union PIEIFR_REG PIEIFR9; union PIEIER_REG PIEIER10; union PIEIFR_REG PIEIFR10; union PIEIER_REG PIEIER11; union PIEIFR_REG PIEIFR11; union PIEIER_REG PIEIER12; union PIEIFR_REG PIEIFR12; }; // PIE control register // PIE acknowledge // PIE INT1 IER register // PIE INT1 IFR register // PIE INT2 IER register // PIE INT2 IFR register 。。。。。。。。 // PIE INT9 IER register // PIE INT9 IFR register // PIE INT10 IER register // PIE INT10 IFR register // PIE INT11 IER register // PIE INT11 IFR register // PIE INT12 IER register // PIE INT12 IFR register
• •
PieCtrl.PIECRTL.bit.ENPIE = 1; PieCtrl.PIEACK.all = 0xFFFF;
PieCtrl.PIECRTL.bit.ENPIE = 1; //××ENPIE = 1 从PIE中断向量表获取地址。××// PieCtrl.PIEACK.all = 0xFFFF; //××××// 写入1到对应中断位可清除该位,清除后当该组中断请求到 来时,CPU允许并响应对应的PIE。 }
所有外设PIE中断标志位清0
PieCtrl.PIEIFR1.all = 0; PieCtrl.PIEIFR2.all = 0; PieCtrl.PIEIFR3.all = 0; PieCtrl.PIEIFR4.all = 0; PieCtrl.PIEIFR5.all = 0; PieCtrl.PIEIFR6.all = 0; PieCtrl.PIEIFR7.all = 0; PieCtrl.PIEIFR8.all = 0; PieCtrl.PIEIFR9.all = 0; PieCtrl.PIEIFR10.all = 0; PieCtrl.PIEIFR11.all = 0; PieCtrl.PIEIFR12.all = 0;
DSP外围中断扩展
Peripheral Interrupt Expansion (PIE)
• PIE将外围高达96个中断源每8个分成一组,分为12组中断,每 组一个中断输入线进CPU(INT1-INT12)。
• 96个中断每个都有一个中断矢量的入口地址,存放在RAM中的 指定地址,在CPU响应某一中断时,会自动到相应中断入口地址 寻找中断服务程序,执行中断相应操作。 • 各个中断的开放或禁止由CPU控制PIE和CPU级各个中断使能位 完成。
外设中断使能控制位。每一位对应一个外设级中断。
当某一外设产生中断时,相应标志位置1。当相应使能位
被置1时,使能相应中断服务程序。设置为0时,中断响应
被禁止。
CPU级中断标志位寄存器(IFR)
7 INT8 15 INT7 INT6 INT5 INT4 INT3 INT2 0 INT1 8
RTOSINT
PIE分组情况
中断响应
• 在进入中断服务子程序前,DSP硬件会自动将IFRx清0, 将CPU内部的一些关键寄存器内容(例如PC的原来内容) 入堆栈保存,然后,将IERx清0,INTM置1,禁止其他中 断响应,避免中断嵌套。 • 中断服务程序响应完成后,原来保存内容从中断弹出,但
在返回前,需将外设寄存器中断标志位软件清0,以便外
7 INT8 15 INT7 INT6 INT5 INT4 INT3 INT2 0 INT1 8
RTOSINT
DLOGINT INT14 INT13
INT12
INT11
INT10
INT9
CPU IER为CPU级可屏蔽中断使能寄存器,NMI和XRS
不在其中。
向IER写入1可使能中断。
头文件Piectrl.h中寄存器定义
定义PIEIFR寄存器
struct PIEIFR_BITS {
Uint16 INTx1:1; Uint16 INTx2:1; Uint16 INTx3:1; Uint16 INTx4:1; Uint16 INTx5:1; Uint16 INTx6:1; Uint16 INTx7:1; Uint16 INTx8:1; Uint16 rsvd:8; }; union PIEIFR_REG { Uint16 all; struct PIEIFR_BITS bit; }; // 0 INTx.1 // 1 INTx. // 2 INTx.3 // 3 INTx.4 // 4 INTx.5 // 5 INTx.6 // 6 INTx.7 // 7 INTx.8 // 15:8 reserved
中断开放环节设定 (以SPI接口通讯中断为例)
PieCtrl.PIEIER6.bit.INTx1 = 1; //SPI的SPIRXINTA接收中断PIE使能 PieCtrl.PIEIER6.bit.INTx2 = 1; //SPI的SPITXINTA发送中断PIE使能
EALLOW; PieVectTable.SPIRXINTA = &SPIRXINTA_ISR; EDIS; /* 设置IER寄存器 */ IER |= M_INT6; EINT; //开中断
设能再次产生中断。
中 断 响 应 过 程
中 断 控 制 寄 存 器
PIECTRL寄存器
PIEVECT ENPIE
15~1 PIEVECT 表示PIE中断向量入口地址。 0 ENPIE 使能PIE矢量。 ENPIE = 1 从PIE中断向量表获取地址。 ENPIE = 0 禁止从PIE中断向量表获取地址。
CPU中断系统
中断响应的三个级别
中断响应的三个级别
• 外设级 一旦外设产生中断事件,对应外设的 中断标志位寄存器相应位置1。如果对应中 断使能位设为1,则外设中断请求信号 INTx.y(x=1~12,y=1~8)送到PIE控制器。
PIE分组情况
PIE级
• PIE级每个中断都有一个标志位PIEIFRx.y和一个中断使能位 PIEIERx.y。 • 对每个CPU中断组INT1~12都有一个应答位PIEACKx。
PIEACK寄存器
RESERVED PIEACK
11~0 PIEACK 中断INT1-INT12应答控制位。 写入1到对应中断位可清除该位,清除后当该组中 断请求到来时,CPU允许并响应对应的PIE。
PIE标志位寄存器(PIEIFRx=1,12)
INTx.8 7 INTx.7 INTx.6 INTx.5 INTx.4 INTx.3 INTx.2 INTx.1 0
中断设计举例
void InitPieCtrl(void) { PieCtrl.PIECRTL.bit.ENPIE = 0;
0 ENPIE 使能PIE矢量。 ENPIE = 1 从PIE中断向量表获取地址。 ENPIE = 0 禁止从PIE中断向量表获取地址。
//所有外设PIE中断使能位清0 PieCtrl.PIEIER1.all = 0; PieCtrl.PIEIER2.all = 0; PieCtrl.PIEIER3.all = 0; PieCtrl.PIEIER4.all = 0; PieCtrl.PIEIER5.all = 0; PieCtrl.PIEIER6.all = 0; PieCtrl.PIEIER7.all = 0; PieCtrl.PIEIER8.all = 0; PieCtrl.PIEIER9.all = 0; PieCtrl.PIEIER10.all = 0; PieCtrl.PIEIER11.all = 0; PieCtrl.PIEIER12.all = 0;
PIECTRL定义
struct PIECTRL_BITS { Uint16 ENPIE:1; // 0 Enable PIE block Uint16 PIEVECT:15; // 15:1 Fetched vector address }; union PIECTRL_REG { Uint16 all; struct PIECTRL_BITS bit; };
外设中断标志位。每一位对应一个外设级中断。
当某一外设产生中断时,相应标志位置1,中断被响应
后,被清0
INTx中断X指CPU级中断INT1-INT12。
PIE中断使能寄存器(PIEIERx=1,12)
INTx.8 7 INTx.7 INTx.6 INTx.5 INTx.4 INTx.3 INTx.2 INTx.1 0
• 一旦PIE控制中产生中断请Fra bibliotek,则相应PIE中断标志位PIEIFRx.y就置1。
如果中断使能位PIEIERx.y也为1,则PIEACKx决定CPU是否相应该 中断。如果PIEACKx清0,则PIE级中断进入CPU。如果PIEACKx=1,
则等待该位变0后将PIE中断送入CPU。
CPU级
• 当PIE级中断送入CPU后,CPU级中断标志位寄存器的标 志位就置1。如果CPU的中断使能寄存器IER相应位置1, 且全局中断屏蔽位INTM(ST1寄存器的第0位)为0,CPU就 响应中断,进入中断服务程序。
DLOGINT INT14 INT13
INT12
INT11
INT10
INT9
CPU IFR为CPU级中断标志位寄存器,用于辨别和清除中
断挂起。
向IFR写入1可清除中断标志位。 CPU相应可屏蔽中断后,CPU IFR标志位自动清0,但相 应外设寄存器的标志位需要用户软件清0。
CPU级中断使能寄存器(IER)