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.

[参考译文] AM6442:GPIO 组与引脚中断、使用 SysConfig 路由

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1452232/am6442-gpio-bank-vs-pin-interrupts-routing-with-sysconfig

器件型号:AM6442
主题中讨论的其他器件:SysConfigSK-AM64B

工具与软件:

您好!

我想知道 GPIO 组和引脚中断及其使用 SysConfig 的配置。

我成功调整了示例

C:\ti\mcu_plus_sdk_am64x_10_00_00_20\examples\drivers\gpio\gpio_input_interrupt

在 SK-AM64B 上运行(将用户开关 SW1的 IO 引脚更改为 GPIO1_59)。

使用 ROUTER7这会在 R5-0-0上生成 INT39、SysConfig 会在0x00A00020 处的 MAIN_GPIOMUX_INTROUTER0_CFG_INTR_ROUTER_CFG_INTR_MUXCNTL 寄存器中设置0x000100B7、即源183 (=B7) GPIO1组3。 示例被编程为组中断。

TI/MCU_PLUS_SDK_am64x_10_00_00_20/docs/api_guide_am64x/DRIVERS_GPIO_PAGE.html 解释了组和引脚 GPIO 中断、但不介绍如何在有或没有 SysConfig 的情况下配置路由。

我正在运行一个类似的示例、它使用 GPIO0_36、Router0 的0x00A00004被设置为0x000100C0 (192 = C0、GPIO bank2)。 它编程为引脚中断(路由器0为#32)、不使用

/*获取和清除组中断状态*/
IntrStatus = GPIO_getBankIntrStatus (gGpioBaseAddr、bankNum);
GPIO_clearBankIntrStatus (gGpioBaseAddr、bankNum、IntrStatus);

代码-应该_组中断是必需的(请参阅下面的代码、在 HTML 页面中进行了调整)。

我还可以(在 CCS 寄存器视图中)将路由器 MUXCNTL 寄存器 0x00A00004更改为0x00010024、将 GPIO 36引脚中断号更改为继续触发中断。

奇怪。

我的问题:

组和引脚 INTERRUPT _CONFIGURATION_与 MUXCNTL 寄存器设置之间是否有其他差异? 我没有找到任何。 (当然、16个引脚中的任何一个都由组触发、引脚仅触发一个。)

为什么我必须启用组中断才能获得引脚中断?

有必要清除组中断吗? 我没有看到它。

如何在 SysConfig 中配置引脚中断?

谢谢、此致

Frank

/*使用 ti_drivers_config.h 中的 GPIO 引脚宏*/
uint32_t gGpioBaseAddr = CONFIG_HSI_INT_BASE_ADDR;
uint32_t gGpioPinNum = CONFIG_HSI_INT_PIN;
uint32_t gGpioPinIntrNum = CONFIG_HSI_INT_INTR_NUM;

Hwip_Object ghsiHwiObject;

uint32_t hsi_intcnt = 0;


静态 void hsi_pinIsrFxn (void * args)

/*
*处理引脚中断-这是脉冲中断。 无需清除状态
*/
++hsi_intcnt;
}

void hsi_pin_interrupt_init (void)

int32_t retVal;
uint32_t pinNum = gGpioPinNum、bankNum;
HwiP_Params hwiPrms;

bankNum = GPIO_GET_Bank_INDEX (pinNum);

Board_gpioInit ();
/*中断设置*/
GPIO_setDirMode (gGpioBaseAddr、pinNum、GPIO_DIRECTION_INPUT);
GPIO_setTrigType (gGpioBaseAddr、pinNum、GPIO_TRIG_TYPE_RISE_EDGE);
GPIO_bankIntrEnable (gGpioBaseAddr、bankNum);

/*寄存器引脚中断*/
Hwip_Params_init (&hwiPrms);
hwiPrms.intNum = gGpioPinIntrNum;
hwiPrms.callback =&hsi_pinIsrFxn;
hwiPrms.args =(void *) pinNum;
retVal = Hwip_construction (&ghsiHwiObject、&hwiPrms);
if (SYSTEMP_SUCCESS!= RetVal)

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

    您好、Frank、

    感谢您的提问。

    组和引脚中断_configuration_与 MUXCNTL 寄存器设置是否有其他区别? 我没有找到任何。 (当然、16个引脚中的任何一个引脚都可触发组、引脚仅用于一个引脚。)

     当配置为组中断时、位于同一组中的所有 GPIO 引脚都将触发中断。  

    仅当特定 GPIO 引脚配置为引脚中断时、才能触发中断。

    haolong li 说:
    清除组中断的必要性何在? 我没有看到它。

    在 ISR 内部、我们使用中断状态寄存器来检查哪个引脚触发了中断。 如果你没有在 ISR 内清除状态寄存器、那么每次当你检查状态寄存器时、你会发现同一个引脚正在生成中断、而这个中断可能不为真。

    [quote userid="4914" url="~/support/processors-group/processors/f/processors-forum/1452232/am6442-gpio-bank-vs-pin-interrupts-routing-with-sysconfig 如何在 SysConfig 中配置引脚中断?

    SysConfig 当前不提供任何配置引脚中断的选项。 有关配置引脚中断的信息、请参阅  faq-sk-am62-how-to-configure-the-gpio-interrupt-on-am62x-in-mcu-sdk。 

    此致、

    Tushar

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

    尊敬的 Tushar:

    很高兴再次与您见面、感谢您的解释。

    我理解以下内容:

    设置 GPIO_BINTEN 和 GPIO_SET_RIS|FAL_TRIG*寄存器可将组中断和引脚中断发送到路由器、然后路由器选择转发到其中一个 CPU 的中断(根据 MUXCNTL 条目)。

    在清除 GPIO_INTSTAT*中的位方面、引脚和组中断之间的硬件没有区别。 执行清除操作是必要的、只有当使用组中断时、软件才能处理重复的旧中断。

    在其他 TI SOM 中、需要执行清除操作才能从硬件获得下一个中断。 但这里的情况并非如此。

    谢谢、此致

    Frank

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

    您好、Frank、

    关于清除 GPIO_INTSTAT*中的位的硬件引脚和组中断没有区别。 清除是必要的、只有软件才能处理在使用组中断时重复的旧中断。[/QUOT]

    是的、以上理解是正确的。

    此致、

    Tushar