К1921ВГ015 DMA+TMR

32-разрядные микроконтроллеры разработки АО "НИИЭТ"

Модераторы: ea, dav, bkolbov, Alis, pip, _sva_

dezna
Сообщения: 36
Зарегистрирован: 20 дек 2024, 08:23
Предприятие: avtomatica

К1921ВГ015 DMA+TMR

Сообщение dezna »

задача такая:
таймер генерит шим по 2м каналам CAPCOM[2] и CAPCOM[3].
режим таймера 1, от 0 до CAPCOM[0].
имеем буфер по 2 значения для таймера.
каким образом запихивать по событию CAP0 через DMA данные из буфера в 2 регистра. выход шим многоканальный.
т.е. например буфер на 16 значений,
при первом CAP0 значения 0 и 1 попадают в CAPCOM[2] и [3] соответственно
при втором - 2 и 3 попадают в CAPCOM[2] и [3] соответственно
и т.д. до конца буфера. при дохождении до конца циклически поновой.
подходит только разборка сборка для периферии, но тогда нужно еще куча структур для каждой итерации. хорошо когда итераций всего 16/2... а когда 256? это уже килобайт.
но я так понял что для этого режима нет цикла...
у стм это было красиво решено. в настройке DMA таймера задавалось количество передач, ну и в какие регистры помещать данные, при этом DMA писал в один единственный регистр.
как в вашем случае решить такую задачу?
немного не понял, можно ли на один запрос от таймера посадить 2 канала DMA? чтоб переллельно писать в оба регисра поодиночке из своих буферов?
dezna
Сообщения: 36
Зарегистрирован: 20 дек 2024, 08:23
Предприятие: avtomatica

Re: К1921ВГ015 DMA+TMR

Сообщение dezna »

dezna писал(а): 04 фев 2025, 13:03 а когда 256? это уже килобайт.
ошибся, а исправить уже не могу. не 1 килобайт а 4...
по 16 байт на структуру
dav
Сообщения: 224
Зарегистрирован: 14 дек 2015, 08:21
Предприятие: АО НИИЭТ
Откуда: АО НИИЭТ, Воронеж

Re: К1921ВГ015 DMA+TMR

Сообщение dav »

dezna писал(а): 04 фев 2025, 13:03 как в вашем случае решить такую задачу?
немного не понял, можно ли на один запрос от таймера посадить 2 канала DMA? чтоб параллельно писать в оба регистра поодиночке из своих буферов?
Доброго времени суток!

К сожалению, для каждого таймера доступно по одному каналу DMA.
Чтобы параллельно писать в оба регистра поодиночке из своих буферов можно запараллелить два таймера, в том числе и входы блоков захвата.
Второй вариант - вместо передачи DMA использовать механизм прерываний.
dezna
Сообщения: 36
Зарегистрирован: 20 дек 2024, 08:23
Предприятие: avtomatica

Re: К1921ВГ015 DMA+TMR

Сообщение dezna »

dav писал(а): 04 фев 2025, 15:53 К сожалению, для каждого таймера доступно по одному каналу DMA.
Чтобы параллельно писать в оба регистра поодиночке из своих буферов можно запараллелить два таймера, в том числе и входы блоков захвата.
Второй вариант - вместо передачи DMA использовать механизм прерываний.
Доброго дня!
спасибо! жаль...
к сожалению у вас слишком мало таймеров, чтоб на каждый выход выделять по одному...
только и остается прерываниями вешать систему...
может вам стоит добавить механизм как у СТМ? было бы оч удобно! да и таймеров бы добавить не мешало...

кстати...
вопрос по DMA
по прерыванию от внешнего контакта DMA должен брать значение таймера и помещать в буфер.
2R ставлю 0, т.е. арбитраж после каждого запроса.
а если не будет внешнего прерывания, никто не дернул ногой?
все остальные запросы DMA от других каналов не будут обработаны?
Последний раз редактировалось dezna 04 фев 2025, 16:11, всего редактировалось 1 раз.
ches
Сообщения: 58
Зарегистрирован: 07 сен 2022, 17:08
Предприятие: АО НИИЭТ
Откуда: Воронеж

