-
- Да без проблем можно сделать, как по ссылке, где я вопрос задавал. Надо настроить таймер на нужную частоту в Кубе, в свойствах таймера включить DMA - там появится Periferal to Memory далее в коде пишите передачу DMA в буфер. Но в вашей задаче я бы все делал по таймерному прерыванию, или прерыванию от GPIO на ноге входного сигнала. - Mty1(23.04.2024 00:12)
- Какая требуется разрядность? Если 8-12 бит, то есть смысл посмотреть в сторону DCMI. - LightElf(22.04.2024 18:43)
- Я так понимаю проблемы с пониманием что такое DMA, оно же ПДП. Это,
тупо, пересылка из одной ячейки памяти в другую (не отвлекая на
такую тупую работу процессор), адрес источника и/или приемника
определяется через индексный регистр. Индексный регистр может
оставаться неизменным, инкрементироваться по модулю (кольцевой
режим) или до какой-то величины. Для того чтобы пересылка произошла
нужен внешний пинок (событие). Этим событием может быль
переполнение таймера, IBAH(108 знак., 22.04.2024 18:23)
- В моем случае у меня была проблема с пониманием, что можно, а что
нельзя. Я засомневался, что можно ставить адресом назначения адрес
периферии, не описанной явным образом в списке "Peripherals
supported: timers, ADC, SPIs, I2Cs and USARTs" и не присутствующей
на диаграмме "DMA block diagram in low-, medium- high- and
XL-density devices". Теперь понятно, что в ней акцент надо делать
на исходящих ОТ периферии линиях "DMA request". - pavel2000(22.04.2024 20:11)
- Запрос и адреса пересылки вещи ортогональные. Можно по запросу АЦП писать в ЦАП из памяти. DMA умеет пересылки с тем, что подключено к "матрице шин" (см.рис.). Для 103 можно все. А умеет ли периферия генерировать запрос DMA, это надо смотреть в описании периферийного модуля. IBAH(1 знак., 22.04.2024 20:49, картинка)
- В моем случае у меня была проблема с пониманием, что можно, а что
нельзя. Я засомневался, что можно ставить адресом назначения адрес
периферии, не описанной явным образом в списке "Peripherals
supported: timers, ADC, SPIs, I2Cs and USARTs" и не присутствующей
на диаграмме "DMA block diagram in low-, medium- high- and
XL-density devices". Теперь понятно, что в ней акцент надо делать
на исходящих ОТ периферии линиях "DMA request". - pavel2000(22.04.2024 20:11)
- А что вам даст ДМА? Впадайте в прерывание от ноги, вычитывайте и
анализируйте на здоровье. - mse homjak(22.04.2024 17:38)
- В частном случае всё прекрасно реализовалось на софтовом опросе EXTI->PR, т.к. у процессора нет другой задачи кроме трансляции входа на выход, и период поступления нового байта достаточно большой (порядка 5мкс). За это время вполне успеваю и обработать и передать на целевой LCD даже 12 байт (LCD допускает минимальный период порядка 100нс), которые формируются на основании забуферизированных ранее трех байт графической информации. pavel2000(228 знак., 22.04.2024 19:49)
- Поддержу, все должно получиться. Синхроимпульс заводится на ногу CC
какого-нибудь таймера. А по событию CC или UPD запускать DMA. - il-2(22.04.2024 17:25)
- Да, примерно понял как это делать. Спасибо. Выделить достаточно большой буфер, настроить ему цикличность, а дальше программно следить за тем, сколько там DMA передало, используя DMA_CNDTRx. К сожалению на конкретно этой плате на реальном примере не получится играться, т.к. сигналы разведены для удобства ручного изготовления однослойной платы. Управляющие сигналы шины-источника заходят в один порт, а линии данных - в другой, и наоборот для подключенного LCD. В принципе это pavel2000(372 знак., 24.04.2024 13:21)
- Всё должно работать. Когда пишут ограниченный набор периферии,
имеют в виду ту периферию, которая может вырабатывать запрос DMA,
КМК. Вы можете использовать для этого таймер, а DMA по запросу
будет работать с регистрами GPIO. - SciFi(22.04.2024 16:33)
- Да, понял, спасибо. - pavel2000(22.04.2024 20:03)