Перейти к содержанию

Философия аппаратного SPI - чем занять МК?


Рекомендуемые сообщения

35 минут назад, ARV сказал:

Это надо, чтобы искусственный интеллект в нем был

 

35 минут назад, ARV сказал:

Это известно только программисту

это да...

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

1 час назад, ARV сказал:

Это надо, чтобы искусственный интеллект в нем был :) Как узнать, когда "заруливать" этим пином?

А что мешает иметь переменную, в которую записывается количество байт для передачи? Тогда работа SPI будет выглядеть так:

  1.  Записать в переменную количество байт.
  2. Опустить CS.
  3. Записать первый байт в регистр SPI
  4. В прерывание по SPI щелкать счетчик переданных байт и сравнивать с требуемым. Если мало, отправлять следующий байт.
  5. При достижении требуемого значения счетчика - поднять CS.

Я по такому принципу работаю с UART.

А флаг опустошения буфера довольно удобная вещь. На тех же STM32 это позволяет получить безразрывную передачу данных по SPI. Там буфер живет отдельно от сдвигового регистра передачи и его опустошение возникает раньше окончания передачи. В результате новый байт данных оказывается в буфере еще до окончания отправки предыдущего.

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Только что, BARS_ сказал:

А что мешает иметь переменную

Мы тут мечтали об аппаратном дрыгании CS-ом, без лишних прерываний. Так-то оно все понятно...

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Только что, BARS_ сказал:

Легко, но

не нужно :) 

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

Ссылка на комментарий
Поделиться на другие сайты

Аппаратное дёрганье CS'ом, ИМХО, ненужная фигня. Использовать можно будет только с одним девайсом. Тогда каков в нём смысл, если можно CS девайса повесить железно и навечно.

Ссылка на комментарий
Поделиться на другие сайты

Ну... чисто теоретически... при наличии DMA вполне можно было бы битик в регистре DMA-контроллера выделить под это. Скажем, со смыслом "Опустить CS на время передачи или приема буфера". Ну или как-то так, возможно, с вариантами...

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

Ссылка на комментарий
Поделиться на другие сайты

26 минут назад, Alex сказал:

Тогда каков в нём смысл, если можно CS девайса повесить железно и навечно

В смысле держать его все время в опущенном состоянии? Не прокатит.

 

18 минут назад, Alex сказал:

Есть в PIC'ах такое (аппаратный CS)

Это в любом МК есть.

Ссылка на комментарий
Поделиться на другие сайты

5 минут назад, BARS_ сказал:

Это в любом МК есть.

Судя по "мечтаниям", находящихся выше в теме, - не во всех. Или я что-то путаю ? :unsure:

6 минут назад, BARS_ сказал:

Не прокатит.

Да, скорее всего...
Значит смысл, всё-такие, есть.

Ссылка на комментарий
Поделиться на другие сайты

Только что, BARS_ сказал:

Есть то во всех

Есть-то во всех, да вот только дергается программно...

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

Ссылка на комментарий
Поделиться на другие сайты

11 минуту назад, Alex сказал:

Судя по "мечтаниям", находящихся выше в теме, - не во всех. Или я что-то путаю ? :unsure:

Есть такое мнение, что путаете. Потому как в ПИКах нет никакого CS, а есть SS - slave select. Это не выход, а ВХОД выбора слейва, если этот SPI работает в режиме slave.

Делать аппаратный CS бессмысленно, ибо есть минимум ДВА вида CS. Один накрывает данные, а второй завершает. Реализовать CS  легко на Output Compare, от которого и запускается транзакция SPI. Скажем, для внешнего SPI АЦП я так и делаю. Тем более, что там CS - это и есть запуск преобразования.

Изменено пользователем my504

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

2 минуты назад, ARV сказал:

дергается программно

Дергается именно аппаратно. На счет AVR не вспомню, на в C8051F и STM он может дергаться аппаратно после каждого окончания передачи.

 

2 минуты назад, my504 сказал:

Делать аппаратный CS бессмысленно

Было бы бессмысленно - не делали бы, а его делают. Вот только применения ему я найти так и не смог, ибо очень редко дело заканчивается одной передачей и передать надо подряд несколько байт при опущенном CS.

Ссылка на комментарий
Поделиться на другие сайты

48 минут назад, BARS_ сказал:

Легко, но после каждого байта

Не всегда. В передаче "команда и многа, многа данных потом" дернуть надо в самом конце, а не посередине. Иначе очередной байт данных превратится в команду. Хорошо, если не опознанную.

 

14 минуты назад, BARS_ сказал:

Это в любом МК есть.

Есть-то есть. Только назначение другое - перевести блок SPI в статус SLAVE. У новых аттинек есть бит SSD - отключает CS от физического пина. После чего последним можно пользоваться как обычным GPIO. В ATMEGA такого нет. Если SPI мастер, то CS можно только на выход. Или на вход, но только "1".

