SPI в stm32

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Аватара пользователя
van_de_luxe
Встал на лапы
Сообщения: 103
Зарегистрирован: Вс окт 31, 2010 16:46:10
Откуда: Оттуда

SPI в stm32

Сообщение van_de_luxe »

Ситуация такая:
я-мастер :)
подключен к slave по spi
Хочу настроить, чтобы прием данных происходил по прерыванию (тут проблем нет, прерывание включается когда Rx буфер заполнен)
как мне узнать что slave хочет передать данные?(решено)
clock же мастер выдает, а как он узнает когда его нужно выдавать?
и что запускает механизм выдачи клока при приеме? (установка бита, запись к к-н регистр, определенное состояние линий ВВ)
Догадываюсь что где-то в даташите это описано, но не вижу. Ткните носом, пожалста
использую stm32f103zg
Последний раз редактировалось van_de_luxe Пн ноя 21, 2011 11:24:41, всего редактировалось 1 раз.
Реклама
Аватара пользователя
Satyr
Друг Кота
Сообщения: 7439
Зарегистрирован: Чт ноя 04, 2010 01:56:36
Откуда: г. Москва

Re: SPI в stm32

Сообщение Satyr »

Обычно у таких SPI девайсов есть отдельный выход - запрос прерывания
в STM32 разводишь соединенией с ним на какой нибудь EXTINT, а на него уже вешаеешь обработчки, который инициирует обмен с девайсом по SPI
Реклама
Аватара пользователя
van_de_luxe
Встал на лапы
Сообщения: 103
Зарегистрирован: Вс окт 31, 2010 16:46:10
Откуда: Оттуда

Re: SPI в stm32

Сообщение van_de_luxe »

вот я не могу найти что его инициирует
для передачи все просто - кинул данные в буфер, они отправились
а с приемом не пойму
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6315
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Re: SPI в stm32

Сообщение Jack_A »

van_de_luxe писал(а):а как он узнает когда его нужно выдавать?
Догадываюсь что где-то в даташите это описано, но не вижу.
В ДШ это описано быть не может, потому что это - вопрос не SPI как такового, а протокола конкретных устройств, связанных по SPI. Для запроса приема нужно использовать отдельную линию, не входящую в интерфейс SPI. Можно попробовать на какую-нибудь из линий навесить двойную функцию, например, MISO в исходном состоянии держит '1' , когда slave захочет передавать, он утягивает линию в '0', после того, как мастер изготовится к передаче и утянет CS в '0', MISO подключается к своей обычной работе -- выход slave SPI. Можно сделать чисто аппаратно, можно - программно.
Инициирует передаче слейва его окружение : что-то случилось в наблюдаемой среде, и он должен сообщить об этом мастеру.
Если время реакции не критично, можно вести обмен по опросу : мастер периодически спрашивает у слейва : что там? Если тот молчит ( а лучше - отвечает заготовленной комбинацией ПОКА НИЧЕГО - в этом случае контролируем и наличие связи ), то состояние не требует обслуживания, если нет - получаем пакет с информацией о событии.
Последний раз редактировалось Jack_A Пн ноя 21, 2011 11:20:03, всего редактировалось 1 раз.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
van_de_luxe
Встал на лапы
Сообщения: 103
Зарегистрирован: Вс окт 31, 2010 16:46:10
Откуда: Оттуда

Re: SPI в stm32

Сообщение van_de_luxe »

ладно, для сигнализации о наличии данных я просто сделаю линию-флаг, с этим понятно.
сейчас заново перелистал даташит и просмотрел ф-ии из исходников примеров, но так и не нашел что инициирует запуск clock при приеме, даже биты в регистрах просмотрел, ничего похожего не увидел.
Или я чтото путаю и при передаче slave->master тактовую частоту slave задает?
Реклама
Аватара пользователя
Satyr
Друг Кота
Сообщения: 7439
Зарегистрирован: Чт ноя 04, 2010 01:56:36
Откуда: г. Москва

Re: SPI в stm32

Сообщение Satyr »

van_de_luxe писал(а): сейчас заново перелистал даташит и просмотрел ф-ии из исходников примеров, но так и не нашел что инициирует запуск clock при приеме, даже биты в регистрах просмотрел, ничего похожего не увидел.
SPI это, грубо говоря, интерфейс обмена словами между сдвиговыми регистрами по кольцу.
Так что чтоб чтото принять, мастер должен послать именно столько, чтоб оно прошло кольцо и вернулось.
В случае байтов и прямой связи мастер-слейв, ты должне послать байт (вобщем то с туфтой -)) ) в SPI чтобы принять оттуда байт -)))
Так вот и появляется клок
Реклама
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6315
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Re: SPI в stm32

Сообщение Jack_A »

Поясним на примере ( см.рис. )

Мастер передает 1 байт затем 1 байт принимает
SPI.JPG
(14.76 КБ) 1078 скачиваний
1 -- информация, передаваемая слейву
2 -- то, что он лепечет в ответ, игнорируем
3 -- передаем ему абы што, при этом идут клоки
4 -- а вот теперь эту инфу от слейва принимаем и сохраняем.
Аватара пользователя
van_de_luxe
Встал на лапы
Сообщения: 103
Зарегистрирован: Вс окт 31, 2010 16:46:10
Откуда: Оттуда

Re: SPI в stm32

Сообщение van_de_luxe »

понятно... значит фактически у spi нет режима принимающего мастера, а есть fullduplex
некрасиво получается, передавать фигню только ради тактов
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»