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.

[参考译文] TMS320F28335:GPIO16_External 中断未工作

Guru**** 2480195 points
Other Parts Discussed in Thread: TMS320F28335, C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1433424/tms320f28335-gpio16_external-interrupt-is-not-working

器件型号:TMS320F28335
Thread 中讨论的其他器件: C2000WARE

工具与软件:

尊敬的团队:

我有 TMS320F28335、想要在 GPIO12、GPIO13和 GPIO16上配置外部中断 。

GPIO12和 GPIO13正常工作、但 GPIO16不工作。

下面是我的配置、请告诉我缺少什么配置。

此致、

Dipak

/**
 * @brief: External GPIO Interrupt ISR
 * @param[in]
 * @param[out]
 */
__interrupt void vGpioIntr1ISR(void)
{
    if(++u16Int1counter>2000)
    {
        GpioDataRegs.GPBTOGGLE.bit.GPIO36 = 1;
        u16Int1counter= 0;
    }
    PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
}

/**
 * @brief: External GPIO Interrupt ISR
 * @param[in]
 * @param[out]
 */
__interrupt void vGpioIntr2ISR(void)
{
    if(++u16Int2counter>2000)
    {
        GpioDataRegs.GPBTOGGLE.bit.GPIO36 = 1;
        u16Int2counter= 0;
    }

    PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
}
/**
 * @brief: External GPIO Interrupt ISR
 * @param[in]
 * @param[out]
 */
__interrupt void vGpioIntr3ISR(void)
{
    if(++u16Int3counter>100)
    {
        GpioDataRegs.GPBTOGGLE.bit.GPIO50 = 1;
        u16Int3counter= 0;
    }

    PieCtrlRegs.PIEACK.all = PIEACK_GROUP12;
}




