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

LPC17xx и DMA

Привет.

 

Вчера почитал мануал (UM10360 LPC17xx User manual Rev. 01 — 4 January 2010) по части GPDMA и, так сказать, много думал.

Вроде с "пакетным" режимом ДМА всё просто - при запросе пересылается сразу несколько слов, вместо одного.

 

Но вот как, например, будет работать такой ДМА вместе с SSP?

На передачу проблемы не вижу - ставим длину пакета в 8 слов (по размеру FIFO) и вперёд - будем забивать сразу весь FIFO.

 

Непонятки с чтением из SSP - как можно применить к чтению пакетный режим?

Запрос к DMA на пересылку, как правило идёт сразу после того, как в FIFO приёмника появились данные.

То есть приняли один байт - DMA его перекинул. А тут нужен пакет в 8 байт, к примеру. Как это будет работать?

 

Неужели SSP настолько интеллигентен, что будет выставлять запрос только после того, как в фифо накопится количество байт, заданное в регистрах DMA как длина пакета?

Что-то не верится совсем, ерунда какая-то :(

 

Плюс в мануале применительно к SSP проскакивает прерывание "таймаута" для приёмного фифо - но как задаётся значение таймаута или чему оно равно - в мануале не нашёл.

Очень странно :(

 

ЗЫ: с расстройства запостил тему несколько не в том месте - просьба перенести её в раздел для ARM :)

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


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

Ну вот, неужели никто не юзает DMA в "пакетном" режиме?

 

Этот модуль должен быть не только в 17хх, но и в других АРМах от NXP.

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


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

Странно он как-то работает. Пытался заставить работать DMA с SSP в 16-битном режиме, так м не получилось. Логики так и не понял, из описания кстати непонятно, в каких единицах задается длина обмена.

Могу посоветовать читать первоисточники на сайте ARM, а не их сокращенный пересказ от NXP.

PrimeCell ® DMAController (PL080) Technical Reference Manual

Наиболее похожий вариант.

 

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


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

Странно он как-то работает. Пытался заставить работать DMA с SSP в 16-битном режиме, так м не получилось. Логики так и не понял, из описания кстати непонятно, в каких единицах задается длина обмена.

Могу посоветовать читать первоисточники на сайте ARM, а не их сокращенный пересказ от NXP.

PrimeCell ® DMAController (PL080) Technical Reference Manual

Наиболее похожий вариант.

Спасибо за ссылку, надо будет ознакомиться.

 

Насчёт длины обмена - по мануалу длина пакета (для burst режима) и ширина слова задаются в DMA channel control register (DMACCxControl).

Вроде всё однозначно.

 

 

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


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

Может быть поможет, прикрепляю архив, где я работаю с SPI флешкой M25P80 по DMA через порт SSP

SPI_Flash_tst.zip

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


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

Может быть поможет, прикрепляю архив, где я работаю с SPI флешкой M25P80 по DMA через порт SSP

Спасибо, в этом примере Вы работаете с DMA в обычном режиме, а меня интересует пакетный burst режим.

 

То есть пересылка за один запрос от периферии сразу 4 или 8 байт.

В мануале сказано, что так делать более эффективно.

 

Честно говоря, начинаю склоняться к мнению, что мануалы от для LPC ничем не лучше STMовских в плане неполной документированности :(

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


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

Спасибо, в этом примере Вы работаете с DMA в обычном режиме, а меня интересует пакетный burst режим.

 

То есть пересылка за один запрос от периферии сразу 4 или 8 байт.

В мануале сказано, что так делать более эффективно.

 

Честно говоря, начинаю склоняться к мнению, что мануалы от для LPC ничем не лучше STMовских в плане неполной документированности :(

 

Пардон, первый раз тему читал между строк, теперь перечитал всю тему.

 

Непонятно, что Вы хотите сгородить с SSP и Burst режимом.

Использование Burst режима хорошо иллюстрируется при работе в АЦП:

АЦПшка закончила оцифрову данных допустим по 4 входам (поочереди мультиплексируя) и выставила запрос на DMA. DMA контроллер в Burst режиме считал махом сразу все 4 значения (т.е. 4 чтения приходятся на один DMA запрос).

 

На странице 600 мануала написано:

SBSize : Source burst size. Indicates the number of transfers that make up a source burst. This value must be

set to the burst size of the source peripheral, or if the source is memory, to the memory boundary

size. The burst size is the amount of data that is transferred when the DMACBREQ signal goes

active in the source peripheral.

 

Т.е. если переферия не поддерживает Burst режим (например SSP), то и не стоит над этой переферией издеваться.

 

P.S.: У NXP, на мой взгляд, очень толковая документация.

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


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

Т.е. если переферия не поддерживает Burst режим (например SSP), то и не стоит над этой переферией издеваться.

 

P.S.: У NXP, на мой взгляд, очень толковая документация.

Так в том то и дело, что SSP поддерживает пакетный режим (наряду с одиночным) - посмотрите табличку в разделе по GPDMA.

Или мануал Вы тоже по диагонали читаете? :)

 

А хочу я сделать чтение/запись FIFO SSP через DMA сразу на 4 или 8 байт, а не по одному.

Ну раз есть такая возможность, то почему бы и нет?

 

Плюс я не смог понять, чему равен "timeout" для прерывания на приём данных, который фигурирует в мануале в разделе SSP (сейчас под рукой нет компьютера, чтобы указать номер страницы).

Может быть, Вы сможете найти его определение?

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


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

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

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

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

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

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

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

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

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

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