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

adsp/bf как раскидать i2s со Спорта (в) на левый правый в разные буфера?

Собсно и весь вопрос.  без прерываний на каждое слово или разборкой ручками. Чет ни настроек ни у дма ни у спорта не нашел

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


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

в DMA 2D по X выставить инкремент N (размер буфера, ну или расстояние между началами буферов, если они не подряд) и количество 2, а по Y поставить инкремент 1-N, он тогда будет туда-сюда скакать раскладывая данные в два буфера.

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


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

Осталось найти в adsp21489 dma2d :(

Кажется про BF я зря спросил. Вырезали это 

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


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

ну не знаю тогда, натравить ещё один dma чтобы четные/нечетные данные раскидал по разным буферам из одного?

а вообще чем плохо, что данные перемешанные в буфере лежат? брать их с инкрементом адреса 2 с четного/нечетного адреса.

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


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

так все библиотеки на асме под fft заточены на рядом лежащие данные, я их на асме пока что точно переписывать не осилю

Eще один дма не выйдет, в адсп вообще не понял что с дма типа память-память, она вроде есть, но какая-то на 64 бита(!) зачем нужна непонятно.

Видимо можно сделать массив дескрипторов для chain dma, каждый дескриптор описывает прием двух слов с инкреметом адреса на разницу адресов буферов, и он же указывает на следующий дескпитор, где то же самое, но адреса следущие и так далее, если сделаю к примеру 64 таких дескриптора, то 64 выборки стерео оно сделает, потом прерывание и корректировать дескрипторы. Ужас какой-то если честно.

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


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

тогда проще, наверное, распараллелить приём на два (две половины) порта, и настроить синхронизацию так, чтобы один хватал только левые, а другой - только правые данные.

ну и ещё там у контроллера внешней памяти dma вроде умеет данные собирать/разбирать как попало. так что если протащить через буфер во внешней памяти, можно и силами дма управиться, без создания дескрипторов на каждый сэмпл.

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


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

1 hour ago, _pv said:

тогда проще, наверное, распараллелить приём на два (две половины) порта, и настроить синхронизацию так, чтобы один хватал только левые, а другой - только правые данные.

ну и ещё там у контроллера внешней памяти dma вроде умеет данные собирать/разбирать как попало. так что если протащить через буфер во внешней памяти, можно и силами дма управиться, без создания дескрипторов на каждый сэмпл.

так мне же еще и передача, с теми же проблемами. Не, похоже куча дескрипторов только вариант. Ну конечно можно и вовсе по перываниям на каждое слово, но это уже атас. Чего то они там недоработали походу с железом этого Шарка

Синхронизацию то куда настраивать, в режиме i2S там настраивать нечего, большинство хитрых битиков в нем ставятся сами и менять их нельзя (бесмысленно) 

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


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

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

Видимо можно сделать массив дескрипторов для chain dma, каждый дескриптор описывает прием двух слов с инкреметом адреса на разницу адресов буферов, и он же указывает на следующий дескпитор, где то же самое, но адреса следущие и так далее, если сделаю к примеру 64 таких дескриптора, то 64 выборки стерео оно сделает, потом прерывание и корректировать дескрипторы. Ужас какой-то если честно.

Зачем так делать? И какой от этого выигрыш?

Проще по завершению приёма блока войти в прерывание и переложить данные программно как надо во всём блоке сразу. А лучше - изучить асм и допилить библиотеки, если уж они на асме.

1 час назад, DASM сказал:

Ну конечно можно и вовсе по перываниям на каждое слово, но это уже атас.

О таком ногодрыжном варианте лучше забывать сразу как слезли со всяких AVR. А тем более если взялись за DSP. На котором один только вход/выход в/из ISR может занимать столько же времени, сколько программная сортировка всего блока.

 

Ну или выкинуть шарк, взять например C6745 (который вы активно обсуждали) - его EDMA3 умеет 3х-мерные пересылки, и разложить такие данные как надо - не составит труда на нём.

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


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

2 minutes ago, jcxz said:

Зачем так делать? И какой от этого выигрыш?

Проще по завершению приёма блока войти в прерывание и переложить данные программно как надо во всём блоке сразу. А лучше - изучить асм и допилить библиотеки, если уж они на асме.

 

2 minutes ago, jcxz said:

А лучше - изучить асм

У меня время стоит значительно дороже, чем изучение асма ADSP. И хоть проект и хоббийный, я предпочитаю тратить его на "вечное", то бишь на  свертки, фурье лапласы и прочее, а мне мнемоники отдельно взятых процессоров о которых потом никто не вспомнит.

А еще похоже проще взять нормальный проц о 8 ядрах и парой гигагерц, и на сях можно тогда свертки считать с той же производительностью. 

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


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

1 hour ago, DASM said:

так мне же еще и передача, с теми же проблемами. Не, похоже куча дескрипторов только вариант. Ну конечно можно и вовсе по перываниям на каждое слово, но это уже атас. Чего то они там недоработали походу с железом этого Шарка

Синхронизацию то куда настраивать, в режиме i2S там настраивать нечего, большинство хитрых битиков в нем ставятся сами и менять их нельзя (бесмысленно) 

у шарка там этих спортов, как говна за баней, 8(16) штук (половинок), ну займёте 2(4) для нормального двунаправленного общения с кодеком.

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

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

так что либо руками массив перелопачивайте, тоже не велика потеря, полтакта/такт на отсчёт потратить.

либо отправьте во внешнюю память, там scatter/gather DMA вроде умеет, но имхо быстрее будет руками.

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


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

10 minutes ago, _pv said:

у шарка там этих спортов, как говна за баней, 8(16) штук (половинок), ну займёте 2(4) для нормального двунаправленного общения с кодеком.

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

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

так что либо руками массив перелопачивайте, тоже не велика потеря, полтакта/такт на отсчёт потратить.

либо отправьте во внешнюю память, там scatter/gather DMA вроде умеет, но имхо быстрее будет руками.

самый обычный аудиофильский PCM1798 DAC и  такие же АЦП той же конторы. Плата у меня 6 OUT 4 IN так что уже сложнее. О запараллеливании думал, и тоже споткнулся с передачей. А что со scatter ? Там в даташите вообще очень мало о Mem2Mem DMA - два канала, никакого скаттера и вообще о 64 битах речь. Придется видимо все же массивом дескрипторов, это мне видится минимально элегантным в разрезе такого корявства железа. Дергать проц на каждые две выборки в прерывании нафик нафик. Разбирать весь массив - ну тоже вариант, но хочется хоть такое ДМА задействовать. Они по-моему проц делали для обработки многоканальных телефонных линий с TDM каналами, все эти стерео им пофигу. 

"в multichannel режиме " да этот i2S хитровыпендриный смещением на один клок данных относительно FS - похоже не получится из других режимов его сэмулировать.

Было бы с нуля все - я лучше б Техасовски 6745 поставил, но у меня готовая хорошая плата с отличной аудиобвязкой уже есть, и с АДСП.

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


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

У меня была аналогичная проблема с I2S на McASP в C6745. 

 

Нужно было избавиться от 32-битных пересылок - просто оттюнинговал оффсет в EDMA3 на значение =2 вместо 4,  в итоге DMA стал отправлять в порт McASP 16-битные данные.

 

Затем я избавился от второго канала и превратил I2S в I1S (просто надо MONO было, а не Stereo) - задал только один тайм-слот. Теперь память на второй канал не расходуется и он молчит (что и требовалось).

 

EDMA3 настроил так:  первое измерение ACNT=2 или 4  (размер семпла в байтах),  второе измерение BCNT=64 (максимальный размер Audio FIFO), и наконец третье измерение = число кусков Audio FIFO в семплах.   Качает до 16 МБ памяти в звук разом!  В прерывании по окончанию DMA пересылки   перезагружаю дескрипторы EDMA (PaRAM). 

 

Всё!   Такого замечательного DMA  я ещё нигде не встречал!  АRМ-ы со своими 64K-DMA  давятся в сторонке! =)

 

