2014-11-03 2 views
1

저는 임베디드 리눅스 보드에서 레벨 트리거 인터럽트를 얻으려고 애쓰는 초보자입니다. 인터럽트 이벤트를 기다리는 데 poll()을 사용하고 있습니다. 나는 edge triggered interrupt를 얻는데 성공했다.Sysfs GPIO 레벨 트리거 인터럽트

수준 트리거 인터럽트는 어떻게 얻을 수 있습니까? 가장자리를 어떻게 설정합니까?

+0

나는 당신이 원하는 것을 정확하게 이해했는지 확신 할 수 없다. 상승 및 하락 이벤트에 대한 방해를 원하십니까? –

+2

@ MicheleD'Amico : 그는 레벨 트리거 인터럽트를 원합니다. "수준 유발"이 무엇을 의미하는지 모른다면 Google을 사용하십시오. 이는 잘 정의 된 프로그래밍 용어입니다. 본질적으로 그는 특정 라인의 레벨이 낮거나 높은 경우 (구성에 따라) 인터럽트 이벤트를 연속적으로 얻고 싶습니다. – datenwolf

+1

무엇인지는 알지만 gpio sysfs에는 실제로 적용 할 수 없기 때문에 확실하지 않았습니다. gpio sysfs가 사용자 공간에 그런 것을 제공하지 않기 때문에 (그리고 IMHO가 제공하지 않을 수도 있기 때문에) 원하는 경우 더 높은 수준에서 작성해야합니다. –

답변

1

상승 또는 하강 전환은 에지 트리거 인터럽트를 트리거합니다. 폴링은 이러한 인터럽트를 처리하는 옵션이지만 CPU주기를 절약하기 위해 인터럽트가 발생할 때까지 커널에서 예약 할 수있는 스레드를 생성하고 인터럽트가 발생할 때 깨어납니다. 이렇게하면 주 프로그램이 폴링에 잠기지 않습니다.

인터럽트 라인은 레벨 트리거 인터럽트를 위해 하이 또는 로우 레벨에있다. 에지 개념은 레벨 트리거 인터럽트에는 적용되지 않습니다. 여기서 CPU는 장치를 검색하여 인터럽트를 트리거 한 장치를 찾습니다. 일단 장치가 서비스되면 서비스를 필요로하는 다른 장치 (인터럽트 공유)에 대한 인터럽트 회선 상태를 계속 확인합니다. 이것이 즉시 승인 (해제/처리)되지 않으면 시스템은 인터럽트 처리기주의를 반복적/연속적으로 호출하여 정지 상태가 될 수 있습니다. 즉, 디바이스 레지스터에 기록하는 관점에서 보류중인 인터럽트가 소프트웨어에 의해 클리어 될 때까지 외부 디바이스는 IRQ 신호를 어서 트해야한다. 많은 장치가 IRQ 신호를 트리거 한 경우 모든 장치 드라이버가 해당 장치를 서비스 할 때까지 하이 또는 로우 레벨이 나타납니다. 따라서 이것은 즉시 처리되어야합니다.

관련 문제