[an error occurred while processing this directive]
|
так как 2 младших бита адреса(внутри проца) в нуле,
Если писать в память long, то это надо делать по адресам кратным 4,
short кратным 2, а байты всё равно как.
Должно работать вот так
#define SRAM8(x) (*((volatile unsigned char *)(x)))
#define pSRAM8(x) ((volatile unsigned char *)(x))
#define SRAM16(x) (*((volatile unsigned short *)(x)))
#define pSRAM16(x) ((volatile unsigned short *)(x))
#define SRAM32(x) (*((volatile unsigned long *)(x)))
#define pSRAM32(x) ((volatile unsigned long *)(x))
SRAM32(0x20000000)=xx;
SRAM32(0x20000004)=xx;
SRAM32(0x20000008)=xx;
а вот SRAM32(0x20000002)=xx; вызовет EXEPTION
Для SRAM16() адреса 0x20000000, 0x20000002, 0x20000004, 0x20000006 ...
Так что если 32р. регистры переферии не выравнены должным образом, то придется писать по частям:
SRAM16(0x20000002)=xxx;
SRAM16(0x20000004)=xxx>>16;
Кстати на переферию лучше добавить volatile, что бы избежать фокусов оптимизатора.
E-mail: info@telesys.ru