Да, пришлось потрахаться с мануалами, порой даже на другие процессоры этого семейства, читать e2e, форумы, пережевывать китайские исходники, и.т.п.  За 4 дня разобрался

Изменено пользователем repstosw

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


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

1 hour ago, DASM said:

А что со scatter ? Там в даташите вообще очень мало о Mem2Mem DMA - два канала, никакого скаттера и вообще о 64 битах речь.

Разбирать весь массив - ну тоже вариант, но хочется хоть такое ДМА задействовать. 

Не, не отдельный мем2мем, а тот дма который в external port (стр. 4-125), он во внешнюю память вроде умеет читать/писать с какими попало смещениями.

Но я мануал сильно по диагонали поглядел, просто интересно стало чем отличаются.

А для обычного дма массивы дескрипторов под каждый отсчёт заготавливать дольше будете, что просто по всем данным пройтись и четные/нечетные данные в отдельные буфера раскидать. Да и памяти это сожрёт.

 

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


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

5 hours ago, __inline__ said:

У меня была аналогичная проблема с I2S на McASP в C6745. 

 

Нужно было избавиться от 32-битных пересылок - просто оттюнинговал оффсет в EDMA3 на значение =2 вместо 4,  в итоге DMA стал отправлять в порт McASP 16-битные данные.

 

Затем я избавился от второго канала и превратил I2S в I1S (просто надо MONO было, а не Stereo) - задал только один тайм-слот. Теперь память на второй канал не расходуется и он молчит (что и требовалось).

 

EDMA3 настроил так:  первое измерение ACNT=2 или 4  (размер семпла в байтах),  второе измерение BCNT=64 (максимальный размер Audio FIFO), и наконец третье измерение = число кусков Audio FIFO в семплах.   Качает до 16 МБ памяти в звук разом!  В прерывании по окончанию DMA пересылки   перезагружаю дескрипторы EDMA (PaRAM). 

 

Всё!   Такого замечательного DMA  я ещё нигде не встречал!  АRМ-ы со своими 64K-DMA  давятся в сторонке! =)

 

Да, пришлось потрахаться с мануалами, порой даже на другие процессоры этого семейства, читать e2e, форумы, пережевывать китайские исходники, и.т.п.  За 4 дня разобрался

У всех свои заморочки. У ADI  есть нелохая Sigma Studio, графический редактор звуковых систем для их серии ADAU dsp, adsp21489 тоже туда цепляется. У техаса такого нет. Зато есть крайне сомнительная политика снимать с производства интересные вещи, с омар уже так пролетел, sitara туда же, msp ходячее недоразумение итп. Но с ADI  тож как то невесело вышло. Ну ладно, проблему то я решу, просто как то чувство прекрасного страдает

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


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

6 hours ago, DASM said:

Зато есть крайне сомнительная политика снимать с производства интересные вещи

А не пофиг ли, если для хобби (насколько я понял из этой темы "про вечное")?

sitara туда же

Честно говоря, мне непонятна озабоченность техасцев индусской стилистикой - в техподдержке у них почти  все индусы. Вот докатились, что имена процессорам тоже дают индусские.  У меня при слове "sitara" вот такая картинка в голове сразу рисуется:

guru.jpg.91e55aacc62cafab65a6ed163a19b529.jpg

Эдакий, гуру микроконтроллеров, освоивший ситары )))

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


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

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

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

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

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

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

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

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

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

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