Вот твое ожидание: while( busy ) ; Вот здесь наша задача нашла освобождение симафора доступа к SPI. Однако вот незадача - вот именно здесь диспечер задач(или кто там у тебя) отобрал у нашей задачи активность. И другая задача сволочь тоже норовит обратиться к SPI. Все по закону, поставила глобальный флагг busy и потихоньку работает. Тут управление переходит опять к нашей задаче. А мы-то уверены что здесь бизи нету и мочим SPDR!
busy = true; // Нельзя, ты опоздал, оно уже чужое бизи!