Судя по всему, вы свой код брали из
этих примеров TI, так? Но при "творческой переработке" кода, вы зачем-то выкинули функцию обработки прерывания. Ну так дополните свою программу этой функцией! В примерах собственно в прерывании от приемника SPI и происходит прием/передача данных. Так что ваш "суперцикл" для передачи не нужен. Точнее нужен, но лишь для
подготовки данных к передаче и
обработке принятых данных. Также рекомендую вам пока НЕ использовать режимы энергосбережения до тех пор, пока вы полностью не разберетесь с настройкой и работой периферийных модулей.
SPI это вообще один из самых простых интерфейсов. Работа модуля USCI в режиме SPI представляют из себя по сути работу сдвигового регистра. Через последовательный выход данные передаются и одновременно через последовательный вход принимаются.
Чтобы что-то принять, нужно что-то передать. Это первая особенность интерфейса SPI.
Вторая особенность SPI состоит в том, что это
синхронный интерфейс. Если во время приема/передачи произошел сбой в тактировании, то вы не можете определить этот факт и уже не будете принимать корректные данные. Чтобы избежать таких неприятностей применяют
фреймовую (кадровую)
синхронизацию. Поток данных делится на отдельные фреймы (кадры), с помощью которых определяется начало и конец пакета данных. Для реализации фреймовой синхронизации применяют два способа: отдельный сигнал фреймовой синхронизации и временнАя фреймовая синхронизация. В большинстве устройств с интерфейсом SPI имеется отдельный сигнал типа CS, который запрещает/разрешает прием/передачу и при неактивном сигнале сбрасывает аппаратуру SPI. ВременнАя синхронизация используется гораздо реже. При этом способе начало/конец фрейма определяется по паузам в передаче потока данных. При возникновении паузы аппаратура SPI реинициализируется. Это менее надежный способ, чем отдельный сигнал синхронизации, но тем не менее он тоже применим. Применяется в случаях, когда требуется минимальное количество связей между устройствами или когда организуется режим один ведущий-несколько ведомых и нет возможности выделить для каждого ведомого свой отдельный сигнал фреймовой синхронизации.
В общем попробуйте модифицировать свою программу, внимательно читая User's Guide. Если же не понимаете работу прерываний, то задавайте конкретные вопросы.