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