История изменений
Исправление COKPOWEHEU, (текущая версия) :
С вашего позволения распишу как переводить bit-band в нормальные адреса. Картинку вы уже показывали, остается только оформить в виде алгоритма.
Согласно документации смещение для записи бита X в регистр по смещению Y равен A = Y∙32 + X∙4. Для RCC_APB2ENR |= RCC_APB2ENR_GPIOCEN, оно же RCC_APB2ENR |= (1<<4) получаем:
0x40000000 - PERIPH_BASE
0x20000 - AHBPERIPH_BASE = (PERIPH_BASE + 0x20000)
0x1000 - RCC_BASE = (AHBPERIPH_BASE + 0x1000)
(6*4 = 0x18) - все регистры в структуре 4-байтные, а APB2ENR идет шестым
Убираем смещение 0x40000000
0x21018 - X (Смещение нужного нам регистра)
Y = 4 (бит, который мы выставляем)
A = 0x21018*32 + 4*4 = 0x420310
Чтобы получить абсолютный адрес добавляем смещение 0x42000000
Addr = 0x42420310 - вроде похоже
Теперь обратно. Здесь есть фокус что регистры 32-битные, а адресация побайтная. Значит, адрес (и смещение) делятся на 4.
Y = trunc( A / 32 / 4 ) * 4
X = ( A - Y*32 ) / 4
A = 0x420310
Y = 0x21018
X = 4
Ну а из адреса получить имя регистра уже несложно.
Исходная версия COKPOWEHEU, :
С вашего позволения распишу как переводить bit-band в нормальные адреса. Картинку вы уже показывали, остается только оформить в виде алгоритма.
Согласно документации смещение для записи бита X в регистр по смещению Y равен A = Y32 + X4. Для RCC_APB2ENR |= RCC_APB2ENR_GPIOCEN, оно же RCC_APB2ENR |= (1<<4) получаем:
0x40000000 - PERIPH_BASE
0x20000 - AHBPERIPH_BASE = (PERIPH_BASE + 0x20000)
0x1000 - RCC_BASE = (AHBPERIPH_BASE + 0x1000)
(6*4 = 0x18) - все регистры в структуре 4-байтные, а APB2ENR идет шестым
Убираем смещение 0x40000000
0x21018 - X (Смещение нужного нам регистра)
Y = 4 (бит, который мы выставляем)
A = 0x21018*32 + 4*4 = 0x420310
Чтобы получить абсолютный адрес добавляем смещение 0x42000000
Addr = 0x42420310 - вроде похоже
Теперь обратно. Здесь есть фокус что регистры 32-битные, а адресация побайтная. Значит, адрес (и смещение) делятся на 4.
Y = trunc( A / 32 / 4 ) * 4
X = ( A - Y*32 ) / 4
A = 0x420310
Y = 0x21018
X = 4
Ну а из адреса получить имя регистра уже несложно.