Re: К1921ВГ015 DMA+TMR

Сообщение ches »

dezna писал(а): 04 фев 2025, 13:03 чтоб переллельно писать в оба регисра поодиночке из своих буферов?
Добрый день!
Можно в обработчике прерывания от CAPCOM[0] перенастраивать и программно запускать два (или более) канала DMA. Каждый будет брать данные из своего буфера и класть в свой необходимый регистр.
Останется только вопрос максимальной возможной частоты ШИМ при таком подходе
dezna
Сообщения: 36
Зарегистрирован: 20 дек 2024, 08:23
Предприятие: avtomatica

Re: К1921ВГ015 DMA+TMR

Сообщение dezna »

ches писал(а): 04 фев 2025, 16:10 Добрый день!
Можно в обработчике прерывания от CAPCOM[0] перенастраивать и программно запускать два (или более) канала DMA. Каждый будет брать данные из своего буфера и класть в свой необходимый регистр.
Останется только вопрос максимальной возможной частоты ШИМ при таком подходе
Добрый день!
на сколько это будет проще чем просто по прерыванию из буфера перемещать значения в CAPCOM[2,3]?
шим не прям скоросной, рассчет из того что минимальный импульс 0,5мкс.
делителя частоты 8 тоже не хватает...
ладно, буду изголяться...

кстати, не плохо было бы для каждого таймера ввести делитель частоты и вместо CAPCOM[0] отдельный регистр, иначе не возможно генерить 4 канала шим на одном таймере... ну и захват будет работать с гораздо большими временными рамками, которые можно будет настраивать!
ches
Сообщения: 58
Зарегистрирован: 07 сен 2022, 17:08
Предприятие: АО НИИЭТ
Откуда: Воронеж

Re: К1921ВГ015 DMA+TMR

Сообщение ches »

dezna писал(а): 04 фев 2025, 16:10 вопрос по DMA
по прерыванию от внешнего контакта DMA должен брать значение таймера и помещать в буфер.
2R ставлю 0, т.е. арбитраж после каждого запроса.
а если не будет внешнего прерывания, никто не дернул ногой?
все остальные запросы DMA от других каналов не будут обработаны?
Параметр R_POWER задается для каждого канала индивидуально.
По большому счету он имеет значение при попытке нескольких каналов одновременно пересылать данные и нужен для задания приоритетности в работе каналов.
В Вашем случае канал еще не начал работу и все остальные запросы будут обработаны.
dezna
Сообщения: 36
Зарегистрирован: 20 дек 2024, 08:23
Предприятие: avtomatica

Re: К1921ВГ015 DMA+TMR

Сообщение dezna »

ches писал(а): 04 фев 2025, 16:23 Параметр R_POWER задается для каждого канала индивидуально.
По большому счету он имеет значение при попытке нескольких каналов одновременно пересылать данные и нужен для задания приоритетности в работе каналов.
В Вашем случае канал еще не начал работу и все остальные запросы будут обработаны.
спасибо!
а если один раз уже сработало и все?
ches
Сообщения: 58
Зарегистрирован: 07 сен 2022, 17:08
Предприятие: АО НИИЭТ
Откуда: Воронеж

Re: К1921ВГ015 DMA+TMR

Сообщение ches »

dezna писал(а): 04 фев 2025, 16:21 на сколько это будет проще чем просто по прерыванию из буфера перемещать значения в CAPCOM[2,3]?
Да, согласен, наверное в данном случае это не слишком оправдано.
Это будет полезно при передаче через DMA больших объемов данных, чтобы сократить время работы обработчика прерываний и разгрузить ядро.
ches
Сообщения: 58
Зарегистрирован: 07 сен 2022, 17:08
Предприятие: АО НИИЭТ
Откуда: Воронеж

Re: К1921ВГ015 DMA+TMR

Сообщение ches »

dezna писал(а): 04 фев 2025, 16:25 а если один раз уже сработало и все?
После этого нужно перенастроить канал. После выполнения передачи он перейдет в режим "недействительный" если не настроен циклический режим. Если настроен то перенастраивать не нужно. И далее все должно работать в как первый раз
Ответить

Вернуться в «32-разрядные микроконтроллеры»