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.

[参考译文] CCS/TMS320F2.8027万:中断在我的自定义板中工作不正常

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/578793/ccs-tms320f28027-interrupt-is-not-working-well-in-my-custom-board

部件号:TMS320F2.8027万
主题:controlSUITE中讨论的其他部件

工具/软件:Code Composer Studio

hii all,

    我开始在CCS V6上使用C28x picolo F2.8027万自定义板,我在这里尝试启用外部中断,但只对ISR_interupt处理程序进行一次控制,如果我要再转到ISR一次,我必须重新启动控制器。即, 我意识到,上拉必须启用该特定引脚(此处为GPIO0)。  

    启用上拉寄存器后,当我将GPIO0引脚连接到3.3V源时,中断甚至不会产生一次,我正在使用controlSUITE的示例代码。

    下面是我的附加代码,

Void主(void)

InitSysCtrl();

色调;

InitPieCtrl();

IER = 0x0000;
IFR = 0x0000;

InitPieVectorTable();

EALLOW;
PieVectorTable.XINT1 =&XINT1_ISR;
EDIS

PieCtrlRegs.PIECTRL.bit.ENPIE =1;//启用PIE块
PieCtrlRegs.PIEIER1.bit.INTx4 =1;//启用pie gropu 1 INT4
IER || M_INT1;//启用CPU INT1
EINT;//启用全局中断

EALLOW;
GpioCtrlRegs.GPAPUD.bit.GPIO0 = 0;// GPIOPullup
GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 0;// GPIO
gpioCtrlRegs.GPADIR.bit.GPIO0 = 0;//输入
GpioCtrlRegs.GPAQSEL1.bit.GPIO0 = 0;// XINT1仅同步到SYSCLKOUT
EDIS;

EALLOW;
GpioIntRegs.GPIOXINT1SEL.bit.GPIOSEL = 0;// XINT1为GPIO0
EDIS;
XIntruptRegs.XINT1CR.bit.polarity = 0;//下降边缘中断
XIntruptRegs.XINT1CR.bit.enable =1;//启用XINT1

for (;;);

}

中断无效XINT1_ISR(void)

Xint1Count++;

PieCtrlRegs.PIEACG.ALL = PIEACK_GROUP1;
}

----------------------------------

请让我摆脱这个问题,  

提前感谢。

此致,

Narasimha

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

    您好,Narasimha,

    请注意,外部中断功能是边缘触发的(与级别触发相反)。  根据您显示的软件,在GPIO00转化为低电平之前,中断不会触发(这可能不会发生)。

    ===

    根据您尝试执行的操作,两个额外的注释可能会对您有所帮助:

    在外部中断内部,您可以读取引脚的值(通过查看GPADAT),并选择仅在GPIO恢复高电平时清除中断。  

    或者,如果您要查找的是来自外部源的电平触发中断,则Trip-Zone子模块的中断将为您提供一个很好的选择。


    谢谢!
    Brett

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

    如果选择下降边缘中断配置,则中断仅在GPIO线路由外部驱动为低电平时触发。

    从您的写的内容中,我了解到您正在将GPIO线路连接到3V3,这就是为什么不触发中断的原因。

    如果您通过电阻器将GPIO线路连接到接地,它将驱动引脚低电平并触发下降边缘中断。

    第二个中断将不会触发,直到断开接地路径并再次连接以产生下降边缘。 (3V3 -> 0V)。

    我没有检查数据表以查看您的设置是否正确,我相信行末的注释是正确的。

    希望这能有所帮助,

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

    hii all,

        我正在根据数据表将GPIO0配置为边缘触发中断  

    实际上,我的任务是为提升边缘和下降边缘生成中断,因为我保持极性= 3;

    在此之前,我尝试了上面的POST中的配置,但对于这两种配置(极性0和3),我也没有获得一次性中断(通过GPAPUD.Bit.GPIO0 =0在内部启用上拉)。

    在ISR处理程序中,是否需要禁用Inetrrupt之前?

    此致,

    Narasimha

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    否,您不必禁用中断即可发出ACK。 就像Brett建议的那样,您可以查看注册的GPADAT,看看处理器认为GPIO0处于什么状态。 如果错误地驱动GPIO线路,可能不会发生中断。

    例如,禁用上拉时,GPIO通常为0,如果您将外部3V3连接到引脚,它将转至1。

    启用上拉时,GPIO通常为1,如果您将外部GND (通过电阻器)连接到引脚,则会转至0。

    更改PIN状态时观察GPADAT寄存器将显示您的设置是否正确。

    例如,如果您已启用上拉并将3V3连接到外部引脚,则不会产生任何效果,因为默认状态为1。

    这应有助于确定中断检测或输入边缘生成是否存在问题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    hii all,

           多亏了所有的支持,我解决了我的问题,我刚刚移除了GPIO上拉禁用寄存器 ,并为 该GPIO提供了适当的资格认证,只 需使用 上升边缘和下降边缘运行我的代码,外部中断即可正常工作。

    谢谢,此致,

    Narsimha