FromAnotherPlanet: 8254 - Counter 1

Beitrag lesen

Hallo,

vielen dank erstmal für deine Antwort. Ich lese aus deinen Worten heraus, das du dich auskennst. Das beruhigt mich :-)

nö, nicht direkt, eher in Assembler - aber ich kann mich aus der DOS-Programmiererzeit noch dunkel an den Keks erinnern.

MOV AL, 11100010B ;Read Back, Modus ermitteln, Zähler 0
OUT 43H,AL ;Steuerwort schreiben
IN AL, 40H ;Modus von Zähler 0 lesen

Nur ein Beispiel in Assembler ? Richtig oder ?

Irgendwas ist an diesem Satz verunglückt.
Der PIT hat drei Counter (bis hierher richtig) und vier Register (0,1,2,3).

Drei Counter 0..2. 3 ist das Read-Back-Modus.
Richtig ? Welche vier Register meinst du ? :-)

Ja. Ich warte noch auf die Stelle, wo's spannend wird. ;-)

Gleich wird es spannend. Mach dich auf was gefasst :-)

Okay. Also Counter 1, LSB vor MSB, generiere Rechtecksignal am Ausgang (Mode 3), und arbeite als 16bit-Binärzähler (nicht BCD).

Cool, du weisst wovon du sprichst. Ein Square Wave wird erstellt. So wie beim PWM.

Beim zweiten Mal ist es das MSB, nicht das LSB. Du lädst den Zähler also mit dem Startwert 100 = 0x0064.

Richtig, wieso muss man den MSB also das zweite 8-Bit-Wort
nochmal schreiben, wenn es sowieso 0 ist ?

outp(0xAC + 3, 0x40); // latch

Vorsicht: Hier programmierst du den Zähler gleichzeitig auf Mode 0 um! Willst du nicht 0x46 nehmen und den Zähler im Hintergrund unabhängig vom Latch weiterlaufen lassen?[1]

Wie meinst du das ? Counter-Latch verursacht, das der 8254 nicht
unterbrochen werden muss und gelesen werden kann oder ?

Woher kommt die Basisadresse 0xAC, die normale Basisadresse fangen doch bei 300H an oder ? ?

Das 0xAC kommt von dieser Zeichnung die ich vorher gezeichnet habe.
In dieser Zeichnung sind die Eingänge A0 und A1 auf "write into
counter 0" gesetzt. Das verstehe ich auch nicht ? Der &-Gatter
hat erstmal alles auf eins (schätze ich) und durch die Negation
ist das dann zwei Nullen enthalten.

Das mit 300H habe ich von hier :

http://www.decisioncards.com/io/tutorials/8254_tut2.html

Also ich will folgendes erzielen :

Init einen 8254 Counter 1, Mode 3 als Binärzähler, so das
immer 16 Bit gelesen und geschrieben werden. Reloadwert -> 100.
Danach den Leserstand lesen. Basisadresse nicht bekannt, sondern
nur die gegebene Zeichnung....

Im großen und ganzen habe ich alles verstanden, aber
warum ist z.B. "write counter 0 gesetzt" ??

Gruss