본문 바로가기

AVR(ATmega128)로 장난하기

AVR(ATmaga128) 기초지식(4)_AVR ATmega128의 메모리(2)



1. 외부 데이터 메모리


ATmega128은 노말모드에서 0x1100-0xffff번지에 외부 데이터 메모리로 사용가능하며 이들은 외부 램, 외부 플래쉬 롬 또는 LCD나 AD변환기와 같은 주변장치의 인터페이스용으로 사용할 수 있다. 이를 위해 다음과 같은 기능이 제공된다.


① 주변장치와 적절한 인터페이스를 위한 0-3의 대기 사이클을 지정할 수 있다.

② 2개의 섹터로 외부 데이터 메모리를 분할하고 이들에 독립적인 대기 사이클을 지정할 수 있다.

③ 16비트 주소의 상위바이트에 중 필요한 갯수의 비트만을 주소 버스로 동작하게 할 수 있다.

④ 데이터 버스의 신호들이 동작할 때 전류 소비량이 감소되도록 Bus-keeper 기능을 설정할 수 있다.


  (1) 외부 메모리 인터페이스


● 외부 램 연결을 위한 핀 : MCUSR레지스터를 이용해서 설정한다.

① PA7~PA0(핀44~핀51) : 8051의 포트0처럼 하위주소와 데이터버스로 사용된다.

② PC7~PC0(핀35~핀42) : 8051의 포트2처럼 상위주소버스로 사용된다.

③ ALE(Address Latch Enable, PG2, 핀43) : 외부메모리에 접근할 때 PA에서 출력되는 하위주소값을 래치할

수 있도록 CPU에서 1레벨값을 출력해준다.

④ RD(PG1, 핀34) : 외부 테이터 메모리를 읽을 때 사용되는 스트로브 신호 출력 단자로 사용

⑤ WR (PG0, 핀33) : 외부 데이터 메모리에 쓸 때 사용되는 스트로브 신호 출력 단자로 사용

● 외부램 연결 블록선도 : 그림 8은 외부램과의 연결을 보여준다.


외부램의 연결


● 외부램 읽기(쓰기) 과정 :

①외부 램 읽기 명령이 내려지면 ALE신호가 1레벨이 되고 Port A(AD7:0)는 하위주소 버스로 하위주소 값을 내보내고 Port C(A15:8)는 상위주소 버스로 페이지 값을 출력시킨다.

②ALE 가 1레벨인 동안 하위주소값은 래치되어 ALE가 0레벨이 된 후에도 래치에 값이 보존된다.

③읽기신호 RD (쓰기신호 WR)가 0레벨로 변하여 활성상태로 되면

④외부 램의 Output Enable(혹은 Write Enable)이 활성화되고 외부 램의 데이터 값이 Port A를 통해 CPU로 읽혀지도록(램에 쓰여지도록) 한다. (외부램과의 인터페이스는 기본적으로 3클럭 사이클에 수행되나 소프트웨어적으로 1-3개의 여분의 대기 사이클을 줄 수도 있다.)


  (2) MCUCR레지스터


MCUCR(MCU Control Register)레지스터는 CPU의 전체적인 기능을 설정하는데 비트7과 6을 사용해서 외부데이터 메모리 영역을 설정할 수 있다.



● BIT 7(SRE:external SRAM/XMEM Enable) : 

1로 세트하면 PA7-PA0(핀44-핀51), PC7-PC0(핀35-핀42), ALE(PG2, 핀43), RD(PG1, 핀34), WR(PG0, 핀33) 핀들을 외부메모리와 인터페이스를 위한 핀들로 설정하게 되고 0으로 하면 병렬 포트로 동작하도록 한다.

● BIT 6(SRW10:Wait-state Select Bit for Upper Sector) : 

외부 메모리와 인터페이스 할 때 외부 데이터의 Upper 섹터에 부여하는 여분의 대기 사이클의 수를 XMCRA레지스터의 SRW11비트와 조합되어 설정한다. 

[SRW11:SRW10]=00일때 대기 사이클은 0개, 01일때 1개, 10일때 2개, 11일때 3개를 준다.


  (3) XMCRA레지스터



 BIT 6(SRL2)~비트4(SRL0) : 

외부 데이터 메모리 영역을 Lower와 Upper 2개의 섹터로 분할하여 각 섹터에 별도로 대기 사이클의 수를 설정할 수 있도록 한다.


 SRL2

 SRL1

 SRL0

