>

현재 책상에 nRF 송신기/수신기 쌍 설정이 있습니다. 송신기는 5ms마다 단일 바이트 (0xAA)를 전송합니다. 수신기는 바이트를받은 후 바이트를 보낸 후 약 10us (+/- 2) 정도임을 나타 내기 위해 LED를 높게 설정합니다. +/- 0.5us 정확도로 정확한 타이밍/동기화 애플리케이션에이 nRF 펄스를 사용하고 싶습니다. 따라서 송신기가 실제로 바이트를 보낸 시간과 다음도착해야합니다. 다음 펄스를 추정하기 위해 과거의 nRF 펄스 시간 (Teensy의 ARM_DWT_CYCCNT 레지스터를 사용하여 클럭 사이클로 측정)을 사용하는 알고리즘을 만들었고 합리적으로 잘 작동하는 것 같습니다. 그러나 0.5us 정확도를 얻는다면 아직 말할 수는 없습니다 내가 원하는.

이제 추정값을 가져 와서 클럭 카운트가 예상 클럭 값에 도달하자마자 마이크로 컨트롤러가 출력 핀을 높게 설정하고 싶습니다. 현재는 while 루프를 대기하고 레지스터를 폴링 하여이 작업을 수행하지만 루프 자체는 수백 클럭 사이클을 차지하여 정확도를 떨어 뜨립니다. 클럭 사이클 카운터가 예상 값에 도달 할 때 인터럽트 트리거를받는 방법이 있습니까? 각 추정치를 계산 한 후에 어떻게 든이 인터럽트를 설정해야합니다.

감사합니다!


  • 답변 # 1

    <올>

    타이머를 사용하여 시스템 클럭을 계산하고 원하는주기에 오버플로 된 오프셋으로 카운터를 사전로드하십시오.

    타이머를 사용하여 시스템 클럭을 계산하고 원하는 사이클 수만큼 비교 일치를 설정하십시오.

    사이클 수를 늘리려면 Isr에서 더 빠른 처리를 수행 할 수 있지만 기본 요지는 동일합니다.

    다른 접근 방식도 있지만 여기에 설명 된 두 가지 방법이 더 쉽습니다.

관련 자료

  • 이전 java - Oracle JRE의 대안
  • 다음 arduino - Arduino UNO에서 Windows 10 ISO 파일을 부팅 할 수 없습니다