Перейти к содержанию
    

Параллельный порт 8 бит и STM32

Доброго,

 

Вопрос у меня такой - возможно ли на STM32 реализовать ведомый параллельный 8-битный порт? Например подключить STM32 к шине ISA-8bit? У PIC'ов есть классная штука под названием Parallel Slave Port (PSP) - если включить этот режим некоторые ноги становятся сигналами /WR, /RD,/CS и 8-битный PORTD сам в зависимости от состояния этих ног переходит из высокоимпедального состояния в режимы input или output или опять в hi-z. На порту есть встроенная защелка, поэтому особо не важно в какой момент времени произойдет чтение из порта, так как если до этого что-то туда (в порт) было положено - оно и прочитается из защелки. Ну и по прерыванию конечно можно обрабатывать события (запись/чтение).

 

Так вот, возвращаясь к STM32 - есть что-то подобное? Если дергать софтварно, успею ли я за пару наносекунд перевести порт из одного состояния в другой по событию? По грубым прикидкам, на 72Мгц не успею. Да и ARM - он же фиг его знает какие там префечи, кеши и вообще не понятно, за сколько исполнится какая инструкция. Закладываться на большую частоту, > 100 Мгц?

 

А если не софтварно, то как? Вот DCMI в принципе, но... Это ж не совсем то.

А может просто кто-то уже реализовывал?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

407 может шину по типу i8085

 

Ясный пионер, что может. Любой микроконтроллер, который умеет дергать ногами, может прикинуться 8085. Вопрос встает не тогда, когда нужно кого то там дергать, а когда тебя (микроконтроллер) дергают. А именно, когда пришел сигнал чтения /RD, перевести восемь ног из hi z в output, выдать на них байт и уйти по спаду /RD быстренько опять в hi-z. Желательно за детерминированное время, а не как получится. Потому что пару раз может получится, а третий - нет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

PSP не может, а по внешнему событию можно попробовать переслать содержимое порта в память. Надо посмотреть, возможны ли такие события для работы DMA.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

PSP не может, а по внешнему событию можно попробовать переслать содержимое порта в память. Надо посмотреть, возможны ли такие события для работы DMA.

 

Меня даже больше волнует не переслать содержимое по событию в память (запись /WR), а чтение, то есть переслать из памяти в порт, при этом успев сменить направление порта туда-обратно... Так то где-то на хабре была статейка, как STM цепляли к ISA для снифа данных между контроллером HDD и мамкой. Но там все просто - порт все время в режиме input, и как только ext int, то сохраняем содержимое порта в буфер.

 

Плюс, настроить DMA то можно GPIO <-> memory, но как настроить чтоб он еще при этом менял направление порта - вот это вопрос...

 

В общем склоняюсь, что надо вешать внешний регистр-защелку типа 555ИР23, потому что по другому в лоб не решается. А казалось бы, мегагерцы, DMA и вообще пальцы \w/

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В общем склоняюсь, что надо вешать внешний регистр-защелку типа 555ИР23, потому что по другому в лоб не решается. А казалось бы, мегагерцы, DMA и вообще пальцы \w/

Попахивает навязыванием задачи выбранному МК.

Обычно под задачу выбирают соответствующее решение.

Для ногодрыга и слейв-применений STM32, увы, не подходит.

Тут даже DCMI не выручит (ибо, требуется туда-сюда).

 

Нужно делать промежуточные буферы приема и передачи, например, на ПЛИС, если нужны большие скорости.

Или отказаться от наносекунд и сделать на прерываниях по фронту и спаду на пинах /CS, /RD, /WR.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Порт держать всегда в состоянии IN

/CS завесить на какой-то внешний INT

в прерывании INT ждать /WR или /RD и быстренько, если нужно, перевести ноги куда нужно и выставить/прочитать пины данных

дождаться окончания /RD или /WR

перевести ноги обратно в IN режим

дождаться окончания /CS

прерыванию INT - наивысший приоритет

 

что там будет по таймингам - черт ее знает :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а чтение, то есть переслать из памяти в порт, при этом успев сменить направление порта туда-обратно...

Кста, шину адреса нужно анализировать или читаем всегда из одного и того же адреса?

И записываем всегда в один и тот же адрес (с позиций ISA)?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ну да, а еще там бизи есть - завернул за облако, поставил на ручник и стоишь-куришь

Изменено пользователем Огурцов

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Попахивает навязыванием задачи выбранному МК.

Обычно под задачу выбирают соответствующее решение.

С этим полностью согласен - это правильный ответ на эту тему.

 

А если охота поизвращаться, то например на LPC43xx настраиваем один DMA-канал на чтение данных из GPIO-порта по фронту/спаду WR (тоже обычный GPIO-пин), другой DMA-канал - на запись данных в регистр управления направлением GPIO-порта по фронту/спаду OE (GPIO-пин). Не знаю как в STM32, но в LPC-шках, при желании и умении читать даташиты, никто не мешает настроить работу DMA по событиям на внешних пинах. Без всяких прерываний.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Кста, шину адреса нужно анализировать или читаем всегда из одного и того же адреса?

И записываем всегда в один и тот же адрес (с позиций ISA)?

 

Шину адреса не нужно. С этим пусть аппаратный дешифратор справляется. Имхо никакой микроконтроллер с дешифрацией не справится, если он только не на паре гигагерц работает.

 

С этим полностью согласен - это правильный ответ на эту тему.

Навязывание значит... Ну не просто оно так, навязывание-то, а из-за более - менее вменяемого USB OTG у STM'ов. Вот и хотелось красиво обойтись одним МК, а не россыпью мелко-логики из защелок и триггеров, что-бы лишь параллельную шину обслужить.

 

Не знаток st-шек, а fsmc не то?

Не то. Оно типа как ведущее, то есть STM32 может чем-то управлять по этой шине (памятью, дисплеем или чем еще). А им управлять не могут.

 

что будет - 200 мгц стм против 2 мгц исы - порвет как тузик грелку

 

Ага, порвет, хостовую систему, когда случится коллизия на шине данных. BTW, ISA 8 Mhz

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну не просто оно так, навязывание-то, а из-за более - менее вменяемого USB OTG у STM'ов.

 

До LPC43xx я так и не добрался, а вот в LPC17xx USB был лучше, чем ST'шный.

Хост так и вовсе стандартный, можно в сети накопать несколько реализаций.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Использовать два порта, с одного читать, в другой записывать? Может, так проще?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...