Chapter. 1 마이크로컨트롤러개요 Jaeheung, Lee
목차 1. 마이크로컨트롤러의정의 2. AVR 마이크로컨트롤러개요 3. ATMega128 마이크로컨트롤러
AVR 마이크로컨트롤러 1. 마이크로컨트롤러의정의 2. AVR 마이크로컨트롤러개요 3. ATMega128 마이크로컨트롤러
마이크로프로세서 ALU, 제어회로, 메모리, 타이밍 ( 클럭 ) 회로 ALU Scratchpad RAM Control Clock Microprocessor 마이크로프로세서블럭다이어그램
마이크로컴퓨터 n n n n 마이크로프로세서 (CPU) 프로그램메모리 (ROM) 데이터메모리 (RAM) 주변인터페이스 Program Memory (ROM) Data Memory (RAM) Input/ Output Data bus Address bus Control Timing (clock) Microprocessor Microcomputer 일반적인마이크로컴퓨터시스템
마이크로프로세서역사
마이크로프로세서역사 * 임베디드 RISC CISC 4 비트 MOS technology intel 4004 4040 (intel) Zilog motorola 8 비트 6502 (MOS Technology) Apple-II 8008 8080 8085 Z80 (Zilog) 6800 (Motorola) 8051*(Intel) AVR* (Atmel) 16 비트 8086 8088(IBM-PC/XT) 80286(IBM PC/AT) (intel) 68000(16/32) (Motorola) 32 비트 80386 80486 Pentium (intel,amd) 68020 68030 (MAC) 68040 (Motorola) PowerPC(IBM) MPC860(Motorola)* ARM* AVR32*
Intel Pentium4 2005 년 1.69 억 TR 3.73GHz 90nm 공정 2MB SRAM
PC (Personal Compter) 8 비트 16/32 비트 Apple-II 6502 Mac 680x0 계열 (Motorola) IBM-PC(XT) 8088 IBM-PC(AT) 80286 IBM-PC 80486 16 비트 IA-32 : 32 비트 32 비트 Mac PowerPC (IBM) IBM-PC PentiumPro,2,3,4 IA-32 : 32 비트 MMX( 멀티메디어,3D 그래픽 ) Mac (Intel) IBM-PC Pentium(D,EM64T) IBM-PC Core2 64 비트 -AMD64 -Pentium4(EM64T) IA-64 Dual CPU -Pentium D(Pentium4x2) -Core2 -AMD64 X2
CISC 와 RISC CISC Complex Instruction Set Computer x86, 68000, VAX 반 RISC 의의미가애매해짐 n 486 -> Pipelined CISC n 더작아지는 mirco-operations( 명령을실행을위한 CPU 내의코드 ) RISC : 명령축소 Reduced Instruction Set Computer 고속실행을목적으로 AVR,PIC, ARM, PowerPC, SPARC 최근들어 2 개의경계가불분명해짐
CPU 의동작요소 CPU 메모리 (ROM,RAM) 특정목적지원프로그램 IO 장치 ( 입출력장치, 통신장치 ) KEYPAD LCD Ethernet (LAN) USB 기타
CPU 시스템구조 PC 장치 UART 통신 8051 Timer Serial 8051 core 레지스터 ALU FLAG ROM/FLASH RAM IO 모듈 키패드 LCD USB CPU 에서동작하는모든프로그램은반드시메모리에적제되어있어야한다. ROM 이나 RAM 중어느한곳에있어도상관없다.
메모리종류 ROM Mask ROM : 생산시고정된데이터로칩이만들어진다. 따라서롬라이터로쓰기가불가능하다. 주로대량생산에사용. PROM (Programmable ROM): 생산시데이터로없이만들어지고, 롬라이터로쓰기하면변경불가능하다. EPROM (Erasable PROM): 롬라이터로데이터 ( 프로그램 ) 을쓰고자외선으로지워재프로그램가능. EEPROM (Electrically EPROM): 동작중쓰기가가능하여, 시스템의특정정보를담는것이주목적이다. (RAM 에비해쓰기속도저하, 쓰기복잡 ) RAM SRAM(Static RAM): 쓰기와읽기가가능. 전기가공급되면데이터유지 DRAM (Dynamic RAM): 쓰기와읽기가가능. 전기가공급되어도일정시간이지나면데이터가사라짐. 주기적리프레쉬 (refresh) 가필요. FLASH 읽기와쓰기가가능하고전원이없어도데이터가사라지지않음. RAM 에비해쓰기가복잡. CPU 에의한쓰기프로그램이필요. 최근임베디드시스템은거의이메모리사용. PC 의롬바이어스도이메모리사용. ( 초기 PC PROM/EPROM) 바이러스
EPROM 소켓을이용장착 데이터를삭제할때자외선을이용한다. 자외선이통과하도록창이열려있다. - 데이터가지워지면모두 0xFF 됨 데이터를쓸때는별도의장치를이용한다. 따라서소켓을쓰는것이일반적
DRAM 메모리종류 진화 DRAM 의분류 : SRAM 보다구조가단순하고고밀도, 가격저렴. DRAM : 초기의메모리. SDRAM n n SDRAM :DRAM 보다엑세스속도증가를위해클럭을사용하여읽고쓰는시간을동기화한다. 두클럭에데이터를한번억세스한다. DDR SDRAM : SDRAM 보다속도를높이기위해한클럭동안엑세스한다. n DDR2 SDRAM : 클럭의속도를 2 배높여억세스한다.
CPU 시스템구성요소 I-I Timer 전자적논리회로에의해하드웨어적으로구현되며정확한클럭과시간을얻을수있다. CPU 프로그램과연결되어수백 us ~ 수백 msec 처리가능. 하드웨어적고속클럭처리가가능. 하드웨어적처리에의한클럭. UART(RS-232C) 시리얼통신을위한모듈로컴퓨터간통신을위해컴퓨터초기부터구현되어온방식이다. 모뎀과연결되어전화선을통한원거리통신가능. CPU 의프로그램을전송하거나실행되는상황을 PC 로전송 - debug 툴로도사용.
CPU 시스템구성요소 I-2 SPI 장치 ( 칩 ) 사이의통신을위해시리얼통신방식. 데이터신호와함께전송을시점을알리는클럭이전송. UART 보다고속처리가가능. 시스템내의칩과칩사이, 모듈과모듈사이의통신에사용 USB 시리얼통신중가장최근에개발된방식. 전송속도가높아장치간의많은데이터전송하는데유리. 신호선과함께전원도공급되어간단한장치개발에유리. CPU 의프로그램을전송하거나실행되는상황을 PC 로전송 - debug 툴로도사용.
CPU 시스템구성요소 II Keypad : 장치의제어를위한가장일반적인입력장치. 핸드폰의번호키. 컴퓨터의키보드 LCD : 시스템의상태를표시하는출력장치 STN : 흑백의무칼라표시장치 n 문자형 : 주어진폰트의내용을출력한다. ASCII 코드출력. n 그래픽형 : 픽셀단위의그래픽처리가가능한표시장치 TFT-LCD : 칼라표시를지원하면그래픽처리가가능 LAN(Ethernet) 근거리통신망을구성하여컴퓨터간의통신 가장대표적통신망
CPU 와임베디드 CPU 와보조모듈의물리적구성 CPU 의종류에따라많은차이가있다. CPU 와각모듈을하나의칩으로만든다. n 장치의크기및이동성등을고려하여구성 n 장치의특성에맞는구성 CPU 을찾아개발. MCU (Micro Controller Unit) CPU 와기본적인모듈을한칩에구현 보통장치제어용 CPU 을말함. 임베디드 MCU 와비슷한개념으로 CPU 와모듈을모아하나의칩으로구현 최근이말은 OS 와결합되어구성되는의미가강함 n Windows CE, linux 포팅
MCU 와임베디드 CPU의형상과칩의구성 CPU의실행속도향상 칩의크기및파워 ( 휴대장치, 장치제어 )
MCU 와임베디드 8051 과 MCU 형상
8051 의구성 - Intel 외부인터럽트 Interrupt Control ROM 프로그램 RAM Timer/Counter Timer 1 Timer 0 CPU OSC Bus Control 4 I/O 포트 Serial Port P0 P1 P2 P3 TxD RxD Address/Data
AT80C51 www.atmel.com
AT89C51 - ATMEL
MCU 와임베디드 ARM 과임베디드형상
ARM9 인텔 PXA255
ARM7- 삼성반도체 S3C44B0X
ARM9- 삼성반도체 S3C2410
CPU 란무엇인가? CPU 란논리연산을하는전자기계 프로그램에동작하는상태머신
CPU 코어 PC:Program Counter SP:Stack Pointer 제어신호데이터흐름 메모리 명령해석및명령동작제어부 메모리제어 PC SP DPTR data bus... A B R0,R1, R7 FLAG ALU 사칙연산논리연산쉬프트
CPU 의기본구성 레지스터 : CPU 가데이터를처리를위한저장 ALU : 수학적계산을하는부분 사칙연산, 논리연산, 쉬프트연산 FLAG : ALU 계산결과 flag 부분이저장 명령해석및명령동작제어부 기계어코드를읽고명령을해석하여실행
명령어실행 -Machine Cycle 한명령이실행되기까지의전체시간 Fetch - 기계어명령읽기 Decode - 기계어기능해석 Execute - 실행 Store - 메모리에저장 ADD A,R0
프로그램작성 l C 또는어셈블리 ( 기계어 ) 로작성 int cval; void Calc() { int val; } val = 0; val += 2; cval = val; 컴파일러 기계어 74 00 25 02 F5 A0 어셈블러 Calc: MOV A,00H ADD A,02H MOV 0A0,A... ROM 에넣기 ( 시스템에따라 ROM, FLASH, RAM)
CPU 의동작 Step 1 프로그램 00 01 02 03 74 00 25 02 주소기계어 어셈블러 ORG 0000H 0000 74 00 MOV A,00H 0002 25 02 ADD A,02H 0004 F5 A0 MOV 0A0,A 0006 02 00 57 JMP MAIN 0009 02...... data bus... A B... FLAG ALU
Step 2 fetch 주소기계어 어셈블러 ORG 0000H 0000 74 00 MOV A,00H 0030 25 02 ADD A,02H 0033 F5 A0 MOV 0A0,A 기계어명령읽기 00 01 02 03 74 00 25 02 0000 PC 명령어버퍼 74 명령어해석 처음 00 번지기계어를읽는다. 명령어 74 는다음데이터를 A 레지스터로옮기라는명령으로규정 -> 해석 data bus... A B... FLAG ALU
주소기계어 어셈블러 ORG 0000H 0000 74 00 MOV A,00H 0002 25 02 ADD A,02H 0004 F5 A0 MOV 0A0,A Step 3 다음데이터읽기 00 74 01 02 03 00 25 02 0001 PC 명령어버퍼 74 명령어해석 다음 1 번지의데이터 00 을읽어 A 레지스터에넣는다. 명령한개가종료됨. data bus... A 00 B... FLAG ALU
주소기계어 어셈블러 ORG 0000H 0000 74 00 MOV A,00H 0030 25 02 ADD A,02H 0033 F5 A0 MOV 0A0,A Step 4 fetch 00 01 02 03 74 00 25 02 0002 PC 명령어버퍼 25 명령어해석 처음 02 번지기계어를읽는다. 명령어 25 는다음데이터를 A 레지스터와더하라는명령으로규정 -> 해석 A+02H -> A 준비 data bus... A = 0 B... FLAG ALU
주소기계어 어셈블러 ORG 0000H 0000 74 00 MOV A,00H 0030 25 02 ADD A,02H 0033 F5 A0 MOV 0A0,A Step 5 ADD 실행 Operand 읽기 00 01 02 03 74 00 25 02 0003 PC 명령어버퍼 25 명령어해석 처음 03 번지데이터를읽어 opreand 버퍼에저장. 02 Oprand 버퍼 data bus... A B... FLAG ALU
주소기계어 어셈블러 ORG 0000H 0000 74 00 MOV A,00H 0030 25 02 ADD A,02H 0033 F5 A0 MOV 0A0,A Step 6 ADD 계산 00 01 02 03 74 00 25 02 0000 PC 명령어버퍼 25 명령어해석 처음 03 번지데이터를읽어 opreand 버퍼에저장. A+02H -> A 실행 ADD 명령종료 02 Oprand 버퍼 data bus... A = 02 B... FLAG 설정 S=0 Z=0 C=0 V=0 00 02 ALU 02 ADD 명령
주소기계어 어셈블러 0000 74 00 MOV A,00H 0002 25 02 ADD A,02H 0004 F5 A0 MOV 0A0,A Step 7 fetch MOV 00 74 0004 PC 01 02 03 00 25 02 명령어버퍼 F5 명령어해석 다음명령 MOV 을읽는다 MOV 명령해석 04 05 F5 A0 02 Oprand 버퍼 09 0A 0B xx xx xx... A = 02 B... FLAG 설정 data bus ALU
주소기계어 어셈블러 0000 74 00 MOV A,00H 0002 25 02 ADD A,02H 0004 F5 A0 MOV 0A0,A Step 8 MOV 의주소값읽기 00 74 0005 PC 01 02 03 00 25 02 명령어버퍼 F5 명령어해석 MOV 명령에서메모리주소값임을해석하고 주소값을읽는다. 04 05 F5 A0 A0 Oprand 버퍼 09 0A 0B xx xx xx... A = 02 B... FLAG 설정 data bus ALU
주소기계어 어셈블러 0000 74 00 MOV A,00H 0002 25 02 ADD A,02H 0004 F5 A0 MOV 0A0,A Step 9 A 레지스터쓰기 ROM 00 01 02 03 74 00 25 02 0006 PC 명령어버퍼 F5 명령어해석 MOV 명령에서메모리주소값임을해석하고 주소값을읽는다. 04 05 F5 A0 A0 Oprand 버퍼 09 0A 0B xx 02 xx RAM data bus address bus... A = 02 B... FLAG 설정 ALU 02
CPU 의동작순서표 MOV A,00H ADD A,02H MOV 0A0,A FETCH OPRAND FETCH OPRAND FETCH OPRAND 74 00 25 02 F5 A0 02 데이터실행실행실행 엑세스 주소 Read Read Read Read Read Read write 00 01 02 03 04 05 A0
CPU 동작속도높이기 MOV A,00H ADD A,02H MOV 0A0,A FETCH OPRAND FETCH OPRAND FETCH OPRAND 데이터 74 00 실행 25 02 실행 F5 A0 파이프1 파이프2 파이프3 파이프4 74 00 실행 XX XX prefetch 25 00 실행 XX XX F5 A0 실행 XX 02 F5 실행 ( 실제 8051 은이개념이적용안된가상의개념임, Intel 80486, ARM 등에적용 )
ARM 프로그램작성 int cval; void Calc() { int val; } l C 또는어셈블리 ( 기계어 ) 로작성 val = 2; val += 3; cval = val; 컴파일러 기계어 0200A0E3 0310A0E3 14209FE5 000082E5 어셈블러 ROM 에넣기 ( 시스템에따라 ROM, FLASH, RAM) ISP, JTAG, Calc: mov r0,#2 add r0,r0,#3 ldr r2,.l3 str r0, [r2, #0].L3:....word cval
int ival; int main() { }.file "func.c".text.align 2.global main.type main, %function main: mov ip, sp stmfd sp!, {fp, ip, lr, pc} sub fp, ip, #4 sub sp, sp, #4 bl func mov r0, #2 add r0, r0, #3 ldr r2,.l3 str r0, [r2, #0].L3: ival = 3; ival += 2; mov r3, r0 str r3, [fp, #-16] ldr r3, [fp, #-16] mov r0, r3 ldmfd sp, {r3, fp, sp, pc}.size main,.-main.align 2.global func.type func, %function.align 2.word ival.size func,.-func.comm ival,4,4.ident "GCC: (GNU) 3.4.5" compiler assembler ARM GAS pasm.s page 1 1.file "func.c" 2.text 3.align 2 4.global main 5.type main, %function 6 main: 7 0000 0DC0A0E1 mov ip, sp 8 0004 00D82DE9 stmfd sp!, {fp, ip, lr, pc} 9 0008 04B04CE2 sub fp, ip, #4 10 000c 04D04DE2 sub sp, sp, #4 11 0010 FEFFFFEB bl func 12 0014 0200A0E3 mov r0, #2 13 0018 030080E2 add r0, r0, #3 14 001c 14209FE5 ldr r2,.l3 15 0020 000082E5 str r0, [r2, #0] 16 17 0024 0030A0E1 mov r3, r0 18 19 0028 10300BE5 str r3, [fp, #-16] 20 002c 10301BE5 ldr r3, [fp, #-16] 21 0030 0300A0E1 mov r0, r3 22 0034 08A89DE8 ldmfd sp, {r3, fp, sp, pc} 23.size main,.-main 24.align 2 25.global func 이코드가메모리에전송되고 CPU 가읽어실행하는코드 ARM GAS pasm.s page 2 DEFINED SYMBOLS *ABS*:00000000 func.c pasm.s:6.text:00000000 main pasm.s:7.text:00000000 $a pasm.s:29.text:00000038 $d *COM*:00000004 ival UNDEFINED SYMBOLS func
ARM 명령어의특징 32 비트로한개의기계어명령구성 Operand 가 32 비트의명령어와결합 CISC 는명령어다음에 operand 존재 32 비트 operand 데이터를취급하기위해한개또는 2 개의명령어가필요 STACK 관련명령어가없고, 블록명령으로대신 BL : 리턴주소값레지스터에대피 R14(LR) 이에비해 CISC 는 CALL 실행시 STACK 사용.
Step 0 프로그램적체 00 04 08 0c memory 0200A0E3 0310A0E3 14209FE5 000082E5 주소기계어 어셈블러 reset: 0000 0200A0E3 mov r0,#2 0004 0310A0E3 add r0,r0,#3 0008 14209FE5 ldr r2,.l3 000C 000082E5 str r0, [r2, #0] 0010 02...... Bus MUX data bus... R0 R1... FLAG MUL Barrel Shifter ALU
Step 1 fetch : 기계어명령읽기.00.04.08.0C 0200A0E3 0310A0E3 14209FE5 000082E5 Addr.bus 주소기계어 어셈블러 reset: 0000 0200A0E3 mov r0,#2 0004 0310A0E3 add r0,r0,#3 0008 14209FE5 ldr r2,.l3 000C 000082E5 str r0, [r2, #0] 000000000 명령어버퍼 E3A00002 PC(R15) 명령어해석 처음 00000000 번지기계어를읽는다. 명령어 E3A00002 는데이터를 R0 레지스터로옮기라는명령으로규정 -> 해석 Bmux data bus 000000002... R0 R1... FLAG MUL ALU Barrel Shifter
Step 2 실행 : 데이터를 R0 에넣기.00.04.08.0C 0200A0E3 0310A0E3 14209FE5 000082E5 Addr.bus 주소기계어 어셈블러 reset: 0000 0200A0E3 mov r0,#2 0004 0310A0E3 add r0,r0,#3 0008 14209FE5 ldr r2,.l3 000C 000082E5 str r0, [r2, #0] 000000000 PC 명령어버퍼 E3A00002 명령어해석 명령중데이터만을레지스터에넣는다. 명령한개가종료됨. Bmux data bus 000000002 R0 00000002 Amux... R1... FLAG MUL ALU Barrel Shifter
.00.04.08.0C Step 3 fetch : 기계어명령읽기 0200A0E3 0310A0E3 14209FE5 000082E5 Addr.bus 주소기계어 어셈블러 reset: 0000 0200A0E3 mov r0,#2 0004 0310A0E3 add r0,r0,#3 0008 14209FE5 ldr r2,.l3 000C 000082E5 str r0, [r2, #0] 000000004 명령어버퍼 E3A01003 PC 명령어해석 다음 00000004 번지기계어읽기 명령어 E3A01003 해석 ALU 을통해더하기 -> 해석 Bmux data bus 000000003 R0 Amux... R1... FLAG MUL ALU Barrel Shifter
Step 4 add 실행.00.04.08.0C 0200A0E3 0310A0E3 14209FE5 000082E5 Addr.bus 주소기계어 어셈블러 reset: 0000 0200A0E3 mov r0,#2 0004 0310A0E3 add r0,r0,#3 0008 14209FE5 ldr r2,.l3 000C 000082E5 str r0, [r2, #0] 000000004 PC 명령어버퍼 E3A01003 명령어해석 다음 00000004 번지기계어읽기 명령어 0210A0E3 해석 ALU 을통해더하기 -> 해석 Bmux data bus 000000003 R0 00000002 Amux... R1... FLAG N=0 Z=0 C=0 V=0 000000002 00000005 MUL ALU Barrel Shifter 000000003
Step 4-1 add 실행후 R0 에저장.00.04.08.0C 0200A0E3 0310A0E3 14209FE5 000082E5 Addr.bus 주소기계어 어셈블러 reset: 0000 0200A0E3 mov r0,#2 0004 0310A0E3 add r0,r0,#3 0008 14209FE5 ldr r2,.l3 000C 000082E5 str r0, [r2, #0] 000000004 PC 명령어버퍼 E3A01003 명령어해석 클럭의에지에맞추어 R0 에저장 에지후, A-MUX disable 됨 ALU 의 A 버스는 0xXXXXXXXX Bmux data bus 000000003 R0 00000005 Amux... R1... FLAG 0xxxxxxx N=0 Z=0 C=0 V=0 000000002 MUL ALU Barrel Shifter 000000003 00000005
.00.04.08.0C Step 5 fetch : ldr 0200A0E3 0310A0E3 14209FE5 000082E5 Addr.bus 주소기계어 어셈블러 reset: 0000 0200A0E3 mov r0,#2 0004 0310A0E3 add r0,r0,#3 0008 14209FE5 ldr r2,.l3 000C 000082E5 str r0, [r2, #0] 000000008 명령어버퍼 E59F2014 PC 명령어해석 다음 00000008 번지기계어읽기 명령어 E59F2014 해석.L3(00000004) 을 R2 에저장 Bmux data bus 000000054 R0 Amux R1 R2...... FLAG MUL ALU Barrel Shifter
.00.04.08.0C Step 6 ldr 실행 0200A0E3 0310A0E3 14209FE5 000082E5 Addr.bus 주소기계어 어셈블러 reset: 0000 0200A0E3 mov r0,#2 0004 0310A0E3 add r0,r0,#3 0008 14209FE5 ldr r2,.l3 000C 000082E5 str r0, [r2, #0] 000000008 명령어버퍼 E59F2014 PC 명령어해석 int ival; -> 0x00000054 에할당 int *pival; pival = &ival; => 컴파일러에의해 R2 로지정 operand 값.L3(00000054) 을 R2 에저장 Bmux data bus 000000054 R0 Amux R1 R2 00000054...... FLAG MUL ALU Barrel Shifter
.00.04.08.0C Step 7 fetch : str 0200A0E3 0310A0E3 14209FE5 000082E5 주소기계어 어셈블러 reset: 0000 0200A0E3 mov r0,#2 0004 0310A0E3 add r0,r0,#3 0008 14209FE5 ldr r2,.l3 000C 000082E5 str r0, [r2, #0] 00000000C Addr.bus 명령어버퍼 E5820000 PC 명령어해석 Str fetch 명령어 E5820000 해석 R2 의주소에 R0 의값저장 Bmux data bus 000000000 R0 00000005 Amux R1 R2 00000054...... FLAG MUL ALU Barrel Shifter
.00.04.08.0C Step 8 str 실행 0200A0E3 0310A0E3 14209FE5 000082E5 Addr.bus 주소기계어 어셈블러 reset: 0000 0200A0E3 mov r0,#2 0004 0310A0E3 add r0,r0,#3 0008 14209FE5 ldr r2,.l3 000C 000082E5 str r0, [r2, #0] 00000000C 명령어버퍼 E5820000 PC 명령어해석 Str fetch 명령어 E5820000 해석 R2 의주소에 R0 의값저장 Bmux data bus.50.54.58.5c xxxxxxxx 00000005 xxxxxxxx xxxxxxxx address bus 00000000... R0 00000005 R1 R2 00000054... FLAG Amux MUL ALU Barrel Shifter 00000054 00000005
ARM 동작속도높이기 주소기계어 어셈블러 reset: 0000 0200A0E3 mov r0,#2 0004 0310A0E3 add r0,r0,#3 0008 14209FE5 ldr r2,.l3 000C 000082E5 str r0, [r2, #0] MOV A,00H ADD A,02H MOV 0A0,A FETCH OPRAND FETCH OPRAND FETCH OPRAND 데이터 74 00 실행 25 02 실행 F5 A0 mov r0,#2 파이프1 파이프2 파이프3 파이프4 E3A00002 decode 실행 E3A00005 XX add r0,r0,#3 E3A01003 decode 실행 XX XX prefetch ldr r2,.l3 E59F2014 decode 실행 XX str r0,[r2,#0] E5820000 decode 주소계산 전송 * 8051 없는가상의개념 (80486, ARM 등에존재 )
CPU 장치개발
장치개발과정 목적이정해지면목적에맞는칩을선정회로설계 PCB 제작 CPU 개발환경구축 CPU에맞는환경이다름프로그램작성프로그램실행과디버깅반복생산및판매
CPU 와프로그램 목적이맞는프로그램은시스템특성에따라 C 와어셈블러로작성 C Compiler LIB (Library) 개발툴만드는회사가작성 printf(), strcpy(), sin(), 어셈블리코드 OBJ (Object) + EXE, HEX code Assembler Linker
프로그램과메모리사용 int a; int main() { } a = 10; a++; printf( a=%d,a) return 0; 기계어코드 (ROM/RAM) 명령이처리위한기계어코드영역 변수데이터 (RAM) 명령이실행될때데이터가저장되는공간 고정데이터 (ROM/RAM) 명령이실행될때변하지않는변수공간
컴파일러와개발툴 컴파일러는각 CPU 에따라다르게작성된다. CPU 의종류가다르면다른컴파일러가필요하다. 컴파일러는구입하는것이일반적이다. 같은 CPU 라도컴파일러판매회사는다름 n 8051 : IAR, Keil 어셈블러는주로 CPU 생산업체에서공급한다. C 를사용하지않는다면컴파일러구입없이간단히개발할수있다.
메모리프로그램전송방식 작성된프로그램이실행하기위해최종에는메모리에전송이필요 (CPU 의동작없이 ) CPU 와메모리존재의형태에따라전송방식을다르다. 코드영역이 EPROM 일경우 n EPROM 을롬라이터를사용하여쓴다. 외부 FLASH 을사용일경우 n CPU 가 JTAG 을지원할경우는 JTAG 라이터로전송 내부 FLASH 을사용할경우 n CPU 에서라이터 (ISP 또는 JTAG) 을사용하여전송
코드영역이 EPROM EPROM 이 CPU 내부에있는경우도마찬가지 롬라이터 PC 8031 EPROM 소켓 UART USB ROM Writer program RAM
롬라이터와 EPROM 지우기 타이머 자외선형광등 타이머에의해자동꺼짐
내부 FLASH 을사용 (AT89LP2052) EPROM 이 CPU 내부에있는경우도마찬가지 PC ISP Writer program LPT 버퍼
AT89LP2052 PC ISP Writer LPT ISP
외부 FLASH 을사용 JTAG- 임베디드 CPU 의경우가대표적 ARM PC JTAG 케이블 JTAG Writer program LPT 버퍼 TDI TDO TMS TCK TRST JTAG ARM core 74HC541 FLASH control FLASH
프로그램디버깅체계 1 에뮬레이터장비 MCU 계열은메모리가한칩에있어메모리용량때문에코드를 RAM 에서실행시킬수없다 CPU 을대신하여프로그램을대신할수있는장비가필요 장비의커넥터를 PCB 에연결하여 CPU 대신동작시켜회로와프로그램을확인한다. 장비값이비싸나디버깅이쉬워개발기간단축 전자적으로쓸수있는 FLASH 의사용으로직접프로그램을전송 특별할장비가필요없어에뮬레이터장비구입비없음 간단한전송장치를써고디버깅이불편하다. UART 을통해실행상황을 PC 로전송하여디버깅할수있다.
프로그램디버깅체계 2 ISP 로내부 FLASH 사용할경우 RAM 의용량이제한되어있어프로그램을 RAM 에넣을수없다. 매번 ISP 로프로그램을전송한다. 외부에메모리를추가하여 RAM 에프로그램을넣을수있는경우 프로그램을매번 RAM 넣고실행후최종적으로 ROM/FLASH 로옮겨실행한다. 이때전송은 ROM 프로그램의실행을통해 PC 와통신하여 RAM 으로프로그램을전송한다. 통신은 UART(RS-232C), USB, ETHERNET 사용할수있다.
에뮬레이터장비사용
에뮬레이션방식 PCB 8052 커넥터 목적프로그램작성 목적프로그램에뮬레이터에전송 에뮬레이터 실행후오류확인 PC error 오류? No error IDE 툴 실제 8052 부착하고프로그램전송
8031 의디버깅체계 ( 외부메모리 ) 8031 EPROM 모니터 EPROM 에 PC 와통신하여코드를 RAM 복사할수있는프로그램작성후굽는다 목적프로그램작성 Serial RAM 목적프로그램 RAM 에전송 실행후오류확인 PC 코드전송용프로그램 error 오류? No error 최종코드를 ROM 에전송후실행
AT89LP2052 ISP FLASH AT89LP2052 8051 core 목적프로그램작성 FLASH 목적프로그램 FLASH 에 ISP 로전송 ISP 실행후오류확인 ISP writer PC error 오류? No error 추가전송없이사용
ARM 의디버깅체계 ( 외부메모리 ) PC CPU 개입없음초기 FLASH 에쓰기 FLASH FLASH 에 PC 와통신하여코드를 RAM 복사할수있는프로그램작성후 JTAG 로전송 JTAG bootloader 목적프로그램작성 ARM Serial USB RAM 목적프로그램 RAM 에전송 Bootloader 에의해 RAM 에복사됨 실행후오류확인 PC 코드전송용프로그램 CPU 의프로그램에의해통신및쓰기 error 오류? No error 최종코드를 FLASH에전송후실행
마이크로컨트롤러의정의 마이크로프로세서 프로세서를하나의칩안에집적하여넣어소형화한형태 컴퓨터의발전과함께고성능의프로세서로발전했으며, 최근에는 6 4 비트의고성능프로세서들이출시되고있음. 마이크로프로세서는점점고성능화하면서범용컴퓨터에사용됨. 마이크로프로세서의발전 1971 년 Intel 사 4bit 마이크로프로세서 4004 개발 이후여러회사에서 8bit 마이크로프로세서개발 n Intel : 8008( 72), 8080( 74), 8085( 76) n Motorola : MC6800( 74), MC6805( 76), MC6809( 77) n Zilog : Z80( 76) 이후 8, 16, 32, 64bit 마이크로프로세서개발 n Intel : 80186, 80286, 80386, 80486,Pentium, n Motorola : 68000, 68020, 68040, 68060,
마이크로컨트롤러의정의 마이크로컨트롤러 (MCU: Micro Controller Unit) 지능화와소형화를위하여마이크로프로세서에메모리와각종주변장치들을함께집적하여넣은칩 마이크로프로세서코어, 여러가지크기와다양한종류의메모리, 여러종류의주변장치, 여러종류의입출력포트를하나의칩에집적 여러응용분야에필요한주변기기들을한칩내에서모두제공. 마이크로컨트롤러의발전 1975년 : Texas Instrument TMS1000 개발 ( 마이크로컨트롤러의시초 ) (1971년 Intel 4bit 마이크로프로세서 4004 개발 ) 1976년 : Intel 8bit M/C 8048(MCS-48) 개발 Motorola 8bit MC6801 개발 1980년 : Intel 8bit M/C 8051(MCS-51) 개발 1982년 : Intel 16bit MCS-96 개발 1988년 : Intel 32bit M/C 80960 개발 etc.
마이크로컨트롤러 마이크로컨트롤러 (MCU) 의특징 주변장치들을센싱및제어하기위한 I/O 능력이강화 타이머 / 카운터, 통신포트내장및인터럽트처리능력보유 Bit 조작능력이강화 제품의소형화및경량화 제품의가격이저렴 ( 부품비, 제작비, 개발비및개발시간절감 ) 융통성및확장성이용이 ( 프로그램만변경 ) 신뢰성이향상 ( 부품수적어시스템단순, 고장율적고, 보수편리 )
마이크로컨트롤러 마이크로컨트롤러 (MCU) 의응용 산업 : 모터제어, 로봇제어, 프로세스제어, 수치제어, 장난감등 계측 : 의료용계측기, 오실로스코프등 가전제품 : 전자레인지, 가스오븐, 전자밥솥, 세탁기등 군사 : 미사일제어, Torpedo 제어, 우주선유도제어등 통신 : 휴대폰, 모뎀, 유무선전화기, 중계기등 사무기기 : 복사기, 프린터, plotter, 하드디스크구동장치등 자동차 : 점화타이밍제어, 연료분사제어, 변속기제어등 생활 : 전자시계, 계산기, 게임기, 금전등록기, 온도조절기등
마이크로컨트롤러 마이크로컨트롤러 (MCU) 제조사 Motorola(FreeScale) : MC6805, MC68HC16, MC68332, HCS12 Samsung : KS51, KS88, KS16, KS32 Microchip : PIC16/17 Atmel : AVR시리즈, 8051시리즈 Zilog : Super-8 Stmicro : STM32 시리즈 Texas Instrument : MSP시리즈 etc.
마이크로컨트롤러 마이크로컨트롤러 (MCU) 의발전방향 고성능화 n 32 비트 ARM 코어를내장한고성능마이크로컨트롤러 다기능화 n 다양한특수기능들을내장한다기능마이크로컨트롤러 소형화 n 초소형임베디드시스템장착을위한초소형마이크로컨트롤러 저전력화 n ` 소형배터리로장시간동작이가능한초저전력마이크로컨트롤러 저가격화 n 1$ 이하의가격을가지는저가격마이크로컨트롤러
AVR 마이크로컨트롤러 AVR 마이크로컨트롤러 ATMEL 사가 1997 년에처음발표한 8 비트제어용마이크로프로세서 Alf-Egil Bogen 과 Vegard Wollan 의진보된 RISC 기술을기반되었다고하여첫글자를따서 AVR 이라고명명 많은장점때문에상대적으로늦게출시되었음에도불구하고 8051 이나 PIC 을능가하는인기를단시간내에얻게되었음.
AVR 마이크로컨트롤러 AVR 마이크로컨트롤러의특징 RISC (Reduced Instruction Set Code) 구조 하버드아키텍처 (Harvard Architecture) 32 개의 8 비트범용레지스터를가지는레지스터중심형구조 CMOS 기술채택으로소비전력이매우적고동작전압이 1.8-5.5V 로큼 다양한동작모드를제공해저전력동작지원 1K-256Kbyte 플래시롬, EEPROM 및 SRAM 이작은칩하나에내장. 유사 RISC 구조와 32 개의레지스터사용과고집적으로 1MHz 당 1MIPS 의처리속도. 8 핀에서 100 핀의외형과이에상응하는메모리와기능을갖는다양한시리즈의제품이존재 모델에따라매우다양한 I/O 기능을사용가능 외부시스템버스를이용하여데이터메모리또는 I/O 디바이스를확장가능. 다양한인터럽트소스와처리기능보유. 무료개발도구인 AVR Studio 등, 다양하고값싼개발도구제공. ISP(In System Program) 기능제공.
AVR 마이크로컨트롤러 AVR 마이크로컨트롤러의종류 Tiny 시리즈 n 핀수가 8-24 핀정도의작은외형 n 대부분외부시스템버스가없음 n 작은메모리용량 ( 내부에 1K-2K byte 정도의플래시메모리를보유 ) n 저속저성능 n 저가격 ( 소형제어기에적당 ). Mega 시리즈 n 28-100 핀정도의외형 n 큰메모리용량 ( 내부에 8K-256Kbyte 정도의플래시메모리와 256-4K byte 정도의 EEPROM 과 512-4K byte 의 SRAM 을내장 ) n 고속고성능 (20MHz 의클럭에서 20MIPS 의속도, 다양한기능 ) n 고가격. AT90 시리즈 n 중간정도사양을가진시리즈로현재는널리사용되지않음.
ATMega128 마이크로컨트롤러 ATmega128 마이크로컨트롤러 Atmel 사의 8-bit 마이크로컨트롤러 고기능의 AVR Mega 시리즈중에서도가장고성능대용량의마이크로컨트롤러임.
ATMega128 특징 ATmega128 사양 고성능저전력 AVR 8bit Microcontroller 향상된 RISC 아키텍쳐 (16MIPS @ 16Mhz) 133 종명령세트 (in 1 cycle) 32 x 8bit 범용레지스터 + 주변컨트롤레지스터 /Multiplie (in 2 cycle) 16MHz 에서 16MIPS progress 비휘발성프로그램과데이터메모리 128K Byte 내부프로그램가능한 ISP Flash memory 선택적인 Boot code section (used In-System Programming by On -chip Boot Program) ISP (In System Programming) 를통해어플리케이션영역과부트영역에있어 F/W 다운로드가능 4K Byte EEPROM 4K Byte 내부 SRAM 외부최대 64K 메모리공간 프로그램 Lock-ISP 을위한 SPI 인터페이스 내장메모리 Programing 과 On-Chip Debug 를위한 JTAG 포트지원
ATMega128 특징 ATMega128 주변장치특징 2 개의 8 비트타이머 / 카운터 (Timer/Counter)(0,2), 2 개의 16 비트타이머 / 카운터 (1,3) 2 개의 8bit PWM 채널 6 개의프로그램가능한 2~16bit PWM 채널 분리된프리스케일러와비교모드, 캡쳐모드를가진두개의확장 16 비트타이머 / 카운터 분리된오실레이터에의한 Real Time Count Output Compare Modulator 8 채널, 10bit ADC Two-wire Serial 인터페이스 두개의시리얼 UART Master/Slave SPI 시리얼인터페이스 프로그램가능한워치독 (Watchdog) 타이머 아날로그비교기
ATMega128 특징 ATMega128 마이크로컨트롤러코어 (Core) 특징 Power-on Reset, 안정된전원공급을위한 Programmable Brown-out Detection 내부 RC 오실레이터 외부와내부의인터럽트소스 6개의 Sleep 모드 소프트웨어적으로선택가능한클럭주파수 전체풀업 Disable* I/O 와 Package 프로그램가능한 53개의 I/O 64-lead TQF / 64-pad MLF* Operation Voltage 2.7 ~ 5.5V : ATmega128L* 속도- 0 ~ 8 MHz : ATmega128L
ATMega128 내부구조
ATMega128 외형과핀기능 ATmega128 패키지 64pin TQFP 혹은 MLF 6 개의범용입출력포트제공
ATMega128 핀기능 제어신호 RESET( 핀 20) : 시스템리셋신호. XTAL1, XTAL2( 핀 24,23) : 발진용증폭기입력및출력단자. Vcc( 핀 21,51) : 전원입력단자. GND ( 핀 22,53,63) : 그라운드입력단자. AVCC( 핀 64) : AD 변환기및포트 F 에대한공급전압 AREF( 핀 62) : ADC 참조전압 (Reference Voltage) PEN( 핀 1) : Programing Enable 신호. 파워온리셋시 0 상태로유지해 SPI 를허용하게한다.
ATMega128 핀기능 범용입출력신호 포트 A (PA7~PA0: 핀 44-51) : 8 비트양방향입출력단자. 외부메모리를둘경우에는주소버스 (A7-A0) 와데이터버스 (D7-D0) 로사용. 포트 B (PB7~PB0: 핀 10-17) : 8 비트양방향입출력단자. SPI 용단자혹은 PWM 단자로도사용 포트 C (PC7~PC0: 핀 35-42) : 8 비트양방향입출력단자. 외부메모리를둘경우에는주소버스 (A15-A8) 로사용. 포트 D (PD7~PD0: 핀 25-32) : 8 비트양방향입출력단자. 타이머용단자혹은외부인터럽트용단자로사용. 포트 E (PE7~PE0: 핀 2-9) : 8 비트양방향입출력단자. 타이머용단자, 외부인터럽트, 아날로그비교기, USART 용단자로사용. 포트 F (PF7~PF0: 핀 54-61) : 8 비트양방향입출력단자. AD 변환기혹은 JTAG 인터페이스용단자로도사용. 포트 G (PG4~PG0: 핀 19, 18, 43, 34, 33) : 5 비트양방향입출력단자. 외부메모리스트로브신호, RTC 타이머용발진기단자로사용.
ATMega128 메모리구조 ATmega128 메모리구조 하버드구조를가짐 프로그램메모리 : 프로그램코드를저장하고실행시키기위해필요한메모리 데이터메모리 : 프로그램실행에필요한데이터를저장하는메모리 n RAM n n n ROM n 레지스터 SRAM EEPROM n 외부데이터메모리
ATMega128 메모리구조
ATMega128 메모리구조 프로그램메모리 프로그램코드를저장하고실행하기위해필요한메모리 내부 128KB(byte) 에해당되는플래시메모리 각번지가 16bit씩이뤄져있음. Boot flash Section과 Application flash Section으로나뉘어져있음 (Self-Programming 지원 ) n Application flash Section : 프로그램코드를저장하는공간 n Boot Flash Section : Boot Loader HEX코드를저장하는공간 n BootLoader를이용하여 ISP 없이도소프트웨어업그레이드가능
ATMega128 메모리구조 데이터메모리 ( 레지스터 ) 프로그램이실행될때임시로데이터를저장하는고속메모리 2가지종류로나뉘어짐 n 범용레지스터 (General Purpose Register) n ALU 연산에필요한데이터들을임시로저장하는데사용 n 특수기능레지스터 (Special Function Register) n 칩의 I/O 제어나상태보고등의특별기능들을수행
ATMega128 메모리구조 범용레지스터 R0~R31 까지 32 개의범용레지스터를보유
ATMega128 메모리구조 특수기능레지스터 칩의 I/O 제어나상태보고등의특별기능들을수행 2가지종류로나뉘어짐 n I/O 레지스터 n n n n 64바이트 (0x20에서 0x5f번지 ) 로구성내장된각종 I/O 장치를제어상태레지스터 (SREG) : ALU의연산후상태와결과를표시스택포인터 (SP) : 스택위치표시 n 확장 I/O 레지스터 n n 160바이트 (0x60에서 0xff번지 ) 로구성 ATmega128에추가된각종 I/O를제어
ATMega128 메모리구조 데이터메모리 ( 내부 SRAM) 4K의 SRAM이내장 ( 메모리번지는 $0100~$10FF까지포함 ) 내부프로그램코드에의해발생되는데이터를일시적으로저장 프로그램에서사용자변수의저장영역이나스택영역으로사용 일반모드와 ATmega103호환모드로나뉘어짐 데이터메모리 (EEPROM) 전원이꺼지더라도지속적으로그값을유지해야할필요가있는별도의데이터를저장하기위해사용되는메모리 총용량 4KB(byte) 로구성
ATMega128 메모리구조 외부데이터메모리 0x1100-0xffff번지에외부데이터메모리를연결하여사용가능 외부램, 외부플래쉬롬또는 LCD나 AD변환기와같은주변장치의인터페이스용으로사용가능 외부메모리인터페이스기능 n 주변장치와적절한인터페이스를위한 0-3 의대기사이클지정가능. n n n 2개의섹터로외부데이터메모리를분할하고이들에독립적인대기사이클을지정할수있음. 16비트주소의상위바이트중에서필요한갯수의비트만을주소버스로동작하게할수있음. 데이터버스의신호들이동작할때전류소비량이감소되도록 BUS-keeper 기능을설정할수있음.
ATMega128 클록 ATMega128 클록종류 다양한소스에의해클록을발생시키고분배가가능. 소비전력을절약시키기위해개별적으로공급차단가능 입력클록의종류 n n CPU 클록 : 범용레지스터, 상태레지스터, 데이터메모리와같은 AVR의핵심적인동작과관련된클록. I/O 클록 : 타이머, SPI, USART 등 I/O모듈대부분에서사용되는클록 n 플래쉬클록 : 플래쉬롬과의인터페이스를제어하는클록. n 비동기타이머클록 : 외부 32kHz 수정발진기를소스로하는비동기타이머용클록. n AD 변환기클록 : AD 변환기용의클록.
ATMega128 클록 ATMega128 클록발생원 5가지의클록발생원이존재 CKSEL3~0와 SUT1~0, XDIV 레지스터를이용하여클록발생원과주파수를설정 다섯가지클록발생원 n n n n n 내부 RC( 디폴트클록 ) 발진기 : 내장된 RC 발진기를사용하는경우외부 RC 발진기 : 정밀한타이밍이요구되지않는용도로외부에 RC 소자를접속한발진회로를사용. 외부수정발진기 : 외부에크리스탈또는세라믹레조네이터를사용하는경우저주파수정발진기 : 외부에 32.768kHz의낮은주파수크리스탈을사용하는경우외부클록 : 외부다른보드 (8051보드, PIC보드 ) 등의클럭을가져와 XTAL1단자에연결.
ATMega128 Sleep 모드 ATMega128 Sleep 모드 전원을절약할수있는 6가지의다양한슬립모드가제공 MCUCR(MCU Control Register) 레지스터를설정하여모드를선택하고, SLEEP 명령을실행하여슬립모드에돌입하도록함. 6가지 SleepMode n Idle모드 n ADC noise reduction 모드 n Power-down 모드 n Power-save 모드 n Standby 모드 n Extended Standby 모드
ATMega128 Reset 모드 ATMega128 Reset 모드 정상적으로동작하고있는마이크로컨트롤러가리셋되면모든 I/O레지스터값이디폴트값으로초기화되고, 프로그램은리셋벡터에서시작된다. 리셋의 5가지발생원 n Power-on Reset : 전원전압 VCC의전압레벨에따른리셋 n External Reset : /RESET 핀에의한외부리셋 n Watchdog Reset : 워치독타이머에의한리셋 n Brown-out Reset : Brown-out Detector에의한리셋. n JTAG AVR Reset : JTAG 시스템에의한리셋.