void vInitXInterruptConfig(void)
{
    //============================================= External Interrupt ==============================================================================================
    // External Interuupt
    //dsp_pwm_rx1 : GPIO12
    //dsp_pwm_rx2:  GPIO13
    //dsp_pwm_rx3:  GPIO16


    EALLOW;
    PieVectTable.XINT1 = &vGpioIntr1ISR;// register ISR in interrupt vector table
    PieVectTable.XINT2 = &vGpioIntr2ISR;
    PieVectTable.XINT3 = &vGpioIntr3ISR;
    EDIS;

    PieCtrlRegs.PIECTRL.bit.ENPIE  = 1;// Enable PIE block
    PieCtrlRegs.PIEIER1.bit.INTx4  = 1;// Enable PIE Group 1 INT4
    PieCtrlRegs.PIEIER1.bit.INTx5  = 1;// Enable PIE Group 1 INT5
    PieCtrlRegs.PIEIER1.bit.INTx6 = 1;// Enable PIE Group 1 INT6
    IER |= M_INT1;                    // Enable CPU interrupt 1
    EINT;                             // Enable Global Interrupt

    //
    // GPIO12, GPIO13 and GPIO16 are inputs
    //
    EALLOW;
    GpioCtrlRegs.GPAMUX1.bit.GPIO12 = 0;
    GpioCtrlRegs.GPADIR.bit.GPIO12 = 0;
    GpioCtrlRegs.GPAQSEL1.bit.GPIO12 = 0;         //Xint1 Synch to SYSCLKOUT only

    GpioCtrlRegs.GPAMUX1.bit.GPIO13 = 0;
    GpioCtrlRegs.GPADIR.bit.GPIO13 = 0;
    GpioCtrlRegs.GPAQSEL1.bit.GPIO13 = 0;


    GpioCtrlRegs.GPAMUX2.bit.GPIO16 = 0;
    GpioCtrlRegs.GPADIR.bit.GPIO16 = 0;
    GpioCtrlRegs.GPAQSEL2.bit.GPIO16 = 0;

    //
    // Each sampling window is 510*SYSCLKOUT
    //
    GpioCtrlRegs.GPACTRL.bit.QUALPRD0 = QUAL_PERIOD_CONFIG;//Each Sample window is 510*SYSCLKOUT
    EDIS;

    EALLOW;

    GpioIntRegs.GPIOXINT1SEL.bit.GPIOSEL = 12;      //tag XINT1 interrupt with GPIO12
    GpioIntRegs.GPIOXINT2SEL.bit.GPIOSEL = 13;      //tag XINT2 interrupt with GPIO13
    GpioIntRegs.GPIOXINT3SEL.bit.GPIOSEL = 16;      //tag XINT3 interrupt with GPIO16
    EDIS;

    XIntruptRegs.XINT1CR.bit.POLARITY = 1;//Detect interrupt on rising edge of GPIO12
    XIntruptRegs.XINT2CR.bit.POLARITY = 1;//Detect interrupt on rising edge of GPIO13
    XIntruptRegs.XINT3CR.bit.POLARITY = 1;//Detect interrupt on rising edge of GPIO16

    XIntruptRegs.XINT1CR.bit.ENABLE = 1;  //Enable XINT1
    XIntruptRegs.XINT2CR.bit.ENABLE = 1;  //Enable XINT2
    XIntruptRegs.XINT3CR.bit.ENABLE = 1;  //Enable XINT3

}

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

    尊敬的 Vishal:

    请查看 c2000ware 示例: Example_2833xExternalInterrupt 以获取参考代码

    谢谢

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

    Prarthan、您好!

    感谢您的答复!

    我已经回顾了这个示例并成功实现了 GPIO12和 GPIO13的中断、它们运行正常。

    但是、我会遇到 GPIO16的中断问题。 如果您能查看我之前提供的代码、并告诉我是否存在配置错误或我是否可能遗漏了内容、我将不胜感激。

    感谢您的帮助。

    此致、
    Dipak

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

    尊敬的 Dipak:

    配置看起来还可以、除了:QUALPRD0只用于 GPIO0-7、而使用的是 GPIO12、13和16。

     GpioCtrlRegs.GPACTRL.bit.QUALPRD0 = QUAL_PERIOD_CONFIG;

    您能用 GPIO12或 GPIO13尝试使用 XINT 吗?看看这是否适合您。
    然后、你还可以分配 GPIO16 XINT1、看看这是否对你有用

    谢谢

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

    您好、普拉坦:

    我很困惑、能否请告诉我 GPIO12、13和16的代码[GPIO12和13正常工作、但16不工作-我已经发送了代码、请看一下]。

    -Dipak

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

    您好、普拉坦

    您能验证一下我的逻辑吗?您能给我分享同样的代码吗?

    -Dipak

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

    尊敬的 Dipak:

    我需要一些时间才能找到电路板并检查代码。
    请在一周结束前回复。

    谢谢

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

    Prarthan、您好!

    好的,谢谢你的答复!

    -Dipak

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

    Prarthan、您好!

    有什么更新对我来说吗?

    -迪帕克

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

    Prarthan、您好!

    有什么更新对我来说吗?

    -Dipak

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

    大家好、团队成员:

    您能否确认是否可以解决上述问题?

    这是一段很长的时间,我仍然没有收到答案。 请尽早提供更新。

    此致、
    Dipak

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

    您好、普拉坦:

    对延迟响应深表歉意。

    我很不舒服,不能更早地回复。

    我已经查看了代码、你建议可以为外部中断3至7配置 GPIO 32至63、对吗?

    但是、在我的电路板设计中、我使用了 GPIO 16来实现外部中断。 根据此设置、为实现此目的配置 GPIO 16的理想方法是什么?

    此致、
    Dipak

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    GPIO 32到63可以配置为外部中断3到7、正确吗?

    这就是 MCU 的设计方式

    [报价 userid="512045" url="~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1433424/tms320f28335-gpio16_external-interrupt-is-not-working/5613828 #5613828"]我使用 GPIO 16作为外部中断。

    您可以仅将 GPIO16与 XINT1-2实例配合使用

    谢谢