Здравствуйте.
Работаю с msp430f5418. Там куча периферии всякой и вот я споткнулся на ровном месте. Возьмем к примеру Таймер А, у которого есть такой регистр TA0CTL расположенный по адресу 0x340. Он 16 разрядный, но в UG сказано про все регистры Таймера да и не только:
Цитата
NOTE: All registers have word or byte register access. For a generic register ANYREG, the suffix
"_L" (ANYREG_L) refers to the lower byte of the register (bits 0 through 7). The suffix "_H"
(ANYREG_H) refers to the upper byte of the register (bits 8 through 15).
То есть насколько я понимаю, можно обратиться побайтно к старшей части слова TA0CTL, то есть по адресу 0x341.
Сделав такой код
Код
//UINT8* p = (UINT8*)0x341;
//*p = 0x1;
то есть попытку записать 1 в младший бит старшего байта, компилятор сделал вполне валидную команду
Код
mov.b #1, &0x341
Но исполнение этой команды привело к записи единицы в младший бит
младшего байта регистра. Почему? Тоже самое с регистрами DMA. А вот если в обычную RAM писать ровно такими же командами, то все хорошо.
Спасибо.