sonycman 0 17 августа, 2010 Опубликовано 17 августа, 2010 · Жалоба Привет. Вчера почитал мануал (UM10360 LPC17xx User manual Rev. 01 — 4 January 2010) по части GPDMA и, так сказать, много думал. Вроде с "пакетным" режимом ДМА всё просто - при запросе пересылается сразу несколько слов, вместо одного. Но вот как, например, будет работать такой ДМА вместе с SSP? На передачу проблемы не вижу - ставим длину пакета в 8 слов (по размеру FIFO) и вперёд - будем забивать сразу весь FIFO. Непонятки с чтением из SSP - как можно применить к чтению пакетный режим? Запрос к DMA на пересылку, как правило идёт сразу после того, как в FIFO приёмника появились данные. То есть приняли один байт - DMA его перекинул. А тут нужен пакет в 8 байт, к примеру. Как это будет работать? Неужели SSP настолько интеллигентен, что будет выставлять запрос только после того, как в фифо накопится количество байт, заданное в регистрах DMA как длина пакета? Что-то не верится совсем, ерунда какая-то :( Плюс в мануале применительно к SSP проскакивает прерывание "таймаута" для приёмного фифо - но как задаётся значение таймаута или чему оно равно - в мануале не нашёл. Очень странно :( ЗЫ: с расстройства запостил тему несколько не в том месте - просьба перенести её в раздел для ARM :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sonycman 0 17 августа, 2010 Опубликовано 17 августа, 2010 · Жалоба Ну вот, неужели никто не юзает DMA в "пакетном" режиме? Этот модуль должен быть не только в 17хх, но и в других АРМах от NXP. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vmp 0 18 августа, 2010 Опубликовано 18 августа, 2010 · Жалоба Странно он как-то работает. Пытался заставить работать DMA с SSP в 16-битном режиме, так м не получилось. Логики так и не понял, из описания кстати непонятно, в каких единицах задается длина обмена. Могу посоветовать читать первоисточники на сайте ARM, а не их сокращенный пересказ от NXP. PrimeCell ® DMAController (PL080) Technical Reference Manual Наиболее похожий вариант. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sonycman 0 18 августа, 2010 Опубликовано 18 августа, 2010 · Жалоба Странно он как-то работает. Пытался заставить работать DMA с SSP в 16-битном режиме, так м не получилось. Логики так и не понял, из описания кстати непонятно, в каких единицах задается длина обмена. Могу посоветовать читать первоисточники на сайте ARM, а не их сокращенный пересказ от NXP. PrimeCell ® DMAController (PL080) Technical Reference Manual Наиболее похожий вариант. Спасибо за ссылку, надо будет ознакомиться. Насчёт длины обмена - по мануалу длина пакета (для burst режима) и ширина слова задаются в DMA channel control register (DMACCxControl). Вроде всё однозначно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sysel 0 18 августа, 2010 Опубликовано 18 августа, 2010 · Жалоба Может быть поможет, прикрепляю архив, где я работаю с SPI флешкой M25P80 по DMA через порт SSP SPI_Flash_tst.zip Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sonycman 0 18 августа, 2010 Опубликовано 18 августа, 2010 · Жалоба Может быть поможет, прикрепляю архив, где я работаю с SPI флешкой M25P80 по DMA через порт SSP Спасибо, в этом примере Вы работаете с DMA в обычном режиме, а меня интересует пакетный burst режим. То есть пересылка за один запрос от периферии сразу 4 или 8 байт. В мануале сказано, что так делать более эффективно. Честно говоря, начинаю склоняться к мнению, что мануалы от для LPC ничем не лучше STMовских в плане неполной документированности :( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sysel 0 18 августа, 2010 Опубликовано 18 августа, 2010 · Жалоба Спасибо, в этом примере Вы работаете с 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, на мой взгляд, очень толковая документация. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sonycman 0 18 августа, 2010 Опубликовано 18 августа, 2010 · Жалоба Т.е. если переферия не поддерживает Burst режим (например SSP), то и не стоит над этой переферией издеваться. P.S.: У NXP, на мой взгляд, очень толковая документация. Так в том то и дело, что SSP поддерживает пакетный режим (наряду с одиночным) - посмотрите табличку в разделе по GPDMA. Или мануал Вы тоже по диагонали читаете? :) А хочу я сделать чтение/запись FIFO SSP через DMA сразу на 4 или 8 байт, а не по одному. Ну раз есть такая возможность, то почему бы и нет? Плюс я не смог понять, чему равен "timeout" для прерывания на приём данных, который фигурирует в мануале в разделе SSP (сейчас под рукой нет компьютера, чтобы указать номер страницы). Может быть, Вы сможете найти его определение? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться