SPI wie UART initialisieren ohne Portdefines

OP #4434530
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.
Gast #4434588
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.
#4435517
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.
#4435548
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.
OP #4435630
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

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.