您好!
我正在尝试启用 ECAN0INTA 中断以进行接收、然后使用 ECAN0INTA_ISR 函数对其进行服务、该函数是 DSP2803x_DefaultIsr.c 文件的一部分。 以下是我已执行的步骤:
步骤1:配置中断: (请注意、CAN 通信工作正常、目前我们通过查询 CANRMP 寄存器来使用中断、但我们需要 ISR 额外工作。)
//在 CAN 上配置中断的示例模板和步骤
//####################################################################################################################################################################################################################
// MBOX15是接收分布式控制输出的 RX 邮箱。 因为接收具有时间关键型
//从这个邮箱使用中断进行控制
//首先、除邮箱 TX-RX 中断外的所有 CAN 中断都将被禁用。 以下寄存器包含
//启用/禁用除 RX-TX 以外的所有事件的控制(例如、 总线关闭、超时、中止确认等)
ECANaRegs.CANGIM.ALL = 0;
//下一步选择特定邮箱的中断线路。 我们有2种选择:ECAN1INT 或 ECAN0int 线路。
// 0:选择 ECAN0INT 电平
// 1:选择 ECAN1INT 电平
//我们将使用 ECAN0INT
ECanaShady.CANMIL.ALL = ECanaRegs.CANMIL.ALL;
ECANaShady.CANMIL.bit.MIL15 = ECAN0INT_LEVEL_SELECT;//选择 ECAN0INT 电平以生成 MBOX15中断
//{默认情况下、其他也配置为 ECAN0INT 级别、但我们无关)
ECanaRegs.CANMIL.ALL = ECanaShady.CANMIL.ALL;
//启用 MBOX15邮箱中断
ECanaShady.CANMIM.ALL = ECanaRegs.CANMIL.ALL;
ECanaShady.CANMIM.bit.MIP15 = ENABLE_INT;
ECANaRegs.CANMIM.ALL = ECANaShady.CANMIM.ALL;
//在外设级别启用 ECAN0INT
ECanaShadure.CANGIM.ALL = ECanaRegs.CANMIL.ALL;
// ECanaShading.CANGIM.bit.I0EN = ENABLE_INT;
ECanaShadure.CANGIM.ALL = 0xFFFFFFFF;
ECANARegs.CANGIM.ALL = ECANaShadure.CANGIM.ALL;
//####################################################################################################################################################################################################################
EDIS;
}
如您所见、我只是将接收邮箱15的中断设置为0级。
步骤2:配置 ISR 处理:
EALLOW;
/*使用默认 ISR 矢量*/
PieVectTable.ADCINT1 = ADCINT1_ISR;
PieVectTable.ECAP1_INT = ECAP1_INT_ISR;
PieVectTable.SCIRXINTA = SCIRXINTA_ISR;
PieVectTable.ECAN0INTA = ECAN0INTA_ISR;
PieVectTable.ECAN1INTA = ECAN1INTA_ISR;
/*在 PIE 级别启用中断*/
PieCtrlRegs.PIEIER1.bit.INTx1 = ENABLE_INT_PIE_LEVEL;// ADCINT1中断
PieCtrlRegs.PIEIER4.bit.INTx1 = ENABLE_INT_PIE_LEVEL;// ECAP1_INT 中断
PieCtrlRegs.PIEIER9.bit.INTx1 = ENABLE_INT_PIE_LEVEL; //Scia Rx 中断
确认_Group_interrupt (PIEACK_group9);
EDIS;
/*步骤9:在 CPU 级别启用中断*/
IER |=(M_INT9 | M_INT4 | M_INT1);//在 CPU 级别启用组9、组4和组1中断(M_INT9只是0x0100)
我这样做是为了启用组9 (请注意、ADC_ISR、SCI_ISR、ECAN_ISR 工作正常。 实际上、SCI_ISR 与 ECAN 的组9)位于同一组中。
我无法通过执行上述操作使 ECAN0INT_ISR 正常工作。 我是否遗漏了什么?