Forum: Mikrocontroller und Digitale Elektronik SPI Funktion für mehrere Slaves


von Kevin Lüttler (Gast)


Lesenswert?

Hi,

ich stehe gerade programmiertechnisch auf dem Schlauch. Ich habe mehrere 
SPI-Slaves am uC und nutze die eingebaute SPI-Hardware. Jeder Slave hat 
sein eigenes /CS-Signal über einen Portpin verstreut über die freien 
Ports. Soweit funktioniert alles prima.

Nun wollte ich den ganzen SPI-Code in "universelle" SPI-Funktionen 
umschreiben, habe da aber das Problem, dass ich gerade mir das Hirn 
zermartere, wie ich am besten den anzusprechenden Slave übergebe. Am 
liebsten würde ich gerne in einer spi.h o.ä. jedem Slave eine Nummer 
zuweisen, über die er dann angesprochen werden kann, z.B.
1
void SPI-Send(uint8_t slave, uint8_t data)

Nur, wie löse ich intelligent die Slave-Nummer zum /CS-Portpin auf? 
Bislang fällt mir nur das Konstrukt
1
switch(slave)
2
{
3
 case 0:
4
  LATAbits.LATA7 = 0;
5
  break;
6
 case 1:
7
  LATBbits.LATB1 = 0;
8
  break;
9
  ...
10
}

ein. Geht das nicht irgendwie "universeller" über #define-Macros?

Vielleicht hat mir ja einer einen guten Tipp oder Hinweis :-)

von Mike (Gast)


Lesenswert?

Kevin Lüttler schrieb:
> Vielleicht hat mir ja einer einen guten Tipp oder Hinweis :-)

Guck dir mal den Abstraktionslayer für die Pin-Nummern in Arduino an.

von Kevin Lüttler (Gast)


Lesenswert?

Hab mal nach Arduino Source in Kombinationen mit HAL und Library 
gegoogelt aber in diesen Unmengen an Code nichts auf die Schnelle 
entdeckt. Hab jetzt ne Funktion mit obigem Switch-Konstrukt geschrieben, 
in der ich die Slave-relevanten Einstellungen (SPI-Mode, Clock, /CS-Pin) 
je nach Slave-Nummer setze. Damit geht's ganz gut und bleibt 
übersichtlich.

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.