Forum: Mikrocontroller und Digitale Elektronik Problem beim Ansteuern vom ISA Adressbus


von Stephan (Gast)


Lesenswert?

hallo

habe bis jetzt eine ISA karte selbst entwickelt und zusammengelötet.
d.h. auf der platine befindet sich ein mc68hc12 microcontroller, der
da jetz dann viele verschiedene tolle sachen machen soll...
alles funktioniert, nur ich will der karte jetz mit hilfe den
adressleitungen eine IO adresse vergeben! und zwar die adresse 0x200 !
in binär sieht das so aus: 10 0000 0000

ich hab das problem dass sobald ich an A0 oder A1 was dranhäng egal ob
GND oder +5V der rechner nimmer hochfährt beim anmachen also es kommt
kein bild etc... sobald A1 weggelötet ist gehts wieder, warum ? A2-10
hängen bei mir auch am controller, nur da störts nich...

wenn ich jetz die adresse 200h haben will, reicht das wenn ich A10
direkt an +5V häng und der rest lose bleibt ?
wie würdet ihr das am besten machen ?

mfg

von Thomas Burkhardt (Gast)


Lesenswert?

Hi,

was bedeutet hier A10 auf +5V hängen???

Du sollst auf die Adressleitungen doch keine Signale geben. Nein das
muss ich falsch verstanden haben, das kannst du nicht gemeint
haben...

von Stephan (Gast)


Lesenswert?

dann muss ich wohl was falsch verstanden haben..
es gibt doch den sog. IO Speicher aufm Mainboard, dort hängt der
Prozessor dran und jegliche peripherie, wenn ich jetz vom controller
aus
was in den IO Speicher schreiben will sodass der Proz sich dann die
Daten via "in al, dx" holen kann, muss ich doch 0x200 also das
entsprechende Adressbitmuster auf den Datenbus legen oder ?

mfg

von Stephan (Gast)


Lesenswert?

ääh sorry, adressbus mein ich

von Andi (Gast)


Lesenswert?

Ich weis ja nicht, was für nen Rechner du verwendest und ich kenn mich
mit ISA-Bus (elektronisch gesehen) nicht aus.
Aber ist auf der Adresse 0x200 nicht schon der ISA-Gameport?

Gruß
Andi

von Thomas Burkhardt (Gast)


Lesenswert?

und was passiert in deiner schaltung, wenn die CPU versucht auf den Bus
zuzugreifen, während du an den Adressleitungen rumfummelst?

Die Adresse der ISA Karte ist imo doch nur zur Auswertung auf der Karte
gedacht. Sie wird mit dem Zustand der Adressleitungen durch einen
Vergleicher gejagt, um festzustellen, wann sie sich angesprochen fühlen
soll.

Um von selbst schreibend auf den Bus zuzugreifen muss man ein
ziemliches Prozedere durchziehen:


"An ISA device may take control of the bus, but this must be done with
caution. There are no safety mechanisms involved, and so it is easily
possible to crash the entire system by incorrectly taking control of
the bus. For example, most systems require bus cycles for DRAM refresh.
If the ISA bus master does not relinquish control of the bus or generate
its own DRAM refresh cycles every 15 microseconds, the system RAM can
become corrupted. The ISA adapter card can generate refresh cycles
without relinquishing control of the bus by asserting REFRESH. MRDC can
be then monitored to determine when the refresh cycle ends.
To take control of the bus, the device first asserts its DRQ line. The
DMAC sends a hold request to the cpu, and when the DMAC receives a hold
acknowledge, it asserts the appropriate DAK line corresponding to the
DRQ line asserted. The device is now the bus master. AEN is asserted,
so if the device wishes to access I/O devices, it must assert MASTER16
to release AEN. Control of the bus is returned to the system board by
releasing DRQ."

von Stephan (Gast)


Lesenswert?

du meinst den joystick port ?
nö hab im gerätemanager geschaut, 200 bis 270 is frei..
isn testrechner, is ja auch keine soundkarte drin :P
ISA soundkarten verwenden gern 200h bis 240h..

von Hannes Hering (Gast)


Lesenswert?

Hallo,

