Forum: Mikrocontroller und Digitale Elektronik SPI wie UART initialisieren ohne Portdefines


von Stefan S. (sschultewolter)


Lesenswert?

Hallo,

bei einem ATtiny841 übernimmt der Kontroller automatisch die Ansteuerung 
der IOs für die UART-Schnittstelle, sobald RXENn / TXENn gesetzt werden. 
Hier muss man nicht angeben, um welche Pins es sich handelt.

Das ganze funktioniert auch, wenn man den REMAP der Pins hier für UART0 
macht.

Gibt es sowas auch für die SPI Schnittstelle? Dort kann man ebenfalls 
einen REMAP machen von PA4-7 auf PA0-3. Jedoch anders als bei der UART 
Schnistelle, wird hier im Datenblatt darauf hingewiesen (Code-Beispiel), 
dass SCK, MOSI und SS als Ausgang gesetzt werden müssen. Geht sowas auch 
automatisch?

Der weg das ganze selber über #defines ist mir bekannt, wäre nur evtl. 
interessant, ob das von der Toolchain (AS7) auch irgendwo direkt 
unterstützt wird.

von Karl M. (Gast)


Lesenswert?

Nein Stefan - selbst ist der Mann.
Es ist nur das vorhanden, was man auch im Datenblatt findet.
Wir nutzen doch eine Hardwarenahe Programmierung - da will ich doch 
genau wissen was da passiert und die Zügel nicht aus meiner Hand geben.

von Stefan S. (sschultewolter)


Lesenswert?

Okay, das wollt ich nur wissen. Weil es bei der UART Schnittstelle 
automatisch läuft.

von Peter D. (peda)


Lesenswert?

TXD, Transmit Data (Data output pin for the USART). When the USART 
Transmitter is enabled, this pin is configured as an output regardless 
of the value of DDD1.

von Stefan S. (sschultewolter)


Lesenswert?

Hallo Peter,

ja das ist mir bekannt. Das war auch Kern der Frage, ob es das bei der 
SPI Schnittstelle ebenfalls gibt. Scheinbar aber nicht, keine 
entsprechenden Adresse dazu gefunden. Somit 1-2 Zeilen in der init mehr, 
was nicht das Problem darstellt.

von Cyblord -. (cyblord)


Lesenswert?

Bei SPI hättest du sowieso noch das Problem mit ChipSelect. Dafür wärst 
du in jedem Fall noch selbst zuständig.

Es ist aber in der Tat etwas inkonsistent, warum Hardware Modul A (UART) 
nach der Aktivierung seine Pins komplett konfiguriert und alles andere 
überschreibt, aber HW Modul B (SPI) tut das nicht. Hier muss man sogar 
die Datenrichtungen für alle Pins selber setzen.

von Sascha W. (sascha-w)


Lesenswert?

des weiteren ist die Datenrichtung abhängig davon ob SPI als Master oder 
Slave konfiguriert wird.
Master: MISO=IN, MOSI=OUT, SCK=OUT
Slave: MISO=OUT, MOSI=IN, SCK=IN

Sascha

von Mein grosses V. (vorbild)


Lesenswert?

Cyblord -. schrieb:
> Hier muss man sogar
> die Datenrichtungen für alle Pins selber setzen.

Es gibt eben mehrere Initialzustände, bei UART gibt es nur einen: Sender 
sendet, Empfänger empfängt. Beim Spi sind aber, je nach Modus (M/S) die 
Pins(MISO/MOSI/SCK) Input oder Output. Zu allem Übel ist das sogar noch 
von aussen umschaltbar und als Peripherie kann da alles Mögliche 
dranhängen.

von Peter D. (peda)


Lesenswert?

Es kann ja sein, daß das SPI nur einlesen soll (SCK, MISO) und dann kann 
man den freien MOSI trotzdem als Eingang benutzen.

von Stefan S. (sschultewolter)


Lesenswert?

Bei nur einlesen wäre wir dann beim Slave. Fand es halt nur interessant 
zu wissen, ob es da ähnlich wie bei UART zugeht.

Ich habe eine einfach spi_master_init, in der ich nur die DDR für MOSI, 
SCK und CS setze, bzw MISO lösche.

Um das etwas flexibel zu halten, frage ich REMAP ab, ob das Bit SPIMAP 
gesetzt ist, und schalte danach die DDR um

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.