Other Parts Discussed in Thread: SYSCONFIG
Thread 中讨论的其他器件:SysConfig
你(们)好
如何在 AM263x 中为各个 GPIO 引脚配置 GPIO 中断。
它与 SDK 中现有的 GPIO 组中断配置示例有何不同。
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.
Other Parts Discussed in Thread: SYSCONFIG
你(们)好
如何在 AM263x 中为各个 GPIO 引脚配置 GPIO 中断。
它与 SDK 中现有的 GPIO 组中断配置示例有何不同。
AM263x 中的 GPIO 引脚:
AM263x 具有139个 GPIO 引脚
该器件具有四个 GPIO 模块实例、每个 R5FSS 处理器内核有一个专用实例
GPIO 模块最多能够支持144个专用引脚。 AM263x 实现了139引脚。
AM263x 中的 GPIO 中断:
关于中断、
从 GPIO 模块中、180个事件/中断可作为 GPIO 中断 XBAR 的输入、如下图所示。
180个输入包含独立的 GPIO 中断(4个 GPIO 模块的144个复用)以及4个 GPIO 模块的9个组中断
| 中断数量 | |
| 单个 GPIO 引脚中断 | 144. |
| 针对实例0的 GPIO 组中断 | 9. |
| 针对实例1的 GPIO 组中断 | 9. |
| 实例2的 GPIO 组中断 | 9. |
| 实例3的 GPIO 组中断 | 9. |
| 总输入 | 180 |
下图来自 AM263 TRM -"图10-4. GPIO XBAR 中断路由器集成图"

GPIO 中断路由至 R50_0:
组中断的 GPIO 配置:
在当前 SDK 8.5中、我们有 使用 GPIO 组中断的 GPIO_INPUT_INTERRUPT 示例。 以下参考资料取自 GPIO 应用指南- https://software-dl.ti.com/mcu-plus-sdk/esd/AM263X/latest/exports/docs/api_guide_am263x/DRIVERS_GPIO_PAGE.html
在该示例中、转到 SYSCFG -> GPIO INT XBAR 选项。

为 HWIP 配置组中断时、可参考以下代码:
static void GPIO_bankIsrFxn(void *args)
{
uint32_t pinNum = (uint32_t) args, bankNum;
uint32_t intrStatus, pinMask = GPIO_GET_BANK_BIT_MASK(pinNum);
bankNum = GPIO_GET_BANK_INDEX(pinNum);
intrStatus = GPIO_getBankIntrStatus(gGpioBaseAddr, bankNum);
GPIO_clearBankIntrStatus(gGpioBaseAddr, bankNum, intrStatus);
if(intrStatus & pinMask)
{
/*
* Handle all the expected pin interrupts within a bank using intrStatus flag
*/
}
}
void gpio_bank_interrupt_init(void)
{
int32_t retVal;
uint32_t pinNum = gGpioPinNum, bankNum;
HwiP_Params hwiPrms;
bankNum = GPIO_GET_BANK_INDEX(pinNum);
/* Interrupt setup */
GPIO_setDirMode(gGpioBaseAddr, pinNum, GPIO_DIRECTION_INPUT);
GPIO_setTrigType(gGpioBaseAddr, pinNum, GPIO_TRIG_TYPE_RISE_EDGE);
GPIO_bankIntrEnable(gGpioBaseAddr, bankNum);
/* Register bank interrupt */
HwiP_Params_init(&hwiPrms);
hwiPrms.intNum = gGpioBankIntrNum;
hwiPrms.callback = &GPIO_bankIsrFxn;
hwiPrms.args = (void *) pinNum;
retVal = HwiP_construct(&gGpioHwiObject, &hwiPrms);
if(SystemP_SUCCESS != retVal)
{
DebugP_assert(FALSE);
}
}
void gpio_bank_interrupt_deinit(void)
{
uint32_t pinNum = gGpioPinNum, bankNum, intrStatus;
bankNum = GPIO_GET_BANK_INDEX(pinNum);
/* Interrupt disable and clear any pending interrupts */
GPIO_bankIntrDisable(gGpioBaseAddr, bankNum);
GPIO_setTrigType(gGpioBaseAddr, pinNum, GPIO_TRIG_TYPE_NONE);
intrStatus = GPIO_getBankIntrStatus(gGpioBaseAddr, bankNum);
GPIO_clearBankIntrStatus(gGpioBaseAddr, bankNum, intrStatus);
/* Unregister interrupt */
HwiP_destruct(&gGpioHwiObject);
}
针对每个引脚中断的 GPIO 配置:
要使用单独的 GPIO 中断、请将 XBAR 输出选项更改为您所需的相应 GPIO_MUX 引脚。 在这里、忽略此上下文中的"_MUX"、这仅指单独的 GPIO 引脚。

为 HWIP 配置 PER 引脚中断时、可参考以下代码:
static void GPIO_pinIsrFxn(void *args)
{
/*
* Handle pin interrupt - This is pulse interrupt. No need to clear status
*/
}
void gpio_pin_interrupt_init(void)
{
int32_t retVal;
uint32_t pinNum = gGpioPinNum, bankNum;
HwiP_Params hwiPrms;
bankNum = GPIO_GET_BANK_INDEX(pinNum);
/* Interrupt setup */
GPIO_setDirMode(gGpioBaseAddr, pinNum, GPIO_DIRECTION_INPUT);
GPIO_setTrigType(gGpioBaseAddr, pinNum, GPIO_TRIG_TYPE_RISE_EDGE);
GPIO_bankIntrEnable(gGpioBaseAddr, bankNum);
/* Register pin interrupt */
HwiP_Params_init(&hwiPrms);
hwiPrms.intNum = gGpioPinIntrNum;
hwiPrms.callback = &GPIO_pinIsrFxn;
hwiPrms.args = (void *) pinNum;
retVal = HwiP_construct(&gGpioHwiObject, &hwiPrms);
if(SystemP_SUCCESS != retVal)
{
DebugP_assert(FALSE);
}
}
void gpio_pin_interrupt_deinit(void)
{
uint32_t pinNum = gGpioPinNum, bankNum;
bankNum = GPIO_GET_BANK_INDEX(pinNum);
/* Interrupt disable and clear any pending interrupts */
GPIO_bankIntrDisable(gGpioBaseAddr, bankNum);
GPIO_setTrigType(gGpioBaseAddr, pinNum, GPIO_TRIG_TYPE_NONE);
GPIO_clearIntrStatus(gGpioBaseAddr, pinNum);
/* Unregister interrupt */
HwiP_destruct(&gGpioHwiObject);
}
在确认和检查单个和组 GPIO 中断的中断状态时、可以使用以下 API:
| GPIO 组 | 各个 GPIO |
| GPIO_getBankIntStatus | GPIO_IntgetStatus |
| GPIO_clearBankIntStatus | GPIO_IntclearStatus |
谢谢、此致
Sri Vidya