void EXTI0_IRQHandler(void)
{
uint32_t tmpGPIONum = GPIO_GetPendingExtIntGPIONum(0);
if (g_gpioCallbackArray[0])
{
g_gpioCallbackArray[0](tmpGPIONum);
}
GPIO_ClearPendingExtInt(tmpGPIONum);
}
而gpioCallbackArray[X]中的内容,便是由配置注册而来。如下的注册函数。
int32_t GPIO_SetEventCallback(uint32_t gpioNum, const GPIO_EventCallback callback)
{
uint8_t callbackIndex = 0;
uint32_t tmpGPIOGroupInternalNum = gpioNum % GPIO_ONE_GROUP_NUM;
if (gpioNum > MAX_PIN_NUM)
{
return -1;
}
/* set gpio callback function pointer */
if (tmpGPIOGroupInternalNum > 9u)
{
callbackIndex = 6;
}
else if (tmpGPIOGroupInternalNum > 4u)
{
callbackIndex = 5;
}
else
{
callbackIndex = tmpGPIOGroupInternalNum;
}
g_gpioCallbackArray[callbackIndex] = callback;
return 0;
}
|