Forum: Mikrocontroller und Digitale Elektronik Treiber AVR und 16C554 ( 4 fach Uart )


von Frank W. (Firma: DB1FW) (frankw) Benutzerseite


Lesenswert?

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

von Reinhard Kern (Gast)


Lesenswert?

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

von Frank W. (Firma: DB1FW) (frankw) Benutzerseite


Lesenswert?

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

von Reinhard Kern (Gast)


Lesenswert?

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

von Frank W. (Firma: DB1FW) (frankw) Benutzerseite


Lesenswert?

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
Noch kein Account? Hier anmelden.