Transcript 07_Memory

UNIT
07 Memory Map
로봇 SW 교육원
조용수
학습 목표
•
•
•
•
•
•
Memory
Memory Map
Port Map I/O
Memory Map I/O
IP Register
MCU Programming
2
Memory
• CPU 동작에 필요한 데이
터를 가져오기 위한 Device
• Address Bus와 Data Bus
를 사용
• Data Bus의 사이즈에 의해
서 한번에 전달되는 데이터
의 용량이 결정 (예: 8bit,
16Bit, 32Bit)
3
Memory Map
4
• 프로그램에 의해 작성 된 코드를 실행파일로 만들
어 실행할 때, 메모리에 각각의 데이터 영역을 분리
하여 할당 된 지도
• 프로세스가 실행되기 위한 데이터 저장 할 변수 영
역, 기계어 코드 영역 등의 분류 별로 나누어 저장하
는 지도
Port Mapped I/O
5
• I/O Device 와 메모리 의 입출력 주소 공간을 분리
• I/O Device를 Access 할 수 있는 명령어를 제공
• 메모리와 I/O 속도의 차이가 있으므로, 분리 시 속도
와 효율을 기할 수 있음.
Memory-mapped I/O
6
• I/O Device 와 메모리의 주소공간을 분리하지 않고
하나의 메모리 공간으로 취급하여 배치
• I/O Device 를 특정 메모리 위치로 할당하여 배치함
• I/O Device 를 Access 할 때 메모리와 같은
Instruction Code 를 사용 할 수 있음.
Cortex-M0 Memory map
0x00000000 – 0x1FFFFFFF
Code
Typically ROM or flash memory, WT
0x20000000 – 0x3FFFFFFF
SRAM
Typically used for on-chip RAM, WBWA
0x40000000 – 0x5FFFFFFF
Peripheral
on-chip peripheral, XN
0x60000000 – 0x7FFFFFFF
0x80000000 – 0x9FFFFFFF
0xA0000000 – 0xBFFFFFFF
0xC0000000 – 0xDFFFFFFF
0xE0000000 – 0xFFFFFFFF
System
system segment including the PPB, XN
Note 1 : Event entry points (vectors), system control, and configuration are defined at physical addresses
Note 2 : A multi-word access which crosses a 0.5GB address boundary is UNPREDICTABLE
7
Cortex-M0 Memory Map(Memory)
8
IP Register
9
• MCU 에 포함된 각종 I/O Device 는 특정 Control
Register 의 Read/Write 를 통해서 동작한다.
IP Register
10
IP Register
11
MCU Programming
• 목표 : LED On/Off
12
MCU Programming
13
MCU Programming
14
IP Register
15
IP Register
16
main
17
void SystemInit() {
}
int main(void)
{
*((volatile unsigned int *)(0x50004000 + 0x88))=(0x00);
}
JTAG Debugger
• CPU ID View : 0x5000 0000
• GPIO Port View : 0x5000 4000
• Memory View
• Memory Modify
18
CMSIS
19
• Cortex Microcontroller Software Interface Standard
• 다양한 ARM Processor 제조사 Chip 을 지원하기
위한 표준적인 Library
• I/O 디바이스 지원을 위한 Source 및 API 지원
CMSIS Project
20
• 기존 StartUp Code 를 사용하지 않고, Library 사용
• 필요한 Sdk 를 포함 하여 Project 를 구성
CMSIS Project 생성
void PortInit()
{
// GPIO Port 2-1, 2-2, 2-3, 2-4 -> OUTPUT
…
}
int main()
{
PortInit();
P2->DOUT = 0xFF;
}
21