shematehnik

Msp430F249 Не Работает Spi На Модуле Usci_B

1 сообщение в этой теме

shematehnik    1

Не работает SPI на модуле USCI_B в микроконтроллере MSP430F249.

А если более конкретно, то после того, как записываю данные в регистр передачи UCB1TXBUF, флаг UCB1TXIFG в регистре UC1IFG не устанавливается.

Пока железа под рукой не имею, поэтому проверяю программу в протеусе.

Вот исходный код инициализации:

void spi_init(){
//Настройка ножек, связанных с SPI
gpio_port_init(SPI_CS_PORT);
spi_so_clk_init(TEMP_SENS_SO);
spi_so_clk_init(TEMP_SENS_CLK);
//Переводим USCI в состояние сброса и сбрасываем настройки регистра
UCB1CTL1 = UCSWRST;
//Источник тактирования USCI выбираем SMCLK
UCB1CTL1 |= UCSSEL_2;
//Передача по переднему фронту, прием по заднему
//CLk в нуле при неактивном состоянии
//MSB первый
//8-битный режим
//Режим мастера
//3-проводной режим
//Синхронный режим SPI
UCB1CTL0 = UCMST | UCMSB | UCSYNC;
//Выставляем частоту работы SPI = 1MHz
UCB1BR0 = 16;
UCB1BR1 = 0;
//Сброс всех флагов ошибок
UCB1STAT = 0;
//Запускаем USCI
UCB1CTL1 &= ~UCSWRST;
//Запретить прерывания по приему и передаче
UC1IE &= ~(UCB1TXIE | UCB1RXIE);
//Сброс флагов прерываний
UC1IFG &= ~UCB1RXIFG;
}

Вот код передачи данных:

spi_select(sensor_num);
//Передаем произвольные данные
UCB1TXBUF = 0x00;
//Дожидаемся завершения передачи
while(!(UC1IFG & UCB1TXIFG));
//Дожидаемся приема первого байта
while(!(UC1IFG & UCB1RXIFG));
//Забираем первый байт значения температуры
temperature = UCB1RXBUF;
temperature <<= 8;
//Передаем произвольные данные
UCB1TXBUF = 0xFF;
//Дожидаемся завершения передачи
while(!(UC1IFG & UCB1TXIFG));
//Дожидаемся приема первого байта
while(!(UC1IFG & UCB1RXIFG));
//Забираем второй байт значения температуры
temperature |= UCB1RXBUF;
spi_unselect(sensor_num);

Кто знает в чем проблема?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сообщения

    • Транзисторы не идеальны, они имеют неуправляемый ток утечки коллекторного перехода (кстати, сильно зависящий от температуры), поэтому эмиттерный переход всегда нужно шунтировать резисторами. Рекомендации по выбору номиналов этих резисторов давал Falconist.
    • Разговор был не про комплект вспышки, а конденсаторы. Напр., К50И-8 имеет срок службы 10.000 импульсов (Справочник по электрическим конденсаторам (Смирнова) 1983). Понятно, что сильно импульсный режим работы сильнее нагружает конденсатор, но, тем не менее, заметно бо'льшая удельная ёмкость таких конденсаторов, наверняка, сэкономлена на других характеристиках.
    • Получили ответ? Валера у нас заочник. А заочники электродинамику осилить не могут по определению. Короче, с ним все ясно. Можно далее дебаты не вести. Как я уже ранее предполагал, это с точностью до неразличимости копия Валеры Сученкина (Котбазилио). Добро пожаловать на территорию идиотизма: https://radiokot.ru/forum/viewtopic.php?f=17&t=71961   Валера, ты приехал на конечную станцию. Выходи. Далее с тобой никто разговаривать всерьез не будет. Даже чуть-чуть. Ты ошибся дверью. Гламурные блондинки двумя кварталами южнее.
    • Николай Медведев.
    • Вроде знакомое лицо...Но кто это?
    • А зачем тогда ЛБП, сделайте блоки питания с фиксированными напряжениями для микроконтроллеров и прочего и будет вам счастье. Выбросы в микросекунды проблем для МК не сделают. Нет в мире ничего идеального, просто нужно правильно брать все от жизни.