This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] 如何在另一个外部中断内部设置两个外部中断

Guru**** 2024750 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/572739/how-to-setup-two-external-interrupts-inside-of-another-external-interrupt

您好,TI:

我想在另一个外部中断(XINT3)内设置两个外部中断(XINT1和XINT2),它是否有效?

是否有任何关于如何进行此类设置的文档?

我还遇到了XINT3的设置问题, 不知怎么的,XINT3 ISR功能即使通过我向其应用信号也没有被触发。

XIN2_ISR和XINT1_ISR工作正常,XINT3_ISR的设置与XINT1和XINT2完全相同,但它只是不起作用。 我可能错过了一些东西。 请帮助并查看我的GPIO设置。

以下是基于ControlSuit ExternalInterrupts示例的我的以下设置:

硬件:F2.8055万

中断无效xint1WR_ISR(void);
中断无效xint2RD_ISR(void);
中断无效xint3CS_ISR(void); 
//此文件中找到ISR函数。
EALLOW;	//需要写入EALLOW保护寄存器
PieVectorTable.XINT1 =&xint1WR_ISR;
PieVectorTable.XINT2 =&xint2RD_ISR;
PieVectorTable.XINT3 =&xint3CS_counters;
EDIS;//需要禁用写入到Eint1W_ISR的寄存器;

XINCount

= 0 //计数XINT2中断
Xint3CS_Count =0;//计数XINT3中断 
//在PIE中启用XINT1,XINT2和XINT3:组1,12中断4,5和1
//启用连接到WAKEINT的INT1:
PieCtrlRegs.PIECTRL.bit.ENPIE = 1; //启用PIE块
PieCtrlRegs.PIEIER1.bit.INTx4 =1; //启用PIE组1 INT4
PieCtrlRegs.PIEIER1.bit.INTx5 =1; //启用PIE组1 INT5
PieCtrlRegs.PIEIER12.bit.INTx1 =1; //启用PIE组12 INT1
IER |= M_INT1; //启用CPU INT1
EINT; //启用全局中断 
// GPIO8是输入XINT1,GPIO9是输入XINT2,GPIO10是输入XINT3
EALLOW;
GpioCtrlRegs.GPAMUX1.bit.GPIO8 = 0; // GPIO8
GpioCtrlRegs.GPADIR.bit.GPIO8 = 0; //输入
GpioCtrlRegs.GPAQSEL1.bit.GPIO8 = 0; //同步到SYSCLOUT

GpioCtrlRegs.GPAMUX1.bit.GPIO9 = 0; // GPIO9
GpioCtrlRegs.GPADIR.bit.GPIO9 = 0; //输入
GpioCtrlRegs.GPAQSEL1.bit.GPIO9 = 0; //同步到SYSCLOUT

GpioCtrlRegs.GPAMUX1.bit.GPIO10 = 0; // GPIO10
GpioCtrlRegs.GPADIR.bit.GPIO10 = 0; //输入
GpioCtrlRegs.GPAQSEL1.bit.GPIO10 = 0; //同步到SYSCLOUT
EDIS;

// GPIO8是XINT1,GPIO9是XINT2,GPIO10是XINT3
EALLOW;
GPIOIntRegs.GPIOXINT1SEL.BIT.GPIOSEL = 8;// XINGPIO8
是GPIO8 GPIOIntRegs.GPXINTR2;GIOSEL/ININT10是

连接的XIN10;GIOSEL.


//配置XINT1,XINT2和XINT3
XIntruptRegs.XINT1CR.bit.Polarity =1; //上升边缘中断
XIntruptRegs.XINT2CR.bit.Polarity =1; //上升边缘中断
XIntruptRegs.XINT3CR.bit.Polarity = 0; //下降边缘中断

//启用XINT1,XINT2和XINT3
XIntruptRegs.XINT1CR.bit.enable = 1; //启用XINT1
XIntruptRegs.XINT2CR.bit.enable =1; //启用XINT2
XIntruptRegs.XINT3CR.bit.enable =1; //启用XINT3 
中断void xint1WR_ISR(void)
{

Xint1WR_Count++;//

确认此中断以从组1
中获取更多PIECtrlRegs.PIEACK/ALL = PIEACK_Group1;

}









ISR void xint2RD_interrupt (void){ Xint2RD_Count+;//组此中断以从组1中获取更多PIEACK_INQ_INQ3+中断= PIE3INQ_INQ_INQ_INACQ#1= P3INQ+



//确认此中断以从组12
PieCtrlRegs.PIEACK.ALL = PIEACK_Group12;
}获取更多信息 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    浙江

    您只启用了CPU中断组1。

    1.
    3.
    4.
    5.
    6.
    7.
    8.
    // Enable XINT1,XINT2 and XINT3 in the PIE: Group 1,12 interrupt 4,5 & 1
    // Enable INT1 which is connected to WAKEINT:
       PieCtrlRegs.PIECTRL.bit.ENPIE = 1;          // Enable the PIE block
       PieCtrlRegs.PIEIER1.bit.INTx4 = 1;          // Enable PIE Group 1 INT4
       PieCtrlRegs.PIEIER1.bit.INTx5 = 1;          // Enable PIE Group 1 INT5
       PieCtrlRegs.PIEIER12.bit.INTx1 = 1;         // Enable PIE Group 12 INT1
       IER |= M_INT1;                              // Enable CPU INT1
       EINT;                                       // Enable Global Interrupts

    第7行应为:

    IER || M_INT1 | M_INT12; //启用CPU INT1和INT12 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢,XINT3工作正常!
    但如何在XINT3中制造XINT1和XINT2?

    设置XINT3的优先级高于XINT1和XINT2?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我通过在XINT3 ISR内重新启用XINT1和XINT2来使其正常工作