하드웨어 디자인 그룹과 함께 인터럽트 핸들러에서 작업 중이며 버그가 어디에 있는지 파악하려고합니다. 나는 5khz에서 SPI 버스를 통해 칩을 읽고있다. 칩은 4 바이트를로드하고 데이터 준비 핀을 트리거합니다.리눅스 인터럽트 핸들러에 작은 지연을 생성하십시오.
내 인터럽트 처리기가 깨어나서 SPI 버스에서 4 바이트를 읽어 버퍼에 저장합니다. 이상하게도 충분하지만 모든 17 번째 읽기는 4 바이트의 0을 제공합니다. 이는 옳지 않습니다. 우리가 탐구하고있는 옵션 중 하나는 칩이 데이터 준비 신호를 보낼 때 항상 실제로 준비되지 않는다는 것입니다.
그래서 나는 인터럽트 처리기에서 잠을 잘 수 없다는 것을 알고 있지만, 10 또는 20 마이크로 초의 지연을 도입하려고합니다. 지금은 100,000으로 계산 된 인터럽트를 처리하는 for 루프가있다. 나는 어떤 변화도 보지 못했기 때문에 누군가가 바쁜 대기를위한 더 나은 기술을 가지고 있는지를 알 수있을 것이라고 생각했습니다. 아니면 얼마나 오래 걸릴지, 또는 컴파일러가 단순히 모든 것을 최적화하는 것인지에 대해 잘 모르겠습니다.
디지털 분석기를 SPI 라인에 연결하십시오. 오류가 발생한 데이터가 실제로 데이터 준비가 완료된 후에 반환되는지 확인하십시오. 문제의 근본 원인을 더 잘 분리하지 않는 한, 지연 등으로 언제 까지나 슬쩍 할 수 있습니다. –