Kannst du mal den Schaltplan von deiner Karte posten, damit man sich
vorstellen kann, was du da vor hast? So wie ich das gelesen hab, hast
du vom Grundsatz nicht verstanden, wie ein ISA-Bus funktioniert. Im
Falle von IN DL, AL passiert nämlich folgendes:

- Die CPU auf dem Mainboard legt die Adresse auf den Adressbus
- Sie liest die Daten vom ISA-Bus entsprechend der Karte, die auf diese
Adresse antwortet.

Was dann dein Controllerboard machen muss ist:
- An den Adressleitungen auf die IO Adresse lauschen, und wenn diese
anliegt:
- Daten auf den Datenbus legen!

ACHTUNG: NIEMALS Adressleitungen von einer ISA-Karte mit 5V oder GND
verbinden! Diese Leitungen sind AUSGÄNGE (aus sicht des ISA-Slots) und
dürfen nur an Hochohmige EINGÄNGE geschaltet werden! Das erklärt auch,
warum A0 und A1 sich nicht auf 5V oder GND legen lassen und dann der PC
nicht mehr startet: Die CPU kann ihre Adressen gar nicht mehr auf den
Bus legen! Ein wunder, das dein Board das überlebt hat ...

MFG

Hannes

von Stephan (Gast)


Lesenswert?

ok....

also ich hab noch nie einen vergleicher (comperator?) verwendet, bin
noch bisle newbie beim basteln ;)
also ich stell mir des vor dass dann da meine 10 adressleitungen
reingehen und ich diesen Comperator auf ein bestimmtes bitmuster vorher
einstellen kann, sodass wenn dann 200h kommt, er dann ein HIGH am
Ausgang liefert und NUR die Ausgang dann mitm COntroller verbunden ist,
und nicht die Adressleitungen selbst.. .Daraufhin kann ich ja dann über
die Datenleitungen die Daten direkt empfangen und auswerten.
Aber der ungekehrte weg da auf englisch, wieso brauche ich die DMA
leitungen dazu ? ICh dachte DMA is nur um auf den Hauptspeicher
zugreifen zu können, aber IO Speicher wäre dabei ausgeschlossen.


mfg

von Stephan (Gast)


Lesenswert?

achsoooooo
die adresse liegt auch bei einem "in" an un dnicht nur wenn ein
"out" kommt...
jetzt wird einiges klarer, dann is ja das mit dem comperator ne super
lösung für beide richtungen, weil in meinem falle könnte ich nur
schreiben und würde aber gleichzeitig den ganzen bus blockieren.
ich hoffe ich hab richtig geraten wie so ein Vergleicher funktioniert
:)

"ein wunder dass mein board noch funktioniert??"
ok, ich machs ja nimmer :)

mfg

von Thomas Burkhardt (Gast)


Lesenswert?

Hi,

der übliche weg ist nur die hohe Adressleitungen (A3..A9) auf einen
Vergleicher (z.B. 74688) zu legen und dort mit den Einstellungen von
Jumpern zu vergleichen. Das Resultat dieser Schaltung wandert zusammen
mit den unteren Adressen in den µC. (Du kannst natürlich auch alle
Leitungen auf den µC geben, wenn der soviel IO-Pins hat und den
Vergleich dann dort ausführen.) Naja, der Punkt ist, dass man auf diese
Weise einen Adressbereich für die Karte auswählt und die niederen Bits
unterschiedliche Funktionalitäten ansprechen können.

Bis gerade eben war ich auch fast der Meinung wie Hannes, dass bei ISA
die CPU immer der Master ist und daher die Adressleitungen für die
Einsteckkarten grundsätzlich nur EINGÄNGE sind. Offensichtlich kann
eine ISA Karte aber den Bus übernehmen, nur genaues weiss ich dazu
leider nicht...

Aber so ohne weiteres einfach die Adressleitungen zu manipulieren,
womöglich noch direkt ohne Längswiderstand an Betriebsspannung zu
klemmen, halte ich für extrem gewagt.

von Dirk (Gast)


Lesenswert?

hi,

