/ / Sysfs interrupções acionadas por nível GPIO do Sysfs - c, linux, gpio, sysfs

Sysfs GPIO - interrupções acionadas por nível - c, linux, gpio, sysfs

Eu sou um novato tentando obter interrupções de nível desencadeada em uma placa Linux embutida. Eu estou usando poll () para aguardar o evento de interrupção. Eu fui bem sucedido em obter interrupções acionadas por borda.

Como posso obter interrupções acionadas por nível? O que eu definir a borda para?

Respostas:

1 para resposta № 1

A queda ou crescente transição desencadeiainterrupção acionada por borda. Embora o polling seja uma opção para lidar com essas interrupções, para salvar ciclos de CPU, crie um thread que pode ser programado pelo kernel para dormir até que a interrupção aconteça, e acorde quando a interrupção acontecer. Desta forma, o programa principal não fica bloqueado no polling.

A linha de interrupção está em um nível alto ou baixointerrupção acionada por nível. O conceito de borda não se aplica à interrupção acionada por nível. Aqui a CPU deve varrer os dispositivos para encontrar quem acionou a interrupção. Uma vez que o dispositivo é atendido, ele continuará a verificar novamente o status da linha de interrupção para outros dispositivos que possam precisar do serviço (compartilhamento de interrupção). Se isso não for imediatamente Acked (limpo / manipulado), o sistema pode entrar em um estado suspenso devido a chamadas repetidas / contínuas de interrupção da atenção do manipulador. Ou seja, o dispositivo externo deve declarar o sinal IRQ até que a interrupção pendente seja liberada pelo software em termos de gravação no registro do dispositivo. Se muitos dispositivos tiverem acionado o sinal de IRQ, o nível alto ou baixo estará presente até que todos os drivers de dispositivo tenham atendido seus respectivos dispositivos. Então, isso deve ser tratado imediatamente.