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