Compartilhar via


Máscaras de interrupção gpio

Os pinos de GPIO (E/S de uso geral) configurados como entradas de interrupção podem ser mascarados e desmascarados, além de serem habilitados e desabilitados.

Se uma interrupção disparada por nível de um dispositivo periférico estiver habilitada e ativa, mas o manipulador de interceptação de kernel não puder executar imediatamente a ISR (rotina de serviço de interrupção) do dispositivo para limpar a interrupção, o manipulador mascara a interrupção no pino gpio para evitar que o pino cause repetidamente mais interrupções. Posteriormente, depois que o ISR for executado e limpar a interrupção, a interrupção poderá ser desmascarada com segurança.

Mascarar uma interrupção não limpa nem desabilitar a interrupção. Se uma interrupção GPIO estiver habilitada, ativa e mascarada, desmascarar essa interrupção fará com que o dispositivo controlador GPIO sinalize uma solicitação de interrupção para o processador.

Um bit de máscara de interrupção gpio não tem efeito enquanto a interrupção gpio está desabilitada. A função de retorno de chamada CLIENT_EnableInterrupt define o bit de máscara para a interrupção como zero; ou seja, a interrupção é inicialmente desmascarada depois de habilitada.

Uma distinção importante entre mascarar e desabilitar um pino de interrupção gpio é que mascarar preserva as definições de configuração de interrupção do pino, enquanto desabilitar o pino não. Embora um pino de interrupção gpio seja mascarado, ele mantém seu modo de interrupção programado anteriormente (disparado por borda ou disparado em nível), polaridade (ativo-alto, ativo-baixo ou ativo-ambos) e configurações de debounce. Essas configurações entrarão em vigor novamente assim que a interrupção for desmascarada. No entanto, quando uma interrupção é desabilitada, todas as definições de configuração de interrupção do pino são perdidas. Depois que o pino estiver habilitado, ele deverá ser programado novamente com as definições de configuração de interrupção necessárias.

Alguns controladores GPIO implementam, em hardware, registros de máscara de interrupção separados e distintos dos registros de habilitação de interrupção.

No entanto, outros controladores GPIO fornecem um único conjunto de registros de hardware que combinam as funções interrupt-mask e interrupt-enable. Os drivers desses controladores emulam registros separados de máscara de interrupção e habilitação de interrupção no software. Para fazer isso, esses drivers rastreiam os estados lógicos dos bits habilitados para interrupção e bits de máscara de interrupção e manipulam os bits correspondentes no registro de hardware para refletir com precisão o comportamento dos bits combinados lógicos de habilitação de interrupção e máscara de interrupção para cada interrupção gpio.