2010_7_27_AVR_Memory

Download Report

Transcript 2010_7_27_AVR_Memory

AVR MEMORY
References:
IAR EWAVR 컴파일러를 이용한 AVR ATmega128 마이크로 컨트롤러, 도서출
Index
 Introduction
 ATmega128 Program Memory
 ATmega128 Data Memory
 ATmega128 External Interface
ATmega128의 메모리 구조
 하버드 구조를 가짐
 프로그램 메모리
– 프로그램 코드를 저장하고 실행시키기 위해 필요한 메모리
 데이터 메모리
– 프로그램 실행에 필요한 데이터를 저장하는 메모리
– AVR의 메모리
•
•
•
•
레지스터
내부 SRAM
EEPROM
외부 데이터 메모리
메모리 구조
프로그램 메
모리
플래쉬 메모
리
(128KB)
데이터 메모
리
32 범용 REG
(32 * 8bit)
내부 SRAM
(4KB)
외부 SRAM
(~64KB 확장 가
능)
EEPROM
(4KB)
프로그램 메모리
 프로그램 메모리
– 프로그램 코드를 저장하고 실행하기 위해 필요한 메모리
– 내부 128KB에 해당하는 플래쉬 메모리 (64K 번지)
– 각 번지는 16bit로 이루어져 있음
16bit
• 8bit씩 두 개가 합해져서 1개의 번지가 16bit로 구성
• 모든 명령어는 16bit 또는 32bit 길이로 구성 됨
– Boot Flash Section과 Application Flash Section
으로 나뉘어져 있음 (Self-Programming 지원)
• Application Flash Section : 프로그램 코드를 저장하는 공간
• Boot Flash Section : Boot Loader HEX코드를 저장하는 공간
• BOOT-Loader를 이용하여 ISP 없이도 소프트웨어 업그레이드 가능
프로그램 메모리
 프로그램 메모리의 상수 액세스
– 일반적인 플래시 메모리 사용 시
• 64K * 16bit
– 플래시 메모리 내 상수(Constant) 액세스 시
•
•
•
•
•
•
변수는 SRAM, 상수는 Flash RAM에 저장
ELPM, SPM 명령어 사용 (내부적으로 Z레지스터 사용)
플래시 메모리의 어드레스가 1bit 좌측으로 시프트 되어 128K * 8bit
Z레지스터는 16bit이므로 216(64K)만큼 엑세스 가능
RAMPZ 레지스터의 PAMPZ0 Bit를 이용하여 Active Page 지정
(Z레지스터의 상위에 RAMPZ0 bit가 추가 되어 총 17bit 어드레스 접근 가
능)
• Z레지스터의 LSB가 0이면 하위 바이트
• Z레지스터의 LSB가 1이면 상위 바이트
프로그램 메모리
 RAM 페이지 선택 레지스터 (RAM Page Z Select REG)
– 내부 플래시 메모리의 두 개의 64KB 페이지 선택
– RAMPZ0 = 0 : 0x0_0000 ~ 0x0_FFFF의 페이지 0 영역 선택
– RAMPZ0 = 1 : 0x1_0000 ~ 0x1_FFFF의 페이지 1 영역 선택
RAMPZ
7
6
5
4
3
2
-
-
1
0
RAM
PZ0
Z- Register
ZH
07
0
$1FFFF
RAM
PZ0
16
$0FFFF
$10000
ZL
7
$00000
ZH
15
ZL
87
0
데이터 메모리
ATmega128
일반 모드
ATmega103
호환 모드
데이터 메모리
 ATmega128 레지스터
– 프로그램이 실행될 때 임시로 데이터를 저장하는 고속 메모리
– 2가지 종류로 나뉘어 짐
• 범용 레지스터 (General Purpose Register)
 ALU 연산에 필요한 데이터들을 임시로 저장하는데 사용
• 특수기능 레지스터 (Special Function Register)
 칩의 내부 I/O 제어나 상태보고 등의 특별 기능들을 수행
 ATmega128에 내장된 각종 I/O를 제어하기 위한
64개의 I/O 레지스터
 ATmega128에 새로 추가된 각종 I/O디바이스들을 제어하기
위한 160개의 External I/O 레지스터
데이터 메모리
 범용 레지스터 (General Purpose Register)
– 32개 R0 ~ R31
– 0x00 ~ ox1F 데이터 메모리 영역에 매핑
– ALU 연산에 필요한 데이터들을 임시로 저장
32 Registers
32 I/O Registers
32 I/O Registers
160 Ext I/O Register
Internal SRAM
(4096 * 8)
Extenal SRAM
(0 – 64K * 8)
∙
∙
∙
데이터 메모리
 X Y Z 레지스터
