[an error occurred while processing this directive]
Странно, но на 0x20000000 ошибки возникать не должно(+)
(«Телесистемы»: Конференция «Цифровые сигнальные процессоры (DSP) и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено kolja 06 октября 2004 г. 13:47
В ответ на: Девайс токо будет PEF22554. отправлено V-ctor 06 октября 2004 г. 12:46

так как 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: 

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru