Hallo, Ich weiss, diese Frage ist etwas OT aber zum Glück ist dieses Forum ja nicht so ver-"Usenet"-et. Es geht wieder mal um RS232 und die Fähigkeit es zu empfangen. Ich habe einen M68k Mikrocontroller und einen eigenwilligen Linkport. Jedenfalls ist es so dass ich einen RS232 Treiber basteln will und das über Interrupts machen muss/will. Jedenfalls hab ich einen Quarz, der geht mit ca 520kHz, und ein zugehöriger Interrupt wird genau mit dieser Frequenz aufgerufen. D.h. der Interrupt wird 520 000 mal / sekunde augerufen. Ist das genug um einen interruptbasierten RS232 Treiber bauen zu können (der eben auf der Interrupt Handling Routine basiert)? Es ist klar das mehr als 9600 Baud nicht möglich sind aber damit wäre ich schon glücklich. D.h. ich würde 9600mal / Sekunde zumindest was zu tun bekommen. Kann nur hoffen das das reicht... Leider muss ich das ganze UART softwaremässig bauen, d.H. da fallen noch einige Zeilen Code an die wieder Zeit brauchen werden... Was meint ihr, lohnt es sich überhaupt es aus zu probieren? Oder ist das mit dieser Frequenz sowieso zu langsam?? Vielen Dank für eure Tipps... Niki
Hallo Niki, Du hast einen Interrupt, der alle 2 µs aufgerufen wird? Nicht wirklich, oder? Einen Software-Uart macht man am geschicktesten mit einem Interrupt-Eingang, z.B. direkt auf den Timer. Die Flanke des Start-Bits triggert Deinen Interrupt, und dann brauchst Du nur zur Mitte der Bitzeiten den Pegel am Port einlesen. Damit ist ein primitiver Empfang (ohne Sampling mit Majoritätsentscheidung etc) möglich. Wenn Du hingegen keinen Interrupt für das Startbit frei hast, mußt Du eben pollen, bis Du die Pegeländerung merkst, und dann mit dem oben beschriebenen Verfahren weiter machen. Die Poll-Freqeunz muß ausreichend hoch sein, damit Du nicht zu spät im Startbit abtastest und Fehler bei den folgenden Datenbits bekommst. Gruß, Rudolf. Rudolf Sosnowsky +++ LC Design EPSON Technology Partner Internet http://www.LC-Design.de
Hallo, erstmal danke für deine Antwort... Doch leider will ich nichts an der Hardware ändern und es gibt denk ich keinen Interrupt der dann getriggert wird wenn was passiert. Folglich muss ich irgendwie pollen. Und wenn das mit dem Hauptprogramm main() nicht geht muss es wohl über Interrupts gehen. Und als timer Interrupt hätte ich diesen. Also wollte ich fragen ob es möglich wäre mit Hilfe dessen zu pollen... ->Niki<-
Das sind ungefähr 5 Interrupts pro Bit. Für den Empfang sollte das gehen, das Software-UART für das EZ-Kit lite verwendet nur 3 Ints pro Bit. Ob es auch zum Senden genau genug ist, weiß ich nicht. Evtl. musst du eine andere Baudrate nehmen, damit der Fehler kleiner wird.
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.