SPI wie UART initialisieren ohne Portdefines

OP #4434530
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
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
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
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
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

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.