eigentlich kann eine ISA-karte den bus nicht übernehmen, sonder maximal
der DMA-controller. die adressleitungen sind reine ausgänge die vom
mainboard gesteuert werden, und können nicht von ISA-karten beeinflusst
werden. daran sollte man immer denken, auch wenn es nicht so ausschaut
wie z.b. im memory-mapped mode.

CA

von Benedikt (Gast)


Lesenswert?

Und nochwas:
Die Adressen sind nur gültig wenn AEN auf Low liegt !

von Ingo Henze (Gast)


Lesenswert?

Entweder wurde der Begriff "ISA-Busmaster" seinerzeit falsch
(mißverständlich) verwendet oder ich habe es nur nicht begriffen, was
damit gemeint ist.
Zumindest segelte der legendäre Adaptec SCSI-Controller AHA 1542 CF
unter der Flagge "ISA-Busmaster", was immer das nun wirklich bedeutet
haben mag.

Gruß
Ingo

von crazy horse (Gast)


Lesenswert?

Und was ganz anderes: lohnt es sich überhaupt noch, sich über den
ISA-Bus Gedanken zu machen? Der ist tot wie nur irgendwas tot sein
kann. Und nötig ist er auch nicht mehr: wenn man spezielle Hardware an
den PC pappen will, gibt doch ausreichend schnelle Schnittstellen.

von Tobi (Gast)


Lesenswert?

totgesagt leben mal wieder länger. im industriellen bereich gibts den
isa bus immer noch, weil teure/extra entwickelte/spezial karten für die
schnittstelle nicht mal eben ausgetauscht werden. es gibt auch immer
noch aktuelle mainboards mit isa bus zu kaufen.

von crazy horse (Gast)


Lesenswert?

"es gibt auch immer noch aktuelle mainboards mit isa bus zu kaufen."
Das würde mich mal interessieren. Ich habe schon lange keins mehr
gesehen und die Suche schon vor ca. 1Jahr eingestellt. Ich habe hier
noch einen "Spezialrechner", in dem mehrere ISA-Karten drin sind
(Programmiergeräte, Karte für CNC-Fräse). Da würde ich gern mal was
neues haben, hat immer öfter komische Macken und das liegt am
mainboard. ALso wenn du was weisst, her damit.

von Johannes M. Richter (Gast)


Lesenswert?

http://www.geizhals.at/?fs=mainboard+isa liefert immerhin ein, wenn auch
teures, Ergebnis. Erweiterte Suchmoeglichkeiten hat Geizhals meines
Wissens ja leider nicht.

von Matthias (Gast)


Lesenswert?

Hi

PC104 ist ISA und noch weit verbreitet. Es gibt auch im Umfeld der
Industrierechner noch viele, moderne Board mit ISA-Slots. Allerdings
nicht für Consumer-Preise. Einfach mal bei den einschlägigen
Industrie-PC Herstellern vorbeischauen.

Matthias

von Philipp Sªsse (Gast)


Lesenswert?

Wenn Du etwas eingebettetes bastelst und auf Hardware mit dusseligen
Binärtreibern angewiesen bist, kommst Du oft nicht um eine blöde
x86-CPU und ein Betriebssystem herum. Und dann bist Du froh, wenn Du
z.B. am SC520 Dein übliches IO-Geraffel alles an den ISA-Datenbus
hängen kannst, die Adreßvergleicherei nimmt er Dir über die
PAR-Register ab und man kann direkt die ChipSelects von der CPU
benutzen. Im Programm kannst Du dann tun, als hättest Du 16 kB
I/O-Register ...

von Olaf (Gast)


Lesenswert?

Es gibt genau vier Moeglichkeiten etwas am ISA-Bus anzuschliessen:

1. Man schliesst einen Portbaustein an wie z.B 82C55. Ist ein bisschen
verschwenderisch, aber geht.

2. Man simuliert sich seinen eigenen Portbaustein mit zwei Registern.

3. Man verwendet eine spezielle CPU die sich nach aussen hin wie ein
Register verhalten kann. Sowas war z.B frueher mal auf alten
Motherboards drauf (8042). Ist aber wohl stark aus der Mode gekommen.

4. Man verwendet Dual-Port Ram. Das ist die eleganteste Loesung.

