1. RAMPX, RAMPY - тоже самое, что и RAMPZ, с инструкциями LD/LDD/ST/STD - для доступа к SRAM памяти >64К при косвенной адресации
Код
ldi r29,$05
ldi r28,$00
ld r2,Y+
Т.е. если RAMPY=0, то будет прочитана ячейка $500,
если RAMPY=1, то будет прочитана ячейка $10500
При ресете RAMPZ=RAMPY=RAMPX=0 - то есть указывают на нижние 64К
2. Отличие RAMPZ, от RAMPX и RAMPY - в том что RAMPZ:Z используется в инструкциях ELPM/SPM для доступа к Flash-памяти
Код
ldi ZL, byte3(Table_1<<1); Initialize Z-pointer
out RAMPZ, ZL
ldi ZH, byte2(Table_1<<1)
ldi ZL, byte1(Table_1<<1)
elpm r16, Z+; Load constant from Program
; memory pointed to by RAMPZ:Z (Z is r31:r30)
Здесь можно использовать только RAMPZ:Z
3. RAMPD - аналогично, но с инструкциями LDS/STS для прямой адресации
Код
lds r2,$400
Т.е. если RAMPD=0, то будет прочитана ячейка $400,
если RAMPD=2, то будет прочитана ячейка $20400
При ресете RAMPD=0 - то есть указывает на нижние 64К
4. есть еще EIND (Extended Indirect Register) - предлагаю с ним разобраться самому в качестве домашнего задания
P.S. Если интерфейса внешней памяти у кристалла нет, то инструкции скорее всего не отработают. Хотя регистры скорее всего есть, т.к. ядро у семейств А1,А3 и А4 одно и тоже
Сообщение отредактировал alexeyv - Apr 28 2012, 04:33