– 데이터 영역의 간접 주소 지정을 위한 주소 포인터로 사용
• R26 ~ R31 (0x1B ~ ox1E)
데이터 메모리
 I/O 레지스터
– ATmega128에 내장된 I/O 기능들을 제어하기 위해 64개의 I/O 레지
스터 제공
– 0x0020 ~ 0x005F 메모리 영역
– IN/OUT 명령은 0x00 ~ 0x3F로 사용
• 실제 메모리에선 0x20 ~ 0x5F지만, IN/OUT 명령에선 -0x20을 하여 사용
Ext. I/O
Mem_Add
IN/Out Add
 확장 I/O 레지스터
– ATmega128에 새로 추가된 I/O 기능들을 제어하기 위해 160개의
확장 I/O 레지스터 제공
– 0x0060 ~ 0x00FF 메모리 영역
– IN/OUT 명령 사용 할 수 없음
– ST/STS/STD 또는 LD/LDS/LDD 명령어로 접근 가능
레지스터 구성
 상태 레지스터 (Status Register)
– ALU 연산 실행 후, 연산 결과에 따라 비트 값 세팅
– I/O 메모리 영역 0x3F(0x5F) 번지에 위치
– Bit 7(I) : Global Interrupt Enable
– Bit 6(T) : Bit Copy Storage
• BLD와 BST를 이용하여 이 비트와 어떤 레지스터의 한 비트 사이에 비트
복사 가능
–
–
–
–
–
–
Bit
Bit
Bit
Bit
Bit
Bit
5(H) : Half Carry Flag
4(S) : Sign Bit, S= N ∧V
3(V) : 2’s Complement Overflow Flag
2(N) : Negative Flag
1(Z) : Zero Flag
0(C) : Carry Flag
데이터 메모리
 스택 포인터 (Stack Pointer)
– 임시 데이터, 지역변수, 인터럽트 또는 서브루틴 실행 후 리턴 주소가
저장되는 스택의 가장 상단의 주소
– 16비트 레지스터 : SPL(ox3E or 0x5E), SPH(ox3D or 0x5D)
• 0x3E와 0x3D는 IN/OUT 명령 사용 시 주소
–
–
–
–
스택 포인터는 내부 SRAM 영역 0x100번지 이상을 가리킴
PUSH : 1 감소, POP 1 증가
서브루틴 or 인터럽트 시 : 2증가
RET/RETI : 2 증가
데이터 메모리
 내부 SRAM
–
–
–
–
내부 프로그램 코드에 의해 발생되는 데이터를 일시적으로 저장
프로그램에서 사용자 변수의 저장영역이나 Stack영역으로 사용
4KB의 SRAM 내장 (메모리 번지는 $0100 ~ $10FF까지)
일반 모드와 ATmega103 호환 모드로 나뉘어 짐
 EEPROM
– 전원이 꺼져도 지속적으로 값을 유지 할 필요가 있는 별도의 데이터를
저장하기 위해 사용되는 메모리
– 다른 데이터 메모리 어드레스 영역과 별개의 영역에 할당
– EEAR / EEDR / EECR 레지스터로 1Byte씩 액세스 가능
– 총 용량 4KB로 구성
데이터 메모리
 외부 데이터 메모리
– 0x1100-0xFFFF번지에 외부 데이터 메모리를 연결하여 사용 가능
– 외부 SRAM또는 LCD나 ADC와 같은 주변장치의 인터페이스용으로 사
용 가능
– 외부메모리 인터페이스 기능
• 주변장치와 적절한 인터페이스를 위한 0-3의 Wait Cycle 지정 가능
• 2개의 섹터로 외부 데이터 메모리를 분할하고, 각각 독립적인 Wait Cycle
지정 가능
• 상위 어드레스 바이트를 설정하기 위해, 비트 수 선택 가능
• 데이터 버스의 신호들이 동작 할 때 전류 소비량을 줄이기 위한 BUSkeeper 기능
데이터 메모리
 데이터를 저장하기 위한 EEPROM
– 전원이 꺼지더라도 지속적으로 그 값을 유지해야 할 필요가 있는 별도
의 데이터를 저장하기 위해 사용하는 메모리
– 총 4K Bytes로 구성
– 내부 EEPROM 제어 레지스터
•
•
•
•
ATmega128 내부 EEPROM 영역을 접근
EEAR(EEPROM Address Register)
EEDR(EEPROM Data Register)
EECR(EEPROM Control Register)
데이터 메모리
 내부 EEPROM 제어 레지스터
