реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Параллельный порт 8 бит и STM32, возможно ли подружить?
Tronix286
сообщение Dec 29 2015, 17:27
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 72
Регистрация: 25-10-14
Пользователь №: 83 341



Доброго,

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

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

А если не софтварно, то как? Вот DCMI в принципе, но... Это ж не совсем то.
А может просто кто-то уже реализовывал?
Go to the top of the page
 
+Quote Post
Огурцов
сообщение Dec 29 2015, 17:34
Сообщение #2


Гуру
******

Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588



407 может шину по типу i8085
Go to the top of the page
 
+Quote Post
Tronix286
сообщение Dec 29 2015, 17:57
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 72
Регистрация: 25-10-14
Пользователь №: 83 341



Цитата(Огурцов @ Dec 29 2015, 20:34) *
407 может шину по типу i8085


Ясный пионер, что может. Любой микроконтроллер, который умеет дергать ногами, может прикинуться 8085. Вопрос встает не тогда, когда нужно кого то там дергать, а когда тебя (микроконтроллер) дергают. А именно, когда пришел сигнал чтения /RD, перевести восемь ног из hi z в output, выдать на них байт и уйти по спаду /RD быстренько опять в hi-z. Желательно за детерминированное время, а не как получится. Потому что пару раз может получится, а третий - нет.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Dec 29 2015, 18:21
Сообщение #4


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



PSP не может, а по внешнему событию можно попробовать переслать содержимое порта в память. Надо посмотреть, возможны ли такие события для работы DMA.
Go to the top of the page
 
+Quote Post
Tronix286
сообщение Dec 29 2015, 18:38
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 72
Регистрация: 25-10-14
Пользователь №: 83 341



Цитата(ViKo @ Dec 29 2015, 21:21) *
PSP не может, а по внешнему событию можно попробовать переслать содержимое порта в память. Надо посмотреть, возможны ли такие события для работы DMA.


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

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

В общем склоняюсь, что надо вешать внешний регистр-защелку типа 555ИР23, потому что по другому в лоб не решается. А казалось бы, мегагерцы, DMA и вообще пальцы \w/
Go to the top of the page
 
+Quote Post
adnega
сообщение Dec 29 2015, 20:04
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(Tronix286 @ Dec 29 2015, 21:38) *
В общем склоняюсь, что надо вешать внешний регистр-защелку типа 555ИР23, потому что по другому в лоб не решается. А казалось бы, мегагерцы, DMA и вообще пальцы \w/

Попахивает навязыванием задачи выбранному МК.
Обычно под задачу выбирают соответствующее решение.
Для ногодрыга и слейв-применений STM32, увы, не подходит.
Тут даже DCMI не выручит (ибо, требуется туда-сюда).

Нужно делать промежуточные буферы приема и передачи, например, на ПЛИС, если нужны большие скорости.
Или отказаться от наносекунд и сделать на прерываниях по фронту и спаду на пинах /CS, /RD, /WR.
Go to the top of the page
 
+Quote Post
toweroff
сообщение Dec 29 2015, 20:16
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Порт держать всегда в состоянии IN
/CS завесить на какой-то внешний INT
в прерывании INT ждать /WR или /RD и быстренько, если нужно, перевести ноги куда нужно и выставить/прочитать пины данных
дождаться окончания /RD или /WR
перевести ноги обратно в IN режим
дождаться окончания /CS
прерыванию INT - наивысший приоритет

что там будет по таймингам - черт ее знает sm.gif
Go to the top of the page
 
+Quote Post
Огурцов
сообщение Dec 29 2015, 20:26
Сообщение #8


Гуру
******

Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588



что будет - 200 мгц стм против 2 мгц исы - порвет как тузик грелку
Go to the top of the page
 
+Quote Post
adnega
сообщение Dec 29 2015, 20:38
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(Tronix286 @ Dec 29 2015, 21:38) *
а чтение, то есть переслать из памяти в порт, при этом успев сменить направление порта туда-обратно...

Кста, шину адреса нужно анализировать или читаем всегда из одного и того же адреса?
И записываем всегда в один и тот же адрес (с позиций ISA)?
Go to the top of the page
 
+Quote Post
Огурцов
сообщение Dec 29 2015, 22:22
Сообщение #10


Гуру
******

Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588



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

Сообщение отредактировал Огурцов - Dec 29 2015, 22:23
Go to the top of the page
 
+Quote Post
jcxz
сообщение Dec 30 2015, 04:16
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(adnega @ Dec 30 2015, 02:04) *
Попахивает навязыванием задачи выбранному МК.
Обычно под задачу выбирают соответствующее решение.

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

А если охота поизвращаться, то например на LPC43xx настраиваем один DMA-канал на чтение данных из GPIO-порта по фронту/спаду WR (тоже обычный GPIO-пин), другой DMA-канал - на запись данных в регистр управления направлением GPIO-порта по фронту/спаду OE (GPIO-пин). Не знаю как в STM32, но в LPC-шках, при желании и умении читать даташиты, никто не мешает настроить работу DMA по событиям на внешних пинах. Без всяких прерываний.
Go to the top of the page
 
+Quote Post
Valentine Logino...
сообщение Dec 30 2015, 06:51
Сообщение #12


Частый гость
**

Группа: Участник
Сообщений: 78
Регистрация: 7-04-10
Из: Пушкино
Пользователь №: 56 462



Не знаток st-шек, а fsmc не то?
Go to the top of the page
 
+Quote Post
Tronix286
сообщение Dec 30 2015, 07:10
Сообщение #13


Участник
*

Группа: Участник
Сообщений: 72
Регистрация: 25-10-14
Пользователь №: 83 341



Цитата(adnega @ Dec 29 2015, 23:38) *
Кста, шину адреса нужно анализировать или читаем всегда из одного и того же адреса?
И записываем всегда в один и тот же адрес (с позиций ISA)?


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

Цитата(jcxz @ Dec 30 2015, 07:16) *
С этим полностью согласен - это правильный ответ на эту тему.

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

Цитата(Valentine Loginov @ Dec 30 2015, 09:51) *
Не знаток st-шек, а fsmc не то?

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

Цитата(Огурцов @ Dec 29 2015, 23:26) *
что будет - 200 мгц стм против 2 мгц исы - порвет как тузик грелку


Ага, порвет, хостовую систему, когда случится коллизия на шине данных. BTW, ISA 8 Mhz
Go to the top of the page
 
+Quote Post
esaulenka
сообщение Dec 30 2015, 07:43
Сообщение #14


Профессионал
*****

Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877



Цитата(Tronix286 @ Dec 30 2015, 10:10) *
Ну не просто оно так, навязывание-то, а из-за более - менее вменяемого USB OTG у STM'ов.


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


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post
ViKo
сообщение Dec 30 2015, 08:05
Сообщение #15


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Использовать два порта, с одного читать, в другой записывать? Может, так проще?
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th June 2025 - 09:59
Рейтинг@Mail.ru


Страница сгенерированна за 0.0148 секунд с 7
ELECTRONIX ©2004-2016