AlexandrY 2 8 октября, 2010 Опубликовано 8 октября, 2010 · Жалоба Согласен, поверить трудно. Но сделано. Смотрим, удивляемся: http://electronix.ru/forum/lofiversion/index.php/t49195.html Причем из Меги выжаты все соки, но она справляется. Проект весьма удивительный. За 2 такта выдается новый 17-значный адрес... Отсюда и пошло желание реально использовать возможности контроллеров. А их явно больше чем используется в большинстве задач... Тема избитая и не новая конечно. Нынче актуально не как взять данные с камеры, а как удобно их доставить потребителю. Тогда посоветовал бы такой проект посмотреть: http://www.alylab.eu/OpenProjects/ARMDomin...bCam/WebCam.htm За STR912 не агитирую, но в ST сделала такой же проект и на STM32. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lmx2315 2 1 апреля, 2016 Опубликовано 1 апреля, 2016 · Жалоба Вопрос как у автора темы только по проще: Нужно на 10 МГц принять 128 байт (побайтно с сопровождением сигнала WR) на порт STM32f103 и после этого на такой же скорости выдать в формате 16 бит на другой порт. Больше ничего мк делать не должен, справится ли? з.ы. Планирую заводить входные данные на порт, а сигнал WR на внешнее прерывание - по его срабатыванию считывать байт с порта и писать его в массив. Как массив заполняется - читать из массива в порт + формировать сигнал WR2 - для сопровождения данных. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 1 апреля, 2016 Опубликовано 1 апреля, 2016 · Жалоба Планирую заводить входные данные на порт, а сигнал WR на внешнее прерывание - по его срабатыванию считывать байт с порта и писать его в массив. Не успеет. Надо, чтобы сигнал WR вызывал запрос DMA (например, через таймер), и уже DMA прочитает порт. И всё равно нет гарантии, что успеет, потому что у STM32F1 порты относительно медленные. В этом плане STM32F2 и STM32F4 гораздо лучше. Кстати, что мешает взять МК с внешней параллельной шиной? Или же DCMI у STM32 умеет быстро захватывать параллельные данные. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lmx2315 2 1 апреля, 2016 Опубликовано 1 апреля, 2016 · Жалоба Кстати, что мешает взять МК с внешней параллельной шиной? Или же DCMI у STM32 умеет быстро захватывать параллельные данные. ..такое дело - надо быстро решить одну задачу с помощью костылей которыми владею. Вроде на вышеупомянутый STM32 написано что его порты могут работать на частоте до 18 МГц. Если не успеет на 10 МГц , то примерно можно оценить теоретически на какой максимально частоте заработает? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 1 апреля, 2016 Опубликовано 1 апреля, 2016 · Жалоба Вроде на вышеупомянутый STM32 написано что его порты могут работать на частоте до 18 МГц. Ну, если 18 МГц, то шансы есть, наверное. Кстати, а захват ограничен во времени? Если да, то я бы сделал так: заводим 8 бит и WR на 16-разрядный порт и читаем его в память непрерывно как можно быстрее. Когда посылка закончилась (надо это как-то определять, таймером что ли), разбираем содержимое памяти, выделяем там фронты WR и соответствующие данные. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lmx2315 2 1 апреля, 2016 Опубликовано 1 апреля, 2016 · Жалоба Ну, если 18 МГц, то шансы есть, наверное. Кстати, а захват ограничен во времени? Если да, то я бы сделал так: заводим 8 бит и WR на 16-разрядный порт и читаем его в память непрерывно как можно быстрее. Когда посылка закончилась (надо это как-то определять, таймером что ли), разбираем содержимое памяти, выделяем там фронты WR и соответствующие данные. ..как-то сложно это, сделать то можно конечно, только всё не пойму - почему по EXTI нельзя ловить WR и считывать порт в массив? Я вообще думал что все проблемы будут по трате тактов на вход - выход в прерывание. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gerber 7 1 апреля, 2016 Опубликовано 1 апреля, 2016 · Жалоба На STM32F103 (при FCPU=72 MHz) время между фронтом на пине и входом в EXTI-обработчик чуть меньше микросекунды (смотрел лично логическим анализатором), поэтому прокачать 10 МГц через прерывания по WR не получится. А вот поллингом попробовать можно (как советовали выше), при запрещённых прерываниях, но вылизывать придётся каждую инструкцию цикла. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 1 апреля, 2016 Опубликовано 1 апреля, 2016 · Жалоба А вот поллингом попробовать можно (как советовали выше), при запрещённых прерываниях, но вылизывать придётся каждую инструкцию цикла. Даже поллингом и то сомнительно. Если, как писали, макс. частота GPIO у него 18МГц, то учтите что для ввода одного байта, нужно сделать минимум три чтения GPIO: одно обнаруживает активное состояние WR, второе - читает данные, третье - обнаруживает неактивное состояние WR. И того - как минимум 3 чтения GPIO на один байт данных, а значит шина должна позволять читать GPIO с частотой >=30МГц - уже не пролазим. А ещё надо учесть все комады переходов и сохранений и пр. А данный МК (STM32F103) вроде как Cortex-M0? Так в M0 ещё и инструкции перехода очень многотактовые. Можно конечно завести сигнал WR на один порт вместе с данными - так будет немного меньше чтений. Но всё равно не хватит, имхо. Если же ещё можно изменить протокол передачи - стробировать данные не каким-то уровнем сигнала WR, а фактом его изменения, тогда можно обойтись только одним чтением порта на один байт данных. Т.е. читаем 9-битный порт состоящий из данных+WR, если WR изменился - сохраняем мл.байт содержащий байт данных. В этом случае есть шанс уложиться по скорости. Особенно если ещё объединять каждые 4 чтения порта в одно выходное 32-битное значение и его уже писать в память. Очень аккуратно надо отнестись к команде условного перехода в конце цикла, может даже вообще отказаться от цикла - 128 байт - это немного - развернуть в линейный код да ещё расположить в ОЗУ. Да писать в память по 32 бита - вот тогда есть все шансы уложиться даже на STM32F103. Ещё вариант - групповое стробирование. Т.е. выдаётся только один пульс WR в начале всего пакета, по нему делается синхронизация и дальше весь пакет читается просто чтениями порта данных с соответствующими задержками между чтениями. Делал когда-то такое для интерфейса между LPC1768 с CY7C68013A - работало стабильно - так удалось добиться максимальной скорости передачи по USB. А с прерываниями - никаких шансов. 100МГц Cortex-M3 захлёбывается при частотах прерываний уже около 1МГц. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 1 апреля, 2016 Опубликовано 1 апреля, 2016 · Жалоба А задать запись через DMA с порта в память по внешнему событию - WR? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Aleksandr Baranov 1 1 апреля, 2016 Опубликовано 1 апреля, 2016 · Жалоба А данный МК (STM32F103) вроде как Cortex-M0? Cortex-M3 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться