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

Вопрос про DMA (STM32F4/F7)

Вопрос про DMA (STM32F4/F7):

для чего нужна работа DMA с double buffer?

Чем оно в принципе отличается от работы с двумя прерываниями, по половине и по концу?

Пока вижу только одно отличие - ограничение в 65535 байт в одном случае для каждого из двух буферов, а в другом для одного (который из двух половинок), но может еще чего-то недочитал?

 

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


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

15 минут назад, Allregia сказал:

Чем оно в принципе отличается от работы с двумя прерываниями, по половине и по концу?

Тем что используются два разных буфера, несмежных.

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


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

59 minutes ago, jcxz said:

Тем что используются два разных буфера, несмежных.

А чем это так существенно?

 

P.S. Мне вобще больше нравится как это было в LPC1768 сделано - буферов не два а сколко угодно, связным списком.

 

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


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

18 hours ago, Allregia said:

А чем это так существенно?

Пример из головы: буфер - данные, приписываем заголовок и хвост, отправляем куда-то дальше.

 

18 hours ago, Allregia said:

как это было в LPC1768

У NXP вообще всё лучше было сделано. И уарты, и I2C, и фифо в SPI (блин, примитивная ж вещь, но ST её рожала лет 8).

Но зоопарк "каждому желающему - свой камень", да ещё и за три копейки, сделали именно ST'шники.

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


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

20 часов назад, Allregia сказал:

А чем это так существенно?

Существенно когда нужно отправлять данные из разных, несмежных участков памяти. Без остановки на границе между этими двумя участками.

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


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

Модератор:беседу "какой УАПП лучше" перенес в отдельную ветку: 

 

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


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

20 hours ago, jcxz said:

Существенно когда нужно отправлять данные из разных, несмежных участков памяти. Без остановки на границе между этими двумя участками.

Я понимаю, просто мне это пока ниразу не понадобилось.

Чаще всего у меня передается или принимается поток,  и пока одна половинка буфера передает/принимает по ДМА, во вторую я пишу/читаю. В таком режиме, как я сказал, разница только в максимальной величине "половинки" - 32768 или 65535.

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


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

Кажется, в случае Double Buffer можно менять адреса "на лету". Т.е. по идее это не Double Buffer, а Multi Buffer.

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


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

4 часа назад, RedHeadIvan сказал:

Кажется, в случае Double Buffer можно менять адреса "на лету". Т.е. по идее это не Double Buffer, а Multi Buffer.

Это просто double buffer. Так как для смены адреса нужен CPU. В связном списке можно сразу запрограммировать цепочку буферов, не дёргаясь в прерывание после каждого куска.

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


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

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

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

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

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

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

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

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

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

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