-
- 100кГц/200кГц тик в современных Cortex-M3/M4 это совсем не страшно. В 2-х последних проектах на STM32F205 (96МГц тактовая) и STM32F407 (128MГц тактовая) так и делал. Системный тик для прерывания 100кГц. Dir(354 знак., 11.10.2012 12:58)
- вопрос не в том, страшно или нет, а в том, что не надо городить через (*) koyodza(71 знак., 11.10.2012 17:09)
- При чем тут занудство? На чела набросились за вполне нормальное и просто реализуемое решение: сделать 200кГц период прерываний в современных МК. Я защищаю его выбор ;) Dir(156 знак., 11.10.2012 18:11)
- конечно не панацея. Но DMA для решения поставленной задачи в указанных рамках это практически идеальное решение - koyodza(11.10.2012 18:14)
- При чем тут занудство? На чела набросились за вполне нормальное и просто реализуемое решение: сделать 200кГц период прерываний в современных МК. Я защищаю его выбор ;) Dir(156 знак., 11.10.2012 18:11)
- вопрос не в том, страшно или нет, а в том, что не надо городить через (*) koyodza(71 знак., 11.10.2012 17:09)
- да вы ж по моему в теме про мой генератор отметились ужо .. Ну как зачем для хорошей генерации шоб синус до 50 кГц фильтровать можно было не распухая надо тактовую ЦАПа под 200 кГц задрать .. - Blackbird_sunday(11.10.2012 10:35, )
- для этого в STM32 прерывания не нужны. Используйте DMA, сможете поднять тактовую ЦАП почти до 1МГц, прерывания при этом будут нужны только для заполнения буфера koyodza(146 знак., 11.10.2012 10:39)
- +1. в системе должно быть одно прерывание - для таймера переключения задач. Mahagam(62 знак., 11.10.2012 12:52)
- Скажу больше: "В человеке должно быть всё прекрасно: и лицо, и одежда, и душа, и мысли." - SciFi(11.10.2012 13:04)
- сиськи забыли ) - Mahagam(11.10.2012 13:06)
- Скажу больше: "В человеке должно быть всё прекрасно: и лицо, и одежда, и душа, и мысли." - SciFi(11.10.2012 13:04)
- Ээээ а вы вроде осведомлены о прямом синтезе частоты ? Во всяком случае в прошлой теме было видно что осведомлены .. Ну почему же тут говорите про DMA ? Мне же надо не линейно адреса пзу читать и из них синус дергать а про произвольным адресам Blackbird_sunday(188 знак., 11.10.2012 11:47, )
- Тем не менее DMA плюс перерасчет таблицы синуса в ОЗУ творят чудеса. - Vladimir Ljaschko(11.10.2012 12:50)
- Если есть лишних 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)
- :-))) ви не читатель, ви пейсатель. - SciFi(11.10.2012 12:03)
- Тем не менее DMA плюс перерасчет таблицы синуса в ОЗУ творят чудеса. - Vladimir Ljaschko(11.10.2012 12:50)
- Если он АЦП и GPIO запустить не желает, то DMA вообще никогда не сделает. Пусть на прерываниях, хоть какие-то шансы на успех будут. - SciFi(11.10.2012 10:43)
- +1. в системе должно быть одно прерывание - для таймера переключения задач. Mahagam(62 знак., 11.10.2012 12:52)
- для этого в STM32 прерывания не нужны. Используйте DMA, сможете поднять тактовую ЦАП почти до 1МГц, прерывания при этом будут нужны только для заполнения буфера koyodza(146 знак., 11.10.2012 10:39)
- 100кГц/200кГц тик в современных Cortex-M3/M4 это совсем не страшно. В 2-х последних проектах на STM32F205 (96МГц тактовая) и STM32F407 (128MГц тактовая) так и делал. Системный тик для прерывания 100кГц. Dir(354 знак., 11.10.2012 12:58)