Функция SPI_Send как-то странно у вас задумана и реализована. Не осиливаю ее смысл. Можете пояснить функцию каждого оператора?
1. Зачем
устанавливать флаг UCB1TXIFG
перед записью в буфер? Его вообще-то
проверять перед записью нужно, чтобы убедится в готовности буфера. Или вы используете прерывания USCI? Но тогда для чего следующий цикл ожидания? И где обработчик прерывания?
2. Для чего предназначен вот этот while (((UC1IFG&UCB1TXIFG)>>3)==0); цикл ожидания? Я бы еще понял, если бы проверялся флаг готовности
приемника. Но флаг готовности передатчика сообщает лишь о том, что готов буфер передатчика. Но он вовсе не означает, что передача/транзакция уже завершилась. К тому же зачем нужен сдвиг вправо при проверке условия в этом цикле, если сравнение с нулем и перед сравнением наложена битовая маска? Не осиливаю такую логику
3. Что делает функция SPI_WaitForComplete? Ожидает окончания занятости? Но флаг UCBBUSY сбрасывается, когда в линию выдается последний бит данных и транзакция еще не завершена. Конец транзакции нужно отслеживать по готовности буфера приемника, проверяя установку флага UCB1RXIFG. И не забывать сбрасывать его (флаг) программно перед началом передачи байта.
4. wdgRst(); это сброс WDT? Зачем он здесь и почему именно здесь? Вообще пока отключите WDT и не включайте до тех пор, пока не отладите всю программу без него!