5. Man simuliert 1-4 mit einem FPGA.

Olaf

von Stephan (Gast)


Lesenswert?

wegen dem Vergleicher nochmal:

also wenn ich mir jetz schon die Arbeit gemacht hab und die
Adressleitungen an einen Port vom Controller selbst drangelötet hab,
dann kann ich ja die Variante nehmen und den Adressvergleich per
Software im Controller ausführen.
ich versteh aber immernoch nich dass sobald ich A1 an den Controller
dranhäng warum der Rechner dann abkackt. Auf dem HC12 ist ein Debug12
Monitorprogramm, welches bei der Initialisierung vielleicht den Port
auf
GND oder 5V legt.. aber dann müssten die anderen Pins ab A2 bis A10
auch Probleme machen, die bereits auch am selben Port hängen.
Hat A1 vielleicht ne bestimmte Bedeutung ? ich wüsste nicht.. nur A0.

mfg

von Olaf (Gast)


Lesenswert?

Du kannst den Controller nicht auf diese Weise direkt an den Bus haengen
weil er viel zu langsam sein wird um Daten zu uebernehmen wenn dies vom
ISA-Bus verlangt wird. Von deinen anderen Problemen ganz abgesehen.
Gelegentlich hilft es wirklich Datenblaetter zu lesen bevor man loetet.
:-)

Olaf

von Stephan (Gast)


Lesenswert?

:-)
nun ich tendiere jetz doch dazu mir einen vergleicher auszusuchen und
den dann zu kaufen. Da bin ich auf der sicheren seite und hab gleich
mal 1 port mehr frei beim controller :)
nun für die IO adressen brauch ich doch A1-A10, weiss nich warum immer
nur von A9 die rede ist..

von Olaf (Gast)


Lesenswert?

Also ich wuerde dir empfehlen ein kleines Dualportram zu nehmen. Das
scheint mir die eleganteste Loesung. Du hast dann einen kleinen
Rambereich von z.B 1kB den beide Prozessoren gemeinsam nutzen koennen.

Ich weiss aber nicht ob Reichelt sowas im Angebot hat. :-)

Olaf

von Stephan (Gast)


Lesenswert?

letzte frage nochmal zu dem thema mit den adressen damit alle
unklarheiten bereinigt sind
es geht um A0:

beim 8bit isa bus brauch ich die adressen A0 bis A9 (10 bit).
beim 16bit ISA bus hab ich aber gelesen dass A0 zusammen mit BHE zur
byte selektierung herangezogen wird. D.h. wenn z.b. A0 auf 0 ist und
BHE auch dann weiss ich als ISA karte dass jetz ein WORD zu lesen ist.
Aber dann hat A0 ja gar nich mehr die Funktion als Adressbit zusammen
mit den andren adressleitungen ?
wenn ich jetz z.b. die adresse 201h ansprechen will dann würde ja A0
auf  high gehen..
wie ist des da gemeint ?
ich bin bisher davon ausgegangen dass sich die leitungen halt eben alle
um eins verschieben also anstatt A0-A9 jetzt A1-A10 ..

mfg

von Benedikt (Gast)


Lesenswert?

Das mit A0 ist etwas komplizierter. Wenn du nur die IO Adressen
verwendest wird es aber wieder einfach:
A0 ist eine normale Adresse. Ist zusätzlich BHE aktiv (also Low) dann
ist es ein 16bit Transfer, ansonsten ein 8bit.

von Stephan (Gast)


Lesenswert?

ah ne ich glaub jetz weiss ich.. klar..
wenn ich 201h anspreche dann ist ja automatisch das höhere byte vom
wort bei der adresse 200h gemeint.
dann müsste aber demnach ein befehl wie
"out 201h, ax" ungültig sein
wohingegen der befehl
"out 201h, al" geht..
seh ich das richtig ?

JA
:)

mfg

von Benedikt (Gast)


Lesenswert?

Ja, so in etwa.

von Benedikt (Gast)


Lesenswert?

Allerdings sorgt das Mainboard dafür, dass das High Byte bei einem Byte
Transfer immer auf D0-7 landet.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.