> #define GPIO_Pin_13 ((u16)0x2000) /* Pin 13 selected */
> 0x2000 ist, wenn ich das richtig verstehe, das Register. Der Wert ist
> bei auisgeschalteter LED "0"
Nein, wohl eher falsch verstanden. Das Register heißt ODR und enthält
vermutlich die Infos von bis zu 32 Pins. Jeweils ein Bit für einen Pin.
Ich orakle jetzt mal, da ich Deinen Mikrokontroller nicht kenne :
Bit 0 für Pin 1, Bit 1 für Pin 2... Bit 12 für Pin 13.
Der Wert von Bit 12 ist 0x2000, also wenn das Bit gesetzt ist, ist der
Wert im Register ODR um 8192 (0x2000) höher, als wenn es nicht gesetzt
ist. Und wie gesagt, dieses Bit beeinflußt Pin 13.
Um auf das ODR Register zuzugreifen, stellt Dir eine der von Dir
eingebundenen Header Dateien (.h) etwas zur Verfügung, so dass Du
GPIOG->ODR schreiben kannst. Sowohl zum Auslesen als auch zum
Beschreiben des Registers.
Du willst aber nur mit Pin 13 blinken, die anderen sollen sich nicht
ändern.
Also musst Du den bisherigen Zustand lesen, Bit 12 ändern und den
Kladderadatsch zurück schreiben.
Wie also Bit 12 auf den Kopf stellen ? Hier kommt die
Exklusiv-Oder-Verknüpfung in's Spiel. Wenn Du Dir die Wahrheitstabelle
dazu anschaust, siehst Du, dass ein Bit, dass Du mit einer 0 ex-oder
verknüpfst, seinen Wert behält. Ein Bit, was Du mit einer 1 ex-oder
verknüpfst, kehrt seinen Zustand um.
schnulli ^= bulli;
in C bedeutet : Lese schnulli, verknüpfe jedes einzelne Bit davon mit
dem entsprechenden Bit von bulli und schreibe das Ergebnis in schnulli.
Also Bit 0 von schnulli ist danach Bit 0 von schnulli vorher ex-oder
verknüpft mit Bit 0 von bulli.
Also Bit 1 von schnulli ist danach Bit 1 von schnulli vorher ex-oder
verknüpft mit Bit 1 von bulli.
Also Bit 2 von schnulli ist danach Bit 2 von schnulli vorher ex-oder
verknüpft mit Bit 2 von bulli.
Und so heiter weiter.
Wir wollten nur Bit 12 umdrehen. Gut - wir brauchen also für Bulli einen
Wert, in dem nur Bit 12 gesetzt ist.
Ich hoffe, ab hier kommst Du selber weiter...