Вопрос о соединении портов AT90S1200
Вопрос о соединении портов AT90S1200
Есть желание передавать данные от одного AT90S1200 к другому через порт B. Нужны ли какие-то резисторы вешать на линии порта B. Какие и каким образом?
Направление передачи очевидно можно передавать через какую-нибудь линию порта D.
Направление передачи очевидно можно передавать через какую-нибудь линию порта D.
- Реклама
Re: Вопрос о соединении портов AT90S1200
расстояние?
зачем передавать направление? Возьмите за основу UART - одна линия на передачу, другая линия на приём.
зачем передавать направление? Возьмите за основу UART - одна линия на передачу, другая линия на приём.
Re: Вопрос о соединении портов AT90S1200
Достаточно трех линий для двустороннего обмена (если не использовать UART и соответствующую проверку достоверности кода).
Но то в основном в пределах одной конструкции - обмен между модулями.

Но то в основном в пределах одной конструкции - обмен между модулями.
Re: Вопрос о соединении портов AT90S1200
Офигеть! Как же ж люди однопроводным UART-ом обходятся!
Я уже не говорю об 1-wire с паразитным питанием!
Я уже не говорю об 1-wire с паразитным питанием!
- Реклама
Re: Вопрос о соединении портов AT90S1200
кроме uart я бы рассмотрел i2c, 1-wire (dallas), spi, 44780(4/8bit) в зависимости от расстояний и необходимых скоростей.
у AT90S1200 есть встроенные пуллапы, впринципе можно обойтись ими для низкоскоростных двунаправленных линий , а для uart и процчих однонапрвленных линий - просто двухтактный выход gpio настраиваем и все.
OKF, далеко не всегда требуется передавать гигабиты в секунду, часто в контроллерах требуются оч скромные скорости и потоки и 1w может оказаться разумнее чем sas, hdmi или eth10G
у AT90S1200 есть встроенные пуллапы, впринципе можно обойтись ими для низкоскоростных двунаправленных линий , а для uart и процчих однонапрвленных линий - просто двухтактный выход gpio настраиваем и все.
OKF, далеко не всегда требуется передавать гигабиты в секунду, часто в контроллерах требуются оч скромные скорости и потоки и 1w может оказаться разумнее чем sas, hdmi или eth10G
Re: Вопрос о соединении портов AT90S1200
[uquote="AlexS4",url="/forum/viewtopic.php?p=4474678#p4474678"]далеко не всегда требуется передавать гигабиты в секунду...[/uquote]
На 100%. Тем более, задача ТС не ясна. Вполне возможно что ему нужно передавать данные типа boolean.)
На 100%. Тем более, задача ТС не ясна. Вполне возможно что ему нужно передавать данные типа boolean.)
Re: Вопрос о соединении портов AT90S1200
Обе микросхемы расположены на одной плате. Хотелось бы максимальное быстродействие, поэтому параллельно. Но может быть действительно тетрадами, если только AT90S1200 так умеет(половина порта на выход,половина на вход, чтобы порты не переключать на вход и выход постоянно.
Данные типа 8 и 16 бит знаковые. Задача распараллеливание выполнения алгоритма.
Допустим: первая посылает второй два байта(может быть действительно тетрадами) и пока вторая их умножает( в AT90S1200 операции умножения нет), выполняет что-то еще, а когда готов результат, забирает его себе.
Данные типа 8 и 16 бит знаковые. Задача распараллеливание выполнения алгоритма.
Допустим: первая посылает второй два байта(может быть действительно тетрадами) и пока вторая их умножает( в AT90S1200 операции умножения нет), выполняет что-то еще, а когда готов результат, забирает его себе.
Re: Вопрос о соединении портов AT90S1200
В таком случае арбитраж готовности к приему/завершения обработки должен быть (помимо потока данных).
Это еще и без контроля целостности (CRC или еще чего).
У меня с таким трехпроводка справляется.
К примеру (правда это ассемблер для mcs51, но алгоритм на любое семейство легко переделывается)
Не факт, что оптимально, но надежно и вполне с задачами справляется.

Это еще и без контроля целостности (CRC или еще чего).
У меня с таким трехпроводка справляется.
К примеру (правда это ассемблер для mcs51, но алгоритм на любое семейство легко переделывается)
Спойлер
Код: Выделить всё
;
; bspi_m.txt
;
; файл протокола приемопередатчика
; последовательного обмена с побитовой синхронизацией
; передача/прием ведется младшими битами вперед
; в девятибитовом формате
; первым идет пересылка флага "команда/данные"
; далее следует 8 бит данных(вектора команды)
;
; предшетвующее вызову подпрограмм содержимое
; аккумулятора не сохраняется !!!
;
;----------------------------------------------
;
; bus_dtr equ N ; шина данных/запроса доступа
; по reset вход с внешней подтяжкой к +5 вольт
; при запросе выход с активным уровнем 0
; при обмене соответственно или вход или выход
; с данными в прямом коде
; bus_clc equ N ; тактовый строб обмена данными
; по reset/cold init вход с внешней подтяжкой к +5 вольт
; при обмене соответственно вход(прием) или выход(передача)
; активный уровень 0
; bus_qt equ N ; шина квитирования
; по reset/cold init вход с внешней подтяжкой к +5 вольт
; активный уровень 0
; вход для передатчика, выход для приемника
;
;----------------------------------------------
;
; модуль приемопередачи
; по умолчанию
; используется текущий регистровый банк
;
; .define cntbit_t R2 ; r2 rb0 счетчик бит
; .define cnt_tm R3 ; r3 rb0 счетчик таймера задержки
; .define data_t R7 ; r7 rb0 байт буфера данных
; .define txd_port Pх ; Рх как порт ввода/вывода и строба
; data_key: .dbit 1 ; флаг типа данные/команда
; data_key=0 - байт с данными
; data_key=1 - байт с командой
;
;----------------------------------------------
;
; собственно передача data_key и байта данных
; перед вызовом программы данные должны быть загружены в
; аккумулятор
; и установлен в соответствие флаг data_key
;(data_key=0 - байт с данными
; data_key=1 - байт с командой)
; программа использует текущий регистровый банк
;
.cseg
bspi_txd:
xch a,data_t ; данные помещены в data_t, R7 в ACC
push ACC ; R7 в стеке
mov a,cnt_tm
push ACC ; R3 в стеке
mov a,cntbit_t
push ACC ; R2 в стеке
orl txd_port,#(1<<bus_dtr || 1<<bus_clc || 1<<bus_qt) ; настройка порта
; за исключением at89s5x возможно потребуется настройка портов
; bus_dtr=bus_clc=bus_qt=ВХОД
tx_on:
mov cntbit_t,#8 ;
mov c,data_key
acall strob ; бит типа данных передан
data_tx:
xch a,data_t
rrc a ; предсдвиг значения данных
xch a,data_t
acall strob ; бит данных передан
djnz cntbit_t,data_tx
tx_off:
setb txd_port.bus_dtr ; страховое закрытие bus_dtr
; за исключением at89s5x возможно потребуется настройка портов
; шины bus_dtr=bus_clcbus_qt=ВХОД
; и bus_dtr=bus_clcbus_qt=1
pop ACC
mov cntbit_t,a ; R2 восстановлен
pop ACC
mov cnt_tm,a ; R3 восстановлен
pop ACC
xch a,data_t ; предшествующее содержимое R7 восстановлено
; содержимое ACC не определено
ret
;----------------------------------------------------------
strob:
mov txd_port.bus_dtr,c ; выдать бит data_key на bus_dtr
acall time ; задержка установки данных
clr txd_port.bus_clc ; активируем запрос синхронизации
acall time ; задержка установки данных
tx_tp0:
mov a,txd_port ; читаем входные линии Р1 в А
jb ACC.bus_qt,tx_tp0 ; ожидание ответа приемника (bus_qt=0)
setb txd_port.bus_clc ; деактивируем запрос синхронизации
acall time ; задержка установки данных
tx_tp1:
mov a,txd_port ; читаем входные линии Р1 в А
jnb ACC.bus_qt,tx_tp1 ; ожидание ответа приемника (bus_qt=1)
ret
;
;--------------------*****---------------------
;
; модуль приема
;
; не имеет защиты от превышения ожидания длительности строба
; сопровождения исходя из предположения, что обмен между модулями
; является основной частью программы в промежутках между
; исполнением команд
; т.е. допускается полный останов обмена
; программа использует текущий регистровый банк
;
; по выходу
; в data_key значение в соответствии с принятым (0 или 1)
; в аккумуляторе принятые данные в прямом коде прямой
; последовательности
;
bspi_rxd:
xch a,data_t
push ACC ; R7 в стеке
mov a,cnt_tm
push ACC ; R3 в стеке
mov a,cntbit_t
push ACC ; R2 в стеке
mov cntbit_t,#8 ; загрузить счетчик бит
orl txd_port,#(1<<bus_dtr || 1<<bus_clc || 1<<bus_qt) ; настройка порта
; за исключением at89s5x возможно потребуется настройка портов
; /bus_dtr=bus_clc=ВХОД, bus_qt=ВЫХОД/
; bus_dtr=bus_clc=bus_qt=ВХОД
; bus_dtr=bus_clc=bus_qt=1
rx_on:
acall strobinp
mov a,data_t
rlc a ; изьятие data_key поскольку процедура
mov data_key,c ; приема бита единая для всех бит
data_rx:
acall strobinp
djnz cntbit_t,data_rx
pop ACC
mov cntbit_t,a ; R2 восстановлен
pop ACC
mov cnt_tm,a ; R3 восстановлен
pop ACC
xch a,data_t ; данные перемещены в акумулятор, R7 восстановлен
ret
;-------------------------------------------------------------
strobinp:
mov a,txd_port
jb ACC.bus_clc,strobinp ; простой в ожидании
rx_tp0:
acall time ; задержка установки данных
mov a,txd_port
mov c,ACC.bus_dtr
xch a,data_t
rrc a
xch a,data_t
clr txd_port.bus_qt ; активировать строб квитирования
acall time ; задержка установки данных
rx_tp1:
mov a,txd_port
jnb ACC.bus_clc,rx_tp1 ; ждем ответ передатчика
setb txd_port.bus_qt ; деактивировать строб квитирования
acall time ; задержка установки данных
ret
;
;---------------------------------------------------------
;
; возврат квитанции результата
; выполненной операции для
; "обработчиков команд "smart vectors""
; Мастер в момент окончания квитирования
; последнего бита данных для смарт-команды
; выставляет bus_clc=0
; и переходит в ожидание bus_qt=0 от приемника
; затем мастер выставляет bus_clc=1 и ожидает
; bus_qt=1 от приемника после чего продолжает
; выполнение программы согласно задачи
; Алгоритм квитирования тот же, что и у
; обычной пересылки бита, но выполняется
; в конце отправки смарт пакета
; сразу за пересылкой последнего бита данных
; мастером
; (байт команды+байт данных) - назначение
; такой квитанции - избежать обратной
; пересылки квитанционного байта данных
; от периферии мастеру
; (сокращение времени реакции)
;
smart_qt_slave:
mov a,cnt_tm
push ACC
mov a,txd_port
jb ACC.bus_clc,smart_qt_slave ; ждем запрос передатчика
clr txd_port.bus_qt ; актвировать строб квитирования
acall time ; задержка установки данных
qt0_p:
mov a,txd_port
jnb ACC.bus_clc,qt0_p ; ждем ответ передатчика
setb txd_port.bus_qt ; деактивировать строб квитирования
acall time ; задержка установки данных
pop ACC
mov cnt_tm,a
ret
;
;----------------------------------------
;
; запрос ведущим "smart" квитанции
; от ведомого о завершении исполнения задачи
;
smart_qt_master:
mov a,cnt_tm
push ACC
clr txd_port.bus_clc ; Мастер в момент окончания
; квитирования последнего бита данных
; для смарт-команды выставляет bus_clc=0
acall time ; задержка установки данных
qt2_p:
mov a,txd_port
jb ACC.bus_qt,qt2_p ; и переходит в ожидание
; bus_qt=0 от приемника
setb txd_port.bus_clc ; деактивировать
; запрос квитирования
acall time ; задержка установки данных
qt3_p:
mov a,txd_port
jnb ACC.bus_qt,qt3_p ; и переходит в ожидание
; bus_qt=1 от приемника
pop ACC
mov cnt_tm,a
ret
;
;---------------------------------------------------------
;
; генерация интервала задержки
;
time:
mov cnt_tm,#8 ; интервал задержки
djnz cnt_tm,$ ;
ret
;Re: Вопрос о соединении портов AT90S1200
8 бит двунаправлено. С готовностями и стробами. Посмотрите на 580ВВ55.
Re: Вопрос о соединении портов AT90S1200
А сколько выводов для обслуживания ВВ55й потребуется?
AT90S1200 это ж МК аналогичный по упаковке аттини2313... Там же останется совсем маалооо лапок...

AT90S1200 это ж МК аналогичный по упаковке аттини2313... Там же останется совсем маалооо лапок...
Re: Вопрос о соединении портов AT90S1200
Я ж не про выводы, я про идеологию. Как происходит 8-ми битный обмен. Но, можно и упростить.
И ВВ55 - это чисто для примера. Нужно смотреть соответствующий режим.
И ВВ55 - это чисто для примера. Нужно смотреть соответствующий режим.
Re: Вопрос о соединении портов AT90S1200
Так режим не особо отличается от аналогичного доступа к внешней памяти данных.
Плюс линии квитирования. 8 битная шина адреса/данных, строб записи, строб чтения, пара выводов для арбитража, линия "адрес/данные"... В принципе...
Можно адаптировать тот же протокол, что и у меня выше, только шина данных не в 1 бит, а в 8.
Только вот для той AT90S1200 может и такое роскошь - там ведь всего 1К ПЗУ...

Плюс линии квитирования. 8 битная шина адреса/данных, строб записи, строб чтения, пара выводов для арбитража, линия "адрес/данные"... В принципе...
Можно адаптировать тот же протокол, что и у меня выше, только шина данных не в 1 бит, а в 8.
Только вот для той AT90S1200 может и такое роскошь - там ведь всего 1К ПЗУ...


