Jump to content
parovoZZ

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

Recommended Posts

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

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

 

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

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

это да...

Share this post


Link to post
Share on other sites
1 час назад, ARV сказал:

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

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

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

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

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

Share this post


Link to post
Share on other sites
Только что, BARS_ сказал:

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

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

Share this post


Link to post
Share on other sites

Вебинар STM32G0 – новый лидер бюджетных 32-битных микроконтроллеров от STMicroelectronics

Компания Компэл приглашает вас 25 сентября принять участие в вебинаре, который посвящен новому семейству микроконтроллеров STM32G0. Вебинар рассчитан на технических специалистов и тех, кто хорошо знаком с семейством STM32. На вебинаре будут освоены современные методы тестирования производительности микроконтроллеров на примере самых бюджетных 32-битных семейств общего назначения STM32G0 и STM32F0 и проведено их подробное сравнение.

Подробнее

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

Мы тут мечтали об аппаратном дрыгании CS-ом

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

Share this post


Link to post
Share on other sites
Только что, BARS_ сказал:

Легко, но

не нужно :) 

Share this post


Link to post
Share on other sites
                     

Литиевые батарейки Fanso в беспроводных датчиках пожарно-охранной сигнализации

Выбор подходящего элемента питания, способного обеспечивать требуемый уровень напряжения и выдавать необходимый ток на протяжении всего периода эксплуатации беспроводной пожарно-охранной системы является одной из первостепенных задач. Наиболее подходящим для этих целей элементом являются литий-тионилхлоридные элементы питания, а одним из наиболее конкурентоспособных производителей – компания Fanso, предлагающая своим клиентам продукты как универсальные, так и разработанные специально для решения конкретных задач.

Подробнее...

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

А какой смысл, если устройство, висящее на SPI, всего одно ?

PS: Есть в PIC'ах такое (аппаратный CS), игрался я с ним. Даже SD-карта работала.

Share this post


Link to post
Share on other sites
26 минут назад, Alex сказал:

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

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

 

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

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

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

Share this post


Link to post
Share on other sites
5 минут назад, BARS_ сказал:

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

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

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

Не прокатит.

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

Share this post


Link to post
Share on other sites
1 минуту назад, Alex сказал:

не во всех.

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

Share this post


Link to post
Share on other sites
Только что, BARS_ сказал:

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

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

Share this post


Link to post
Share on other sites
Posted (edited)
11 минуту назад, Alex сказал:

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

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

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

Edited by my504

Share this post


Link to post
Share on other sites
2 минуты назад, ARV сказал:

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

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

 

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

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

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

Share this post


Link to post
Share on other sites
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_ сказал:

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

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

Share this post


Link to post
Share on other sites
Только что, BARS_ сказал:

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

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

Share this post


Link to post
Share on other sites
Только что, BARS_ сказал:

Было бы бессмысленно - не делали бы, а его делают. 

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

Share this post


Link to post
Share on other sites
Только что, my504 сказал:

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

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

 

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

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

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

 

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

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

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

 

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

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

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

Share this post


Link to post
Share on other sites
31 минуту назад, my504 сказал:

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

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

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

Share this post


Link to post
Share on other sites
Posted (edited)
1 час назад, Alex сказал:

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

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

Edited by my504

Share this post


Link to post
Share on other sites
2 часа назад, BARS_ сказал:

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

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

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

Share this post


Link to post
Share on other sites
26 минут назад, parovoZZ сказал:

Да, DMA - это сказка.

Далеко не всегда. На малых порциях данных он не даст выигрыша.

Share this post


Link to post
Share on other sites
9 часов назад, BARS_ сказал:

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

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

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

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

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

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

Share this post


Link to post
Share on other sites
3 часа назад, my504 сказал:

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

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

Share this post


Link to post
Share on other sites
Posted (edited)
23 минуты назад, BARS_ сказал:

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

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

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

Edited by my504

Share this post


Link to post
Share on other sites

Join the conversation

