主题中讨论的其他器件:SysConfig、 SK-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
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);
}
}