저자명 : 조셉 위(Joseph Yiu) 역자명 : 임희연 출판사 : 도서출판 ITC 정 가 : 25,000원 ISBN : 978-89-90758-21-7 원서명 : The Definitive Guide to the ARM Cortex-M3 출간년월 : 2009 년 3 월 페이지 : 472 쪽 크기 : 세로 : 245, 가로 : 188, 반양장
새로운 ARM Cortex-M3 프로세서의 프로그래밍 및 구현을 위한 유일한 가이드!
Cortex-M3는 주목받고 있는 최신의 임베디드 32-비트 프로세서이다. 이 프로세서는 비용과 전력 소모는 낮고, 재구성은 비교적 자유롭게 할 수 있다는 장점을 갖고 있다. 이 책은 임베디드 하드웨어와 소프트웨어 엔지니어들에게 Cortex-M3에 대한 전반적인 개요를 제공할 뿐 아니라 이를 사용할 때 얻을 수 있는 모든 장점들에 대해 상세히 설명하고 있다. 새로운 아키텍처에 대한 소개, 명령어 세트 요약, 하드웨어 특징, 디버깅 시스템에 대한 전반적인 설명이 모두 포함되어 있다. 또한 ARM 툴 및 GNU 툴 체인을 사용하여 소프트웨어 개발을 할 때의 기본 단계들을 포함하는 어플리케이션 예제들도 충분히 제공하고 있다.
이 책에는 ARM Cortex-M3에 대한 모든 것이 담겨져 있다.
• ARM 아키텍처의 배경 • Cortex-M3 기본 사항들 • 동작 모드 • 익셉션과 인터럽트 • 어셈블리 기초 • 16-비트 및 32-비트 데이터 처리 명령어 • 메모리 시스템 • 구현에 대한 개요 • 어셈블리어와 C를 사용한 Cortex-M3 프로그래밍 • 개발 흐름 • 전력 관리 • 멀티프로세서 통신 • 개발 툴 • 디버깅 • KEIL RealView MDK를 이용한 시작 설명서
이 책의 대상 독자 ARM사의 Cotex-M3 프로세서에 관심이 있는 하드웨어 엔지니어와 소프트웨어 엔지니어 모두를 위한 책이다. 마이크로컨트롤러 또는 마이크로프로세서에 대한 경험을 가지고 Cortex-M3 프로세서에 대해 조사하고 있는 프로그래머, 임베디드 제품 설계자, SoC 엔지니어, 연구원 등의 사람들이 좀 더 가볍고 이해하기 쉽게 읽을 수 있도록 만들어졌다.
저자 소개 Joseph Yiu(조셉 위) ARM사의 주임 엔지니어
역자 소개 임희연 대학원 인턴 시절 ARM을 처음 접하고 그 매력에 빠져서, 현재까지도 ARM 기반의 임베디드 시스템 개발을 전문으로 하는 전자 공학도로 일하고 있다. 대학원 졸업 후, 삼성전자에서 시스템 소프트웨어 엔지니어로 일하다가, 현재는 ㈜씨랩시스에서 삼성 ARM 기반의 범용 하드웨어 플랫폼 개발을 전담하고 있다. 역서로는 《ARM System Developer's Guide 한국어판》(사이텍미디어, 2005), 《임베디드 시스템 아키텍처》(ITC, 2007)가 있다.
감수자 소개 이종수 IT/BT 벤처 붐이 일고 ARM 프로세서가 생소하던 그 시절, 엔지니어로서 기술적인 매력을 느껴 이를 보급하고자 기술 강의를 시작한 것이 인연을 맺은 지 벌써 10여 년을 훌쩍 넘겨버린 베테랑 엔지니어이자 강사이다. 삼성전자와 LG전자를 필두로 대기업, 중소기업, 교육기관에서 다수의 ARM 교육과정을 만들고 강의를 진행해왔으며, ARM 관련서적의 번역 및 감수, 잡지 기고 등의 왕성한 활동을 하고 있다. 국내 ARM 대리점이자 공인교육기관으로서, 그리고 최적화된 ARM 솔루션 등을 공급하는 임베디드 ARM 전문업체인 ㈜씨랩시스의 대표이사를 거쳐 현재는 연구소장 직을 맡고 있다. 최근에는 국내보다 해외시장에서의 시장점유율을 높이기 위해 최신기술을 적용한 전문화된 솔루션 구축을 위해 힘쓰고 있다.
제1장 소개 1 ARM Cortex-M3 프로세서란 무엇인가? 2 ARM과 ARM 아키텍처의 배경지식 4 명령어 세트 개발 9 Thumb-2 명령어 세트 아키텍처(ISA) 11 Cortex-M3 프로세서 어플리케이션 12 이 책의 구조 13 심화학습 14
제2장 Cortex-M3의 개요 15 Cortex-M3 기초 16 레지스터 16 동작 모드 19 내장된 중첩 벡터 인터럽트 컨트롤러 21 메모리 맵 23 버스 인터페이스 24 메모리 보호 장치 24 명령어 세트 25 인터럽트와 익셉션 27 디버깅 지원 29 특징 요약 30
제3장 Cortex-M3 기본 33 레지스터 34 특별한 레지스터 38 동작 모드 43 익셉션과 인터럽트 45 벡터 테이블 47 스택 메모리 동작 48 리셋 시퀀스 53
제4장 명령어 세트 57 어셈블리 기초 58 명령어 리스트 62 명령어 설명 69 Cortex-M3에서의 몇 가지 유용한 명령어 93
제5장 메모리 시스템 105 메모리 시스템 특징 개요 106 메모리 맵 106 메모리 접근 속성 109 디폴트 메모리 접근 허용 111 비트-대역 동작 112 비정렬 전송 122 배타적 접근 124 엔디안 모드 126
제6장 Cortex-M3 구현 개요 129 파이프라인 130 상세한 블록 다이어그램 131 Cortex-M3에서의 버스 인터페이스 136 Cortex-M3에서의 다른 인터페이스 137 외부 전용 주변장치 버스 138 전형적인 연결 140 리셋 신호 141
제7장 익셉션 143 익셉션 유형 144 우선순위 정의 146 벡터 테이블 153 인터럽트 입력 및 펜딩 동작 155 결함 익셉션 159 SVC와 PendSV 166
제8장 NVIC와 인터럽트 제어 171 NVIC 개요 172 기본적인 인터럽트 설정 172 인터럽트 활성화 및 클리어 활성화 173 인터럽트 펜딩 및 클리어 펜딩 173 인터럽트를 셋업하는 과정의 예 181 소프트웨어 인터럽트 183 SYSTICK 타이머 184
제9장 인터럽트 동작 187 인터럽트/익셉션 시퀀스 188 익셉션 종료 190 중첩 인터럽트 191 테일-체인 인터럽트 192 늦은 도착 192 익셉션 리턴값에 대한 보다 상세한 사항 193 인터럽트 지연 194 인터럽트와 관련된 결함 196
제10장 Cortex-M3 프로그래밍 199 개요 200 어셈블리와 C 간의 인터페이스 202 전형적인 개발 흐름 203 첫 번째 단계 204 출력물 생성하기 205 데이터 메모리 사용하기 211 세마포어를 위한 배타적 접근 사용하기 212 세마포어를 위한 비트 대역 사용하기 215 비트 영역 추출 및 테이블 분기 사용하기 216
제11장 익셉션 프로그래밍 219 인터럽트 사용하기 220 익셉션/인터럽트 핸들러 225 소프트웨어 인터럽트 226 익셉션 핸들러를 가진 예제 227 SVC 사용하기 231 SVC 예제: 출력함수 사용 233 C에서 SVC 사용하기 236
제12장 진보한 프로그래밍 특징과 시스템 동작 241 두 개의 분리된 스택을 가지고 있는 시스템 동작시키기 242 더블워드 스택 정렬 245 Nonbase 쓰레드 활성화 246 성능 고려 248 락업 상황 251
제13장 메모리 보호 장치 255 개요 256 MPU 레지스터 257 MPU 셋업하기 263 전형적인 셋업 방법 269
제14장 다른 Cortex-M3 특징 275 SYSTICK 타이머 276 전력 관리 280 멀티프로세서 통신 283 셀프-리셋 제어 286
제15장 디버그 아키텍처 289 디버깅 특징 개요 290 CoreSight 개요 290 디버그 모드 296 디버깅 이벤트 300 Cortex-M3에서의 브레이크포인트 302 디버그 상태에서 레지스터 내용에 접근하기 303 다른 코어 디버깅 특징 305
제16장 디버깅 컴포넌트 307 소개 308 트레이스 컴포넌트: 데이터 와치포인트 및 트레이스 309 트레이스 컴포넌트: 인스트루먼트 트레이스 매크로셀 311 트레이스 컴포넌트: 임베디드 트레이스 매크로셀 313 트레이스 컴포넌트: 트레이스 포트 인터페이스 장치 314 플래시 패치 및 브레이크포인트 장치 315 AHB 접근 포트 318 ROM 테이블 319
제17장 Cortex-M3 개발 시작하기 323 Cortex-M3 제품 선택 324 Cortex-M3 버전 0과 버전 1의 차이점 324 개발 툴 327
제18장 ARM7에서 Cortex-M3로 어플리케이션 포팅하기 331 개요 332 시스템 특징 332 어셈블리어 파일 336 C 프로그램 파일 339 미리 컴파일된 오브젝트 파일들 339 최적화 339
제19장 GNU 툴 체인을 사용하여 Cortex-M3 시작하기 343 배경 344 GNU 툴 체인 구하기 344 개발 플로우 345 예제 346 특별한 레지스터로의 접근 360 지원하지 않는 명령어 사용하기 360 GNU C 컴파일러 내의 인라인 어셈블러 361
제20장 KEIL RealView MDK를 이용하여 개발 시작하기 363 개요 364 μision으로 시작하기 365 UART를 통해 “Hello World” 메시지 출력하기 371 소프트웨어 테스트하기 375 디버거 사용하기 378 명령어 세트 시뮬레이터 382 벡터 테이블 수정하기 384 인터럽트를 가진 스톱워치 예제 385
부록 A Cortex-M3 명령어 요약 395 지원되는 16비트 Thumb 명령어 396 지원되는 32비트 Thumb-2 명령어 400
부록 B 16비트 Thumb 명령어와 아키텍처 버전 409
부록 C Cortex-M3 익셉션 퀵 레퍼런스 411 익셉션 유형 및 활성화 412 익셉션 스태킹 후의 스택 내용 413
부록 D NVIC 레지스터 퀵 레퍼런스 415
부록 E Cortex-M3 문제해결 가이드 433 개요 434 결함 핸들러의 개발 435 결함의 원인 이해하기 438 다른 가능한 문제점들 442
마이크로컨트롤러 프로그래머들은 선천적으로 정말 기질이 뛰어난 사람들이다. 그들은 고정된 설계를 가지고 매우 독창적인 방법으로 마이크로컨트롤러를 구현함으로써 아주 놀랍고도 새로운 제품들을 만든다. 그들은 보통 매우 빈약한 시스템으로부터 상당히 효율적인 컴퓨팅을 요구한다. 이러한 마법을 수행하기 위해 사용되는 기본적인 요소는 툴 체인 환경이다. ARM7TDMI 프로세서 설계를 이론적으로 설명하고 단순화하여 개선할 팀을 구성할 때, ARM사의 툴 체인 부서에 있는 엔지니어들이 CPU 설계자들과 힘을 합친 것도 바로 이런 이유이다. 이것의 통합 결과인 ARM Cortex-M3는 기존의 ARM 아키텍처에 가까운 개발 결과물을 보여주고 있다. 이 소자는 32비트 ARM 아키텍처로부터 가장 좋은 특징들을 상당히 성공적인 Thumb-2 명령어 세트 설계와 혼합하고, 여기에 몇 가지 새로운 기능들을 추가하였다. 이러한 변화에도 불구하고, Cortex-M3는 모든 기존 ARM 애호가들이 쉽게 인식할 수 있는 단순화된 프로그래머 모델을 유지하고 있다.
Wayne Lyons(웨인 라이온스) ARM사의 임베디드 솔루션팀 이사
머리말
이 책은 ARM사의 Cotex-M3 프로세서에 관심이 있는 하드웨어 엔지니어와 소프트웨어 엔지니어 모두를 위한 책이다. Cortex-M3 Technical Reference Manual (TRM)과 ARMv7-M Architecture Application Level Reference Manual은 이미 이 새로운 프로세서에 대한 많은 정보들을 제공하고 있다. 하지만, 그것들은 너무 상세하기 때문에 초보자들이 읽기에는 도전적인 작업이 될 수 있다. 이 책은 마이크로컨트롤러 또는 마이크로프로세서에 대한 경험을 가지고 Cortex-M3 프로세서에 대해 조사하고 있는 프로그래머, 임베디드 제품 설계자, SoC 엔지니어, 연구원 등의 전문가들이 좀 더 가볍고 이해하기 쉽게 읽을 수 있도록 만들어졌다. 여기에는 새로운 아키텍처에 대한 소개, 명령어 세트 요약, 몇 가지 명령어들의 예, 하드웨어 특징들에 대한 정보, 프로세서의 진보된 디버그 시스템의 개요가 포함되어 있다. 또한 GNU 툴 체인과 ARM 툴을 사용하여 Cortex-M3 프로세서를 위한 소프트웨어를 개발할 때의 기본적인 단계들을 포함하며, 어플리케이션 예들도 제공한다. 이 책은 ARM7TDMI 프로세서에 익숙하며, Cortex-M3 프로세서로 전환하고자 하는 엔지니어들을 타깃으로 하고 있다. 이것은 프로세서들 간의 차이점과 ARM7TDMI에서 Cortex-M3로 어플리케이션 소프트웨어를 포팅하는 내용에 대해 다루고 있기 때문이다. 이 책을 리뷰하고 조언과 피드백을 제공해 준 다음의 사람들에게 감사를 전하고 싶다. Alan Tringham, Dan Brook, David Brash, Haydn Povey, Gary Campbell, Kevin McDermott, Richard Earnshaw, Samin Ishtiaq, Shyam Sadasivan, Simon Axford, Simon Craske, Simon Smith, Stephen Theobald and Wayne Lyons. 기술적인 지원을 해준 CodeSourcery와 이 책의 표지 이미지를 제공해 준 루미너리 마이크로에도 감사하고 싶다. 그리고 이 책의 출판 전문 작업을 해준 Elsevier의 팀원들에게도 감사한다. 마지막으로 나에게 이 책을 쓰라고 용기를 준 Peter Cole과 Ivan Yardley에게 특히 감사를 드린다.
급속도로 발전하는 기술 성장 속도와 100년에 한 번 일어날까말까라고 하는 현재의 금융 위기 같은 경제 현실이, 예전에는 서로 전혀 다른 영역으로 보였지만 이제는 아주 긴밀히 연계되어 상호작용을 하고 있습니다. Apple과 같이 새로운 기술과 마케팅으로 짧은 시간 내에 급속하게 성장하는 기업이 있는가 하면, 변화에 보수적이고 느린 반응으로 경쟁력을 잃어버린 업체의 경우 불과 몇 개월 만에 문을 닫게 되는 사례를 국내외에서 흔히 찾아볼 수 있습니다. 그만큼 빠른 속도로 기술, 고객, 기업이 유기적인 반응을 한다고 할 수 있겠습니다.
개인 혹은 단체 모두 경기가 어려울 때에는 고가의 전자 제품보다는 저가의 실용적인 제품을 찾으며, 이를 반영하여 제조회사들은 평상시보다도 훨씬 강력한 단가 인하 방법을 모색하게 됩니다. 단가를 줄이기 위한 고전적인 방법으로 물량을 키우는 규모의 전쟁이 있습니다. 최근에는 이러한 규모 이외에도 신기술로 가격장벽을 뛰어넘는 제품을 쉽게 찾아볼 수 있습니다. 이 방법은 단지 단가 인하뿐만 아니라 제품의 차별화, 신기술의 마케팅 등의 장점을 얻을 수 있어서 더욱 효과적입니다.
이 책은 ARM사의 최신 코어인 Cortex-M3에 관련된 기술적인 내용을 다루고 있습니다. 그리 멀지 않은 지난 10년 전과 비교하면 임베디드 프로세서는 비약적인 발전을 하고 있습니다. 올해 출시되는 스마트 폰은 본인이 대학교 시절 개발용으로 사용하던 PC의 성능을 능가하고 있습니다. Full-HD 화질의 동영상을 감상하고, 인터넷과 같은 무선 네트워크가 가능하며, 가정에 있는 대형 LCD-TV와 연결되어 시청하거나 심지어 프로젝션 기능까지 가능한 제품들이 출시되는 상황입니다.
최근 인기 급상승중인 소형 노트북에서도 프로세서 주도권 싸움이 한창입니다. 가격이 낮은 만큼 파급력이 높은 넷북은 전통적인 x86계열 프로세서를 주력으로 하는 Intel, AMD, VIA 등의 회사뿐만 아니라, 고성능 RISC를 앞세워 가격/성능/전력 소모의 우수성을 강조하는 ARM까지 혼재된 양상을 보이고 있습니다. PC 시장과 임베디드 시장이 분리되어 있던 과거와는 사뭇 다른 상황입니다.
예를 들어, 고성능 스마트 폰, 넷북에 사용될 임베디드 프로세서로 ARM사의 Cortex 코어가 많이 채택되고 있습니다. 뿐만 아니라 간단한 기능으로 인해 주로 마이컴을 사용하던 백색가전, 생활가전 분야에서도 변화의 바람이 점차 거세어지고 있습니다. 보다 다양한 기능과 사용자 인터페이스를 고려한 신제품에서 ARM 프로세서의 채택이 증가하고 있습니다.
기술적인 측면에서 Cortex 코어를 세부적으로 살펴보면, 고성능 멀티미디어를 위한 Cortex-A8 코어, 실시간 제어용 코어, 그리고 마이컴을 대체하기 위한 Cortex-M3 코어와 같이 크게 세 가지 형태로 분류되며 각각 약간의 차이점들을 가지고 있습니다. 그러나 기본 Cortex 명령어는 동일하며, 각각의 목적에 맞도록 추가되는 형태를 지니고 있습니다. 따라서 이 책은 기존의 ARM7/9/11의 뒤를 이은 Cortex 코어에 대한 이해와 학습을 위해 좋은 지침이 되리라고 생각합니다. PDF 문서를 제외하고 전 세계적으로 Cortex에 대한 내용만 다루는 전문서적이 없는 상황에서 국내 개발자들에게 더욱 힘이 되리라고 생각합니다.
이 책을 통해 2009년 새해를 무섭게 변화하는 기술 변화 속에서 금융 위기가 아닌 기회의 한 해로 만들어가기를 소망합니다.
이종수 (주)씨랩시스 연구소장
감수자 소개 이종수(aron.lee앳clabsys.com) IT/BT 벤처 붐이 일고 ARM 프로세서가 생소하던 그 시절, 엔지니어로서 기술적인 매력을 느껴 이를 보급하고자 기술 강의를 시작한 지 벌써 10여 년을 훌쩍 넘겨버린 베테랑 엔지니어이자 강사이다. 삼성전자와 LG전자를 필두로 대기업, 중소기업, 교육기관에서 다수의 ARM 교육과정을 만들고 강의를 진행해 왔으며, ARM 관련서적의 번역 및 감수, 잡지 기고 등의 왕성한 활동을 하고 있다. 국내 ARM 대리점이자 공인교육기관으로서, 그리고 최적화된 ARM 솔루션 등을 공급하는 임베디드 ARM 전문업체인 (주)씨랩시스의 대표이사를 거쳐 현재는 연구소장직을 맡고 있다. 최근에는 국내보다 해외시장에서의 시장점유율을 높이기 위해 최신 기술을 적용한 전문화된 솔루션 구축을 위해 힘쓰고 있다.
역자 머리말
ARM은 휴대폰, 스마트 폰, PDA 등 각종 휴대형 기기에 내장되어 우리 생활 전반에 걸쳐 알게 모르게 영향력을 미치고 있다. ARM7의 성공에 이어 ARM사의 고성능 설계 기술을 이용한 ARM9 프로세서들이 출시되자, 저전력을 요하는 기존의 휴대형 기기뿐만 아니라 TV, 냉장고, 디지털 카메라, 네비게이션 등 산업 전반에 걸쳐 앞다투어 ARM 프로세서로 제품을 개발하기 시작하였다. 프로세서의 성능이 점점 좋아지게 됨에 따라, 동영상 등의 고성능 멀티미디어 기능 구현이 가능해졌고, 이러한 멀티미디어 기능이 디폴트로 지원되면서 다양한 시장들이 하나로 통합되기 시작하였다.
ARM11 프로세서가 막 출시될 즈음에 필자는 ARM사에 대한 걱정이 들기 시작하였다. ARM9 기술만으로도 웬만한 제품 개발이 가능한 상황에서, 더 좋은 프로세서가 나온다고 해서 새로운 시장이 창출될 것 같지도 않고, 이러다가 기존의 고성능 프로세서를 요하는 시장이 포화상태가 되면 ARM사는 그 수명을 다하게 되는 게 아닐까 하는 생각이 들었기 때문이다.
처음 ‘Cortex’라는 이름의 새로운 제품군이 발표되었을 때, 필자는 ARM사가 ARM12라는 기존의 직관적이고도 쉬운 이름 체계를 버리고, Cortex라고 하는 새로운 이름을 사용하려고 하는지 정말 궁금했었다. 물론 Cortex라고 하니 뭔가 색다르고 멋있어 보이기는 했지만, 왠지 어려운 기술처럼 느껴져 접근이 꺼려졌기 때문이다. 하지만, 그 상세 내용을 확인하고 나서는 크게 놀라지 않을 수 없었다. 아시다시피, ARM Cortex 시리즈는 다음과 같은 세 가지 제품군으로 구분된다.
▶ ARM Cortex-A 시리즈: 고성능 어플리케이션 플랫폼 ▶ ARM Cortex-R 시리즈: 실시간 어플리케이션 플랫폼 ▶ ARM Cortex-M 시리즈: 저가 마이크로컨트롤러 플랫폼
Cortex-A 시리즈는 예상한 바와 같이 ARM12에 해당되는 고성능 어플리케이션을 위한 아키텍처이며, Cortex-R 시리즈는 RTOS가 많이 사용되는 실시간 어플리케이션을 위한 아키텍처이다. 그리고, Cortex-M 시리즈는 저가 마이크로컨트롤러가 주로 사용되는 산업 제어기기들을 위한 아키텍처이다. 위에서 알 수 있듯이, A/R/M의 각 분야는 임베디드 시장 전체를 의미한다.
이 중에서 독자들이 집중적으로 살펴보아야 할 분야가 바로 대부분 마이크로컨트롤러(마이컴)가 장악하고 있는 M 시장이다. 사실, ARM 프로세서는 A/R 영역에서는 큰 영향력을 미치고 있었으나, M 분야에서는 그다지 영향력이 없었다. 이는 8/16비트에 비해 32비트 프로세서의 가격이 비싸다는 이유도 있겠지만, 그보다는 개발 환경 셋업 비용이 상대적으로 많이 비쌌기 때문이다. 하지만, ARM은 Cortex-M 시리즈를 통해 이러한 개발 환경에 대해 개발자들이 쉽고 저렴하게 접근할 수 있도록 세심하게 배려하였다. 이런 이유로, 필자는 ARM이 마이컴 시장에서 영향력을 행사할 때가 멀지 않았다고 본다. Cortex 시리즈의 이름 또한 임베디드 시장 전반에서 A/R/M이라는 이름이 완성하고자 하는 ARM사의 의지를 담은 듯하다.
이 책은 ARM Cortex-M3에 기반한 시스템을 개발할 때 꼭 필요한 기본서로, ARM Cortex-M3 아키텍처에 대한 전반적인 이해를 추구하였으며, 시스템 설계시 고려해야 하는 개발 환경, 프로그래밍 방법 등에 대해 상세히 설명하고 있다. 아무쪼록 본 교재가 Cortex-M3 프로세서를 이용하여 개발을 검토하는 독자들에게 훌륭한 길잡이가 되기를 바란다.
임희연
역자 소개 임희연(kelly.lim앳clabsys.com) 대학원 인턴 시절 ARM을 처음 접하고 그 매력에 빠져서, 현재까지도 ARM 기반의 임베디드 시스템 개발을 전문으로 하는 전자 공학도로 일하고 있다. 대학원 졸업 후, 삼성전자에서 시스템 소프트웨어 엔지니어로 일하다가, 현재에는 (주)씨랩시스에서 삼성 ARM 기반의 범용 하드웨어 플랫폼 개발을 전담하고 있다. 역서로는 《ARM System Developer? Guide 한국어판(사이텍미디어, 2005)》, 《임베디드 시스템 아키텍처(ITC, 2007)》가 있다.