1、DSP中断管理分为3个层次:外设级,PIE级,CPU级。
其中,外设级中断管理负责具体外设中断源的允许与禁止,PIE级中断管理负责对外设级中断分组并按照优先级管理,CPU内核级中断管理则负责处理直接向CPU申请的中断请求。
DSP控制器的外设中断扩展模块(PIE),对中断进行集中化扩展,使每一级CPU中断均可以响应多个中断源。
2、PIE级中断及管理:
CPU内核级中断(INT1–INT14),INT1-INT12被PIE模块用来进行中断扩展,有12组,每组8个中断源。

各中断的优先级自上而下,由右到左逐步降低,总体优先级INT1最高,INT12最低。
INT13由CPU定时器1和外部中断XINT13复用,INT14由定时器2独占。
3、中断响应过程
4、中断寄存器介绍
- PIEIFRx (1-12)中断标志寄存器
- PIEIERx (1-12)中断屏蔽寄存器
各有12个,每个16位宽,只用了前8位分别表示8个中断源;IFR标志中断到来,IER表示是否要响应(PIEIFRx.1-8,PIEIERx.1-8)
- PIEACKx (1-12)应答位
CPU是否响应给位的中断,为0中断送入CPU,为1等待
- PIECTRL PIE控制寄存器,只读
读取中断向量
- XINTnCR (n为1-7) 7个外部中断
选择中断边沿,01上升沿;外部中断允许位
5、代码片
PieCtrlRegs.PIEIFR1.bit.INTx4=1
PieCtrlRegs.PIEIER1.bit.INTx4=1
PieCtrlRegs.PIEACK.all = 0x0004
PieCtrlRegs.PIECTRL.bit.ENPIE=1
6、定时器中断实例
#include "DSP2833x_Device.h"
#include "DSP2833x_Examples.h"
interrupt void cpu_timer0_isr(void);
void main()
{
InitSysCtrl();
InitGpio();
DINT;
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
EALLOW;
PieVectTable.TINT0 = &cpu_timer0_isr;
EDIS;
InitCpuTimers();
ConfigCpuTimer(&CpuTimer0,150,1000000);
CpuTimer0Regs.TCR.all = 0x4001;
IER |= M_INT1;
PieCtrlRegs.PIEIER1.bit.INTx7 = 1;
EINT;
ERTM;
while(1);
}
interrupt void cpu_timer0_isr(void)
{
CpuTimer0.InterruptCount++;
PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
}
7、外部中断实例
后续实例,先占个坑