Widzę, że masz duże braki w podstawach arytmetyki i logiki bitowej i niestety systemach liczb. Musisz sobie to dobrze poznać - zanim weźmiesz się za coś więcej z mikrokontrolerów. To po pierwsze.
A teraz co do linijki: GPIOG->MODER |= (1<<(2*13)) | (1<<(2*14));
Mam nadzieję, że się nie rąbnę
![Cool 8-)](https://forum.atnel.pl/images/smilies/icon_cool.gif)
Należy rozumieć to tak:
Weź aktualną zawartość (wartość) rejestru MODER dla portu G. Następnie zrób na tym operację logicznego OR [czyli zeruj te bity (na odpowiadających sobie pozycjach), gdzie są jednocześnie zera, a ustaw w pozostałych przypadkach warość 1] z wyliczonym wyrażeniem (1<<(2*13)) | (1<<(2*14)).
To wyrażenie zaś liczymy następująco:
a) najpierw mnożymy 2*13 oraz 2*14 i otrzymujemy 26 i 28 <-są to prawe bity z dwubitowych wartości odpowiedzialnych za konfigurację wejść/wyjść 13 i 14 portu G (lewe bity domyślnie po resecie mikrokontrolera są zerami, więc ich nie trzeba ruszać - stąd wystarcza zapis 2*13 i 2*14). Mamy więc zapis (1<<26) | (1<<28)
b) teraz przesuwamy o 26 pozycji 1 i robimy logiczne OR z liczbą z 1 przesuniętą o 28 pozycji. Binarnie wygląda to tak:
(0000 0100 0000 0000 0000 0000 0000 0000)b OR (0001 0000 0000 0000 0000 0000 0000 0000)b
i otrzymujemy w wyniku binarnie: (0001 0100 0000 0000 0000 0000 0000 0000)b = 335544320 dziesiętnie = 0x14000000 szesnastkowo
c) i teraz wartość rejestru MODER traktujemy logicznym OR z tą liczbą. W Wyniku binarnie będziemy mieli zatem: (xx01 01xx xxxx xxxx xxxx xxxx xxxxx xxxxx)b (x oznacza poprzedni stan bitu, 0 to wartość jaka będzie, gdy rejestr miał stan po resecie, czyli na tych pozycjach były zera - gdyby były jedynki, to będzie tam 1, ale wtedy nie będzie to ustawienie linii portu na wyjście).