реклама на сайте
подробности

 
 
> Как работать с SPI?, STM32F103
777777
сообщение Sep 1 2011, 04:37
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357



Там для чего-то сделали отдельные прерывания приемника и передатчика. Но ведь это одно и то же! Допустим, я принимаю данные с устроства, для этого я сначала должен ему что-то передать. Могу ли я в прерывании передатчика считывать байт из DR? Есть ли гарантия, что он там уже есть? Ведь если байт передан, то это автоматически означает что и байт с устройства принят. И наоборот - если произошло прерывание премника и я считал байт, значит ли это, что SPI готов передавать следующий?

Сообщение отредактировал 777777 - Sep 1 2011, 04:41
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
AHTOXA
сообщение Sep 1 2011, 05:51
Сообщение #2


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Есть буфер передачи, и есть сдвиговый регистр. Прерывание передатчика возникает при опустошении буфера. Сдвиговый регистр в это время ещё не пуст, и передача ещё идёт. Это обеспечивает непрерывность передачи. Соответственно, считывать принятый байт надо в прерывании от приёмника, в прерывании от передатчика он ещё не готов.
Добавлю, что сбрасывать чипселект нужно чуть позже, чем возникнет прерывание от приёмника последнего байта. Потому что в момент этого прерывания клок ещё не дотикал.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
777777
сообщение Sep 1 2011, 07:45
Сообщение #3


Профессионал
*****

Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357



Цитата(AHTOXA @ Sep 1 2011, 09:51) *
Есть буфер передачи, и есть сдвиговый регистр. Прерывание передатчика возникает при опустошении буфера. Сдвиговый регистр в это время ещё не пуст, и передача ещё идёт. Это обеспечивает непрерывность передачи.

Значит можно пользоваться только прерыванием приемника? Максимум что от этого будет - промежутки в передаче байтов.
Цитата(AHTOXA @ Sep 1 2011, 09:51) *
Добавлю, что сбрасывать чипселект нужно чуть позже, чем возникнет прерывание от приёмника последнего байта. Потому что в момент этого прерывания клок ещё не дотикал.

А почему же прерывание возникло если последний клок не дотикал? Об этом написано в даташите? В любом случае, я полагаю, что пока программа войдет в прерывание, он уже дотикает? Частота SPI 1.25 МГц.

Цитата(Flexz @ Sep 1 2011, 10:06) *
Еще перед началом передачи стоит вычитывать DR дабы удостовериться, что прерывание RXNE не возникнет сразу после включения SPI.

У меня сложилось впечатление, что если его не вычитывать, то новая передача не начинается вообще.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Sep 1 2011, 07:56
Сообщение #4


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(777777 @ Sep 1 2011, 13:45) *
Значит можно пользоваться только прерыванием приемника? Максимум что от этого будет - промежутки в передаче байтов.

Да.

Цитата(777777 @ Sep 1 2011, 13:45) *
А почему же прерывание возникло если последний клок не дотикал? Об этом написано в даташите? В любом случае, я полагаю, что пока программа войдет в прерывание, он уже дотикает? Частота SPI 1.25 МГц.

Потому что прерывание возникает сразу же, как только защёлкнется последний бит байта. То есть, при CHPA=0 - по первому перепаду SCK. Даташит про это явно не говорит. Это - практические граблиsm.gif
Успеет или нет дотикать за время входа в прерывание - посмотрите по осциллографу. Думаю, что придётся добавить несколько NOP-ов.

Цитата(Flexz @ Sep 1 2011, 12:06) *
Чипселект можно снимать при получении последнего RXNE.

Нет. См. выше.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 18:18
Рейтинг@Mail.ru


Страница сгенерированна за 0.01389 секунд с 7
ELECTRONIX ©2004-2016