SPI

32-разрядные микроконтроллеры разработки АО "НИИЭТ"

Модераторы: dav, bkolbov, pip, _sva_

petrovitch
Сообщения: 69
Зарегистрирован: 15 фев 2017, 19:07

Re: SPI

Сообщение petrovitch » 10 сен 2019, 13:11

Т.е. вы в ведомом записали данные в буфер. Посылаете мастером пустую посылку, и видите что от ведомого записанные данные не передаются, а линия просто висит в одном состоянии?
Именно так! Только посылаю от мастера содержательную посылку из четырёх слов.

Вот код записи в буфер ведомого:

Код: Выделить всё

if (NT_SPI2->SPI_SR_bit.TFE == 1) {
			i=0;
			while(i != 4) {
				NT_SPI2->SPI_DR = p->Ohmega_in[i];
				i++;
			}
		}

bkolbov
Сообщения: 227
Зарегистрирован: 14 дек 2015, 11:37
Предприятие: АО НИИЭТ
Откуда: Воронеж

Re: SPI

Сообщение bkolbov » 10 сен 2019, 14:16

Код вполне допустимый.

Несколько смущает 1,8В на линии TX ведомого - может быть какая-то электрическая проблема?
Есть ли возможность разорвать эту линию или вывести TX на другую свободную ножку?

blessedt
Сообщения: 13
Зарегистрирован: 25 фев 2019, 00:09
Предприятие: АОКБ Импульс

Re: SPI

Сообщение blessedt » 04 дек 2019, 20:09

Доброго времени суток!
Есть ли возможность передать по SPI в режиме Master три байта данных в одной посылке (на время передачи всех трех байтов FSS остается 0)? Разумеется, интересует хардварное управление FSS, ибо не хочется тратить прерывание на программное переключение FSS.
Нужно для работы с 1273НА015.
Заранее благодарен,
Дмитрий Тарасов.

blessedt
Сообщения: 13
Зарегистрирован: 25 фев 2019, 00:09
Предприятие: АОКБ Импульс

Re: SPI

Сообщение blessedt » 04 дек 2019, 23:49

Заодно родился следующий вопрос. Хотел реализовать запихивание в буфер передатчика трех байт данных, включение передачи, а при опустошении буфера вызывать прерывание и в нем переводить FSS в 1. В итоге FSS переводится в 1 быстрее, чем выдается даже 1 байт. Кто бы подсказал, что за чудо чудное? ) Отладка показывает, что при записи данных в буфер, флаг пустого буфера не снимается.

bkolbov
Сообщения: 227
Зарегистрирован: 14 дек 2015, 11:37
Предприятие: АО НИИЭТ
Откуда: Воронеж

Re: SPI

Сообщение bkolbov » 05 дек 2019, 12:53

blessedt писал(а):
04 дек 2019, 20:09
Доброго времени суток!
Есть ли возможность передать по SPI в режиме Master три байта данных в одной посылке (на время передачи всех трех байтов FSS остается 0)? Разумеется, интересует хардварное управление FSS, ибо не хочется тратить прерывание на программное переключение FSS.
Нужно для работы с 1273НА015.
Заранее благодарен,
Дмитрий Тарасов.
Добрый день! Если при CR0.FRF=0, установить CR0.SPH=1, то FSS будет в состоянии логического нуля до опустошения буфера.
Заодно родился следующий вопрос. Хотел реализовать запихивание в буфер передатчика трех байт данных, включение передачи, а при опустошении буфера вызывать прерывание и в нем переводить FSS в 1. В итоге FSS переводится в 1 быстрее, чем выдается даже 1 байт. Кто бы подсказал, что за чудо чудное? ) Отладка показывает, что при записи данных в буфер, флаг пустого буфера не снимается.
Но ведь у SPI нет прерывания по опустошению передающего буфера. А существующее прерывание по опустошению буфера наполовину будет вызываться всякий раз когда заполненность буфера меньше либо равно половине емкости (4 кадра).

blessedt
Сообщения: 13
Зарегистрирован: 25 фев 2019, 00:09
Предприятие: АОКБ Импульс

Re: SPI

Сообщение blessedt » 05 дек 2019, 14:44

bkolbov писал(а):
05 дек 2019, 12:53
Если при CR0.FRF=0, установить CR0.SPH=1, то FSS будет в состоянии логического нуля до опустошения буфера.
Была такая мысль ) Но лень, увы, не позволила поэкспериментировать, а РП на этот вопрос ответа не содержит...

Спасибо большое, Богдан, Вы, как всегда, очень выручаете )

bkolbov
Сообщения: 227
Зарегистрирован: 14 дек 2015, 11:37
Предприятие: АО НИИЭТ
Откуда: Воронеж

Re: SPI

Сообщение bkolbov » 05 дек 2019, 14:58

На самом деле, ответ на этот вопрос как раз в РП - 16.2 подраздел, пункт "Интерфейс SPI":
В режиме непрерывной передачи данных при условии SPH = 1 низкий уровень
сигнала на линии SPI_FSS не блокирует запись в сдвиговый регистр. Поэтому линия
SPI_FSS может оставаться в состоянии нуля в течение передачи всех кадров и переведена
в состояние логической единицы только по окончании передачи.
Ну а лень - лень надо бороть :)

Ответить

Вернуться в «32-разрядные микроконтроллеры»

Пользователи онлайн

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 3 гостя