2015-04-09 2 views
0

Я хочу по потоку данных, байт-байт, из ОЗУ в порт (контакты GPIO) на ARM Cortex M3 (и, возможно, M4 в будущем).Контролируйте скорость DMA ARM Cortex M3/M4 для периферийных устройств.

Есть ли способ контролировать скорость, относительно скорости шины?

Если у меня работает M3 на частоте 100 МГц, могу я сделать DMA на частоте 10 МГц, например?

+1

Cortex-M3 - это всего лишь процессорное ядро ​​- не зная, какой фактический MCU является частью M3, никто не знает, что у вас есть у контроллера DMA, и на что это способно. Кроме того, вы говорите о _writes для контроллера GPIO_, происходящего на частоте 10 МГц, или _data на внешних контактах смены на 10 МГц? Первое кажется немного странным, и для одного есть одно очевидное решение для гетто - просто напишите каждое слово 10 раз. Для этого, нужно ли вам дублировать данные вручную или контроллер DMA может это сделать, вы возвращаете меня в первую точку. – Notlikethat

+0

@Notlikethat: Передача DMA занимает намного больше одного такта, и точное время не является детерминированным в полезном виде. – Pait

ответ

2

Есть ли способ контролировать скорость относительно скорости шины?

Используйте таймер для запуска передачи DMA.

Если у меня работает M3 на частоте 100 МГц, могу я сделать DMA на частоте 10 МГц, например?

Зависит от реализации микроконтроллеров GPIO, DMA и таймера. Обычно это не ARM предоставила периферийные устройства - поставщики реализуют их по-разному.

+0

Я ищу, чтобы контролировать скорость передачи DMA. Пожалуйста, поправьте меня, но не использовал бы таймер для запуска переноса DMA, только если он начнется? (Если я не использую несколько 1-байтовых передач DMA, управляемых таймером, или это ваша точка?) – fadedbee

+0

В зависимости от вашего MCU DMA может поддерживать пост-инкремент памяти или периферийного указателя, так что после каждой транзакции указатель увеличивается на единицу. Поэтому каждый раз, когда таймер запускает DMA, он передает один байт/слово/слово в GPIO, а затем увеличивает указатель исходной памяти на единицу. Вы можете настроить его для остановки после определенного количества байтов или для обертывания в режиме циклического буфера. Как и Turbo J, все зависит от того, что поддерживает ваш Cortex-M3 MCU. –

+0

@chisdew Вы должны либо уточнить свой точный микроконтроллер, чтобы получить более подробный ответ или принять его. – Pait

Смежные вопросы