tronix286 0 29 декабря, 2015 Опубликовано 29 декабря, 2015 · Жалоба Доброго, Вопрос у меня такой - возможно ли на STM32 реализовать ведомый параллельный 8-битный порт? Например подключить STM32 к шине ISA-8bit? У PIC'ов есть классная штука под названием Parallel Slave Port (PSP) - если включить этот режим некоторые ноги становятся сигналами /WR, /RD,/CS и 8-битный PORTD сам в зависимости от состояния этих ног переходит из высокоимпедального состояния в режимы input или output или опять в hi-z. На порту есть встроенная защелка, поэтому особо не важно в какой момент времени произойдет чтение из порта, так как если до этого что-то туда (в порт) было положено - оно и прочитается из защелки. Ну и по прерыванию конечно можно обрабатывать события (запись/чтение). Так вот, возвращаясь к STM32 - есть что-то подобное? Если дергать софтварно, успею ли я за пару наносекунд перевести порт из одного состояния в другой по событию? По грубым прикидкам, на 72Мгц не успею. Да и ARM - он же фиг его знает какие там префечи, кеши и вообще не понятно, за сколько исполнится какая инструкция. Закладываться на большую частоту, > 100 Мгц? А если не софтварно, то как? Вот DCMI в принципе, но... Это ж не совсем то. А может просто кто-то уже реализовывал? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VCucumber 0 29 декабря, 2015 Опубликовано 29 декабря, 2015 · Жалоба 407 может шину по типу i8085 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tronix286 0 29 декабря, 2015 Опубликовано 29 декабря, 2015 · Жалоба 407 может шину по типу i8085 Ясный пионер, что может. Любой микроконтроллер, который умеет дергать ногами, может прикинуться 8085. Вопрос встает не тогда, когда нужно кого то там дергать, а когда тебя (микроконтроллер) дергают. А именно, когда пришел сигнал чтения /RD, перевести восемь ног из hi z в output, выдать на них байт и уйти по спаду /RD быстренько опять в hi-z. Желательно за детерминированное время, а не как получится. Потому что пару раз может получится, а третий - нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 29 декабря, 2015 Опубликовано 29 декабря, 2015 · Жалоба PSP не может, а по внешнему событию можно попробовать переслать содержимое порта в память. Надо посмотреть, возможны ли такие события для работы DMA. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tronix286 0 29 декабря, 2015 Опубликовано 29 декабря, 2015 · Жалоба PSP не может, а по внешнему событию можно попробовать переслать содержимое порта в память. Надо посмотреть, возможны ли такие события для работы DMA. Меня даже больше волнует не переслать содержимое по событию в память (запись /WR), а чтение, то есть переслать из памяти в порт, при этом успев сменить направление порта туда-обратно... Так то где-то на хабре была статейка, как STM цепляли к ISA для снифа данных между контроллером HDD и мамкой. Но там все просто - порт все время в режиме input, и как только ext int, то сохраняем содержимое порта в буфер. Плюс, настроить DMA то можно GPIO <-> memory, но как настроить чтоб он еще при этом менял направление порта - вот это вопрос... В общем склоняюсь, что надо вешать внешний регистр-защелку типа 555ИР23, потому что по другому в лоб не решается. А казалось бы, мегагерцы, DMA и вообще пальцы \w/ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 10 29 декабря, 2015 Опубликовано 29 декабря, 2015 · Жалоба В общем склоняюсь, что надо вешать внешний регистр-защелку типа 555ИР23, потому что по другому в лоб не решается. А казалось бы, мегагерцы, DMA и вообще пальцы \w/ Попахивает навязыванием задачи выбранному МК. Обычно под задачу выбирают соответствующее решение. Для ногодрыга и слейв-применений STM32, увы, не подходит. Тут даже DCMI не выручит (ибо, требуется туда-сюда). Нужно делать промежуточные буферы приема и передачи, например, на ПЛИС, если нужны большие скорости. Или отказаться от наносекунд и сделать на прерываниях по фронту и спаду на пинах /CS, /RD, /WR. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
toweroff 0 29 декабря, 2015 Опубликовано 29 декабря, 2015 · Жалоба Порт держать всегда в состоянии IN /CS завесить на какой-то внешний INT в прерывании INT ждать /WR или /RD и быстренько, если нужно, перевести ноги куда нужно и выставить/прочитать пины данных дождаться окончания /RD или /WR перевести ноги обратно в IN режим дождаться окончания /CS прерыванию INT - наивысший приоритет что там будет по таймингам - черт ее знает :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VCucumber 0 29 декабря, 2015 Опубликовано 29 декабря, 2015 · Жалоба что будет - 200 мгц стм против 2 мгц исы - порвет как тузик грелку Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 10 29 декабря, 2015 Опубликовано 29 декабря, 2015 · Жалоба а чтение, то есть переслать из памяти в порт, при этом успев сменить направление порта туда-обратно... Кста, шину адреса нужно анализировать или читаем всегда из одного и того же адреса? И записываем всегда в один и тот же адрес (с позиций ISA)? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VCucumber 0 29 декабря, 2015 Опубликовано 29 декабря, 2015 (изменено) · Жалоба ну да, а еще там бизи есть - завернул за облако, поставил на ручник и стоишь-куришь Изменено 29 декабря, 2015 пользователем Огурцов Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 30 декабря, 2015 Опубликовано 30 декабря, 2015 · Жалоба Попахивает навязыванием задачи выбранному МК. Обычно под задачу выбирают соответствующее решение. С этим полностью согласен - это правильный ответ на эту тему. А если охота поизвращаться, то например на LPC43xx настраиваем один DMA-канал на чтение данных из GPIO-порта по фронту/спаду WR (тоже обычный GPIO-пин), другой DMA-канал - на запись данных в регистр управления направлением GPIO-порта по фронту/спаду OE (GPIO-пин). Не знаю как в STM32, но в LPC-шках, при желании и умении читать даташиты, никто не мешает настроить работу DMA по событиям на внешних пинах. Без всяких прерываний. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
becopt 0 30 декабря, 2015 Опубликовано 30 декабря, 2015 · Жалоба Не знаток st-шек, а fsmc не то? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tronix286 0 30 декабря, 2015 Опубликовано 30 декабря, 2015 · Жалоба Кста, шину адреса нужно анализировать или читаем всегда из одного и того же адреса? И записываем всегда в один и тот же адрес (с позиций ISA)? Шину адреса не нужно. С этим пусть аппаратный дешифратор справляется. Имхо никакой микроконтроллер с дешифрацией не справится, если он только не на паре гигагерц работает. С этим полностью согласен - это правильный ответ на эту тему. Навязывание значит... Ну не просто оно так, навязывание-то, а из-за более - менее вменяемого USB OTG у STM'ов. Вот и хотелось красиво обойтись одним МК, а не россыпью мелко-логики из защелок и триггеров, что-бы лишь параллельную шину обслужить. Не знаток st-шек, а fsmc не то? Не то. Оно типа как ведущее, то есть STM32 может чем-то управлять по этой шине (памятью, дисплеем или чем еще). А им управлять не могут. что будет - 200 мгц стм против 2 мгц исы - порвет как тузик грелку Ага, порвет, хостовую систему, когда случится коллизия на шине данных. BTW, ISA 8 Mhz Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
esaulenka 5 30 декабря, 2015 Опубликовано 30 декабря, 2015 · Жалоба Ну не просто оно так, навязывание-то, а из-за более - менее вменяемого USB OTG у STM'ов. До LPC43xx я так и не добрался, а вот в LPC17xx USB был лучше, чем ST'шный. Хост так и вовсе стандартный, можно в сети накопать несколько реализаций. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 30 декабря, 2015 Опубликовано 30 декабря, 2015 · Жалоба Использовать два порта, с одного читать, в другой записывать? Может, так проще? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться