Interrupções primárias e secundárias

A manipulação de interrupção do GPIO é inerentemente um processo de dois estágios. A interrupção do controlador de E/S (GPIO) de uso geral, que faz com que a ISR (extensão de estrutura GPIO) interrompa a rotina de serviço (ISR) seja executada, é chamada de interrupção primária. Esse ISR mapeia o pino de GPIO de interrupção para uma GSI (interrupção do sistema global) e passa esse GSI para a camada de abstração de hardware (HAL). O HAL gera uma interrupção secundária para executar um segundo ISR que está logicamente conectado ao pino gpio por meio desse GSI. Esse processo é mostrado no diagrama na Visão geral do suporte ao driver gpio.

O GpioClx implementa um ISR para atender às solicitações de interrupção que o controlador GPIO recebe por meio de pinos GPIO configurados como entradas de interrupção. Quando um dispositivo periférico declara uma interrupção em um pino GPIO e a interrupção é habilitada e desmascarada no controlador GPIO, o hardware do controlador GPIO declara uma interrupção no processador. Em resposta a essa interrupção, o ISR em GpioClx consulta o controlador GPIO para identificar o pino gpio que gerou a interrupção e, em seguida, determina qual GSI é atribuída a esse pino. O ISR do GpioClx passa esse GSI para o HAL e o HAL chama o ISR que está logicamente conectado ao GSI.

Normalmente, esse segundo ISR pertence ao driver do dispositivo periférico que afirmou a interrupção no pino gpio. Para obter informações sobre como um driver de dispositivo periférico conecta logicamente seu ISR a um pino de interrupção gpio, consulte Recursos de interrupção baseados em GPIO.