Запрос «любых предложений» на самом деле не делает его отличным вопросом, потому что может быть допустимо несколько ответов, и немногие из них будут исчерпывающими. Он требует комментариев, а не ответов. Однако я позволю себе потакать:
Во-первых, это ни в коем случае не эксплойт. «Эксплуатация» подразумевает использование чего-либо не по назначению - это неправильный термин в данном случае, вы не «эксплуатируете» механизм прерывания, вы просто используете его.
При высоких тактовых частотах в некоторых случаях задержка прерывания и время переключения контекста, участвующие в обработке прерываний, могут быть менее эффективными, чем простое ожидание занятости. Если за один раз передается более двух или трех байтов, вам в любом случае следует рассмотреть возможность использования DMA, если он доступен - так что прерывание будет прерыванием DMA для полной передачи, а не одного символа. Для приложений, таких как интерфейс SD-карты или EEPROM, DMA будет иметь значительное влияние на производительность и освободить ЦП для одновременного выполнения другой полезной работы. Оптимальным может быть драйвер, который использует ожидание занятости для передачи отдельных байтов / слов и DMA для передачи блоков. Это особенно верно, возможно, если вы используете RTOS, а ISR запускает контекст задачи для обработки данных - накладные расходы на переключение контекста могут быть почти такими же или большими, чем ожидание занятости для одного байта. Например, если ваши часы SPI> 1 МГц, вы будете ждать 8 мкс для передачи байта, ваш ISR и обратные вызовы могут легко быть больше, чем это, и в этом случае это не стоит.
Итак, мой совет вот учитывать прерывания для SPI только в том случае, если вы используете медленные часы и можете получить другую полезную работу, выполняемую в ожидании прерывания.
Проблема с разрешением обратных вызовов в прерываниях заключается в том, что это позволяет провайдер обратного вызова делает что-то опрометчивое или незаконное в контексте прерывания, и вы теряете возможность контролировать время обработки прерывания. Возможно, это нормально, если обратный вызов предназначен для использования кем-то, кто пишет драйвер устройства - они должны знать, что они делают, но это - это драйвер устройства.