Hallo, ich habe das Problem, dass ich nicht weiß, wie man am elegantesten die Register für die SPI-Initialisierung setzt. Ich habe die SPI-Initialisierungsmethode. Und der MEthode sollen die Registerwerte übergeben werden. Dazu habe ich eine allgemeine SPI-Initialisierungsroutine. Der Methode wird jetzt übergeben, dass die SPI-Schnittstelle als Master agieren soll. Wie schreibe ich das am besten, dass das passende Bit im Register UCA0CTL0 1 gesetzt wird bzw. bei Slave 0? Ich hoffe, ihr versteht, was ich meine:S
Nix verstehen. Was? Womit? Wieso? Welche Methode? Was steht in der Doku? und überhapt: Warum? Oliver
Florian Hinrichs schrieb: > Ich habe die > SPI-Initialisierungsmethode. Recht blauäugig, zu denken, es gäbe nur eine. Und auch nur einen MC-Typ auf der ganzen Welt Und auch nur eine Compilerversion, nur eine IDE, nur eine Schaltung usw.
Florian Hinrichs schrieb: > Wie schreibe ich das am besten, dass das passende Bit im Register > UCA0CTL0 1 gesetzt wird bzw. bei Slave 0? Na indem Du den bestehenden Wert aus dem Register holst, mit der Maske von Dir ver-xor-st und anschließend zurückschreibst. Idealerweise gibt es ein #define von Deinem Register und dann schreibst Du eigentlich nur: <definitions.h> #define REGISTER_NAME (*(0xFFFFFF)); #define IRGENDEIN_WERT 0x04; </definitions.h> <main.c> REGISTER_NAME |= 0x04; </main.c> bzw. <main.c> REGISTER_NAME |= IRGENDEIN_WERT; </main.c>
Also nochmal:D Ich will eine SPI-Initialiseirungsroutine, der ich sagen kann, ob sie sich zb. als Master oder als Slave initialisieren soll. Wie mache ich das, ohne zwei seperate Routinen zu schreiben? Benutzen tue ich den MSP430F5310 und programmiere mit C. Auszug aus solch einer Initialisierungsroutine: void SPI(void){ ... UCA0CTL0 |= UCMST; ... } Damit habe ich jetzt mein Master-SPI initialisiert. Jetzt will ich aber einen Slave-SPI haben. Dazu muss eigentlich nur aus UCA0CTL &= ~UCMST werden. Ich will jetzt aber nicht zwei solcher routinen haben, sondern nur eine, indem ich diesen Teil variabel setze. ABer ich habe keine Ahnung, wie ich das machen kann.
Florian Hinrichs schrieb: > Ich hoffe, ihr versteht, was ich meine:S So ungefähr :-)
1 | #define SPI_MASTER 0
|
2 | #define SPI_SLAVE 1
|
3 | |
4 | void InitSPI( uint8_t asWhat ) |
5 | {
|
6 | if( asWhat == SPI_MASTER ) |
7 | {
|
8 | .... mache die Initialisierung als Master |
9 | .... und setze alle notwendigen Werte in den entsprechenden Registern |
10 | }
|
11 | else
|
12 | {
|
13 | .... mache die Initialisierung als Slave |
14 | .... und setzte alle dafür notwendigen Werte in den entsprechenden Registern |
15 | }
|
16 | |
17 | ... setzte noch die Werte, für die es egal ist, ob die Initialsierung |
18 | ... als Master oder als Slave erfolgen soll |
19 | }
|
wenn du noch weitere Dinge hast, die du der InitSPI mitgeben willst, wie zb irgendwelche Geschwindigkeitsangaben oder dergleichen, dann führst du halt weitere Parameter dafür ein. Oder .... ... du machst 2 getrennte Funktionen für die Initialisierung als Master oder als Slave
1 | void InitSPICommonPart() |
2 | {
|
3 | ... das was alle SPI Konfigurationen gemeinsam haben. |
4 | }
|
5 | |
6 | void InitSPIMaster() |
7 | {
|
8 | ... den Master-spezifischen Teil |
9 | InitSPICommonPart(); |
10 | }
|
11 | |
12 | void InitSPISlave() |
13 | {
|
14 | ... den Slaveö-spezifischen Teil |
15 | InitSPICommonPart(); |
16 | }
|
und rufst dann eben die auf, die du im konkreten Anwendungsfall benötigst. Oder .... .... denk dir was anderes aus. Wie immer gilt: Es gibt mehr als einen Weg nach Rom, und sowas wie 'am besten' hängt ganz vom Anwendungsfall und zu einem nicht unerheblichen Teil auch von den persönlichen Vorlieben ab.
:
Bearbeitet durch User
Ja, ich habe massenweise Parameter. INsgesamt sind es 7 an der Zahl. Somit gäbe es einen ziemlich langen Code, wenn ich alles mit If und Else Prüfungen machen würde.
Florian Hinrichs schrieb: > Ja, ich habe massenweise Parameter. INsgesamt sind es 7 an der Zahl. Da würde sich dann zb anbieten, diese Parameter in eine struct zu packen und die als Parameter an die Funktion zu übergeben. > Somit gäbe es einen ziemlich langen Code, wenn ich alles mit If und Else > Prüfungen machen würde. Ah geh. 7 if-else untereinander. Das ist doch nicht ziemlich lang
Ok super, dann werde ich es so machen. Dachte es wäre eine sehr umständliche Variante. Danke euch für eure schnelle Hilfe:)
Ist ein Slave Betrieb ueberhaupt sinnvoll? Da sind die Prozessoren eigentlich eine rechte Kruecke...
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.