Hallo zusammen,
ich mache gerade meine ersten Gehversuche mit einem 16550 und weiss
nicht, was ich falschmache :-(.
Ich habe das Teil nach National Datenblatt, "Basic Configuration"
angeschlossen mit ein paar kleinen Vereinfachungenn (MP ist ein 80188er
@11,0592Mhz):
- INTRPT floating (erst mal nur Polling, übersichtlicher)
- RS232-Stecker an SOUT, SIN über MAX232 wie üblich, GND direkt
- Am 16550 DCD+DSR+DTR/CTS+RTS zusammengezogen, am RS232 floating
- /CS2 geht über einen 573er direkt an MP.s2, restliche
Pheripherie abgeklemmt (lt. Manual darf ich mit s2 Memory/IO trennen)
Ich habe dann folgende Testprogramme direkt nach Reset gestartet:
a)
1
TESTLOOP:
2
INCAL
3
OUT6,AL
4
JMPSHORTTESTLOOP
Sinnfrei, sollte aber bewirken, dass einige Modemausgänge am 16550
ständig toggeln. Ergebnis:
- Alle RS232-Leitungen konstante Pegel (mit Oszi gemessen)
- /BAUDOUT konstant 1
b)
1
UART_DLHEQU1;Basisport0
2
UART_DLLEQU0
3
UART_FCREQU2
4
UART_IEREQU1
5
UART_LCREQU3
6
UART_LSREQU5
7
UART_RBREQU0
8
UART_THREQU0
9
10
MOVAL,80H
11
OUTUART_LCR,AL
12
13
MOVAX,20;9600baud,UARTan3,072Mhz
14
OUTUART_DLL,AL
15
XCHGAL,AH
16
OUTUART_DLH,AL
17
18
MOVAL,3;8B,1S,NP,NBr
19
OUTUART_LCR,AL
20
21
MOVAL,0;KeineInterrupts
22
OUTUART_IER,AL
23
OUTUART_FCR,AL;16450mode,keinDMA
24
25
MOVAL,'?';Promptausgeben
26
OUTUART_THR,AL
27
28
ECHO_CHAR:
29
INAL,UART_LSR
30
TESTAL,1;DatenimPuffer?
31
JZECHO_CHAR
32
33
INAL,UART_RBR;Pufferlesen
34
INCAL;Taetigkeitsnachweis
35
OUTUART_THR,AL;ZurueckzumAbsender
36
JMPECHO_CHAR;Endlos
Ergebnis:
- PC am anderen RS232-Ende empfängt nichts
- /BAUDOUT 1 mit regelmäßigen L-Spikes
- /RD1 meist 0 (Programm läuft weiter)
- /CS2 1 mit 0-Spikes (IN AL,...)
- /BAUDOUT 1 mit 0-Spikes, höherer Takt als /CS2 (UART aktiv?)
- /RXRDX 1 mit 0-Spikes, viel langsamer als /CS2 (???)
Wegen dem Verhalten von /BAUDOUT glaube ich, dass die MP-seitige
Ansteuerung grundsätzlich funktioniert. Vermutungen:
1) Programm b initialisiert falsch (auf dem DOS-PC gehts, aber könnte ja
sein, dass das BIOS den Chip schon "freigeschaltet" hat?)
2) Der 16550 tuts nicht ohne die anderen RS232-Signale in "echt"
3) Kabelbruch?
4) 16550 defekt?
Hat jemand einen Tipp für mich, wie ich das Teil zum Laufen bringen oder
austesten kann, warum es nicht tut?
Danke und Grüssli
keinLichtAufging schrieb:> 2) Der 16550 tuts nicht ohne die anderen RS232-Signale in "echt"
Nö, den interessieren die Pegel auf den anderen Leitungen nicht.
Eine Musterbeschaltung des pinkompatiblen 8250 findest Du im IBM AT
Technical Reference Manual, das erfreulicherweise Christoph vor ein paar
Tagen hier verlinkt hat:
Beitrag "Re: IBM PC-AT technical reference manual gesucht"
Darin findest Du übrigens auch ein Assemblerlisting des PC-BIOS-Codes,
der die seriellen Schnittstellen an den üblichen Adressen initialisiert.
Dieser Code ist zwar für den 8250 geschrieben, funktioniert aber ebenso
mit dem 16550. Die Funktionserweiterungen (Sende- und Empfangs-FIFOs)
sind mit der Standardinitialisierung zwar inaktiv, aber für Deine
grundlegende Funktionskontrolle sollte das wohl genügen.
Einziger deutlicher Unterschied ist der verwendete Takt; im PC werden
1.8432 MHz genutzt, so maximal 115200 Baud möglich sind.
Hallo,
@Ben:
Genau dafür war Testprogramm a gedacht, aber die Modem-Beinchen sind
eben nicht "beweglich", sondern halten ihre Pegel stur fest. Ich dachte,
wenn MR den 16550er freigegeben hat, kann ich mit Register 6 auf die
Pins durchschreiben wie bei einem Latch (Funktionstest für "Register
schreiben").
@Rufus:
Danke für den Link, werde da mal reingucken (DL dauert allerdings eine
ganze Weile ohne Breitbandzugang ;-).
Die Beschränkung auf drei Leitungen kommt übrigens daher, dass ich vom
8051er einen "Bootstecker" auf P3 verwende, und den hier gerne
unverändert weiternutzen möchte - von dem weiss ich wenigstens sicher,
dass er in Ordnung ist.
Danke und Grüssli
Bei korrekt initialisiertem Baudratenregister steht an !BAUDOUT der
16-fache Takt(Rechteck,50%-Tastverhältnis)der gewählten Baudrate an.
Konstanter "0"- oder "1"-Pegel mit Spikes darf nicht sein.
Hardware:
Das Bus-Zustandssignal "S.0" als Auswahlsignal zu verwenden ist
ungewöhnlich, da es aber offensichtlich gespeichert(Signal nur in T1 und
T2 des Buszykus gültig) und nicht gleichzeitig für andere Zwecke
ausgewertet wird (Schaltplan?) ist es wohl in Ordnung.
Sind CS0, CS1, mit "1", RD, WR, !ADS mit "0" belegt?
Software:
Die Initialisation des 16550 sollte funktionieren. Allerdings werden
üblicherweise zuerst die Statusregister und zuletzt die
Baudratenregister beschrieben.
Das Testprogramm sollte das "MCR"-Register verwenden, da hier die an den
Pins zugänglichen Modemsteuersignale generiert werden.