Страница 22 из 27 Первая ... 122021222324 ... Последняя
Показано с 421 по 440 из 528

Тема: Open-Source USB транспорт на PIC32MZ

  1. #1 Показать/скрыть первое сообщение.
    Завсегдатай
    Автор темы
    Аватар для dortonyan
    Регистрация
    03.06.2009
    Адрес
    BLR
    Возраст
    39
    Сообщений
    3,946

    По умолчанию Open-Source USB транспорт на PIC32MZ

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

    Причина разработки своего транспорта - отсутствие в продаже USB транспортов с I2S входом для использования АЦП. Кроме того, те транспорты что есть в продаже не устраивали по тем или иным причинам (либо плохо сделана плата, либо большое потребление).
    Раньше сдерживающим фактором было отсутствие uac2 драйверов. Однако с переходом на win10 с нативным драйвером данная проблема была решена.
    Ну и вообще, т.к. на дворе 21-ый век, то для меня не понятно - почему uac2 еще не перекочевал в открытый доступ. Данная публикация призвана исправить такое досадное упущение.

    Почему PIC32MZ: Преимущество перед ARM процессорами - встроенный USB HS мост и одновременно удобный компактный корпус с удобной распиновкой. А по сравнению с кмосом - низкое потребление: порядка 70..80мА максимум.

    Изначально планировал использовать фреймворк (harmony configurator), однако по ходу выяснилось, что данный фреймворк генерирует только USB AUDIO приложение для формата Class 1.
    Кроме того по форумам полно отзывов по касякам в фреймворке. Дорабатывать фреймворк оказалось крайне контр-продуктивно из-за жесточайшей инкапсуляции, громоздкого стека и отсутствия его описания.

    Намаявшись с фреймворком принял решение писать свой код с нуля. Но очень скоро обломался, т.к. выяснилось что для PIC32 процессоров описание USB моста полностью отсутствует! Т.е. микрочип предлагает только пользоваться их кривыми фреймворками.
    Однако на форуме микрочипа нашлись добрые люди, которые поделились исходниками своих проектов USB девайсов на PIC32MZ: https://www.microchip.com/forums/m1083508.aspx
    Пользуясь данными примерами, а так же методом тыка, удалось написать свой достаточно эффективный код (итоговый размер с оптимизацией gcc компилятора уровня 2 - менее 16кБт).
    Конечно код не такой красивый как в фреймворках, слабовата инкапсуляция. Зато, разобраться в нем и доработать под свои нужды гораздо проще. А главное проще обходить касяки периферии, которые как оказалось имеют место быть.
    В частности есть не описанные в эррате проблемы с DMA модулями.

    Что в итоге удалось реализовать на самом чипе, без обвеса дополнительными микросхемами:
    1. Вывод стандартного стерео: 32bit 768kHz (Правда драйвер не отображает частоты выше 384к, но по факту 768к выводит). И сам модуль I2S пика позволяет выводить данные с частотой не выше 384к. 768к вывести тоже можно, но каким-то нестандартным интерфейсом, типа QSPI или параллельным портом.
    2. Вывод многоканала: 8-каналов 32bit 192kHz (опробовал только в отладочном режиме, подробнее ниже).
    3. Стерео вход: 32bit 768kHz (опробовал по факту только 192, т.к. мой АЦП больше не выдает).
    4. Распознавание DoP формата и вывод из него стерео DSD-битстрима частотой до DSD256 включительно.
    5. До кучи - добавлено CDC устройство (виртуальный COM-порт) для обмена данными с транспортом (в проекте используется в отладочном виде, на любые принятые данные отвечает строкой "CDC is works").

    Вывод многоканала физически не реализован, т.к. изначально в транспорте он не предусматривался. Работу проверял в отладочном режиме, переключая на выход пары каналов по очереди (остальные каналы выводили данные в отладочные буферы).
    Весь описанный выше функционал реализован на DMA модулях, благодаря чему хватает небольшой тактовой частоты процессора (160МГц для работы многоканала + стерео-входа).
    Причем изначально вывод данных в I2S модули выполнялся на DMA с прерываниями. Однако, выяснилось, что прерывания DMA работаю криво, из-за чего модуль может самопроизвольно вырубаться.
    Описал проблему на форуме микрочипа (в конце ветки), но - глухо как в танке: https://www.microchip.com/forums/FindPost/1219136

    Пришлось выкручиваться по другому. В результате получилось даже лучше, т.к. передача данных между I2S буферами и FIFO данных получилась полностью аппаратной (DMA модули перегружаются автоматически в цикле).
    Кроме того, для дополнительного снижения потребления добавлено 3 режима с разной тактовой частотой, в зав-ти от кол-ва каналов и выбранной ЧД.
    В результате потребление от USB шины (контроллер + развязка) с питанием через step-down получилось от 40мА (стерео-вывод), до 55мА (8-каналов + стерео вход).
    Отмечу, что в режиме FS (uac1) потребление можно опустить еще ниже: до 20..30мА, что может быть актуально для портативного девайса.

    Проект сделан в IDE MPLabX 6.05, с компилятором CX32 v4.1. Проверялся только на win10. Актуальная схема транспорта ниже во вложении.
    Конечно, нативный uac2 драйвер в win10 достаточно корявый, легко ломается сам и еще легче ложит винду (хватает ошибки в дескрипторе). Но готовый проект значительно облегчает отладку USB девайса, достаточно выпилить лишний функционал из дескриптора и обработчика команд.
    Особенности конфигурации USB моста или DMA модуля я постарался подробно описать комментариями, но если у кого-то найдутся другие проблемы - можно обсудить в ветке ниже.
    Вложения Вложения
    Последний раз редактировалось dortonyan; 24.12.2022 в 14:13.

  2. #421
    Завсегдатай
    Автор темы
    Аватар для dortonyan
    Регистрация
    03.06.2009
    Адрес
    BLR
    Возраст
    39
    Сообщений
    3,946

    По умолчанию Re: Open-Source USB транспорт на PIC32MZ

    Вергилий, у пика ядро питается от встроенного 1,8В LDO.

  3. #422
    Старый знакомый Аватар для eclipsevl
    Регистрация
    31.01.2009
    Адрес
    Гаага
    Возраст
    30
    Сообщений
    506

    По умолчанию Re: Open-Source USB транспорт на PIC32MZ

    Цитата Сообщение от dortonyan Посмотреть сообщение
    Коэффициенты взял что выкладывал tomtit
    А можно ссылку на пост? Не смог найти.

  4. #423
    Завсегдатай
    Автор темы
    Аватар для dortonyan
    Регистрация
    03.06.2009
    Адрес
    BLR
    Возраст
    39
    Сообщений
    3,946

    По умолчанию Re: Open-Source USB транспорт на PIC32MZ

    Это с первой ветки по ЦФ.
    А вообще, в матлабе можно нагенерить каких угодно. Я несколько типов сделал.
    Для входной ЧД выше 48кГц использовать первую ступень 5842 получается уже не выгодно. Лучше применить фильтр с более широкой переходной полосой и большим ослаблением на частоте Найквиста.

    ---------- Сообщение добавлено 24.05.2025 в 17:24 ---------- Предыдущее сообщение было 23.05.2025 в 22:53 ----------

    В архиве обещанный проект с DSP обработкой.
    Для себя использую проект с I2S входом, т.к. у меня общий транспорт для ЦАП и АЦП. Но для максимального упрощения вход вырезал, оставил только стерео-выход.
    Если кому надо проект со входом - выложу и его.
    Системную частоту задал 300МГц, в файле "system.c" можно задать любую другую.
    Дефайны конфигурации под различные типы выхода PCM16, PCM32, DSD64 - в хедере "system.h".
    В фале "dma.c" дефайнами задается форма сигналов для водрклока и деглитчера. Там же выбираются нужные I2S модули для вывода.
    Порты тоже сконфигурированы под мою плату. Кто будет использовать - переделает под свою.
    В папке Docs лежит экселевский файл с преобразованием и расчетом адресов коэф-тов, использованных в проекте.
    Вложения Вложения

  5. #424
    Завсегдатай Аватар для Turbo_man
    Регистрация
    06.04.2010
    Адрес
    Moscow
    Сообщений
    5,730

    По умолчанию Re: Open-Source USB транспорт на PIC32MZ

    Спасибо.
    Мне нужно будет перекомпилировать под плату York nano. Как куплю плату, попрошу помощи, наверно. Т.к. с PIC32 ранее не работал.
    Успеха.

  6. #425
    Завсегдатай
    Автор темы
    Аватар для dortonyan
    Регистрация
    03.06.2009
    Адрес
    BLR
    Возраст
    39
    Сообщений
    3,946

    По умолчанию Re: Open-Source USB транспорт на PIC32MZ

    Turbo_man, Владимир, не вопрос. Разберемся.

  7. #426
    Старый знакомый Аватар для eclipsevl
    Регистрация
    31.01.2009
    Адрес
    Гаага
    Возраст
    30
    Сообщений
    506

    По умолчанию Re: Open-Source USB транспорт на PIC32MZ

    Цитата Сообщение от dortonyan Посмотреть сообщение
    eclipsevl, такой и есть.
    Коэффициенты взял что выкладывал tomtit, с тем же кол-вом тапов что в даташите.
    Правда, строго говоря, его коэффициенты не один в один даташитные а чуть другие (получше).

    P.S.
    Оказалось, что свойство симметрии фазолинейных фильтров можно использовать не только на FPGA, но и при оптимизации под процессор.
    Спасибо!
    Сделал и я сегодня интерполятор, пока что из одного FIRа, х2. Я частоту пока повышать не рискнул, держу чуть меньше предельной - 192МГц.
    Фильтр на 167 тапов считается ~63 мкс/2 канала/6 семплов (один фрейм на 48кГц). Ну или примерно 10 мкс на один входящий стерео семпл. Думаю еще есть куда оптимизировать (нулевые семплы/коэффициенты разумеется не участвуют в вычислениях).
    10 инструкций на тап, но симметрию я пока не использую, не вижу как это может уменьшить количество инструкций.


    Offтопик:
    Вспомнил времена магистерской, но тогда делал дециматор под ASIC и оптимизировать нужно было площадь/потребление

    Нажмите на изображение для увеличения. 

