Auf dem Embedded-PC befindet sich ein UART16650. Über diesen kann ich Daten von der RS232 Schnittstelle senden und empfangen. Zusätzlich habe ich noch ein externes TTL Signal das ich mit einem Pegelwandler in RS232 Peger umwandle.Dieses umgewandeltet Signal gebe ich dann auf die RS232 Schnittstelle vom Embedded PC drauf. Dazu verwende ich den Pin6 (DSR - Betriebsbereit) von dem 9poligen SUBD Anschluss. Damit ich den Pin6 auslesen kann, muss ich vom UART das Register MSR verwenden (Basisadresse + 6) oder?
Wenn ich das MSR Register auslese, bekomme ich immer nur eine 1 geliefert.
Und dieses (von Dir praktischerweise nicht genannte) Betriebssystem bietet nicht zufälligerweise einen Devicetreiber, der Zugriffe auf die serielle Schnittstelle kapselt? Und die für Dich interessante Statusinformation liefern kann?
Das wurde alles schnon in der Software implementiert. Für die serielle Schnittstelle wurde ien Interrupt Handler aufgesetzt. In diesem prüfe ja das Interrupt-Identifikationsregister.
Du hast also unter Deinem (nach wie vor ungenannten Betriebssystem) einen eigenen Interrupthandler für die serielle Schnittstelle geschrieben. Wann soll ein Interrupt ausgelöst werden? Nur bei Senden/Empfangen von Daten oder auch bei "Gewackel" an der Handshake-Leitung? Wie ist der 16550 initialisiert? Wird der Fifo verwendet? Was wird in das IER (Basis + 1) geschrieben? Welche Bits im MSR (Basis + 6) wertest Du aus? Wird im Interrupthandler das IIR ausgewertet, wenn ja, wie?
Ich habe den Pin9 von dem RS232 SUBD Anschluss verwendet. Da funktioniert es. (pin9 = ring identicator)
Hast Du derzeit Schnupfen oder warum muss man Dir alles aus der Nase ziehen?
Warum denn? Das Ausgangssignal vom Pegelwandler (blaue Kurve) schwingt schon erheblich. Sollte man dies grundsätzlich vermeiden? Welche Kondensatoren sollte man überhaupt verwenden?
Möchtest Du eigentlich, daß Dir geholfen wird oder wie stellst Du Dir das im einzelnen vor? Um Dein Problem einzugrenzen, habe ich Dir einige Fragen gestellt. Davon hast Du exakt eine beantwortet, und selbst das nicht ernsthaft (Frage nach Betriebssystem). Willst Du Dir nicht helfen lassen oder verstehst Du die Fragen nicht?
Hallo, ich habe auch ein (Programmier-)Problem mit direktem Port-Adressenzugriff unter Windows XP: ich installiere einen Systemdienst für direkten Hardwarezugriff ("zlportio" unter Delphi 6). Der Zugriff auf Register des LPT-Ports (Drucker, ab 0x378) funktioniert damit perfekt. Der Register-Zugriff bei der seriellen Schnittstelle geht dagegen gar nicht (ab 0x3F8 bzw. 0x2F8). Als würde der Zugriff ins Leere gehen: gelesene Werte immer 255. Die Adressen werden im Gerätemanager korrekt angezeigt. Hinweis: auf anderen Rechnern funktioniert der Zugriff auf COM1,2 teilweise ja, teilweise nein. Was könnte der Grund und die Lösung des Problems sein? Gruß DiLi
Hast Du den COM-Port im Gerätemanager deaktiviert? Es scheint da Chipsätze zu geben, die in diesem Fall auch die Basisadressen der Hardware wegschalten.
nein, alle COM-Ports sind aktiv und können von anderen Programmen auch verwendet werden!
Hast du geschaut welche Adressen im Gerätemanager gewählt wurden? Wenn diese nicht mit den gewählten übereinstimmen, dann liest man ins leere. Auch wenn man "etwas" ältere Steckkarten verwendet könnte es Probleme geben, da da die Adressen unter anderem mit Jumpern eingestellt wird.
nein, im Gerätemanager ist alles klar; die dort angegebenen Portadressen spreche ich mit meinem Programm an. Der Rechner ist ziemlich neu. Auf dem alten Rechner hat es geklappt. Ob das neue BIOS da irgend was "verbiegt"?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.