大家好、我在从 IPC0生成中断时遇到问题。 我的其他中断工作正常、因此我对这个问题有一点不确定。 我还参考了控制套件中的示例、但未能看到我的错误所在。
我在 CPU1中设置 IPC0,在 CPU2中,我可以看到它通过以下方式进行设置:
'IpcRegs.IPCSTS.bit.IPC0'设置为1、使该端正常工作。
这是来自 CPU2的一些代码。
_interrupt void IPC0_ISR (void);
//步骤3. 清除所有中断并初始化 PIE 矢量表:
//禁用 CPU 中断
//
Dint;
//
//将 PIE 控制寄存器初始化为默认状态。
//默认状态为禁用所有 PIE 中断和标志
//被清除。
//此函数位于 F2837xD_PIECTRL.c 文件中。
//
InitPieCtrl();
//
//禁用 CPU 中断并清除所有 CPU 中断标志:
//
IER = 0x0000;
IFR = 0x0000;
//
//使用指向 shell 中断的指针初始化 PIE 矢量表
//服务例程(ISR)。
//这将填充整个表,即使是中断也是如此
//在本例中未使用。 这对于调试很有用。
//可以在 F2837xD_DefaultIsr.c 中找到 shell ISR 例程
//此函数可在 F2837xD_PieVect.c 中找到
//
InitPieVectTable();
//
//注册 EPWM1的 EPWM 中断处理程序
//
EALLOW;
PieVectTable.ADCD1_INT =&epwm1_ISR;// ADCC 中断1的函数
PieVectTable.IPC0_INT =&IPC0_ISR;// ADCC 中断1的函数
EDIS;
//
//启用连接到 IPC0 INT 的 CPU INT1:
//
IER |= M_INT1;
//
//在 PIE 中启用 ePWM INTn:组1中断6
//
PieCtrlRegs.PIEIER1.bit.INTx6=1;
PieCtrlRegs.PIEIER1.bit.INTx13=1;
//
//启用全局中断和更高优先级的实时调试事件:
//
EINT;//启用全局中断 INTM
ERTM;//启用全局实时中断 DBGM