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의 외부 메모리 어드레스 맵
'AVR(ATmega128)로 장난하기' 카테고리의 다른 글
AVR(ATmaga128) 기초지식(6)_시스템 클록과 슬립 모드 (0) | 2018.03.17 |
---|---|
AVR(ATmaga128) 기초지식(5)_AVR ATmega128의 메모리(3) (0) | 2018.03.17 |
AVR(ATmaga128) 기초지식(3)_AVR ATmega128의 메모리(1) (1) | 2018.03.09 |
AVR(ATmaga128) 기초지식(2)_AVR ATmega128의 내부구조 (2) | 2018.03.09 |
AVR(ATmaga128) 기초지식(1)_AVR ATmega128이란? (1) | 2018.03.08 |