пжалста
#define __REG8 unsigned char
#define __REG16 unsigned short
#define __REG32 unsigned long
typedef struct
{
__REG32 MR0I :1;
__REG32 MR0R :1;
__REG32 MR0S :1;
__REG32 MR1I :1;
__REG32 MR1R :1;
__REG32 MR1S :1;
__REG32 MR2I :1;
__REG32 MR2R :1;
__REG32 MR2S :1;
__REG32 MR3I :1;
__REG32 MR3R :1;
__REG32 MR3S :1;
__REG32 :4;
} __txmcr_bits;
#define T0MCRbits (*(volatile __txmcr_bits *)0xE0004014)
IAR то же самое компилит нормально, использует инструкции загрузки и выгрузки СЛОВА. А gcc, если битовое поле в младшем байте, использует инструкции загрузки выгрузки байта.
Кроме того, для регистров переферии, которые в документации филипса определены как 4-байтные (ну например, FIO0DIR и т. п.), код который генерит gcc работает нормально (хотя там тоже используются ldrb и strb)