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.

[参考译文] TMS320F2.8377万S:GPIO -> Xint4:启用中断前清除标志?

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/637405/tms320f28377s-gpio---xint4-clear-flag-before-enable-interrupt

部件号:TMS320F2.8377万S
主题中讨论的其他部件:controlSUITEC2000WARE

你好

我需要检测输入端的上升/下降边缘,但只能在我决定时才能检测。

所以我使用的是通过XINT4映射到输入X条(input13)到PIE的GPO。

我进行了以下配置:

初始化时间:

GPIO_SetupXINT4Gpio (DV_GPIO _TOR_IN_CAPT_1_ID_PIN);
/* ISR映射并启用*/
中断注册(INT_XINT4,CT_Tor_iCapture1ISR);

 
/*首先:配置XINT4 */
XintRegs.XINT4CR.Bit.Polarity
= 1;/*上升沿中断(如果输入反转,则下降*/
/*第二:启用XINT4 (极性位必须在启用位之前设置)*/
XintRegs.XINT4CR.bit.enable
= 1;/*启用XINT4 */

然后在产品生命中,当我想要捕获输入上升沿时,我做了以下工作:

中断启用(INT_XINT4);
XintRegs.XINT4CR.bit.enable
= 1

要在我不想捕获输入时禁用捕获,请执行以下操作:

XintRegs.XINT4CR.bit.enable = 0
中断_禁用(INT_XINT4);

 

这似乎工作正常。 我有一个问题:

如果禁用中断期间出现上升边缘,则在启用中断后立即调用中断例程。 在我的情况下,这种行为是坏的,我只需要在启用中断时发生输入上升边缘时调用中断例程,如果禁用期间发生上升,则不需要调用启用功能上的例程...

如何清除中断标志XINT4??? 我没有找到它!?

 

谢谢

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

    我正在尝试查找您正在使用的功能,以便查看正在设置哪些寄存器。 您正在使用哪个软件包? controlSUITE? C2000Ware? 还有别的吗?

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

    您好,

    我正在使用C2000Ware v 1.0 .1.0

    谢谢

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

    此帖子没有回复?
    此致,
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在启用中断之前,是否已尝试清除PIE的IFR寄存器中的特定标志?

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

    否,请勿尝试,
    µC这是唯一的方法,我将对其进行测试,但这并不是很有效,因为参考手册§2.4。4.3 指示从不清除此位,但让我们中断。 (通过虚拟ISR例程)
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    GIR,

    执行此操作的另一种方法是重新分配XBAR引脚,而不是禁用中断。 如果您有任何未使用或未绑定的PIN (使用BGA以外的软件包),您可以将XBAR分配给这些PIN。 如果不这样做,则可以将XBAR分配给不存在的GPIO (即没有GPIO300,因此写入300)。 如果您选择此路线,请告诉我,以便我验证设计中的值始终保持不变。

    当您想要"激活"捕获时,只需将XBAR重新分配到正确的PIN。

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

    我相信您不是在清除包含XINT的指定中断组的IFR寄存器。

    在您的情况下,您使用的是XINT4。

    使用Driverlib,这是启用和禁用的顺序,

    //启用XINT4
    interrup_disableMaster();
    中断_禁用(INT_XINT4);
    中断注册(INT_XINT4,Xint4Handler);
    中断启用(INT_XINT4);
    interrupt_enableMaster();
    
    //禁用XINT4
    interrup_disableMaster();
    中断_禁用(INT_XINT4);
    InterrupT_unregister (INT_XINT4);
    
    //为XINT启用GPIO
    GPIO _setInterruptPin (引脚编号,(GPIO _ExternalIntNum) GPIO _INT_XINT4);
    GPIO _启用中断((GPIO_ExternalIntNum)GPIO _ INT_XINT4);
    GPIO_setInterruptType ((GPIO _外部国际号码) GPIO _ INT_XINT4,GPIO _ INT_TYPE_上升_边缘);
    
    //禁用XINT的GPIO
    GPIO _禁用中断((GPIO_ExternalIntNum)GPIO _ INT_XINT4);
    

    下面是我认为你所缺少的。

    在InterrupT_disable函数中,该特定中断的中断组被挂载和清除(PIE ACK和IFR)。

    interrupt_clearIFR (groupmask);
    
    //确认任何中断
    HWREGH (PIECTRL_BASE + PIE_O_ACK)=组掩码;
    
    其中组掩码为
    ,interruptNumber = INT_XINT4;
    intGroup =((uint16_t)(interruptNumber & 0xFF00U)>> 8U)- 1U;
    组掩码= 1U< intGroup; 

    请告诉我这是否有帮助。

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

    你好

    要禁用中断,我调用以下命令:

    GPIO _禁用中断((GPIO_ExternalIntNum)GPIO _ INT_XINT4);
    中断_禁用(INT_XINT4); 

    然后,IFR寄存器被完全清除。

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

    您好,我认为问题已解决?

     Vivek Singh

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

    您好,

    我认为问题没有解决。

    我必须重试,但我们要求我清除IFR寄存器以解决我的问题,我的代码已经按照指示清除了它。

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

    您是否尝试了我上面描述的XBAR选项?

    此致,
    克里斯
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,
    否,尚未尝试
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的回复。 请尝试一下,并告知我们结果。 我们认为这将避免这一问题。