以前一直看寄存器手册也没明白到底中断是怎么配置的,只是看例程上别人是这么用的,最近在使用CAN中断遇到了一些问题,才开始看中断配置的资料,DSP的中断是被TI封装好了的,我们都知道dsp中断分为三级,分别去配置三级中断使能就好了,简单的一批。
F28335中断机制
F28335采用3级中断机制,外设级、PIE级、CPU级中断,最内核部分为CPU级中断,即CPU只能响应从CPU中断线上的中断请求,28335中断源有58个,中断线不够用(16条,2(复位、NMI)条不能屏蔽复),为了安排中断线复用使用了复用管理PIE级中断(支持96个外设中断),外设产生中断→PIE允许→CPU响应
1、
InitPieCtrl();//初始化IER IFR清零
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();//初始化PIE向量表
2、使能外设对应的PIE级中断
PieCtrlRegs.PIEIER9.all |= M_INT7;//例can中断 第9组第7个
3、使能外设级中断,不同外设的中断要去不同模块中查找
ECanbRegs.CANGIM.bit.I0EN = 1; //使能ECAN0INT中断
4、使能cpu级及全局中断
IER |= M_INT9; //使能第9组中断
EINT; // Enable Global interrupt INTM 使能全局中断
ERTM; // Enable Global realtime interrupt DBGM 使能全局实时中断
5、指定中断向量表
EALLOW;
// PieVectTable.ECAN0INTA = &ECAN0INTB_ISR; // eCAN接收中断
PieVectTable.ECAN0INTB = &ECAN0INTB_ISR; // eCAN接收中断
EDIS;
6、中断服务函数,使用完中断要清理标志位
interrupt void ECAN0INTB_ISR(void) // eCAN-B接收中断
{
//调用指令
PieCtrlRegs.PIEACK.all = PIEACK_GROUP9; //复位中断应答寄存器
}