в reference коде TWI интерфейса с atmel.com есть такие строки:
Код
/* Set the TWI Master Mode Register */
pTwi->TWI_MMR = SlaveAddr | IntAddrSize & ~AT91C_TWI_MREAD;
pTwi->TWI_MMR = SlaveAddr | IntAddrSize & ~AT91C_TWI_MREAD;
Компилятор (arm-elf-gcc) предупреждает:
Код
warning: suggest parentheses around arithmetic in operand of |
Понятно, что приоритет & выше чем |, и наверное авторы кода полагались на то, что вычисления будут в таком порядке:
1) ~AT91C_TWI_MREAD
2) IntAddrSize & ~AT91C_TWI_MREAD
3) SlaveAddr | <результат предыдещей операции>
То есть правильно ли будет расставить скобки так:
Код
pTwi->TWI_MMR = SlaveAddr | (IntAddrSize & ~AT91C_TWI_MREAD);
Из даташита не совсем понятна последовательность. Буду признателен за развеяние сомнений
