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

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

Для передачи вообще можно аппаратный вывод с регистра compare таймера использовать. Ну или тот же UART если больше нравится.

Да, конечно прерываний будет немного больше.

Можно вообще без прерываний... на ДМА... типа аппаратно... Это уже кому как больше нравится...

Поделиться сообщением


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

Forger,

Зачем дергать прерывания раз в 1мкс? 01.gif

У 1-wire все времена указаны как минимум от 15мкс.

Если Вы внимательно прочитаете мое сообщение, то увидите, что я говорил по ХУДШИЙ случай. Конечно, в большинстве случаев такие реакции таймера не нужны.

 

scifi,

1-wire удобно делается на уарте, там нет всей этой головной боли.

Будем считать, что ног в корпусе не осталось. И это не допущение, а факт.

 

AlexandrY,

Прерывания все надо профайлить до такта чтобы узнать бюджет задержек, что автор как бы и начал делать, но видимо решил, что и так сойдёт. Т.е. продолжает цепь ошибок.

Я не решил, что и так сойдет. Я попытался найти оптимальный выход из ситуации. Напомню, что переделывать железо никто не будет, а то, что 180МГц Cortex-M4F не сможет правильно и лаконично обработать датчик на фоне других процессов - не поверю.

 

jcxz,

Работу 1-wire естественно эмулировать при помощи capture- и compare- режимов какого-либо таймера. Ногодрыг или UART - это колхоз.

Если бы 1-Wire был выведен на ножку аппаратного таймера, я бы не задавал таких вопросов.

Очевидно, я спрашивал не про то, как мне переделать железо, а про то, как архитектурно продумать программную часть. Тут товарищи некоторые осциллографы с ЖК-экранами на сраных 8-битных AVR-ках делают с красивым меню, и памяти хватает, и более-менее опрятно выглядит, а меряет как китайщина с Aliexpress (то есть вполне допустимо для радиолюбительских поделок для монитора SPI, I2C и пр.). Поверьте, перезаполнять регистр совпадения таймера в прерывании по каждому прерыванию для автомата состояний, ЛИБО делать то же самое но дополнительно дернуть ножкой при этом программно - разница не существенная абсолютно в данном случае, ибо не двигателем управляем.

 

P.S.: На ум все-таки приходит вариант с DMA на регистр совпадения... Но в прерывании ножку дергать, так как заведена не на таймер...

 

В общем, почитав Ваши комментарии, я пришел к выводу, что... что никакого вывода, собственно, и нет. Кто-то делал так, кто-то делал так. Кто-то кого-то поливает говном, называя последнего быдлокодером, кто-то, в свою очередь, считает наоборот. Из всего прочитанного можно лишь сделать одно заключение - что бы ты ни делал - другие буду считать сделанным через одно место... Люблю этот форум:rolleyes:

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

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

Поделиться сообщением


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

Если Вы внимательно прочитаете мое сообщение, то увидите, что я говорил по ХУДШИЙ случай.
1 мкс - НЕКУДЫШНЫЙ случай. Можно прекрасно ограничиться 5мкс, например.

 

 

Конечно, в большинстве случаев такие реакции таймера не нужны.
Вы уж определитесь, наконец, какую помощь ожидаете тут получить?

Поделиться сообщением


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

...никакого вывода, собственно, и нет. Кто-то делал так, кто-то делал так. ...Изящное решение найду...Всех с наступающим Новым Годом!

 

Вы правы - пока прозвучала реализация двумя путями:

- ногодрыг в прерываниях

- уарт

 

всевозможные потуги на захватах и дма = нас всех туда тянет, но увы отличия от ногодрыга минимальные, что нивелирует (ну или почти) весь колхоз и нагромождение... по крайней мере

раздувание в эту степь щёк - так и осталось хотелками (у тех кто прямо заявлял что это кашэрно)...

Из всех озвученных вариантах - для варианта промышленного (куча датчиков и каждый датчик = свой вход) остаётся одын единственный вариант - ногодрыг.

 

вот своё изящное решение - это правильная колбаса. ведь всё зависит от поставленной задачи.

 

и Вас с новым годом!

 

с уважением

(круглый)

 

 

Поделиться сообщением


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

всевозможные потуги на захватах и дма = нас всех туда тянет, но увы отличия от ногодрыга минимальные, что нивелирует (ну или почти) весь колхоз и нагромождение... по крайней мере

раздувание в эту степь щёк - так и осталось хотелками (у тех кто прямо заявлял что это кашэрно)...

Из всех озвученных вариантах - для варианта промышленного (куча датчиков и каждый датчик = свой вход) остаётся одын единственный вариант - ногодрыг.

Это просто один вариант вы и знаете... Так бывает...

