마이크로프로세서응용 마이크로프로세서응용
Si l Chi Mi P
Single Chip Micro Processors :
MicroController ( ATmega128 )
5
Outline
2
AVR 개요
AT 128 특징
ATmega128 특징
ATmega128 내부구조
ATmega128 명령어 실행
ATmega128 메모리와 주변장치
ATmega128 메모리와 주변장치
ISP( In System Programming)
Overview on AVR
3
AVR Family
Overview on AVR (2)
8 비트 AVR 패밀리 소자 (요약)
4
8 비트 megaAVR 패밀리 소자 (요약)
8비트 tinyAVR 패밀리 소자(요약)
Atmega128 의 주요 특징 g 특징
8bit microcontroller with RISC architecture
133 Instructions
32x8 General purpose working registers
16 MIPS performance at 16 MHz operation clock
In Chip Multiplier that requires 2 clock cycle
In Chip Multiplier that requires 2 clock cycle
NV Program and Data memories
128K b t i t lf bl Fl h (10 000 it bl )
128K bytes in-system self programmable Flash (10,000 rewritable )
4K bytes internal SRAM
4K bytes EEPROM
Up to 64K bytes extendable Memory Space
In system programming using SPI Interface
Atmega128 의 주요 특징 (2) g 특징
Peripheral Features
Two 8 bit timer/counter and two16 bit timer/counter
Realtime Timer/Counter
6 PWM Channel
2 Full duplex programmable UART
2 Full duplex programmable UART
10 bit ADC/ Analog comparator,
52 bidirectional and individually addressible I/O lines
Port A, Port B, port C, Port D, Port E, Port F, Port G
Atmega128의 Block Diagram g g
Atmega128의 Pinout g
Atmega128 CPU core 의 구조 g
메모리
메모리
플래시 프로그램 메모리
데이터 메모리(SRAM)데이터 메 리(SRAM)
EEPROM
프로그램 카운터(PC)
프로그램 카운터(PC)
명령어 레지스터(IR)
명령어 디코더명령어 디 더
범용 레지스터
기타 주변장치
[ ATmega128의 내부 구조 ]
Atmega128 의 메모리 공간 g 공간
P & D t M i
PROGRAM MEMORY DATA MEMORY DATA MEMORY
Program & Data Memories
$FFFF
(Non Volatile) (SRAM) (EEPROM)
Flash MEM $FFF
내부 SRAM (4K Bytes)
$10FF
(64K x 16 bit )
$05F
$0FF
$060
I/O registers
$100
내부 EEPROM (4K Bytes) 외부 I/O registers
(160 개)
$000 $000
$01F$020
$000
범용 register (R0~R31)
/O g (64 개)
Note that PM is 2 Bytes, and DM is 1 Byte.
Program Memory & Program Counter g y g
11
Flash Program Memory
프로그램 저장
비 휘발성 (Non-Volatile) 메모리
전원이 없어도 저장된 데이터는 변경되지 않음
64K word ( 128 Kbytes ) 크기
64K word ( 128 Kbytes ) 크기
다운로더 장치로 다운로드
부트 프로그램부 : 부팅에 필요한 기본정보
응용 램부 워 단위의 명령어 성된
응용 프로그램부 : 워드 단위의 명령어로 구성된 프로그램
프로그램 카운터 (PC)
플래시 프로그램 메모리 공간을 가리킴
명령어를 차례로 인출하면서 응용프로그램 실행 [ 플래시 프로그램 메모리 맵 ]
Instruction Register & Decoder, SP g
12
명령어 레지스터 (IR)
프로그램 카운터가 지칭한 곳에서 명령어 레지스터로 명령어 인출
명령어에는 명령코드 오퍼랜드 연산 결과 저장 위치 필드를 가짐
명령어에는 명령코드, 오퍼랜드, 연산 결과 저장 위치 필드를 가짐
명령어 디코더
명령어 레지스터의 명령 코드를 디코딩하여 제어신호 생성
ALU 는 명령코드에 해당되는 연산 동작을 수행하게 함
제어 신호는 연산 대상이 되는 오퍼랜드가 ALU 에 전달되게 함
제어 신호는 연산 결과를 저장할 수 있게 함
스택 포인터 (SP)
스택 포인터 (SP)
스택은 임시 데이터, 로컬 변수, 호출된 함수의 복귀주소 등을 저장
스택 포인터는 스택의 TOP 을 저장하는 특수 레지스터
스택에 데이터가 저장되면 스택 공간은 커짐
범용 레지스터 범용
General Purpose Registers
Data Register
Register R0 ~ R25
데이터를 저장하는 레지스터
메모리 주소 0x00~0x19 에 해당
주소 레지스터
레지스터 R26 R31
레지스터 R26 ~ R31
레지스터 간접 주소방식을 위한 레지스터
[ 범용 레지스터 파일 ]
메모리 주소 0x1A ~ 0x1F 에 해당
Data Register Usage g g
14
데이터 레지스터 사용사례
변수 x 를 데이터 레지스터 r24 로 활용한 사례
Address Register Usage g g
15
주소 레지스터 X, Y, Z
데이터 메모리에 대한 주소를 가짐
두개의 레지스터를 묶어 16 비트로 활용
주로 레지스터 Z 활용 사례
주로 레지스터 Z 활용 사례
메모리 0x100 위치에 데이터 0xAB 를 저장
Z 레지스터에 메모리 주소 0x100 을 넣음(r31 <= 0x01, r30<=0x00)
r24 에 0xAB 를 넣음
st Z+, r24 동작으로 메모리 주소 Z 위치에 r24 값을 기록, 동작 후 Z , 동작 메 리 주 위치에 값을 기록, 동작 후 값은 1 증가
상태 레지스터 (Status Register)
상 g
16
가장 최근에 실행된 산술 연산의 결과정보 저장
이 결과에 따라 다음에 실행되는 프로그램의 흐름을 제어
인터럽트가 발생했을 때
상태 레지스터를 하드웨어가 자동으로 저장 복귀해 주지 않음
소프트웨어적으로 저장 복귀 동작을 수행해야 함
소프트웨어적으로 저장, 복귀 동작을 수행해야 함.
상태 레지스터 비트 설명
상 설명
17
Addressing Modes g
Register Direct Addressing I/O Direct Addressing Absolute Addressing
Register Indirect Addressing ( with Post Increment or Pre Decrement )
R I d Add h ff
Register Indirect Addressing with offset
Register Indirect Addressing of Code Memory ( LPM instruction)
Addressing Modes g
단일 레지스터 직접 어드레싱 :
오퍼랜드는 레지스터 Rd 에 있는 내용 General Registers
OP d
15 4 0
0
COM R0 ; One’s complement d
NEG R1 ; Two’s complement; p INC R2 ; R2=R2+1
DEC R3 ; R3=R3-1
TST R4 ; R4 and R4 and set Z or N CLR R5 ; Clear register($00) 31
SER R6 ; Set register ($FF) LSL R7 ; Logical Shift left ROR R8 ; Rotate Right
ASL R9 ; Arithmetic Shift Right
Addressing Modes g
두개 레지스터 직접 어드레싱 :
오퍼랜드는 레지스터 Rr 과 Rd 에 있는 내용, 결과는 Rd 에 저장
General Registers
OP d
15 9 5 4 0
0
r
ADD R0,R1 ; R0 = R0+R1 d
SUB R2,R3 ; R2=R2-R3
r
, ;
AND R4,R5 ; R4=R4 and R5 OR R6,R7 ; R4=R6 or R7 XOR R8,R9 ; R8 = R8 xor R9 CP R10,R11 ; R10-R11, compare 31
MOV R12,R13 ; R12=R13
Addressing Modes g
I/O 직접 어드레싱 :
오퍼랜드는 레지스터 Rr 과 Rd 에 있는 내용, 결과는 Rd 에 저장
15 10 6 5 0
0
I/O Registers
OP n P
IN R0 PORTA ; R0 = PA P
IN R0,PORTA ; R0 PA OUT PORTB,R1; PB = R1
63
Addressing Modes g
데이터 직접 어드레싱 :
16 비트 데이터 어드레스는 직접 주소를, Rr/Rd 는 목적지/출발지의 레지 스터를 가리킨다.
15 4 0
$0000
Data Space
OP r/d 16 address
LDS R0,$0123 ; R0 = ($0123) STS $0123,R1 ; ($0123)=R1
$0123
$10FF
Addressing Modes g
데이터 간접 어드레싱
오퍼랜드의 어드레스는 X, Y, 혹은 Z 레지스터의 내용이다
D t S
15 4 0
$0000
Data Space
X,Y, or Z register
$0123
; register initialization example
LDI ZH, high($0123) ;, g ( ) ; $0 3
LDI ZL, low($0123) ;
LD R0, X ; R0 = (X)
$10FF
LD R1, Y ; R1 = (Y) LD R2, Z ; R2 = (Z) ST X, R3 ; (X)=R3 ST Y, R4 ; (Y)=R4 ST Z, R5 ; (Z)=R5
Addressing Modes g
데이터 간접 + 후증가 (post increment) 어드레싱
오퍼랜드의 어드레스는 X, Y, 혹은 Z 레지스터의 내용이다. 실행 후에 X,Y, 혹은 Z 의
레지스터는 증가한다. Data Space
15 4 0
$0000
X,Y, or Z register
$0123
; register initialization example LDI ZH, high($0123) ;
LDI ZL low($0123) 1
LDI ZL, low($0123) ;
LD R0, X+ ; R0 = (X), X=X+1 LD R1 Y+ ; R1 = (Y) Y=Y+1
1
$10FF
LD R1, Y+ ; R1 = (Y), Y=Y+1 LD R2, Z+ ; R2 = (Z), Z =Z+1 ST X+, R3 ; (X)=R3, X=X+1 ST X+, R3 ; (X) R3, X X+1 ST Y+, R4 ; (Y)=R4, Y=Y+1 ST Z+, R5 ; (Z)=R5, Z=Z+1
Addressing Modes g
데이터 간접 + 선감소 (pre-decrement) 어드레싱
X,Y, 혹은 Z 의 레지스터는 실행 전에 감소한다.
오퍼랜드의 어드레스는 X, Y, 혹은 Z 레지스터의 감소된 내용이다. Data Space
15 4 0
$0000
X,Y, or Z register
$0123
; register initialization example LDI ZH, high($0123) ;
LDI ZL, low($0123) ; -1
LDI ZL, low($0123) ;
LD R0, -X ; X=X-1, R0 = (X) LD R1, -Y ; Y=Y-1, R1 = (Y)
$10FF
, ; , ( )
LD R2, -Z ; Z =Z-1, R2 = (Z) ST -X, R3 ; X=X-1, (X)=R3 ST -Y, R4 ; Y=Y-1, (Y)=R4 ST -Z, R5 ; Z=Z-1, (Z)=R5
Addressing Modes g
데이터 간접 + 변위(displacement) 어드레싱
오퍼랜드의 어드레스는 명령어의 6 비트의 내용과 Y, 혹은 Z 레지스터의 합쳐진 결
과값이다. Data Space
15 4 0
$0000
Data Space
Y or Z register $0123 Y, or Z register
$0125
; register initialization example LDI ZH hi h($0123)
$02
LDI ZH, high($0123) ; LDI ZL, low($0123) ;
LDD R1 Y+2 ; R1 = (Y+2)
OP a
15 10 6 5 0
n
$10FF
LDD R1, Y+2 ; R1 = (Y+2) LDD R2, Z+2 ; R2 = (Z+2) STD Y+2 R4 ; (Y+2)=R4 STD Y+2, R4 ; (Y+2)=R4 STD Z+2, R5 ; (Z+2)=R5
Addressing Modes g
코드 메모리 어드레싱
LPM 명령 사용 [ 프로그램 메모리의 한 바이트 내용을 레지스터에 로드한다]. 상수 바이트 어드레싱은 Z 레지스터에 의하여 결정된다.
Z 레지스터의 0 번째 비트는 워드 중에 바이트를 결정짓는다.
15 0 $000
Program memory Space Z register
Z register
$0 23
i i i i li i l $0123
; register initialization example LDI ZH, high($0123*2) ; LDI ZL, low($0123*2) ;
$7FF
LPM ; R0 = (Z) LPM R1, Z ; R1 = (Z) LPM R2 Z+ ; R2 = (Z) LPM R2, Z+ ; R2 = (Z), Z=Z+1