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

drum1987

Участник
  • Постов

    253
  • Зарегистрирован

  • Посещение

Весь контент drum1987


  1. У меня было вот так: static u16 const emif[] = { (u16)&_CE0CTL1, B7|B4, (u16)&_SDCTL1, 0x5710, (u16)&_SDRFR1, 0x05dc, (u16)&_SDRFR2, B9 | B8, (u16)&_SDEXT1, 0xC52C, (u16)&_SDEXT2, 0xC52C, (u16)&_CESCR, 0xC504, (u16)&_SDCTL2, 0x5710 } sdram micron 48lc4m16a2, но сразу скажу что с памятью этот проц отвратительно взаимодействует и скорость чтения в разы меньше чем должна быть...
  2. Идея отличная...действительно все так и есть. и проблема эта была, но я ее решил в пятницу путем(пока временное решение) подгонки частоты. Теперь вывод не "догоняет" ввод.. Это выражалось в том, что буферы менялись местами.... Сейчас осталась одна проблема с паузой.
  3. вот обработчик прерывания на выводе... interrupt void isr_dmac5( void ) { Uint32 addr,iq; WR++; if (WR >= BUFFERSx) WR = 0; addr = ( ( ( Uint32 )tram + 2*L_frame * WR ) << 1 ); DMA_RSETH( hDmaXmt, DMACSSAL, addr & 0xffff ); DMA_RSETH( hDmaXmt, DMACSSAU, ( addr >> 16 ) & 0xffff ); DMA_start( hDmaXmt ); DMA_RGETH( hDmaXmt, DMACSR ); } не пойму почему он не успеет выполниться при 8кГц? Еще одно его я абсолютно не могу понять это почему глюк "плавающий" он то есть то нет
  4. Двойная буферизация как я понимаю: Есть 2 буфера например ping и pong. пока заполняем пинг, выводится понг, потом срабатывает прерывание как понг вывелся, буферы меняются местами и мы начинаем заполнять понг а выводить пинг... Прерывание происходит по передачи фрейма (FRAMEI) фрейм размером ping... Автоинициализации не происходит, а происходит переконфигурирование и запуск DMA после срабатывания прерывания (записывается новый адрес и запускаем DMA на передачу). Цифры не сходятся потому, что между посылками существует пауза которая как раз и подогнана для соответствия скоростей: 13бит-синхропосылка 138бит-кадр для декодера 119бит-пустые(чередование 010101001..) итого 270бит теперь чтоб демодулировать 270 бит на демодулятор надо подать 1080выборок для какждой из квадратур (при учете что 8 выборок на символ). А вот теперь уже становится понятно, что 1080/36кГц=240/8кГц=4,5...Выходит скорости равные(в первом приближении) Выходных буфера и так 2...просто я не совсем прозрачно выразился... Про неуспевание я щас проверю... Еще раз хочу обратить внимание на то, что глюк непостоянный...возникает без видимой периодичности
  5. Приветствую. Разрабатываю речевой цифровой приемник на процессоре TI5509 200МГц, с низкоскоростным речевым декодером ACELP. На данном этапе все куски кода отлажены (например сам декодер, демодулятор, кадровая синхронизация). Проблема заставить это все работать вместе. Поскольку являюсь самоучкой, то уровень знаний очениь низок и понятия о структуре(алгоритме) такого рода программ не имею. В голове выресовывается следующая картина: -прием осуществляется с внешнего АЦП через порт McBSP1 используя контроллер DMA4 с двойной буферизацией. Частота дискретизации АЦП 36 кГц, размер буфера 1080 слов на каждую квадратуру (обращаю внимание, что количество элементов для DMA не кратно степени двойки ибо это может быть важно, но я этого не знаю). -по принятию буфера данных срабатывает прерывание FRAMEI. В обработчике осуществляется демодуляция принятного сигнала и кадровая синхронизация. -после демодуляции из двух буферов по 1080 слов получается 270 бит данных. Модуляция DQPSK, 8 отсчетов на символ. -кадровый синхронизатор находит синхропосылку и выделяет кадр для подачи на речевой декодер. -после обнаружения кадра и его полного приема (возможно при текущем или последующем прерывании) устанавливается флаг ready. -в основной программе рреализован бесконечный цикл с проверкой устанновленного флага ready. Если флаг установлен, то осуществляется декодирование кадра и запись речевых данных в буфер для вывода. При обработке прерывания или запрещаются или нет(пробовал и так и так проблема не исчезает). -вывод осуществляется во внешний ЦАП через порт McBSP2 используя контроллер DMA5 с двойной буферизацией. Частота дискретизации ЦАП 8 кГц, размер буфера 240 слов (опять же количество элементов для DMA не кратно степени двойки). После вывода (и соответственно до записи новых данных) в буфер записываются "нули". Теперь собственно о самой проблеме: При выводе возникают "паузы" которые хорошо видны на следующей осциллограмме: "пауза" возникает в конце вывода каждого кадра. Длительность кадра 30мс, паузы ~2мс (пропадает 15 выборок из 240). При этом если смотреть в отладчике выходной буфер то он не имеет "пауз" Если не очищать буфер после вывода, то вместо нулевого уровня во время "паузы" будет выводиться кусок предыдущего кадра. Проблема возникает от запуска к запуску...то есть может быть а может не быть. Кто сталкивался с разработкой устройств такого типа подскажите как быть :smile3046:
  6. а че в новосибе?тоже интересуют курсы чегонить в районе месяца по длительности...надоело в своей песочнице ковыряться...
  7. BratherLU SM понял вашу мысль сейчас попробую. Отпишу что получилось.
  8. помимо DMA в программе ничего нет и уже не работает, так что конфликт при передаче исключен. А вот как разбавить передачу 2х элементов (пауза между ними) подскажите как реализовать :rolleyes: В качестве синхронизирующего события уже выступает внешнее прерывание. Другими словами я должен слать данные с CMX когда она хочет их принять...а вот двух событий не предусмотрено.
  9. При передачи в ЦАП baseband процессора CMX981 требуется следующий формат представления данных: 0xDEXX – младшая часть выборки сигнала 0xDFXX – старшая часть выборки сигнала (два старших бита данных обязательно должны быть нулевыми). При этом временная диаграмма работы порта выглядит следующим образом: Где D5- линия данных, D7- импульсы кадровой синхронизации, D1- линия тактирования, D6- импульсы внешнего прерывания(запрос на прием данных от CMX). Тактовая частота 4.5 МГц, частота прерываний 8 кГц, кадровая частота 16 кГц. Конфигурация порта McBSP следующая: 0x0040, /* Transmit Control Register 1 */ 0x0001, /* Transmit Control Register 2 */ 0x0a80, /* Pin Control Register */ Если сконфигурировать внешнее прерывание и ручками писать в регистр DXR два раза данные то все работает...но отнимает много процессорного времени. Поэтому было решено реализовать пересылку данных в порт в режиме DMA. Для этого было выбрано событие для начала передачи по DMA (synch event) это внешнее прерывание, и отправлять по нему сразу 2 элемента (бит FS в регистре CCR выставлен в 1). Однако при этом временная диаграмма выглядит несколько иначе чем хотелось бы: для 2 элементов в кадре: где: D5- линия данных, D6- импульсы кадровой синхронизации, D1- линия тактирования, D7- импульсы внешнего прерывания(запрос на прием данных от CMX). для 20 элементов в кадре: такое ощущение что порт не успевает выдать предыдущий элемент до того как DMA закидывает в DXR следующий... Конфигурация канала DMA следующая: 0x0605, /* Source Destination Register (CSDP) */ 0x1070 /* Control Register (CCR) */ 0x0008, /* Interrupt Control Register (CICR) */ (DMA_AdrPtr) 0x0000, /* Lower Source Address (CSSA_L) - Symbolic(Byte Address) */ NULL, /* Upper Source Address (CSSA_U) - Symbolic(Byte Address) */ (DMA_AdrPtr) ((Uint32)(_MCBSP_DXR11_ADDR<<1)), /* Lower Destination Address (CDSA_L)- Numeric(Byte Address) (_MCBSP_DXR10_ADDR<<1), */ 0x0000, /* Upper Destination Address (CDSA_U) - Numeric(Byte Address) */ 0x0002, /* Element Number (CEN) */ 0x0016, /* Frame Number (CFN) */ 0x0000, /* Frame Index (CFI) */ 0x0000 /* Element Index (CEI) */ Кто может подсказать как реализовать требуемый режим?
  10. на входе буфер 16разрядными элементами...каждый элемент это бит. Он может быть или 0x0001 или 0x0000. только не прелагайте упаковать...ибо все предыдущие/последующие блоки требуют именно такой вид данных
  11. была такая проблема и строчка IRQ_globalEnable() или _enable_interrupts(); спасла...не знаю почему не прокатывало пренудительное включение....я забил
  12. Может баян, но буквочку я в коментах надеюсь не используете...у меня как рукой сняло ;)
  13. собственно прога прикреплена в ней: synch_length-длниа синхропосылки posilka_length-длина фрейма(посылки) Писал исходя из собственного понимания того как это должно быть, поэтому возможно что далеко не оптимально все получилось и хочется выслушать критику... Ух елки по запаре не туда закинул наверное надо в алгоритмы ЦОС. Модераторы перенесите если нужно. synch.rar
  14. Господин petrov может быть всетаки в наилучшем(при максимальном рабочем отношении сигнал/шум) :rolleyes:?Или я опять чтото не понимаю...
  15. Модель на целочисленке у меня есть, но, простите за глупый вопрос, что значит EVM :smile3046: не могу понять 2bahurin с Ферроу все более менее понятно, больше волнует модель в целом с EVM разобрался http://en.wikipedia.org/wiki/Error_vector_magnitude (если я правильно понял) нашел блочек в матлабе щас разбирусть что с ним делать :07:
  16. bahurin Спасибо за интересную ссылку, но в данном вопросе больше интересует не ошибка интерполяции, а шумы при квантовании и всвязи с этим критерии выбора разрядности переменных в той или иной точке программы
  17. Я согласен, но как это измерить или оценить?а если не интерполятор а чтото другое?Вообще как в жизни выбирается разрядность для обработки?особенно в нетривиальных моделях :smile3046:
  18. Добрый день. При реализации схемы восстановления тактовой синхронизации на сигнальном процессоре 5510, возникла проблема выбора разрядности для обработки. Предшествующий каскад имеет SNR 92dB (по документации). Отсюда вопрос как измерить уровень шумов квантования к примеру для интерполятора Ферроу 3го порядка в зависимости от разрядности?
  19. Цель не как вы говорите "впихнуть невпихуемое", а минимизировать блочные ошибки...ясен пень что избежать их не получится(конечно если нет безконечного буфера :laughing: ) Хочется узнать как это реализовывали люди, которые с такой проблемой сталкивались.
  20. Доброго времени суток. При реализации демодулятора столкнулся с проблемой того, что размер выходного буфера изменяется(в зависимости от разности тактовых частот приемника и передатчика) и не равен размеру входного. Сейчас сделал так: большой буфер в который циклически пишется столько отсчетов сколько приходит с демодулятора, а считывается всегда фиксированное число(равное размеру буфера вывода на устройство индикации). Проблема в том, что при тактовой частоте передатчика большей чем у приемника записывается всегда больше чем считывается и запись "догоняет" чтение на второй круг и начинается шлейф ошибок... Ткните пожалуйста на то как люди делают в мире :rolleyes:
  21. Доброе время суток. Появилась задача подключить ЦАП (DAC902-параллельный 12ти разрядный) к DSP TMS320VC5502, при этом частоту дискретизации желательно иметь 1мгц. Подскажите как их состыковать(на какой порт его повесить)
×
×
  • Создать...