플랫폼 - ARM9I2C ISR 및 인터럽트
I2C를 통해 ARM9에 연결된 타사 장치가 있습니다. 내 문제는 I2C 읽기/쓰기가 뒤틀리는 것입니다. IRQ 라인은 어설 션되었지만 읽을 데이터가있을 때 결코 어설 션되지 않습니다. 타사 장치가 주소 패킷을 NACK하면 읽기가 실패합니다. 따라서 모든 후속 쓰기가 실패합니다.
내 인터럽트 처리가 잘되어 있는지 궁금합니다. IRQ를 서비스하는 ISR에서 인터럽트를 비활성화하고 인터럽트 처리기 등록을 취소 한 다음 I2C 버스에서 읽으려는 작업에 신호를 보냅니다. 마지막으로 인터럽트를 다시 활성화합니다.
작업이 위에 게시 된 신호를 처리 할 때 I2C 버스에서 데이터를 읽으려고 시도하지만 실패합니다. 마지막으로, 나는 항상 ISR을 다시 읽으려고 시도한 후에 재 등록합니다. 읽기 신호를 처리하는 동안 발생하는 인터럽트 비활성화/활성화가 없습니다.
내 질문은 I2C 버스를 읽고 쓸 때 인터럽트를 비활성화해야합니까?
프로그래밍 언어는 적절한 RTOS를 사용합니다.
IRQ가 절대로 어설 션되지 않으면 장치에서 충분한 데이터 및/또는 올바른 데이터를 사용하여 IRQ를 디어 스팅했는지 확인하십시오. – bstpierre
장치 설명서는 항상 X 바이트를 읽으려고 X 데이터를 버스에 저장하도록 지정합니다. 그렇다면 I2C를 사용하여 펌웨어를 장치로 업데이트하는 중입니다.장치가 갑자기 IRQ 라인의 디 어썰링을 멈추는 것은 단지 특정 시점에 불과합니다. – dubnde
장치와 프로세서 사이의 데이터 교환이있을 때까지이 장치가 작동하기 때문에 경쟁 조건이 될 수 있다고 생각하기 시작했습니다. 실행 중입니다. 이 시점 이전에는 명령을 보내고 문제없이 응답을받을 수 있습니다. – dubnde