다음을 통해 공유


GPIO 인터럽트 마스크

인터럽트 입력으로 구성된 GPIO(범용 I/O) 핀은 사용 및 사용 안 함 외에도 마스킹 및 마스크 해제할 수 있습니다.

주변 장치에서 수준 트리거 인터럽트는 활성화되고 활성 상태이지만 커널 트랩 처리기가 디바이스의 ISR(인터럽트 서비스 루틴)을 즉시 실행하여 인터럽트 지우기를 취소할 수 없는 경우 처리기는 GPIO 핀에서 인터럽트 마스크를 마스킹하여 핀이 반복적으로 더 많은 인터럽트 발생을 발생시키는 것을 방지합니다. 나중에 ISR이 실행되고 인터럽트 지우기가 끝나면 인터럽트 마스크를 안전하게 해제할 수 있습니다.

인터럽트를 마스킹해도 인터럽트를 지우거나 사용하지 않도록 설정할 수 없습니다. GPIO 인터럽트를 사용하도록 설정하고 활성 및 마스킹한 경우 이 인터럽트를 마스킹 해제하면 GPIO 컨트롤러 디바이스가 프로세서에 인터럽트 요청을 알릴 수 있습니다.

GPIO 인터럽트 마스크 비트는 GPIO 인터럽트 사용 안 함 동안에는 영향을 주지 않습니다. CLIENT_EnableInterrupt 콜백 함수는 인터럽트 마스크 비트를 0으로 설정합니다. 즉, 인터럽트는 사용하도록 설정된 후 처음에 마스크가 해제됩니다.

GPIO 인터럽트 핀 마스킹과 비활성화의 중요한 차이점은 마스킹이 핀의 인터럽트 구성 설정을 유지하는 반면 핀을 사용하지 않도록 설정하지 않는다는 것입니다. GPIO 인터럽트 핀은 마스킹되지만 이전에 프로그래밍된 인터럽트 모드(에지 트리거 또는 수준 트리거), 극성(활성-높음, 활성-낮음 또는 활성-둘 다) 및 디버그 설정을 유지합니다. 이러한 설정은 인터럽트 마스크가 해제되는 즉시 다시 적용됩니다. 그러나 인터럽트를 사용하지 않도록 설정하면 핀의 인터럽트 구성 설정이 모두 손실됩니다. 핀을 사용하도록 설정한 후 필요한 인터럽트 구성 설정으로 다시 프로그래밍해야 합니다.

일부 GPIO 컨트롤러는 인터럽트 사용 레지스터와 분리되고 별개의 인터럽트 마스크 레지스터를 하드웨어에서 구현합니다.

그러나 다른 GPIO 컨트롤러는 인터럽트 마스크와 인터럽트 사용 함수를 결합하는 단일 하드웨어 레지스터 집합을 제공합니다. 이러한 컨트롤러의 드라이버는 소프트웨어에서 별도의 인터럽트 마스크 및 인터럽트 사용 레지스터를 에뮬레이트합니다. 이렇게 하기 위해 이러한 드라이버는 인터럽트 사용 비트 및 인터럽트 마스크 비트의 논리적 상태를 추적하고 하드웨어 레지스터의 해당 비트를 조작하여 각 GPIO 인터럽트에서 결합된 논리적 인터럽트 사용 및 인터럽트 마스크 비트의 동작을 정확하게 반영합니다.