Скажите пожалуйста, можно ли сделать так:
считываю данные из порта с помощью DMA в буфер (без участия ЦПУ) и одновременно считывать
через ресурсы ЦПУ ( IN port x)?
Так например я сохраняю в кольцевой буфер историю, а синхру ловлю в основном цикле WHILE(port x >sinc). Можно со штампом времени( как говорит ВитГо). И при совпадении обрабатывать с известного места (или за n отсчетов ранее).
Sergi писал(а):Скажите пожалуйста, можно ли сделать так:
считываю данные из порта с помощью DMA в буфер (без участия ЦПУ) и одновременно считывать
через ресурсы ЦПУ ( IN port x)?
Так например я сохраняю в кольцевой буфер историю, а синхру ловлю в основном цикле WHILE(port x >sinc). Можно со штампом времени( как говорит ВитГо). И при совпадении обрабатывать с известного места (или за n отсчетов ранее).
а откуда читать будешь ?
если с DCMI->DR - то ведь еще нужно знать когда прочитать (флаг заполнения учитывать) - и вот когда флаг прочитаешь (если не пропустишь его сброс от DMA который работает быстрее) - то конечно можно прочитать (правда если успеешь до того момента когда в него новое значение уже попадет при очередном захвате, см. ниже)...
думаю уже на даташитных частотах (<54 мспс) захвата DCMI обрабатывать данные напрямую с порта не получиться.. просто не успеет процессор.. - даже на ассемблере получается 4 такта проца на захват одного байта...
4 байта на один DCMI->DR = всего 16 тактов процессора...
теперь простой вопрос (к сожалению риторический) - что можно успеть сделать за эти 16 тактов с данными в DCMI->DR (напоминаю там 4 захвата) ?
ИМХО лучше извращаться в ускорении обработки буфера ОЗУ...
тот же цикл WHILE(port x >sinc) примененный для ОЗУ будет скорее всего быстрее поскольку можно написать его так чтобы читать БАЙТЫ из ОЗУ и их уже сравнивать
Я проверял- сохраняет из порта в озу за 6 тактов ЦПУ без ДМА. Добавить сравнение и переход +3 такта и разрешать сохранять через ДМА.
Если не сохранятьв озу а ловить синхру - до разрешения записи 7 тактов ЦПУ.
да, ldr/str выполняется за 6 тактов, но это на линейном коде, если не было ветвлений, плюс неизвестно как будет влиять DMA и конкуренция за шину.
в приближении выглядит как-то так:
- запускаем DCMI в закольцованном режиме,
- максимально быстро читаем порт / DCMI->DR, или буфер в поисках триггера,
- если находим, запоминаем позицию триггера, запускаем таймер на N тактов, спим,
- по прерыванию таймера - останов DCMI и разгребание буфера.
там кстати и описана странность даташита про DCMI: при АКТИВНЫХ уровнях синхронизации (VSYNC, HSYNC) данные не принимаются !! (к слову об ошибках в даташитах)... чтобы данные захватывались нужно уровни синхронизации установить в неактивный уровень
прикол в том что в регистре конфигурации задаются именно активные уровни (при которых нет захвата), а не казалось бы логичных уровни при которых наоборот идет захват...
потом еще чтото было про DMA (давно читал... буду разбираться - перечитаю и вспомню ))
Вношу, уточнение в предыдущий пост, была использована м/сх счетчика 74VНC161, а не 74LVC161 как указано в приложении. С 74LVC161 возможно было бы чуть лучше.
Ребята, пора Ваши идеи воплотить и выкарбовать в камне для потомков, для созерцания!!
В камне все станет на место «Вху-из-Вху», камень Вас или Вы камня.
Arpad писал(а):Вношу, уточнение в предыдущий пост, была использована м/сх счетчика 74VНC161, а не 74LVC161 как указано в приложении. С 74LVC161 возможно было бы чуть лучше.
Ребята, пора Ваши идеи воплотить и выкарбовать в камне для потомков, для созерцания!!
В камне все станет на место «Вху-из-Вху», камень Вас или Вы камня.
Я и Sergi (если хотите Sergi и Я) работаем над этим..
сейчас думы над входной частью..
на вход наверное opa656 - да, дорого, но зато вроде бы с диф. напряжением на входе +-Vcc... - у кого нить есть замечания ?
соответственно питать ее от +-3 вольт.. соответственно размах входного сигнала после делителя +-3 вольта, правильнее наверное даже +-2.5 вольта...
теперь вопрос о входном делителе, вернее о его коэффициентах и способах съёма сигнала с точек деления (герконовое реле или ключи по типу 74ahc1g66 или 4052 или 4051)..
вчера казались оптимальными делители 1\10\100
2 Arpad
У Вас память пишет байт за 6нс ?
Я прикидывал буфер на 161 счетчиках и опасался писать менее чем за 8нс. память cy7c1041
есть смоделированная схема в diptrace и микрокапе
ВитГо писал(а):
на вход наверное opa656 - да, дорого, но зато вроде бы с диф. напряжением на входе +-Vcc... - у кого нить есть замечания ?
соответственно питать ее от +-3 вольт.. соответственно размах входного сигнала после делителя +-3 вольта, правильнее наверное даже +-2.5 вольта...
Грабли??
OPA656 ELECTRICAL CHARACTERISTICS: VS = +/-5V
INPUT
Most Positive Input Voltage(5) +2.75 +2.1 +2.05 +2.0 V Min
Most Negative Input Voltage(5) –4.5 –4.0 –3.9 –3.8 V Min
Most Positive Input Voltage(6) +3.25 +2.6 +2.5 +2.4 V Min
Most Negative Input Voltage(6) –4.5 –4.0 –3.9 –3.8 V Min
OUTPUT
Voltage Output Swing No Load 3.9 -3.7 V Typ
RL = 100Ohm 3.5 3.3 3.2 3.1 V Min
(5) Tested < 3dB below minimum specified CMRR at CMIR limits.
(6) Input range to give > 53dB CMRR.
ВитГо писал(а):соответственно питать ее от +-3 вольт.. соответственно размах входного сигнала после делителя +-3 вольта, правильнее наверное даже +-2.5 вольта...
Грабли??
OPA656 ELECTRICAL CHARACTERISTICS: VS = +/-5V
INPUT
Most Positive Input Voltage(5) +2.75 +2.1 +2.05 +2.0 V Min
Most Negative Input Voltage(5) –4.5 –4.0 –3.9 –3.8 V Min
нет, просто опять препятствия, неужели нет операционника с нужными нам характеристиками ?!
значит оставляем opa656, и никаких делителей после усилка...
на входе один делитель, что то вроде диапазонов по входному напряжению.. цель работы делителя на вход операционника подать напряжение не более 1 вольта...
до 1 вольта (1:1), цена деления (единица АЦП) 0.008 вольта
дальше наверное до 5 вольт (1:5 для цифровых схем с ИС) - 0.04 вольта
потом до 25 вольт (1:25, сюда попадет аналог с питанием +-12, +-15, и так далее) 0.2 вольта
и до 100 вольт (1:100, это для любителей мерить розетки, конечно с щупом 1:10) 0.8 вольта
на выходе 8129 для организации сдвига сигнала с единичным усилением..
2 Arpad
Спасибо, все понял. У меня два канала, старший и младший байт, тактируются 60МГц. Или интерлив один канал 120МГц пишется словом при 60МГц тактовой.
ВитГо писал(а):вопрос о входном делителе, вернее о его коэффициентах и способах съёма сигнала с точек деления (герконовое реле или ключи по типу 74ahc1g66 или 4052 или 4051)..
вчера казались оптимальными делители 1\10\100