240 likes | 742 Views
AVR MEMORY . References: IAR EWAVR 컴파일러를 이용한 AVR ATmega128 마이크로 컨트롤러 , 도서출판 성안당 AVR ATmega128 정복 , Ohm 사. Index. Introduction ATmega128 Program Memory ATmega128 Data Memory ATmega128 External Interface. ATmega128 의 메모리 구조. 하버드 구조를 가짐 프로그램 메모리 프로그램 코드를 저장하고 실행시키기 위해 필요한 메모리
E N D
AVR MEMORY References: IAR EWAVR 컴파일러를 이용한 AVR ATmega128 마이크로 컨트롤러, 도서출판 성안당 AVR ATmega128 정복, Ohm사
Index • Introduction • ATmega128Program Memory • ATmega128Data Memory • ATmega128 External Interface
ATmega128의 메모리 구조 • 하버드 구조를 가짐 • 프로그램 메모리 • 프로그램 코드를 저장하고 실행시키기 위해 필요한 메모리 • 데이터 메모리 • 프로그램 실행에 필요한 데이터를 저장하는 메모리 • AVR의메모리 • 레지스터 • 내부 SRAM • EEPROM • 외부 데이터 메모리 메모리 구조 프로그램 메모리 데이터 메모리 플래쉬 메모리 (128KB) 32 범용 REG (32 * 8bit) 내부 SRAM (4KB) 외부 SRAM (~64KB 확장 가능) EEPROM (4KB)
프로그램 메모리 • 프로그램 메모리 • 프로그램 코드를 저장하고 실행하기 위해 필요한 메모리 • 내부 128KB에 해당하는 플래쉬 메모리 (64K 번지) • 각 번지는 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 없이도 소프트웨어 업그레이드 가능 16bit
프로그램 메모리 • 프로그램 메모리의 상수 액세스 • 일반적인 플래시 메모리 사용 시 • 64K * 16bit • 플래시 메모리 내 상수(Constant)액세스 시 • 변수는 SRAM, 상수는 Flash RAM에 저장 • ELPM, SPM 명령어사용 (내부적으로 Z레지스터 사용) • 플래시 메모리의 어드레스가 1bit 좌측으로 시프트 되어 128K * 8bit • Z레지스터는 16bit이므로 216(64K)만큼 엑세스 가능 • RAMPZ 레지스터의 PAMPZ0Bit를 이용하여 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 영역 선택 $00000 $0FFFF $10000 RAMPZ Z- Register - - - - - - - RAMPZ0 ZH ZL 7 6 5 4 3 2 1 0 7 0 7 0 $1FFFF RAMPZ0 ZH ZL 16 15 8 7 0
데이터 메모리 ATmega103 호환 모드 ATmega128 일반 모드
데이터 메모리 • 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을 하여 사용 • 확장 I/O 레지스터 • ATmega128에 새로 추가된 I/O 기능들을 제어하기 위해 160개의 확장 I/O 레지스터 제공 • 0x0060 ~ 0x00FF 메모리 영역 • IN/OUT 명령 사용 할 수 없음 • ST/STS/STD 또는 LD/LDS/LDD 명령어로 접근 가능 Ext. I/O Mem_Add IN/Out Add
레지스터 구성 • 상태 레지스터 (Status Register) • ALU 연산 실행 후, 연산 결과에 따라 비트 값 세팅 • I/O 메모리 영역 0x3F(0x5F) 번지에 위치 • Bit 7(I) : Global Interrupt Enable • Bit 6(T) : Bit Copy Storage • BLD와 BST를 이용하여 이 비트와 어떤 레지스터의 한 비트 사이에 비트 복사 가능 • Bit 5(H) : Half Carry Flag • Bit 4(S) : Sign Bit, S= N ∧V • Bit 3(V) : 2’s Complement Overflow Flag • Bit 2(N) : Negative Flag • Bit 1(Z) : Zero Flag • Bit 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의 WaitCycle 지정 가능 • 2개의 섹터로 외부 데이터 메모리를 분할하고, 각각 독립적인 Wait Cycle 지정 가능 • 상위 어드레스 바이트를 설정하기 위해, 비트 수 선택 가능 • 데이터 버스의 신호들이 동작 할 때 전류 소비량을 줄이기 위한 BUS-keeper 기능
데이터 메모리 • 데이터를 저장하기 위한 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-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 핀의 범용 포트 동작