기본적인 질문을 중단. 내가 인터럽트 라인을 활성화하면 그 시간 동안 발생한 보류중인 인터럽트를 받았습니다.인터럽트 처리는 내가 주변 장치가 인터럽트를 보내는이 시간 동안, 주변의 인터럽트 라인을 비활성화하고 일부 처리를 할 리눅스 내 드라이버에서 <p></p>를 인터럽트 처리에 대한
이 정확한 이해가 무엇입니까?
예인 경우 인터럽트 비활성화 기간 동안 발생한 인터럽트를 어떻게 버릴 수 있습니까?
일부 지연을 사용하여 Linux API를 찾거나이를 수행 할 수있는 방법을 찾고 있습니다.
인터럽트를 활성화하기 전에 다음을 설정할 수 있습니다. desc = irq_to_desc (client-> irq); desc-> istate & = ~ IRQS_PENDING; 및 인터럽트 줄을 사용하면 보류중인 모든 인터럽트를 지우지 만 코드에서는 이러한 변수를 수정해서는 안됩니다.
감사합니다
에 인터럽트를 그리고 내가 이제까지 할 합리적인 일이 무시 생각하지 않습니다. 회선을 비활성화하고 장치에서 이벤트를 읽은 다음 회선을 다시 활성화합니다. 회선이 비활성화되어있는 동안 인터럽트가 도착하면 트리거 한 이벤트를 보았을 수도 있지만 그렇지 않은 경우가있을 수 있습니다. 따라서 여러분은 그것을 무시해서는 안됩니다. 처리되지 않은 이벤트가 다시 있는지 확인해야합니다. –
__enable_irq 함수를 검사하면 check_irq_resend (desc, irq)를 호출합니다. 보류중인 인터럽트를 다시 보냅니다. – shunty
글쎄요, 그렇습니다. IRQ가 사용되지 않는 동안 문제가 발생하더라도 여전히 처리해야하기 때문입니다. 그렇지 않은 경우, 원인이 된 이벤트를 놓칠 수 있습니다. –