You are posting as a guest. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Similar Content

    • By parovoZZ
      AREF  - внутренний ИОН 1.1в
      Вот такой код снятия результатов:
      temp = ADC; if (ADCH & (1<<ADCH1)) // Если значение отрицательное { temp |= 0xFC00; temp = (~temp) + 1; } Value_current_lsb = (uint8_t)(temp >> 2); Никак не пойму - на выбранные дифф. входы надо подать 85 мВ, чтобы АЦП выдал 0. Но это могу списать на внутренний ОУ в виде УГ. Если подаю  -1,1 в - то получаю 127.  Здесь все верно. Но при подаче положительного смещения те же 127 получаю уже при 0,72в. Что за ерунда? Неужели ОУ на столько УГ? Либо же где-то теряется разряд?
    • By parovoZZ
      Ну, собственно, сабж. Питание - от 2.4 и до 3.6. На сигнальном выводе необходима половина напряжения питания (по постоянке, разумеется).
    • By parovoZZ
      Не секрет, что адресация глобальных переменных прямая, а переменных в стеке - косвенная. Стек в AVR программный, то бишь откусывается от ОЗУ. Так вот вопрос - при передаче в функцию (и обратно) больших объемов данных (которые невозможно передать через РОН) все же что будет производительнее - через глобальные переменные или через параметры? Понятно, что в функцию вида
      uint8_t My_super_function (uint8_t data); переменные уйдут через РОН,  а вот в такую
      void My_super_function (uint8_t *data, uint8_t *ret); через стек? Так может ну его нафик, стек этот?
    • By parovoZZ
      Поставил LUFA, следом абсолютно не нужный мне ASF. Но в упор не понимаю - как создать проект на базе этой библиотеки из студии? Приходится вручную копировать папку с заголовочниками LUFA, прописывать пути в makefile, лишние телодвижения по добавлению папки в свойства проекта. Если я это делаю всё вручную, то тогда для чего это расширение? Примеры я могу и так покрутить. ЗЫ - не слишком высокий скилл в юзании Atmel Studio/
  • Сообщения

    • Я про сейчас сказал,раньше был патент на торговлю,потом присвоили инн,огрн и добавили отчетности,что ты мне мозги пудришь, я всё помню и все отчеты до сих пор лежат по годам отдельно, занимают половину шкафа.было время платили чтото типа ндс 5% с валовки каждый месяц,книги отчетности,не считая книг операциониста.сам то этого не знаешь а рассказываешь
    • Мы искренне хотели вам помочь но нужно больше конкретики. Просто фотографии не достаточно для выполнения задачи. Да и с САПРом хотелось бы по конкретнее. Можно  сделать то что вы хотите например в Альтиуме или в Менторе и вы продолжите их изучать? Наверняка захотите что нибудь по проще. По тем вопросам что вы задаете должна описываться работа в конкретной программе. Нельзя просто взять любую программу заснять ролик и это подойдет к любой другой программе. Опять же создание 3D моделей компонентов отдельная большая задача.
    • Ты вконец заврался - никаких УСН и ЕНВД    25 лет назад и в помине не было.  Ничего ты не начинал, тебя просто поставили зицпредседателем, а потом выгнали. Выгоняют обычно с таких постов за мелкое воровство,  потому как за крупное имущество у тебя обязательно бы почикали. Но ты потерпи, раз не почикали, значит ты в резерве, еще пригодишься, у них с кадрами проблема. Как один губернатор говорил:  "Пусть дурак, но свой!".  
    • Сцена ДК не так уж плоха. Акустика помещения действительно много значит  и на концертах подстраивается тех. средствами.
    • Да, если он находится в "правильном" зале, да ещё и заполненном зрителями. Читал о каком-то концертном зале, где установлены специальные кресла, поглощение/отражение звука которых не зависит от того, сидит в нём человек или нет. P. S. А пианино в голом школьном спортзале звучит ужасно...
    • 50в*10А= 500вт. БП 2-х полярный, итого 100в*10А= 1квт. Может вам сварочный тр-р применить типа "Москит" ? Ещё ведь КПД тр-ра учесть надо.
    • как же нет? на приведенной тобой принципиальной схеме тоже А1 и А2 соединены с граундом. все твои изменения в схеме - полная чепуха. никаких внешних ОУ перед усилителями ошибки НЕ ДОЛЖНО БЫТЬ вообще. мне твое желание иметь индикацию по фигу. не надо рабочую схему превращать в нерабочую. более того, в моей схеме и в прошивке уже предусмотрена индикация стабилизации тока. ничего дополнительно внешними цепями делать не надо. и что это за "комбинация" из ЦАПов и переменных резисторов? и что это за делитель такой из резисторов R60 и R62 между граундами? что он должен делить между точками с равным потенциалом? решил делать измеритель - делай, а не калечь схему моего БП.
×
×
  • Create New...