1주차 ATmega128의구조와메모리 Next-Generation Networks Lab.
1. ATmega128의특징 고성능, 저전력의 8 비트마이크로컨트롤러 진보된 RISC 구조 대부분단일클럭에서실행되는강력한 133개의명령어구조 16MHz에서거의 16MIPS로동작 32개의 8 bit 범용작업레지스터와추가된주변장치제어레지스터 2 사이클내에서수행되는강력한곱셈기내장 메모리 프로그램을읽고쓸수있는 128KB 의플래시프로그램메모리내장 4Kbytes의 EEPROM 내장 4Kbytes의내부 SRAM 내장 플래시프로그램메모리는 10,000번, EEPROM은 100,000번읽기 / 쓰기가능 64Kbytes까지확장가능한외부메모리기능제공 ISP 를위한 SPI 제공 2
주변장치 (Peripherals) 2 개의 8 bit 타이머 / 카운터와 2 개의 16 bit 타이머 / 카운터지원 외부오실레이터에의한실시간카운터 6개의 PWM 채널 8채널, 10비트 ADC (Analog to Digital Converter) 내장 다양한방식의통신지원 : USART, SPI, TWI 프로그래밍가능한와치독 (Watchdog) 타이머지원 아날로그비교기지원 특수기능 파워 - 온리셋 (Power-On Reset) 과브라운아웃 (Brown-Out) 검출기능 RC 오실레이터에의한내부발진지원 외부 / 내부인터럽트소스지원 6 개의슬립 (Sleep) 모드지원 3
JTAG(IEEE 표준 1149.1 호환 ) 인터페이스지원 JTAG 표준에따르는바운더리스캔 (Boundary-Scan) 과호환 온- 칩디버그 (On-Chip Debug) 지원 JTAG 인터페이스를통한플래시, EEPROM, 퓨즈, 락비트설정 입출력및패키지타입 53 개의입출력가능한핀 64핀의 TQFP (Thin Quad Flat Package) 와 QFN/MLF 타입지원 작동전압 (Operating Voltage: V CC) ) ATmega128 4.5 ~ 5.5V (5.0V) ATmega128L 2.7 ~ 5.5V (3.3V) 동작속도 ATmega128 0 ~ 16MHz ATmega128L 0~8MHz 4
2. ATmega128의구조 외부구조 블록도 핀기능 기본회로 내부구조 레지스터 명령어수행타이밍 5
ATmega128의블럭도 입출력장치 메모리 주변장치 6
그림 2-5 ATmega128 의전체핀 Pin #1 Identifier 7
외부핀분류및기능 외부핀은크게 CPU Core 의기본회로와 GPIO 또는부가기능을지원하기 위한기능으로구분 CPU Core 의기본회로 전원, 리셋, 클럭관련회로를구성하기위해 11 개의핀으로모든 AVR 마이크로컨트롤러에반드시존재 이를제외한나머지 53 개의핀들은 GPIO ( 범용입출력 ) 기능또는부가기능 (Alternate function) 으로동작 예제 ) 핀 48 의이름 PA3(AD3) PA3: GPIO 기능 일반범용입출력포트기능으로포트 A 의비트 3 번핀 AD3: 부가기능 Address/Data 3 외부메모리사용시어드레스 3으로동작 8
표2-3 ATmega128 의핀요약 번호분류핀이름설명개수 1 전원관련핀 VCC, GND AVR 구동전원핀 4 2 리셋관련핀 /RESET 리셋입력핀 1 3 클럭관련핀 XTAL1, XTAL2 외부클럭입력핀 2 4 ADC 관련핀 AVCC, AREF, AGND ADC 전원핀, 기준전압핀, 접지핀 3 PORTA7~PORTA0 PORTA 범용입 / 출력핀 8 PORTB7~PORTB0 PORTB 범용입 / 출력핀 8 PORTC7~PORTC0 PORTC 범용입 / 출력핀 8 5 외부입 / 출력핀 PORTD7~PORTD0PORTD0 PORTD 범용입 / 출력핀 8 PORTE7~PORTE0 PORTE 범용입 / 출력핀 8 PORTF7~PORTF0 PORTF 범용입 / 출력핀 8 PORTG4~PORTG0 PORTG 범용입 / 출력핀 5 6 프로그래밍제어 /PEN 프로그래밍이네이블핀 1 계 64 9
그림 2-6 ATmega128 의외부구조 전원 ADC 클럭 리셋 PEN 10
포트별부가기능 ( 표2-5: 기능별, 표2-4: 번호별 ) 기본기능 부가기능 PORT A External memory interface address and data 7 ~ 0 PORT B SPI interface Timer/Counter 0, Timer/Counter 1, Timer/Counter 2 PORT C External memory interface address 15 ~ 8 PORT D External Interrupt 0~3 Timer/Counter 1, Timer/Counter 2 TWI Interface, UART1 PORT E PORT F PORT G Internal memory Programming, UART0 Analog Comparator External Interrupt 4~7 Timer/Counter 3 ADC Cinput 7 ~ 0 JTAG interface RTC Oscillator External memory Control bus (WR, RD, ALE) 11
ATmega128 기본회로구성 전원회로 : 반드시필요 리셋회로 : 사용시필요 외부클럭회로 : 사용시필요 ( 내부클럭을쓰는경우도있음 ) ADC 전원회로 : 사용시필요 기타사용자가필요한경우회로가추가됨 ex) 모터드라이버회로, LED 드라이버회로등 12
그림 2-7 ATmega128 의내부구조 13
그림 2-8 ATmega128 의 CPU 코어블록다이어그램 C 언어프로그램 A=2; X = A 3 ; 2 1 5 3 4 5 14
CPU Core 구성 CPU Core를구성하는주요레지스터 ALU (Arithmetic Logical Unit): 산술논리장치 SREG (Status Register): 상태레지스터 PC (Program Counter): 프로그램카운터 SP (Stack Pointer): 스택포인터 General Purpose Register: 범용레지스터 프로세서레지스터 (Register) CPU Core 내에서자료를보관하는아주빠른기억장소 일반적으로현재계산을수행중인값을저장하는데사용 대부분의프로세서는메인메모리 (DRAM) 에서레지스터로데이터를옮겨와데이터를처리한후그내용을다시레지스터에서메인메모리로저장하는로드- 스토어설계를사용 레지스터는메모리계층의최상위에위치하며, 가장빠른속도로접근가능한메모리 15
ALU (Arithmetic Logical Unit): 산술논리장치 32개의범용레지스터와직접연결되어있고, 단일클럭에레지스터연산을수행 ALU 의연산 : 산술, 논리, 비트 산술 (Arithmetic) 연산 4 칙연산 +, -, x, / 논리 (Logical) 연산 : AND, OR, NOT 비트 (Bitwise) 연산 : >>, <<, AND, OR, NOT 프로그램카운터 (PC: Program Counter) 프로그램의실행위치 ( 주소 ) 를나타내며, 16 비트로표현 16 비트로표현가능한최대주소 2 16 = 64KB 명령어는 2 바이트단위로표현되므로 프로그램메모리의최대영역은 64KB * 2Byte = 128KB 16
상태레지스터 (Status Register SREG) ALU 가가장최근에실행한산술연산명령의결과와상태를표시하는레지스터 어셈블리어 (Assembler) 로프로그래밍할때주로사용 그림 2-9 17
From Register C 언어프로그램 2 3 A = 2 ; X = A 3 ; SREG SUB ALU I T H S V N Z C -1 To Data Bus 18
범용레지스터 프로그램수행중중간결과나데이터를일시적으로저장할때사용되는메모리 R0부터 R31까지 32개의 8 bit 범용레지스터 R26부터 R31은 2개씩결합하여 16 비트레지스터로사용 X, Y, Z 레지스터 이는데이터메모리의위치를지정하는어드레스포인터로사용 X-register it (16 비트 ) Y-register 그림 2-10 Z-register 19
스택포인터 (Stack Pointer SP) 서브루틴호출이나인터럽트가발생하였을때다시돌아올복귀주소를저장하는메모리로 SRAM 내부의일정영역을활용 스택은 LIFO(Last In, First Out) 구조 메모리의상위번지에서차례대로하위번지로저장 스택포인터는항상스택공간의상단 (TOP) 주소를가리키는 16 bit 레지스터 명령어 : PUSH, POP 그림 2-11 20
그림 2-12 명령어패치와명령어실행 2-stage Pipelining ( 파이프라인 ) RISC 구조의명령어로단일클럭에서실행 nth Instruction Fetch + (n-1)th Instruction Execute Performance of 1MIPS/MHz 21
1 st stage 프로그램메모리로부터명령어를미리읽어옴 (Pre-fetch) f h 결과적으로명령어해석, 범용레지스터에 Operand 저장 1 st stage ALU 에서해석된명령어에따라 Operand 를읽어옴 2 nd stage ALU 에서해석된명령어에따라연산실행 3 rd stage 연산결과를레지스터와메모리에저장 22
Bit I Bit name Global Interrupt Enable T Bit Copy Storage H Half Carry Flag TOP S V N Z C Sign Flag Overflow Flag Negative Flag Zero Flag Carry Flag Stack 23
3. ATmega128의메모리구조 내부플래시메모리 : 사용자가작성한프로그램의실행파일을저장 내부 SRAM: 사용자가작성한프로그램의실행과정에서생성되는정보저장 외부 SRAM: 내부 SRAM이부족하여확장할경우에만추가하여사용가능 내부 EEPROM: 영구적으로저장할필요성이있는데이터를저장표 2-6 번호 기능별물리적휘발성용량내 / 외부 (Functional) (Physical) (Volatile) (Capacity) 1 Program Memory Flash Internal No 128KB 2 SRAM Internal Yes 4KB 3 Data Memory SRAM External Yes 60KB 4 EEPROM Internal No 4KB 24
그림 2-14 ATmega128 의전체메모리 하버드구조 25
그림 2-15 하버드구조와폰노이만구조 ( 버스구조, 장점 & 단점 ) 폰노이만구조 하버드구조 ATmega128 Address bus Data bus 최대용량 프로그램메모리 16 bit 16 bit 128KB = 2 16 * 16bit 데이터메모리 16 bit 8 bit 64KB = 2 16 * 8bit 26
그림 2-17 플래시프로그램메모리 플래시프로그램메모리 명령어는 8 비트가아닌 16/32 비트 구조 (ATmega128 은 16 비트 ) 따라서프로그램메모리의각번지도 16 비트구조로되어있음 명령어가 16 비트인경우는하나의 번지, 32 비트의경우 2 개를차지 플래시는 Application 영역과 Boot 영 역으로구분 128KB = 64K * 2Bytes = 64Kwords 0xFFFF 2 16 64K -- $F000 -- $FFFF 27
그림 2-18 SRAM 데이터메모리영역 번호분류용량 Byte 1 32 개의범용레지스터 32 2 64 개의기본 I/O 레지스터 64 3 160 개의확장 I/O 레지스터 160 4 4KB 의내부 SRAM 4096 5 외부 SRAM 0~60KB 표 2-7 28
Normal Mode Compatible Mode 29
입출력메모리 (I/O 레지스터 ) ATmega128 에내장된주변장치 ( 타이머 / 카운터, 통신모듈, ADC 등 ) 와외부입 출력장치를제어하기위한레지스터 표 2-8 기능별 I/O 레지스터 ATmega128 은 64 개의기본 I/O 레지스터와 160 개의확장 I/O 레지스터지원 포트로데이터를출력하기위해서는 해당포트의메모리 (I/O 레지스터 ) 에데이터를적는과정 표 2-9 주소별 ATmega128 기본 I/O 레지스터 표 2-10 주소별 ATmega128 확장 I/O 레지스터 표 2-11 기능별 ATmega128 기본 I/O 레지스터 표 2-12 기능별 ATmega128 확장 I/O 레지스터 30
Address 이름 기능 $1100 Internal SRAM $0100 4KB 의내부 SRAM $00FF Reserved $0023 PORTE 64개의 I/O 레지스터 PORTE = 0b10101010 ; $0022 DDRE $0021 PINE $0020 PINF $001F R31 $001E R30 $0001 R1 $0000 R0 + 160 개의확장 I/O 레지스터 32 개의범용레지스터 31
표2-8 기능별로분류된 ATmega128의 I/O 레지스터 (p.56) 대분류 중분류 소분류 기타 CPU SREG, SPL, SPH, RAMPZ, MCUCR, XMCRB, XMCRA, OSCCAL, XDIV, MCUCSR, WDTCR, 14 ACSR, SPMCSR, OCDR PINA, DDRA, PORTA, PINB, DDRB, PORTB, PINC, 포트 DDRC, PORTC, PIND, DDRD, PORTD, PINE, DDRE, 입출력 PORTE, PINF, DDRF, PORTF, PING, DDRG, PORTG 21 인터럽트 EICRA, EICRB, EIFR, EIMSK 4 ASSR, OCR0, TCNT0, TCCR0, TIFR, TIMSK, SFIOR, ICR1L, ICR1H, OCR1BL, OCR1BH, OCR1AL, OCR1AH, 주변 TCNT1L, TCNT1H, TCCR1C, TCCR1B, TCCR1A, OCR1CL, 장치타이머 OCR1CH, OCR2, TCNT2, TCCR2, ICR3L, ICR3H, (I/O / 카운터 OCR3CL, OCR3CH, OCR3BL, OCR3BH, OCR3AL, 모듈 ) OCR3AH, TCNT3L, TCNT3H, TCCR3B, TCCR3A, 38 TCCR3C, ETIFR, ETIMSK ADC ADCL, ADCH, ADCSRA, ADMUX 4 SPI 통신 SPCR, SPSR, SPDR 3 USART 통신 UBRR0L, UBRR0H, UCSR0C, UCSR0B, UCSR0A, UDR0, UBRR1H, UBRR1L, UCSR1C, UCSR1B, UCSR1A, UDR1 12 EEPROM EECR, EEDR, EEARL, EEARH 4 TWI 통신 TWBR, TWSR, TWAR, TWDR, TWCR 5 32
외부메모리확장 0x1100 에서 0xFFFF 까지최대 60KB 의메모리영역을추가확장가능 널리사용되지는않음 33