Forum: Mikrocontroller und Digitale Elektronik Kommunikation zwischen Master und Slave bei 8 UARTS


von Sarah C. (sarah_c)


Lesenswert?

Guten Tag,

ich bin nun im ersten Semester Informationstechnik (dual) und habe 
gleich zu Beginn eine sehr umfangreiche Aufgabe bekommen.
Ich sollte einen Mikrocontroller über zwei SPIs mit insgesamt acht UARTS 
verbinden. Um das Ganze noch zu verschönern, sollte der UART 
programmierbar sein (also entweder RS-232 oder RS-485). Nun habe ich 
eine komplette Schaltung und ein Layout entworfen, das sogar 
funktioniert. Hurrah!
Natürlich reicht das nicht aus, denn ich soll auch die Softwareseite 
verstehen lernen. Nun möchte ich wissen, wie genau die Abläufe innerhalb 
dieser Schaltung sind.

Zum Beispiel, wenn ich vom Mikrocontroller (Master) aus etwas an UART 
Nr.4 senden möchte.

Ich habe es mir so vorgestellt:

- CS 4 wird auf 0 gesetzt, alle anderen CS auf 1 (CS ist ja negiert)
- Daten werden über MOSI an das Schieberegister übergeben (erst MSB, 
dann   Rest)
- Falls bereits Daten im Register sind, werden die eben gesendeten Daten 
in den FIFO-Buffer gegeben
- Wenn die Daten vorn in der Warteschlange sind, werden sie mit der 
nächsten (oder übernächsten- je nach Einstellung des Modes) Taktflanke 
an den UART Nr 4 weitergegeben
- UART Nr 4 reagiert auf die Daten (z.B. Weitergabe eines Befehls an 
Peripherie über TxD, oder Senden von Daten an den µC über MISO)

Ich habe keine Ahnung, ob das richtig ist und hätte gern ein Feedback, 
inwiefern ich richtig/falsch denke. Das würde mir sehr weiterhelfen.

Verwendet habe ich übrigens MAX3160 und MAX3100 zur Realisierung der 
Umprogrammierung zwischen RS232 und RS485, der Mikrocontroller ist ein 
ARM9- falls das jemanden für die Beantwortung interessiert ;)..

LG, Sarah

: Bearbeitet durch User
von Peter D. (peda)


Lesenswert?

Sarah C. schrieb:
> Ich sollte einen Mikrocontroller über zwei SPIs mit insgesamt acht UARTS
> verbinden.

Was soll das 2. SPI bringen?
Jeder UART wird über sein /CE aktiviert und hat auch seinen eigenen 
Interrupthandler. Daher kannst Du auch nur immer einen UART ansprechen.

Ich würde erstmal Treiber für die internen UARTs schreiben. Und wenn das 
funktioniert, dann auf die externen UARTs erweitern. Also nicht beides 
gleichzeitig.

von Sarah C. (sarah_c)


Lesenswert?

So lautete nunmal die Aufgabenstellung meines Professors ;).
Ich habe die ersten vier über SPI0 und die letzten vier über SPI1 
verbunden. Jeweils auswählbar über den Chip Select.

von Peter D. (peda)


Lesenswert?

Sarah C. schrieb:
> Ich habe die ersten vier über SPI0 und die letzten vier über SPI1
> verbunden.

Naja, ist kein Beinbruch, macht nur das Layout und die SW etwas 
komplizierter.
Man muß dann in der Kontrollstruct für jede UART auch die Adresse des 
SPI mit vorhalten.

von cfgardiner (Gast)


Lesenswert?

Sarah C. schrieb:
> - CS 4 wird auf 0 gesetzt, alle anderen CS auf 1 (CS ist ja negiert)
> - Daten werden über MOSI an das Schieberegister übergeben (erst MSB,
> dann   Rest)
> - Falls bereits Daten im Register sind, werden die eben gesendeten Daten
> in den FIFO-Buffer gegeben
> - Wenn die Daten vorn in der Warteschlange sind, werden sie mit der
> nächsten (oder übernächsten- je nach Einstellung des Modes) Taktflanke
> an den UART Nr 4 weitergegeben
> - UART Nr 4 reagiert auf die Daten (z.B. Weitergabe eines Befehls an
> Peripherie über TxD, oder Senden von Daten an den µC über MISO)


Nur der letzte Punkt stimmt nicht ganz. Bei Deiner SPI Konfiguration ist 
der ARM immer der SPI Master. d.h. 'Senden von Daten an den µC über 
MISO' wird auch vom ARM initiiert und niemals autonom vom MAX3100. Wenn 
der UART Daten empfängt, wird dieses über den Interrupt Pin 
signalisiert. Dein Treiber muss dann über SPI Lesezugriffe zum MAX3100 
schicken um z.B. Interrupt Quelle zu erfahren, Eingangs FIFO lesen o.ä. 
Alternative zum Interrupt ist natürlich auch ein zyklisches Abfragen des 
UART Status. Vermutlich wäre aber die Interrupt Lösung vorzuziehen.

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.