Předávání dat mezi dvěma 8 bit procesory

Diskuze a poradna o programátorech a programování různých obvodů

Moderátor: Moderátoři

Odpovědět
Zpráva
Autor
Uživatelský avatar
Celeron
Příspěvky: 20509
Registrován: 02 dub 2011, 00:00
Bydliště: Nový Bydžov

Předávání dat mezi dvěma 8 bit procesory

#1 Příspěvek od Celeron »

Potřebuju vyřešit starý zařízení s I85, který nestíhá obsluhu dodatečně namontovaný periférie. Urychlit by se to dalo že by se "nadřazená" I85 nezabývala obsluhou periférie ale jen "poslala data na port" a vlastní obsluhu periférie by provedl "podřízený" Atmel 89C51.
Mám představu, že D(0-7) I85 by šly na Port 0 A51 a adresy A(0-7) I85 by šly na adresovej dekodér portu a v součinu s /IOW by vyvolaly INT0 přerušení v A51 a ten načetl nový data.
Nezkoušel jste někdo něco podobnýho? Teoreticky to asi chodit může, ale třeba si neuvědomuju nějakej časovej problém.
Díky
Jirka
Uživatelský avatar
Niki31
Zablokován
Zablokován
Příspěvky: 131
Registrován: 05 črc 2008, 00:00

#2 Příspěvek od Niki31 »

Co to je I85 ?

Každopádně je na to vhodná sběrnice SPI.
Uživatelský avatar
Hill
Administrátor
Příspěvky: 21233
Registrován: 10 zář 2004, 02:00
Bydliště: Jičín, Český ráj

#3 Příspěvek od Hill »

Uživatelský avatar
Niki31
Zablokován
Zablokován
Příspěvky: 131
Registrován: 05 črc 2008, 00:00

#4 Příspěvek od Niki31 »

Jó,teď je to už jasný když je znám celý název.
Procesory 8080 kompatibilní důverně znám,začínal jsem na nich.
Akorát se divím,že se ještě dnes někdo zabývá takovou vykopávkou.

Podobný problém jsem už kdysi řešil pomocí dvoubánové vyrovnávací paměti,nakonec bylo zapotřebí složité logiky kterou jsem musel realizovat pomocí GAL obvodu.Veliký problém byl v přístupu do paměti,jelikož
oba procesory nebylo možno nijak synchronizovat a docházelo ke kolizím.

Dnešní mikrokontroléry jsou mnohem výkonnější, možná by šel tento problém vyřešit emulací konkrétního počítače pomocí mikrokontroléru.
Na netu jsem už pár krát narazil na program který emuluje PMD80,
Amigu nebo ZX spektrum.Amiga na jednočipu běžela údajně mnohem rychleji než původní počítač.
Jenda_KL
Příspěvky: 1173
Registrován: 10 zář 2008, 00:00
Bydliště: Kadaň
Kontaktovat uživatele:

#5 Příspěvek od Jenda_KL »

Celeron píše: nějakej časovej problém.
(jestli jsem to pochopil dobře) Jde o to, jestli nadřazený I85 nechá na výstupu ty data dostatečně dlouhou dobu, aby cílový procesor stihl přerušit a provést dva čtecí cykly.
Nebo obráceně, aby po /IOR stihl cílový procesor přerušit a zapsat nahoru včas.
Uživatelský avatar
Celeron
Příspěvky: 20509
Registrován: 02 dub 2011, 00:00
Bydliště: Nový Bydžov

#6 Příspěvek od Celeron »

To Jenda_KL: Pochopil jsi to naprosto správně. Při zápisu na port v tom původním zařízení s I85 se zdekóduje z jeho adresový sběrnice a /IOW selekt pro Atmela, kterej v přerušení načte datovou sběrnici I85. Jde jen o směr do Atmela, zpět nic nejde.
Jenže, už jsem zjistil, že to takhle jednoduše nemůže jít, protože než Atmel provede přerušení a načte port, tak už je datová sběrnice I85 úplně jiná. Ale pokud se zároveň selektem nahodí klopák RDY, tak se I85 zastaví a až Atmel načte data, tak bitovým portem klopák RDY shodí a I85 pojede dál. Aspoň si to tedy muslím...
A proč to dělám? Je to CNC mašina z začátku 90 let, která se dnes dá sehnat ekvivalent kolem mega a něco na ní odešlo. A právě na něčem jiným, novějším, na co mám i ladící systém chci nahradit tu odešlou část. Předělávat celej původní řídící systém na novější procesor je nesmysl, nejsou zdrojáky a epromek tam je 48kb. To co potřebuju na tuhle náhradu se dá dobádat a vyměřit.
Jirka
Uživatelský avatar
ohryzek36
Příspěvky: 2393
Registrován: 24 pro 2008, 00:00
Bydliště: Zlínsko

#7 Příspěvek od ohryzek36 »

74LS273?

Možná je to ale blbost - dnes mi to moc nemyslí...
Jenda_KL
Příspěvky: 1173
Registrován: 10 zář 2008, 00:00
Bydliště: Kadaň
Kontaktovat uživatele:

#8 Příspěvek od Jenda_KL »

Pokud tedy jde o data pro jednu cílovou IO adresu:
Poradil bych si s tou 273 jako data latch a jednou EPROM jako addr decoder, kde nejvyšší databit bude 0 pro určenou adresu
Přílohy
adecoder.PNG
(18.32 KiB) Staženo 155 x
Uživatelský avatar
Niki31
Zablokován
Zablokován
Příspěvky: 131
Registrován: 05 črc 2008, 00:00

#9 Příspěvek od Niki31 »

