weixin_51667030 2025-09-28 21:23 采纳率: 0%
浏览 5

DSP中断机制,中断初始化

最近在调DSP的中断程序的时候,遇到了一个问题,代码如下,当 InitPieCtrl()到 InitPieVectTable()的几行代码在EALLOW外时,能正常触发中断,当这几行代码在EALLOW内时,编译不会报错,但不能触发中断。有朋友知道这是怎么回事吗?希望可以解答一下,谢谢。

void Interrupt_Init(void)
{

    InitPieCtrl();
    IFR=0X0000;
    IER=0X0000;
    InitPieVectTable();

    EALLOW;

    GpioIntRegs.GPIOXINT1SEL.bit.GPIOSEL=12;

    PieVectTable.XINT1=&Press_Interrupt;


    XIntruptRegs.XINT1CR.bit.ENABLE=1;
    XIntruptRegs.XINT1CR.bit.POLARITY=0;

    PieCtrlRegs.PIEIER1.bit.INTx4=1;

    IER|=M_INT1;
    EINT;
    ERTM;

//    XINT1是外部中断,第几组第几线是PIE中断,第几组是CPU中断,最后有个全局使能。

    EDIS;

}

  • 写回答

6条回答 默认 最新

  • 阿里嘎多学长 2025-09-28 21:23
    关注

    阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程

    理解

    看起来你正在开发一个DSP应用,遇到了中断初始化问题。具体来说,你的代码在EALLOWIEALLOW之间,InitPieCtrl()InitPieVectTable()之间的代码,会在触发中断时正常工作。但是一旦你在EALLOW之外,中间这几行代码就会失效。

    你可能遇到的问题是DSP的中断机制和安全模式相关的问题。EALLOWIEALLOW用于在安全模式下控制DSP的中断和访问。

    解决方案

    你可以尝试以下方案:

    1. 确保在初始化中断控制器和中断向量表之前,你已经使能了中断。
    2. 检查InitPieCtrl()InitPieVectTable()函数返回值,看看是否正确。
    3. 尝试在EALLOW下初始化中断控制器和中断向量表,看看会不会解决问题。
    4. 如果上述方法不生效,你可以尝试在中断中使用EALLOWIEALLOW来保护中断的代码。
    // 在初始化中断控制器和向量表之前使能中断
    EALLOW;
    PieCtrlRegs.PIECtrlBits |= M_INT7; // 使能中断
    EDISABLE;
    
    // 初始化中断控制器和向量表
    InitPieCtrl();
    InitPieVectTable();
    
    // 确保在触发中断之前使能中断
    EALLOW;
    PieCtrlRegs.PIECtrlBits |= M_INT7; // 使能中断
    EDISABLE;
    

    以上只是一个基本的解决方案,具体问题依然需要根据你的实际情况去调试和校正。

    评论

报告相同问题?

问题事件

  • 创建了问题 9月28日