Size: a a a

2021 March 25

AT

Alexander Troshin in Embedded Group
Evgen
Всем доброе утро
кто-то работал с usart+dma, когда длина пакета изначально не известна ?
Использовали флаг USART Idle и таймер для таймаума, если первого недостаточно?
Вы на прием хотите сделать? Хал или лл используется? И серия мк какая? F4, F7,
Я idle прерывание установил, описал обработчик и запустил прием функцией с дма +idle. В хал посмотрите ее реализацию, если у вас лл.
источник

E

Evgen in Embedded Group
Alexander Troshin
Вы на прием хотите сделать? Хал или лл используется? И серия мк какая? F4, F7,
Я idle прерывание установил, описал обработчик и запустил прием функцией с дма +idle. В хал посмотрите ее реализацию, если у вас лл.
да на прием
Хороший пример нашел на гитхабе, изучаю
источник

ND

Nikita D in Embedded Group
Evgen
Всем доброе утро
кто-то работал с usart+dma, когда длина пакета изначально не известна ?
Использовали флаг USART Idle и таймер для таймаума, если первого недостаточно?
дма в кольцевом режиме, и задача опроса изредка  strchr искала начало строки + проверка конца, но там потеря пару посылок не важна была
источник

E

Evgen in Embedded Group
Nikita D
дма в кольцевом режиме, и задача опроса изредка  strchr искала начало строки + проверка конца, но там потеря пару посылок не важна была
у меня скорость низкая
а вот терять пакеты незя
источник

jp

jon pedro in Embedded Group
Evgen
у меня скорость низкая
а вот терять пакеты незя
А у ст нельзя генерировать отправку по dma по событию "в буфере 10 элементов" или, если долго не до заполняется сделать передачу с выставлением флага для обработки, что дма буфер получил не 10 значений а 3, например?
источник

A

Alexander in Embedded Group
Evgen
Всем доброе утро
кто-то работал с usart+dma, когда длина пакета изначально не известна ?
Использовали флаг USART Idle и таймер для таймаума, если первого недостаточно?
У L4 есть флажок таймаута по приёму. Этого хватало.
источник

E

Evgen in Embedded Group
Alexander
У L4 есть флажок таймаута по приёму. Этого хватало.
у меня на столе сейчас только f1 для всех тестов, я бы тож хотел флажок по приему, половину проблем бы закрыл
источник

E

Evgen in Embedded Group
jon pedro
А у ст нельзя генерировать отправку по dma по событию "в буфере 10 элементов" или, если долго не до заполняется сделать передачу с выставлением флага для обработки, что дма буфер получил не 10 значений а 3, например?
у ф1 там флаг только, что линия пустая и конец посылки
Но там именно длину сообщения посчитать сложнее
источник

A

Alexander in Embedded Group
Evgen
у меня на столе сейчас только f1 для всех тестов, я бы тож хотел флажок по приему, половину проблем бы закрыл
Тогда костылить с доп, таймером.
источник

jp

jon pedro in Embedded Group
Evgen
у ф1 там флаг только, что линия пустая и конец посылки
Но там именно длину сообщения посчитать сложнее
Если ресурсы свободные есть, то можно с определённой частотой брать 1 элемент из фифы и обработчик на машине состояний посылок. Получается очень легковестно. У меня так модбас реализован, цикл работы становится очень мелким, что в итоге не особо сказывается на работе программы, т.к обработчик совсем с парой операций.
Это как простой вариант
источник

A

Alexander in Embedded Group
Если таймауты разумные типа десятков мс - можешь NDTR у DMA контроллера мониторить. Если долго не менялся - пакет получен.
источник

E

Evgen in Embedded Group
Alexander
Тогда костылить с доп, таймером.
хмм, ну вот я не знаю надо ли оно мне у меня 100 мс минимум между посылками есть, там по идее IDLE должен успеть
А костылить как?
таймер от дма
источник

E

Evgen in Embedded Group
jon pedro
Если ресурсы свободные есть, то можно с определённой частотой брать 1 элемент из фифы и обработчик на машине состояний посылок. Получается очень легковестно. У меня так модбас реализован, цикл работы становится очень мелким, что в итоге не особо сказывается на работе программы, т.к обработчик совсем с парой операций.
Это как простой вариант
я могу вообще все через прерывания
Но хочу сделать красиво через дма
источник

AK

Anton Kirilenko in Embedded Group
после приёма каждого байта запускать таймер. в обработчике таймера взводить флаг, если истекло 100 мс
источник

A

Alexander in Embedded Group
Evgen
хмм, ну вот я не знаю надо ли оно мне у меня 100 мс минимум между посылками есть, там по идее IDLE должен успеть
А костылить как?
таймер от дма
Технически ты можешь сделать таймер, который в прерывании мониторит счетчик DMA.
источник

E

Evgen in Embedded Group
Anton Kirilenko
после приёма каждого байта запускать таймер. в обработчике таймера взводить флаг, если истекло 100 мс
это если по прерыванию
а меня по дма интересует
источник

A

Alexander in Embedded Group
Anton Kirilenko
после приёма каждого байта запускать таймер. в обработчике таймера взводить флаг, если истекло 100 мс
Это гемор.
На больших baudrate будет куча прерыааний
источник

AK

Anton Kirilenko in Embedded Group
с дма ебитесь-с сами.
источник

E

Evgen in Embedded Group
Alexander
Технически ты можешь сделать таймер, который в прерывании мониторит счетчик DMA.
надо попробовать по Idle, мб там больше и не понадобится скорость 9600
и 100 мс что ли между пакетом точно есть
источник

E

Evgen in Embedded Group
Alexander
Это гемор.
На больших baudrate будет куча прерыааний
тип счетчик не менялся 100 мс значит новый пакет?
источник