ARM7 EMBEDDED SYSTEM개발과정

Download Report

Transcript ARM7 EMBEDDED SYSTEM개발과정

ARM7 EMBEDDED SYSTEM
개발과정
EMBEDDED SYSTEM 개요
MICROVISION ARM7 교육
1
EMBEDDED SYSTEM 개요
과거
• CPU의 기능이 주기능이 아닌 시스템
-
• 기존에 시스템에 CPU를 추가한 시스템
예) TV,전화,냉장고등
-현재
범용이 아닌 특정 기능을 목적으로 만들어진 CPU 시스템
예) Embedded Web Server등
MICROVISION ARM7 교육
2
EMBEDDED 시스템 개발 과정
•
•
•
•
•
•
•
•
적용과제 분석
CPU선정
Evaluation 보드 선정/구매
개발환경 구축/테스트
독자보드 제작/기성품 보드 활용
소프트웨어개발/디버깅
개발종료
사후지원
MICROVISION ARM7 교육
3
EMBEDDED SYSTEM 구성
• CPU 및 관련 하드웨어
• I/O 관련 하드웨어
- 시스템 외부와의 인터페이스
• 운영소프트웨어
- O/S Base 소프트웨어
- Firmware Base 소프트웨어
MICROVISION ARM7 교육
4
EMBEDDED HARDWARE 구성 I
• CPU
- 초기 : 기존CPU 에 별도의 I/O Port 추가
- 현재 : CPU에 다양한 주변기능을 내장
• 주변회로
- Memory : ROM/FLASH, RAM/DRAM등
- 통신포트 : RS232,TCP/IP,USB 등
- I/O : Digital I/O, DAC, ADC등
MICROVISION ARM7 교육
5
EMBEDDED HARDWARE 구성 II
• CPU 선택시 고려사항
- 가격
- 기능
* 속도 및 Data Bus Width(8/16/32bit)
* 자체내장기능 – SDRAM, UART, IIC, RTC등
* 최대 메모리 용량
- 개발환경의 편의성
ICE(In Circuit Emulator, Compiler등)
- 양산여부
- 기타
MICROVISION ARM7 교육
6
EMBEDDED HARDWARE 구성 III
• 주변회로 구성시 고려사항
Memory : 용량/Data Width,
SDRAM의 사용여부
통신포트 : 속도 / 인터페이스 SW의 개발
UART/USB/ETHERNET/JTAG
I/O포트 : 독립된 I/O핀의 필요성
기타 I/O기능의 유/무 및 인터페이스
MICROVISION ARM7 교육
7
EMBEDDED SOFTWARE
개발환경
- OS (option)
- 컴파일러
해당 CPU에 맞는 Cross 컴파일러/
통합환경의 컴파일러
- 타겟보드
Evaluation Board or 자작 보드
- 장비
롬에물레이터, JTAG Debugger등
MICROVISION ARM7 교육
8
EMBEDDED SOFTWARE I
• OS의 필요여부
- 고속처리/대용량메모리일경우 : OS 필요
Win CE/Linux : 자체컴파일러 보유
기타 RTOS사용 : 상용컴파일러 필요
- 저속/저용량 : OS 불필요
CPU Start 후 무한루프사용
MICROVISION ARM7 교육
9
EMBEDDED SOFTWARE II
• 컴파일러 (ARM 기준)
- CROSS Compiler
PC에서 컴파일, 실행은 타겟CPU에서
- Debugging Software 포함
- 상용 : SDT/ARM, IAR-EWARM
- 공개 : GCC
- 통합개발환경(Integreted Development Environment)
지원
MICROVISION ARM7 교육
10
EMBEDDED SOFTWARE III
• 타겟보드 - 초기
- Evaluation Board를 이용/개발
CPU Chip Maker에서 제조
: CPU의 모든 기능을 활용할수 있음
기타보드개발업체에서 제조
: 최소한의 필요한 기능만을 제공
개발환경 구축/양산보드 생산목적으로 연구
• 타겟보드 – 후기
자체 제조 or 보드업체에서 구입
MICROVISION ARM7 교육
11
EMBEDDED SOFTWARE IV
• 장비
- ROM Emulator
- InCircuit Emulator (8bit/16bit) - MDS
- JTAG Emulator
: 사용하기 편리함
: 다양한 가격대
MICROVISION ARM7 교육
12
EMBEDDED SYSTEM
개발시 고려사항
• 시스템의 목적/사양
• 개발환경구축의 범위 및 책임
- 칩,컴파일러,장비
: 기술지원의 주체가 누구인가
- 편의성
- 비용
• 기타-인력,시간등
MICROVISION ARM7 교육
13
TEA BREAK
MICROVISION ARM7 교육
14
ARM 프로세서 입문
MICROVISION ARM7 교육
15
Agenda
• Part 1
배경과 역사
RISC / CISC Acorn /
Advanced RISC Machine
• Part 3
ARM 계열들
ARM7 ARM9 StrongARM
ARM10
• Part 2
주요 특징
Registers Interrupts
Memory Thumb 3-단계 명
령 파이프라인 5-단계 명
령 파이프라인
• Part 4
개발 도구
Compilers, Debuggers InCircuit Emulators
MICROVISION ARM7 교육
16
Part1
ARM의 배경과 역사
-ARM의 특징을 살펴보자
MICROVISION ARM7 교육
17
RISC 대 CISC
•RM은 32-bit RISC 구조입니다
A
(Reduced Instruction Set Computer)
•RISC 구조를 CISC 구조와 비교하면,
• 구조는 제한된 수의 명령어들을 갖습니다.
• 모든 명령어들은 고정 길이입니다.
보다 빠른 실행을 허용합니다. (single cycle)
-(single cycle) Load-Store architecture:
대부분의 명령어들은 input 또는 output이
범용 레지스터들 중의 하나가 되어야 합니다.
MICROVISION ARM7 교육
18
RISC 성능과 결점
RISC 구조는 쉽게 최고의 성능으로 최적화될 수 있습니다
•
•고정 길이의 명령 세트는 더욱 빠른 실행을 허용합니다.
• 파이프라인이 더욱 효율적으로 사용될 수 있습니다.
• 더 빠른 클럭 속도를 허용하며, 축소 명령 세트로 인해
칩다이 크기가 더욱 작아집니다.
유일하게 한 가지 “현실적” 결점이 있습니다
•
• 코드 크기가 더 커지는 경향이 있습니다.
- 32-bit RISC 기계에서, 모든 단일 명령어는
코드 공간의 4 bytes를 필요로 합니다.
MICROVISION ARM7 교육
19
ARM 역사와 고유 핵심 기능
❏ 최초의 ARM 프로세서는 영국, 캠브리지에 있는 Acorn Computers
Limited 사에서 80년대 중반에 개발 되었습니다.
• 원래, ARM은 Acorn RISC Machine 을 나타내었습니다
• 후에 이것은 Advanced RISC Machine 으로 변화 되었습니다
❏ 초창기부터의 근본적 특징 :
• Load-store 구조
• 32-bit, 고정된 길이 명령
-많은 single cycle 실행 다중 사이클들이 요구되지만,
메모리 액세스가 최소화
• 15 범용 레지스터들
• 명령 파이프라인
-원래는, 3-stage pipeline
-5-stage pipeline 은 새로운 몇몇 파생 계열들에서 이용 가능
MICROVISION ARM7 교육
20
오늘날의 ARM
❏ 모든 주요 칩 제조업체들은 한 개 또는 여러 개의
ARM 코어에 대한 라이센스들을 갖고 있습니다.
❑ 라이센스 소유자 :
•Analog Devices, Atmel, Cirrus, Fujitsu, IBM, Infineon,
Intel,
Mitsubishi, Motorola, National Semiconductor, NEC, Philips,
Sharp, ST Microelectronics, Texas Instruments, Toshiba
❑ 임베디드 시스템에서 사용하는 가장 인기있는 ARM 코
어는 ARM7TDMI 입니다.
• TDMI는 다음을 나타냅니다: Thumb
• Debug support
• Multiplier (64-bit result)
• In-Circuit Emulator interface
MICROVISION ARM7 교육
21
ARM 자료 – Part 2
ARM 구조의 주요 기능들
ARM의 가장 중요한 기술적 요소들은 무엇인가?
MICROVISION ARM7 교육
22
레지스터
❑ 프로세서 레지스터
PSR – Program Status Register
SP – Stack Pointer
PC – Program Counter
LR – Link Register
-PC의 복사본 포함, 리턴 어드레스들을 결정하는데 사용
❑ 레지스터 뱅크의 이용여부는 현재의 프로세서 모드
(user, supervisor, 그 외)에 달려 있습니다
• 사용자 모드에서는 최대 13개 범용 레지스터
• 높은 우선순위 인터럽트(FIQ)에서, 범용 레지스터를 가진 다
뱅크가 이용 가능해집니다 .
• PSR, SP 그리고 LR의 한 세트가 각각의 프로세서 모드에 이
MICROVISION ARM7 교육
될 수 있습니다.
23
하드웨어 인터럽트
프로세서 모드 FIQ와 IRQ
❑ ARM 코어는 많은 인터럽트 소스들을 지원하고 구별하
는 인터럽트 컨트롤러를 포함하지 않습니다
• 많은 주변 장치/인터럽트 소스들을 보유한
디바이스들은 memory-mapped 인터럽트
컨트롤러가 필요합니다.
❑ 하드웨어 인터럽트에 관한 두 개의 레벨이 있으며, 양쪽
레벨들은 그들 자신의 SP 와 LR 레지스터들 그리고 원
래 PSR의 복사본을 액세스합니다.
• FIQ – High priority (fast) hardware interrupt
- 모든 다른 인터럽트들을 Disables
- 5개 범용 레지스터들을 포함하는 한 개의 새로운 뱅크 제공
• IRQ – Regular hardware interrupt
MICROVISION ARM7 교육
24
소프트웨어 인터럽트
Supervisor 프로세서 모드
❑ SWI (프로세서를 supervisor 모드로 변경):
최대 256 소프트웨어 인터럽트들이 “Thumb” 파생 계열
에 의해 지원됩니다.
❑ Supervisor의 SP 와 LP 레지스터들의 복사본 그리고 원
래 PSR을 액세스
❑ SWI의 우선순위는 하드웨어 인터럽트 IRQ 와 FIQ 보다
낮습니다
• 두 개는 SWI 를 인터럽트할 수 있습니다
❑ 파라매터들은 서로 다른 방식으로 소프트웨어 인터럽트들
로 또는 소프트웨어 인터럽트에서 전달될 수 있습니다.
• 범용 레지스터를 통해
• 스택을 통해
MICROVISION ARM7 교육
25
인터럽트 성능
예 : ARM7TDMI at 40Mhz
❑
FIQ의 최악의 경우 인터럽트 대기 시간
• 27 프로세서 사이클
• 약 0.7 microseconds (700 nanoseconds)
❑
FIQ 와 IRQ의 최상의 경우 인터럽트 대기 시
• 4 프로세서 사이클
• 약 0.1 microseconds (100 nanoseconds)
❑
IRQ의 최악의 경우는 보다 높은 우선순위 FIQ
의 가능한 가장 긴 실행에 의존합니다
MICROVISION ARM7 교육
26
메모리 구성
❑
ARM7에 이르는 ARM 파생 계열들은 van
Neuman 아키텍쳐에 기초한 것입니다.
• code AND data 를 위한 공유된, 단일 메모리 공간
• 선형 32-bit 주소 영역 (4 GByte)
❑ ARM9와 상위의 ARM 파생 계열은 Harvard 아키텍쳐
를 지원합니다.
• code AND data를 위한 개별적인 메모리 포트들
• code AND data 에 대한 동시적 액세스 제공
MICROVISION ARM7 교육
27
코드 크기 줄이기 : Thumb
❑ 32-bit 명령 크기는 좋은 코드 밀도를 제공할 수 없습니다.
❑ “Thumb instruction set”는 32-bit 명령어들이 map 되고
16-bit 명령어들로 저장되는 것을 허용합니다.
❑ Thumb을 지원하는 ARM 파생 계열들은 32-bit original 과
16-bit compressed 명령 세트들을 모두 실행할 수
있습니다.
• CPSR (Current Program Status Register)에서의 Bit 5
“T” 는 실행 모드를 결정합니다.
• “T” 가 설정되면, 프로세서는 “Thumb” 실행 모드에 있게
됩니다.
MICROVISION ARM7 교육
28
3-단계 명령 파이프라인
❑ ARM7까지, ARM 프로세서들은 3-단계 명령
파이프라인을 갖습니다.
❑ 세 단계는 다음과 같습니다 :
1. Fetch
코드를 포함하는 메모리로부터 명령어를 인출합니다.
2. Decode
명령어를 해독하고 데이터 경로를 준비합니다.
다음 사이클에 관한 신호를 제어합니다.
3. Execute
명령어가 지정된 데이터 경로에서 실행되며 결과가
수신지로 와서 기록됩니다.
MICROVISION ARM7 교육
29
단일 사이클 명령 실행
❑ 하나의 명령을 완전히 처리하기 위해서는 3 사이클이
소요됩니다.
❑ 그러나: 파이프라인이 채워진 후에, 한 명령은 매번 실행된 사이클이
됩니다.
MICROVISION ARM7 교육
30
다중-사이클 명령의 실행
❑ 만약 명령을 실행하기 위해 다중 메모리 액세스
이루어져야 하는 경우라면, 파이프라인이 한 사이클
로 인해 정지/지연될 것입니다.
• 예를 들면 메모리(레지스터가 아닌)에 저장된
피연산자에 대한 액세스를 요구하는 임의의 명령
❑ 주의: 분기 명령어들이 파이프라인을 비우고(flush) 다
시 채우게(refill) 됩니다.
• 분기 명령어 실행시, 파이프라인의 현재 인출과
해독 동작들은 중단되며 분기 장소로부터의 새로운
인출이시작됩니다.
MICROVISION ARM7 교육
31
5-단계 명령 파이프라인
❑ 고성능 ARM 파생 계열들은 5-단계 파이프라인을
용하여 3-단계 파이프라인의 메모리 액세스 병목
보정합니다.
❑ 다섯 단계는 다음과 같습니다:
1.Fetch: 메모리로부터의 다음 명령 인출
2.Decode: 명령 해독과 레지스터 피연산자
3.Execute: 명령 실행
4.Data: 필요한 경우, 데이터 메모리 액세스
5.Write-back: 수신지 메모리 장소에 명령 결과를 기록
MICROVISION ARM7 교육
32
Part 2의 요약
ARM 구조
❑ 프로세서 레지스터들이 bank 됩니다.
• 각각의 프로세서 모드(user, FIQ, IRQ, supervisor, 등)는
자신의 고유한 프로세서 레지스터의 뱅크를 갖습니다.
• 범용 레지스터(GPR)들이 공유되며, 오직 “FIQ”만이 5 전용 GPR의
뱅크에 액세스합니다.
❑ ARM7TDMI
• 보다 작은 코드 크기를 허용하도록 “Thumb” 명령 세트(16-bit
“compressed”)를 사용합니다
• “van Neuman” 선형 주소 영역, 4Gbyte 를 사용합니다.
• 3-단계 명령 파이프라인을 사용합니다
- Fetch, Decode, Execute
- 파이프라인은 (데이터)메모리 액세스들로 정지/지연됩니다.
- 파이프라인은 각각의 분기와 함께 비워(flush)집니다.
MICROVISION ARM7 교육
33
ARM 자료 – Part 3
ARM 계열
ARM 계열에는 어떠한 것들이 있으며 중요
한 차이점들은 무엇인가?
MICROVISION ARM7 교육
34
ARM 계열: ARM7
❑
ARM6을 대체
❑ 3-단계
명령 파이프라인
❑ 저전압
지원 (몇몇 계열들 1V 미만)
❑
선형 32-bit 주소 영역(4 GByte)을 갖는 Van
Neumann 메모리 설계
• 8-bit 와 16-bit 데이터 유형들 지원
❑
32-bit 데이터 버스 Little- 과 big-endian 지원
MICROVISION ARM7 교육
35
ARM 계열: ARM9
❑ ARM8을 대체
❑ 대략 ARM7 성능의 두 배
❑ 두 개의 32-bit 선형 주소 영역을 갖는 Harvard 메모리
설계, 코드용 한 개와 데이터용 한 개
• code AND data 가 병렬로 액세스 될 수 있기 때문에,
전체적인 메모리 액세스를 향상시킵니다.
❑ 이중-대역폭 메모리 액세스
• 사이클 마다 두 개의 메모리 액세스를 수행
❑ 5-단계 명령 파이프라인
❑ 축소된 CPI (Clocks Per Instruction)
• 명령과 데이터를 위한 별개의 메모리 포트들
MICROVISION ARM7 교육
36
ARM 계열: StrongARM
SA-110과 SA-1100/1110
❑ ARM9의 인텔 버전
❑ 향상된 multiplier
❑ Set- 결합이 용이한 명령과 데이터 캐시들
❑ MMU – Memory Management Unit
❑ Thumb 지원 안 함
❑ 인터럽트 컨트롤러를 포함하는 많은 on-chip 주변 장치들
MICROVISION ARM7 교육
37
ARM 계열: ARM10
❑
대략 ARM9 성능의 두 배
❑
ARM9 와 같은 메모리 설계, 그러나
• Cache: code AND data를 위한 각각32kByte
• 64-bit 데이터 메모리 액세스 지원
❑
특히 최적화된 6-단계 명령 파이프라인
• 분기-예측 작동체계 포함
MICROVISION ARM7 교육
38
ARM 자료 – Part 4
ARM 자료 – Part 4
MICROVISION ARM7 교육
39
ARM 개발 도구
코어 안에 통합된 표준화된 디버그 인터페이
스 덕분에, 인-서킷 디버그에서 부터 고급
인-서킷 에뮬레이터에 이르는 도구들을 이
용할 수 있습니다.
MICROVISION ARM7 교육
40
C와 C++ Compiler, Debugger
❑ ARM
• ADS (Arm Developer Suite)
❑ IAR
• EWARM(Embedded Workbench for ARM)
❑ Gnu
• GCC
❑ Green Hills Software
• Multi 2000
❑ MetaWare
• MetaWare High C++
❑ Microcross
• GNUX-TOOLS
❑ Wind River
MICROVISION ARM7 교육
• Diab C/C++
41
Debugger Hardware
❑ EPI
• JEENI
• Magic Series
❑ Macraigor Systems
• Wiggler
• RAVEN
❑ AIJI Systems
• Open ICE
❑ ARM
• Multi-ICE
MICROVISION ARM7 교육
42
ARM Core 응용 /44B0X소개
ARM Core응용
MICROVISION ARM7 교육
43
ARM Core 응용
• ARM은 Core 이름
• ARM core 기반의 많은 CPU가 생산중임
- 주요 Chip Maker
Analog Devices, Atmel, Cirrus, Fujitsu, IBM, Infineon, Intel, Mitsubishi,
Motorola, National Semiconductor, NEC, Philips, Sharp, ST
Microelectronics, Texas Instruments, Toshiba
MICROVISION ARM7 교육
44
ARM의 성능
StrongARM
MIPS
100
ARM9,920
80
ARM8,810
60
ARM7TDMI
ARM7D,7DM
40
ARM7,710
20
ARM6,60,610
ARM2,3
0
1985 - 90 1991
MICROVISION ARM7 교육
1992
1993
1994
1995
1996
1997
45
ARM CPU 계열별 소개
Cache Size
(Inst/Data)
Tightly Coupled
Memory
Memory
Manage
-ment
AHB Bus
Interface
Thum
b
DSP
Jazell
e
Clock
MHz **
Embedded Cores
ARM7TDMI
No
No
No
Yes*
Yes
No
No
133
ARM7TDMI-S
No
No
No
Yes*
Yes
No
No
100-133
ARM7EJ-S
No
No
No
Yes*
Yes
Yes
Yes
100-133
ARM966E-S
No
Yes
No
Yes
Yes
Yes
No
230-250
4K/4K
No
MPU
Yes*
Yes
No
No
180
ARM946E-S
Variable
Yes
MPU
Yes
Yes
Yes
No
180-210
ARM1026EJ-S
Variable
Yes
MMU+MPU
dual AHB
Yes
Yes
Yes
266-325
ARM940T
Platform Cores
ARM720T
8K unified
No
MMU
Yes
Yes
No
No
100
ARM920T
16K/16K
No
MMU
Yes*
Yes
No
No
250
ARM922T
8K/8K
No
MMU
Yes*
Yes
No
No
250
ARM926EJ-S
Variable
Yes
MMU
dual AHB
Yes
Yes
Yes
220-250
ARM1020E
32K/32K
No
MMU
dual AHB
Yes
Yes
No
325
ARM1022E
16K/16K
No
MMU
dual AHB
Yes
Yes
No
325
ARM1026EJ-S
Variable
Yes
MMU+MPU
dual AHB
Yes
Yes
Yes
266-325†
ARM1136J(F)-S
Variable
Yes
MMU
quad 64-bit
AHB***
Yes
Yes
Yes
333-400†
SC100
No
No
MPU
No
Yes
No
No
80
SC110
No
No
MPU
No
Yes
No
No
80
SC200
No
No
MPU
No
Yes
Yes
Yes
110
SC210
No
No
MPU
No
Yes
Yes
Yes
110
StrongARM
16K/8K
No
No
No
No
206
Intel XScale
32K/32K
No
Yes
Yes
No
400
Secure Applications
Intel ARM-based Processors
MMU
N/A
MICROVISION
ARM7 교육
MMU
N/A
46
ARM INSTRUCTION
MICROVISION ARM7 교육
47
ARM INSTRUCTION CONDITION
MICROVISION ARM7 교육
48
ARM REGISTER
MICROVISION ARM7 교육
49
44b0x
Over View
MICROVISION ARM7 교육
50
S3C44b0x Introduction
•
•
•
•
•
•
•
•
•
•
•
•
•
•
· 2.5V Static ARM7TDMI CPU core with 8KB cache . (SAMBA II bus
architecture up to 66MHz)
· External memory controller. (FP/EDO/SDRAM Control, Chip Select
logic)
· LCD controller (up to 256 color DSTN) with 1-ch LCD-dedicated DMA.
· 2-ch general DMAs / 2-ch peripheral DMAs with external request pins
· 2-ch UART with handshake(IrDA1.0, 16-byte FIFO) / 1-ch SIO
· 1-ch multi-master IIC-BUS controller
· 1-ch IIS-BUS controller
· 5-ch PWM timers & 1-ch internal timer
· Watch Dog Timer
· 71 general purpose I/O ports / 8-ch external interrupt source
· Power control: Normal, Slow, Idle, and Stop mode
· 8-ch 10-bit ADC.
· RTC with calendar function.
· On-chip clock generator with PLL.
MICROVISION ARM7 교육
51
S3C44b0X Overview 1
• Architecture
• · Integrated system for hand-held devices and
general embedded applications.
• · 16/32-Bit RISC architecture and powerful
instruction set with ARM7TDMI CPU core.
• · Thumb de-compressor maximizes code density
while maintaining performance.
• · On-chip ICEbreaker debug support with JTAG
based debugging solution.
• · 32x8 bit hardware multiplier.
• · New bus architecture to implement Low-Power
SAMBA II(SAMSUNG's ARM CPU embedded Microcontroller Bus Architecture).
MICROVISION ARM7 교육
52
S3C44b0X Overview 2
•
•
•
•
•
•
•
•
•
•
•
System Manager
· Little/Big endian support.
· Address space: 32Mbytes per each bank. (Total 256Mbyte)
· Supports programmable 8/16/32-bit data bus width for each bank.
· Fixed bank start address and programmable bank size for 7 banks.
· Programmable bank start address and bank size for one bank.
· 8 memory banks.
- 6 memory banks for ROM, SRAM etc.
- 2 memory banks for ROM/SRAM/DRAM(Fast Page, EDO, and
Synchronous DRAM)
· Fully Programmable access cycles for all memory banks.
· Supports external wait signal to expend the bus cycle.
· Supports self-refresh mode in DRAM/SDRAM for power-down.
· Supports asymmetric/symmetric address of DRAM.
MICROVISION ARM7 교육
53
S3C44b0X Overview 3
• Cache Memory & internal SRAM
• · 4-way set associative ID(Unified)-cache with
8Kbyte.
• · The 0/4/8 Kbytes internal SRAM using unused
cache memory.
• · Pseudo LRU(Least Recently Used) Replace
Algorithm.
• · Write through policy to maintain the coherence
between main memory and cache content.
• · Write buffer with four depth.
• · Request data first fill technique when cache miss
occurs.
MICROVISION ARM7 교육
54
S3C44b0X Overview 4
• Clock & Power Manager
• · Low power
• · The on-chip PLL makes the clock for operating
MCU at maximum 66MHz.
• · Clock can be fed selectively to each function block
by software.
• · Power mode: Normal, Slow, Idle and Stop mode.
• Normal mode: Normal operating mode.
• Slow mode: Low frequency clock without PLL
• Idle mode: Stop the clock for only CPU
• Stop mode: All clocks are stopped - Wake up by
EINT[7:0] or RTC alarm interrupt from Stop mode.
MICROVISION ARM7 교육
55
S3C44b0X Overview 5
• Interrupt Controller
• · 30 Interrupt sources( Watch-dog timer, 6
Timer, 6 UART, 8 External interrupts, 4 DMA ,
2 RTC, 1 ADC, 1 IIC, 1 SIO )
• · Vectored IRQ interrupt mode to reduce
interrupt latency.
• · Level/edge mode on the external interrupt
sources Programmable polarity of edge and
level Supports FIQ (Fast Interrupt request) for
very urgent interrupt request
MICROVISION ARM7 교육
56
S3C44b0X Overview 6
• Timer with PWM (Pulse Width Modulation)
• · 5-ch 16-bit Timer with PWM / 1-ch 16-bit internal
timer with DMA-based or interrupt-based operation
• · Programmable duty cycle, frequency, and polarity
• · Dead-zone generation.
• · Supports external clock source.
• RTC (Real Time Clock)
• · Full clock feature: msec, sec, min, hour, day, week,
month, year.
• · 32.768 KHz operation.
• · Alarm interrupt for CPU wake-up.
• · Time tick interrupt
MICROVISION ARM7 교육
57
S3C44b0X Overview 7
•
•
•
•
•
•
•
•
•
•
•
General purpose input/output ports
· 8 external interrupt ports
· 71 multiplexed input/output ports
UART
· 2-channel UART with DMA-based or interruptbased operation
· Supports 5-bit, 6-bit, 7-bit, or 8-bit serial data
transmit/receive
· Supports H/W handshaking during transmit/receive
· Programmable baud rate
· Supports IrDA 1.0 (115.2kbps)
· Loop back mode for testing
· Each channel have two internal 32-byte FIFO for Rx and Tx.
MICROVISION ARM7 교육
58
S3C44b0X Overview 8
• DMA Controller
• · 2 channel general purpose Direct Memory Access controller
without CPU intervention.
• · 2 channel Bridge DMA (peripheral DMA) controller.
• · Support IO to memory, memory to IO, IO to IO with the Bridge
DMA which has 6 type's DMA
• requestor: Software, 4 internal function blocks (UART, SIO,
Timer, IIS), and External pins.
• · Programmable priority order between DMAs (fixed or roundrobin mode)
• · Burst transfer mode to enhance the transfer rate on the
FPDRAM, EDODRAM and SDRAM.
• · Supports fly-by mode on the memory to external device and
external device to memory transfer mode
MICROVISION ARM7 교육
59
S3C44b0X Overview 9
•
•
•
•
•
•
•
•
•
•
•
•
A/D Converter
· 8-ch multiplexed ADC.
· Max. 500KSPS/10-bit.
LCD Controller
· Supports color/monochrome/gray LCD panel
· Supports single scan and dual scan displays
· Supports virtual screen function
· System memory is used as display memory
· Dedicated DMA for fetching image data from system memory
· Programmable screen size
· Gray level: 16 gray levels
· 256 Color levels
MICROVISION ARM7 교육
60
S3C44b0X Overview 10
•
•
•
•
•
•
•
•
•
•
Watchdog Timer
· 16-bit Watchdog Timer
· Interrupt request or system reset at time-out
IIC-BUS Interface
· 1-ch Multi-Master IIC-Bus with interrupt-based operation.
· Serial, 8-bit oriented, bi-directional data transfers can be
made at up to 100 Kbit/s in the standard mode or up to 400
Kbit/s in the fast mode.
IIS-BUS Interface
· 1-ch IIS-bus for audio interface with DMA-based operation.
· Serial, 8/16bit per channel data transfers
· Supports MSB-justified data format
MICROVISION ARM7 교육
61
S3C44b0X Overview 11
• SIO (Synchronous Serial I/O)
• · 1-ch SIO with DMA-based or interrupt –based
operation.
• · Programmable baud rates.
• · Supports serial data transmit/receive operations 8bit in SIO.
• Operating Voltage Range
• · Core : 2.5V I/O : 3.0 V to 3.6 V
• Operating Frequency
• · Up to 66 MHz
• Package
• · 160 LQFP / 160 FBGA
MICROVISION ARM7 교육
62
S3C44b0X CLK Range
MICROVISION ARM7 교육
63
TEA BREAK
MICROVISION ARM7 교육
64
BW_Board 사용법
MICROVISION ARM7 교육
65
BW_BOARD사양
•
Main Board 사양
•
•
•
•
•
•
CPU : S3C44B0X - ARM7TDMI core 내장
8KByte internal cache/CLK-66Mhz
•
•
•
•
•
•
•
주변기능 : RS-232C - 1 port
Real Time Clock (battery 내장)
Switch input - 8 port
LED output - 8 port
Buzzer
8pin CPU JTAG port
120Pin socket (CPU Pin out)
Memory : 32MByte SDRAM(K4S561632)
1Mbyte flash memory(29LV800)
2Kbyte Serial EEPROM(24C16)
MICROVISION ARM7 교육
66
BW_BOARD외형
J1, J2 : CPU Pin Out
J10,J11: CPU JTAG
J8 : IDE HDD Connector
J5 : CPLD IO
J4 : CPLD JTAG
** J4,J5,J8은 CPLD_Kit
MICROVISION ARM7 교육
67
BOOT 방법
• ROM Boot
- ROM 소켓을 삽입후에 전원투입
- ROM에 0번지에 있는 프로그램이 실행됨
- ROM이 Bank0, Flash가 Bank1에 할당됨
• Flash Boot
- ROM소켓을 제거하고, J1의 79,80pin을
Jumper로 연결후 전원투입
- Flash의 0번지에 있는 프로그램이 실행됨
- Flash가 Bank0에 할당됨
MICROVISION ARM7 교육
68
ROM Boot 프로그램의 역할
• ROM 내장 프로그램(27C512기준-64KB)
ROM의 앞부분 30KB에는 프로그램이 들어
있음
ROM의 뒷부분 34KB에는 모니터프로그램
Image가 들어있음
ROM의 프로그램이 실행되면, 뒷부분의
34KB를 Flash의 0번지에 Write함.
MICROVISION ARM7 교육
69
Flash Boot 프로그램의 역할 1
• Flash Memory 내장프로그램(29LV800-1Mbyte)
Flash의 앞부분 2Kbyte는 BSP(Boot strap program)영역
BSP의 역할
- CPU reset후 각종 하드웨어 관련 데이터(IRQ, STACK,
MEMORY등)를 초기화함
- 그 다음 30Kbyte영역의 데이터(모니터프로그램)을
SDRAM영역인 0x0db00000으로 복사
- PC(Program counter)을 0x0db00000으로 Jump시킴
- 모니터 프로그램이 실행됨
MICROVISION ARM7 교육
70
Flash Boot 프로그램의 역할 2
• 모니터프로그램의 역할
- Board상의 SW1을 검사, SW1이 on되어 있으면 모니터
모드로 진입.
- SW1이 on이 아니면 main 프로그램 실행
Flash메모리의 0x10000번지부터의 내용을 SDRAM영역
인 0x0c000000번지로 복사후 0x0c000000를 call함
- Monitor 프로그램에서 할 수 있는 작업
1. PC로부터 binary image를 전송받아 Flash에 write함
2. Memory Dump, Program Check, RTC Time Setup
MICROVISION ARM7 교육
71
Main Program 실행
- Main Program은 모니터프로그램에서 call 되어 실행됨
- 기본 프로그램에서는 2개의 Interrupt가 항상 작동중임
1. RTC interrupt – LED의 점멸주기 2초
2. UART Receive Interrupt – PC에서 전송되는 문자를
입력받는 인터럽트
- 기타 Buzzer, I2C(24C16 test), Memtest등이 포함되어
있음
- 기타 Option과 관련된 CPLD, LCD테스트 루틴이 들어
있음
MICROVISION ARM7 교육
72
BW-BOARD의 프로그램
• 크게 4가지로 구성
1. BWROM : Flash에 모니터프로그램 write
2. BW_BOOT : Boot Strap Program
3. BW_MON : Monitor Program
- BW_BOOT+BW_MON이 BWFLASH로 모니터 프로그램.
- ROM의 내용중에 BWROM의 뒷부분에 BWFALSH이 위
치해야 한다.
4. BW_Main : Main프로그램
- 보통의 경우에 사용자는 BW_Main만을 수정후 컴파일
하면 된다.
MICROVISION ARM7 교육
73
BW_MON 화면
MICROVISION ARM7 교육
74
Monitor 프로그램 사용법 1
• WKCOM2, DNW의 역할
- PC에서 BW_BOARD로 Binary image 전송
- 전송할 binary image를 지정하면 해당 image
의 길이 4byte를 전송한후 binary image를 전송
하고, 최종적으로 checksum 2byte를 전송함.
- BW_BOARD의 모니터 프로그램은 수신한
Image데이터의 길이의 checksum을 통해서 전
송이 올바르게 되었는지를 확인한후 Flash의 지
정된 영역에 write함.
MICROVISION ARM7 교육
75
Monitor 프로그램 사용법 2
• Monitor프로그램상에서 Code와 Data의 차이점
- Code : BW_MAIN image
PC로부터 수신된 데이터의 내용을 Flash의 0x10000번지에 write함.
0x10000번지부터 4byte는 image의 길이, image의 마지막 2byte는
checksum.
모니터프로그램은 main프로그램을 길이와 checksum을 통해서 Flash상에 올
바른 main 프로그램 존재여부를 확인하고, 램영역으로 해당길이만큼 복사
한후에 실행함.
Code다운로드는 무조건 0x10000번지에 image를 write
- Data : PC로부터 수신된 데이터중에 image의 길이, checksum은
Flash에 write하지 않음
사용자 원하는 image data를 flash에 block단위로 write할수 있음
Flash의 0번지에 데이터를 write하는 경우 BSP가 overwrite되기때문
에 passwd를 물어봄.
0번지에 올바른 BSP와 Monitor프로그램이 write되지 않으면 Board는 Boot
되지 않음-이경우에는 제공된 ROM으로 flash에 모니터프로그램을 write해
야 한다.
MICROVISION ARM7 교육
76
BOARD Memory Map 1
MICROVISION ARM7 교육
77
각프로그램별 메모리구조
• BW_ROM
- CODE : 0x0
- DATA : 0xdf000000
• BW_MON
- CODE : 0x0db00000
- DATA : 0x0db10000
• BW_BOOT
- CODE : 0x0
- DATA : 0xdf000000
• BW_MAIN
- CODE : 0x0c000000
- DATA : 0x0c020000
MICROVISION ARM7 교육
78
BW-BOARD
개발환경 구축
MICROVISION ARM7 교육
79
ARM Compiler
•
•
•
•
•
•
•
•
•
•
•
•
•
•
❑ ARM
• ADS (Arm Developer Suite)
❑ IAR
• EWARM(Embedded Workbench for ARM)
❑ Gnu
• GCC
❑ Green Hills Software
• Multi 2000
❑ MetaWare
• MetaWare High C++
❑ Microcross
• GNUX-TOOLS
❑ Wind River
• Diab C/C++
MICROVISION ARM7 교육
80
ARM Compiler
• ARM
SDT 단종 – ARM 개발시 가장 많이 사용된 컴파일러
ADS 1.2 – 최신버전
Debugger Software – AXD (option)
• IAR
EWARM
Debugger Software – C-SPY (option)
• Linux
GCC / GDB
MICROVISION ARM7 교육
81
IAR EWARM Compiler
• IAR C Compiler
- 다양한 CPU 지원
- 탁월한 Optimize 성능
- C-SPY debugger
: wiggler를 이용한 저렴한 환경구축
: Terminal I/O를 이용한 Semihosting지원
MICROVISION ARM7 교육
82
Semihosting
• CPU와 PC의 debugging software상에 통신채
널 구축
- C언어의 <stdio.h>상의 char 와 file I/O를 PC
의 프로그램창을 통해서 송수신
- UART등의 별도의 통신채널이 구성되기 전 단계
에서 사용(Flash Fusing등의 목적)
MICROVISION ARM7 교육
83
CPLD
• Xilinx CPLD/FPGA 개발소프트웨어
Foundation Series – 단종
ISE Series – 상용 현재 5.2i버전
WebPack - 공개/무료다운로드
VHDL/Schemetic design -> bit stream으로변환
bit stream을 프린터포트를 이용한 JTAG으로 칩
에 download
MICROVISION ARM7 교육
84
Editor
• Source Editer
- 컴파일러 IDE 내장 Editor
- UltraEDIT등
command prompt 에서 batch file 사용
MICROVISION ARM7 교육
85
Image download
• 시리얼포트용 통신프로그램
- WKCOM2
dos 명령어
win98/dos 환경에서 사용
- dnw
windows 프로그램
Wkcom2/dnw는 삼성전자가 제공한 프로그램
MICROVISION ARM7 교육
86
Hardware 준비물
• RS232C – 1 port
• Parallel port
- CPLD option
- JTAG option
Jflash or wiggler
• JTAG Debugger
- Magic
MICROVISION ARM7 교육
87
C소스 컴파일/실행 과정 1
순수 Binary를 얻기 위한과정
1. Source Edit
2. Object code 생성
3. Link -> to intel extended Hex 파일(.a79)
- 각모률별 메모리 영역 설정(.xcl화일)
4. Hexbin 실행 -> binary화일을 얻음
5. Binary화일을 해당 번지에 download후 실행
IAR EWARM기준
MICROVISION ARM7 교육
88
C소스 컴파일/실행 과정 2
• Debug(JTAG Debug)를 위한 실행 image 를 얻기 위한
과정
1. Source Edit
2. Object code 생성
3. Link -> to Debug info 파일(.d79화일)
- 각모률별 메모리 영역 설정(.xcl화일)
4. C-SPY 실행 -> .d79화일이 target으로 자동으로
download됨
5. C-SPY 디버거를 이용해서 디버깅 – source line
debugging 가능
IAR EWARM기준
MICROVISION ARM7 교육
89
C소스 컴파일/실행 과정 3
• Debug(C-SPY)를 위한 실행 image 를 얻기 위한과정
1. Source Edit
2. Object code 생성
3. Link -> to elf/dwart 파일(.elf화일)
- 각모률별 메모리 영역 설정(.xcl화일)
4. 외부 Debugging S/W실행(EDB등)실행
-> 디버그화일을 .elf로 지정
5. 외부 Debugef로 다운로드 후 debug
IAR EWARM기준
MICROVISION ARM7 교육
90
BW-BOARD 기본사용법
MICROVISION ARM7 교육
91
BW-BOARD 기본사용법
• DNW 실행 - Serial속도 115200
• 모니터모드
- SW1을 누른상태에서 전원투입/RESET
• 메인프로그램
- 전원투입/RESET
DNW화면상에 관련내용 표시
MICROVISION ARM7 교육
92
BW_MON 화면
MICROVISION ARM7 교육
93
Download Code & Data
• Download
1. Download 메뉴선택
2. 화면에 ‘STATUS’가 나타나면 dnw의 메뉴에서 ‘Serial Port’>’Transmit’선택
3. 화일열기창이 나타나면 원하는 image화일(.bin)을 선택
4. ‘STATUS’에 진행사항 표시
5. Download완료후
- Code 다운로드일경우에
0x10000번지에 데이터 Write
- Data 다운로드일경우
DATA Write번지 입력,(0x0번지일경우 Passwd입력)
6. Flash Write 상황을 표시
7. 메뉴 복귀
MICROVISION ARM7 교육
94
ROM보드 사용
• 통신용 시리얼프로그램 실행(DNW, Hyperterminal등)
• Board의 J1 커넥터의 Pin 79,80번 점퍼제거
• 롬보드 삽입
- 롬의 14/15Pin(16/17Pin)이 J1커넥터의 79,80번핀 방향쪽에 맞도
록 삽입
• 전원투입
• 통신화면 관찰
- 부팅메시지와 Flash Write 진행사항 표시
- 오류여부 확인
• 전원차단
• Board의 J1 커넥터의 Pin 79,80번 점퍼삽입
• 전원투입(or Reset)
• 모니터 프로그램 실행 확인
MICROVISION ARM7 교육
95
IAR EWARM 사용법
MICROVISION ARM7 교육
96
IAR Compiler 사용법
• 프로젝트 파일 (.pew)파일을 더블클릭
• Compile/Make/Build All을 선택해서 소스컴파일
- Option->Xlink에서 원하는 Output 선택
Output Format : ‘intel-extended’지정
• 출력폴더(Project/Debug/Exe)에 .d79화일생성
• Error발생시 Message창에서 Error내용확인
• .d79화일은 intel-hex format
• Hexbin.exe을 이용해서 hex화일을 bin화일로 변경
• 해당 bin image을 dnw를 통해 board로 download
• BW_BOARD의 Image는 모니터프로그램에서 Code영역
으로 다운로드후 실행
MICROVISION ARM7 교육
97
BWFASLH(모니터프로그램)
생성및 사용법
•
•
•
•
•
•
•
•
Bw_boot를 컴파일
bw_boot.d79를 얻은후 hexbin을 이용하여 bw_boot.bin을 생성
Bw_mon을 컴파일
bw_mon.d79를 얻은후 hexbin을 이용하여 bw_mon.bin을 생성
Command Prompt 명령어인 Debug를 이용하여 bw_boot.bin과
bw_mon을 합친다.
debug (x86 debuger)를 이용하여 앞부분 2KB영역에는
bw_boot.bin을 위치시키고, 다음 32KB 영역에 bw_mon을 위치시
킨후에 bwflash.bin으로 write.
Bwflash.bin은 모니터프로그램에서 data로 download한후 target
address에서 0x0번지 입력
Passwd 입력요구시에 Passwd입력
Flash에 image write
보드 RESET
MICROVISION ARM7 교육
98
ROM Image 생성
• Bw_rom을 컴파일, hexbin을 이용하여 BW_ROM.BIN을
생성
• ‘Debug < mkbwrom.dbg’를 이용하여 BW_ROM.BIN과
BWFLASH.BIN을 하나의 Image로 합쳐 ROM.BIN으로
Write.
• ROM.BIN의 구성
BW_ROM.BIN(28K)+BW_BOOT(2K)+BW_MON(32K)
• ROM.BIN을 Rom Writer를 이용하여 EPROM에 Write
•
MICROVISION ARM7 교육
99
BW_BOARD(Main)의 사용
•
Bw.c의 Main함수상의 문자열을 확인하여 해당 문자열을 입력하면 해당 동
작을 한다.
•
‘m’키를 누르면 메뉴가 표시됨
---------------------------------------------------• BWBOARD Program Menu
1:buzz_on
2:buzz_off
3:Test_Iic
4:Memory Test
5:Test_Timer
6:ide__test
7:ide_read_test
8:ide_write_test 9:Test_Lcd
10:MoveViewPort 11:volt_reset
12:test1
13:test2
14:test3
Select the function to test?
---------------------------------------------------원하는 번호를 입력하면 해당 메뉴가 실행된다.
MICROVISION ARM7 교육
100
실습과제 1
BW_BOARD의 CLK변경
힌트 option.h 화일상에 MCLK값을 변경
#define MCLK 66000000 <- 값변경
변경확인은 MCLK항목 확인
--------------------------------------BW Main Ver 0.99 2003-06-30 MCLK=66MHz
Made by [email protected]
---------------------------------------
- intel-hex로 컴파일한후 hexbin을 이용해서 .bin화일을
얻은후에 dnw에서 code down으로 download하고, 실
행확인
MICROVISION ARM7 교육
101
실습과제 2
• LED의 점멸주기 변경
- Bw.c의 init_rtc함수의 rTICINT의 값을 변경
- 44b0x datasheet의 rtc관련 부분을 참고해서 변
경
- intel-hex로 컴파일한후 hexbin을 이용해서 .bin
화일을 얻은후에 dnw에서 code down으로
download하고, 실행확인
MICROVISION ARM7 교육
102
HARDWARE 개발 개요
MICROVISION ARM7 교육
103
GENERAL BLOCK
MICROVISION ARM7 교육
104
• 회로도
MICROVISION ARM7 교육
105
• 회로도
MICROVISION ARM7 교육
106
44b0x의 특징
•
•
•
•
•
•
•
•
•
•
•
•
•
•
· 2.5V Static ARM7TDMI CPU core with 8KB cache . (SAMBA II bus
architecture up to 66MHz)
· External memory controller. (FP/EDO/SDRAM Control, Chip Select
logic)
· LCD controller (up to 256 color DSTN) with 1-ch LCD-dedicated DMA.
· 2-ch general DMAs / 2-ch peripheral DMAs with external request pins
· 2-ch UART with handshake(IrDA1.0, 16-byte FIFO) / 1-ch SIO
· 1-ch multi-master IIC-BUS controller
· 1-ch IIS-BUS controller
· 5-ch PWM timers & 1-ch internal timer
· Watch Dog Timer
· 71 general purpose I/O ports / 8-ch external interrupt source
· Power control: Normal, Slow, Idle, and Stop mode
· 8-ch 10-bit ADC.
· RTC with calendar function.
· On-chip clock generator with PLL.
MICROVISION ARM7 교육
107
HARDWAR개발에서 중요한점
•
•
•
•
•
•
전원
CLOCK LINE
CPU의 연산능력
Memory
통신채널
부품가격 및 기타
MICROVISION ARM7 교육
108
HARDWAR개발에서 중요한점
전원
• 전원의 평균용량은 최대용량의 60%가 적
정
예) 평균 1.2A를 소비한다면 2A용량의 입력
필요(DC어탭터/linear Regulator)
• 다양한 전원전압 (2.5V/3.3V/5V)의 혼용에
따른 확실한 전원분리 및 Noise로부터 안
정적인 전원확보
• 장기적인 전원공급장치의 안정성확보
MICROVISION ARM7 교육
109
HARDWAR개발에서 중요한점
CLOCK LINE
• EMI인증의 주요 관점
• 고조파가 발생하지 않도록 임피던스매칭
이 필요
• 안정적인 CLK소스 및 CLK 기준전원 확보
- PLL을 통한 CLK체배시스템에서는 양질
의 전원공급이 아주 중요함
• 클럭이 불안하면 시스템이 불안해짐
MICROVISION ARM7 교육
110
HARDWAR개발에서 중요한점
CPU의 연산능력
• 타겟시스템에 맞는 적절한 CPU선정
- ARM CPU에도 여러가지 core와 각 생산업체에
따른 다양한 선택이 가능하다.
• CPU내장기능에 대한 확인
SDRAM/UART/RTC/DMA/IRQ/ADC/IIC/IIS등
• CPU가 지원하지 않는 기능은 어떻게 처리할것
인가?
• OS의 적용가능 여부
MICROVISION ARM7 교육
111
HARDWAR개발에서 중요한점
Memory
• MAIN RAM
- SRAM 고비용/사용하기 편함
- SDRAM 저비용/사용하기 어려움
• MAIN ROM
- EPROM/FLASH
• Volatile Memory의 적용검토
MICROVISION ARM7 교육
112
HARDWAR개발에서 중요한점
통신채널
- Board to Board
•
•
•
•
JTAG
UART(RS-232C)
ETHERNET
USB
- In Board(Chip Level)
•
•
•
•
IIC
IIS
SIO
General I/O
MICROVISION ARM7 교육
113
HARDWAR개발에서 중요한점
부품가격 및 기타
• 양산중인 부품을 선택할것
• 범용부품을 선택할것
• 대체품이 많은 부품을 선택
예) 29LV800 – AMD/Hynix에서 양산
SDRAM은 반드시 8bit data bus를 선택
MICROVISION ARM7 교육
114
Compiler 이해/활용
IAR Embedded Workbench for
ARM Compiler의 이해/활용
MICROVISION ARM7 교육
115
IAR EWARM의 구성
•
•
•
•
•
C/C++ Compiler
Assembler
Linker
Library
C-SPY(Debugging S/W)
MICROVISION ARM7 교육
116
IAR EWARM의 특징
•
•
•
•
탁월한 Optimize 성능
IAR COMPILER - 다양한 CPU를 지원
간편한 IDE
저렴한 Debugging 비용
MICROVISION ARM7 교육
117
IAR EWARM의 사용법
(BW_BOARD 컴파일 기준)
• 새로운 프로젝트 구성
File -> New -> project 확인 -> project name
및
folder 선택
• 소스 파일(.s,.h,.c)을 프로젝트에 등록
Edit or
Target(‘Debug’)에서 오른쪽마우스 클릭->Add
files
-> 소스파일 등록
• Option 조정
‘Debug’에서 오른쪽마우스 클릭 -> Options 선택
MICROVISION ARM7 교육
118
IAR EWARM의 사용법
Option 조정 - General
• Processor – ARM7TDMI
• Processor mode - ARM
• Endian - little
MICROVISION ARM7 교육
119
IAR EWARM의 사용법
Option 조정 – ICCARM/AARM
• ICCARM – C언어 컴파일러 옵션지정
• AARM – Assembler 옵션지정
- 특별한지정내용 없음
- List화일을 보려면 List항목 조절
MICROVISION ARM7 교육
120
IAR EWARM의 사용법
Option 조정 – XLINK 1
• XLINK의 옵션조절은 아주 중요함.
• 사용자는 XLINK에서 지정하는 내용-특히 Include탭에서
지정하는 모든 내용을 숙지해야 함
• Output File 지정
1. C-SPY에서 디버깅을 하려면 ‘Debug Info’ or Debug
Info with Terminal I/O를 지정
2. ARM Tool 계열(Magic,Multi-ICE등)에서 디버깅을 하려
면 ‘Other’의 ‘elf/dwart-Arm Compatible’를 지정
3. 순수Binary를 얻으려면 ‘Other’의 ‘intel-extended’를 지
정. .a79라는 hex화일을 얻으면 hexbin을 통해서 bin으
로 변환
MICROVISION ARM7 교육
121
IAR EWARM의 사용법
Option 조정 – XLINK 2
• List Tab의 Generate link list과 Segment map을 반드시
체크
• Include Tab
- Ignore CSTARTUP in library를 반드시 체크
- XCL File name 영역에서 Override default를 체크 후
XCL file오른쪽의 버튼을 클릭해서 XCL화일을 지정
• XCL File Configuration에서
1. Exception vector addresses를 C000000-C0000FF로
지정
2. Internal ROM 영역을 C000100-C01FFFF로 지정
3. Internal RAM 영역을 C020000-DFFFFFF로 지정
4. 확인버튼을 눌러 새로운 이름으로 저장
MICROVISION ARM7 교육
122
IAR EWARM의 사용법
Option 조정 – C-SPY
• C-SPY
Setup탭에서 Driver를 선택
Runto Main은 선택하지 않음
1. EPI Magic 이용시
- RDI 선택
- RDI탭에서 Magic 해당 DLL(rdimajic.dll)을 지정
2. Macraigor Wiggler이용시
- Macraigor를 선택
- Macraigor탭에서 OCD Interface device 를 ‘Wiggler’
을 선택
MICROVISION ARM7 교육
123
IAR EWARM의 사용법
Binary Image 생성
• ‘Debug’에서 오른쪽 마우스 버튼
- make or build all 선택
1. make – 마지막으로 make된 이후 변경된 소스화일들
만을 컴파일한후 link한다.
시간이 절약됨
2. Buile All – 모든 소스화일들을 다시 컴파일한후 link한
다.
- link 단계까지 error가 없으면 options의 xlink에서 지정
된 file format으로 binary image가 생성된다.
이렇게 생성된 image는 bw_board에 시리얼포트를 이용하
여 직접 다운로드하거나 debugger을 이용하여 다운로드
한후 실행
MICROVISION ARM7 교육
124
IAR EWARM의 사용법
XCL구성방법
• XCL의 구성
- XCL은 생성된 image의 실행영역을 지정하는데 사용됨
- 보통의 경우 INTVEC, ICODE, NEARFUNC_T, NEARFUNC_A,
FARFUNC_T, FARFUNC_A, INITTAB, HUGE_ID, HUGE_C,
HUGE_I, HUGE_Z, HEAP의 영역을 지정한다. (각각의 영역에 대
한 자세한 사항은 Embedded C언어 입문에서 해설)
- EWARM의 화면에서 xcl을 지정하면 txt화일로 xcl화일이 생성됨.
- link단계에서 linker가 이 xcl화일 을 참조하여 해당영역에 코드와 데
이터를 각각 배치한다.
- ‘Ignore CSTARTUP in library’를 체크하지 않으면 linker는 스스로
startup code를 작성한후 main함수를 호출한다.
- ‘Ignore CSTARTUP in library’를 체크하면 프로그래머가 asm화일
로 startup code를 작성해야 한다.
MICROVISION ARM7 교육
125
IAR EWARM의 사용법
MAP 파일
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
또한
•
•
•
•
•
•
MAP 파일의 가장 끝부분에는 다음과 같이 각 영역의 주소와 길이가 표시된다.
SEGMENT
SPACE START ADDRESS END ADDRESS
=======
===== ============= ===========
INTVEC
0C000000 - 0C000047
ICODE
0C000100 - 0C000177
NEARFUNC_T
0C000178
NEARFUNC_A
0C000178 - 0C003633
FARFUNC_T
0C003634
FARFUNC_A
0C003634 - 0C008BD3
INITTAB
0C008BD4 - 0C008BEB
HUGE_ID
0C008BEC - 0C008C77
HUGE_C
0C008C78 - 0C00EC87
HUGE_I
0C020000 - 0C02008B
HUGE_Z
0C02008C - 0C22102F
HEAP
0C221030
프로그램의 길이도 표시된다.
SIZE TYPE ALIGN
==== ==== =====
48 com 4
78 rel 2
dse 0
34BC rel 2
dse 0
55A0 rel 2
18 rel 2
8C rel 2
6010 rel 2
8C rel 2
200FA4 rel
rel 2
2
35 612 bytes of CODE memory
2 101 296 bytes of DATA memory
24 756 bytes of CONST memory
Map 파일을 통해서 사용자는 프로그램 저장/실행에 필요한 메모리의 크기를 알수 있다.
프로그램저장 – ROM Size 0xEC87(60551Byte) 필요
프로그램실행 – RAM 영역 0x22102f(2232367Byte) + Stack + Heap용량
MICROVISION ARM7 교육
126
Segment 설명 1
MICROVISION ARM7 교육
127
Segment 설명 2
MICROVISION ARM7 교육
128
프로그램의 실행
• INTVEC or ICODE영역이 프로그램의 시작위치
• C언어의 메인 함수 실행전에 준비해야 할작업
- 데이터영역(RAM)에 대한 적절한 조치
초기화 관련 영역
(HUGE_ID,HUGE_Z,HUGE_N) 처리
- STACK 설정 (option)
• Main함수 호출
MICROVISION ARM7 교육
129
Compile 방법
• Link
각각의 Object화일들을 모아서 하나의 프로그램이나 라
이브러리를 만드는 작업
• Compile : C Source -> ASM -> Object
• Make :
마지막 link작업후 수정된 C/ASM소스화일만 다시 컴파
일후 link
• Build All
모든 소스화일을 다시 컴파일후 link
MICROVISION ARM7 교육
130
IAR EWARM의 사용법
C-SPY 디버거 사용
• 프로그램을 디버깅하려면 해당 디버깅 장
비를 PC와 연결한후 Project메뉴의 debug
를 선택
MICROVISION ARM7 교육
131
TEA BREAK
MICROVISION ARM7 교육
132
Embedded C언어 입문
MICROVISION ARM7 교육
133
Embedded C 실행 메모리의 구성
• CODE영역 – ROM영역
- 실행코드 영역
- CONST(상수) DATA 영역
• DATA영역 – RAM영역
- STATIC DATA ( 초기값을 갖는 데이터)
- Zero Initialize DATA ( 초기에 값이 0으로 지정
되는 데이터)영역
- Heap 영역
- STACK영역
MICROVISION ARM7 교육
134
컴파일러가 생성해내는 순수
Binary의 구조
1. 실행코드영역 – INTVEC, ICODE, NEARFUNC_T,NEARFUNC_A,
FARFUNC_T,FARFUNC_A
2. RAM INIT정보 영역 – 실행시 램으로 복사할 영역에 대한정보와 램
에서 0으로 write할 영역의 정보
3. Initalize Data 영역 – 초기값이 주어진 데이터로 프로그램 실행시에
램으로 복사됨
4. Const 영역 – 상수영역으로 롬 영역의 마지막부분
•
프로그램이 실행되면 ICODE영역(__segment_init함수)에서 RAM
INIT정보를 읽어서 ID영역을 램의 앞부분으로 복사(컴파일시에 초기
값이 주어져있음)한후 RAM INIT정보에 의해 ID영역 뒷부분의 일정
부분을 0(Zero)로 write한다.
MICROVISION ARM7 교육
135
순수 Binary 구조 예
int sec_tick;
static int delayLoopCount=400;
왼쪽 소스에서 프로그램 초기단계에
sec_tick변수는 램의 Zero Initialize
DATA 영역에 위치하고,
delayLoopCount변수는 Initialize
DATA 영역에 400이란 값을 가진채로
존재한다.
void Delay(int time)
{
int I;
int adjust=0;
if(time==0)
{
함수내에서 선언된 변수 i 와 adjust의
time=200;
위치는 Delay 함수가 실행되는 시점에
…….
서 스택영역 할당되었다가 delay함수가
rWTCON=((MCLK/1000000-1)<<8)|
(2<<3)|(1<<5);
종료되면 없어진다.
}
for(;time>0;time--)
If/For/대입문등은 code로 컴파일되어
for(i=0;i<delayLoopCount;i++);
code영역(FARFUNC_A)에 위치한다.
if(adjust==1)
{…………….
delayLoopCount=8000000/(i*64);
Delay함수의 인자 time은 register나
//200*400:64*i=1*x:100 ->
x=80000*100/(64*i)
stack을 통해서 Delay를 부르는 함수로
}
부터 값이 전달된다.
}
MICROVISION ARM7 교육
136
ARM 관련 File FORMAT
•
•
•
•
•
•
ELF - Executable and Linking Format
여러CPU플랫폼에서 많이 사용하는 형식
DWARF 1/2 – ELF 포멧에 Symbolic Debug 정보가 포함된 형식
보통 ELF/DWARF1 or ELF/DWARF2형식으로 불린다.
AXF - ARM Executable Format. ARM Linker가 생성하는 포멧
AIF - ARM Image Format. ARM 컴파일러 초기 버전에서 생성된 포멧
AOF - ARM Object Format
COFF -Common Object File Format. GNU Based
Format. ARM Debugger는 사용하지 않음.
ARM Debugger는 AXF형식이나 ELF형식을 사용함.
일부 Debugger S/W는 AXF형식만을 지원하는 경우가 있다.
현재의 ARM 표준 포멧은 ELF형식임.
• 위의 여러 형식은 순수 Binary Image에 O/S or debuger 관련 여러정보들
이 포함된 형식이다.
MICROVISION ARM7 교육
137
HEAP & STACK Memory
• HEAP
- 프로그램 실행중 프로그램이 할당하거나 해제하는 메모리
- 프로그램 or 사용자의 입출력 데이터의 양에 의존해서 생성되거나
해제됨
- MMU를 갖는 OS기반의 시스템에서는 OS가 HEAP메모리 관련 루
틴(할당/해제)을 제공
- Firmware기반의 시스템에서는 프로그래머가 직접 관리하는 영역
• STACK
- 컴파일&링크시에 이미 용량이 결정됨
- CALL/RETURN 주소 보관
- ASM자체 혹은 C소스에서 ASM으로 변환된 소스 상의 임시변수영역
- 지역변수(함수내에서 선언된 변수)등이 존재하는 영역
- STACK Register에 의해서 관리됨
- ARM core 에는 각모드별로 별도의 Stack영역이 존재
- EWARM Compiler에서는 .lst화일에서 stack의 사용량을 볼수있음
MICROVISION ARM7 교육
138
STACK MEMORY 의 사용예
• Static Call Graph for image
C:\kohyc\bw_board\arm\bw_board\ads12\bw_b
oard\bw_board_Data\Debug\bw_board.axf
• Maximum Stack Usage = 636 bytes
• Call chain for Maximum Stack Depth:
Init -> Main -> ide_read_test -> Uart_GetIntNum ->
Uart_GetString -> Uart_Printf -> vsprintf -> __vfprintf
-> _printf_display -> _ll_udiv10
(From ADS Comiler link output)
MICROVISION ARM7 교육
139
Embedded C언어 팁
•
•
-
컴파일러의 Optimize기능 사용
절대적으로 주의해서 사용할것
‘volatile’ 키워드에 익숙할것
CPU가 제공하는 data영역의 memory cache와 optimize의 상관관계를 파악할 것
컴파일러의 내장 lib사용
해당 함수가 BSP와 호환하는가 확인
컴파일러가 제공하는 BSP와는 호환하지만 독자적인 BSP와는 호환하지 않는 경우가
대부분임
- printf()함수의 사용 필요성 확인
printf를 사용하지 않으면 코드의 크기는 상당히 감소
• Memory Align 확인
- 8/16/32bit 단위의 코드와 데이터의 위치확인
- 해당Address가 해당 bit를 지원하는지 확인
• Main 함수 실행까지의 모든 절차를 숙지할것
• Code Cache메모리를 활용하는 코딩
MICROVISION ARM7 교육
140
Embedded 시스템 프로그램
유의점 1
• Embedded 프로그램의 실행은 단일 프로세스가
아니다.
- CPU의 기능을 프로그램이 단독적으로 사용하지
않는다.
- IRQ,DMA,I/O등의 Low level 하드웨어 자원이
CPU의 Clock를 점유한다.
• 자원에 대한 정확한 정의와 조절 및 사용법에 의
해서만 시스템이 동작한다.
• 코드 사이즈가 메모리 가격에 해당한다.
MICROVISION ARM7 교육
141
Embedded 시스템 프로그램
유의점 2
• 특정함수의 실행시간을 CHECK
예 1)
__irq void Uart0RxInt(void)
{
U8 rchar;
rI_ISPC |= BIT_URXD0;
rchar=RdURXH0();
PutCharToUart0RxBuf(rchar);
}
위의 예에서 RdURXH0(), PutCharToUart0RxBuf()함수의 실행시간이
다음번 문자가 들어오기 전에 끝나는가를 확인
MICROVISION ARM7 교육
142
Embedded 시스템 프로그램
유의점 3
•
IRQ함수는 최소한의 실행시간만 사용하도록 설계
예2)
volatile char tick_count, sec_tick ;
__irq void Rtc_Tick(void)
{
int savesec;
rI_ISPC|=BIT_TICK;
tick_count++;
if ((tick_count&0x0f)==0x0f) { // 1/4 sec
savesec=sec;
read_time();
if (savesec!=sec) {
sec_tick = 1;
tick_count=0;
}
}
}
위의 예에서 set_tic은 1초의 변화를, tick_count는 1/4초의 변화만 보여준다. 변화의 감지와 그에 따
른 실행은 일반모드에서 처리해야 한다.
MICROVISION ARM7 교육
143
Embedded 시스템 프로그램
유의점 4
• Stack Memory 영역을 Pointer로 엑세스 하지 말것
- 잘 동작하지만 스택을 갉아먹음
– 임시적으로 사용하는 전역변수 생성
예)
void put_str(char* str)
{
U8 hanbuff[32];
U8 d1,d2, *font,dd3;
…
font=&hanbuff[0];
…
}
MICROVISION ARM7 교육
144
보드 Bootloader
보드자원관리 IRQ/MEM
MICROVISION ARM7 교육
145
bw_boot.s
• SOURCE
MICROVISION ARM7 교육
146
bw_boot.s
• SOURCE
MICROVISION ARM7 교육
147
CPU VECTOR TABLE
reset B
B
B
B
B
B
B
B
?ResetHandler
?HandlerUndef
?HandlerSWI
?HandlerPabort
?HandlerDabort
.
?HandlerIRQ
?HandlerFIQ
MICROVISION ARM7 교육
148
44B0X의 내장 IRQ Vector
• Interrupt Sources Vector
Address
• EINT0 0x00000020
• EINT1 0x00000024
• EINT2 0x00000028
• EINT3 0x0000002c
• EINT4/5/6/7 0x00000030
• INT_TICK 0x00000034
• INT_ZDMA0 0x00000040
• INT_ZDMA1 0x00000044
• INT_BDMA0 0x00000048
• INT_BDMA1 0x0000004c
• INT_WDT 0x00000050
• INT_UERR0/1 0x00000054
• INT_TIMER0 0x00000060
• Interrupt Sources Vector
Address
• INT_TIMER1 0x00000064
• INT_TIMER2 0x00000068
• INT_TIMER3 0x0000006c
• INT_TIMER4 0x00000070
• INT_TIMER5 0x00000074
• INT_URXD0 0x00000080
• INT_URXD1 0x00000084
• INT_IIC 0x00000088
• INT_SIO 0x0000008c
• INT_UTXD0 0x00000090
• INT_UTXD1 0x00000094
• INT_RTC 0x000000a0
• INT_ADC 0x000000c0
MICROVISION ARM7 교육
149
RESET 절차
1. Board Reset
2. 0x0번지의 ‘reset B
?ResetHandler’
에 의해 ResetHandler로 Branch
3. Watch dog timer disable
4. Port Test(I/O Port E)
– CPU의 정상작동테스트
5. CLOCK SET(IN:20Mhz, OUT:66Mhz)
6. BDMA 초기화
7. Memory 초기화
8. Stacks 초기화
- 각각의 동작모드에 대한 스택 초기값 지정
- BW_BOARD는 단일프로세스이므로 Supervisor모드로 동작
9. IRQ SETUP
- IRQ 관련 ADDRESS 셋업
10. 메모리의 0x800번지부터의 데이터를 0x0db00000번지로 복사 (size 0x8800)
- 롬의 2Kbyte위치부터 34Kbyte사이즈인 bw_mon(모니터프로그램)을 램영역으로
복사
11. 0x0db00000번지로 JUMP (bw_mon실행)
MICROVISION ARM7 교육
150
44b0x의 IRQ 설정
• ARM의 Vector Address는 0x0에서 시작
• 0x0번지는 롬영역으로 Vector Table의 수정이 불가능
• 일부 ARM CPU는 remap기능을 이용해서 0x0번지(bank0)에 있는
롬영역과 (bank1)에 있는 램영역을 부팅후 바꿔서 0x0번지의
Vector Address를 수정가능하도록 함
• 44b0x는 롬의 IRQ Vector로 실행이 옮겨지면 램의 특정번지를 읽어
서 읽혀진 해당번지로 Jump
• 따라서 램의 마지막 영역에 2번째의 vector table이 존재한다.
• IRQ를 실행할때는 동작모드가 SVC/USER모드에서 IRQ모드로 바뀌
기때문에 스택역시 바뀌게 된다. 이에 따른 스택저장/재생 작업을
macro 함수로 처리한다.
MICROVISION ARM7 교육
151
44b0x의 IRQ 실제 실행 I
• RESET 절차의 9번항목에 의해 IRQ의 처리 루틴은 HandleIRQ항목으로 지정
-----------------------------ldr
r0,=HandleIRQ
ldr
r1,=IsrIRQ
str
r1,[r0]
-----------------------------이후 IRQ가 발생하면 실행은 무조건 IsrIRQ루틴이 실행됨.
IsrIRQ루틴은 I_ISPR register를 통해서 어떤 IRQ가 발생했는지 파악함.
IRQ의 source를 파악하면 램의 vector table에서 해당 주소를 읽어서 해당주소로 JUMP
bw_boot.s의 끝부분의 vector table list는 램의 마지막부분(0x0dffff00)부터 할당된다.
또한 이 list는 ‘44b.h’파일의 /* ISR */과 정확하게 일치한다.
MICROVISION ARM7 교육
152
44b0x의 IRQ 실제 실행 2
예)
//44b.h의 설정
#define pISR_URXD0
(*(unsigned *)(_ISR_STARTADDRESS+0x3c))
C언어에서는
__irq void Uart0RxInt(void)
{
U8
rchar;
rI_ISPC |= BIT_URXD0;
…
}
void init_uart(void)
{
pISR_URXD0=(unsigned)Uart0RxInt;
…
}
C언어에서 위와같은 소스로 컴파일하면 램의 뒷부분인 ISR_STARTADDRESS영역의 pISR_URXD0 위치에
Uart0RxInt()함수의 주소가 위치한다.
Uart0 IRQ가 발생하면 하드웨어 Vector table의 ‘B ?HandlerIRQ’를 통해서 IsrIRQ루틴으로 제어가
이동한후 I_ISPR레지스터를 통해서 IRQ의 원천이 Uart0인것을 확인한후 HandleUTXD0(pISR_URXD0)를 읽어
Uart0RxInt()함수가 실행된다. Uart0RxInt()가 종료되면 IsrIRQ의 으로 리턴한다음 스택을 정상화 시키고 기존에
수행하던 작업을 수행한다.
MICROVISION ARM7 교육
153
Memory 초기화
•
•
44b0x는 메모리의 구조를 CPU에게 알려주어야 한다.
따라서 다음과 같은 정보를 CPU의 Memory Set Register에 write해야 한다.
DCD
DCD
DCD
DCD
DCD
DCD
DCD
DCD
DCD
DCD
0x01001110
0x00000700
0x00000700
0x00000700
0x00000700
0x00000700
0x00000700
0x00018001
0x00018001
0x00AC0000
DCD 0x00000000
DCD 0x00000020
DCD 0x00000020
;BANKCON0 BOOT ROM
;BANKCON1 FLASH
;BANKCON2 NONE
;BANKCON3 CPLD
;BANKCON4 NONE
;BANKCON5 NONE
;BANKCON6 SDRAM
;BANKCON7 NONE
;REFRESH RFEN=1, TREFMD=0, trp=3clk, trc=5clk,
;tchr=3clk,count=1019
;SCLK power down mode, BANKSIZE 32M/32M
;MRSR6 CL=2clk
;MRSR7
MICROVISION ARM7 교육
154
모니터프로그램의 실행
•
1.
BW_MON의 실행절차
bw_mon_init.s의 ResetHandler가 실행된다.
__segment_init 함수는 INITTAB영역의 정보를 읽어서 HUGE_ID영역을
HUGE_I영역으로 복사하고, HUGE_Z을 0(zero)로 write한다.
__segment_init 함수는 ‘ Program Files\IAR Systems\Embedded
Workbench 3.2\ARM\src\lib\segment_init.c’에 존재하는 컴파일러
에 내장된 라이브러리함수임
2.
Main 함수로 Jump
- 이로서 bw_mon.c의 Main함수가 호출이 된다.
- bw_mon_init.s에서 특별한 stacks조작이나 IRQ관련조작을 하지 않았기
때문에 bw_boot.s상에서 지정한 stacks과 IRQ의 내용이
bw_mon에서 그대로 적용된다.
3. bw_mon.c의 Main함수의 중간부분(Banner Print직전)에서 get_key()함수로
Key입력을 검사하여 sw1이 눌러져 있지 않으면
RUN()함수를 실행한다. SW1이 눌러져 있으면 관련정보를 표시하고, 모니터
모드로 진입한다.
MICROVISION ARM7 교육
155
BW_BOARD의 실행
1. RUN()함수의 실행
flash memory의 0x10004번지부터 program
size만큼의 영역을 0x0c000000으로
복사한 후checksum이 맞으면 0x0c000000으로
JUMP를 한다. 0x10004부터는 bw_board의
Main프로그램 image가 존재하게 된다. 따라서
Main image가 램영역으로 복사된두 실행된다.
BW_BOARD의 bw_init.s도 bw_mon_init.s와 동
일한 절차로 bw.c에 있는 Main을 호출한다.
MICROVISION ARM7 교육
156
각각의 BIN Image 생성방법 1
•
BW_FLASH생성
BW_BOOT.BIN과 BW_MON.BIN을 합친화일
Mkflash.dbg의 내용 – MS-DOS x86 debug에서 실행되는 스크립트 화일
F 4000:0 ffff ff
N bw_boot.bin
L 4000:0000
N bw_mon.bin
L 4000:800
RCX
0
RBX
1
N bwflash.bin
W 4000:0
Q
; memory 4000:0번지부터 ffff번지까지 ff로 fill
; Name=bw_boot.bin
; Load 4000:0000
; Name=bw_mon.bin
; Load 4000:800
; read CX
; read BX
; Name bwflash.bin
; write 4000:0부터 64Kbyte
; Quit
0-0x7ff : bw_boot.bin (2Kbyte)
0x0800-0x87ff : bw_mon.bin (32Kbyte)
0x8800-0xffff : dummy (28Kbyte)
MICROVISION ARM7 교육
157
각각의 BIN Image 생성방법 2
•
ROM file생성
BWROM.BIN과 BW_FLASH.BIN을 합친화일
Mkbwrom.dbg의 내용 – MS-DOS x86 debug에서 실행되는 스크립트 화일
F 4000:0 ffff ff
N bwrom.bin
L 4000:0000
N bwflash.bin
L 4000:7800
RCX
0
RBX
1
N rom.bin
W 4000:0
Q
; memory 4000:0번지부터 ffff번지까지 ff로 fill
; Name= bwrom.bin
; Load 4000:0000
; Name=bwflash.bin
; Load 4000:7800
; read CX
; read BX
;
; Name=rom.bin
; write 4000:0부터 64Kbyte
; QUIT
0-0x77ff : bwrom.bin (28Kbyte)
0x7800-0xffff : bwflash.bin (34Kbyte)
0x7800-0x8000 : bw_boot.bin (2Kbyte)
0x8000-0xffff : bw_mon.bin (32Kbyte)
MICROVISION ARM7 교육
158
BW_ROM 구성
• 1. BW_BOOT의 bw_boot.s와 동일한 구조로 시스템 초기화
• 2. bwrom.c의 Main()함수에서 cache, I/O port, Interrupt service
route, UART, delay루프 초기화
• 3. UART로 Banner 표시
• 4. CPU Internal Cache Memory test
- 삼성전자에서 제공한 테스트 루틴
• 5. Memory 테스트
- 램영역중 사용하는 영역(2nd IRQ Vector, Stacks영역)을 제외한
영역(0x0c000000-0x0df00000)의 메모리 테스트
- 해당번지의 Data버스에 주소를 write한후 다시 읽어서 올바른
내용이 읽어졌는지 확인
• 6. 시간표시
• 7. Flash에 Data Write
• 8. Auto Time Setup
MICROVISION ARM7 교육
159
Flash에 Data Write
• 1. 지원되는 Flash memory 종류
- AMD : 29LV800, 29LV160, 29LV320D의 BB, BT type
- Hynix : 29LV160, 29LV320의 BB,BT type
• 2. flash.c의 FlashDataWrite()함수에서 원하는 영역을 지정후에 write한다.
- 롬영역의 0x7800번지부터 0x8800byte의 용량을 flash의 0x0번지(실제0x02000000)
에 write한다.
- 롬영역의 0x7800번지부터 0x8800byte의 용량을 flash의 0x0번지(실제0x02010000)
에 다시한번 write한다.
이 이유는 해당영역에 들어있는 bw_board.bin을 지우기 위해서…
• 3. ProgramFlash()의 절차
- Flash를 지운다.
- 지운영역이 blank인지 검사
- Data를 write한다.
- write된 Data를 읽어서 원래의 Data와 비교한다.
- 그 결과를 화면에 표시한다.
• 4. Flash Erase와 Flash에 Data를 write하기 위해서는 특별한 알고리즘이 필요하다.
(Source 참조)
MICROVISION ARM7 교육
160
CPU 내장기능 테스트
MICROVISION ARM7 교육
161
UART의 사용법
•
•
•
•
•
•
•
BW_BOARD의 UART에는 Serial Ring Buffer개념이 적용되어 있음.
UART수신 IRQ가 발생하면 즉시 수신된 Data를 Ring Buffer에 삽입하고, Ring 삽입 Counter를 증
가시킴.
Main프로그램은 필요할때 Ring의 Counter를 확인하여 새로운 Data가 있으면 읽어낸후 Ring 인출
Counter를 증가시킴
링카운터의 삽입/인출 카운터의 값이 동일하면 새로수신된 데이터는 없음
링카운터의 삽입/인출 카운터의 값이 다르면 새로 수신된 데이터가 존재함
이 방법은 수신된 데이터 처리에 특별한 CPU CLK를 소모하지 않아도 되는 장점이 있음
Embedded System에서는 이같은 방법이 아주 보편적인 UART관리 방법이다.
__irq void Uart0RxInt(void)
{
U8
rchar;
rI_ISPC |= BIT_URXD0;
rchar=RdURXH0();
PutCharToUart0RxBuf(rchar);
}
void PutCharToUart0RxBuf(U8 Ch)
{
if(_NextUart0RxPtr(s_bUart0RxFront) != s_bUart0RxRear){
s_bUart0RxFront = _NextUart0RxPtr(s_bUart0RxFront);
s_baUart0RxBuf[s_bUart0RxFront] = Ch;
}
MICROVISION ARM7 교육
}
162
I2C의 테스트
•
•
•
BW_BOARD에는 2Kbyte의 Serial EEPROM이 부착되어 있음.
이 ROM은 단지 2개의 I/O line으로 칩에 Data을 Read/Write할수 있다.
이 ROM의 용도는 간단한 데이터를 저장하여 전원이 꺼저도 보관하는데 사
용.
• Main Menu의 Test_Iic()함수의 사용법 참조
• BW_BOARD의 I2C 관련 소스는 iic.c와 iic_io.c, iic_int.c의 세가지가 있다.
• 이중 iic_io.c는 IIC입출력 핀을 단순 Digital I/O핀으로 사용하여 IIC규격을
적용한 파일이다.
• Iic_int.c는 44b0x CPU에 내장된 IIC관련 기능을 이용하는 소스파일이다.
• 사용자는 iic_int.c나 iic_io.c를 iic.c로 이름바꿔서 컴파일하면 두가지모드
들 테스트 해볼수 있다.
• Test_iic의 동작
-Test_iic함수는 2kbyte용량의 배열을 선언한후 배열에 Data를 기록한후
24C16에 write한다.
- 이 배열의 모든 원소에 0을 write한다.
- 24C16으로부터 데이터를 읽어서 이 배열에 저장한다.
- 이 배열의 내용을 눈으로 확인한다.
MICROVISION ARM7 교육
163
SW RESET Test
- Bw_board의 Main()함수 윗줄에
void (*reset)(void)=(void (*)(void))0x0000000;
첨가
- Main()내의 switch문에 특정문자입력에 reset가 실행되
도록 다음 항목 추가
case 'z' : reset(); break;
- Make후 hexbin을 거처 bin을 bw_board에 download 한
후 보드 Reset
- 터미널 창에서 PC키보드 ‘z’를 누르면 보드는 RESET된
다.
- sw1키를 누르면서 ‘z’키를 누르면 모니터모드로 들어간
다.
MICROVISION ARM7 교육
164
CPU CLOCK 변경
- Inc/option.h내에 있는 MCLK값을 원하는 값으
로 변경
#define MCLK 66000000 <- 값변경
-Make후 hexbin을 거처 bin을 bw_board에
download 한후 보드 Reset
- 보드가 부팅된후 Memory test를 통해서 해당
CLK에서의 정상동작확인
Memory Test – ‘d’key or Menu에서 4번메뉴
- 보드의 최대동작주파수는 얼마인가?
MICROVISION ARM7 교육
165
WATCH DOG TIMER의 사용법
- bw_board의 소스상에 rWTCNT를 찾아서 rWTCN가 들어있는 모든
라인을 주석처리한다.
- init_all()함수의 아래쪽 끝부분에 Watchdog 설정내용을 다음과 같
이 삽입한다.
rWTCON=(255<<8)|(3<<3);
rWTDAT=0xffff;
rWTCNT=0x8000;//32초
rWTCON=(255<<8)|(3<<3)|(1<<5)|1;
- Main함수의 switch문에
case 'x' : rWTCNT=0x8000 ; break;
항목을 삽입한다.
- 수정된 소스들을 저장한후 Make하여 Bw_board에 다운로드하여 실
행한다.
- 보드는 ‘x’키를 누르지 않는다면 약 20초마다 RESET된다.
MICROVISION ARM7 교육
166
LED의 점멸주기 변경
• 기본 LED의 점멸주기는 2초임
• init_rtc()함수의 rTICINT의 값을 바꿔서 점
멸주기를 늘리거나 줄여보자.
rTICINT에 관한 내용은 Datasheet참조
MICROVISION ARM7 교육
167
TEA BREAK
MICROVISION ARM7 교육
168
JTAG개요/
JTAG DEBUGGER
MAGIC/Wiggler 데모
MICROVISION ARM7 교육
169
JTAG 개요
MICROVISION ARM7 교육
170
JTAG Debugger 환경구성
• Compiler
- SDT/ADS, EWARM, GCC등
• Debugger S/W
- AXD, C-SPY, GCC, EDB등
• Debugger H/W
- MAGIC, Wiggler, Multi-ICE
• Target Board
- ARM7/ARM9/Xscale
- BW-BOARD
MICROVISION ARM7 교육
171
JTAG 하드웨어 구성
MICROVISION ARM7 교육
172
Debug 예
MICROVISION ARM7 교육
173
SEMIHOSTING
• Target CPU에 통신채널이 없어 PC와 통신을 하지 못할
때 JTAG 통신채널을 이용하여 PC <-> Debugger <->
TARGET의 통신이 이루어지는것
• ARM Compiler의 header화일중 <sdtio.h>에 있는 표준
입출력함수들을 PC의 Program I/O창을 입출력포트로
사용한다.
• Program I/O창은 Debug S/W에서 제공
• 극단적인 경우 CPU와 RAM만 있어도 JTAG Debugger와
Semihosting을 CPU의 기능을 테스트할수 있음.
• MAGIC의 Maker인 EPI에서는 ARM Core와
Semihosting을 이용한 Flash Write Utility를 제공함
- 기존의 JFLASH보다 월등히 빠른 속도를 자랑.
MICROVISION ARM7 교육
174
MAJIC Features vs Updates
• Firmware updates apply to all MAJIC models
• Feature set is determined by specific model
MAJIC
MAJIC MX
MAJIC PLUS
Features
Features
Features
JTAG
Run-Control
Multi …
-Tap
-Processor
-Session Debug
-Context/Thread
-Architecture
Multi …
-Processor
-Session Debug
-Context
-Architecture
On-Chip Trace or
ETM or EJTAG
Trace
Firmware
Updates
Single Tap
anywhere
on JTAG
chain
On-Chip Trace
MICROVISION ARM7 교육
175
Wiggler
• IAR EWARM Compiler에서 사용가능한
Debugger
• 저렴한 가격
• 기존의 고가 장비와 별 차이 없음
• ARM7/ARM92x/ARM94x CPU에서 사용
MICROVISION ARM7 교육
176
끝
MICROVISION ARM7 교육
177