1 час назад, BARS_ сказал:

А что мешает иметь переменную, в которую записывается количество байт для передачи? Тогда работа SPI будет выглядеть так:

  1.  Записать в переменную количество байт.
  2. Опустить CS.
  3. Записать первый байт в регистр SPI
  4. В прерывание по SPI щелкать счетчик переданных байт и сравнивать с требуемым. Если мало, отправлять следующий байт.
  5. При достижении требуемого значения счетчика - поднять CS.

Если есть свободная ОЗУ, то с таким алгоритмом не грех через указатель заносить данные в SPI там же в прерывании.

1 час назад, BARS_ сказал:

Там буфер живет отдельно от сдвигового регистра передачи и его опустошение возникает раньше окончания передачи. В результате новый байт данных оказывается в буфере еще до окончания отправки предыдущего.

В аттиньке всё ровно тоже самое.

Ссылка на комментарий
Поделиться на другие сайты

Только что, BARS_ сказал:

на в C8051F и STM он может дергаться аппаратно

Повезло кому-то :) Можно в 595-е регистры полностью аппаратно выводить :) 

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

Ссылка на комментарий
Поделиться на другие сайты

Только что, my504 сказал:

Мне не встречался. 

Выше я дал примеры МК. При настройке SPI указывается, какой режим работы 4 или 3 провода.

 

2 минуты назад, parovoZZ сказал:

Не всегда. В передаче "команда и многа, многа данных потом" дернуть надо в самом конце, а не посередине.

Так я о том и говорю...

 

3 минуты назад, parovoZZ сказал:

Есть-то есть. Только назначение другое - перевести блок SPI в статус SLAV

Ошибся, не в любом, а во многих. И именно при работе мастером.

 

3 минуты назад, parovoZZ сказал:

Если есть свободная ОЗУ, то с таким алгоритмом не грех через указатель заносить данные в SPI там же в прерывании.

Я, обычно, так и делаю. Данные пишутся в массив, а массив уже выплевывается сам в либо в прерывании, либо через DMA. Зависит от количества данных и типа МК. В UART делаю ровно точно так же.

Ссылка на комментарий
Поделиться на другие сайты

31 минуту назад, my504 сказал:

Это не выход, а ВХОД выбора слейва

Марк, посмотри референс по SPI на PIC32. SS является и выходом (при мастере) и входом (при слейве).
Сам лично дёргал им, управляя CS'ом SD-карты.

PS: В более младших семействах - не знаю, есть ли аппаратный дрыг. Не встречал.

Ссылка на комментарий
Поделиться на другие сайты

1 час назад, Alex сказал:

Марк, посмотри референс по SPI

Да, есть режим фрейма, где генерируется синхроимпульс на этой ноге мастером (у 24-х/33-х тоже есть), но он не может служить ни накрывающим данные, ни загрузкой после транзакции. Это именно синхроимпульс для определенных протоколов и расположен он либо перед 15 разрядом либо прямо во время передачи 15 разряда. То есть использовать этот режим для какого нибудь 595-го, SPI АЦП или ЖК-сегментного стекла совершенно невозможно. Зато два МК легко синхронизируются путем соединения SS-ов мастера и слейва.

Изменено пользователем my504

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

2 часа назад, BARS_ сказал:

Я, обычно, так и делаю. Данные пишутся в массив, а массив уже выплевывается сам в либо в прерывании, либо через DMA. Зависит от количества данных и типа МК. В UART делаю ровно точно так же.

Да, DMA - это сказка. Но в дешманских МК его нет.

А вот свою работу с SPI я перепишу через указатели. Идея мне понравилась))

Ссылка на комментарий
Поделиться на другие сайты

9 часов назад, BARS_ сказал:

он не даст выигрыша.

Выигрыш во времени - не единственный аргумент за ДМА. Выигрыша как такового может и не быть, зато структура алгоритма становится гораздо более простой и читабельной, не перегруженной мусором из драйверов. Поэтому, если есть свободные каналы ДМА, вполне уместны даже  достаточно редкие транзакции. Тут важен не размер пакета, а периодичность транзакций. Чтобы источник запросов на перегрузку данных (DMA request) мог быть автоматическим (таймер или иное событие).

10 часов назад, parovoZZ сказал:

Да, DMA - это сказка. Но в дешманских МК его нет.

Это не соответствует истине. Cortex M0/M0+ очень дешев и имеет DMA. ДМА так же есть в PIC24FJ256GA702, тоже недорогом МК.

Впрочем, все зависит от того, что считать дешевизной. За 20 рублей наверное в МК ДМА не будет.

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

3 часа назад, my504 сказал:

Выигрыша как такового может и не быть, зато структура алгоритма становится гораздо более простой и читабельной, не перегруженной мусором из драйверов.

