- 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;
- }
|