|
Один SPI на два дивайса |
|
|
|
 |
Ответов
|
Dec 11 2015, 14:40
|
Знающий
   
Группа: Свой
Сообщений: 922
Регистрация: 3-06-05
Из: Москва
Пользователь №: 5 709

|
Цитата(Obam @ Dec 11 2015, 18:19)  Вот тут-то и парадокс: когда знаешь что и где "кубы" без надобности.
Так почему DMA, не приняв последний байт, отваливался? Да ни какого парадокса, просто экономия времени и можно посмотреть как люди программы пишут, если опыта мало. А с DMA пока не пойму. в прерывания он входит только с HAL_DMA_STATE_READY_MEM0, сконфигурил я его так. Я вот думаю, может в SPI флаг окончания приёма контролировать, в основном цикле и когда прерывание от DMA пришло. Кривовато это как-то.
|
|
|
|
|
Dec 12 2015, 01:07
|
Профессионал
    
Группа: Свой
Сообщений: 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Есть и другие способы, но это уже если устройство их поддерживает. А куб мне пока нравится.
|
|
|
|
|
Dec 14 2015, 14:26
|
Профессионал
    
Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439

|
Цитата(Oleg_IT @ Dec 14 2015, 10:41)  Не правильно, но работает. Почему прерывание раньше происходит так и не понял, может так задумано. Пренебрежение опытом -- источник "необъяснимых" чудес в поведении разрабатываемого устройства. Бывает, что несколько событий могут вызвать прерывание по одному и тому же вектору. Если это так, то прочитайте в прерывании флаги и определите то ли прерывание произошло, которого вы ожидали. Если не то, то покинте (если вам его не надо обрабатывать) обработчик.
|
|
|
|
Сообщений в этой теме
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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|