STM32F2에서 115200 보드에서 실행중인 두 개의 USART를 사용하여 하나는 무선 모듈과 통신하고 다른 하나는 PC에서 직렬로 전달합니다. 클럭 속도는 120MHz입니다.두 개의 USART 인터럽트가있는 오버런 오류
두 USART에서 동시에 데이터를 수신하는 경우 하나의 USART 또는 다른 하나에서 오버런 오류가 발생할 수 있습니다. 인터럽트는 바이트를 원형 버퍼에 간단히 복사하기 때문에 엔벨로프 계산 중 일부 빠른 작업을 수행하면 둘 다 처리 할 충분한 시간이 있어야합니다.
이론 및 측정 모두 버퍼에서 바이트를 푸시하기위한 인터럽트 코드는 2-4μS의 순서로 실행되어야하며, 115200 보드에서 우리는 각 문자를 처리하는 데 약 70us가 있어야합니다.
우리는 때때로 다른 USART에서 비정기 ORE를보고 있습니까?
업데이트 - 추가 정보 : 우리의 코드에
- 없음 ISR은이 시점에서 발사된다.
- 우리는 10mS마다 발사되도록 구성된 Systick 인터럽트로 Keil RTX를 실행 중입니다.
- 현재로서는 인터럽트를 비활성화하지 않습니다.
- 는 위의 모든 70us 감안할 때 (정말 치명적인되지 않음) 매치를 중지 대기 시간이 12cycles 주위에이 책 (는 Cortex-M 프로세서 제품군에 대한 디자이너의 가이드)
를 따르면 시간 이상 (10)의 적어도 요인이다 우리는 인터럽트를 해결하기 위해 노력합니다. 그래서 설명하기가 쉽지 않은 것 같습니다. 내가보고있는 다른 요소가 있어야한다고 결론을 내려야합니까?
MDK-ARM은 systick 인터럽트 때문에 RTOS에 의해 사용되는없는 시간이 다른 ISR의 바이트 각 당 실행 2-3μS 걸릴 수 있습니다 버전 4.70
입니다.
누군가가 특히 오버런을 초래하는 이유에 대해 충분한 정보를 제공하지 않았습니다. 확실한 후보자 : 다른 곳에서 인터럽트를 비활성화 하시겠습니까? 높은 우선 순위 인터럽트 처리기가 너무 느린가요? 코드에 버그가 있습니까? 어느 정보인지 알 수없는 정보. – janm
ISR 대기 시간은 칩에서 치명적입니다. UART에는 FIFO 버퍼가 없습니다. 당신의 이론적 인 계산은 이미 2의 계수에 의해 벗어났습니다. ISR이 너무 많은 시간이 걸리는 우선 순위가 높은 인터럽트를 추가하거나 알지 못하는 코드에서 인터럽트를 비활성화하면 오버런이 설명하기 쉽습니다. –
의견을 보내 주셔서 감사합니다. 질문에 더 많은 정보를 추가했는데 제공 할 수있는 정보가 무엇이 있는지 잘 모르겠습니다. –