내부 EEPROM의 4KB를 나타내는 주소
내부 EEPROM의 데이터를 쓰거나 읽을 때 사용하는 8bit 데이터 레지스터
내부 EEPROM 컨트롤 레지스터
외부 인터페이스
 외부 인터페이스 기능 특성
– 소프트웨어적으로 0 ~ 3개의 Wait Cycle 설정 가능
• ATmega103 모드 : 0 ~ 1개 Wait 설정 가능
– 외부 데이터 메모리 영역 -> 2개 섹터로 분할, 각각 독립 Wait Cycle
설정
• ATmega103 모드 : 지원하지 않음
– 16비트 어드레스 -> 상위 바이트 중 필요 개수만을 어드레스 버스로
동작
• ATmega103 모드 : 지원하지 않음
– 버스 키퍼 기능 설정 -> 데이터 버스의 신호들이 동작할 때, 전류 소비
량 감소
• ATmega103 : 지원하지 않음
외부 인터페이스
 ATmega128의 외부 인터페이스 기본 설계
외부 인터페이스
 외부 인터페이스 관련 레지스터
– MCUCR (MCU Control Register, 0x35(0x55))
• SRE(External SRAM/XMEM Enable)
 1이면 외부 메모리 인터페이스 활성화 (AD7-AD0, A15-A8, ALE, /RD, /WR
신호 활성화)
 0이면 외부 메모리 인터페이스 비활성화 (범용 포트로 동작, 데이터 방향 레지
스터 사용 가능)
• SRW10(Wait-state Select Bit)
 XMCRA 레지스터의 SRWn비트와 조합하여 외부 메모리의 상위 섹터의
Wait-State 상태를 설정
외부 인터페이스
– XMCRA (External Memory Control Register A)
• SRL2~0 (Wait state Selector Limit)
 외부 메모리 인터페이스 시, 두 개의 섹터로 분류하여 Wait-State를 다르게 지
정 가능
• SRW01, 00 (Wait state Select Bit)
 외부 메모리의 하위 섹터의 Wait-State 설정
• SRW11 (Wait State Select Bit)
 외부 메모리의 상위 섹터의 Wait-State 상태를 설정
외부 인터페이스
– XMCRA (External Memory Control Register A)
Wait State
SRL2-0의 설정
SRL2
SRL1
SRL0
Sector Limits
0
0
0
Lower sector = N/A
Upper Sector = 0x1100 – 0xFFFF
SRWn
1
SRWn
2
Wait State
0
0
No wait State
0
0
1
Lower sector = 0x1100 – 0x1FFF
Upper Sector = 0x2000 – 0xFFFF
0
1
Wait one cycle during
read/write strobe
0
1
0
Lower sector = 0x1100 – 0x3FFF
Upper Sector = 0x4000 – 0xFFFF
1
0
Wait two cycles during
read/write strobe
0
1
1
Lower sector = 0x1100 – 05FFF
Upper Sector = 0x6000 – 0xFFFF
1
1
1
0
0
Lower sector = 0x1100 – 0x7FFF
Upper Sector = 0x8000 – 0xFFFF
Wait two cycles during
read/write and wait one cycle
before driving out new address
1
0
1
Lower sector = 0x1100 – 0x9FFF
Upper Sector = 0xA000 – 0xFFFF
1
1
0
Lower sector = 0x1100 – 0xBFFF
Upper Sector = 0xC000 – 0xFFFF
1
1
1
Lower sector = 0x1100 – 0xDFFF
Upper Sector = 0xE000 – 0xFFFF
SRL2-0값 * 0x2000 = Upper Sector 시작 주소
외부 인터페이스
– XMCRB (External Memory Control Register B)
• XMBK (External Memory Bus-Keeper Enable)
 1이면 AD7-AD0 라인에 bus-keeper 활성화, XMEM 인터페이스가 3-state의
값을
유지하고 있어도 AD7-AD0 값은 이전의 값을 유지
 0이면 bus-keeper 비활성화
• XMM2~0 (External Memory High Mask)
 외부 메모리의 상위 어드레스 바이트를 몇 개의 bit로 사용할지 설정
외부 인터페이스
– XMCRB (External Memory Control Register B)
외부 메모리 인터페이스가 설정되었을 때 포트 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
상위 어드레스가 없는 경우
전체 PortC