ARM 프로세서 요약 www.dignsys.com
ARM 프로세서 요약
www.dignsys.com
1
Contents
1. 임베디드 시스템의 구조
2. 임베디드 시스템의 개발
3. ARM 아키텍처
4. ARM 프로세서의 구조
5. ARM 프로세서 명령어
6. Cached ARM7. 임베디드 소프트웨어 개발
8. S3C2410 및 실습용 보드의 이해
9. 디바이스 제어
2
프로세서의 구조
레지스터(Register)산술 논리 연산 장치 (ALU : Arithmetic Logic Unit)제어 장치 (CU : Control Unit)버스(BUS)
레지스터 제어장치
산술 및 논리 연산기보수기
쉬프터 ALU
내부 프로세서 버스
상태 FLAG
제어신호
3
레지스터 (Register)
프로세서 내부에서 데이터를 일시적으로 보관하는 기억 장치
Flip-flop와 Latch로 구성되어 있다
범용 레지스터
프로그램 또는 데이터 처리에 필요한 작업을 수행하기 위해서 사용
제어용 레지스터
프로그램이나 프로세서를 제어
프로그램 카운터(PC : Program Counter) 등
상태 레지스터
프로세서의 상태를 나타낸다.
4
버스 (BUS)
버스(BUS)란 ?컴퓨팅 시스템의 각 모듈에서 발생한 신호를 공유해서 사용할 수 있도록 만든 신호의 집합
구동 주체(CPU 등)에 의해서 해당 소자에 데이터를 읽거나 쓸 수 있도록 구성된다.
어드레스 버스(address bus), 제어버스(control bus), 그리고 데이터 버스(data bus)로구성된다.
프로세서
레지스터
명령 또는 데이터
주소 메모리
명령/데이터
제어신호
5
폰 노이만 아키텍쳐
폰 노이만(Von-Neumann) 아키텍쳐
명령어와 데이터를 위한 메모리 인터페이스가 하나이다.
명령어를 읽을 때 데이터를 읽거나 쓸 수 없다.
IBM 계열 PC(개인용 PC), ARM7 등
프로세서
레지스터
명령어
데이터
데이터 버스어드레스 버스
메모리
6
하버드 아키텍쳐
하버드(Havard) 아키텍쳐
명령어를 위한 메모리 인터페이스와 데이터를 위한 메모리 인터페이스가
분리되어 있다.명령어를 읽을 때 데이터를 읽거나 쓸 수 있어 성능이 우수하다.버스 시스템이 복잡하여 설계가 복잡하다
ARM9, ARM10, XScale 등
프로세서
레지스터
명령어
데이터
데이터 버스어드레스 버스
메모리
7
Cache 메모리 시스템
CPU
400MHz
Main Memory10MHz
Main Memory10MHz
Bus 66MHzBus 66MHz
CPU
Cache
고속의 CPU가 버스 및 메모리속도에 의존적이며 늦다
CPU 주변에 고속의 메모리를 두고자주 사용되는 명령과 데이터를저장하여 시스템 성능을 개선
8
Cache의 읽기 동작
Cache의 성능
CPU가 읽고자 하는 명령이나 데이터가 Cache 내에 존재(Cache Hit)
하여야 할 회수가 많아야 Cache의 성능이 우수하다.
CPU가 데이터나 명령을 읽고자 하는데 Cache 내에 원하는 명령이나
데이터가 없으면(Cache Miss), Cache 제어기는 시스템 메모리
장치에서 line 크기 만큼 명령이나 데이터를 읽어 Cache 메모리에
저장(Line Fill) 한다.
9
Cache의 쓰기 동작
Write Through
CPU가 특정 주소에 명령이나 데이터를 write하는 경우, 해당하는
명령이나 데이터가 Cache 메모리에 있을 때, Cache 메모리와 외부
메모리에 모두 쓰기 동작을 한다.
Write Back
CPU가 특정 주소에 명령이나 데이터를 write하는 경우, 해당하는
명령이나 데이터가 Cache 메모리에 있을 때, Cache 메모리에만 쓰기
동작을 하고, 외부의 메모리에는 나중에 기록 된다.
10
Microprocessor Cache
Cache Improve Overall System PerformanceReducing read and write cycle time by using fast memoryImproving memory bus utilization
11
Cache Configurations
Unified vs. Separated
12
Cache Configurations
Look through vs. Look aside
13
MMU (Memory Management Units)
어드레스 변환(translation) 기능
CPU에서 사용되는 logical 한 Virtual 어드레스를 physical 어드레스로 변환
메모리 보호(protection) 기능
CPU MainMemory
MemoryManagement
Unit
Virtual어드레스
Physical어드레스
14
Memory Mapped I/O 와 I/O-mapped I/O
구분 Memory mapped I/O I/O-mapped I/O
대표적인CPU ARM, PowerPC, M68K x86 계열
I/O 장치의영역
메모리의 일부를 I/O 장치로 사용메모리 영역과는 별도의 I/O 번지 영역이존재
명령어메모리와 I/O 장치 모두 메모리 동작명령으로 억세스 하며, 각 영역의구분은 어드레스로 한다.
메모리 억세스 명령과 I/O 억세스명령(in/out)이 구분
하드웨어어드레스를 해석하는 디코더 회로에따라 메모리 혹은 I/O 장치가 선택
메모리 번지와 I/O 번지를 구분하는 신호가존재.
기타
- I/O 영역은 Non-cacheable로설정해야 한다
- I/O 영역 변수는 volatile type으로선언해야 한다.
15
인터럽트 인터페이스
인터럽트 제어기
입출력 장치에서 발생되는 인터럽트의 요청을 제어 한다.
하드웨어에 따라 인터럽트 응답을 위한 신호도 제공된다.
CPU I/O 장치
인터럽트제어기
인터럽트 요청
Mask, Pending레지스터
시리얼, 네트워크 등
irq
인터럽트 응답irqack
인터럽트 요청irq
인터럽트 응답irqack
16
인터럽트의 발생
인터럽트 요청 (Interrupt Request)외부 장치에서 입출력 동작에 대한 처리를 프로세서에 요청
인터럽트의 발생은 하드웨어적으로 이루어 진다. 따라서 인터럽트가발생하면 프로세서가 스스로 프로그램의 개입 없이 일련의 동작을수행해야 한다.인터럽트 Vector
인터럽트 서비스 루틴을 처리하기위한 명령 또는 위치가 저장된 메모리 공간
인터럽트의 요청에 따라 프로세서는 정해진 절차에 의하여 발생 된인터럽트의 처리 여부를 결정하고 인터럽트를 서비스하는 절차(ISR : Interrupt Service Routine)를 수행한다.
인터럽트 발생의 예
시리얼로 데이터 입력 완료
시리얼 데이터 전송 준비 완료, 또는 전송 에러 발생
이더넷 데이터 수신 완료, 이더넷 전송에러 등
17
인터럽트 발생에 의한 프로세서 흐름제어
ISR(Interrupt Service Routine)
ISR(Interrupt Service Routine)
INT 발생
INT 발생
MAIN 프로그램 루틴
18
인터럽트 처리 절차
입출력 장치에서 인터럽트 발생
프로세서에서 인터럽트 인식
프로세서의 현재 상태를 저장
인터럽트 처리를 위한 프로세서 상태 변경
인터럽트 처리 (인터럽트 ISR)
하드웨어하드웨어 적으로적으로 처리된다처리된다..
인터럽트 처리 후 되돌아갈 주소(PC) 저장
인터럽트 Vector로 PC 위치 변경
19
인터럽트 서비스 루틴 (ISR)
인터럽트 처리 (인터럽트 ISR)
스택에 프로세서의 레지스터 정보 저장
입출력 동작을 처리
프로세서의 상태 및 되돌아갈 주소 복원
기존에 수행 중이던 프로그램 수행
모두모두 소프트웨어소프트웨어 적으로적으로 처리된다처리된다..
20
Contents
1. 임베디드 시스템의 구조
2. 임베디드 시스템의 개발
3. ARM 아키텍처
4. ARM 프로세서의 구조
5. ARM 프로세서 명령어
6. Cached ARM7. 임베디드 소프트웨어 개발
8. S3C2410 및 실습용 보드의 이해
9. 디바이스 제어
21
임베디드 시스템 설계 절차
시스템 용도 분석
CPU, 메모리 및주변 장치 선정
소프트웨어 사양 결정하드웨어 사양 결정
개발 환경 선정
OS 사용여부 및 OS 선정
소프트웨어 설계
디바이스 드라이버 설계
어플리케이션 설계
시스템 통합 시험
회로도 및 PCB 설계
하드웨어 조립 및 시험
22
디바이스 드라이버 포팅
디바이스(Device )
네트워크 어댑터, LCD 디스플레이, PCMCIA, Audio, 터미널, 키보드, 하드디스크,
플로피디스크, 프린터 등과 같은 주변 장치들을 말함
디바이스의 구동에 필요한 프로그램, 즉 디바이스 드라이버가 필수적으로 요구됨
Device Driver
실제 장치 부분을 추상화 시켜 사용자 프로그램이 정형화된 인터페이스를 통해
디바이스를 접근할 수 있도록 해주는 프로그램
디바이스 관리에 필요한 정형화된 인터페이스 구현에 요구되는 함수와
자료구조의 집합체
응용프로그램이 H/W를 제어할 수 있도록 인터페이스 제공
하드웨어와 독립적인 프로그램 작성을 가능하게 함
23
디바이스 드라이버 구조
Application
System Call Interface
VFS
Network SubsystemBuffer Cache
Network D/DBlock D/DChar Device Driver
Device Interface
Hardware
Applicationarea
Kernelarea
Hardware
24
Contents
1. 임베디드 시스템의 구조
2. 임베디드 시스템의 개발
3. ARM 아키텍처
4. ARM 프로세서의 구조
5. ARM 프로세서 명령어
6. Cached ARM7. 임베디드 소프트웨어 개발
8. S3C2410 및 실습용 보드의 이해
9. 디바이스 제어
25
Hard Macrocell 과 Synthesizable Core
Hard Macrocell
Layout level로 제공
사용자는 core를 변경 불가
ARM710T, ARM920T 등이 대표적인 예이다.
Synthesizable CoreRTL(Register Transfer Level)로 제공
사용자는 license 조건에 의해 core의 내부 변경 가능
내부 메모리 크기 등
기능은 변경 불가
ARM7TDMI-S, ARM926EJ-S, ARM1136J-S 등
26
ARM 아키텍처 명명법
ARM {x}{y}{z} {T}{D}{M}{I}{E}{J}{F}{-S}x : 제품군
y: MMU/MPUZ: 캐시
T: Thumb 16bit DecoderD: JTAG DebugM: Hardware Multiplier(고속 곱셈기)I: Embedded ICE macrocellE: DSP Enhanced 확장 명령어
J: Jazelle ( Java extension – 8x performance for Java)F: VFP 장치
-S: synthesizible 버전
27
ARM Architecture의 시장 변화
ARM1136EJ
28
ARM 7 Family
ARM7TDMI Core32/16bit RISC Architecture3 stage pipelining(Fetch/Decode/Execution)Hard macrocell32-bit ARM/16-bit Thumb InstructionsUnified bus architecture32-bit ALU & High-performance multiplierlow-power, small die sizeCoprocessor interfaceEmbedded ICE-RT suport, JTAG InterfaceEmbedded Trace Macro cell
ARM720TARM7TDMI + MMU + Cache(8kb Unified) + WB + AMBA
29
ARM Core 비교
30
Aligned 과 Un-aligned 억세스
프로세서는 메모리 억세스
Byte, halfword(2바이트) 또는 word(4바이트) 단위로만 가능
31 24 23 16 15 8 7 0
11 22 33 44
11 22 33 44
11 22 33 44
11 22 33 44 0x00
0x04
0x08
0x0C
Aligned AccessAligned Access31 24 23 16 15 8 7 0
11 22 33 44
11 22 33 44
11 22 33 44
11 22 33 44 0x00
0x04
0x08
0x0C
UnUn--aligned Accessaligned Access
Word 단위 Access : 0x00, 0x04, 0x08, …
Half-Word Access :0x00, 0x02, 0x04, 0x06, 0x08, …
Word 단위 Access : 0x01, 0x06, 0x07, …
Half-Word Access :0x01, 0x03, 0x05 …
Abort
Abort
31
Little-Endian 과 Big-Endian
Big-Endian
메모리의 하위 어드레스(Byte 어드레스
“0”)에 MSB(Most Significant Byte)가위치하고 있는 메모리 구조
MSB는 메모리 데이터의 가장 상위
비트 24 에서 31 까지
Little-Endian
메모리의 하위 어드레스(Byte 어드레스
“0”)에 LSB(Least Significant Byte)가위치하고 있는 메모리 구조
LSB는 메모리 데이터의 가장 하위 비트
0 에서 7 까지
31 24 23 16 15 8 7 0
8 9 10 11
4 5 6 7
0 1 2 3 0x00
0x04
0x0831 24 23 16 15 8 7 0
11 10 9 8
7 6 5 4
3 2 1 0 0x00
0x04
0x08
0,4,8은 word 어드레스, 0,2,4,6,8,10은 halfword 어드레스, 0,1,2,3,4,…은 byte 어드레스를 니타낸다.
word로 메모리를 억세스 하는데 1,2 또는 3 번지를 억세스 하면 un-aligned 억세스가 된다.
상위 어드레스
Word 어드레스Byte 어드레스
데이터 비트
32
Operating 모드의 변환과 레지스터
r8
r9
r10
r11
r12
r13 (sp)
r14 (lr)
r15 (pc)
cpsr
r0
r1
r2
r3
r4
r5
r6
r7
User
r13 (sp)
r14 (lr)
spsr
SVC
Usermode
r0-r12,r15,andcpsr
외부메모리
stack
3. copy
1. copy
스택의 위치를나타낸다.
5. copy
Context 정보
(1) (1) 복원복원
(2) CPSR, PC(2) CPSR, PC를를 동시에동시에 복원복원2. CPSR 변경
- Mode- I/F 비트
- T Bit
4. PC = Vector
33
프로세서의 Reset 과 Start-up 코드
프로세서에 리셋 신호가 입력되면 실행 중이던 명령을 멈추고
① SPSR_svc에 CPSR 값을 복사
② CPSR의 값을 변경
Mode bit M[4:0]를 Supervisor 모드인 10011’b로 변경
I 비트와 F 비트를 1로 세트하여 인터럽트를 disable
T 비트를 0으로 클리어하여 ARM state로 변경
③ PC 값을 LR_svc 레지스터에 복사
④ PC 값을 Reset Vector 어드레스인 0x00000000으로 변경
⑤ Reset 핸들러로 분기하여 시스템의 초기화 수행
34
Reset Handler
Reset Vector에서 분기된 어셈블리어로 작성된 처리 루틴
주요 동작
시스템 초기화 작업 수행
시스템의 클록
메모리 컨트롤러
입출력 포트의 구성
MMU 등
인터럽트와 스택 초기화
리셋 핸들러의 마지막에서는 main() 함수와 같은 C로 구성된 함수를 호출
이 부분을 startup 코드라고 부른다.
35
Startup 코드
Startup 코드를 작성하기 위해서는
Programmer’s model, 특히 명령어
시스템 하드웨어 구조 및 기능에 대한 전반적인 사항
등을 모두 알아야 한다.
Startup 코드의 필수 사항
Exception Vector Table의 설정
Reset 핸들러의 구성
36
Contents
1. 임베디드 시스템의 구조
2. 임베디드 시스템의 개발
3. ARM 아키텍처
4. ARM 프로세서의 구조
5. ARM 프로세서 명령어
6. Cached ARM7. 임베디드 소프트웨어 개발
8. S3C2410 및 실습용 보드의 이해
9. 디바이스 제어
37
ARM7TDM 코어의 내부 구조
ALU
Register bank
BarrelShifter
D[31:0]
명령어 해석기( Instruction Decoder )
Data in 레지스터
Immediate 상수
Multiplier
A-bus
B-bus
Data out 레지스터
ALU
-bus
어드레스 레지스터
+1제어장치
A[31:0]
제어신호
PC update
PC
38
Data Processing 명령과 내부 버스
ADD Rd, Rs, OP2
OP 코드
Operand 2 : B 버스와 Barrel shifter를 통해 ALU에 입력
Operand 1 : A 버스를 통해 ALU에 입력, Source 레지스터
Destination 레지스터 : ALU 버스를 통해 레지스터 뱅크에 write
39
Data Transfer 명령과 내부 버스
LDR Rd, [ Rb, Offset ]
OP 코드
Offset : B 버스와 Barrel shifter를 통해 ALU에 입력
Base 레지스터 : A 버스를 통해 ALU 에 입력
Destination 레지스터 : 데이터 버스를 통해 읽혀진 데이터가write 되는 레지스터
40
ARM7TDMI 코어
ARM7TDM core
EmbeddedICE-RT
제어신호
어드레스 버스(A[31:0])
데이터 버스(D[31:0])
TAP
JTAG 인터페이스 신호
BREAK
ARM7TDMI는 ARM7TDM 코어에EmbeddedICE 로직이 추가된 프로세서이다
41
이상적인 pipeline 동작
매 사이클마다 명령을 하나씩 실행하는 경우모든 명령이 메모리의 참조 없이 레지스터 내의 값을 가지고 데이터를 처리
CPI는 1
F D E
1 2 3 4 5 6 7 8 9 10사이클명령
ADD
F D ESUB
F D EAND
F D EMVN
F D EXOR
F D EMOV
F D ESBC
F D EXOR
F : Fetch D : Decode E : Execute
42
LDR 명령과 pipeline 동작
LDR 명령이 사용되는 경우메모리에서 데이터를 읽는 메모리(M) stage와 레지스터에 write하는 Write(W) stage 추가
레지스터에 write 동작이 끝날 때까지 다른 명령은 stall 된다.
6 clock 사이클 동안에 4개의 명령 실행 : CPI는 1.5
F D E
1 2 3 4 5 6 7 8 9 10사이클명령
ADD
F D ESUB
F D EAND
F D ELDR
F D EXOR
F D EMOV
F DSBC
F : Fetch D : Decode E : Execute M : Memory W : Write S : Stall
M W
S S
S S
43
Branch 명령과 pipeline 동작
Branch 명령이 사용되면Fetch한 명령을 모두 버리고 지정된 분기하여 새로운 명령을 읽는다
Pipeline이 깨진다(break)
F D E
1 2 3 4 5 6 7 8 9 10사이클명령
ADD
F D EBL 0x100
F DAND
FMVN
F D EMOV (0x100)
F D ESBC
F : Fetch D : Decode E : Execute L : Link Return A : Adjust
L A
버려진다
44
Cache를 가진 ARM7TDMI 프로세서
ARM7TDMIcore
Cache
CP15
MMU WriteBuffer
BusInterface
Address
Data
Data write
Data read
45
ARM9TDM 코어의 내부 구조
ALU
Register bank
BarrelShifter
DD[31:0]
명령어 해석기( Instruction Decoder )
Data in 레지스터
Multiplier
A-bus
B-bus Data out 레지스터
ALU
-bus
어드레스 레지스터
+1
제어장치
IA[31:0]
제어신호
C-bus
PC PC update
어드레스 레지스터
DA[31:0]
+1
ID[31:0]
46
ARM9TDMI pipeline
ARM9의 경우 ARM7과 달리 32 비트 ARM 명령어와 16 비트 Thumb 명령어
decoder를 별도로 가지고 있다.
Memory stage가 추가되어 LDR 명령이 사용되더라도 매 사이클 마다 하나의
명령이 실행된다.
RegSelect
ARM/Thumb decodeInstruction
Fetch
FETCH DECODEPCPC
ARM :Thumb :
PC-4PC-2
RegRead
PC-8PC-4
EXECUTE
Shift ALU
MEMORY
MemoryAccess
WRITE
RegisterWrite
47
이상적인 pipeline 동작
LDR 명령이 사용되더라도 매 사이클 마다 하나의 명령어 실행CPI = 1단 LDR 명령의 Destination 레지스터가 다음 명령에서 사용되면 않 된다.
F D E
1 2 3 4 5 6 7 8 9 10사이클명령
ADD R0, R1, R2
F D ESUB R1, R2, R4
F D EAND R2, R1, R0
F D ELDR R4, [ R5 ]
F D EXOR R0, R1, R2
F D EADD R1, R2, R4
F DSBC R1, R2, R3
F : Fetch D : Decode E : Execute M : Memory W : Write I : Interlock
M W
M W
M W
M W
M W
M W
ME
48
LDR 명령과 Interlock 사이클
LDR 명령과 Interlock 사이클LDR 명령의 Destination 레지스터가 다음 명령에서 사용되는 경우 발생
CPI = 1.2
F D E
1 2 3 4 5 6 7 8 9 10사이클명령
ADD R0, R1, R2
F D ESUB R1, R2, R4
F D EAND R2, R1, R0
F D ELDR R4, [ R5 ]
F D EXOR R0, R4, R2
F D EADD R1, R2, R3
F DSBC R1, R2, R3
F : Fetch D : Decode E : Execute M : Memory W : Write I : Interlock
M W
I
I
M W
M W
M W
M W
M
E
49
Cache를 가진 ARM9TDMI 프로세서
ARM9TDMIcore
InstructionCache
CP15
MMU WriteBuffer
BusInterface
Address
Data
Data write
Data read
DataCache
Data
Address
50
Contents
1. 임베디드 시스템의 구조
2. 임베디드 시스템의 개발
3. ARM 아키텍처
4. ARM 프로세서의 구조
5. ARM 프로세서 명령어
6. Cached ARM7. 임베디드 소프트웨어 개발
8. S3C2410 및 실습용 보드의 이해
9. 디바이스 제어
51
명령어 구조
Encoded in a 32-bit wordOP code + two or three registersByte(8bits) or Word(32bits) memory access
Memory access only through LOAD and STORE instructionsConditional Execution of instructions
All instructions are conditionally executed
52
32-bit v4T Instructions
53
Ex) 명령어 예제
a = ( b==c) ? d : e;
CMPS r2, r3MOVEQ r1, r4MOVNE r1, r5
54
Memory Addressing Mode (1)
Memory AccessIndexed Addressing ModeEffective Address = base register (Rn)+ a signed offset (Rm)
a signed offset = immediate or register (Rm)
ExamplesLDR Rd, [Rn, #offset] ;Rd [[Rn] + offset]LDR Rd, [Rn, Rm] ;Rd [[Rn] + [Rm]]LDR Rd, [Rn] ;Rd [[Rn]]STR Rd, [Rn] ;Rd [Rn]
Byte access: LDRB, STRB
55
Memory Addressing Mode (2)
Variations of indexed addressing modesPre-indexed mode
EA = base register(R1) + a signed offsetLDR R0, [R1, R2] ;R0 [R1] + [R2]
Pre-indexed with writeback mode(update)EA = base register(R1) + a signed offsetR1 = EALDR R0, [R1, R2]! ; R0 [R1] + [R2]
R1 [R1] + [R2]Post-indexed mode
EA = R1R1 = base register(R1) + a signed offsetLDR R0, [R1], R2 ; R0 [R1]
R1 [R1]+[R2]
56
Memory Addressing Mode (3)
Shifted offsetThe offset magnitude in Rm could be shifted by the accompanying shift operation.Pre-indexed mode
LDR R0, [R1, R2, LSL #4]
Pre-indexed mode writeback mode(update)LDR R0, [R1, R2, LSL #4]!
Post-indexed modeLDR R0, [R1], R2, LSL #4
Related mode
57
Pre-indexed addressing mode
58
Pre-indexed addressing mode with writebacke
59
Post-indexed addressing
60
Relative address
61
조건 플래그(Condition Flags)
c
2731 28 671623 815 5 4 024
f s x
N Z C V ModeI FQ J T
Condition Code flag Reserved Control bits
Flag 논리 연산 산술 연산
Negative (N=1) 사용되지 않는다Signed 연산에서 비트 31이 세트 되어
Negative 결과 발생
Zero (Z=1) 연산 결과가 모두 0 연산 결과가 0
Carry (C=1) Shift 동작 결과 carry 발생 연산 결과가 32 비트를 넘으면 세트
oVerflow (O=1) 사용되지 않는다 연산 결과가 31 비트를 넘어 sign bit 상실
62
Condition Field
63
Operand2와 Barrel Shifter
레지스터Shift 동작과 같이 사용 가능
Shift value
5 bit unsigned integer
하위 5비트에 shift value를 가진다른 register
Immediate 상수8 bit number
짝수(even number) 만큼 rotate right 하여표현이 가능한 32비트 상수
32 비트 상수가 사용되면 어셈블러가rotate 값으로 계산
Operand 1 Operand 2
BarrelShifter
ALU
Result
64
32비트 상수 사용법
32비트 상수를 레지스터로 옮길 수 있는 방법 제공
MOV 또는 MVN 명령으로는 32비트 상수를 레지스터로 move 불가
Assembler에서 32비트 상수를 읽을 수 있는 방법 제공
Data Transfer 명령을 이용한 32비트 상수 loadingLDR rd, =constant
어셈블러에서는 사용된 값(constant)에 따라 유효한 명령어 사용
8 비트와 ROR*2로 표현 가능하면 MOV 또는 MVN으로 변환
32비트로만 표현이 가능하면 코드 영역 내에 상수 값(Literal pool)을 저장하고
PC-relative 한 LDR 명령으로 변환
LDR r0, =0xFF
LDR r0, =0x5555AAAA
MOV r0, #0xFF
LDR r0, [ PC, #offset ]
……
DCD 0x5555AAAA
65
Relative 어드레스 지정 방식
LABEL 지정에 의한 어드레스 지정
어셈블리어에서 LABEL을 지정하면 어셈블러가 [PC+LABEL]형태의
주소로 변환하여 참조
literal pool을 사용한 32 비트 데이터의 Load 어셈블러가 코드 영역 내에 데이터 저장 후 [PC+LABEL]형태의 주소로
변환하여 참조
LDR r0, [ PC, #offset ]
……
DCD 0x5555AAAA
LDR r0, label_1
…….
label_1 DCD 0x12345678
LDR r0, =0x5555AAAA
LDR r0, [ PC, #offset ]
……
DCD 0x12345678
66
Pre-indexed 어드레스 지정 방식
Base 레지스터(Rn)과 <offset>으로 주소 계산 후 데이터 전송
데이터 전송 이후에도 Rn의 값은 별도 지정이 없으면 변하지 않는다
0x3bf8
0x512a Address 0x00001234
1 Word = 4 bytes
0x00001234
Address 0x00001238
0x00000004
+
memory(byte addressable)
R1:
R0:
LDR r0, [ r1, #4 ]
상수:
???????????0x00003bf8
67
Pre-indexed 방식 과 Auto update
Pre-indexed 방식을 사용하여 참조 후 Base 레지스터 Rn 갱신
0x3bf8
0x512a Address 0x00001234
1 Word = 4 bytes
0x00001234
0x00003bf8
Address 0x00001238
0x00000004
+
memory(byte addressable)
R1:
R0:
LDR r0, [ r1, #4 ] !
contents of r1 updated 0x1238
0x00001238
68
Post-indexed 어드레스 지정 방식
Base 레지스터(Rn)가 지정하는 주소에 데이터의 전송 후 Rn 값과<Offset>의 연산 결과로 Rn 갱신
R0:
R1: 0x3bf8
0x512a Address 0x00001234
Address 0x00001238
memory(byte addressable)
0x00001234
0x00000004
0x0000512a
+
LDR r0, [ r1 ], #4
contents of r1updated
0x00001238
69
LDM/STM의 레지스터 LIST
<register_list>에서 사용 가능한 레지스터
R0에서 R15(PC)까지 최재 16개
연속된 레지스터 표현
{r0-r5}와 같이 “-”로 표현 가능
<register_list>의 순서 지정
항상 low order의 register에서 high order 순으로 지정
LDM r10, {r1,r2,r3}LDM r10, {r2,r3,r1}실제 동작
70
LDM/STM의 어드레스 지정 방식
키워드(표현방식)Addressing Mode
데이타 스택
Pre-increment Load LDMIB LDMED Increment before load
Post-increment Load LDMIA LDMFD Increment after load
Pre-decrement Load LDMDB LDMEA Decrement before load
Post-decrement Load LDMDA LDMFA Decrement after load
Pre-increment Store STMIB STMFA Increment before store
Post-increment Store STMIA STMEA Increment after store
STMDB
유효 어드레스 계산
STMDA
Pre-decrement Store
Post-decrement Store
Decrement before store
STMED Decrement after store
STMFD
71
Pre-Increment 어드레스 지정
STMIB r9!, {r0,r1,r2}Base 레지스터(r9) = 0x100C 데이터 저장 전 어드레스 증가
(Increment Before)
① r9 -> 0x1010 증가 후 r0 저장
② r9 -> 0x1014 증가 후 r1 저장
③ r9 -> 0x1018 증가 후 r2 저장
④ {!}, auto-update 옵션이 있으면
r9 값을 0x1018로 변경
0x10200x101C
0x03 0x10180x02 0x10140x01 0x1010
0x100C0x10080x10040x10000x0FFC0x0FF80x0FF4
0x100CR9:
0x03R2:
0x02R1:
0x01R0:
0x100C0x10100x010x10140x020x10180x03
0x1018
72
Post-Increment 어드레스 지정
0x10200x101C
0x030x1018
0x020x1014
0x010x10100x100C0x10080x10040x10000x0FFC0x0FF80x0FF4
0x100CR9:
0x03R2:
0x02R1:
0x01R0:
0x100C0x100C0x010x10100x020x10140x03
0x1018
STMIA r9!, {r0,r1,r2}Base 레지스터(r9) = 0x100C
데이터 저장 후 어드레스 증가
(Increment After)
① 0x100c에 r0 저장 후 r9 -> 0x1010 증가
② 0x1010에 r1 저장 후 r9 -> 0x1014 증가
③ 0x1014에 r2 저장 후 r9 -> 0x1018 증가
④ {!}, auto-update 옵션이 있으면
r9 값을 0x1018로 변경
0x1018
73
Pre-Decrement 어드레스 지정
STMDB r9!, {r0,r1,r2}Base 레지스터(r9) = 0x100C
어드레스를 <register_list> 개수 만큼
감소해 놓고, 어드레스를 증가하면서
데이터 저장
(Decrement Before)
① 어드레스를 0x1000로 감소
② 0x1000에 r0 저장 후 어드레스 증가
③ 0x1004에 r1 저장 후 어드레스 증가
④ 0x1008에 r2 저장 후 어드레스 증가
⑤ {!}, auto-update 옵션이 있으면
r9 값을 0x1000로 변경
0x10200x101C
0x03
0x1018
0x02
0x1014
0x01
0x10100x100C0x10080x10040x10000x0FFC0x0FF80x0FF4
0x100CR9:
0x03R2:
0x02R1:
0x01R0:
0x100C
0x10000x010x10040x020x10080x03
0x1000
74
Post-Decrement 어드레스 지정
STMDA r9!, {r0,r1,r2}Base 레지스터(r9) = 0x100C
어드레스를 <register_list> 개수 만큼
감소해 놓고, 어드레스를 증가하면서
데이터 저장
(Decrement After)
① 어드레스를 0x1000로 감소
② 어드레스 증가 후 0x1004에 r0 저장
③ 어드레스 증가 후 0x1008에 r1 저장
④ 어드레스 증가 후 0x100C에 r2 저장
⑤ {!}, auto-update 옵션이 있으면
r9 값을 0x1000로 변경
0x10200x101C
0x03
0x1018
0x02
0x1014
0x01
0x10100x100C0x10080x10040x10000x0FFC0x0FF80x0FF4
0x100CR9:
0x03R2:
0x02R1:
0x01R0:
0x10000x10040x010x10080x020x100C0x030x1000
0x1000
75
LDM/STM의 스택(Stacks) 동작
스택 동작
새로운 데이터를 “PUSH”를 통해 “top”위치에 삽입하고, “POP”을 통해가장 최근에 삽입된 데이터를 꺼내는 자료구조 형태.
스택의 위치 지정
Base pointer : Stack의 bottom 위치를 지정
Stack pointer : Stack의 top 위치를 지정
684
84
SPBASE
SP
BASE
SP
BASE
PUSH{4, 8, 6} POP
Result of pop = 6
76
스택 type에 따른 포인트 변화
r5r4r3r1r0
r5r4r3r1r0
r5r4r3r1r0
r5r4r3r1r0
Old SP Old SPOld SP Old SP
STMFD sp!, {r0, r1, r3-r5}
STMED sp!, {r0, r1, r3-r5}
STMFA sp!, {r0, r1, r3-r5}
STMEA sp!, {r0, r1, r3-r5}
SP
Top of memory
SP
SP SP
77
Stack의 Push 동작
STMFD sp!, {r0-r1,lr}Base 레지스터(sp) = 0x100C
Stack에 context 정보 저장
① 어드레스를 0x1000로 감소
② 레지스터 값 저장 후 어드레스 증가
③ 링크 레지스터 저장 후 어드레스
증가
④ Stack의 위치를 0x1000로 변경
0x10200x101C0x10180x10140x10100x100C0x10080x10040x10000x0FFC0x0FF80x0FF4
0x1234lr:
0x100Csp:
0x02R1:
0x01R0:
0x4321pc:0x010x02
0x1234
0x1000
78
Stack의 Pop 동작
LDMFD sp!, {r0-r1,pc}Base 레지스터(sp) = 0x1000
Stack에서 context 정보를 읽는다
① 레지스터 값을 읽은 후 어드레스 증가
② 링크 레지스터(lr) 값을 읽어 프로그램
카운터(pc)에 저장
③ Stack의 위치를 0x100C로 변경
0x10200x101C0x10180x10140x10100x100C0x10080x10040x10000x0FFC0x0FF80x0FF4
0x1234lr:
0x1000sp:
0x??R1:
0x??R0:
0x4321pc:0x010x02
0x1234
0x01
0x02
0x1234
0x100C
79
스택과 서브루틴
스택의 용도 중 하나는 서브루틴을 위한 일시적인 레지스터저장소를 제공하는 것.서브루틴에서 사용되는 데이터를 스택에 push하고, caller 함수로return 하기 전에 pop 을 통해 원래의 정보로 환원시키는 데 사용:
privilege 모드에서 LDM을 사용하여 Pop을 할 때 ‘S’ bit set 옵션인‘^’가 레지스터 리스트에 있으면 SPSR이 CPSR로 복사 된다.
STMFD sp!,{r0-r12, lr} ; stack all registers........ ; and the return address........
LDMFD sp!,{r0-r12, pc} ; load all the registers; and return automatically
80
Contents
1. 임베디드 시스템의 구조
2. 임베디드 시스템의 개발
3. ARM 아키텍처
4. ARM 프로세서의 구조
5. ARM 프로세서 명령어
6. Cached ARM7. 임베디드 소프트웨어 개발
8. S3C2410 및 실습용 보드의 이해
9. 디바이스 제어
81
ARM의 메모리 시스템
Memory
ARMcore
On-chipCaches
MMU
Virtual AddressesPhysical Addresses
BuffersMemory
Controller
ARM 프로세서
82
Cached ARM 프로세서의 제어
CP15 인터페이스를 통해서 제어
Cache, MPU or MMU, endian 제어 등
Coprocessor Register Transfer 명령
MRC : Move to Register from CoprocessorCoprocessor 레지스터 내용을 ARM 레지스터로 전송
MCR : Move to Coprocessor from RegisterARM 레지스터의 내용을 Coprocessor 레지스터로 전송
MCR/MRC{cond} p15, opcode_1, rd, cn, cm, opcode_2
p15 - coprocessor 15를 나타낸다
opcode_1 - always zero
rd – ARM의 source 또는 destination 레지스터
cn - primary CP15 register
cm - additional register name
opcode_2 - additional information 표시
83
CP15 레지스터 (ARM920T)
Register 용 도 비 고
ID code register Opcode_2=0
Cache type register Opcode_2=1
1 Control Register Cache, MMU enable, Endian Clock, 제어 등
2 Translation table base register
3 Domain access control register
5 Fault status register
6 Fault address register
9 Cache lockdown register
10 TLB lockdown register
13 FSCE PID register Fast Context Switching Extension
14 Debug support register DCC enabled
4, 11, 12 Reserved
0
7 Cache operation register Cache control
8 TLB operation register
84
CP15 레지스터 (XScale)Register 용 도 비 고
ID code register Opcode_2=0
Cache type register Opcode_2=1
1 Control Register Cache, MMU enable, Endian Clock, 제어 등
2 Translation table base register
3 Domain access control register
5 Fault status register
6 Fault address register
9 Read buffer operation
10 TLB lockdown register
13 FSCE PID register Fast Context Switching Extension
14 Debug support register
15 Test & Clock control
0
7 Cache operation register Cache control
8 TLB operation register
11, 11, 12 Reserved
85
MMU의 구성
Translation Lookaside Buffer (TLB)
최근에 사용된 Virtual address를 physical address로 변화하는 정보와
access permission에 대한 정보를 저장하고 있는 일종의 Cache
Translation Table Walking Logic
TLB를 update 하고 관리하는 기능을 가진 logic
Access Control Logic
86
Translation Table
Physical 메모리에 있는 translation 정보를 가지고 있는 TableLevel 1 Translation Table
4096개의 32비트 translation table entry4GB 메모리를 virtual address 1MB 단위로 나누어 관리
Virtual address 비트 [31:20]로 정렬
Physical memory에 대한 1MB section 단위의 address translation 정보와 access control 정보를 가지거나, 레벨 2 table에 대한 주소
정보를 가진다.
Level 2 Translation Table64KB(large page), 4KB(small page), 1KB(tiny page) 단위의 translation table을 정보를 가지고 있다.각 translation table에는 address translation 정보와 access control 정보를 가진다.
87
Translation Lookaside Buffer (TLB)
최근에 사용된 Virtual address를 physical address로 변화하는 정보와
access permission에 대한 정보를 저장하고 있는 일종의 Cache
TLB가 Virtual 어드레스에 대한 translation table entry를 가지고 있으면
access control logic이 access 가능을 판단
접근이 허용되면 virtual address를 physical address로 변환 후 access
접근의 허용이 않 되면 CPU에 Abort 구동
TLB에 virtual 어드레스에 대한 정보가 없으면 translation table walking
logic에서 table 정보를 physical 메모리에서 읽어 TLB update
88
MMU와 메모리 구성
D-CACHE
ARMcore
Virtual Addresses Space
SystemMemory
Instructions
Data
Translation Table
I-CACHE
ARM 프로세서MMU
Physical Addresses Space
VAPAAC
VAPAACB
32
ITLB
DTLB
TLB 관리Translation Table
Base Register
89
MMU의 어드레스 변환
Physical Addresses Level 1 Translation Table
C BDomain SelectorAP0x000 1 1 0
C BDomain SelectorAP0x002 1 1 0
C BDomain SelectorAP0xFFF 1 1 0
C BDomain SelectorAP0xFFF 1 1 0
Virtual Addresses
4096 Entries
Fault
0 0
Fine Table Base 1 1 1Domain Selector
Coarse Table Base 1 0 1Domain Selector
Coarse Level 2 Translation Table
Fine Level 2 Translation Table
0x002 00000
0x003 00000
0x004 00000
0x001 00000
0xFFF 00000
0xFFC 00000
1 MB Sections
0x000 00000
1 MB Sections
0x001 00000
0x003 00000
0x004 00000
0x002 00000
0xFFF 00000
0xFFC 00000
0x000 00000
90
Level 1 Descriptor
Level 1 Descriptor의 종류
FaultSection descriptorCoarse or fine page descriptor
Coarse page 는 256 entry의 Level 2 table을 가진다
Fine page는 1024 entry의 Level 2 table을 가진다
Coarse page table
Fault
Fine page table
Section
31 20 19 12 11 10 9 8 7 6 5 4 3 2 1 0
Section Base Address 1APDomainSelector
C B 1 0
Course Level 2 Descriptor Base Address 1DomainSelector
0 1
Fine Level 2 Descriptor Base Address 1DomainSelector
1 1
0 0
Descriptor Type
91
Level 2 Descriptor
Level 2 Descriptor의 종류
FaultLarge page : 64KB 단위 관리
Small page : 4KB 단위 관리
Tiny page : 1KB 단위 관리
Large page
Fault
Tiny Page
Small Page
31 16 15 12 11 10 9 8 7 6 5 4 3 2 1 0
Large Page Base Address 0 1
0 0
AP3 AP2 AP1 AP0 C B
Small Page Base Address C B 1 0AP3 AP2 AP1 AP0
Tiny Page Base Address 1 1C BAP
Descriptor Type
92
Cache와 Write Buffer 제어
Section 또는 page 별로 Cache와 Write Buffer의 사용여부 결정
CacheablePage 내의 데이터가 Cache될 수 있음을 나타낸다
BufferablePage 내의 데이터가 write buffer에 write될 수 있음을 나타낸다.
Memory mapped I/O 장치의 경우에는 반드시 disable 되어 있어야 한다.
Cacheable 과 Bufferable에 의한 메모리 시스템 특징
C B 의 미 Cache의 Write 동작
0 0 Cache 불가, 쓰기 버퍼 불가
Cache 불가, 쓰기 버퍼 동작
Cache 동작, 쓰기 버퍼 불가
Cache 동작, 쓰기 버퍼 동작
0 1
1 0 Write-through Cache
1 1 Write-back Cache
93
Access Permission
Section 또는 page 별로 메모리의 access permission 제한
Access 권한은 각 descriptor의 AP 정보와 S(System) 비트와 R(Rom) 비트에 의해서 제어
S, R비트는 control 레지스터의 비트 8과 9이다
Access가 불가하면 permission fault가 발생
Access PermissionAP S R
Supervisor User00 0 0 No access No access00 1 0 Read only No access00 0 1 Read only Read only00 1 1 Reserved01 X X Read / Write No Access10 X X Read / Write Read only11 X X Read / Write Read / WriteXX 1 1 Reserved
94
Domain Control
MMU의 Access는 기본적으로 “DOMAIN”의 의해서 제어 된다.개별적인 Access permission을 갖도록 제어 하는데 사용
16개까지의 domain 지정 가능
DACR(Domain Access Control Register)는 각 domain 별로 2비트씩 할당
Domain 과 Access Permission
Domain 의 미 설 명
00 No Access
Client
Reserved
Manager
모든 access에 대하여 domain fault 발생
01 Page Table의 Section descriptor 나 page descriptor의AP(Access Permission) 비트 정보를 따른다.
10 Reserved (No Access)
11Page Table의 Section descriptor 나 page descriptor의AP(Access Permission) 비트 정보를 무시하고 무조건access를 허용한다.
95
MMU 설정
MMU를 설정하는 과정은 다음과 같다.1. Build Translation Table
Physical 메모리에 설정
Virtual to physical translation 정보
Cacheable / Bufferable 정보
Access Permission
2. Translation Table Base 설정
CP15의 c2 사용
3. Initialize Control RegisterEnable Cache, MMU
Clocking 모드 설정
Endian 모드 설정
Vector location 설정
Start
Build Translation Table
Translation Table Base 설정 (C2)
Initialize Control Register (C1)
MRC p15, 0, r0, c1, c0, 0 ; read control register
ORR r0, r0, #0x1
MCR p15, 0, r0, c1, c0, 0 ; enable MMU
MOV r0, =TTBase ; Translation table base
MCR p15, 0, r0, c2, c0, 0 ; set TT base
96
Contents
1. 임베디드 시스템의 구조
2. 임베디드 시스템의 개발
3. ARM 아키텍처
4. ARM 프로세서의 구조
5. ARM 프로세서 명령어
6. Cached ARM7. 임베디드 소프트웨어 개발
8. S3C2410 및 실습용 보드의 이해
9. 디바이스 제어
97
APCS레지스터 APCS 역 할
r0 a1 argumect 1 / interger result / scratch register
r1 a2 argumect 2 / scratch register
r2 a3 argumect 3 / scratch register
r3 a4 argumect 4 /scratch register
r4 v1 register variable 1
r5 v2 register variable 2
r6 v3 register variable 3
r7 v4 register variable 4
r14 lr link address / scratch register
r8 v5 register variable 5
r9 sb/v6 Static base / register variable 6
r10 sl/v7 stack limit / register variable 7
r11 fp frame pointer
r12 ip scratch reg. / new sb in inter-link-unit calls
r13 sp Lower end of current stack frame
r15 pc program counter
98
Exception
Exception외부의 요청이나 오류에 의해서 정상적으로 진행되는 프로그램의 동작을 잠시
멈추고 프로세서의 동작 모드를 변환하고 미리 정해진 프로 그램을 이용하여
외부의 요청이나 오류에 대한 처리를 하도록 하는 것
Exception의 예
I/O 장치에서 인터럽트를 발생시키면 IRQ Exception이 발생하고, 프로세서는 발생된
IRQ Exception을 처리하기 위해 IRQ 모드로 전환되어 요청된 인터럽트에 맞는 처리
동작 수행
ARM의 ExceptionResetUndefined InstructionSoftware InterruptPrefetch AbortData AbortIRQ(Interrupt Request)FIQ(Fast Interrupt Request)
99
Exception Vector 와 우선순위
Exception VectorException이 발생하면 미리 정해진 어드레스의 프로그램을 수행
미리 정해진 프로그램의 위치를 Exception Vector라 한다.
Exception Vector Table발생 가능한 각각의 Exception에 대하여 Vector를 정의해 놓은 테이블
각 Exception 별로 1 word 크기의 명령어 저장 공간을 가진다.
Vector Table에는 Branch 또는 이와 유사한 명령으로 실제 Exception을 처리하기
위한 루틴으로 분기 할 수 있는 명령으로 구성되어 있다.FIQ의 경우는 Vector Table의 맨 상위에 위치하여 분기명령 없이 처리루틴을 프로그램
할 수 있다.
ARM은 기본적으로 0x00000000에 Vector Table을 둔다. (MMU 제어 프로그램에 의해 위치 변경 가능)
Exception 우선 순위
동시에 Exception이 발생하는 경우 처리를 위해 우선 순위 지정
100
Exception Vector Table
Vector Address Exception 우선순위 동작모드 전환
0x0000 0000 Reset 1 (High) Supervisor(SVC)
0x0000 0004 Undefined Instruction 6 (Low) Undefined
0x0000 0008 Software Interrupt(SWI) 6 Supervisor(SVC)
0x0000 000C Prefetch Abort 5 Abort
0x0000 0010 Data Abort 2 Abort
0x0000 0014 Reserved
0x0000 0018 IRQ 4 IRQ
0x0000 001C FIQ 3 FIQ
101
Exception Vector Table의 명령어
Exception 마다 1 word 크기의 명령어 저장 공간 할당
Exception vector 테이블에서는 1 개의 ARM 명령만을 사용할 수 있다.실제 Exception Handler가 있는 분기 명령으로 만들어 진다.
FIQ의 Vector Table은 맨 상위에 있으므로 핸들러를 직접 작성할 수 있다.
Exception Vector Table에서 사용할 수 있는 명령어
Branch 명령 (B)가장 일반적으로 사용된다.Branch 명령은 PC 값을 기준으로 +/- 32MB 내에 있어야 한다.
Handler가 32MB 영역을 벗어나면 다른 명령을 사용하여야 한다.
Move 명령 (MOV)Destination 레지스터를 PC로 하면 Branch 명령과 같이 사용 가능
한 사이클 내에 처리된다.Handler 어드레스가 8비트 상수와 ROR로 표시 가능해야 사용 가능하다.
Load 명령(LDR)과 Literal Pool메모리 영역 내의 어떤 위치라도 이동이 가능하다.메모리에서 주소를 읽기 위한 1 사이클이 더 필요하다.
102
Exception Handling
Exception 발생
CPSR을 SPSR_<mode>에 복사
CPSR의 비트를 수정
되돌아갈 어드레스를LR_<mode>에 저장
PC 값을 Vector 어드레스로 변경
ARM state로 변경
Mode 비트 수정
필요시 인터럽트 disable
프로그램실행
Exception Handler
Exception Vector
ReturnCPSR 값 복원
PC 값 복원
ARMARM이이 하드웨어적으로하드웨어적으로 처리처리
103
Return From Exception Handler
Exception 처리가 완료되면 다음의 절차를 수행하여 복귀
1. LR_<mode> 값을 PC에 복사한다.2. SPSR_<mode>를 CPSR에 복사한다.
주의사항 : 2가지 동작이 하나의 명령으로 처리되어야 한다.Exception 복귀 명령
Data processing 명령에 S 접미사를 사용하고 PC를 destination 레지스터로 사용하는 방법
Privilege 모드에서 S 접미사를 사용하면 CPSR 복원
LDM 명령을 사용하고 register list 뒤에 ^ 옵션 사용
Stack에 되돌아갈 주소 값이 계산 되어 들어가 있어야 한다.
SUBS PC, LR, #4
LDM SP!, {PC}^
104
Exception 과 Pipeline
Exception 과 PipelineException 종류별로 CPU에서 발생한 Exception을 인식하는 시점의pipeline stage가 모두 다르다.따라서 복원 되는 PC 값의 조정이 필요하다.
Exception 복귀 명령
Exception Pipeline Stage Return 명령
Undefined Instruction Decode stage MOVS PC, LR
Software Interrupt(SWI) Decode stage MOVS PC, LR
Prefetch Abort Execute stage SUBS PC, LR, #4
Data Abort Memory stage SUBS PC, LR, #8
IRQ Execute stage SUBS PC, LR, #4
FIQ Execute stage SUBS PC, LR, #4
105
Reset Exception
발생 조건
ARM로 Reset 신호가 입력되면 Reset Exception 발생
Exception 발생에 따른 ARM의 동작
순서 동 작 동 작 설 명
1 SPSR_svc = CPSR
CPSR[5] = 0 ARM state로 전환
CPSR[6] = 1 FIQ disable
CPSR[7] = 1 IRQ disable2 CPSR 값 변경
CPSR[4:0] = 10011’b SVC 모드로 전환
3 LR_svc = unpredictable value
4 PC = 0x00
106
Undefined Instruction Exception
발생 조건ARM에 정의 되지 않은 명령을 실행 하고자 하면 발생
Coprocessor에서 응답이 없으면 발생
Exception 발생에 따른 ARM의 동작
Return 명령MOVS PC, LR
순서 동 작 동 작 설 명
1 SPSR_undef = CPSR
CPSR[5] = 0 ARM state로 전환
CPSR[6] = no change
CPSR[7] = 1 IRQ disable2 CPSR 값 변경
CPSR[4:0] = 11011’b Undefined 모드로 전환
3 LR_undef = address of undefined inst + 4
4 PC = 0x04
107
Software Interrupt (SWI)
발생 조건SWI 명령이 실행되면Exception 발생
Exception 발생에 따른 ARM의 동작
Return 명령MOVS PC, LR
순서 동 작 동 작 설 명
1 SPSR_svc = CPSR
CPSR[5] = 0 ARM state로 전환
CPSR[6] = no change
CPSR[7] = 1 IRQ disable2 CPSR 값 변경
CPSR[4:0] = 10011’b SVC 모드로 전환
3 LR_svc = address of SWI + 4
4 PC = 0x08
108
SWI Handler
SWI 처리 순서
SWI 명령이 있는 위치를 찾는다.
SWI 명령에 있는 SWI 번호를 알아낸다.
SWI 번호에 해당하는 동작을 수행한다.
SWI의 Argument는 R0, R1, R2, R3을 통해 전달된다.
cond 1 1 1 1 24-bit (interpreted) immediate31 28 27 2423 0
109
Prefetch Abort
발생 조건잘못된 어드레스 공간에서 명령을 읽으려고 하면 Exception 발생
MMU나 메모리 controller서 발생한 Abort 신호 입력에 의해서 발생
Exception 발생에 따른 ARM의 동작
Return 명령SUBS PC, LR, #4
순서 동 작 동 작 설 명
1 SPSR_abt = CPSR
CPSR[5] = 0 ARM state로 전환
CPSR[6] = no change
CPSR[7] = 1 IRQ disable2 CPSR 값 변경
CPSR[4:0] = 10111’b Abort 모드로 전환
3 LR_abt = address of abort + 4
4 PC = 0x0C
110
Data Abort
발생 조건잘못된 어드레스 공간에서 데이터를 읽거나 쓰려고 하면 Exception 발생
MMU나 메모리 controller서 발생한 Abort 신호 입력에 의해서 발생
Exception 발생에 따른 ARM의 동작
Return 명령SUBS PC, LR, #8
순서 동 작 동 작 설 명
1 SPSR_abt = CPSR
CPSR[5] = 0 ARM state로 전환
CPSR[6] = no change
CPSR[7] = 1 IRQ disable2 CPSR 값 변경
CPSR[4:0] = 10111’b Abort 모드로 전환
3 LR_abt = address of abort + 8
4 PC = 0x10
111
IRQ
발생 조건외부 장치에서 발생된 인터럽트(IRQ) 신호가 ARM에 입력되면 Exception 발생
Exception 발생에 따른 ARM의 동작
Return 명령SUBS PC, LR, #4
순서 동 작 동 작 설 명
1 SPSR_irq = CPSR
CPSR[5] = 0 ARM state로 전환
CPSR[6] = no change
CPSR[7] = 1 IRQ disable2 CPSR 값 변경
CPSR[4:0] = 10010’b IRQ 모드로 전환
3 LR_irq = address of next inst + 4
4 PC = 0x18
112
FIQ
발생 조건외부 장치에서 발생된 인터럽트(FIQ) 신호가 ARM에 입력되면 Exception 발생
Exception 발생에 따른 ARM의 동작
Return 명령SUBS PC, LR, #4
순서 동 작 동 작 설 명
1 SPSR_fiq = CPSR
CPSR[5] = 0 ARM state로 전환
CPSR[6] = 1 FIQ disable
CPSR[7] = 1 IRQ disable2 CPSR 값 변경
CPSR[4:0] = 10001’b FIQ 모드로 전환
3 LR_fiq = address of next inst + 4
4 PC = 0x1C
113
물리적인 메모리 구조
0x40000_0000
0x38000_0000
0x30000_0000
0x28000_0000
0x20000_0000
0x18000_0000
0x10000_0000
0x08000_0000
0x00000_0000Flash (nGCS0) 128MB
0x48000_0000
0x60000_0000
0xFFFF_FFFF
LAN (nGCS3)
SDRAM (nGCS6)
Boot SRAM
Special Register
Not Used (nGCS7)
Extension (nGCS1)
Extension (nGCS2)
Extension (nGCS4)
Extension (nGCS5)
Not Used
2MB/4MB/~128MB
2MB/4MB/~128MB
4KB
128MB
128MB
128MB
128MB
128MB
1GBAccessible Region
114
소프트웨어 동작을 위한 메모리 구조
TEXT(RO) 영역
DATA(RW) 영역
BSS(ZI) 영역
Heap 영역
Stack 영역
RO code
RO data
Alphabetical order
ABC
Z
115
Startup 코드
Startup 코드를 작성하기 위해서는
Programmer’s model, 특히 명령어
시스템 하드웨어 구조 및 기능에 대한 전반적인 사항
등을 모두 알아야 한다.
Startup 코드의 필수 사항
Exception Vector Table의 설정
Reset 핸들러의 구성
시스템 초기화
116
시스템 초기화
일반적으로 시스템의 초기화 동작은 다음을 포함한다.
Entry point를 정의
Exception vector를 설정
메모리 시스템을 초기화
스택 포인터 레지스터 초기화
Critical I/O 초기화
필요 시 프로세서의 모드 및 state 변환
인터럽트 제어기 초기화
C 프로그램에서 사용되는 변수 영역 및 메모리 초기화
C 코드로 분기
117
Entry Point 선언
모든 프로그램은 시작되는 부분을 정의해야 한다.어셈블러로 구성되며 모든 프로그램에는 반드시 필요
일반적으로 crt0.S(C-runtime 0 의 약자), init.S, startup.S 등의 이름 사용
Entry Point 선언
SDT, ADS, RVDS or CodeWarriorENTRY 어셈블러 디렉티브를 사용한다.
CodeWarrior 2.x or GNU
AREA Init,CODE,READONLYENTRY
ResetHandler
.text
.globl _start
.org 0_start: /* entry point */
118
Exception Vector Table 설정
0x0의 ROM에 vector table이 정의 되어 있는 경우
ROM에 vector table이 고정 되어 있고 시스템 동작 중에 별도의 vector table의
설정이 필요 없는 경우
Re-mapping이 지원되지 않는 경우에는 항상 vector table이 고정 되어 있다.
0x0에 vector table 없이 초기화 코드만 있는 경우
0x0 번지에 최소한의 reset handler가 동작 하도록 되어있고, 이 reset
handler에서 re-mapping 및 vector table 초기화
Re-mapping이 지원되는 경우 대부분 시스템 동작 중에 vector table의 초기화
과정이 있다.
Linux 등의 대부분 임베디드 OS는 OS 초기화 과정에서 자신의 exception vector
table을 초기화 한다.
119
시스템 초기화 절차
System Reset & goto PC=0x0
Goto Reset Handler
Disable Watch-dog
Disable all interrupt
Setup system clock
Setup memory controller
Initialize each stack
Power-on 또는 reset switch에 의해서 시스템 reset
Reset handler로 이동
Watch-dog 타이머를 초기화 한다.
1
2
3
4
5
6
7
Clear BSS
Goto C_Entry
8
9
외부의 모든 인터럽트를 받아들이지 않도록 한다.
Clock 주파수, PLL 등을 초기화 한다.
메모리 제어기를 초기화
SVC,USR,ABT,IRQ,FIQ,Undef 등의 stack을 초기화
BSS 영역을 초기화 한다.
C 함수로 분기하여 메인 프로그램을 시작
120
Exception Vector Table
121
Initialization for Reset (1/2)
122
Initialization for Reset (2/2)
123
Memory Bank Initialization
124
Stack Initialization
125
Setup Handler
126
RW/ZI Initialization
127
Contents
1. 임베디드 시스템의 구조
2. 임베디드 시스템의 개발
3. ARM 아키텍처
4. ARM 프로세서의 구조
5. ARM 프로세서 명령어
6. Cached ARM7. 임베디드 소프트웨어 개발
8. S3C2410 및 실습용 보드의 이해
9. 디바이스 제어
128
Contents
1. 임베디드 시스템의 구조
2. 임베디드 시스템의 개발
3. ARM 아키텍처
4. ARM 프로세서의 구조
5. ARM 프로세서 명령어
6. Cached ARM7. 임베디드 소프트웨어 개발
8. S3C2410 및 실습용 보드의 이해
9. 디바이스 제어