Название:	dec.png 
Просмотров:	23 
Размер:	54.6 Кб 
ID:	474077
    Последний раз редактировалось eclipsevl; 24.05.2025 в 21:31.

  8. #427
    Завсегдатай
    Автор темы
    Аватар для dortonyan
    Регистрация
    03.06.2009
    Адрес
    BLR
    Возраст
    39
    Сообщений
    3,946

    По умолчанию Re: Open-Source USB транспорт на PIC32MZ

    Цитата Сообщение от eclipsevl Посмотреть сообщение
    Я частоту пока повышать не рискнул, держу чуть меньше предельной - 192МГц.
    Для EF предельная частота 200МГц только для температуры 125гр. При температуре не выше 85гр. предельная уже 252МГц.
    Для более низких температур соот-но можно повышать еще больше. Жесткого лимита нету, главное правильно задавать задержки обращения к памяти и делители шин.
    В DSP проекте я доработал ф-ю инициализации ядра, добавил условия выставления задержек и делителей для более высоких частот и с учетом эрраты.
    Бывают правда в режиме DSD выхода спонтанные слабые "пуки" то водном, то в другом канале, но я пока не понял причину. То ли артефакты из-за перегруза по частоте, то ли где-то касяк в коде (т.к. в режиме PCM таких артефактов не замечено).

    Цитата Сообщение от eclipsevl Посмотреть сообщение
    Фильтр на 167 тапов считается ~63 мкс/2 канала/6 семплов (один фрейм на 48кГц).
    У меня примерно за такое же время (за половину USB фрейма) считается весь 5842 (три каскада) с округлением с дизером и шейпером на частоте 300МГц.
    В проекте вывел отладочный пин и для отслеживания скопом.

    Цитата Сообщение от eclipsevl Посмотреть сообщение
    10 инструкций на тап, но симметрию я пока не использую, не вижу как это может уменьшить количество инструкций.
    Владислав, посмотрите мои asm исходники.
    Я там для длинных фильтров один раз загружаю 4 коэф-та. После чего - 8 семплов данных левого канала. Далее перемножаю с накоплением в аккумулятор ac0, а после загружаю 8 семплов правого канала и перемножаю на эти же коэффициенты с накоплением в аккумулятор ac1 (64-бит аккумуляторов у пика целых четыре).
    Таким образом на 16 умножений с накоплением используется всего одна загрузка 4-х коэф-тов.
    Еще такой момент, что загружать коэффициенты константами в регистры процессора быстрее, чем из массива по адресу.

    А для более коротких фильтров я вообще загружаю сразу все коэффициенты один раз. Потом загружаю весь ряд данных и организую FIFO прямо на регистрах процессора.
    Тогда для первого прохода выполняется загрузка всех семплов (например 12-ти), а после 12-ти умножений на 6 коэф-тов достаточно загрузить еще один семпл, после чего опять выполняется 12 умножений.
    И чем больше выполняется проходов, тем больше получается выигрыш в производительности.
    В итоге даже отказался от CIC интерполяторов, т.к. полуполосник с FIFO на регистрах процессора получается заметно эффективнее.
    Последний раз редактировалось dortonyan; 25.05.2025 в 08:03.

  9. #428
    Старый знакомый Аватар для eclipsevl
    Регистрация
    31.01.2009
    Адрес
    Гаага
    Возраст
    30
    Сообщений
    506

    По умолчанию Re: Open-Source USB транспорт на PIC32MZ

    Цитата Сообщение от dortonyan Посмотреть сообщение
    Владислав, посмотрите мои asm исходники.
    Я там для длинных фильтров один раз загружаю 4 коэф-та. После чего - 8 семплов данных левого канала. Далее перемножаю с накоплением в аккумулятор ac0, а после загружаю 8 семплов правого канала и перемножаю на эти же коэффициенты с накоплением в аккумулятор ac1 (64-бит аккумуляторов у пика целых четыре).
    Таким образом на 16 умножений с накоплением используется всего одна загрузка 4-х коэф-тов.
    Еще такой момент, что загружать коэффициенты константами в регистры процессора быстрее, чем из массива по адресу.
    Я бы с удовольствием а они опубликованы?
    Пока что я так глубоко не вникал, только вот один день с ассемблером MIPS повозился.

  10. #429
    Завсегдатай
    Автор темы
    Аватар для dortonyan
    Регистрация
    03.06.2009
    Адрес
    BLR
    Возраст
    39
    Сообщений
    3,946

    По умолчанию Re: Open-Source USB транспорт на PIC32MZ

    Цитата Сообщение от eclipsevl Посмотреть сообщение
    Я бы с удовольствием а они опубликованы?
    Так выше только что выложил полный проект.

    По исходникам asm легче сориентироваться, чем писать с нуля, т.к. есть неочевидные моменты, которые почему-то нигде не описаны (я не нашел).
    Например, инструкция загрузки константы в регистр LI загружает ее за две операции: сначала младшие 16 бит, потом старшие.
    И если после загрузки, следующей инструкцией обратиться к этому регистру, то в нем старшие 16 бит будут нули. А если обратиться позднее, пропустив хотя бы одну инструкцию, то все загрузится как надо.
    Другой пример - инкремент (декремент) указателя стека ($sp) можно выполнять только на число кратное 16, иначе ломается работа стека.

    P.S.
    Замерил точнее время на обсчет.
    В общем на тактовой 200МГц 6 стерео-семплов в режиме х8 оверсемплинга (5842 + входной аттенюатор + выходное округление с дизером и шейпером) обсчитываются примерно за 80мкс.
    Последний раз редактировалось dortonyan; 25.05.2025 в 13:45.

  11. #430
    Частый гость Аватар для Вергилий
    Регистрация
    28.10.2014
    Сообщений
    215

    По умолчанию Re: Open-Source USB транспорт на PIC32MZ

    dortonyan, спасибо!

  12. #431
    Завсегдатай
    Автор темы
    Аватар для dortonyan
    Регистрация
    03.06.2009
    Адрес
    BLR
    Возраст
    39
    Сообщений
    3,946

    По умолчанию Re: Open-Source USB транспорт на PIC32MZ

    Позже обновлю DSP проект, уже есть несколько мелких исправлений.
    Поправил касяк атомарности декремента счетчика семплов, из-за чего ломалась DSP обработка при минимальном запасе тактовой частоты.
    Ну и эффект "виниловой пластинки" (редких пуков) при работе модулятора пока не поборол (под отладкой не получается отловить проблему).
    Тактовая частоты процессора оказалась не при чем, на штатных 200МГц то же самое. Возможно у меня какой-то аппаратный касяк.... Хорошо бы еще кто-нибудь попробовал.

  13. #432
    Старый знакомый Аватар для eclipsevl
    Регистрация
    31.01.2009
    Адрес
    Гаага
    Возраст
    30
    Сообщений
    506

    По умолчанию Re: Open-Source USB транспорт на PIC32MZ

    Цитата Сообщение от dortonyan Посмотреть сообщение
    При температуре не выше 85гр. предельная уже 252МГц.
    Действительно, заблуждался.


    Цитата Сообщение от dortonyan Посмотреть сообщение
    В проекте вывел отладочный пин и для отслеживания скопом.
    Да, так же делаю


    Цитата Сообщение от dortonyan Посмотреть сообщение
    Владислав, посмотрите мои asm исходники.
    Нашел, видимо с телефона не заметил сразу. Спасибо!
    Получается Ваш код написан без ветвлений и с коэффициентами-константами.

    Согласен что так получается более эффективно. Я смог еще одну инструкцию из цикла убрать, но думаю это уже предел:
    loop_start:
    bge $t7, $t5, loop_end

    # Load hist[idx]
    addu $t6, $a0, $t4 # hist[idx] address, t6 = hist + idx*4
    lw $t1, 0($t6) # t1 = hist[idx]

    # Load coeff[i]
    lw $t2, 0($t7) # load coeff[i] to t2
    addiu $t7, $t7, 8 # coeff[i] address, t7 = coeff + i*4

    # idx = idx - 1, with wrap-around
    modsub $t4, $t4, $t2

    # Multiply-accumulate
    madd $t1, $t2

    j loop_start
    nop
    Тут аж две (три) инструкции только для цикла. Если развернуть ветвление - сразу 30% быстрее, если не считать адрес коэффициента - еще минус инструкция.
    Интересная идея с "разворачиванием" кольцевого буфера. У меня тоже была мысль что при расчете фильтра это несколько мешает.

  14. #433
    Завсегдатай
    Автор темы
    Аватар для dortonyan
    Регистрация
    03.06.2009
    Адрес
    BLR
    Возраст
    39
    Сообщений
    3,946

    По умолчанию Re: Open-Source USB транспорт на PIC32MZ

    Цитата Сообщение от eclipsevl Посмотреть сообщение
    Получается Ваш код написан без ветвлений и с коэффициентами-константами.
    Да, только хардкор.
    С ветвлением и подсчетом адреса каждого семпла и коэффициента на каждом умножении - для пика, увы, не вариант. В таком случае даже простой 5842 не факто что посчитает (без разгона по частоте).
    Можно конечно сократить кол-во подсчетов, если считать не каждый коэффициент, а каждые четыре (аналогично работает DSP-шная библиотечная ф-я):

    - загрузили 4 коэф-та
    - загрузили 8 семплов левого канала
    - перемножили 8 семплов левого канала
    - загрузили 8 семплов правого канала
    - перемножили 8 семплов правого канала
    - выполнили никремент счетчика

    Так уже будет более-менее.
    Но это получается все равно медленнее прямого кода и не очень универсально: кол-во коэф-тов должно быть кратно четырем.
    А на развернутом коде можно к 5842 еще и модулятор прикрутить. Единственное что, конечно вырастает трудоемкость кода.

  15. #434
    Завсегдатай Аватар для tomtit
    Регистрация
    23.06.2009
    Адрес
    пгт.Торонтовка
    Возраст
    66
    Сообщений
    1,041

    По умолчанию Re: Open-Source USB транспорт на PIC32MZ

    Цитата Сообщение от dortonyan Посмотреть сообщение
    Ну и эффект "виниловой пластинки" (редких пуков) при работе модулятора пока не поборол (под отладкой не получается отловить проблему).
    Алексей,
    Скорее всего это перегрузка модулятора. Я тоже нередко наблюдал такое явление, иногда очень редкое.
    Нужно либо вводить нелинейную коррекцию, либо уменьшать коэффициент модуляции.
    К сожалению, некие последовательности в сигнале иногда провоцируют временную нестабильность в модуляторах высокого порядка, причём угадать, когда это случается мне не удалось. Помогает снижение уровня дизеринга.

  16. #435
    Завсегдатай
    Автор темы
    Аватар для dortonyan
    Регистрация
    03.06.2009
    Адрес
    BLR
    Возраст
    39
    Сообщений
    3,946

    По умолчанию Re: Open-Source USB транспорт на PIC32MZ

    Да, забыл упомянуть хитрый нюанс, благодаря которому вообще возможен такой быстрый прямой обсчет с константными адресами.
    FIFO буфер для каждого каскада выполнен особым образом: состоит из двух частей.
    Например если длина буфера 1024 семпла, то к нему добавляется еще добавок в 256 семплов. Т.е. суммарный размер буфера получается 1280.
    При этом адрес для чтения смещается в диапазоне от 0 до 1023, а для записи - от 256 до 1279.
    И когда указатель записи переходит на начальную позицию (на 256) он активирует канал DMA, который записывает последние 256 семплов буфера в начало.
    Таким образом для указателя на чтение адресное пространство всегда имеет запас минимум на 256 семплов вниз, что и позволяет внутри функции рассчета свертки иметь константные адреса семплов, без проверки перехода на начало.

    ---------- Сообщение добавлено 13:43 ---------- Предыдущее сообщение было 13:36 ----------

    Цитата Сообщение от tomtit Посмотреть сообщение
    Скорее всего это перегрузка модулятора. Я тоже нередко наблюдал такое явление, иногда очень редкое.
    Нужно либо вводить нелинейную коррекцию, либо уменьшать коэффициент модуляции.
    К сожалению, некие последовательности в сигнале иногда провоцируют временную нестабильность в модуляторах высокого порядка, причём угадать, когда это случается мне не удалось. Помогает снижение уровня дизеринга.
    О, значит я не один такой. Это уже хорошо.
    Перегрузка модулятора - это первое про что подумал. Пробовал увеличить на бит запас на переполнение - не помогло. Или это простым запасом разрядности не решается?
    Дизер в модуляторе не используется. Округления на сдвигах для однобитных коэффициентов выполняется прибавлением единицы к старшему отбрасываемому биту.
    Причем самое странное, что в плисине ровно тот же модулятор с таким же округлением, и там я такой проблемы не замечал.

  17. #436
    Старый знакомый Аватар для eclipsevl
    Регистрация
    31.01.2009
    Адрес
    Гаага
    Возраст
    30
    Сообщений
    506

    По умолчанию Re: Open-Source USB транспорт на PIC32MZ

    Цитата Сообщение от dortonyan Посмотреть сообщение
    Да, только хардкор.
    С ветвлением и подсчетом адреса каждого семпла и коэффициента на каждом умножении - для пика, увы, не вариант. В таком случае даже простой 5842 не факто что посчитает (без разгона по частоте).
    Что ж, поговорим о хардкоре
    Я с этим не совсем согласен, вы не учитываете нюансы работы с кэшем.

    Если сравнить два подхода:
    1. Ваш - применение DMA для разворачивания кольцевого буфера - нет необходимости расчета адреса семпла, но в этом случае буфер находится в когерентной некэшируемой памяти (KSEG1)
    Значит загрузка из памяти в регистр будет занимать более 1 такта.

    2. Мой - кольцевой буфер в кэшируемой некогерентной памяти (KSEG0), нет необходимости в когерентности т.к. DMA не используется. Копирование семплов из когерентной области происходит один раз на семпл. Загрузка семплов из кэша при вычислении фильтра занимает 1 такт.

    Сейчас провел небольшой эксперимент - в своем коде поменял буфер с кэшируемого на некэшируемый (как у Вас) - время вычислений выросло с 63мкс до 94.4мкс.

    Наверное можно в Вашем варианте попробовать перенести FIFO в кэшируемую область, но придется решать проблемы когерентности вручную.

    Цитата Сообщение от dortonyan Посмотреть сообщение
    В таком случае даже простой 5842 не факто что посчитает (без разгона по частоте).
    Не, если только сам фильтр - точно успеет.

  18. #437
    Завсегдатай
    Автор темы
    Аватар для dortonyan
    Регистрация
    03.06.2009
    Адрес
    BLR
    Возраст
    39
    Сообщений
    3,946

    По умолчанию Re: Open-Source USB транспорт на PIC32MZ

    eclipsevl, понял, в работу кэша не вникал. Надо поизучать этот вопрос.

    А по поводу модулятора кажется понял в чем дело. На плисине у меня был оверсемплинг минимум х32, а здесь х8. Возможно из-за ступенек модулятор возбуждается.
    Хотя конкретно соневский вроде не должен. Надо будет замоделить.

  19. #438
    Завсегдатай Аватар для tomtit
    Регистрация
    23.06.2009
    Адрес
    пгт.Торонтовка
    Возраст
    66
    Сообщений
    1,041

    По умолчанию Re: Open-Source USB транспорт на PIC32MZ

    Я заметил эффект кликов даже не на аудио сигнале а на очень длинных FFT 16М, когда на очередном усреднении спектр разваливается. Используя цифровой осциллограф отловил всплеск на выходном сигнале. Явление случайное и очень редкое. До сих пор есть подозрение на софт в ПК.

  20. #439
    Старый знакомый Аватар для eclipsevl
    Регистрация
    31.01.2009
    Адрес
    Гаага
    Возраст
    30
    Сообщений
    506

    По умолчанию Re: Open-Source USB транспорт на PIC32MZ

    Цитата Сообщение от dortonyan Посмотреть сообщение
    eclipsevl, понял, в работу кэша не вникал. Надо поизучать этот вопрос.

    А по поводу модулятора кажется понял в чем дело. На плисине у меня был оверсемплинг минимум х32, а здесь х8. Возможно из-за ступенек модулятор возбуждается.
    Хотя конкретно соневский вроде не должен. Надо будет замоделить.
    А Вы не замеряли сколько у Вас вычисляется одна итерация свертки первой секции на 167 тапов?
    Мне интересно для сравнения, у меня пока только эта часть сделана

  21. #440
    Завсегдатай
    Автор темы
    Аватар для dortonyan
    Регистрация
    03.06.2009
    Адрес
    BLR
    Возраст
    39
    Сообщений
    3,946

    По умолчанию Re: Open-Source USB транспорт на PIC32MZ

    Один проход х2 интерполятора первой ступени 5842 на системной частоте 200МГц - 7,2мкс.

    ---------- Сообщение добавлено 22:39 ---------- Предыдущее сообщение было 16:18 ----------

    Попробовал просто отключить когерентность массива FIFO и запустил этот же код.
    Время ужалось капец, до 2,75мкс.
    Получается не все соки выжаты, надо пробовать кодить без DMA.

Страница 22 из 27 Первая ... 122021222324 ... Последняя

Социальные закладки

Социальные закладки

Ваши права

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