Поделиться сообщением


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

Это просто ..

 

я с удовольствие(на полном серьёзе) послушаю Вас, про ваше виденье решения. Вы кажется декларировали опыт использования ПДП(DMA) для поддержки 1-Wire протокола?

 

с уважением

(круглый)

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

Поделиться сообщением


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

я с удовольствие(на полном серьёзе) послушаю Вас, про ваше виденье решения. Вы кажется декларировали опыт использования ПДП(DMA) для поддержки 1-Wire протокола?
1-wire не делал, а одновременный прием четырех и передачу восьми независимых каналов ARINC429 на stm32f050 реализовывал. Там скорость 100 кбит, если что. В памяти массив, в этот массив пишется желаемая выходная диаграмма. Этот массив по таймеру через ПДП загоняется в выходной регистр порта. Если в порту есть ноги, которые надо дергать независимо - пишем желаемое их состояние в соответствующий бит всех элементов массива, после чего дергаем ногой. Второй канал ПДП по тому же таймеру заносит в кольцевой буфер состояние входного регистра. Заполнили половину буфера - обрабатываем, ПДП в это время заполняет вторую половину буфера. 1-wire можно реализовать по тому же принципу.

Поделиться сообщением


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

1-wire можно реализовать по тому же принципу.

Совершенно верно... Там даже все проще чем кажется... при куче вариантов... В простейшем варианте... один массив из двух значений по ЖПИО... другой - времянки слотов... третий - чтение состояния шины.... Заюзав прелоад там все отрабатывается автоматически... Остаётся распарсить принятые данные... Даже если там 16 каналов... это уже не напряжно...

Заюзав два эвента на один канал ДМА... можно сэкономить на канале ДМА...

Поделиться сообщением


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

Сергей Борщ,

...одновременный прием четырех и передачу восьми независимых каналов ARINC429...

Коллегам с оборонки (авиация?) отдельный привет :)

 

Собственно говоря, чего тут уже изобретать. Сделал автомат формирования времянки слотов 1-Wire на прерывании по переполнению таймера.

Код в прерывании меньше 1мкс, сколько точно не скажу, ибо мерял таймером с шагом 1мкс. Но это уже допустимый вариант. Прерывание имеет бОльший приоритет относительно всех используемых прерываний FreeRTOS, поэтому прерывание не может быть перебито RTOS. В прерывании выдается статичный флаг в низкоприоритетную задачу опроса датчиков. Соответственно на критичных временных интервалах перебития контекста происходить не будет.

Поделиться сообщением


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

Сергей Борщ,

 

Коллегам с оборонки (авиация?) отдельный привет :)

Не, все гораздо приземленнее - любители-строители домашних полноразмерных кабин самолетов для авиасимуляторов. "Оживление" настоящих приборов.

 

Поправил ссылку. Еще одна.

Поделиться сообщением


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

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

Не очень понятно что такое "перебитие контекста" и чем оно так страшно?

Также не понимаю - зачем FreeRTOS-у использовать какие-то прерывания кроме прерывания SysTick? (PendSV можно не учитывать, так как оно априори должно иметь приоритет ниже любого аппаратного прерывания).

Поделиться сообщением


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

1-wire не делал, а одновременный прием четырех и передачу восьми независимых каналов ARINC429 на stm32f050 реализовывал. Там скорость 100 кбит, если что. ...

 

Ну в общем аналогичный способ я применяю для изготовления 8ми I2S-интерфейсов на LPC1768. 3Mbps (48к*32 бита * 2 канала) на каждом получается. Причем, BICK (клок битов) приходит снаружи, а не генерируется внутри, это, правда, потребовало некоторых извращений - внешний клок подается на таймер в режиме счета импульсов снаружи, а максимальное значение таймера установлено в 1, вот он и генерирует DMAREQ каждый фронт (или спад, зависит от режима детектора у таймера) внешнего сигнала.

 

CPU load просто смешной. Хотя, конечно, есть нюансы в транспонировании битовой матрицы, чтобы из принятой колбасы битов получить обычные int32.

 

Обработать так один канал 1-wire - это просто как два пальца.

Поделиться сообщением


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

Кстати, а как вы его меряете?

 

Да есть же масса способов. Самый простой - измерить сначала в основном потоке количество богомипсов без обработки периферии, а потом - с обработкой.

Поделиться сообщением


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

Да есть же масса способов. Самый простой - измерить сначала в основном потоке количество богомипсов без обработки периферии, а потом - с обработкой.

Лишь хотел уточнить учитывается загрузка лишь голого ядра или загрузку всего проца с учетом его встроенной периферии :laughing:

 

Поделиться сообщением


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

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

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

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

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

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

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

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