Tohle je mnohem širší problematika a pochybuju,že to bude možné vyřešit jedním adresním dekodérem a bufferem.Určitě bude potřeba data taky
číst a co když bude procesor do periferie posílat celý blok dat.
Čas mezi jednotlivými Byte může být dlouhý jenom jako jeden instrukční
(nebo sběrnicový) cyklus.To nezvládne žádna obsluha přerušení.Dále pak nemůžeme vzít
páječku a na základní desce někde k procesoru připájet hrst drátů abychom
si vyvedli potřebné signály.
Takhle se to nedělá.

Tohle bez podrobného rozboru nikdo nevyřeší, a určitě ne na fóru.
Spíš bych se pohrával s myšlenkou přetaktování procesoru...
Pokud jde jen o zvýšení rychlosti.
Jenda_KL
Příspěvky: 1173
Registrován: 10 zář 2008, 00:00
Bydliště: Kadaň
Kontaktovat uživatele:

#10 Příspěvek od Jenda_KL »

Samozřejmě, jakou šíři má celá problematika ví jen tazatel.
Hádám že si zjistil co tam leze, uvidíme.

Já podobně řešil vysmaženou kartu DA/AD převodníku pro servosystém.
Vysmaženou myslím tak, že v ní byla díra.
Uživatelský avatar
weed_smoker
Příspěvky: 2673
Registrován: 02 pro 2011, 00:00
Bydliště: Jaroměř

#11 Příspěvek od weed_smoker »

MCU x51 maj multiprocesorovou komunikaci přes sériovej port (zapíná se to nějakym bitem v SCON nebo SMOD),u 8085 nevim. Možná bude potřeba rozšiřovat pomocí 8255 a ošéfovat to nějak adresováním.
Uživatelský avatar
Celeron
Příspěvky: 20509
Registrován: 02 dub 2011, 00:00
Bydliště: Nový Bydžov

#12 Příspěvek od Celeron »

Tak s tím zastavením I85 pomocí RDY to chodí. Prostě jakmile I85 zapíše do svýho portu, nahodí se dobastlenej klopák wait a sběrnice I85 se zastaví a je na ní stále adresa a data. Atmel si v klidu dokončí instrukci, skočí do přerušení, udělá si těch pár instrukcí (cca10) na slíznutí adresy a dat ze sběrnice I85 a pak jedním bitem P3 schodí klopák wait a I85 jede dál. Zkoušel jsem to sice jen na jedný adrese a dvěma bity dat, ale vypadá to, že to nemá problém.
Koukal jsem do knih a takhle přes RDY se dělaly pomalý paměti nebo aproximační převodníky, prostě se zastavil procesor, dokud data nezpracovala periférie, či neskončil AD převod. Uvidíme v reálu, zda těch asi 15uS zastavení bude v tý CNC mašině nějak vadit.
Jirka
Uživatelský avatar
Niki31
Zablokován
Zablokován
Příspěvky: 131
Registrován: 05 črc 2008, 00:00

#13 Příspěvek od Niki31 »

To je zajímavé,spočátku I85 nestíhal,
zařízení s I85, který nestíhá obsluhu dodatečně namontovaný periférie

a teď ho je třeba najednou zastavovat,takže asi nebude stíhat ještě víc.
Spracovat dva bity za 15uS,to je skutečný výkon.

Ale když to fachčí,nic proti tomu... :D
Uživatelský avatar
Celeron
Příspěvky: 20509
Registrován: 02 dub 2011, 00:00
Bydliště: Nový Bydžov

#14 Příspěvek od Celeron »

I85 nestíhal obsluhovat tu periférii, co teď bude řídit Atmel! Před tím musel čekat na zpracování dat v periférii a protože neměl pořádnej přerušovací systém a jelo to v čekacích smyčkách, nestíhal. U rychlýho Atmela 89C55 nebo 89S8253 je kupa přerušení a obsluha periférie se dá s přerušením napsat úplně jinak.
Jinak s tou poznámkou "2 bity za 15uS" by mě celkem zajímalo, co tím pán myslel :roll: Řekl bych, že vůbec nepochopil vo co go. Přenášel jsem celej byte ale zadrátoval na bastldesce na zkoušku pouze 2 bity. Stejně tak to "připájení hrsti drátů někam k procesoru" posledně... Ten I85 má přístupnou systémovou sběrnici pro rozšiřující desky ale to v problému není podstatný.
Jirka
Jenda_KL
Příspěvky: 1173
Registrován: 10 zář 2008, 00:00
Bydliště: Kadaň
Kontaktovat uživatele:

#15 Příspěvek od Jenda_KL »

na mě je 15us taky dost dlouhá doba, obzvláště když to bude zastavovat za každým zápisem na bus.
Klopák bych dal za adresní dekodér, pokud by byl vůcec potřeba.
Ten dekodér zajistí přerušení (event. zastavení) jen když je psáno na vybrané adresy, navíc to cílový procesor nemusí zjišťovat.
S AVRkem na 8MHz (125ns instr.cyklus) by byla rekace na přerušení asi takováto :
max. 2 - předchozí instrukce
2 - JMP INT
1 - IN rx,portina
1 - IN ry,portinb
1 - ORI rz,recflagbit
( event. 1 - SBI portn,DRstBit )
( 1 CBI - portn,DRstBit )
2 - RETI

to je 9-11 cyklů což je 1,1-1,3 us
Když se nebude Dčkem zastavovat tak data na busu a délka IOW musí být kratší než 750ns, když clockneš to AVRko tak klidně poloviční.
Odpovědět

Zpět na „Programování PIC, ATMEL, EEPROM a dalších obvodů“