Я вот тоже в детских штанишках без callback-ов предлагаю пожить, если жизнь очень не требует выпрыгнуть до извра-высочайших уровней: 2 признака в программе: 1: из "фона" в ISR "сейчас уже исполняется команда SPI" и 2: из ISR в "фон" -- "в прерывании таймера было нужно вывести команду в SPI". Без запретов прерываний просто нужно установить "1:" перед посылом обычной команды, сбросить в конце -- это сигнал для обработчика, можно/нельзя работать с девайсом. Если обработчик видит этот флаг -- устанавливает "2:" и сохраняет свои данные для "фона", "фон" тогда после своей посылки проверит "2:" и пошлёт данные "из ISR", потом обнуляет "1:" и "2:". Ну и если ISR не видит "1:" -- шлёт в SPI сразу без вопросов, что хочется, в этот уровень "фон" встрять уже не может. Логики на 5 строк, но железной !
|