Весь код драйвера находится внутри функции обработчика прерывания и особо не мешает. Да и скорость работы порой намного важнее, чем красивый код.

Ссылка на комментарий
Поделиться на другие сайты

23 минуты назад, BARS_ сказал:

Весь код драйвера находится внутри

Во первых, далеко не весь. Ну или обработчик содержит то, что не должен содержать - обработку данных. В состав драйвера так или иначе входит некая функция main-а, которая обрабатывая флаги выставленные в обработчиках прерываний, собственно и  занимается данными в первичной их обработке (так, чтобы они соответствовали уровню абстракций основного кода). Ну и структура самих драйверов, очень желательно. чтобы была прозрачной. А то получаются обработчики в которых играют половина имеющихся драйверов и в таком ISR черт ногу сломит.

Во вторых,  МК в котором драйверы создают настолько критический код, что нужно жертвовать структурой алгоритма - это неправильно выбранный МК. Очередной апгрейд под новые требования приведет к полной смене схемотехники. Скупой платит дважды.

Изменено пользователем my504

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы публикуете как гость. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

  • Сообщения

    • @Андрей0З9  Это что за учитель и где, такой по трудовому обучению, задает задачи по физике 10 класса.?!  Бред полный.
    • Румынский дядька - перфекционист-фенечник. Бисера и бусин - дофига, вот и ставит куда не попадя, в данном случае бусинками выставил единую высоту ряда конденсаторов. Подобное встречалось, когда на ножки впаиваемых элементов одевались короткие кембрики одинаковой высоты, чем задавалась единая высота монтажа. Ну видимо румынскому дядьке лень было нарезать кучу одинаковой мелочёвки, зато было вналичии много бисера..., и креативно и желаемого достиг. С уважением, Сергей. 
    • О, это очень полезные регистры! в 88 только GPIOR0 сохранил свои полезные свойства. использую их как флаги событий прерываний. для GPIOR0 адрес порта ввода-вывода 0х1Е, а значит к нему применяются команды cbi, sbi, sbic, sbis   ну и   in, out. Когда происходит прерывание, процессор переходит на адрес обработки прерывания, вот там-то мы и располагаем код: sbi   GPIOR0, 0     ;установить в 1 бит 0 в регистре GPIOR0 reti                        ;вернуться из прерывания   Без использования регистра GPIOR0, а с использованием обычного регистра код выглядел бы иначе: push   R0                          ;освобождаем регистр R0 для SREG и сохраняем его in        R0, SREG               ;сохраняем SREG в R0, все флаги операций текущей программы sbr     R23, 1<<0             ;выставляем флаг признака прерывания, например бит 0 в регистре R23 out    SREG, R0               ;восстанавливаем SREG, все флаги операций текущей программы pop   R0                          ;восстанавливаем значение R0 reti                                  ;вернуться из прерывания   Нетрудно заметить......!   А, да команда: sbr     R23, 1<<0 в идеале изменяет флаги в SREG, потому и такая длинная цепочка команд.
    • Сабсоник 3 порядка потом усилитель на Оу. Далее все на столе отстроить и все 
    • Вот и я думаю сделать на сдвоенном операционнике входной усилитель и сабсоник. 
    • Я всегда подозревал, что эта схема была содрана кЕтайцами с какого-то старого и хорошо известного (но не у нас) блока питания, и что в оригинале использовались именно 741 операционники. И вот тому подтверждение... Все равно те микросхемы и транзисторы что они используют в наборах, чаще всего подделки. Мне например, пришлось заменить D1047 транзистор что шел в наборе на пару таких же, но нормальных (выдраных с дохлого усилка). Транзистор из набора (маркировка явно "левая", без какого-либо намека на изготовителя) сильно грелся даже на 1,5А. Такой же транзистор D1047, но из усилка грелся раза в два меньше, да и маркировка "нормальная".  Подозреваю что и TL081 что в наборе идут тоже возможно что перемаркированные 741 (они супердешевые, сравнимо с 358). 741 операционники выпускали все кому не лень, аналогов было выпущено очень много за полвека.  Были и на плюс-минус 22в, надо смотреть конкретный даташит и производителя, даже от буквы в конце это зависит.  Например, есть такой аналог uA741 от ST ("микро-А741"). ua741-957400.pdf ua741.pdf MA741.PDF
    • Нет. Эта модель TRI для 3фаз. Да и вся разводка сделана для 3х фаз. EVOLUTION Mono ➞ 1~ 230V ± 10% 50/60Гц EVOLUTION Tri ➞ 3~ 400V ± 10% 50/60Гц В конце второй минуты есть внутренности, подключение и включение пульта. Можно заметить, что платы идентичные. 
  • Похожий контент

×
×
  • Создать...