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

 
 
> Один SPI на два дивайса
Oleg_IT
сообщение Nov 23 2015, 07:17
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 922
Регистрация: 3-06-05
Из: Москва
Пользователь №: 5 709



STM32F417. Есть два дивайса, датчик температуры и управляемый резистор, из первого нужно только читать данные, во второй только писать, выводы MOSI, MISO развожу по соответствующим девайсам, CS понятно разные. SPI2 назначать как Full-Duplex Master?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Obam
сообщение Dec 11 2015, 14:19
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 756
Регистрация: 14-11-14
Пользователь №: 83 663



Вот тут-то и парадокс: когда знаешь что и где "кубы" без надобности.

Так почему DMA, не приняв последний байт, отваливался?


--------------------
Пролетарий умственного труда.
Go to the top of the page
 
+Quote Post
Oleg_IT
сообщение Dec 11 2015, 14:40
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 922
Регистрация: 3-06-05
Из: Москва
Пользователь №: 5 709



Цитата(Obam @ Dec 11 2015, 18:19) *
Вот тут-то и парадокс: когда знаешь что и где "кубы" без надобности.

Так почему DMA, не приняв последний байт, отваливался?

Да ни какого парадокса, просто экономия времени и можно посмотреть как люди программы пишут, если опыта мало.

А с DMA пока не пойму. в прерывания он входит только с HAL_DMA_STATE_READY_MEM0, сконфигурил я его так. Я вот думаю, может в SPI флаг окончания приёма контролировать, в основном цикле и когда прерывание от DMA пришло. Кривовато это как-то.
Go to the top of the page
 
+Quote Post
Tarbal
сообщение Dec 12 2015, 01:07
Сообщение #4


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

Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439



Цитата(Oleg_IT @ Dec 11 2015, 17:40) *
Да ни какого парадокса, просто экономия времени и можно посмотреть как люди программы пишут, если опыта мало.

А с DMA пока не пойму. в прерывания он входит только с HAL_DMA_STATE_READY_MEM0, сконфигурил я его так. Я вот думаю, может в SPI флаг окончания приёма контролировать, в основном цикле и когда прерывание от DMA пришло. Кривовато это как-то.


Контролировать в цикле неправильно.
Во первых есть аппаратный CS, который праввильно поведет себя.
Если совсем нет выбора, а надо подключить несколько SPI устройств, то можно включить их последовательно. Поищите по ключевым словам daisy chain.
SPI устройство это регистр сдвига, который защелкивает информацию по положительному фронту CS. Для записи в устройство в конце цепочки вам придется формировать посылку из нескольких слов, чтобы нужное дошло.
Ну вот например так как здесь описано:
https://en.wikipedia.org/wiki/Serial_Periph...l_Interface_Bus

Есть и другие способы, но это уже если устройство их поддерживает.

А куб мне пока нравится.
Go to the top of the page
 
+Quote Post
Oleg_IT
сообщение Dec 14 2015, 06:41
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 922
Регистрация: 3-06-05
Из: Москва
Пользователь №: 5 709



Цитата(Tarbal @ Dec 12 2015, 05:07) *
Контролировать в цикле неправильно.

Не правильно, но работает. Почему прерывание раньше происходит так и не понял, может так задумано.
Go to the top of the page
 
+Quote Post
Tarbal
сообщение Dec 14 2015, 14:26
Сообщение #6


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

Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439



Цитата(Oleg_IT @ Dec 14 2015, 10:41) *
Не правильно, но работает. Почему прерывание раньше происходит так и не понял, может так задумано.


Пренебрежение опытом -- источник "необъяснимых" чудес в поведении разрабатываемого устройства.

Бывает, что несколько событий могут вызвать прерывание по одному и тому же вектору.
Если это так, то прочитайте в прерывании флаги и определите то ли прерывание произошло, которого вы ожидали. Если не то, то покинте (если вам его не надо обрабатывать) обработчик.
Go to the top of the page
 
+Quote Post
Oleg_IT
сообщение Dec 15 2015, 05:42
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 922
Регистрация: 3-06-05
Из: Москва
Пользователь №: 5 709



Цитата(Tarbal @ Dec 14 2015, 18:26) *
Пренебрежение опытом -- источник "необъяснимых" чудес в поведении разрабатываемого устройства.

Бывает, что несколько событий могут вызвать прерывание по одному и тому же вектору.
Если это так, то прочитайте в прерывании флаги и определите то ли прерывание произошло, которого вы ожидали. Если не то, то покинте (если вам его не надо обрабатывать) обработчик.

Не мой случай, это прерывание возникает только один раз за период обмена, проверено.
Go to the top of the page
 
+Quote Post
Tarbal
сообщение Dec 15 2015, 12:09
Сообщение #8


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

Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439



Цитата(Oleg_IT @ Dec 15 2015, 08:42) *
Не мой случай, это прерывание возникает только один раз за период обмена, проверено.


Вопрос стоит не сколько раз происходит прерывание, а какие флаги разрешения прерывания и какие флаги событий установлены. Вы ведь хотите понять что происходит. Так начинайте расследование планомерно и тщательно. Если хотите отгадать или чтобы вам кто-нибудь другой отгадал в чем дело, то игнорируйте мои рекомендации.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Oleg_IT   Один SPI на два дивайса   Nov 23 2015, 07:17
- - arhiv6   Да, это будет случай Full-Duplex Master.   Nov 23 2015, 07:23
- - Oleg_IT   Спасибо.   Nov 23 2015, 07:39
|- - Oleg_IT   Так не получается. Проект генерю из STM32CubeMx. П...   Dec 11 2015, 08:55
|- - Obam   Цитата(Oleg_IT @ Dec 11 2015, 12:55) SPI ...   Dec 11 2015, 10:50
|- - scifi   Цитата(Oleg_IT @ Dec 11 2015, 11:55) Так ...   Dec 11 2015, 10:58
|- - Oleg_IT   Цитата(scifi @ Dec 11 2015, 14:58) По-мое...   Dec 11 2015, 13:34
- - Obam   "…Как правильно работать с несколькими девайс...   Dec 11 2015, 09:29
|- - Oleg_IT   Цитата(Obam @ Dec 11 2015, 13:29) Каждому...   Dec 11 2015, 09:46
- - Oleg_IT   Заметил особенность, при увеличении BaudRatePresca...   Dec 13 2015, 14:18


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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 00:55
Рейтинг@Mail.ru


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