Hallo Kollegen, ich habe hier einen Atmega128, an dem ein TL16C554 ( 4 fach Uart ) memory mapped angeschlossen ist. Ich muss - um das Teil nutzen zu können - einen Treiber dafür schreiben. Nun wäre es schön, wenn schon mal jemand einen 16C554 an nen AVR angeschlossen hat, und mir seinen Treiber als Basis für die weitere Anpassung überlassen würde. Hat jemand so etwas zufällig in der Schublade ( auf der Festplatte ) oder eine Idee wo ich so etwas finden könnte ? Danke Frank
Frank W. schrieb: > ich habe hier einen Atmega128, an dem ein TL16C554 ( 4 fach Uart ) > memory mapped angeschlossen ist. Ich muss - um das Teil nutzen zu können > - einen Treiber dafür schreiben. Hallo Frank, einen Treiber braucht man für ein Betriebssystem - welches? Oder was verstehst du unter einem Treiber? Wenn du ein UART einfach nur benutzen willst, ist das mit Ausnahme der Initialisierung ziemlich trivial, zum Senden genügt Schreiben des Char in ein Port usw. Egal ob Unterprogramm oder direkt in Assembler oder C, es sind bloss wenige Zeilen. Ich habe die 16xxx bisher leider bloss in PCs eingesetzt. Gruss Reinhard
Hallo Reinhard, ja, stimmt schon was Du schreibst. Was ich meine sind Codeschnipsel mit z.B. verschiedene Initialisierungen, defines für die Register, usw. Auch bei den im AVR eingbauten Uart oder Timer könnte man ja die Register direkt im Hauptprogram ansprechen - und doch schreibt man sich gewöhnlich ne extra Datei, in der der Hardwarezugriff in Zugriffsfunktionen gekapselt ist, in der die Interruptroutinen stehen, die vielleicht noch so was wie Bufferhandling mach usw. usw. ( Bsp - setBaudRate, sendByte, sendString, readByte usw. ) Ich hoffe es ist halbwegs verständlich. Das ist es was ich mit "Treiber" gemeint habe. Vielleicht hätte ich es statt "Treiber" besser "HAL" nennen sollen. Gruss Frank
Frank W. schrieb: > Was ich meine sind Codeschnipsel mit z.B. verschiedene > Initialisierungen, defines für die Register, usw. Hallo, ich habe gefragt, weil du ja ebensogut Treiber brauchen könntest für ein Real Time, System, für Linux, für Windows CE oder Gott weiss was. Du brauchst also sowas: ; PORT ADDRESS IF COM2 PABASE EQU 2F8H ;COM1 = 3F8, COM2 = 2F8 ELSE PABASE EQU 3F8H ENDIF RSDATA EQU PABASE RSIER EQU PABASE+1 ;INTERR ENABLE REG RSIIR EQU PABASE+2 ;INT IDENT REG RSLCR EQU PABASE+3 ;LINE CNTRL REG RSMCR EQU PABASE+4 ;MODEM CNTRL REG RSLSR EQU PABASE+5 ;LINE STATUS REG RSMSR EQU PABASE+6 ;MODEM STATUS REG ; ; INT VECTORS IN PC ; DUMMY SEGMENT AT 0 ;INTERRUPT TABLE PC ORG 0BH*4 ;IRQ 3 I3VECT LABEL DWORD ORG 0CH*4 ;IRQ 4 I4VECT LABEL DWORD ORG 1CH*4 ;TIMER TICK TTVECT LABEL DWORD DUMMY ENDS ; Ist aus einem Xon-Xoff-DOS-Treiber, den ich 1988 geschrieben habe, der müsste für 16450 passen, ist aber eben für 8086 und PCDos. Da fast nie die ganze Modem-Schnittstelle benutzt wird, kommt man oft mit 5 Routinen aus: Init, RxReady, GetRxChar, TxReady, PutTxChar. Das ist so aber schwierig zeitlich in die Software zu integrieren. Ich gehe daher i.a. so vor: 1. ich schreibe eine Initialisierung, so wie ich die Schnittstelle voraussichtlich brauche. 2. ich schreibe Includes or Subroutinen für eine Timer ISR, die Zeichen empfangen und in einem Buffer ablegen und Zeichen aus einem Buffer senden. 3. ich schreibe Zugriffsroutinen (für Assembler, C, Pascal oder was eben verwendet wird), die Zeichen aus dem Buffer holen bzw. in den Sendebuffer ablegen. Neben Char-Zugriffen kann man meistens auch Zugriffe auf String-Basis gut gebrauchen. 4. Wenn die Timer ISR in 2 nicht oft genug läuft, um sicher alles zu empfangen, muss ich wohl oder übel eigene ISRs für die Schnittstelle schreiben. Gruss Reinhard
Nur so zur Info, der 16C554 läuft mittlerweile am AtMega128. Wenn also nochmal jemand über dieses Problem stolpern sollte - gerne melden.
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.