Using all 64kb locations of external memory, Atmega128(l) – Rainbow Electronics ATmega128L User Manual
Page 32

32
ATmega128(L)
2467B–09/01
Using all 64KB Locations of
External Memory
Since the external memory is mapped after the internal memory as shown in
only 60KB of external memory is available by default (address space 0x0000 to 0x10FF
is reserved for internal memory). However, it is possible to take advantage of the entire
external memory by masking the higher address bits to zero. This can be done by using
the XMMn bits and control by software the most significant bits of the address. By set-
ting Port C to output 0x00, and releasing the most significant bits for normal Port Pin
operation, the Memory Interface will address 0x0000-0x1FFF. See the following code
examples.
Note:
1. The example code assumes that the part specific header file is included.
Care must be exercised using this option as most of the memory is masked away.
Assembly Code Example
; OFFSET is defined to 0x2000 to ensure
; external memory access
; Configure Port C (address high byte) to
; output 0x00 when the pins are released
; for normal Port Pin operation
ldi
r16, 0xFF
out
DDRC, r16
ldi
r16, 0x00
out
PORTC, r16
; release PC7:5
ldi
r16, (1< sts XMCRB, r16 ; write 0xAA to address 0x0001 of external r16, 0xaa sts 0x0001+OFFSET, r16 ; re-enable PC7:5 for external memory r16, (0< sts XMCRB, r16 ; store 0x55 to address (OFFSET + 1) of r16, 0x55 sts 0x0001+OFFSET, r16 C Code Example #define OFFSET 0x2000 void XRAM_example(void) DDRC = 0xFF; XMCRB = (1< *p = 0xaa; XMCRB = 0x00; *p = 0x55;
; memory
ldi
ldi
; external memory
ldi
{
unsigned char *p = (unsigned char *) (OFFSET + 1);
PORTC = 0x00;
}