병렬 포트 핀 9와 10을 연결하여 하드웨어 인터럽트를 트리거하면 작동하지 않습니다.

병렬 포트 핀 9와 10을 연결하여 하드웨어 인터럽트를 트리거하면 작동하지 않습니다.

책에 설명된 대로 하드웨어 인터럽트를 트리거하고 싶습니다.리눅스 장치 드라이버핀 9와 10 사이에 와이어를 연결합니다. 시도했지만 분명히 인터럽트가 트리거되지 않았습니다.

cat /proc/interrupts:

 7:          0    XT-PIC  parport0

이제 왜 그런지 알고 싶습니다. 커널 모듈을 로드합니다:

parport_pc             26004  0
parport                35239  2 ppdev,parport_pc

책에서는 인터럽트를 활성화해야 한다고 나와 있지만, 모듈을 로드할 때 그런 일이 발생합니다. 그렇죠?

내가 무엇을 할 수 있는지 어떤 아이디어가 있습니까?

답변1

단순히 핀을 연결하는 것만으로는 인터럽트가 발생하지 않습니다. 인용한 문서에 따르면 인터럽트를 생성하려면 핀 10으로 단락된 핀 9에 일부 데이터를 써야 합니다. 참조한 문서를 인용하려면 다음을 수행하십시오.

핀 9는 병렬 데이터 바이트의 최상위 비트입니다. 바이너리 데이터가 /dev/short0에 기록되면 여러 인터럽트가 생성됩니다. 그러나 ASCII 문자 세트에는 가장 높은 비트 세트가 있는 항목이 없기 때문에 ASCII 텍스트를 포트에 쓰면 중단이 발생하지 않습니다.

답변2

사람들은 왜 커널 코드를 읽는 것을 그토록 어렵게 생각합니까? :피.

http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/drivers/char/ppdev.c

진지하게, 장치는 일반적으로 필요할 때, 즉 사용자 공간이 장치를 열 때만 활성화됩니다. 예:

ppdev.c를 보면 parport가 "선언"된 API를 제공한다는 것을 알 수 있습니다(반드시 고유하지는 않지만?!). 그래야만 호출됩니다 pp_enable_irq(). (저는 open()을 먼저 보고 거기에 있는 주석을 보았습니다).

이것이 정확한 이유인지는 모르겠지만 가정에 결함이 있음을 보여줍니다. :).

관련 정보