Я работаю над обработчиком прерывания с группой разработчиков оборудования, и мы пытаемся выяснить, где находится ошибка. Читаю чип по шине SPI на 5кГц. Чип загружает 4 байта и запускает вывод готовности данных.
Мой обработчик прерываний просыпается, читает 4 байта с шины SPI и сохраняет данные в буфере. Как ни странно, каждое 17-е чтение дает 4 байта из всех нулей, что неправильно. Один из вариантов, который мы изучаем, заключается в том, что чип не всегда фактически готов, когда он отправляет сигнал готовности данных.
Итак, я знаю, что не могу заснуть в обработчике прерывания, но я хотел бы попробовать ввести задержку в 10 или 20 микросекунд. Прямо сейчас у меня есть цикл for, который считает до 100000, а затем обрабатывает прерывание. Я не заметил никаких изменений, поэтому подумал, что могу посмотреть, есть ли у кого-нибудь более эффективная техника для активного ожидания. Или, по крайней мере, лучший способ выяснить, сколько итераций цикла мне нужно пройти, поскольку я не уверен, сколько времени это займет, или если компилятор просто оптимизирует все это.