Sector Limit 

 0

 0

 0

 Lowre sector = N/A

 Upper sector = 0x1100 - 0xFFFF

 0

 0

 1

 Lowre sector = 0x1100 - 0x1FFF

 Upper sector = 0x2000 - 0xFFFF

  0 

 1

 0

 Lowre sector = 0x1100 - 0x3FFF

 Upper sector = 0x4000 - 0xFFFF

 0

 1

 1

 Lowre sector = 0x1100 - 0x5FFF

 Upper sector = 0x6000 - 0xFFFF

 1

 0

 0

 Lowre sector = 0x1100 - 0x7FFF

 Upper sector = 0x8000 - 0xFFFF

 1

 0

 1

 Lowre sector = 0x1100 - 0x9FFF

 Upper sector = 0xA000 - 0xFFFF

 1

 1

 0

 Lowre sector = 0x1100 - 0xBFFF

 Upper sector = 0xC000 - 0xFFFF

 1

 1

 1

 Lowre sector = 0x1100 - 0xDFFF

 Upper sector = 0xE000 - 0xFFFF

SRL2~SRL0을 이용한 메모리 분할


● BIT3~BIT2 (SRW01~SRW00:Wait-state Select Bit for Lower Sector) : 

외부 메모리와 인터페이스 할 때외부 데이터의 Lower 섹터에 부여하는 여분의 대기 사이클의 수를 설정한다. [SRW01:SRW00]=00일때 대기

사이클은 0개, 01일때 1개, 10일때 2개, 11일때 3개를 준다.

● BIT1 (SRW11:Wait-state Select Bit for Upper Sector) : 

외부 메모리와 인터페이스 할 때 외부 데이터의Upper 섹터에 부여하는 여분의 대기 사이클의 수를 XMCRA레지스터의 SRW11비트와 조합되어 설정한다.

[SRW11:SRW10]=00일때 대기 사이클은 0개, 01일때 1개, 10일때 2개, 11일때 3개를 준다.


 SRWn1

 SRWn0

 Wait Sate

 0

 0

 No wait-sate

 0

 1

 Wait one cycle during read/write strobe

 1

 0

 Wait two cycle during read/write strobe

 1

 1

 Wait two cycle during read/write and Wait one cycle before driving out new address

Wate State


  (4) XMCRB레지스터


XMCRB(External Memory Control Register B)레지스터는 버스 키퍼 기능을 설정하고 외부 메모리 주소의 상위 바이트에서 어느 부분까지가 주소지정에 사용되는지를 설정한다.



● BIT7 (XMBK:eXternal Memory Bus-Keeper enable) : 

1로 세팅되면 PA7-PA0(핀44-핀51)의 값들이 보존되는 버스 키퍼 기능을 활성화시킨다.

● BIT6~BIT4 : 유보된 비트들이다.

● BIT2~BIT0 (XMM2~0 : eXternal Memory high Mask) : 

60K이하의 외부 메모리를 사용하는 경우 상위주소 버스로 사용되는 port C의 일부분만이 주소버스로 사용되도록 하고 나머지는 입출력 포트로 설정하는데 사용된다. 만약 [XMM2:XMM1:XMM0]=111 포트 C 모두를 입출력 포트로 설정하고, 110이면 PC0와 PC1만을 주소버스로 설정하고, 101이면 PC0~PC2, 100이면 PC0~PC3, 011이면 PC0~PC4, 010이면 PC0~PC5, 001이면 PC0~PC6을 주소버스로 설정하고, 000이면 포트 C 모두를 주소버스로 설정한다.


 XMM2 

XMM1

XMM0

외부 메모리 인터페이스에 대한 비트 수 

표준 포트 핀 

 0

 0

 0

 8(전체 60kB 공간)

 -

 0

 0

 1

 7

 PC7

 0

 1

 0

 6

 PC7 - PC6

 0

 1

 1

 5

 PC7 - PC5

 1

 0

 0

 4

 PC7 - PC4

 1

 0

 1

 3

 PC7 - PC3

 1

 1

 0

 2

 PC7 - PC2

 1

 1

 1

 상위 어드레스가 없는 경우

 전체 Part C

외부 메모리 인터페이스가 설정되었을 때 포트 C 핀의 범용 포트 동작


32kB의 외부 메모리 어드레스 맵