-
- Если есть лишних 32 кбайт ОЗУ, тогда да. - Лeoнид Ивaнoвич(16.10.2012 11:59)
- А почему 32? Если использовать полный диапазон ЦАП 12 бит и разрешение по времени = разрешению по амлитуде, то всего лишь 8 кБ, ну 16 :) Зато форма сигнала какая! Я использовал 10 бит по времени = 2 кБ. - Vladimir Ljaschko(16.10.2012 12:25)
- Расчеты у Вас неправильные. Для того, чтобы полностью использовать разрешающую способность ЦАП, количество точек таблицы должно быть в 2*pi раз больше количества квантов ЦАП (для синуса), иначе ухудшается отношение сигнал/шум. Лeoнид Ивaнoвич(740 знак., 16.10.2012 12:39)
- всё верно, кроме выводов о загруженности процессора koyodza(1109 знак., 16.10.2012 12:55)
- Пожалуй, соглашусь. Выигрыш получится. Но всё равно задача DDS сильно загружает процессор, даже при наличии DMA. - Лeoнид Ивaнoвич(16.10.2012 13:03)
- ну так никто не спорит, что загружает. Но с DMA загрузка намного меньше - koyodza(16.10.2012 13:05)
- Что "намного", это не совсем так. Уменьшаются только расходы на вход-выход в прерывание. А сколько это по сравнению с подготовкой одной точки? В реальном DDS с ЦАП высокой разрядности это же не просто выборка из таблицы, а расчет. - Лeoнид Ивaнoвич(16.10.2012 13:11)
- в ARM расчет быстрее, а вот вход-выход в прерывание медленнее, чем в AVR, если считать в тактах koyodza(445 знак., 16.10.2012 13:18)
- Кто ж спорит, конечно на ARM выйдет лучше, чем на AVR. Весь смысл этой дискуссии в том, что DMA для DDS - не панацея, не получится сделать таблицу в ОЗУ и дальше заставить все работать автоматически. - Лeoнид Ивaнoвич(16.10.2012 13:33)
- смотря что для чего. у меня FSK-модулятор именно через таблицу сделан:) Один канал DMA выводит от таймера
в DACв порт с весовыми резисторами синусоиду, другой подкачивает значения прескалера (соответственно битам) - Vit(16.10.2012 13:34 - 13:47)- Да, в некоторых частных случаях можно сделать. Выходную частоту можно довольно гибко менять подбором частоты дискретизации и размера таблицы. - Лeoнид Ивaнoвич(16.10.2012 13:43)
- конечно не получится, если отношение частот нельзя сделать отношением (небольших) целых чисел. Но тем не менее оно позволяет решить задачу более эффективно - koyodza(16.10.2012 13:36)
- смотря что для чего. у меня FSK-модулятор именно через таблицу сделан:) Один канал DMA выводит от таймера
- Кто ж спорит, конечно на ARM выйдет лучше, чем на AVR. Весь смысл этой дискуссии в том, что DMA для DDS - не панацея, не получится сделать таблицу в ОЗУ и дальше заставить все работать автоматически. - Лeoнид Ивaнoвич(16.10.2012 13:33)
- в ARM расчет быстрее, а вот вход-выход в прерывание медленнее, чем в AVR, если считать в тактах koyodza(445 знак., 16.10.2012 13:18)
- Что "намного", это не совсем так. Уменьшаются только расходы на вход-выход в прерывание. А сколько это по сравнению с подготовкой одной точки? В реальном DDS с ЦАП высокой разрядности это же не просто выборка из таблицы, а расчет. - Лeoнид Ивaнoвич(16.10.2012 13:11)
- ну так никто не спорит, что загружает. Но с DMA загрузка намного меньше - koyodza(16.10.2012 13:05)
- ещё это даёт дополнительное преимущество, если время вычисления отдельных отсчетов может сильно превышать период дискретизации koyodza(204 знак., 16.10.2012 12:59)
- Пожалуй, соглашусь. Выигрыш получится. Но всё равно задача DDS сильно загружает процессор, даже при наличии DMA. - Лeoнид Ивaнoвич(16.10.2012 13:03)
- Если частота постоянна, то пересчитывать буфер не нужно. А варьируя размер таблицы в буфере можно увеличить разрешение по частоте без всяких DDS. Или это и есть DDS? :) - Vladimir Ljaschko(16.10.2012 12:47 - 12:51)
- это только при отношении периодов в виде отношения целых чисел годится. Произвольную частоту так не получишь - koyodza(16.10.2012 13:03)
- всё верно, кроме выводов о загруженности процессора koyodza(1109 знак., 16.10.2012 12:55)
- Расчеты у Вас неправильные. Для того, чтобы полностью использовать разрешающую способность ЦАП, количество точек таблицы должно быть в 2*pi раз больше количества квантов ЦАП (для синуса), иначе ухудшается отношение сигнал/шум. Лeoнид Ивaнoвич(740 знак., 16.10.2012 12:39)
- использую DMA и с намного меньшим количеством ОЗУ. В том числе для пересылки небольших пакетов. Уже от десятка байт это эффективнее, чем прерывания по каждому байту - koyodza(16.10.2012 12:04)
- Сколько раз ни спрашивал, как сделать DDS с использованием DMA, никто пока не ответил. - Лeoнид Ивaнoвич(16.10.2012 12:22)
- наверное, не там или не так спрашивали koyodza(1206 знак., 16.10.2012 12:42)
- Да! И делать это лучше на LPC, ибо там есть FIFO и для каналов DMA ;) - Гудвин(16.10.2012 12:46)
- А лучше на BF, ибо у него кроме FIFO для каналов DMA, есть ещё и "2-D DMA".. :) - USSR(16.10.2012 13:03, )
- нах тут FIFO? - koyodza(16.10.2012 13:01)
- Ну, например для I2S на высоких скоростях пользительно. Пропускная способность шин не резиновая. Если в системе асинхронно живут несколько DMA каналов (тот же usb хост) и проц активно работает с памятью, то могут быть конфузы. Правда с том же LPC Гудвин(67 знак., 16.10.2012 13:26)
- Чет я не понимаю, как работает FIFO в данном случае. Точнее, разве он не увеличивает джиттер? - Vladimir Ljaschko(16.10.2012 14:57)
- LPC17: "Each stream is supported by a dedicated hardware channel, including source and Гудвин(369 знак., 16.10.2012 17:10)
- Звучит интересно. Vladimir Ljaschko(483 знак., 16.10.2012 17:35)
- Право не верить дано каждому :) Тем не менее в LPC17 это работает. Лично пробовал I2S на 96/192 кГц. А на 8-48 это штатно работает уже около 3 лет в пепелаце. Да еще и scatter/gather заюзан - в памяти размещена таблица дескрипторов DMA для двух Гудвин(2392 знак., 17.10.2012 08:06 - 12:04)
- Звучит интересно. Vladimir Ljaschko(483 знак., 16.10.2012 17:35)
- LPC17: "Each stream is supported by a dedicated hardware channel, including source and Гудвин(369 знак., 16.10.2012 17:10)
- мне пока DMA без FIFO хватает. Чаще нехватает самих каналов DMA и гибкости выбора источников запросов. А FIFO на SSP в STR91 оставил удручающее впечатление - koyodza(16.10.2012 13:40)
- Чет я не понимаю, как работает FIFO в данном случае. Точнее, разве он не увеличивает джиттер? - Vladimir Ljaschko(16.10.2012 14:57)
- Канал DMA может работать на частоте внутренней SRAM процессора, а внешний интерфейс на частототе периферийного модуля. - USSR(16.10.2012 13:06, )
- ну и что? Они и так работают на разных частотах - koyodza(16.10.2012 13:08)
- И тем не менее, интерфейс SPORT в BF51x подключен к шине DMA через TX FIFO = 4x32 OR 8x16 и RX FIFO = 4x32 OR 8x16. Cм, HRM, rev 1.0, Figure 19-1. "SPORT Block Diagram". - USSR(16.10.2012 13:17, )
- может ещё в Р4 каналы FIFO и DMA посчитаем? - koyodza(16.10.2012 13:19)
- Ну при чем тут P4? Данные для нескольких каналов DMA могут лежать во внутренней памяти процессора, общей для всех этих каналов DMA. Каждый канал DMA имеет программируемый приоритет обращения к этой общей памяти, и канал, который имеет в данный USSR(370 знак., 16.10.2012 13:45, )
- для этого надо рассчитывать пропускную способность и возможности системы, а не тупо ставить самый крутой проц и потом разруливать - koyodza(16.10.2012 13:52)
- Ага. "Гладко было на бумаге.." Кроме того, я почему-то больше склонен доверять опыту ADI,TI и проч., "для чего-то" предусмотревших FIFO в канале DMA в своих поделиях, нежели местным "счетоводам".. :) - USSR(16.10.2012 13:57, )
- аргументация железная: "почему-то больше склонен доверять... для чего-то предусмотревшим". А самому посчитать где чего нужно нельзя, всё ведь уже предусмотрено. Тем более нельзя подумать, зачем оно предусмотрено, ведь это означает поставить koyodza(39 знак., 16.10.2012 14:09)
- Да дело даже не в пропускной способности шины. Допустим, есть шина, у которой пропускная способность, к примеру, 120 МБайт/сек, и эта шина с запасом позволяет окучивать 10 потребителей с суммарным(!) трафиком 1 МБайт/сек. Теперь, что произойдет с USSR(399 знак., 16.10.2012 14:34, )
- Зачем как раз понятно - шина к памяти не резиновая. - =AlexD=(16.10.2012 14:17)
- Да ладно Вам. Никто не спорит, что иметь FIFO - хорошо. Но во многих случаях можно обходиться и без него. Зачем ставить дорогой проц от ADI, TI туда, где можно обойтись дешевым STM32? А где именно - нужно считать, так что зря злорадствуете. - Лeoнид Ивaнoвич(16.10.2012 14:05)
- аргументация железная: "почему-то больше склонен доверять... для чего-то предусмотревшим". А самому посчитать где чего нужно нельзя, всё ведь уже предусмотрено. Тем более нельзя подумать, зачем оно предусмотрено, ведь это означает поставить koyodza(39 знак., 16.10.2012 14:09)
- Ага. "Гладко было на бумаге.." Кроме того, я почему-то больше склонен доверять опыту ADI,TI и проч., "для чего-то" предусмотревших FIFO в канале DMA в своих поделиях, нежели местным "счетоводам".. :) - USSR(16.10.2012 13:57, )
- для этого надо рассчитывать пропускную способность и возможности системы, а не тупо ставить самый крутой проц и потом разруливать - koyodza(16.10.2012 13:52)
- Ну при чем тут P4? Данные для нескольких каналов DMA могут лежать во внутренней памяти процессора, общей для всех этих каналов DMA. Каждый канал DMA имеет программируемый приоритет обращения к этой общей памяти, и канал, который имеет в данный USSR(370 знак., 16.10.2012 13:45, )
- может ещё в Р4 каналы FIFO и DMA посчитаем? - koyodza(16.10.2012 13:19)
- И тем не менее, интерфейс SPORT в BF51x подключен к шине DMA через TX FIFO = 4x32 OR 8x16 и RX FIFO = 4x32 OR 8x16. Cм, HRM, rev 1.0, Figure 19-1. "SPORT Block Diagram". - USSR(16.10.2012 13:17, )
- ну и что? Они и так работают на разных частотах - koyodza(16.10.2012 13:08)
- Ну, например для I2S на высоких скоростях пользительно. Пропускная способность шин не резиновая. Если в системе асинхронно живут несколько DMA каналов (тот же usb хост) и проц активно работает с памятью, то могут быть конфузы. Правда с том же LPC Гудвин(67 знак., 16.10.2012 13:26)
- Да! И делать это лучше на LPC, ибо там есть FIFO и для каналов DMA ;) - Гудвин(16.10.2012 12:46)
- наверное, не там или не так спрашивали koyodza(1206 знак., 16.10.2012 12:42)
- Сколько раз ни спрашивал, как сделать DDS с использованием DMA, никто пока не ответил. - Лeoнид Ивaнoвич(16.10.2012 12:22)
- А почему 32? Если использовать полный диапазон ЦАП 12 бит и разрешение по времени = разрешению по амлитуде, то всего лишь 8 кБ, ну 16 :) Зато форма сигнала какая! Я использовал 10 бит по времени = 2 кБ. - Vladimir Ljaschko(16.10.2012 12:25)
- Если есть лишних 32 кбайт ОЗУ, тогда да. - Лeoнид Ивaнoвич(16.10.2012 11:59)