Witam.
Chciałbym się dowiedzieć jak rozumieć wyniki poniższych operacji.
GPIOA->MODER &= ~((3ul << 2*5));
GPIOA->MODER |= ((1ul << 2*5));
GPIOA->OTYPER &= ~((1ul << 5));
GPIOA->OSPEEDR &= ~((3ul << 2*5));
GPIOA->OSPEEDR |= ((1ul << 2*5));
GPIOA->PUPDR &= ~((3ul << 2*5));
Doszukałem się parę rzeczy w sieci, dzięki którym mogę się jedynie domyśleć, jak prezentuje się powyższy wynik. Jednak nigdzie nie znalazłem oczywistego dowodu. Moje rozumowanie.
GPIOA->MODER &= ~((3ul << 2*5));
3ul to inaczej 0000 0000 0000 0000 0000 0000 0000 0011
teraz przesuń o 10 bitów w lewo czyli
0000 0000 0000 0000 000 1100 0000 0000
zaneguj
1111 1111 1111 1111 1111 0011 1111 1111
Czyli w pierwszym nawiasie ma my powyższa wartość, która wpisujemy w rejestr MODER. Czy dobrze dedukuje ?