Stránka 1 z 1

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

Napsal: 13 bře 2014, 10:50
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

Napsal: 14 bře 2014, 17:17
od Niki31
Co to je I85 ?

Každopádně je na to vhodná sběrnice SPI.

Napsal: 14 bře 2014, 18:27
od Hill

Napsal: 15 bře 2014, 18:13
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č.

Napsal: 15 bře 2014, 19:21
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.

Napsal: 16 bře 2014, 02:43
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

Napsal: 16 bře 2014, 06:43
od ohryzek36
74LS273?

Možná je to ale blbost - dnes mi to moc nemyslí...

Napsal: 16 bře 2014, 10:13
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

Napsal: 16 bře 2014, 14:00
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.

Napsal: 16 bře 2014, 14:23
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.

Napsal: 16 bře 2014, 18:20
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.

Napsal: 16 bře 2014, 20:32
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

Napsal: 17 bře 2014, 11:52
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

Napsal: 17 bře 2014, 13:55
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

Napsal: 17 bře 2014, 15:34
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í.