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:当发出触发信号时、外部中断功能不起作用

Guru**** 2525310 points
Other Parts Discussed in Thread: TMS320F28335

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1558284/tms320f28335-external-interrupt-function-is-not-working-when-trigger-is-given

器件型号:TMS320F28335


工具/软件:

您好、

我编写了一个基本代码来切换 GPIO(本例中为 GPIO47)、并在每次 GPIO42 更改(用作触发器)时读取中断调用计数。 但是、当有触发信号时、GPIO47 和 COUNTER 变量都不会改变。 我已使用可用的 TI 示例进行了检查、使用了相同的代码、但错误仍然存在。
控制器:TMS320F28335
CCS 版本:12.8


请帮助解决此问题。

#include "DSP28x_Project.h"

// ISR Prototype
__interrupt void xint1_isr(void);

volatile Uint32 Xint1Count = 0;

void main(void)
{
    // Step 1: Initialize System Control
    InitSysCtrl();

    // Step 2: Initialize GPIO
    InitGpio();

    // Configure GPIO42 as input (trigger source)
    EALLOW;
    GpioCtrlRegs.GPBMUX1.bit.GPIO42 = 0;  // GPIO function
    GpioCtrlRegs.GPBDIR.bit.GPIO42 = 0;   // Input
    GpioCtrlRegs.GPBQSEL1.bit.GPIO42 = 0; // Sync to SYSCLK

    // Configure GPIO47 as output (toggle pin)
    GpioCtrlRegs.GPBMUX1.bit.GPIO47 = 0;  // GPIO function
    GpioCtrlRegs.GPBDIR.bit.GPIO47 = 1;   // Output
    EDIS;

    // Step 3: Configure External Interrupt XINT1
    EALLOW;
    GpioIntRegs.GPIOXINT1SEL.bit.GPIOSEL = 42; // Map GPIO42 -> XINT1
    EDIS;

    XIntruptRegs.XINT1CR.bit.POLARITY = 3;  // 1 = Rising edge, 0 = Falling edge, 3 = Both edges
    XIntruptRegs.XINT1CR.bit.ENABLE   = 1;  // Enable XINT1

    // Step 4: Enable PIE & CPU Interrupts
    InitPieCtrl();
    IER = 0x0000;
    IFR = 0x0000;

    InitPieVectTable();

    EALLOW;
    PieVectTable.XINT1 = &xint1_isr;   // Hook ISR
    EDIS;

    PieCtrlRegs.PIECTRL.bit.ENPIE = 1;        // Enable PIE
    PieCtrlRegs.PIEIER1.bit.INTx4 = 1;        // Enable XINT1 in PIE group 1
    IER |= M_INT1;                            // Enable group 1 interrupts
    EINT;                                     // Enable Global INTM
    ERTM;                                     // Enable DBGM

    // Step 5: Idle loop
    for(;;)
    {
        asm(" NOP");
    }
}

// Interrupt Service Routine for GPIO42 -> toggle GPIO47
__interrupt void xint1_isr(void)
{
    // Toggle GPIO47
    GpioDataRegs.GPBTOGGLE.bit.GPIO47 = 1;
    Xint1Count++;
    // Acknowledge interrupt to receive more
    PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
}


此致、  
Priyadarshini N M

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

    您好:  

    专家将离开办公室直至 9/2/25。  

    此致、

    Carlos

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

    GPIO32 至 GPIO63 范围内的 GPIO 引脚可配置为在 XINT3 至 XINT7 上触发中断。 因此、对于 GPIO42、您需要选择其中一个外部中断线路(例如 XINT3)。