beautypg.com

Using all 64kb locations of external memory, Atmega162/v – Rainbow Electronics ATmega162V User Manual

Page 32

background image

32

ATmega162/V

2513E–AVR–09/03

Using all 64KB Locations of
External Memory

Since the external memory is mapped after the internal memory as shown in Figure 11,
only 64,256 Bytes of external memory are available by default (address space 0x0000
to 0x05FF 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 setting Port C to output 0x00, and releasing the most significant bits for nor-
mal Port Pin operation, the Memory Interface will address 0x0000 - 0x1FFF. See code
example below.

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

(1)

; 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<

out

SFIOR, r16

; write 0xAA to address 0x0001 of external

; memory

ldi

r16, 0xaa

sts

0x0001+OFFSET, r16

; re-enable PC7:5 for external memory

ldi

r16, (0<

out

SFIOR, r16

; store 0x55 to address (OFFSET + 1) of

; external memory

ldi

r16, 0x55

sts

0x0001+OFFSET, r16

C Code Example

(1)

#define OFFSET 0x2000

void XRAM_example(void)

{

unsigned char *p = (unsigned char *) (OFFSET + 1);

DDRC = 0xFF;

PORTC = 0x00;

SFIOR = (1<

*p = 0xaa;

SFIOR = 0x00;

*p = 0x55;

}