Serielle Schnittstelle, 8 Bit Daten + Parity - pro Byte?



  • Kann man unter Windows irgendwie an das Parity Bit drankommen, wenn man 8 Bit + Parity gesendet bekommt, und das Parity-Bit gerne pro Datenbyte hätte?

    Es gibt da nämlich so ein "schlaues" Protokoll, das verwendet das Parity-Bit als "Message-Start" Markierung...

    Einzige Möglichkeit die mir einfällt ist die Schwelle für den Interrupt beim Empfangen auf 1 runterzusetzen, Parity="Space" einzustellen, und dann permanent die Schnittstelle zu checken. Und halt nach jedem empfangenen Byte mit ClearComError nachzugucken ob das Parity-Error Flag gesetzt ist.

    Ist aber ein wilder Hack. Wäre cool wenn sich das vermeiden liessen.



  • Wir hatten so eine Frage erst vor einigen Monaten... hab sie aber vermutlich vergessen... 9 Datenbit kannst Du nicht setzen?



  • COM-Port ansteuern (11 Bits)
    http://www.c-plusplus.net/forum/289207

    HTH,
    Martin



  • @Mmacher: Genau das hab ich gemeint... und hustbaer muss jetzt wohl die Gegenseite schreiben 😉



  • Jochen Kalmbach schrieb:

    Wir hatten so eine Frage erst vor einigen Monaten... hab sie aber vermutlich vergessen... 9 Datenbit kannst Du nicht setzen?

    Weiss nicht, kann ich?
    Der Beispiel-Treiber im DDK kann auf jeden Fall nur 5 bis 8 Datenbit.

    @Mmacher
    Tjoah, schreiben bringt mir bloss leider nix, ich muss das Zeug lesen 🙂



  • hustbaer schrieb:

    Weiss nicht, kann ich?
    Der Beispiel-Treiber im DDK kann auf jeden Fall nur 5 bis 8 Datenbit.

    Das hängt sicher auch noch von der Hardware ab, da wird ja meist etwas in ein Chipregister geschrieben. Beim 8251 den Urahn dieser ICs wurden da 2 Bits benutzt, was für 5...8 Datenbits reicht.

    Wohlmöglich behält die Hardware sogar das Parity-Bit für sich und gibt sowieso nur Fehlermeldungen dazu von sich. Das würde den Ansatz aus dem ersten Beitrag plausibel erscheinen lassen.

    Soll das auf beliebigen PCs mit serieller Schnittstelle laufen ?
    Zusatzhardware wie ein zwischengeschalteter Microcontroller scheidet aus ?



  • Ich denke, Du muss es so machen, wie Du beschrieben hast... beim sender wäre es etwas einfacher... aber auch nicht viel...



  • nn schrieb:

    hustbaer schrieb:

    Weiss nicht, kann ich?
    Der Beispiel-Treiber im DDK kann auf jeden Fall nur 5 bis 8 Datenbit.

    Das hängt sicher auch noch von der Hardware ab, da wird ja meist etwas in ein Chipregister geschrieben. Beim 8251 den Urahn dieser ICs wurden da 2 Bits benutzt, was für 5...8 Datenbits reicht.

    Jo, die Hardware müsste es können, und der Treiber müsste es auch können.

    Soll das auf beliebigen PCs mit serieller Schnittstelle laufen ?

    Ja, normale PCs, Windows XP embedded, beliebige serielle Schnittstelle (vermutlich irgendwann auch über USB-Adapter).

    Zusatzhardware wie ein zwischengeschalteter Microcontroller scheidet aus ?

    Ja, scheidet aus.



  • Jochen Kalmbach schrieb:

    Ich denke, Du muss es so machen, wie Du beschrieben hast... beim sender wäre es etwas einfacher... aber auch nicht viel...

    Dann bleibt noch die Frage: wie kann man (programmatisch) die Schwelle für den Interrupt beim Empfangen verstellen?
    Gibt's da nen IOCTL? API Funktion hab' ich keine gefunden.
    Über SetupComm() kann man ja nur die Grösse der "Software-Puffer" des Treibers einstellen, nicht aber wann der Chip den Interrupt auslösen soll.

    ps: die Einstellung dürfte gerne auch permanent sein, einen Treiber-Restart erfordern, gerne auch was über Registry-Keys oder ähnliches. Blöd wäre nur wenn es treiberabhängig wäre.



  • Soweit ich das weiss, sind das einfach Registry Keys:
    http://technet.microsoft.com/en-us/library/cc962421.aspx


Log in to reply