핵심포인트를꽉짚어주는 AVR ATmega128 완전정복 제 1 장 AVR ATmega128 개요 [1/4] AVR 의특징및 ATmega128 의내부구조 1
CHARTER 01- AVR ATmaga128 개요 CHARTER 01 목차 1.1 AVR 이란? 1.2 AVR 의제품종류 1.3 AVR 의어플리케이션 1.4 ATmega128 의특징 1.5 ATmega128 의핀배열 1.6 ATmega128 의블록도 1.7 ATmega128 의내부구조 1.8 ATmega128 의메모리 1.9 시스템클록과클록옵션 1.10 인터럽트 (Interrupt) 1.11 외부인터럽트 1.12 전원관리와휴면모드 1.13 ATmega128 의타이머 / 카운터 1.1414 ATmega128 의디지털입출력핀구조 1.15 리셋 (Reset) 1.16 SPI 통신인터페이스 1.17 TWI 통신인터페이스 1.18 USART 통신인터페이스 1.19 EEPROM 데이터메모리 1.20 ATmega128 의아날로그디지털변환 1
1.1 AVR 이란? Advanced d Virtual RISC 의약자이며 RISC 구조의마이크로컨트롤러 성능, 저전력 8 비트또는 32 비트마이크로컨트롤러 명령어가간단하고동작속도가빠르다 하바드구조 (Havard Architecture) 에의한 1 클록 1 명령 (Assembly-language) language) 처리 1MHz 의클록주파수에서 1MIPS 의처리속도로동작 다양한명령과쉬운구조를띄고있어마이크로컨트롤러를이해하는데쉽게접근할수있음. 가격이저렴하고응용하기쉬워산업시장에서도많이사용되어짐 32 개의범용레지스터와 RISC 구조의디자인은 C 언어를이용한개발에적합 내부에플래시프로그램메모리와 SRAM 데이터메모리를제공함으로서새로개발되는제품의크기를줄일수 있고, 제품의크기가줄면서원가절감에도도움이됨. ISP(In-System Programming) 다운로드기능지원 JTAG 을이용한디버깅용이 2
1.2 AVR의제품종류 Product Family 라는것은이들유닛들의용량이나성능등으로구분되어진다. (1) tinyavr 최대 8KBytes의플래시프로그램메모리와 512Bytes의 SRAM과 EEPROM 데이터메모리를가진범용마이크로컨트롤러계열로서표 1.2.1과같은종류가있다. (2) megaavr 곱셈기가내장된최대 256KBytes 의플래시메모리와 4KBytes 의 EEPROM 메모리 8KBytes 의 SRAM 을가진고성능마이크로컨트롤러계열 (3) xmegaavr 일반 8 비트마이크로컨트롤러에비해증진된성능과새로운주변회로를포함 DMA 와이벤트시스템을내장하여저전력 / 고성능시장에적합한마이크로컨트롤러계열 (4) Automotive AVR 자동차등에서사용하는 CAN 통신회로를내장 자동차에특성화된마이크로컨트롤러계열 3
1.3 AVR의어플리케이션 (1) 어플리케이션경향 차량용장치 LCD Driver CAN Networking USB 연결장치 모터제어 광제어 Automotive Lighting 배터리 802.5.4/ZigBee 원격접속제어 (2) 패키징범위 PDIP : 40, 28, 20, 8 SOIC : 20, 14, 8 TQFP : 100, 64, 44, 32 QFN : 44, 32, 28, 20 BGA : 100 Smart Battery Remote Access Control Motor Control 4
1.3 AVR의어플리케이션 (3) AVR(8 비트마이크로컨트롤러 ) 이포함하는제어회로 AVR 은하나의칩안에여러회로가집적된형태이다. Flash (Program) EEPROM (Data) SRAM (Data) DIGITAL I/O USART ADC RTC WDT JTAG SPI TWI 8 Bit Timer 16 Bit Timer PWM 5
1.4 ATmega128 의특징 8 비트 AVR 마이크로컨트롤러의 megaavr 패밀리계열중하나의프로세서 64 핀으로구성되었으며, TQFP 형패키지의저전력 8 비트 CMOS 마이크로컨트롤러 ISP 다운로드에서 MOSI, MISO 가아닌 PDI, PDO 를사용한다. 데이터메모리를외부에최대 64kByte 까지확장할수있다. mega103 호환모드를가진다. 2 개의 UART 회로를가진다. RTC 기능을가진다. JTAG 을지원한다. 6
1.4 ATmega128 의특징 (1) 향상된 RISC 구조 32개의 8-비트범용레지스터및상태또는제어레지스터 133개의명령어 : 대부분 1사이클에처리되는명령어 16MHz의입력클록에서최대 16MIPS로동작 2사이클내에동작하는곱셈기내장 완전한정적동작지원 (2) 비휘발성프로그램메모리와데이터메모리 128KBytes 의 ISP(In System Programming) 이가능한플래시메모리 프로그램의실행코드저장영역 최소 10,000 번이상의쓰기및삭제보장 소프트웨어보안을위한프로그램메모리잠금기능 ISP(In System Programming) g) 를위한 SPI 인터페이스제공 4KBytes 의내부 SRAM 최대 64KBytes 까지의외부데이터메모리확장가능 4KBytes 의 EEPROM 비휘발성데이터저장영역 최소 100,000 번이상의쓰기및삭제보장 7
1.4 ATmega128 의특징 (3) 주변장치 8 비트타이머 / 카운터 (Timer/Counter) 2 개 ( 프리스케일러, 비교모드 ) 2 개의 8 비트 PWM 채널을가짐 16 비트타이머 / 카운터 (Timer/Counter) 2 개 ( 프리스케일러, 비교모드, 캡쳐모드 ) 2 에서 16 비트의해상도를가진프로그램가능한 6 개의 PWM 채널을가짐 16 비트와 8 비트타이머 / 카운터를결합한출력비교변조기 (Output Compare Modulator) 발진회로와분리된실시간카운터 (Real Time Counter) 8 채널의 10 비트 ADC(Analog to Digital Converter) 8 개의단극성입력채널 : 그라운드 (GND) 신호와입력신호 (Vi) 사이의전위차 7 개의차동입력채널 : 두입력신호의전위차 (Vp Vn) 2 개의프로그램가능한입력이득 (1, 10, 200 ) 을갖는채널 2 선식직렬인터페이스 (Two Wire Interface) 2 개의프로그램가능한 USART(Universal Synchronous Asynchronous Receiver and Transmitter) RS232 통신, RS485 통신등에적용할수있다. Master/Slave SPI 직렬인터페이스 (SPI Serial Interface) 내부발진회로와연결된프로그램가능한워치독타이머 (Watchdog Timer) 아날로그비교기 (Analog Comparator) 8
1.4 ATmega128 의특징 (4) 특별한마이크로컨트롤러기능 Power On 리셋기능 외부에별도의리셋회로없이전원이인가되면모든레지스터는초기화됨. 프로그램가능한 Brown Out 검출기능 2.7V 또는 4.3V 이하의전원전압을검출하는기능 프로그램으로조율이가능한내부 RC 발진회로 내부및외부인터럽트소스 6 가지의휴면모드 Idle, ADC Noise Reduction, Power-save, Power-down, Standby, Extended Standby 소프트웨어적으로선택가능한클록주파수 퓨즈비트로선택가능한 ATmega103 호환모드 전체풀업 (Pull-up) 저항해제기능 (5) 디지털입출력과패키지 53 개의프로그램가능한디지털입출력 64 핀의 TQFP 타입또는 64 핀의 Pad 를갖는 MLF 타입 9
1.4 ATmega128 의특징 (6) 동작전압 2.7V ~ 5.5V : ATmega128L 4.5V ~ 5.5V : ATmega128 2.7V ~ 5.5V : ATmega128A (7) 동작속도 0 ~ 8MHz : ATmega128L 0 ~ 16MHz : ATmega128 0 ~ 16MHz : ATmega128A (8) 전력소비 ATmega128A 의경우 정상동작 : 약 17.5mA(5V 16MHz) 휴면모드 : 약 6.9mA(5V 16MHz) 전원차단모드 : 약 0.8uA(5V 25 Watchdog Timer Disable) 약 17uA(5V 25 Watchdog Timer Enable) 전원절감모드 : 약 11uA(5V 25 Watchdog Timer Disable) 대기모드 : 약 2mA(5V 16MHz, CKOPT programmed) 확장대기모드 : 약 2mA(5V 16MHz, CKOPT programmed) (9) 동작온도범위 -40 ~ +85 ( 산업용스펙 ) 10
1.5 ATmaga128의핀배열 모두 64 개의핀으로구성 8 비트병렬입출력할수있는 7 개포트 기타핀 포트 A ~ 포트 G 포트 : 53 개의디지털입출력핀 A~F : 8 비트, G:5 비트 모두특수한기능을공유하여사용하고있음 전원 (VCC, AVCC, GND) 클록 (XTAL1, XTAL2) 리셋 (RESET) 프로그램관련 (PEN) Pxn 핀이름표기법 x 는 A ~ G 사이의문자 n 은 0 ~ 7 사이의숫자 핀의특수기능표시 Pxn 이름옆의 ( ) 안에표기 2 개이상의특수기능은 / 로구분 부논리동작의핀은핀이름위에바 (-) 를표시 11
1.5 ATmaga128의핀배열 표 1.5.1 ATmega128 의핀기능 핀이름 핀번호 역할 VCC 21,52 디지털공급전압 GND 22,53,63 기준전압 (Ground) 포트 A (PA7~PA0) 44~51 포트 A는 8비트양방향 I/O 포트로서내부풀업저항이있다. 포트 A는외부메모리제어에사용될경우어드레스 (A7~A0)/ 데이터버스 (D7~D0) 로멀티플렉스된다. 포트 B 포트 B는 8비트양방향 I/O 포트로서내부풀업저항이있다. 포트 B는타이머 / 카운터의 PWM 출력및 SPI 통신등의특수기능이 10~17 (PB7~PB0) 있다. 포트 C (PC7~PC0) 35~42 포트 C는 8비트양방향 I/O 포트로서내부풀업저항이있다. 포트 C는외부메모리제어에사용될경우상위어드레스 (A15~A8) 버스로동작한다. 포트 D 포트 D는 8비트양방향 I/O 포트로서내부풀업저항이있다. 포트 D는타이머 / 카운터의 PWM 출력및카운터입력, 입력캡쳐트 25~32 (PD7~PD0) 리거입력, 외부인터럽트, USART, TWI 통시등의특수기능이있다. 포트 E (PE7~PE0) 포트 F (PF7~PF0) 포트 G (PG4~P0) 2~9 54~61 18,19,33, 34,43 포트 E는 8비트양방향 I/O 포트로서내부풀업저항이있다. 포트 E는외부인터럽트, 타이머 / 카운터의 PWM 출력, 카운터입력, 입력캡쳐트리거입력, 아날로그비교기, USART, ISP 등의특수기능이있다. 포트 F는 8비트양방향 I/O 포트로서내부풀업저항이있다. 포트 F는 A/D 컨버터의아날로그입력, JTAG 디버깅신호등의특수기능이있다. 포트 A는 8비트양방향 I/O 포트로서내부풀업저항이있다. 포트 G는TOSC1과 TOSC2 단자에 32.768KHz의크리스탈을연결하여, RTC로이용할수있으며, 또한 ALE 및 WR, RD 등은외부 SRAM을제어하는신호로사용된다. RESET 20 외부리셋핀 XTAL1 24 반전발진증폭기및내부클록회로입력 XTAL2 23 반전발진증폭기로부터의출력 AVCC 64 ADC및포트F에대한공급전압 AREF 62 ADC 기준전압 PEN 1 저전압직렬프로그래밍모드에대한프로그래밍인에이블 12
1.6 ATmega128 의블록도 주요블록 AVR이대부분공통적으로갖는블록 프로그램카운터 (PC, Program Counter) 프로그램메모리 (Flash Program Memory) 프로그래밍로직 (Programming Logic) 명령레지스터 (Instruction Register) 명령해독기 (Instruction Decoder) EEPROM(EEPROM Data Memory) SRAM(SRAM Data Memory) 범용레지스터 (General Purpose Registers) ALU(Arithmetic ti Logic Unit) 상태레지스터 (SREG, Status Register) MCU 제어레지스터 (MCUCR, MCU Control Register) WDT(Watchdog Timer) 내부발진기 (Internal Oscillator) JTAG(Joint Test Action Group) 인터럽트유닛 (Interrupt Unit) 타이머 / 카운터 (Timer/Counter) 발진기 (Oscillator) 기타블록 마이크로컨트롤러가가지는일반적인블록 PORT(Digital Input/Output Port) ADC(Analog to Digital Converter) USART(Universal Synchronous and Asynchron ous serial Receiver and Transmitter) TWI(Two Wire Interface) SPI(Serial Peripheral Interface) 아날로그비교기 (Analog Comparator) 13
1.7 ATmega128 의내부구조 하바드구조 (Harvard architecture) 메모리와버스가프로그램과데이터로분리 퍼포먼스와패러럴리즘을최대한활용하기위함 하나의명령이처리되는동안 다음명령은프로그램메모리로부터프리 - 패치 모든클록사이클에서명령이처리되는것이가능 하바드구조와반대되는구조는폰 - 노이만 (J.von Neumann architecture) 구조이다. 14
1.7 ATmega128 의내부구조 프로그램메모리 (Program Memory) 시스템내에존재하며프로그래밍후다시프로그래밍이가능한플래시메모리 프로그램플래시메모리공간 = 부트프로그램섹션 + 어플리케이션프로그램섹션 전용락 (Lock) 비트를제어하여쓰기및읽기 / 쓰기형태로보호 SPM 명령으로어플리케이션플래시메모리섹션안에쓰기를하려할때 SPM 명령은반드시부트프로그램섹션에위치해야함. 15
1.7 ATmega128 의내부구조 산술논리연산장치 ALU(Arithmetic Logic Unit) 하나의클록사이클안에두피연산자 (operand) 는레지스터로부터출력되고, 처리하며, 결과를레지스터에저장 ALU 는레지스터간또는상수와레지스터간의산술및논리연산을지원 ALU 는단일레지스터만으로도산술및논리연산을처리할수있다. 산술연산후상태레지스터는처리결과를반영하여새롭게업데이트된다. 조건문, 분기명령, 명령호출, 직접어드레스접근등대부분 AVR 명령들은 16 비트로된하나의포맷을가지며, 프로그램메모리에는 16 비트또는 32 비트명령으로구성된다. 16
1.7 ATmega128 의내부구조 하나의클록사이클시간에빠르게접근할수있는 8 비트의 32 개의범용목적레지스터를포함하고, 이것은 ALU(Arithmetic Logic Unit) 와연동한다. 32 개의레지스터중 6 개는능률적인어드레스연산을가능케하는 데이터공간어드레싱을위한 3 개의 16 비트간접어드레스레지스터포인터로사용될수있다. X 레지스터 Y 레지스터 Z 레지스터 어드레스포인터중 Z 레지스터는 플래시프로그램메모리안의 룩업테이블을위한어드레스포인터로사용 17
1.7 ATmega128 의내부구조 인터럽트모듈은상태레지스터에전역인터럽트를허용하는비트 (SREG 레지스터의 7 번째 I 비트 ) 와제어레지스 터를가지고있다. 모든인터럽트는인터럽트벡터테이블안에분리된인터럽트벡터를가지고있으며, 인터럽트벡터의위치에따라우선순위를갖는다. 인터럽트의우선순위 낮은인터럽트벡터어드레스가더높은우선권을갖는다. 벡터번호벡터어드레스인터럽트소스인터럽트설명 1 $0000 RESET 외부핀, 전원인가리셋, 저전압검출리셋, 워치독리셋,JTAGAVR리셋 2 $0002 INT0 외부인터럽트 0 3 $0004 INT1 외부인터럽트 1 4 $0006 INT2 외부인터럽트 2 5 $0008 INT3 외부인터럽트 3 6 $000A INT4 외부인터럽트 4 7 $000C INT5 외부인터럽트 5 8 $000E INT6 외부인터럽트 6 9 $0010 INT7 외부인터럽트 7 10 $0012 TIMER2 COMP 타이머 / 카운터2 비교매치 31 $003C USART1 RX USART1, 수신완료 32 $003E USART1 UDRE USART1, 데이터레지스터비움 33 $0040 USART1 TX USART1, 송신완료 34 $0042 TWI TWI(I2C) 직렬인터페이스 35 $0044 SPM READY 저장프로그램메모리준비 18
1.7 ATmega128 의내부구조 스택 (Stack) 은범용데이터 SRAM 에할당됨 스택포인터는읽기및쓰기가가능 반드시리셋루틴에 SP(Stack Pointer) 를초기화해야함 리셋루틴 : 서브루틴이나인터럽트가실행되기전 데이터 SRAM 은 AVR 구조에서지원되는 5 가지다른어드레스지정방식을통하여쉽게접근됨 인터럽트요청이나서브루틴처리과정에서 복귀어드레스는스택 (Stack) 에저장됨 스택의크기는오직전체 SRAM 크기와 기사용된 SRAM 등으로제한됨 전체 SRAM = 기사용 SRAM + STACK 10FF 이터메모리 내부데 내부 SR RAM 영역 레지스터영역 Internal SRAM 4kByte (4096 X 8) 160 Ext I/O Registers 64 I/O Registers 32 Registers 0100 00FF 0060 005F 0020 일반적인 SP 초기값 = 10FF SP 최저값 = 0100 0000 ~ 001F 19
1.7 ATmega128 의내부구조 (1) ALU(Arithmetic Logic Unit) 32 개의범용레지스터와직접연결 ALU 의기능 산술연산 논리연산 비트연산 덧셈, 뺄셈, 곱셈, +1, -1, 2 의보수등의연산 AND, OR, XOR, NOT 등의연산 시프트, 논리곱, 논리합등의연산 레지스터사이의연산, 레지스터와상수와의연산은대부분한번의시스템클록으로수행 곱셈의경우 2 개의시스템클록에동작. 20
1.7 ATmega128 의내부구조 (2) 상태레지스터 (Status Register) SREG(Status Register) 산술연산명령이실행된이후의가장최근의결과를반영 연산결과는조건처리명령등에서프로그램의흐름을제어하는데사용 인터럽트서브루틴에진입하거나복귀할때자동으로저장되거나복구되지않음 인터럽트제어시상태레지스터는반드시소프트웨어에서제어해야함 SREG 는 ALU 의모든연산에따라최신값으로갱신 어셈블리어명령테이블을보고참조 21
1.7 ATmega128 의내부구조 -Bit 7 -> I : 전역인터럽트인에블 전역인터럽트활성화 (Global Interrupt Enable) 비트 인터럽트를활성화 = 1 로세트 인터럽트를비활성화 = 0 으로클리어 CLI 또는 SBI 어셈블리어명령을통해제어될수있음 -Bit 6 -> T: 비트복사영역 비트복사명령 BST(Bit STore), BLD(Bit LoaD) 에사용 BST 명령에의해목적지 (destination) 로동작, 다른레지스터의비트값이여기로복사됨 BLD 명령에의해공급지 (source) 로동작, 이비트의값이다른레지스터의비트로복사됨 - Bit 5 -> H : Half 캐리플래그 산술연산에서보조캐리가발생한상태를나타냄 BCD 연산에유용하게사용되는플래그비트 - Bit 4 -> S : 부호비트, S=N V 플래그 N( 음수플래그 ) 과플래그 V(2의보수연산의오버플로우플래그 ) 를 XOR한결과값 부호가있는정수와부호가없는정수의크기를비교할때사용 22
1.7 ATmega128 의내부구조 - Bit 3 -> V : 2 의보수오버플로우플래그 2 의보수연산에서오버프로우가발생하면논리 1 로설정됨 - Bit 2 -> N : 음수플래그 산술연산이나논리연산의결과가음수가되었을때논리 1 로설정됨 - Bit 1 -> Z : 0 플래그 산술연산이나논리연산의결과가 0 이되었을때논리 1 로설정됨 - Bit 0 -> C : 캐리플래그 산술연산이나논리연산의결과에서자리올림이발생했을때논리 1 로설정됨 감산에서는자리내림을나타냄 23
1.7 ATmega128 의내부구조 (3) 범용레지스터 8 비트로구성된 32 개의범용레지스터 사용자메모리의처음 32 개영역에배치됨 R26 ~ R31 은 X, Y, Z 포인터레지스터로사용 데이터영역의 16 비트간접어드레스지정방식에사용됨 Z 포인터레지스터는 128KBytes 의프로그램메모리공간을간접어드레싱또는호출시사용되기도함 범용레지스터의명령을처리하기위한입출력구조지원 하나의 8 비트출력오퍼랜드와하나의 8 비트결과입력 두개의 8 비트출력오퍼랜드와하나의 8 비트결과입력 두개의 8 비트출력오퍼랜드와하나의 16 비트결과입력 하나의 16 비트출력오퍼랜드와하나의 16 비트출력입력 24
1.7 ATmega128 의내부구조 (4) 스택포인터 (Stack Pointer) 임시데이터의저장 지역변수의저장 인터럽트와서브루틴콜이후에복귀하기위한어드레스를저장 스택포인터는초기화시스택의최대포인트를가리키도록한다. 스택포인터는상위메모리영역에서하위메모리영역으로향하도록동작하는것을유념해야한다. 스택포인터의초기값은적어도 0x100 이상으로설정되어야한다. Mega103 호환모드에서는최소 0x60 이상으로설정되어야한다. 25
1.7 ATmega128 의내부구조 (5) RAM Page Z 선택레지스터 - Bit 7:1 -> Reserved 비트 예약된비트로읽게되면항상 0 으로읽어진다. - Bit 0 -> RAMPZ0 : Extended d RAM Page Z-pointer RAMPZ 레지스터는 64KBytes 의 RAM Page 를사용할때 Z 포인터에의해접근한다. RAMPZ0 = 0 : 프로그램메모리어드레스 $0000 ~ $7FFF ( 하위 64KBytes) 를 ELPM/SPM 명령으로접근한다. RAMPZ0 = 1 : 프로그램메모리어드레스 $8000 ~ $FFFF ( 상위 64KBytes) 를 ELPM/SPM 명령으로접근한다. 26
1.7 ATmega128 의내부구조 (6) 명령처리시간 칩에의해선택된클록이 CPU Core 와직접연결되어 CPU 클록으로구동됨 위그림 : 하바드구조에의해가능하게된명령패치와명령실행의평행실행개념 기능, 클록, 전력등을비용과비교하여장점을가짐 1MHz 의클록으로 1MIPS 의성능을얻는파이프라인의기본기념 아래그림 : ALU 의동작사이클 한사이클동안 ALU 는 2 개의레지스터를오퍼랜드로사용하여실행되고결과는정해진레지스터에저장 27
1.7 ATmega128 의내부구조 (7) 리셋 (Reset) 과인터럽트핸들링 (interrupt Handing) 35 종의각기다른인터럽트소스제공 프로그램메모리영역에분리된리셋벡터와프로그램벡터를가짐 어플리케이션섹션과부트섹션의시작번지에벡터가있음 MCUCR.IVSEL = 1 이면인터럽트벡터는부트섹션에서시작 퓨즈비트의 BOOTRST 비트가 Program 되면리셋벡터는부트섹션에서시작 낮은어드레스벡터를가지는인터럽트의우선순위가높은우선순위를가짐 리셋벡터를제외하고, 가장높은우선순위의인터럽트벡터는외부인터럽트 0(INT0) 의벡터임 모든인터럽트는전역인터럽트허용과개별인터럽트허용이되어야사용할수있음 인터럽트발생시서브루틴실행중에 SREG.I = 0 으로클리어됨 이때모든인터럽트는금지된다. RETI 명령이실행되면자동으로 SREG.I = 1 로세트된다. 소프트웨어에의해 SREG.I = 1 이되면인터럽트는다시허용된다. 인터럽트서브루틴은 RETI 어셈블리어명령을만나면동작을완료하고원래위치로복귀함 28
1.7 ATmega128 의내부구조 에지트리거타입인터럽트 에지에서인터럽트플래그를세트하는인터럽트 전역인터럽트허용 + 개별인터럽트허용의경우 프로그램카운터는인터럽트의수행을위해인터럽트벡터로유도된다. 이때하드웨어적으로인터럽트플래그는 0 으로클리어된다. 개별인터럽트가허용되지않은경우 인터럽트발생시인터럽트플래그를세트하고, 개별인터럽트가허용될때까지기억한다. 개별인터럽트가허용되고, 전역인터럽트도허용되면우선순위에의해실행된다. 전역인터럽트가허용되지않은경우 인터럽트발생시관련한인터럽트플래그는세트되고, 전역인터럽트가허용될때까지기억한다. 전역인터럽트가허용되면우선순위에의해실행된다. 소프트웨어적으로인터럽트플래그를클리어하기위해서는플래그에 1 을쓰면된다. 레벨타입인터럽트 조건을만족하는한계속해서발생하는인터럽트 인터럽트플래그를필요로하지않는다. 인터럽트를허용하기전에인터럽트조건이없어지면인터럽트는발생하지않음 인터럽트에서빠져나가기전대기중인인터럽트가존재할경우 메인프로그램으로복귀하여하나이상의명령을수행한후인터럽트를수행한다. 상태레지스터는자동으로저장되거나복구되지않는것을유념해야한다. 소프트웨어에의한저장및복구프로그램요구 29
1.7 ATmega128 의내부구조 인터럽트동작타이밍 외부인터럽트 0 의예 프로그램카운터 PC = 99 PC = 100 프로그램메모리인터럽트서브루틴 타이밍설명 프로그램메모리메인프로그램 PC = 500 PC = 500+x PC=101 인터럽트 서브루틴으로이동... INT0 인터럽트서브루틴... 메인프로그램으로이동...... 메인프로그램... 30
핵심포인트를꽉짚어주는 AVR ATmega128 완전정복 제 1 장 AVR ATmega128 개요 [2/4] ATmega128 의내부구조 2
CHARTER 01- AVR ATmaga128 개요 CHARTER 01 목차 1.1 AVR 이란? 1.2 AVR 의제품종류 1.3 AVR 의어플리케이션 1.4 ATmega128 의특징 1.5 ATmega128 의핀배열 1.6 ATmega128 의블록도 1.7 ATmega128 의내부구조 1.8 ATmega128 의메모리 1.9 시스템클록과클록옵션 1.10 인터럽트 (Interrupt) 1.11 외부인터럽트 1.12 전원관리와휴면모드 1.13 ATmega128 의타이머 / 카운터 1.1414 ATmega128 의디지털입출력핀구조 1.15 리셋 (Reset) 1.16 SPI 통신인터페이스 1.17 TWI 통신인터페이스 1.18 USART 통신인터페이스 1.19 EEPROM 데이터메모리 1.20 ATmega128 의아날로그디지털변환 1
1.8 ATmega128 의메모리 프로그램메모리 전체용량 : 128kByte 128 kbyte = Application Flash Section + Boot Flash Section 64 kbyte X 16 bit 의구조 128 kbyte 의공간을접근하기위해 PC( 프로그램카운터 ) 16 비트와 RAMPZ 비트를같이사용 mega 계열의경우부품번호의숫자가플래시메모리의크기를나타냄 mega128 : 128kByte mega64 : 64kByte mega32 : 32kByte mega8 : 8kByte ISP(In System Programming) 이가능 Universal Programmer( 일명롬라이터 ) 없이 LPT, 232 포트제어및 USB 통신으로프로그램을다운로드하는기능 USB ISP의경우 STK500 or STK600 통신프로토콜사용 10,000 번의쓰기 / 삭제가보장됨 USB COM LPT 2
1.8 ATmega128 의메모리 데이터메모리 - SRAM 내부 SRAM 용량 mega128 일반모드 : 4 kbyte (4096 Byte) mega103 호환모드 : 4 kbyte (4000 Byte) mega128 일반모드 meg103 호환모드 내부 + 외부 SRAM 용량 : 총 64 Kbyte (65536 Byte) 선택에의해외부 SRAM을사용할수있다.(MCUCR.SRE = 1) 외부메모리는사용되는내부메모리의다음주소부터사용할수있다. mega128 일반모드 용량 : 65536 4352 = 61184 Byte (0xEF00 Byte) 시작주소 : 4352 번지 ( 0x1100 Address) mega103 호환모드 용량 : 65536 4096 = 61440 Byte (0xF000 Byte) 시작주소 : 4096 번지 (0x1000 Address) 참고 ) mega128 일반모드 : 4352 개의내부데이터메모리» 32개범용레지스터 + 64개 I/O 레지스터 + 160개확장 I/O 레지스터 + 4096개내부 SRAM mega103 일반모드 : 4096 개의내부데이터메모리» 32개범용레지스터 + 64개 I/O 레지스터 + 4000개내부 SRAM 3
1.8 ATmega128 의메모리 데이터메모리 - SRAM 64 개의 I/O 레지스터의접근 IN, OUT 어셈블리어명령만을사용 160 개의확장 I/O 레지스터의접근 ST/STS/STD, LD/LDS/LDD 명령만을사용 mega103 호환모드에서는확장 I/O 레지스터가존재하지않음 접근방법동일 내부메모리의접근 ST/STS/STD, LD/LDS/LDD 명령만을사용 외부메모리의접근 MCUCR 레지스터의 SRE 비트가 1 일때접근가능 ST/STS/STD, LD/LDS/LDD 명령만을사용 내부데이터메모리공간을초과할때외부데이터메모리에접근 내부메모리접근시 PG0, PG1 에할당된외부메모리읽기및쓰기 스트로브신호는사용되지않는다. 외부메모리접근시내부메모리접근때보다 1 클록사이클이추가된다. 스택 (STACK) 을내부또는외부 SRAM 에놓을수있으며, PUSH, POP 명령으로수행가능하다. 4
1.8 ATmega128 의메모리 외부메모리인터페이스 외부메모리를사용하기위해서는? MCUCR 레지스터의 SRE(External SRAM/XMEM Enable) 비트가활성화되어야함 (MCUCR.SRE = 1) 내부레지스터와 4kByte 의 SRAM 영역까지는내부에서접근하며, 그이상은외부에서접근함 0x1100 ~ 0xFFFF 번지의약 60kByte 가외부데이터메모리영역임. 외부메모리 64kByte 영역중약 4kByte 는내부메모리와겹침. A, C, G 포트는외부메모리접근을위한버스로동작한다. 그림 Memory Configuration A 는 ATmega128 의일반모드에서외부메모리영역을나타냄 그림 Memory Configuration B 는 ATmega128 의 mega103 호환모드에서외부메모리영역을나타냄 5
1.8 ATmega128 의메모리 외부메모리인터페이스 AD7:0 : 하위어드레스버스와데이터버스의다중송수신 A15:8: 상위어드레스버스 ( 비트수조절가능 ) ALE: ALE 신호 (Address Latch Enable) RD : RD 스트로브 WR : WR 스트로브 6
1.8 ATmega128 의메모리 외부메모리인터페이스레지스터 Bit 7 -> SRE : 외부 SRAM/XMEM 인에이블 외부메모리사용여부설정비트 외부메모리사용 = 1 로세트 포트 A, C, G 는외부메모리제어버스로동작함 외부메모리사용안함 = 0 으로클리어 포트 A, C, G 는일반포트로동작함 Bit 6 -> SRW10 : Wait-State 선택비트 ATmega128 의이전모델인 ATmega103 과의호환성을유지하기위해 MCUCR 레지스터에존재하는비트 퓨즈비트에서 103 호환모드를선택할경우 SRW10 에 '1' 이기록되면외부메모리액세스에하나의사이클이추가되어 One Wait State 로동작한다. ATmega128 단독모드로동작시킬경우에는 XMCRA 레지스터와함께 Wait State 의미세한조정에사용된다. 7
1.8 ATmega128 의메모리 외부메모리인터페이스레지스터 XMCRA - External Memory Control Register A Bit 6:4 -> SRL2, SRL1, SRL0 : Wait-state Sector Limit 느린속도의장치를외부메모리에연결할때섹터를나누고, 제어신호를지연시키는데사용됨. 외부메모리어드레스공간은독립된 wait-state 비트를가지고 2 개영역으로분리 SRL2, SRL1, SRL0 비트는아래표와같이섹터를분리한다. 초기값 SRL2, SRL1, SRL0은모두 0 임 전체의외부메모리어드레스공간은하나의섹터로간주된다.» 이때 wait-state 는 SRW11 과 SRW10 비트로구성된다. 8
1.8 ATmega128 의메모리 외부메모리인터페이스레지스터 XMCRA - External Memory Control Register A SRW11, SRW10 : wait-state 선택비트 for Upper 섹터 SRW01, SRW00 : wait-state 선택비트 for Lower 섹터 SRWn1 SRWn0 wait-state 0 0 No wait-state 0 1 Read/Write 스트로브동안 1 사이클대기 1 0 Read/Write 스트로브동안 2 사이클대기 1 1 Read/Write 스트로브동안 2사이클대기와새로운어드레스조정출력전 1 사이클대기 9
1.8 ATmega128 의메모리 외부메모리인터페이스레지스터 XMCRB - External Memory Control Register B -Bit 7 -> XMBK : 외부메모리 Bus-keeper 인에이블 XMBK = 1 Bus-keeper 를활성화» 활성화되면 AD7:0이 Tri-State가되려고하는것을막고이전의값으로출력되도록한다» XMBK는 SRE에의존하지않으며, XMEM 인터페이스가비활성화되어도 XMBK가 1 인동안에 Bus-keeper는여전히활성화된다. XMBK가 = 0 Bus-keeper 는비활성화 -Bit 2:0 -> XMM2, XMM1, XMM0 : 외부메모리 High 마스크 60kByte 어드레스공간이요구되지않는경우일부또는전체의 C 포트를일반기능을하는포트핀으로놓일수있는기능 XMM2 XMM1 XMM0 외부메모리어드레스비트 릴리즈된포트핀 0 0 0 8 None 0 0 1 7 PC7 0 1 0 6 PC7 - PC6 0 1 1 5 PC7 - PC5 1 0 0 4 PC7 - PC4 1 0 1 3 PC7 - PC3 1 1 0 2 PC7 - PC2 1 1 1 No Address High 비트 Full Port C 10
1.8 ATmega128 의메모리 외부메모리인터페이스 -TIP 외부 32kByte 메모리전체영역사용하기 주소버스의 A15를메모리에연결하지않고, 내부메모리 0x0000 ~ 0x10FF 영역 (4,352 Byte) 과겹치는외부 SRAM 영역 (0x0000 ~ 0x10FF) 을 AVR에서 0x8000 ~ 0x90FF로접근하여전체영역을사용 외부 64kByte 메모리전체영역사용하기 외부메모리의상위어드레스비트를 0 으로마스킹 XMCRB 레지스터의 XMMn 비트를 XMM[2:0] = 011 로설정 DDRC = 0XFF; // 포트 C를디지털출력으로설정 PORTC = 0X00; // 포트 C를모두 0으로클리어. AVR에서 0X2000 ~ 0X30FF 까지접근하여, 외부 SRAM 영역 (0X0000 ~ 0X10FF) 에접근할수있음.» 영역에따라 PORTC의 5~7번비트값을소프트웨어로제어해야함. 11
1.9 시스템클록과클록옵션 AVR의시스템클록 지원되는클록발생방법 내부 RC 발진 외부 RC 발진 크리스탈 / 레조네이터 저주파크리스탈 외부클록또는오실레이터 클록공급이되지않으면 AVR은동작하지않음 - ISP 도동작하지않음 퓨즈비트설정에주의 퓨즈비트 (Fuse Bit) CKSEL[3:0] 비트설정으로클록을선택함 Internal 1MHz TOSC1, 2 32.768kHz XTAL1 1~16MHz XTAL1 XTAL1, 2 XTAL1, 2 Internal 1~16MHz 1~16MHz 32.768kHz 1, 2, 4, 8MHz 12
1.9 시스템클록과클록옵션 (1) 클록소스 Programmed (bit = 0) Unprogrammed (bit = 1) 1 1 1 1 클록소스 CKSEL 3:0 외부수정오실레이터 / 세라믹공진기 1111 ~ 1010 외부저주파수정오실레이터 1001 외부 RC 오실레이터 1000 ~ 0101 내부 RC 오실레이터 0100 ~ 0001 외부클록 0000 13
1.9 시스템클록과클록옵션 (2) 기본클록소스 제품출하시퓨즈비트 ( 클록부분설정 ) CKSEL = 0001 : 내부 RC 발진, 1MHz SUT = 10 : Start Up Time, 65ms, 저속으로투입되는전원환경설정 SUT : 전원이안정적인수순에도달할때까지의지연시간 내부 RC 발진 1MHz 로동작하며, 65ms 이후에 Reset 동작을수행, (6) 내 부 RC 발진기 절참조 (3) 크리스탈발진기 수정발진기나레조네이터를모두사용 CKOPT ( 클록옵션, Clock Option) 크리스탈의경우발진기증폭모드를설정함 Programmed : XTAL2에출력되는신호를크게설정» 잡음이많은환경에적합» 2번째클록버퍼에출력할때사용 Unprogrammed : XTAL2의출력을약하게함» 전력소모량을줄임 레조네이터의경우발진주파수의범위를제한함 Programmed : 최대주파수범위 8MHz Unprogrammed : 최대주파수범위 16MHz C1 = C2 XTAL2 = OUTPUT XTAL1 = INPUT CKOPT CKSEL 3:1 주파수범위 (MHz) 권장하는 C1, C2의값 1 101 0.4 ~ 0.9-1 110 0.9 ~ 3.0 12 pf ~ 22 pf 1 111 3.0 ~ 8.0 12 pf ~ 22 pf 0 101, 110, 111 1.0 ~ 12 pf ~ 22 pf SUT 는교재참조 14
1.9 시스템클록과클록옵션 (4) 낮은주파수크리스탈발진기 32.768kHz의시계크리스탈을클록소스로사용하고자할경우 CKSEL = 1001 : 저주파 (32.768kHz) 크리스탈사용 CKOPT가프로그램 (Programmed) 되면 AVR 내부에 36pF의캐패시터가 XTAL1과 XTAL2에연결 외부캐패시터반드시제거 (5) 외부 RC 발진기 시간에민감하지않은응용의경우사용 주파수 f = 1 / (3RC) [Hz] C 는최소 22pF 이상이어야함 CKOPT 가프로그램 (Programmed) 되면 AVR 내부에 36pF 의캐패시터가 XTAL1 에연결 내부 36pF 캐패시터이용가능 SUT 는교재참조 CKSEL 3:0 Frequency Range (MHz) 0101 0 0.1 ~ 0.9 0110 0.9 ~ 3.0 0111 3.0 ~ 8.0 1000 8.0 ~ 12.0 15
1.9 시스템클록과클록옵션 (6) 내부 RC 발진기 AVR 칩내부에 RC 발진기를내장 1, 2, 4, 8 MHz의주파수를퓨즈비트설정으로선택 5V 25 에서의주파수 외부에발진회로가불필요 CKOPT는언프로그램 (Unprogrammed) 되어야함. AVR이리세하는동안 OSCCAL 레지스터의캘리브레이션값을읽고자동으로 RC 발진기를조정 5V 25 에서 1 MHz 선택시 ±3% 내의주파수로조정 SUT 는교재참조 CK SEL3:0 중심주파수 (MHz) 0001 1.0 0010 20 2.0 0011 4.0 0100 8.0 (7) 발진기조정레지스터 (OSCCAL) 제품표시바이트의첫번째번지 (0x00) 의상위바이트 (calibration byte) 값이자동으로레지스터에로드됨. 내부 RC 오실레이터가 1MHz 의주파수가되도록조정함 만약내부 RC 발진주파수를 1MHz 가아닌조금다른주파수로변경하고자할경우 사용자가 OSCCAL 레지스터에값을지정해야함 OSCCAL 값 출력주파수에대한출력주파수에대한 % 값에서최저주파수 % 값에서최고주파수 $00 50 100 $7F 75 150 $FF 100 200 16
1.9 시스템클록과클록옵션 (8) 외부클록 외부클록을이용해 AVR 을동작시키고싶을때사용 외부클록신호를 XTAL1 핀에물려야함 외부클록주파수가 AVR 의동작주파수가됨 퓨즈비트 CKSEL[3:0] = 0000 으로프로그램되어야함 CKOPT가프로그램 (Programmed) 되면 36pF의커패시터가 XTAL1과 GND 사이에연결됨 AVR 의안정적인동작을위해주파수변동이 2% 가넘지않도록해야함 2% 보다커질경우예상치못한결과를얻을수있음 이런때에는 AVR이 RESET 되도록해야함 SUT 는교재참조 (9) 타이머 / 카운터발진기 TOSC1, TOSC2 핀을타이머 / 카운터발진기의연결핀으로사용 타이머 / 카운터0의외부클록입력으로사용됨 32.768kHz의시계용크리스탈을외부커패시터없이연결 32.768kHz에최적화 RTC(Real Time Counter) 로동작 TIP - RTC 의의미 2^8 = 256 이고, 32768 / 64 = 512 임 ( 참고로 2^15 = 32768 임 ). 타이머 / 카운터0은 8비트이므로, 32.768kHz를 64분주하여입력하면 0.5초간격으로오버플로우발생 32.768 khz TOSC1 TOSC2 17
1.9 시스템클록과클록옵션 (10) 크리스탈분주제어레지스터 (XVID:XTAL XTAL Divide id Control Register) 소비전력을감소하는데유용함 -Bit 7 -> XDIVEN : XTAL Divide 인에이블 XDIVEN = 1 로설정되는경우 CPU와모든주변장치 (clk CPU, clk I/O, clk FLASH, clk ADC ) 의클록주파수는 XDIV6~XDIV0의설정에따라분주됨 XDIVEN = 0 으로설정되는경우 XDIV6~XDIV0 비트의값을바꿀수있음 클록주파수의분주는적용되지않음 동작중에도어플리케이션에적당한클록주파수로변화되도록설정이가능 -Bit 6:0 -> XDIV6:0 : XTAL Divide 선택비트 6 ~ 0 XDIVEN 비트가 1로설정되는경우적용공급되는클록을 2~129 사이의값으로분주 분주되는주파수 XDIV[6:0] 의값을 d 라고정의할경우. ( 단, XDIVEN = 1) source clock f CLK = 129 d 18
부록 ( 잠금비트및퓨즈비트 ) 메모리잠금비트 (memory lock bit) ATmega128은응용프로그램섹션과부트로더섹션으로구분되어있음 각각의섹션을사용용도에따라메모리의내용을보호하기위한 1바이트장치 메모리보호기능 프로그램메모리의내용을외부에서읽어볼수없도록보안을유지 실수로프로그램이수행되는것을방지 퓨즈비트 (Fuse bit) 기본적인 MCU 시스템의기능을설정함 칩삭제기능을수행하더라도퓨즈비트는영향을받지않음. 모두 3 바이트로구성 확장바이트 (Extended Byte) : mega103 호환모드사용여부, 워치독타이머사용여부 상위바이트 (High Byte) : JTAG 사용여부, On-chip Debug 사용여부, ISP 용 SPI 사용 ( 변경불가 ) 클록옵션사용여부, EEPROM 보호기능사용여부, 부트로더섹션시작주소설정 부트리셋시작주소설정 하위바이트 (Low Byte) : BOD Level 설정, BOD 사용여부, SUT 설정, 클록종류및속도설정 메모리잠금비트 LB1 을사용하여퓨지비트를변경할수없도록보호기능설정가능 퓨즈비트를설정한후에메모리잠금비트를나중에설정 19
부록 ( 잠금비트및퓨즈비트 ) 메모리잠금비트 (memory lock bit) LB 모드 PC 등의외부프로그램에서플래시메모리를액세스할경우에제공되는보호기능 LB2 와 LB1 에의해설정됨 메모리잠금비트 LB 모드 LB2 LB1 보호기능 1 1 1 메모리잠금기능이없음 ( 기본 ) 2 1 0 3 0 0 플래시나 EEPROM 을병렬모드나 SPI/JTAG 직렬모드로프로그래밍하는것을금지시킴퓨즈비트또한프로그래밍이금지됨 - 잠금비트를프로그래밍하기전에퓨즈비트를프로그래밍할것 플래시나 EEPROM 을병렬모드나 SPI/JTAG 직렬모드로프로그래밍하거나검증하는것을모두금지함. 20
부록 ( 잠금비트및퓨즈비트 ) 메모리잠금비트 (memory lock bit) BLB0 모드 ( 어플리케이션섹션보호 ) 부트로더프로그램이응용프로그램섹션을액세스하는것을보호하는기능 BLB02 와 BLB01 에의해설정됨 메모리잠금비트 BLB0 모드 BLB02 BLB01 1 1 1 보호기능 부트로더프로그램이 SPM or LPM 명령을사용하여응용섹션을액세스하는데아무런제한이없음 2 1 0 부트로더프로그램이 SPM 명령을사용하여응용섹션에쓰기가금지됨 3 0 0 BLB0 모드의 2, 4 모드기능을모두포함 4 0 1 부트로더프로그램이 LPM 명령을사용하여응용섹션에읽기가금지됨만약, 부트로더섹션에인터럽트벡터가위치한다면, 응용프로그램섹션이실행되는동안모든인터럽트가금지됨 BLB1 모드 ( 부트로더섹션보호 ) 응용프로그램이부트로더프로그램섹션을액세스하는것을보호하는기능 BLB12 와 BLB11 에의해설정됨 메모리잠금비트 BLB1 모드 BLB02 BLB01 1 1 1 보호기능 응용프로그램이 SPM or LPM 명령을사용하여부트로더섹션을액세스하는데아무런제한이없음 2 1 0 응용프로그램이 SPM 명령을사용하여부트로더섹션에쓰기가금지됨 3 0 0 BLB1 모드의 2, 4 모드기능을모두포함 4 0 1 응용프로그램이 LPM 명령을사용하여부트로더섹션에읽기가금지됨만약, 응용프로그램섹션에인터럽트벡터가위치한다면, 부트로더섹션이실행되는동안 모든인터럽트가금지됨 21
부록 ( 잠금비트및퓨즈비트 ) 퓨즈비트 (fuse bit) 확장바이트 비트이름비트기능기본값 - 7-1 6-1 - 5-1 - 4-1 - 3-1 - 2-1 M103C 1 ATmega103 호환모드 0(Programmed) WDTON 0 워치독타이머동작을허용 1(Unprogrammed) 22
부록 ( 잠금비트및퓨즈비트 ) 퓨즈비트 (fuse bit) 상위바이트 비트이름비트기능기본값 OCDEN 7 JTAGEN 6 JTAG 기능의허용 OCD(On-Chip debugging) 기능의허용 - JTAG 을이용해별다른장비없이디버깅하는기능 SPIEN 5 SPI 를통한직렬프로그래밍기능의허용 1(Unprogrammed, disabled) 0(Programmed, JTAG enabled) 0(Programmed, SPI prog. enabled) CKOPT 4 발진모드에따라수정발진자의진폭및기능설정 (1.9 절참조 ) 1(Unprogrammed) EESAVE 3 칩삭제의경우에 EEPROM 은삭제하지않고데이터를보존허용 1(Unprogrammed, EEPROM not preserved) BOOTSZ1 2 부트섹션의크기를선택 ( 아래표참조 ) 0(Programmed) BOOTSZ0 1 부트섹션의크기를선택 ( 아래표참조 ) 0(Programmed) BOOTRST 0 리셋벡터의선택 (1 = 0x0000, 1 = Boot Section) 1(Unprogrammed) BOOTSZ1 BOOTSZ0 부트섹션크기응용프로그램섹션부트로더섹션 1 1 512 워드 (4 페이지 ) 0x0000~0xFDFF 0xFE00~0xFFFF 1 0 1024 워드 (8 페이지 ) 0x0000~0xFBFF 0xFC00~0xFFFF 0 1 2048 워드 (16 페이지 ) 0x0000~0xF7FF 0xF800~0xFFFF 0 0 4096 워드 (32 페이지 ) 0x0000~0xEFFF 0xF000~0xFFFF 23
부록 ( 잠금비트및퓨즈비트 ) 퓨즈비트 (fuse bit) 하위바이트 비트이름 비트 기능 기본값 BODLEVEL 7 저전압검출트리거레벨 (1 = 2.7V or 0 = 4.3V) 1(Unprogrammed) BODEN 6 저전압검출허가, 저전압검출시 MCU 는리셋됨 0(Programmed, BOD 금지 ) SUT1 5 기동시간 (Start-up Time) 의설정 (1.9 절참조 ) 1(Unprogrammed) SUT0 4 기동시간 (Start-up Time) 의설정 (1.9 절참조 ) 0(Programmed) CKSEL3 3 클록소스 (Clock source) 의설정 (1.9 절참조 ) 0(Programmed) CKSEL2 2 클록소스 (Clock source) 의설정 (1.9 절참조 ) 0(Programmed) CKSEL1 1 클록소스 (Clock source) 의설정 (1.9 절참조 ) 0(Programmed) CKSEL0 0 클록소스 (Clock source) 의설정 (1.9 절참조 ) 1(Unprogrammed) CKSEL[3:0] = 0001 로내부 RC 발진 1MHz 를기본으로출하됨 24
1.10 인터럽트 (Interrupt) 인터럽트는마이크로컨트롤러를이용한시스템응용에큰비중을차지함. 마이크로컨트롤러를자유자재로다루기위해서는반드시충분한이해가필요함 AVR에포함된여러특수장치들이가지는특징을잘이해하고인터럽트와연결시켜야쉽게응용할수있음 ATmega128 의인터럽트종류와벡터정보 모두 35 종 (RESET 벡터포함 ) 벡터번호벡터어드레스 인터럽트소스 인터럽트설명 가장높은외부핀, 전원인가리셋, 저전우선순위의리셋벡터 1 $0000 RESET 압검출리셋, 워치독리셋, JTAG AVR 리셋 2 $0002 INT0 외부인터럽트 0 높은우선순위의인터럽트벡터 3 $0004 INT1 외부인터럽트 1 4 $0006 INT2 외부인터럽트 2 5 $0008 INT3 외부인터럽트 3 6 $000A INT4 외부인터럽트 4 7 $000C INT5 외부인터럽트 5 8 $000E INT6 외부인터럽트 6 9 $0010 INT7 외부인터럽트 7 10 $0012 TIMER2 COMP 타이머 / 카운터2 비교매치 11 $0014 TIMER2 OVF 타이머 / 카운터2 오버플로우 12 $0016 TIMER1 CAPT 타이머 / 카운터 1 입력캡처 13 $0018 TIMER1 COMPA 타이머 / 카운터1 비교매치 A 14 $001A TIMER1 COMPB 타이머 / 카운터1 비교매치 B 15 $001C TIMER1 OVF 타이머 / 카운터1 오버플로우 16 $001E TIMER0 COMP 타이머 / 카운터 1 비교매치 17 $0020 TIMER0 OVF 타이머 / 카운터 0 오버플로우 벡터번호벡터어드레스인터럽트소스인터럽트설명 18 $0022 SPI, STC SPI 시리얼통신완료 19 $0024 USART0, RX USART0, 수신완료 20 $0026 USART0, UDRE USART0, 데이터레지스터비움 21 $0028 USART0, TX USART0, 송신완료 22 $002A ADC ADC 변환완료 23 $002C EE READY EEPROM 준비 24 $002E ANALOG COMP 아날로그비교기 25 $0030 TIMER1 COMPC 타이머 / 카운터1 비교매치 C 26 $0032 TIMER3 CAPT 타이머 / 카운터3 입력캡처 27 $0034 TIMER3 COMPA 타이머 / 카운터3 비교매치 A 28 $0036 TIMER3 COMPB 타이머 / 카운터3 비교매치 B 29 $0038 TIMER3 COMPC 타이머 / 카운터3 비교매치 C 30 $003A TIMER3 OVF 타이머 / 카운터3 오버플로우 31 $003C USART1 RX USART1, 수신완료 32 $003E USART1 UDRE USART1, 데이터레지스터비움 33 $0040 USART1 TX USART1, 송신완료 34 $0042 TWI TWI(I2C) 직렬인터페이스 35 $0044 SPM READY 저장프로그램메모리준비 가장낮은우선순위의인터럽트벡터 25
1.10 인터럽트 (Interrupt) 인터럽트벡터 인터럽트가발생하면하드웨어가참조하게되는어드레스 어플리케이션섹션과부트로더섹션의시작주소에위치할수있음 벡터당 2 개의워드주소가할당되어있음 벡터에는인터럽트서브루틴으로진입하도록, 인터럽트서브루틴의인덱스주소로점프명령이들어감 EX) JMP 0X8C ;= 점프명령 00000000 < vectors>: ; 0X8C 번지로이동주석 0: 0c 94 46 00 jmp 08 0x8c ; 08 0x8c < ctors_end> 프로그램메모리주소 4: 0c 94 5f 00 jmp 0xbe ; 0xbe < vector_1> 8: 0c 94 5d 00 jmp 0xba ; 0xba < bad_interrupt>. 기계어코드어셈블리어코드. 84: 0c 94 5d 00 jmp 0xba ; 0xba < bad_interrupt> 88: 0c 94 5d 00 jmp 0xba ; 0xba < bad_interrupt> 메모리인덱스주소 000000ba < bad_interrupt>: 예외처리된 ba: 0c 94 00 00 jmp 0 ;0x0< < vectors> 인터럽트처리루틴 000000be < vector_1>: 외부인터럽트 0 서브루틴 ISR(INT0_vect){ be: 1f 92 push r1 c0: 0f 92 push r0.. 126: 0f 90 pop r0 128: 1f 90 pop r1 12a: 18 95 reti 인터럽트발생이전으로복귀 26
1.10 인터럽트 (Interrupt) 인터럽트허용 -Bit 1 -> IVSEL : 인터럽트벡터선택 인터럽트벡터의위치를선택 BOOTRST IVSEL 리셋벡터어드레스인터럽트벡터의시작어드레스 1 0 $0000 $0002 1 1 $0000 부트리셋어드레스 + $0002 0 0 부트리셋어드레스 $0002 0 1 부트리셋어드레스 부트리셋어드레스 + $0002 인터럽트를사용하지않도록금지하면, 인터럽트벡터에는사용자프로그램코드가놓일수있으며, 리셋벡터가부트로더영역에있을경우에도, 응용프로그램의인터럽트벡터에는사용자프로그램코드가놓일수있다. IVSEL 비트를변경시킬때반드시다음과같은쓰기절차를따라야함 1 인터럽트벡터변경활성 (IVCE) 비트를 1 로설정한다. 2 4사이클이내에원하는값을 IVSEL에기록하며, 동시에 IVCE에 0 값을넣는다.» 인터럽트벡터테이블의주소를변경하는데의도하지않은오류를막기위함» 이절차가시행되는동안 IVCE가 1 이면모든인터럽트는자동으로비활성화되어금지되고, IVSEL 에기록한다음의명령어전까지비활성화상태로유지» 1 단계이후에 2 단계에서 IVSEL이쓰여지지않는다면인터럽트는 4사이클동안비활성화상태로남게되고, 인터럽트는다시원상태로복구된다. -Bit 0 -> IVCE : 인터럽트벡터변경활성화 IVSEL 비트를변경시키기위해서는 IVCE 비트는반드시논리 1로설정되어야한다. IVCE는논리 1로설정된이후 4사이클동안유지되며, 하드웨어에의해자동으로 0 값이된다. 27
핵심포인트를꽉짚어주는 AVR ATmega128 완전정복 제 1 장 AVR ATmega128 개요 [3/4] ATmega128 의주변장치 1
CHARTER 01- AVR ATmaga128 개요 CHARTER 01 목차 1.1 AVR 이란? 1.2 AVR 의제품종류 1.3 AVR 의어플리케이션 1.4 ATmega128 의특징 1.5 ATmega128 의핀배열 1.6 ATmega128 의블록도 1.7 ATmega128 의내부구조 1.8 ATmega128 의메모리 1.9 시스템클록과클록옵션 1.10 인터럽트 (Interrupt) 1.11 외부인터럽트 1.12 전원관리와휴면모드 1.13 ATmega128 의타이머 / 카운터 1.1414 ATmega128 의디지털입출력핀구조 1.15 리셋 (Reset) 1.16 SPI 통신인터페이스 1.17 TWI 통신인터페이스 1.18 USART 통신인터페이스 1.19 EEPROM 데이터메모리 1.20 ATmega128 의아날로그디지털변환 1
1.11 ATmega128의외부인터럽트 외부인터럽트 외부핀의신호변화를트리거입력으로하여, 인터럽트를요청하는장치 인터럽트서브루틴실행조건 전역인터럽트허용 (SREG. I = 1), SREG 는 AVR 의상태레지스터, I 는 7 번비트 개별인터럽트허용 (EIMSK!= 0), EIMSK는외부인터럽트마스크레지스터 인터럽트서브루틴정의 (ISR) AVR 상태레지스터 - Bit 7 -> I : 전역인터럽트허용 인터럽트요청시인터럽트벡터로점프하도록허용하는전역인터럽트허용비트 인터럽트루틴진입시 0 으로클리어 인터럽트루틴에서빠져나갈때다시 1로세트 ex) 프로그램에서강제세트방법 SREG = 0X80; #include <avr/interrupt.h> sei(); // C 언어매크로 ex) 프로그램에서강제클리어방법 SREG &= ~0X80; #include <avr/interrupt.h> cli(); // C 언어매크로 SEI ; 어셈블리어 CLI ; 어셈블리어 2
1.11 ATmega128의외부인터럽트 외부인터럽트상태레지스터 A - EICRA 외부인터럽트 0~3의트리거동작모드를설정하는레지스터 비동기방식으로동작하며, 외부인터럽트의펄스폭이최소 50 ns 이상이어야함 ISCn1 ISCn0 설명 0 0 외부핀 INTn 의논리 0 일때인터럽트를요청 0 1 예약됨 1 0 외부핀 INTn이하강에지 ( 논리 1 에서논리 0 으로변할때 ) 일때비동기인터럽트를요청 1 1 외부핀 INTn이상승에지 ( 논리 0 에서논리 1 로변할때 ) 일때비동기인터럽트를요청 외부인터럽트상태레지스터 B - EICRB 외부인터럽트 4~7 의트리거동작모드를설정하는레지스터 동기방식으로동작하며, 외부인터럽트의펄스폭이최소 1 클록사이클이상이어야함 ISCn1 ISCn0 설명 0 0 외부핀 INTn의논리 0 일때인터럽트를요청 0 1 외부핀 INTn이하강에지또는상승에지일때인터럽트를요청 1 0 외부핀 INTn이하강에지 ( 논리 1 에서논리 0 으로변할때 ) 일때인터럽트를요청 1 1 외부핀 INTn 이상승에지 ( 논리 0 에서논리 1 로변할때 ) 일때인터럽트를요청 3
1.11 ATmega128의외부인터럽트 외부인터럽트마스크레지스터 -EIMSK 외부인터럽트의인터럽트마스크레지스터 ( 개별적인인터럽트허용 ) 1 로세트되면해당외부인터럽트허용 0으로클리어되면해당외부인터럽트금지 ex) 외부인터럽트 0 의허용 1. EIMSK = 0X01; 2. EIMSK = (1 << INT0); ex) 외부인터럽트 0 의금지 1. EIMSK &= ~0X01; 2. EIMSK &= ~(1 << INT0); 외부인터럽트플래그레지스터 EIFR 외부인터럽트의발생상황을알수있는플래그레지스터 인터럽트트리거발생시 1로세트 인터럽트서브루틴진입시 0으로자동클리어 프로그램에서클리어하기위해서는해당비트를 1로쓰기 ex) 외부인터럽트0 플래그의클리어 ; // EIFR == 0X01 ( 외부인터럽트 0의요청이있음 ) EIFR = 0X01; // EIFR == 0X00 ( 외부인터럽트 0의요청이없음 ) 4
1.11 ATmega128의외부인터럽트 외부인터럽트마스크레지스터 -EIMSK 외부인터럽트의인터럽트마스크레지스터 ( 개별적인인터럽트허용 ) 1 로세트되면해당외부인터럽트허용 0으로클리어되면해당외부인터럽트금지 ex) 외부인터럽트 0 의허용 1. EIMSK = 0X01; 2. EIMSK = (1 << INT0); ex) 외부인터럽트 0 의금지 1. EIMSK &= ~0X01; 2. EIMSK &= ~(1 << INT0); 외부인터럽트플래그레지스터 EIFR 외부인터럽트의발생상황을알수있는플래그레지스터 인터럽트트리거발생시 1로세트 인터럽트서브루틴진입시 0으로자동클리어 프로그램에서클리어하기위해서는해당비트를 1로쓰기 ex) 외부인터럽트0 플래그의클리어 ; // EIFR == 0X01 ( 외부인터럽트 0의요청이있음 ) EIFR = 0X01; // EIFR == 0X00 ( 외부인터럽트 0의요청이없음 ) 5
1.12 ATmega128의전원관리와휴면모드 슬립모드 AVR 의전원을절약하기위해 MCU 내부의모듈들이사용되지않도록셧 - 다운시킨모드 6 가지슬립모드지원 슬립모드진입방법 MCUCR.SE = 1 ( 슬립모드허용설정 ) MCUCR.SM2:0 = N ( 슬립모드설정, 6가지중에선택 ), (set_sleep_mode(... 슬립모드...);) SLEEP ; SLEEP 어셈블리어실행 ; 또는컴파일러의매크로를실행 (sleep_mode();) 슬립모드해제방법 허용된인터럽트발생시슬립모드해제됨 슬립모드해제시간 = SUT( 스타트 - 업타임 ) + 4 cycle 슬립모드수행단계 허용된인터럽트발생 슬립모드해제시간이후에인터럽트서브루틴실행 SLEEP 명령이후부터실행을재개 슬립모드해제단계에서레지스터와 SRAM 의내용은변하지않음 6
1.12 ATmega128의전원관리와휴면모드 슬립모드제어관련레지스터 MCUCR Standby 모드와 Extended Standby 모드에서 오직외부크리스탈 or 레조네이터만사용가능 Bit 5 -> SE : Sleep 인에이블 Bit 4:2 ->SM2:0 : Sleep Mode 선택비트 2, 1, 0 SM2 SM1 SM0 Sleep Mode 0 0 0 Idle 0 0 1 ADC Noise Reduction 0 1 0 Power-down 0 1 1 Power-save 1 0 0 Reserved 1 0 1 Reserved 1 1 0 Standby 1 1 1 Extended Standby 7
1.12 ATmega128의전원관리와휴면모드 슬립모드 6 가지 Idle 모드 ( 휴면모드 ), SM[2:0] = 000 ADC 의활성화의경우진입시자동 AD 변환시작 동작 :SPI SPI, USART, AC, ADC, TWI, T/C, WDT, 인터럽트시스템 차단 : clk CPU, clk FLASH 해제 : Overflow, TXC, Ext.Int, AC(Option, ACSR.ACD = 1 : 아날로그비교기전원차단 ) ADC Noise Reduction Mode(ADC 잡음감소모드 ), SM[2:0] = 001 ADC 잡음환경개선, 높은분해능측정가능 ADC 의활성화의경우진입시자동 AD 변환시작 동작 :ADC ADC, Ext.Int, TWI 주소감시, TC, WDT 차단 : clk CPU, clk FLASH, clk IO, 해제 : Ext.Reset, WDT Reset, Brown-out Reset, TWI 주소일치, TC0 인터럽트, SPM/EEPROM 준비, 로우레벨외부인터럽트 7:4 or 3:0 Power-down Mode( 전원차단모드 ), SM[2:0] = 010 클록발진회로의안정상태문제로모드해제시충분한기동시간이필요 동작 : Ext.Int, TWI 주소감시, WDT 차단 : 동기식모듈모두 해제 : Ext.Reset, WDT Reset, Brown-out Reset, TWI 주소일치, 로우레벨외부인터럽트 7:4 or 3:0 8
1.12 ATmega128의전원관리와휴면모드 슬립모드 6 가지 Power-save Mode( 전원절감모드 ), SM[2:0] = 011 기본적으로 clk ASY 를제외한모든클록을정지 CPU 가비동기모듈에의해동작할경우에사용 단한가지제외하고전원차단모드와동일 차이점 ASSR.AS0 = 1 의경우 TC0은휴면모드에서계속동작할수있음 SREG.I = 1, TIMSK( 오버플로우, 비교일치 ) 이벤트발생에서깨어남 ASSR.AS0 = 0 상황에서동작하는경우전원차단모드를추천함 전원절감모드에서 ASSR.AS=0의경우에는해제시비동기타이머레지스터내용이미정의상태로되기때문 Standby Mode( 대기모드 ), SM[2:0] = 110 메인클록 ( 외부발진 ) 허용이외에전원차단모드와같음 깨어날때오실레이터안정화시간이필요없음, MCU는 6 clock 사이클내에해제 동작 : Ext.Int, TWI 주소감시, WDT 차단 : 동기식모듈모두 해제 : Ext.Reset, WDT Reset, Brown-out Reset, TWI 주소일치, 로우레벨외부인터럽트 7:4 or 3:0 Extended Standby Mode( 확장대기모드 ), SM[2:0] = 111 메인클록 ( 외부발진 ) 허용이외에전원절감모드와같음 깨어날때오실레이터안정화시간이필요없음, MCU는 6 clock 사이클내에해제 9
1.12 ATmega128의전원관리와휴면모드 슬립모드의동작요약 동작되는클록오실레이터슬립모드로부터의해제방법 메인타이머 INT7 TWI SPM/ 슬립 CLK CLK CLK CLK CLK 타이머 Other 클록 OSC ~ 어드레스 EEPROM ADC 모드 CPU FLASH IO ADC ASY 0 I/O 인가허가 INT0 일치 Ready 휴면 2) ADC 잡음감소 2) 3) 잡음 2) 3) 전원다운 전원 세이브 3) 2) 2) 3) 2) 대기 1) 3) 확장 2) 2) 3) 2) 대기 1) 1) 외부수정발진기또는공진기가클록소스로선택된경우 2)ASSR 레지스터의 AS 비트가 1로설정된경우 3) 단지 INT3:0 또는 INT7:4가레벨인터럽트로동작할경우 10
1.13 ATmega128의타이머 / 카운터 AVR 의타이머 / 카운터개요 8비트와 16비트의카운터를내장하고있음 내부클록에서타이머로동작하고, 외부핀의카운터신호를이용카운터로동작함 타이머 / 카운터인터럽트종류 8비트 /16비트타이머공통 오버플로우 (Overflow) 비교일치 (Compare Match)» 16비트의경우 A/B/C 3종 16 비트전용 입력캡쳐 (Input Capture) 일반기능 클록을인가받아업카운트동작함, 타이머최대값에서 0 으로오버플로우발생 비교일치기능 클록을인가받아업카운트동작함, 비교일치값레지스터 (OCR) 와현재카운트값 (TCNT) 가일치하면비교일치발생 토글모드 비교일치상황에서출력레벨을반전시키는모드 카운터기능 외부카운터클록신호로부터클록을인가받고업카운트하는기능 펄스폭측정기능 외부의 ICP 단자에서발생하는트리거신호를이용해현재카운트값을레지스터에저장하는기능 ( 일반 + 비교 ) 의결합기능 PWM 발생모드 비교일치상황과오버플로우상황을연동하여, 구간을구분하고 0과 1의구형파를발생시켜출력하는모드 (8비트 PWM + 16비트 PWM) 신호변조기기능 변조기기능» 8비트 PWM 신호와 16비트 PWM 신호를 AND 또는 OR 논리연산으로혼합하는기능 11
1.13 ATmega128의타이머 / 카운터 AVR 의타이머 / 카운터동작모드개요 TOP TCNT 100 TCNT 200 TCNT 255 오버플로우 (Overflow) TCNT 120 오버플로우 (Overflow) TCNT TCNT TOP OCR 오버플로우 (Overflow) 0 0 ICP 50 TCNT t 0 Non-INV INV OCR/TOP Update OCR/TOP Update t ICR[15:0] 0 100 200 120 50 Input Capture 모드 Phase and Frequency Correct PWM 모드 12
1.13 ATmega128의타이머 / 카운터 PWM 개요 톱니파 입력신호 듀티비개요 - PWM 주기 (P) 는일정 - PWM 주기 == 톱니파의주기 - 톱니파 < 입력신호 : 출력 = L - 톱니파 >= 입력신호 : 출력 = H [ 듀티비 ] 듀티비 = ( H / P ) * 100 [%] 13
1.13 ATmega128의타이머 / 카운터 타이머 / 카운터기능요약 타이머 / 카운터 타이머 / 카운터0 타이머 / 카운터1 타이머 / 카운터2 타이머 / 카운터3 비트수 8비트 16비트 8비트 16비트 최소값 0 0 0 0 최대값 255 65535 255 65535 TCNT0 OCR0 TCCR0 TIMSK TCNT1H, TCNT1L, OCR1AH, OCR1AL, OCR1BH, OCR1BL, OCR1CH, OCR1CL, TCNT2 OCR2 TCCR2 SFIOR TCNT3H, TCNT3L, OCR3AH, OCR3AL, OCR3BH, OCR3BL, OCR3CH, OCR3CL, 관련레지스터 TIFR ICR1H, ICR1L, TIMSK ICR3H, ICR3L, ASSR TCCR1A, CCR1B, TIFR TCCR3A, CCR3B, SFIOR TCCR1C, TIMSK, ETIMSK, TIFR, ETIFR SFIOR, TCCR3C, TIMSK, ETIMSK, TIFR, ETIFR SFIOR, 동작모드 일반모드일반모드일반모드일반모드 CTC CTC CTC CTC 고속 PWM 고속 PWM 고속 PWM 고속 PWM PC PWM PC PWM PC PWM PC PWM PFC PWM PFC PWM 카운터입력 TOSC1, TOSC2 T1 T2 T3 PWM 출력신호 OC0 OC1A, OC1B, OC1C OC2 OC3A, OC3B, OC3C 오버플로우 오버플로우 인터럽트 출력비교매치 A 출력비교매치 A 오버플로우오버플로우출력비교매치 B 출력비교매치 B 출력비교매치출력비교매치출력비교매치 C 출력비교매치 C 입력캡처 입력캡처 캡쳐기능 없음 있음 없음 있음 캡쳐신호 - ICP1 - ICP3 기타 RTC 기능 (TOSC 이용 ) ACO 입력캡처 OC2 단자는 OC1C 단자와동일한핀을사용함 14
1.13 ATmega128의타이머 / 카운터 8 비트타이머 / 카운터 0 타이머 / 카운터제어레지스터 최대값 = 255(0XFF) 최소값 = 0 (0X00) 일반모드 타이머 / 카운터제어회로 오버플로우인터럽트발생 PC PWM 모드 CTC 모드 현재카운트 프리스케일러 RTC 발진 ( 비동기발진 ) 고속 PWM 모드 RTC (32.768kHz) 비교일치인터럽트발생 메인발진 0~1024 프리스케일러 (0, 1, 8, 32, 64, 128 256, 1024) 비교일치상태 CTC, PWM 파형발생 파형출력 카운트비교값 타이머 / 카운터동기유닛 타이머 / 카운터비동기모드선택 15
1.13 ATmega128의타이머 / 카운터 8 비트타이머 / 카운터 2 타이머 / 카운터제어레지스터 최대값 = 255(0XFF) 최소값 = 0 (0X00) 일반모드 PC PWM 모드 타이머 / 카운터제어회로 오버플로우인터럽트발생 CTC 모드 고속 PWM 모드 카운터외부클록 TC1C와같이변조기로동작가능 카운터모드지원 현재카운트 프리스케일러이후비교일치인터럽트발생 0~1024 프리스케일러 (0, 1, 8, 64, 256, 1024 하강에지, 상승에지 ) 비교일치상태 CTC, PWM 파형발생 파형출력 카운트비교값 16
1.13 ATmega128의타이머 / 카운터 8 비트타이머 / 카운터 0 과 2 모두 8비트최소값 = 0 (0X00) 32.768kHz PORTG.4 타이머 0 의클록 메인 and RTC 모두프리스케일러사용 PORTG.3 RTC, 메인클록모두프리스케일러사용 타이머 2 의클록 메인 and 카운터 메인클록만프리스케일러사용 카운터는프리스케일러를거치지않음 상승및하강에지검출 카운터모드에서외부클록입력핀 메인클록은프리스케일러를거침 참고 ) T2 = PORTD.7 17
1.13 ATmega128의타이머 / 카운터 8비트타이머 / 카운터 0과 2 2중버퍼링구조 사용자프로그램에서 OCRn 레지스터의값을바꾸면임시레지스터에저장되었다가 TCNTn 레지스터값이 TOP 또는 BOTTOM 값에서업데이트되는구조 글리치 (glitch) 현상방지 일종의노이즈에의한오동작방지 2중버퍼링구조에의해 TOP 또는 BOTTOM에서업데이트 카운트설정값 항상비교함 파형발생기 카운트현재값 두레지스터값이일치하면비교일치인터럽트발생 PWM 모드 Phase Correct PWM 모드 Fast PWM 모드 FOC(Force Output Compare) PWM 이아닌동작모드에서파형강제출력기능 PWM 출력핀 (Output Compare) PWM이아닌모드 Normal 모드 CTC 모드 파형발생모드 (Waveform Generation Modes) 비교출력모드 (Compare Match Output Mode) 18
1.13 ATmega128의타이머 / 카운터 8비트타이머 / 카운터 0과 2 PWM 파형출력조건 DDRxn = 1 COMn = 10 or 11 COMn1:0 이하나라도 1 이어야 PWM 신호출력 00, 01 : 교재참조 10 : Non-INV PWM 11 : INV PWM CTC 파형출력조건 DDRxn = 1 PWM 신호 ( 비교출력신호 ) 2X1 신호멀티플렉서 COMn = 01 FOCn = 1 3-상태 H = High Voltage L = Low Voltage Z = High-impedance FOC(Force Output Compare) PWM 이아닌동작모드에서파형강제출력기능 디지털포트출력값설정신호 디지털포트입출력방향설정신호 3- 상태버퍼 PWM 출력핀 (Output Compare) OC0 = PORTB.4 OC2 = PORTB.7 참고 ) OC1C = PORTB.7 I/O 유닛용동기클록 19
1.13 ATmega128의타이머 / 카운터 8 비트타이머 / 카운터 0 관련레지스터 TCCR0(Timer/Counter Control Register 0) 타이머 / 카운터제어레지스터 0 강제출력 00, 01 : 교재참조 10 : Non-INV 00 : Normal 11 : INV 01 : CTC 10 : PC PWM 11 : 고속 PWM 000 : No Clock 001 : clk/1 010 : clk/8 011 : clk/32 100 : clk/64 101 : clk/128 110 : clk/256 111 : clk/1024 AS0 = 1 이면 TOSC1 이선택 타이머 / 카운터 0 의프리스케일러리셋 20
1.13 ATmega128의타이머 / 카운터 8 비트타이머 / 카운터 0 관련레지스터 TCNT0(Timer/Counter Register 0) 타이머 / 카운터레지스터 0 카운트현재값 OCR0(Output Compare Register 0) 출력비교레지스터 0 카운트설정값 ( 비교일치설정값 ) 2 중버퍼링구조로데이터업데이트되는레지스터 프로그램동작중 OCR0 레지스터에값이써지더라도 TCNT0이 TOP 또는 BOTTOM의값을가졌을때업데이트된다 21
1.13 ATmega128의타이머 / 카운터 8 비트타이머 / 카운터 0 관련레지스터 ASSR(Asynchronous Status Register) - 비동기상태레지스터 0 : 동기클록 ( 메인 ) 1 : 비동기클록 (RTC) 비동기클록선택 교재참조 TIMSK(Timer/Counter Interrupt Mask Register) 타이머인터럽트마스크레지스터 출력비교인터럽트허용 오버플로우인터럽트허용 1 : 허용 0 : 금지 TIFR(Timer/Counter Interrupt Flag Register) 타이머인터럽트플래그레지스터 인터럽트플래그레지스터는인터럽트서브루틴진입시 자동으로클리어 (=0) 된다. 출력비교인터럽트요청상태 오버플로우인터럽트요청상태 사용자의프로그램에서플래그를클리어하기위해서는플래그비트에 1 을써야한다. 1 : 요청있음 0 : 요청없음 22
1.13 ATmega128의타이머 / 카운터 8 비트타이머 / 카운터 0 관련레지스터 SFIOR(Special Function IO Register) 특수기능 IO 레지스터 Bit 7 -> TSM : 타이머 / 카운터동기화모드 TSM 비트는논리 1 로설정하였을때타이머 / 카운터동기화기능을수행 TSM = 1이면» PSR0 = PSR321 = 1이되어유지되고, 모든타이머 / 카운터의동작정지» 모든타이머 / 카운터를똑같은값으로설정할수있음 TSM = 0 이면» PSR0 = PSR321 = 0 으로하드웨어적으로클리어» 타이머 / 카운터들이동시에계수시작함 Bit 1 -> PSR0:Prescaler Prescaler Reset Timer/Counter0 타이머 / 카운터0의프리스케일러리셋기능 PSR0 = 1이면, 타이머 / 카운터0의프리스케일러를리셋한후에자동으로클리어 비동기모드동작중 PSR0 = 1이면, 프리스케일러가리셋될때까지 1로유지 TSM = 1 이면 PSR0 = 1로유지 - Bit 0 -> PSR321 : Prescaler Reset Timer/Counter3,2,1 타이머 / 카운터3, 2, 1의프리스케일러리셋기능 PSR321 = 1 이면, 타이머 / 카운터0 의프리스케일러를리셋한후에자동으로클리어 TSM = 1이면 PSR321 = 1로유지 23
1.13 ATmega128의타이머 / 카운터 8 비트타이머 / 카운터 2 관련레지스터 TCCR2(Timer/Counter Control Register 2) 타이머 / 카운터제어레지스터 2 강제출력 00, 01 : 교재참조 10 : Non-INV 00 : Normal 11 : INV 01 : CTC 10 : PC PWM 11 : 고속 PWM 000 : No Clock 001 : clk/1 010 : clk/8 011 : clk/64 100 : clk/256 101 : clk/1024 110 : T2 핀 ( 외부클록 ), 하강에지 111 : T2 핀 ( 외부클록 ), 상승에지참고 ) T2 = PORTD.7 타이머 / 카운터 1/2/3 의프리스케일러리셋 카운터외부클록신호의에지선택 24
1.13 ATmega128의타이머 / 카운터 8 비트타이머 / 카운터 2 관련레지스터 TCNT2(Timer/Counter Register 2) 타이머 / 카운터레지스터 2 카운트현재값 OCR2(Output Compare Register 2) 출력비교레지스터 2 카운트설정값 ( 비교일치설정값 ) 2 중버퍼링구조로데이터업데이트되는레지스터 프로그램동작중 OCR2 레지스터에값이써지더라도 TCNT2가 TOP 또는 BOTTOM의값을가졌을때업데이트된다 25
1.13 ATmega128의타이머 / 카운터 8 비트타이머 / 카운터 2 관련레지스터 TIMSK(Timer/Counter Interrupt Mask Register) 타이머인터럽트마스크레지스터 출력비교인터럽트허용 오버플로우인터럽트허용 1 : 허용 0 : 금지 TIFR(Timer/Counter Interrupt Flag Register) 타이머인터럽트플래그레지스터 출력비교인터럽트요청상태 오버플로우인터럽트요청상태 1 : 요청있음 0 : 요청없음 인터럽트플래그레지스터는인터럽트서브루틴진입시자동으로클리어된다. 클리어 = 0 사용자의프로그램에서플래그를클리어하기위해서는플래그비트에 1 을써야한다. 26
1.13 ATmega128의타이머 / 카운터 8 비트타이머 / 카운터 2 관련레지스터 SFIOR(Special Function IO Register) 특수기능 IO 레지스터 Bit 7 -> TSM : 타이머 / 카운터동기화모드 TSM 비트는논리 1 로설정하였을때타이머 / 카운터동기화기능을수행 TSM = 1이면» PSR0 = PSR321 = 1이되어유지되고, 모든타이머 / 카운터의동작정지» 모든타이머 / 카운터를똑같은값으로설정할수있음 TSM = 0 이면» PSR0 = PSR321 = 0 으로하드웨어적으로클리어» 타이머 / 카운터들이동시에계수시작함 Bit 1 -> PSR0:Prescaler Prescaler Reset Timer/Counter0 타이머 / 카운터0의프리스케일러리셋기능 PSR0 = 1이면, 타이머 / 카운터0의프리스케일러를리셋한후에자동으로클리어 비동기모드동작중 PSR0 = 1이면, 프리스케일러가리셋될때까지 1로유지 TSM = 1 이면 PSR0 = 1로유지 Bit 0 -> PSR321 : Prescaler Reset Timer/Counter3,2,1 타이머 / 카운터3, 2, 1의프리스케일러리셋기능 PSR321 = 1 이면, 타이머 / 카운터0 의프리스케일러를리셋한후에자동으로클리어 TSM = 1이면 PSR321 = 1로유지 27
1.13 ATmega128의타이머 / 카운터 8 비트타이머 / 카운터의타이밍도 CTC 모드 TCNT == OCR, 다음클록에서 TCNT = 0 1. 비교일치인터럽트발생 TCNT가 OCR과비교일치에서반전동작함 ( 주기 ) 28
1.13 ATmega128의타이머 / 카운터 8 비트타이머 / 카운터의타이밍도 Fast PWM 모드 TCNT == OCR 1. 비교일치인터럽트발생 TCNT == MAX, 다음클록에서 TCNT = 0 1. OCR 업데이트 2. 오버플로우인터럽트발생 Non-INV INV ( 주기 ) 29
1.13 ATmega128의타이머 / 카운터 8 비트타이머 / 카운터의타이밍도 Phase Correct PWM 모드 TCNT == OCR 1. 비교일치인터럽트발생 TCNT == 0 TCNT == MAX 1. OCR 업데이트 1. 오버플로우인터럽트발생 Non-INV INV ( 주기 ) 30
1.13 ATmega128의타이머 / 카운터 8 비트타이머 / 카운터의타이밍도 오버플로우발생타이밍도, No Prescaling = clk / 1 동기클록상승신호 동기클록 클록인가허용 MAX BOTTOM ( 최대값 = 0xFF) ( 최소값 =0x00) 오버플로우인터럽트플래그 31
1.13 ATmega128의타이머 / 카운터 8 비트타이머 / 카운터의타이밍도 오버플로우발생타이밍도, with Prescaler ( 8 분주 ) 레지스터의변화와플래그의세트동작은분주되기이전의클록신호에맞추어짐 동기클록상승신호 동기클록 클록인가허용 (clk/8) X MAX BOTTOM ( 최대값 = 0xFF) ( 최소값 =0x00) 오버플로우인터럽트플래그 32
1.13 ATmega128의타이머 / 카운터 8 비트타이머 / 카운터의타이밍도 비교일치인터럽트발생타이밍도, with Prescaler ( 8 분주 ) CTC 모드제외한모든모드 동기클록상승신호 동기클록 클록인가허용 (clk/8) TCNT == OCR 비교값 비교출력인터럽트플래그 33
1.13 ATmega128의타이머 / 카운터 8 비트타이머 / 카운터의타이밍도 비교일치인터럽트발생타이밍도, with Prescaler ( 8 분주 ) CTC 모드의경우에만해당 CTC 모드에서는 TCNT 의최대값은 OCR 이된다. TOP == OCR, MAX == 255 동기클록상승신호 동기클록 클록인가허용 (clk/8) TCNT == OCR TCNT == 0 비교값 비교출력인터럽트플래그 34
1.13 ATmega128의타이머 / 카운터 16비트타이머 / 카운터 1과 3 최대값 = 65535(0XFFFF) 최소값 = 0 (0X0000) 일반모드 PC PWM 모드 CTC 모드 고속 PWM 모드 PFC PWM 모드 TC1C는 TC2와같이변조기로동작가능 A/B/C 3종류의다른 PWM 파형발생 입력캡쳐모드 카운터모드지원 0~1024 프리스케일러 (0, 1, 8, 64, 256, 1024 하강에지, 상승에지 ) 현재카운트값 입력캡쳐레지스터 비교일치 A 카운트비교값 A 비교일치 B 카운트비교값 B 비교일치 C 카운트비교값 C 타이머 / 카운터제어회로 고정된크기의 TOP 값 (8, 9, 10 비트 ) 입력캡쳐인터럽트발생 에지검출 타이머 / 카운터제어레지스터 오버플로우인터럽트발생 에지검출 프리스케일러이후 비교일치 A 인터럽트발생 카운터외부클록 CTC, PWM 파형출력 A 파형발생 A 비교일치 B 인터럽트발생 CTC, PWM 파형출력 B 파형발생 B 비교일치 C 인터럽트발생 CTC, PWM 파형발생 C 잡음제거 파형출력 C 캡쳐트리거입력핀 비교기출력 35
1.13 ATmega128의타이머 / 카운터 16 비트타이머 / 카운터 1 과 3 타이머 1과 3의클록 메인 and 카운터 메인클록만프리스케일러사용 카운터는프리스케일러를거치지않음 상승및하강에지검출 16 비트레지스터는 간접접근레지스터 (TEMP) 를통해동시 ( 하위바이트읽기또는쓰기시점 ) 에 카운터모드에서외부클록입력핀 16비트읽기및쓰기동작수행 따라서다음의순서를지켜야함 쓰기순서 [ 상위 하위 ] 읽기순서 [ 하위 상위 ] 쓰기동작순서 읽기동작순서 DATA BUS(8-bit) 메인클록은프리스케일러를거침 참고 ) T1 = PORTD.6 T3 = PORTE.6 2 TEMP (8-bit) 1 TCNTnH (8-bit) TCNTnL (8-bit) TCNTn(16-bit Counter) ex) 16 비트타이머레지스터에값쓰기 TCNT1H = 0X1F; TCNT1L = 0XFF; ex) 16비트타이머레지스터에값읽기 unsigned char t1, t2; t1 = TCNT1L; t2 = TCNT1H; 36
1.13 ATmega128의타이머 / 카운터 16 비트타이머 / 카운터 1 입력캡쳐신호 간접접근레지스터를통해 16 비트데이터읽기및쓰기 아날로그비교기출력 (ACO) 입력캡쳐트리거펄스 (ICP1) 캡쳐 (Capture) 신호 16 비트타이머 / 카운터 3 입력캡쳐신호항시 16비트데이터연결 잡음제거란? 입력캡쳐트리거펄스 (ICP3) 캡쳐트리거신호가 0 또는 1 로 전이한이후에 4 클록이상 같은상태를유지하는 신호를검출함 4 클록안에다른상태로 전이하게되면노이즈로필터링됨 ICP1 = PORTD.4 ICP3 = PORTE.7 아날로그비교기출력 입력캡쳐트리거펄스핀 ACIC(Analog Comparator Input Capture) 0:ICPn 선택 1 : ACO 선택 잡음제거 ICNC(Input Capture Noise Canceler) 0: 잡음제거안함 1 : 잡음제거기동작 상승및하강에지검출 입력캡쳐인터럽트발생 ICES(Input Capture Edge Select) 0: 하강에지검출 1 : 상승에지검출 37
1.13 ATmega128의타이머 / 카운터 16 비트타이머 / 카운터 1 과 3 3 개의 PWM 을출력할수있는기능 OCRnA/B/C 등 3 개의출력비교레지스터 간접접근레지스터를통해 16 비트데이터읽기및쓰기 카운트설정버퍼 카운트현재값 출력비교인터럽트의발생 현재값과설정값이같으면다음클록에출력비교인터럽트발생 이중버퍼링구조 PWM 동작중에사용 OCR 버퍼 - 이버퍼를통해 TOP 또는 BOTTOM 에서업데이트 카운트설정값 항상비교함 두레지스터값이일치하면비교일치인터럽트발생 일반 or CTC 모드에서는사용하지않음 업데이트된 OCR 레지스터 파형발생기 PWM 출력핀 (Output Compare) 파형발생모드 (Waveform Generation Modes) 비교출력모드 (Compare Match Output Mode) 38
1.13 ATmega128의타이머 / 카운터 16비트타이머 / 카운터 1과 3 PWM 파형출력조건 DDRxn = 1 COMn = 10 or 11 COMn1:0 이하나라도 1 이어야 PWM 신호출력 00, 01 : 교재참조 10 : Non-INV PWM 11 : INV PWM CTC 파형출력조건 3- 상태 DDRxn = 1 COMn = 01 FOCn = 1 H = High Voltage FOC(Force Output Compare) PWM 이아닌동작모드에서파형강제출력기능 PWM 신호 ( 비교출력신호 ) 2X1 신호멀티플렉서 디지털포트출력값설정신호 L = Low Voltage 디지털포트 Z = High-impedance 입출력방향설정신호 I/O 유닛용동기클록 3- 상태버퍼 PWM 출력핀 (Output Compare) OC1A = PORTB.5 OC1B = PORTB.6 OC1C = PORTB.7 OC3A = PORTE.3 OC3B = PORTE.4 OC3C = PORTE.5 참고 ) OC2 = PORTB.7 39
1.13 ATmega128의타이머 / 카운터 16비트타이머 / 카운터 1과 3 카운터용외부클록핀 타이머 / 카운터 1 = T1 PORTD.6 타이머 / 카운터 2 = T2 PORTD.7 타이머 / 카운터 3 = T3 PORTE.6 카운터용외부클록핀 3- 상태 H = High Voltage L = Low Voltage Z = High-impedance I/O 동기클록신호동기화블록에지검출 40
1.13 ATmega128의타이머 / 카운터 16 비트타이머 / 카운터 1 과 3 관련레지스터 TCCR1A(Timer/Counter Control Register 1A) 타이머 / 카운터제어레지스터 1A TCCR3A(Timer/Counter Control Register 3A) 타이머 / 카운터제어레지스터 3A PWM A 00, 01 : 교재참조 10 : Non-INV 11 : INV PWM B 00, 01 : 교재참조 10 : Non-INV 11 : INV PWM C 00, 01 : 교재참조 10 : Non-INV 11 : INV TCCR1B 에 WGMn3, WGMn2 비트있음 WGMn[3:0] = 0000~1111 - 교재참조 41
1.13 ATmega128의타이머 / 카운터 16 비트타이머 / 카운터 1 과 3 관련레지스터 TCCR1B(Timer/Counter Control Register 1B) 타이머 / 카운터제어레지스터 1B TCCR3B(Timer/Counter Control Register 3B) 타이머 / 카운터제어레지스터 3B 잡음제거 0 : 잡음제거금지 1 : 잡음제거허용에지선택 0 : 하강에지 1 : 상승에지 TCCR1A에 WGMn1, WGMn0 비트있음 WGMn[3:0] = 0000~1111 -교재참조 000 : No Clock 001 : clk/1 010 : clk/8 011 : clk/64 100 : clk/256 101 : clk/1024 110 : Tn 핀 ( 외부클록 ), 하강에지 111 : Tn 핀 ( 외부클록 ), 상승에지 참고 ) T1 = PORTD.6 T3 = PORTE.6 타이머 / 카운터 1/2/3 의프리스케일러리셋 카운터외부클록신호의에지선택 42
1.13 ATmega128의타이머 / 카운터 16 비트타이머 / 카운터 1 과 3 관련레지스터 모드 WGMn3 WGMn2 (CTCn) WGMn1 (PWMn1) WGMn0 (PWMn0) 동작모드 최대값 OCRnx 레지스터업데이트점 TOVn 플래그의세트점 0 0 0 0 0 일반 0xFFFF 설정즉시 MAX Phase Correct 1 0 0 0 1 Phase Correct PWM, 8 비트 0x00FF TOP BOTTOM 2 0 0 1 0 Phase Correct PWM, 9 비트 0x01FF TOP BOTTOM 3 0 0 1 1 Phase Correct PWM, 10 비트 0x03FF TOP BOTTOM 4 0 1 0 0 CTC OCRnA 설정즉시 MAX 5 0 1 0 1 고속 PWM, 8 비트 0x00FF BOTTOM TOP Fast 6 0 1 1 0 고속 PWM, 9 비트 0x01FF BOTTOM TOP 7 0 1 1 1 고속 PWM, 10 비트 0x03FF BOTTOM TOP Phase & Frequency Correct 8 1 0 0 0 9 1 0 0 1 Phase and Frequency Correct PWM Phase and Frequency Correct PWM ICRn BOTTOM BOTTOM OCRnA BOTTOM BOTTOM Phase Correct 10 1 0 1 0 Phase Correct PWM ICRn TOP BOTTOM 11 1 0 1 1 Phase Correct PWM OCRnA TOP BOTTOM 12 1 1 0 0 CTC ICRn 설정즉시 MAX 13 1 1 0 1 사용하지않음 (Reserved) - - - Fast 14 1 1 1 0 고속 PWM ICRn BOTTOM TOP 15 1 1 1 1 고속 PWM OCRnA BOTTOM TOP 43
1.13 ATmega128의타이머 / 카운터 16 비트타이머 / 카운터 1 과 3 관련레지스터 TCCR1C(Timer/Counter Control Register 1C) 타이머 / 카운터제어레지스터 1C TCCR3C(Timer/Counter Control Register 3C) 타이머 / 카운터제어레지스터 3C 강제출력 A 0 : 강제출력금지 1 : 강제출력허용 강제출력 C 0 : 강제출력금지 1 : 강제출력허용 강제출력 B 0: 강제출력금지 1 : 강제출력허용 44
1.13 ATmega128의타이머 / 카운터 16 비트타이머 / 카운터 1 과 3 관련레지스터 TCNT1(Timer/Counter Register 1) 타이머 / 카운터레지스터 1 TCNT3(Timer/Counter Register 3) 타이머 / 카운터레지스터 3 카운트현재값 OCR1A(Output Compare Register 1A) 출력비교레지스터 1A, B와 C도동일 OCR3A(Output Compare Register 3A) 출력비교레지스터 3A, B 와 C 도동일 카운트설정값 ( 비교일치설정값 ) 2중버퍼링구조로데이터업데이트되는레지스터 프로그램동작중 OCRnAH, OCRnAL 레지스터에값이써지더라도 TCNT1이 TOP 또는 BOTTOM의값을가졌을때업데이트된다 B와 C도동일 45
1.13 ATmega128의타이머 / 카운터 16 비트타이머 / 카운터 1 과 3 관련레지스터 ICR1(Input Capture Register 1) 타이머 / 카운터레지스터 1 ICR3(Input Capture Register 3) 타이머 / 카운터레지스터 3 타이머캡쳐값또는 PWM 모드에서 TOP 값 46
1.13 ATmega128의타이머 / 카운터 16 비트타이머 / 카운터 1 과 3 관련레지스터 TIMSK(Timer/Counter Interrupt Mask Register) 타이머인터럽트마스크레지스터 타이머 / 카운터 1 입력캡쳐인터럽트허용 출력비교인터럽트 A 허용 출력비교인터럽트 B 허용 오버플로우인터럽트허용 1 : 허용 0 : 금지 TIFR(Timer/Counter Interrupt Flag Register) 타이머인터럽트플래그레지스터 타이머 / 카운터 1 입력캡쳐인터럽트요청상태 출력비교인터럽트 A 요청상태 출력비교인터럽트 B 요청상태 오버플로우인터럽트요청상태 1 : 요청있음 0: 요청없음 인터럽트플래그레지스터는인터럽트서브루틴진입시자동으로클리어 (=0) 된다. 사용자의프로그램에서플래그를클리어하기위해서는플래그비트에 1 을써야한다. 47
1.13 ATmega128의타이머 / 카운터 16 비트타이머 / 카운터 1 과 3 관련레지스터 ETIMSK(Extended Timer/Counter Interrupt Mask Register) 확장타이머인터럽트마스크레지스터 타이머 / 카운터 3 입력캡쳐출력비교출력비교오버플로우출력비교출력비교인터럽트인터럽트 A 인터럽트 B 인터럽트인터럽트 C인터럽트 C 허용허용허용허용허용허용 타이머 / 카운터 1 1 : 허용 0 : 금지 ETIFR(Extended Timer/Counter Interrupt Flag Register) 확장타이머인터럽트플래그레지스터 입력캡쳐출력비교출력비교오버플로우출력비교출력비교 1 : 요청있음타이머 / 카운터3 인터럽트인터럽트 A 인터럽트 B 인터럽트인터럽트 C인터럽트 C 0 : 요청없음요청상태요청상태요청상태요청상태요청상태요청상태타이머 / 카운터 1 인터럽트플래그레지스터는인터럽트서브루틴진입시 자동으로클리어 (=0) 된다. 사용자의프로그램에서플래그를클리어하기위해서는플래그비트에 1 을써야한다. 48
1.13 ATmega128의타이머 / 카운터 16 비트타이머 / 카운터 1 과 3 관련레지스터 SFIOR(Special Function IO Register) 특수기능 IO 레지스터 Bit 7 -> TSM : 타이머 / 카운터동기화모드 TSM 비트는논리 1 로설정하였을때타이머 / 카운터동기화기능을수행 TSM = 1이면» PSR0 = PSR321 = 1이되어유지되고, 모든타이머 / 카운터의동작정지» 모든타이머 / 카운터를똑같은값으로설정할수있음 TSM = 0 이면» PSR0 = PSR321 = 0 으로하드웨어적으로클리어» 타이머 / 카운터들이동시에계수시작함 - Bit 0 -> PSR321 : Prescaler Reset Timer/Counter3,2,1 타이머 / 카운터3, 2, 1의프리스케일러리셋기능 PSR321 = 1이면, 타이머 / 카운터0의프리스케일러를리셋한후에자동으로클리어 TSM = 1이면 PSR321 = 1로유지 49
1.13 ATmega128의타이머 / 카운터 8 비트와 16 비트타이머 / 카운터를이용한출력비교변조기 출력비교변조기의개념도 2개의 PWM 신호를변조 변조방법 1) 논리 AND 2) 논리 OR 변조기입력신호 OC1C AND OC2 OC1C OR OC2 50
1.13 ATmega128의타이머 / 카운터 8 비트와 16 비트타이머 / 카운터를이용한출력비교변조기 (Output Compare Modulator, OCM1C2) 출력비교변조기의블록도 OR 변조 (OR 게이트 ) AND 변조 (AND 게이트 ) 변조신호출력 변조신호와단일 PWM 신호선택 -타이머의비교출력모드가두파형모두일반출력모드가아닌경우에만변조기로동작함 타이머 / 카운터 1C의 OC1C 파형은타이머 / 카운터 1의제어레지스터를설정하여발생시킴 타이머 / 카운터 2의 OC2 파형은타이머 / 카운터 2의제어레지스터를설정하여발생시킴 변조기동작설정 = (COM21 or COM20 ) and (COM1C1 or COM1C0) 변조방식의선택 PORTB7 = 0 이면 AND 변조, OC1C AND OC2 PORTB7 = 1 이면 OR 변조, OC1C OR OC2 51
1.13 ATmega128의타이머 / 카운터 16 비트타이머 / 카운터의타이밍도 CTC 모드 A/B/C 중 A 에만출력 (TOP 에서 ) TCNT == 비교대상, 다음클록에서 TCNT = 0 1.WGM == 4 에서, OCnA 비교일치인터럽트발생 2.WGM == 12에서, ICFn 입력캡쳐인터럽트발생 TCNT가 OCR과비교일치에서반전동작함 ( 주기 ) 52
1.13 ATmega128의타이머 / 카운터 16 비트타이머 / 카운터의타이밍도 Fast PWM 모드 TCNT == TOP, 다음클록에서 TCNT = 0 (TOP 에서 ) 1. OCRnx 업데이트 TOP 업데이트 2. 오버플로우인터럽트발생 3. WGM == 14에서, 입력캡쳐인터럽트발생 4. WGM == 15에서, OCnA 비교일치인터럽트발생 Non-INV INV ( 주기 ) 53
1.13 ATmega128의타이머 / 카운터 16 비트타이머 / 카운터의타이밍도 Phase Correct PWM 모드 BOTTOM 에서좌우로대칭 TCNT == 0 TCNT == TOP (TOP 에서 ) 1. OCRnx 업데이트 TOP 업데이트 2. WGM == 10에서, 입력캡쳐인터럽트발생 3. WGM == 11에서, OCnA 비교일치인터럽트발생 (BOTTOM 에서 ) 1. 오버플로우인터럽트발생 Non-INV INV ( 주기 ) 54
1.13 ATmega128의타이머 / 카운터 16 비트타이머 / 카운터의타이밍도 Phase and Frequency Correct PWM 모드 TOP 에서좌우로대칭 TCNT == TOP (TOP 에서 ) 1. WGM == 8에서, 입력캡쳐인터럽트발생 2. WGM == 9에서, OCnA 비교일치인터럽트발생 TCNT == 0 (BOTTOM 에서 ) 1. OCRnx 업데이트 TOP 업데이트 2. 오버플로우인터럽트발생 Non-INV INV ( 주기 ) 55
1.13 ATmega128의타이머 / 카운터 16 비트타이머 / 카운터의타이밍도 비교출력인터럽트발생타이밍도, No Prescaling = clk / 1 동기클록상승신호 동기클록 클록인가허용 TCNT == OCRnX 비교값 비교출력인터럽트플래그 56
1.13 ATmega128의타이머 / 카운터 16 비트타이머 / 카운터의타이밍도 비교출력인터럽트발생타이밍도, with Prescaler ( 8 분주 ) 레지스터의변화와플래그의세트동작은분주되기이전의클록신호에맞추어짐 동기클록상승신호 동기클록 클록인가허용 (clk / 8) TCNT == OCRnX 비교값 비교출력인터럽트플래그 57
1.13 ATmega128의타이머 / 카운터 16 비트타이머 / 카운터의타이밍도 비교일치인터럽트발생타이밍도, No Prescaling = clk / 1 CTC 모드제외한모든모드 동기클록상승신호 동기클록 클록인가허용 (clk/1) CTC 와 FPWM 에서카운터값의변화 TCNT == OCR PC 와 PFC PWM 에서카운터값의변화 FPWM 에서오버플로우 ICR(=TOP) 에서입력캡쳐인터럽트발생 비교값 OCR 버퍼레지스터에서 OCR 비교레지스터로데이터가이동하여업데이트 58
1.13 ATmega128의타이머 / 카운터 16 비트타이머 / 카운터의타이밍도 비교일치인터럽트발생타이밍도, No Prescaling = clk / 1 CTC 모드제외한모든모드 동기클록상승신호 동기클록 클록인가허용 (clk/1) CTC 와 FPWM 에서카운터값의변화 TCNT == OCR PC 와 PFC PWM 에서카운터값의변화 FPWM 에서오버플로우 ICR(=TOP) 에서입력캡쳐인터럽트발생 비교값 OCR 버퍼레지스터에서 OCR 비교레지스터로데이터가이동하여업데이트 59
1.13 ATmega128의타이머 / 카운터 워치독타이머 기능 오버플로우발생시 ATmega128 을리셋시킨다. 리셋이후에 MCUCSR 레지스터를읽으면, 리셋의원인을알수있다. 사용방법 오버플로우가발생하지않도록주기적으로워치독타이머를클리어시킨다 사용하는이유 워치독을주기적으로클리어시키면, 워치독오버플로우가발생하지않게되고, 시스템은정상이다. 워치독오버플로우가발생하는것은시스템이비정상상태이기때문이다. 즉, 비정상상태의 AVR 을자동으로리셋시켜정상으로돌리기위한목적이다. 비정상상태의 AVR 이계속해서동작하게되면, 2 차적으로더큰문제가생길수있다. 또는오작동상태를감지한후에오작동원인을제거하면, 소프트웨어로리셋시키기위한목적도있음. 구조 내부 RC 발진기사용 ( 약 1MHz) 프리스케일러를선택하여오버플로우시간을설정 60
1.13 ATmega128의타이머 / 카운터 워치독타이머 WDTCR (Watchdog Timer Control Register) -Bit 4 -> WDCE : 워치독변경인에이블 워치독타이머의프리스케일러의값을변경하거나워치독기능을사용하지않도록설정 WDE 비트와 WDP[2:0] 비트를설정후에이비트 (WDCE) 를 1로설정하면, WDE의설정이적용되고, 4클록이후에자동으로 0으로클리어» WDE = 0 : 워치독타이머사용금지» WDE = 1 : 워치독타이머사용허용 WDE 비트가논리 1 로설정되어있을때이비트가논리 1 로설정될수있다. WDCE 비트가논리 1로설정되어있다가 4사이클이지나면자동으로하드웨어에의해 WDCE는논리 0 으로설정된다. -Bit 3 -> WDE : 워치독인에이블 WDE = 0 : 워치독타이머사용금지 WDE = 1 : 워치독타이머사용허용 -Bit 2:0 -> WDP2, WDP1, WDP0 : 워치독타이머프리스케일러 2, 1, 0 워치독타이머가활성화될때WDP2, WDP1, WDP0 비트들에의해프리스케일러가결정 전원전압의크기에따라서내부오실레이터의발진에약간의차이가발생» 5V일때와 3.3V일때에같은프리스케일러의값을설정하더라도타임아웃간격에는차이가있음» 일반적으로전원전압이낮을경우오실레이터의발진주파수가느려짐 61
1.13 ATmega128의타이머 / 카운터 워치독타이머활성화순서 1) WDTCR 레지스터의 WDCE 와 WDPn 을동시에설정한다. WDCE= 1, WDPn = 시간에맞게 ex) WDTCR = (1 << WDCE) (1 << WDP2) (1 << WDP1) (1 << WDP0); 2) WDTCR 레지스터의 WDCE 와 WDE 를동시에설정한다. WDCE = 1, WDE = 1 ex) WDTCR = (1 << WDCE) (1 << WDE); 워치독타이머비활성화순서 1) WDTCR 레지스터의 WDCE와 WDE를동시에설정한다. WDCE = 1, WDE = 0 ex) WDTCR = (1 << WDCE) (0 << WDE); ex)wdtcr=(1<<wdce); WDCE); WDP2 WDP1 WDP0 워치독타이머분주비 Vcc=3V에서의타임아웃 Vcc=5V에서의타임아웃 0 0 0 16K(16,384) 14.8ms 14.0ms 0 0 1 32K(32,768) 29.6ms 28.1ms 0 1 0 64K(65,536) 59.1ms 56.2ms 0 1 1 128K(131,072) 0.12s 0.11s 1 0 0 256K(262,144) 02 0.24s 022 0.22s 1 0 1 512K(524,288) 0.47s 0.45s 1 1 0 1,024K(1,048,576) 0.95s 0.9s 1 1 1 2,048K(2,097,152) 1.9s 1.8s 62
핵심포인트를꽉짚어주는 AVR ATmega128 완전정복 제 1 장 AVR ATmega128 개요 [4/4] ATmega128 의주변장치 2
CHARTER 01- AVR ATmaga128 개요 CHARTER 01 목차 1.1 AVR 이란? 1.2 AVR 의제품종류 1.3 AVR 의어플리케이션 1.4 ATmega128 의특징 1.5 ATmega128 의핀배열 1.6 ATmega128 의블록도 1.7 ATmega128 의내부구조 1.8 ATmega128 의메모리 1.9 시스템클록과클록옵션 1.10 인터럽트 (Interrupt) 1.11 외부인터럽트 1.12 전원관리와휴면모드 1.13 ATmega128 의타이머 / 카운터 1.1414 ATmega128 의디지털입출력핀구조 1.15 리셋 (Reset) 1.16 SPI 통신인터페이스 1.17 TWI 통신인터페이스 1.18 USART 통신인터페이스 1.19 EEPROM 데이터메모리 1.20 ATmega128 의아날로그디지털변환 1
1.14 ATmega128의디지털입출력핀구조 특징 포트 A, B, C, D, E, F, G 8 비트병렬입출력포트 : A, B, C, D, E, F 5 비트병렬입출력포트 : G 총 53 개디지털입출력핀을가짐 디지털입출력핀의 DC 전류 : 최대 40mA LED 의직접구동이가능 소형 RELAY 의직접구동이가능 Read-Modify-Write(RMW) 현재레지스터값을 Read 원하는값으로 Modify 수정된값으로 Write SBI, CBI 명령수행중다른읽기 / 쓰기동작이끼어들수없는 Atomic( 끊어지지않고연속해서일어나는동작 ) 구조를가진다. 즉, 레지스터는 8 비트병렬읽기 / 쓰기만가능하지만 RMW 를보장하기때문에 AVR 의 SBI, CBI 명령으로 특정비트의 SET 과 CLEAR 동작결과를보장한다. 2
1.14 ATmega128의디지털입출력핀구조 데이터방향설정레지스터 (DDRx) DDRA, DDRB, DDRC, DDRD, DDRE, DDRF, DDRG x = A ~ G 디지털입출력포트의데이터방향을설정하는레지스터 x = A ~ G, n = 0 ~ 7 DDxn = 0 : 데이터는입력방향 DDxn = 1 : 데이터는출력방향 데이터의방향설정? 1. 입력방향설정 : AVR 이핀의논리 (logic) 를내부로읽을수있는설정 2. 출력방향설정 : AVR 이핀의논리 (logic) 를변경하여쓸수있는설정 3
1.14 ATmega128의디지털입출력핀구조 포트데이터레지스터 (PORTx) PORTA, PORTB, PORTC, PORTD, PORTE, PORTF, PORTG x = A ~ G 포트의출력데이터값을설정하는레지스터 ( 단, DDRxn = 1 일때 ) x = A ~ G, n = 0 ~ 7 PORTxn = 0 : 0을포트의핀에출력 PORTxn = 1 : 1을포트의핀에출력 4
1.14 ATmega128의디지털입출력핀구조 포트입력핀어드레스 (PINx) PINA, PINB, PINC, PIND, PINE, PINF, PING x = A ~ G 포트의핀의논리 (logic) 을읽기위해접근하는주소 x = A ~ G, n = 0 ~ 7 읽기전용임 초기값은알수없음 5
1.14 ATmega128의디지털입출력핀구조 풀업저항연결해제 (PUD : Pull-Up Disable) PUD = 1 : 모든포트풀업저항연결해제 PUD = 0 : {DDRxn, PORTxn} 의설정에따라풀업저항연결이달라짐 DDRxn PORTxn PUD (in SFIOR) I/O 풀업 설명 0 0 X Input No 3상태 (Hi-Z) 0 1 0 Input Yes Pxn will source current if ext. pulled low 0 1 1 Input No 3상태 (Hi-Z) 1 0 X Output No Output Low(Sink) 1 1 X Output No Output High(Source) 내부풀업저항의크기 : 20~50[ kω ] 6
1.14 ATmega128의디지털입출력핀구조 대체기능 (alternate functions) 범용디지털입출력포트는 AVR 의특수기능을위해핀의대체기능을가진다. 포트포트 A 포트 B 포트 C 포트 D 포트 E 포트 F 포트 G 대체기능 외부메모리데이터버스 (Data Bus) 외부메모리하위어드레스바이트버스 (Address low byte) 타이머 / 카운터 0(OC0) 타이머 / 카운터 1(OC1A, OC1B, OC2/OC1C) SPI(MISO, MOSI, SCK, SS) 외부메모리상위어드레스바이트버스 (Address High Byte) 타이머 / 카운터 1(T1, ICP1) 타이머 / 카운터 2(T2) 외부인터럽트 (INT0, INT1, INT2, INT3) USART1(XCK1, TXD1, RXD1) TWI 직렬통신 (SDA, SCL) 타이머 / 카운터 3(T3, ICP3, OC3A, OC3B, OC3C) 외부인터럽트 (INT4, INT5, INT6, INT7) USART0(XCK0, TXD0, RXD0) 아날로그비교기 (AIN0[p], AIN1[n]) SPI(PDO, PDI) -ISP ADC 입력채널 (ADC0~ADC7) JTAG(TDI, TDO, TMS, TCK) 타이머 / 카운터 0(TOSC1, TOSC2) - RTC 외부메모리인터페이스 (ALE, /RD, /WR) 7
1.15 리셋 (Reset) ATmega128 이리셋되면 모든 I/O 레지스터는각각의초기값으로세트됨 리셋벡터 ( 프로그램메모리의 0x0000 번지 ) 부터프로그램이시작됨 리셋벡터에 JMP 명령으로리셋루틴을핸들링해야함 만약 ATmega128 이인터럽트를사용하지않는다면 JMP 명령으로리셋루틴을핸들링할필요가없으며, 인터럽트벡터공간에프로그램이가능하게됨 어플리케이션섹션에리셋벡터가존재하고, 부트로더섹션에인터럽트벡터가존재하는경우에도해당함 그반대의경우에도해당함 ATmega128 의리셋종류 (5 가지 ) Power-on Reset 외부리셋 (External Reset) Brown-out 리셋 워치독리셋 JTAG 리셋 8
1.15 리셋 (Reset) MCU 상태제어레지스터 (MCUCSR) POR 리셋을제외하고, POR에서 0으로클리어됨 해당비트에 0을쓰면클리어됨 Bit 4 -> JTRF : JTAG 리셋플래그 JTAG 명령 AVR_RESET에의해 JTAG 리셋레지스터에 1 이설정되면 MCU는리셋되고이비트는세트됨 Bit 3 -> WDRF : 워치독리셋플래그워치독타이머가오버플로우되면 MCU는리셋되고이비트는세트됨 Bit 2 -> BORF: Brown-out 리셋플래그 Brown-out 검출기에의해전원이설정전위이하로내려가면, MCU 는리셋되고, 이비트는세트됨 Bit 1 -> EXTRF : 외부리셋외부의리셋핀이 0으로떨어지면 MCU 는리셋되고, 이비트는세트됨 Bit 0 -> PORF: Power-On 리셋플래그전원이새로인가되면서 MCU는리셋과정을거치게되고, 이비트는세트됨 9
1.15 리셋 (Reset) 내부전압기준 ATmega128은내부밴드갭기준특성을가짐 ATmega128의내부장치에사용 Brown-out 검출기 아날로그비교기 (Analog Comparator) ADC(Analog to Digital Converter) Symbol Parameter Min Typ Max Units Bandgap reference voltage 1.15 1.23 1.40 V Bandgap reference start-up time 40 70 us Bandgap reference current consumption 10 ua 10
1.16 SPI 통신인터페이스 SPI(Serial Peripheral Interface) 근거리용직렬통신규격으로 MOSI, MISO, SCK, SS 의 4 개의신호선을이용함 모토로라사에서제안하여개발됨 이용범위 AVR 과주변장치의고속동기데이터통신에이용 AVR 과 AVR 사이의고속동기데이터통신에이용 SD 메모리제어, EEPROM 제어, AD 컨버터제어, 기타장치에주로이용됨 장점 UART 통신에비하여빠른속도와멀티통신이가능 I2C 통신에비해빠르고간단한제어 11
1.16 SPI 통신인터페이스 SPI 통신인터페이스의특징 MISO, MOSI, SCK, SS 등 4 개의신호선을이용한고속직렬동기식통신 전- 이중 (Full-Duplex) l 통신가능 마스터 (Master) 와슬레이브 (Slave) 로구분됨 마스터에의해클록발생및슬레이브로클록제공 첫번째데이터를 MSB 또는 LSB 로선택가능 수 MHz 속도로통신이가능하며, 7 가지전송속도중에서선택하여사용가능 전송완료인터럽트플래그지원 쓰기충돌방지를위한플래그내장 슬립모드해제기능지원 12
1.16 SPI 통신인터페이스 SPI 통신인터페이스 마스터모드 MOSI, SCK, SS = 출력, MISO = 입력으로설정 전송동작 SS = 0 ( 슬레이브디바이스선택 ) SPDR = 데이터 ( 전송시작, 데이터레지스터 ) 전송중» 마스터는 SCK 신호발생» 하드웨어적으로데이터를시프트 데이터길이 = 8비트» 슬레이브로데이터전송 전송완료시» SCK 클록정지» SPSR.SPIF = 1 ( 전송완료인터럽트플래그 ) 전송완료인터럽트허용시» SPCR.SPIE = 1 이면인터럽트허용» SPIF = 1이면인터럽트요청 SS = 1 ( 슬레이브디바이스선택해제, 전송종료 ) 핀 마스터 SPI일때방향 슬레이브 SPI일때방향 MOSI 사용자정의 입력 MISO 입력 사용자정의 SCK 사용자정의 입력 SS 사용자정의 입력 13
1.16 SPI 통신인터페이스 SPI 통신인터페이스 슬레이브모드 MOSI, SCK, SS = 입력, MISO = 출력으로설정 전송동작 if (SS = 1)» 모든 SPI 신호는 3-상태 or 입력상태로변함 if (SS = 0)» 슬레이브동작이유효하게됨 전송중» 마스터의 SCK 신호에의해 8비트데이터전송 전송완료시» SPSR.SPIF = 1 ( 전송완료인터럽트플래그 )» SPIF = 1 이면 SPDR 에서데이터를읽음 전송완료인터럽트허용시» SPCR.SPIE = 1 이면인터럽트허용» SPIF = 1 이면인터럽트요청 핀 마스터 SPI일때방향 슬레이브 SPI일때방향 MOSI 사용자정의 입력 MISO 입력 사용자정의 SCK 사용자정의 입력 SS 사용자정의 입력 14
1.16 SPI 통신인터페이스 SPI 통신연결구조 마스터 슬레이브연결구조 SS(SPI Bus Slave Select Input) : 슬레이브선택신호 MISO(SPI Bus Master Input/Slave Output) : 마스터입력, 슬레이브출력신호 MOSI(SPI Bus Master Output/Slave Input) : 마스터출력, 슬레이브입력신호 SCK(SPI Bus Serial Clock) : 클록신호 마스터 슬레이브 15
1.16 SPI 통신인터페이스 SPI 관련레지스터 SPCR(SPI Control Register) SPI 제어레지스터 SPI 인터럽트허용 0 : SPI 인터럽트금지 1 : SPI 인터럽트허용 SPI 통신활성화 0 : SPI 통신금지 1 : SPI 통신허용 데이터전송순서 0 : MSB 우선 1 : LSB 우선 클록전송률선택 SPI2X SPR1 SPR0 SCK Frequency 0 0 0 f osc / 4 0 0 1 f osc / 16 0 1 0 f osc / 64 0 1 1 f osc / 128 1 0 0 f osc / 2 1 0 1 f osc / 8 1 1 0 f osc / 32 1 1 1 f osc / 64 마스터 / 슬레이브선택 0 : 슬레이브로동작 1 : 마스터로동작 클록극성선택 대기상태일때클록 SCK 의극성을설정함 0 : 대기상태에서 SCK 는 Low 상태를유지 1 : 대기상태에서 SCK 는 High 상태를유지 클록위상선택 샘플링동작이수행되는 SCK의위상을선택 CPHA Leading edge Trailing edge 0 샘플링 데이터준비 1 데이터준비 샘플링 CPOL Leading edge Trailing edge 0 상승에지 하강에지 1 하강에지 상승에지 16
1.16 SPI 통신인터페이스 SPI 송수신동작 SPI 데이터모드 샘플링위상선택 CPHA = 0 (Leading, 앞 ) CPHA = 1 (Trailing, 뒤 ) 대기상태 대기상태 CPOL = 1 (High) 극성선택 CPOL = 0 (Low) SCK MOSI MISO SCK MOSI MISO SCK MOSI MISO 샘플링 17
1.16 SPI 통신인터페이스 SPI 관련레지스터 SPSR(SPI Status Register) SPI 상태레지스터 SPI 인터럽트플래그 0 : SPI 인터럽트없음 1 : SPI 인터럽트요청 쓰기충돌플래그 - SPI가데이터를전송하는동안에 SPDR 레지스터에데이터를쓰려고하면 1 로세트 - SPSR 레지스터를읽은후에 SPDR을액세스하면 SPIF와 WCOL 비트는클리어됨 SPI 2배속통신설정비트 0 : SPI 2배속사용안함 1 : SPI 2배속사용설정 SPDR(SPI Data Register) SPI 데이터레지스터 SPI 통신용데이터레지스터 18
1.17 TWI 통신인터페이스 TWI 통신의특징 TWI (Two-Wire Interface) AVR Device or AVR AVR 사이에서클록 (SCL) 신호와, 데이터 (SDA) 신호만을사용해서 직렬로데이터를전달하는방식의통신 필립스 (Philips) 사에서제안한근거리통신용표준직렬통신방식은 IIC == I2C IIC(Inter-Integrated Circuit) == I 2 C TWI 는 I2C 와같은통신방식 최대 128 개의서로다른 Device 및 MCU 를연결함 외부에풀업저항만연결되면되므로, 구성이간단함.( 풀업저항크기 : 일반적으로 4.7[ kω ]) 모든장치는개별적인주소를가지며, 버스경합을해결하기위한 TWI 프로토콜매커니즘이내장되어있음 ATmega128 의 TWI 통신특징 2선식의심플하고, 강력한통신인터페이스 마스터와슬레이브동작모드지원 송신기또는수신기로운영됨 7비트주소공간으로최대 128개의슬레이브주소허용 멀티마스터중재 (Arbitration) 지원 최대 400KHz의데이터전송속도 슬루-레이트 (slew-rate) 제한출력드라이버 버스라인에스파이크제거를위한노이즈억제회로내장 전체호출로모든슬레이브주소에프로그래밍할수있도록제공 AVR이슬립모드에있을때어드레스인식으로깨어남 19
1.17 TWI 통신인터페이스 TWI 버스의연결도 각장치는개별주소를가짐 최대 128개의장치를연결할수있음 ATmega128, EEPROM, ADC, 온도센서등 주변회로는약 4.7[ kω ] 의풀업저항만필요하므로구성이간단함 신호단자는오픈컬렉터 (TR의경우 ) 또는오픈드레인 (FET의경우 ) 의구조임 마스터 (Master) 데이터전송의시작과종료를담당하는장치 SCL 클록을발생함 송신할때 : 마스터송신기로동작 (Master Transmitter) 수신할때 : 마스터수신기로동작 (Master Receiver) 슬레이브 (Slave) 마스터에의해주소를할당받는장치 송신할때 : 슬레이브송신기로동작 (Slave Transmitter) 수신할때 : 슬레이브수신기로동작 (Slave Receiver) 20
1.17 TWI 통신인터페이스 TWI 데이터전송의기본형식 유효한데이터전송 SCL 이 H 인동안 SDA 가변하지않는상태에서전송 그렇지않으면 START or STOP 상태로인지 데이터는클록신호 SCL의상승에지에서전송 SCL이 L 인동안데이터신호를변경할수있음 START 조건 SCL 클록신호가 H 인동안 SDA 가하강에지신호를발생하는것 REPEATED START 조건 STOP 조건없이 START 조건이발생하는것 마스터가제어권을잃지않고계속해서새로운데이터를전송할때사용 STOP 조건 SCL 클록신호가 H 인동안 SDA 가상승에지신호를발생하는것 21
1.17 TWI 통신인터페이스 TWI 데이터송신및수신 TWI 통신의패킷 주소패킷 (Address packet) 9 비트로구성» 7비트의슬레이브어드레스 최상위비트 (MSB) 부터전송» 1 비트의읽기 / 쓰기신호» 1 비트의확인 (ACK) 신호 SLA+R = 슬레이브주소 + READ 신호 SLA+W = 슬레이브주소 + WRITE 신호 SLA+R/W = 슬레이브주소 + READ or WRITE 데이터패킷 (Data packet) 9 비트로구성» 8 비트의데이터신호 최상위비트 (MSB) 부터전송» 1비트의확인 (ACK) 신호 22
1.17 TWI 통신인터페이스 TWI 데이터송신및수신형식 (WRITE) S SLAVE ADDRESS R/W A DATA A DATA A P 0 (write) 데이터전송 (n bytes + acknowledge) (READ) S SLAVE ADDRESS R/W A DATA A DATA /A P 1 (read) 데이터전송 (n bytes + acknowledge) 마스터 -> 슬레이브 슬레이브 -> 마스터 A = Acknowledge (SDA = 0) /A = Not Acknowledge (SDA = 1) S = START 조건 P = STOP 조건 23
1.17 TWI 통신인터페이스 TWI 직렬통신모듈의구조 SCL과 SDA 신호출력드라이버 슬루-레이트 (Slew-rate) 제한기포함 50ns 이하의스파이크필터 (Spike Filter) 포함 비트레이트발생기 마스터모드로동작할때 SCL의주기를제어 TWBR + TWSR.TWPS[1:0] 에의해제어 TWBR(TWI Bit Rate Register)» 마스터모드에서 TWBR >= 10 TWSR(TWI Status Register) 슬레이브로동작할때는무관하지만 CPU의주파수 > SCL 주파수 * 16 이어야함 버스인터페이스유닛 TWDR + 시작 / 정지제어기 + 중재검출기 TWDR(TWI Data Register) 송신 or 수신된어드레스및데이터가포함 확인 ((N)ACK) 비트를저장하는레지스터 프로그램에서접근불가능 수신할때» TWCR에의해 SET or CLEAR 송신할때» TWSR의값에의해결정됨 24
1.17 TWI 통신인터페이스 TWI 직렬통신모듈의구조 START/STOP 제어기 START, REPEATED START, STOP 조거의생성과감지 휴면모드의해제 마스터에의해전송을시작하면중재검출하드웨어가 계속해서중재과정에있는지확인하기위해전송을모니터링 중재를잃은경우제어유닛에알려지고, 적절한상태코드생성으로정정된동작수행 어드레스매치유닛 수신된어드레스바이트와 TWAR 레지스터를비교 7비트의어드레스와일치하는지검사 if(twar.twgce TWGCE == 1)? 수신된어드레스와전체호출어드레스비교 일치하면제어유닛에알림 TWCR 설정에따라어드레스를인정하거나않을수있음 슬립모드에서도어드레스는비교됨 마스터가지정한주소와일치하면깨어남 제어유닛 TWI 버스를모니터링 TWCR 레지스터의설정에따라응답신호를발생 이벤트가발생하면 TWINT는세트됨 다음클록에 TWSR에이벤트를식별하는상태코드가업데이트 TWI 인터럽트플래그가세트되었을때에만유효함 if(twint == 0)? SCL 라인은 0 을유지한다. 25
1.17 TWI 통신인터페이스 TWI 의인터럽트는발생조건 TWI 가 START/REPEATED START 조건을전송후 TWI 가어드레스패킷 (SLA+R/W) 전송후 TWI 가어드레스바이트전송후 TWI 가중재를잃은후 TWI 가자신의슬레이브어드레스나전체호출로지정된후 TWI 가 1 바이트데이터를수신한후 TWI 가여전히슬레이브로지정되어있는데 STOP 또는 REPEATED START 를수신한후 잘못된 START 또는 STOP 조건으로버스오류가발생했을때 26
1.17 TWI 통신인터페이스 TWI 제어용레지스터 TWI 비트레이트레지스터 비트레이트발생기의주파수분주값을선택함 즉, SCL 신호의주파수를설정하는레지스터 비트레이즈발생기 마스터모드에서 SCL 클록주파수를생성하는주파수분주기 27
1.17 TWI 통신인터페이스 TWI 제어용레지스터 TWI 제어레지스터 Bit 7 -> TWINT : TWI 인터럽트플래그 현재작업이완료되거나예상된응용소프트웨어응답의경우에하드웨어에의해세트됨 만약 (SREG.I = 1, TWINT = 1) 이면 ATmega128은 TWI 인터럽트벡터로점프 인터럽트루틴을실행하면서하드웨어에의해자동으로클리어되지않음» 반드시소프트웨어에의해논리 0 으로클리어해야함 이플래그비트를클리어하기전에» 모든 TWI 레지스터 (TWAR, TWSR, TWDR 레지스터 ) 를읽거나써야한다. TWINT = 1인동안 SCL =0을유지 Bit 6 -> TWEA : TWI 허가확인비트 확인 (ACK) 비트의생성제어기능수행 TWEA = 1 일때, TWI 버스가다음의조건으로충족되면 ACK 확인비트가발생함» 디바이스가자기의슬레이브어드레스를수신한경우» TWAR.TWGCE 비트에의해전체호출을수신한경우» 1바이트데이터가마스터수신기또는슬레이브수신기모드로수신된경우 TWEA = 0 이면,» 디바이스는 TWI 직렬버스에서일시적으로연결이종료될수있다.» 다시논리 1 로설정되면, 다시어드레스를인식할수있다. 28
1.17 TWI 통신인터페이스 TWI 제어용레지스터 TWI 제어레지스터 Bit 5 > TWSTA: TWI START 조건비트 TWSTA = 1 이면,» TWI 직렬버스에서마스터로서동작» TWI 버스가사용가능한상태인지확인하고, 가능한상태이면 START 조건을발생» 버스가가능한상태가아니면 STOP 조건이검출될때까지기다리게되고, 버스사용이가능하게되면 START 조건을발생 START 조건이전송되면반드시이비트는소프트웨어로클리어되어야한다. Bit 4 -> TWSTO: TWI STOP 조건비트 마스터모드에서» TWSTO = 1이면, STOP 조건을발생» STOP 조건이버스에서실행되면, TWSTO 비트는자동으로논리 0 으로클리어된다. 슬레이브모드에서» TWSTO 비트의설정은에러상태를복구하는데사용» STOP 조건을발생하는것이아니라지정된슬레이브를해제하여반환하고, SCL과 SDA 선을고임피던스 (high impedance) 상태로만듬 29
1.17 TWI 통신인터페이스 TWI 제어용레지스터 TWI 제어레지스터 Bit 3 -> TWWC: TWI 쓰기충돌플래그 TWINT = 0 일때,TWDR 레지스터에데이터쓰기를시도할때세트됨 TWINT = 1 일때, TWDR 레지스터에데이터를쓰면 TWINT 는클리어됨 Bit 2 -> TWEN: TWI 인에이블비트 TWI 동작을가능하게하고, TWI 인터페이스를활성화한다 TWEN = 1 이면,» TWI는 SCL과 SDA 핀에연결된 I/O 핀을통해제어된다.» SCL과 SDA는슬루-레이트제한기와스파이크필터가연결되어있음 TWEN = 0 이면,» TWI는사용할수없으며, 모든 TWI 전송은종료됨 Bit 0 -> TWIE : TWI 인터럽트인에이블 TWI 인터럽트를허용하는비트 TWIE = 1, SREG.I = 1 이면, TWINT = 1 이되었을때 TWI 인터럽트가요청됨 30
1.17 TWI 통신인터페이스 TWI 제어용레지스터 TWI 상태레지스터 Bit 7:3 -> TWS: TWI 상태 TWI 의로직 ( 논리 ) 과 TWI 버스의상태를나타냄 TWI 의동작에따라각각다른상태코드를가짐 Bit 1:0 -> TWPS: TWI 프리스케일러비트 비트전송속도에맞도록클록을분주시킴 TWPS1 TWPS0 프리스케일러값 0 0 1 0 1 4 1 0 16 1 1 64 31
1.17 TWI 통신인터페이스 TWI 제어용레지스터 TWI 데이터레지스터 송신모드에서다음에전송할데이터를포함 수신모드에서마지막수신한데이터를포함 바이트를시프트하지않는처리과정중에만쓰기권한을가지며, TWINT = 1 일때가능해진다. TWINT = 1 이면, 데이터는유지됨 첫번째인터럽트가발생하기전에사용자에의해초기화될수없음 TWI 인터럽트를통해휴면모드에서깨어난후를제외하고, 항상마지막에수신한데이터를포함 TWI 인터럽트를통해휴면모드에서깨어난후 TWDR의내용은정의되지않음 버스조정이실패한경우에마스터에서슬레이브로전환될때에데이터는없어짐 Bit 7:0 -> TWD : TWI 데이터레지스터 송신모드에서다음에전송할데이터를포함 수신모드에서마지막수신한데이터를포함 32
1.17 TWI 통신인터페이스 TWI 제어용레지스터 TWI ( 슬레이브 ) 주소레지스터 슬레이브모드에서동작하는것으로마스터에의해서지정된 7 비트슬레이브주소를나타냄 Bit 7:1 -> TWA : TWI ( 슬레이브 ) 주소레지스터 7비트의 TWI 유닛의슬레이브주소를나타낸다. Bit 0 -> TWGCE : TWI 전체호출인식허용비트 TWGCE = 1 이면, TWI 직렬버스에서슬레이브전체호출의인식을가능하게함 33
1.17 TWI 통신인터페이스 TWI 통신포트의동작 AVR의 TWI는인터럽트기반의바이트단위통신인터페이스 모든버스이벤트후에인터럽트가발생 START/REPEATED START 조건의송신후 SLA+R/W 의송신후 어드레스바이트송신후 데이터바이스수신후 STOP 조건의송신후 기타 TWIE = 0 이면, TWINT 플래그를폴링방식으로처리해야함 TWIE = 1 이면, TWI 는동작을마치고프로그램의응답을기다림 TWSR 에 TWI 버스의현재상태를나타냄 응용프로그램은 TWCR, TWDR 레지스터를제어하고, 다음 TWI 동작을결정 34
1.17 TWI 통신인터페이스 TWI 데이터전송을위한기본동작인터페이스 TWI 하드드웨어동작 응용프로그램동작 35
1.17 TWI 통신인터페이스 TWI 기본통신에서 TWSR 상태코드 오류상태는제외 (ATmega128 데이터시트참조 ) MT 모드 MR 모드 ST 모드 SR 모드 ( 마스터송신 ) ( 마스터수신 ) ( 슬레이브송신 ) ( 슬레이브수신 ) START 조건종료후 0x08 0x08 - - SLA+R/W 송신, ACK 인정후 0x18 0x40 - - SLA+R/W 송신, NACK 인정후 0x20 048 - - SLA+R/W 수신, ACK 응답후 - - 0xA8 0x60 SLA+R/W 수신, NACK 응답후 - - - - DATA 송신, ACK 인정후 0x28-0xB8 - DATA 송신, NACK 인정후 0x30-0xC0 - DATA 수신, ACK 응답후 - 0x50-0x80 DATA 수신, NACK 응답후 - 0x58-0x88 STOP 조건종료후 - - - 0xA0 REPEAT START 조건후 0x10 0x10-0xA0 36
1.18 USART 통신인터페이스 USART(Universal Synchronous and Asynchronous serial Receiver and Transmitter) USART의의미 : 범용동기 / 비동기수신기및송신기 UART : 범용비동기수신기및송신기 RS232, RS485, RS422 등의통신은 UART 의통신임 USRT : 범용비동기수신기및송신기 SPI 통신과같이마스터 MCU 가슬레이브 MCU 로클록을공급해야함 송신측과수신측은동일한프레임구조로설정되어야함 프레임 올바른통신을위해서는프레임구조와전송속도가일치해야함 구성및순서 : START + DATA + PARITY + STOP START 비트 길이 = 1 비트 레벨 = 0 (Low) DATA 비트 길이 = 5~9 비트 레벨 = X ( 사용자정의 ) PARITY 비트 길이 = 1 or None 레벨 = 설정 (Even, Odd, None) 에따라 STOP 비트길이 = 1~2 비트레벨 = 1(High) UART 신호와통신용송수신드라이버 IC를결합하여, RS232, RS485, RS422 통신으로분류됨 UART 신호 : RXD, TXD, GND RS232 통신 : UART 신호 + MAX232 IC ( 또는 MAX3232) RS485 통신 : UART 신호 + MAX485 IC ( 또는 SN75176, SN65176) 송신모드및수신모드전환용디지털제어신호가필요함 RS422 통신 : UART 신호 + MAX485 IC ( 또는 SP485(Half Type), SN65C1168(Full Type)) 422 멀티드롭모드에서는송신모드및수신모드전환용디지털제어신호가필요함 37
1.18 USART 통신인터페이스 ATmega128 의 USART 특징 전이중 (Full-Duplex) 통신동작 비동기와동기모드로동작 마스터또는슬레이브클록동기모드동작 높은정밀도의보레이트 (Baud Rate) 발생기 5~9 DATA 비트와 1~2 STOP 비트의프레임설정지원 하드웨어에의해동작하는짝수또는홀수패리티발생기와검사기지원 데이터오버런 (OverRun) 감지기능내장 프레임에러 (Framing Error) 감지기능내장 START 비트오류검출을위한노이즈필터와디지털 LPF(Low Pass Filter) 지원 송신완료, 송신데이터레지스터공백, 수신완료인터럽트제공 멀티 -프로세서통신모드지원 2 배속비동기통신모드지원 38
1.18 USART 통신인터페이스 ATmega128 의 USART 구조 클록발생기 송신기 수신기 UBRR( 보레이트레지스터 ) 보레이트발생기 동기클록로직 XCK 핀제어기 UDR( 송신버퍼 ) 송신시프트레지스터 패리티발생기 송신제어및 TXD 핀제어기 UDR( 수신버퍼 ) 수신시프트레지스터 패리티검사기 클록및데이터처리기 수신제어및 RXD 핀제어기 제어레지스터 UCSRA UCSRB UCSRC 39
1.18 USART 통신인터페이스 USART 의프레임 프레임이란? USART 통신에서단위바이트의데이터를전송하기위해구성되어지는신호들의집합 프레임을전송하지않는구간에서 USART 는대기상태를가짐 대기상태에서 RXD, TXD 는반드시 1(High) 이어야함 START ( 시작 ) 비트는반드시 0(Low) 이어야함 데이터비트는 5~9 비트를사용자가임의로설정할수있고, 전송시최하위비트 (LSB) 를먼저전송함 패리티비트는사용하지않는경우프레임의구성에서빠질수있음 STOP ( 정지 ) 비트는반드시 1(High) 이어야함 프레임의모든비트들은보레이트로설정된통신속도에따라동일한길이를가져야함. 40
1.18 USART 통신인터페이스 USART 의패리티비트 P even : 짝수패리티 DATA 비트와패리티비트를포함하여 1 의개수가짝수개가되는논리값 P odd : 홀수패리티 DATA 비트와패리티비트를포함하여 1 의개수가홀수개가되는논리값 짝수패리티와홀수패리티의공식 41
1.18 USART 통신인터페이스 USART 의클록 클록발생기의구조 Baud Rate 계산및 UBRR 레지스터값계산공식 42
1.18 USART 통신인터페이스 USART 의클록 데이터시트에서 Baud Rate 에맞는 UBRR 값찾기 43
1.18 USART 통신인터페이스 USART 의통신속도및프레임설정요약 USART 의통신속도설정 ( ) USART 의프레임설정 ( ) USART 의초기상태 ( ) 속도 초기값최고속통신 (UBRRn =0) 설명 MCU 속도 (F_CPU) 에따라보레이트는달라지며, UBRR 값이작을수록고속통신속도설정임. 데이터 8비트 데이터길이는 D7:0까 길이 (UCSZn2:0 = 011) 지 8 비트임 패리티설정정지비트 사용안함 (Disable) (UPMn1:0 = 00) 1비트 (USBSn = 0) 패리티비트를사용하지않음 정지비트는 1 비트임 44
1.18 USART 통신인터페이스 USART 의샘플링 USART 가대기상태에서 RXD 핀의신호가 0(Low) 로떨어지면, START 비트의시작 START 비트의샘플링에서 1 로판단되면노이즈로판단 통신속도보다 16 배 (2 배속모드에서는 8 배 ) 높은주파수로샘플링 비트의중심부에서 3 회샘플링하여, 2 회이상같은값을비트의값으로결정 일반모드에서는 8, 9, 10 회샘플링을사용 2 배속모드에서는 4, 5, 6 회샘플링을사용 START 비트검출 시작 DATA 비트검출 STOP 비트검출 STOP 비트는샘플링이후에 (A) ~ (C) 구간에서신호가 0으로떨어지면 START 비트신호로인지 45
1.18 USART 통신인터페이스 USART 의제어관련레지스터 UCSRnA(USART Control and Status Register A) bit 7 : RXCn -> 수신완료플래그 새로운프레임을수신버퍼에수신한상태 bit 6 : TXCn-> 송신완료플래그 송신시프트레지스터의데이터가 STOP 비트까지모두송신되고, 송신버퍼도비어있는상태 bit 5 : UDREn -> 송신버퍼공백플래그 송신버퍼가비어있는상태 bit 4 : FEn -> 프레임에러플래그 수신된프레임의 STOP 비트가 0 으로샘플링되어오류가발생한상태 bit 3 : DORn -> 데이터오버런에러플래그 수신버퍼에 2 개의수신데이터가들어와있는상태에서 3번째 START 비트가검출된상태 앞서수신된데이터를잃어버리게될수있음 bit 2 : UPEn -> 패리티에러플래그 짝수또는홀수패리티의설정에서수신된패리티비트에오류가있는상태 bit 1 : U2Xn -> 2 배속모드플래그 USART 의클록분주비를 16 에서 8 로낮추어전송속도를 2 배로높이는기능 bit 0 : MPCMn -> 멀티프로세서통신모드 USART 를 2 개이상의프로세서가통신할수있는멀티프로세서통신모드로설정 46
1.18 USART 통신인터페이스 USART 의제어관련레지스터 UCSRnB(USART Control and Status Register B) bit 7 : RXCIEn -> 수신완료인터럽트허용 bit 6 : TXCIEn -> 송신완료인터럽트허용 bit 5 : UDRIEn -> 송신버퍼공백인터럽트허용 bit 4 : RXENn -> 수신부활성화 RXENn = 0 이면, RXDn 핀은범용디지털입출력핀으로동작 RXENn = 1 이면, RXDn 핀은 USART 의 RXD 핀으로동작 bit 3 : TXENn -> 송신부활성화 TXENn = 0이면, TXDn 핀은범용디지털입출력핀으로동작 TXENn = 1 이면, TXDn 핀은 USART 의 TXD 핀으로동작 bit 2 : UCSZn2 -> 문자길이설정비트 2 문자 ( 데이터 ) 길이 ( 비트사이즈 ) 설정비트 (UCSZn[2:0] 중하나 ) bit 1 : RXB8n -> 수신버퍼의 8 번비트 9 비트데이터통신에서수신데이터의최상위 8 번비트가저장되는비트공간 UDRn 레지스터보다먼저읽어져야함 bit 0 : TXB8n -> 송신버퍼의 8 번비트 9 비트데이터통신에서송신데이터의최상위 8 번비트가저장되는비트공간 UDRn 레지스터보다먼저씌어져야함 UCSZn[2:0] [21 0] 문자길이 0 0 0 5비트 0 0 1 6비트 0 1 0 7비트 0 1 1 8비트 ( 기본값 ) 1 0 0-1 0 1-1 1 0-1 1 1 9비트 47
1.18 USART 통신인터페이스 USART 의제어관련레지스터 UCSRnC(USART Control and Status Register C) bit 6 : UMSELn -> 동기 / 비동기모드선택 UPMn[1:0] [ 1 0 ] UMSELn = 0 이면, 비동기모드 ( 기본값 ) UMSELn = 1 이면, 동기모드 bit 5 : UPMn1 -> 패리티비트모드선택 1 bit 4 : UPMn0 -> 패리티비트모드선택 0 패리티비트모드 0 0 Disable( 사용안함 ) 0 1-1 0 Even ( 짝수 ) 1 1 Odd ( 홀수 ) bit 3 : USBSn -> 정지 (STOP) 비트길이선택 USBSn = 0이면, 정지비트는 1 비트 ( 기본값 ) USBSn = 1이면, 정지비트는 2 비트 bit 2 : UCSZn1 -> 문자길이설정비트1 bit 1 : UCSZn0 -> 문자길이설정비트0 bit 0 : UCPOLn -> 동기모드에서클록극성선택 송신데이터의변화수신데이터샘플링 UCPOLn (TXDn 핀의출력 ) (RXDn 핀의입력 ) 0 XCKn의상승에지 XCKn의하강에지 UCSZn[2:0] [ 2 1 0 ] 문자길이 000 0 0 5 비트 0 0 1 6비트 0 1 0 7비트 0 1 1 8비트 ( 기본값 ) 1 0 0-1 0 1-1 1 0-1 1 1 9비트 1 XCKn 의하강에지 XCKn 의상승에지 48
1.18 USART 통신인터페이스 USART 의제어관련레지스터 UBRRnL and UBRRnH(USART Baud Rate Register) USART 의통신속도를설정한다 UBRRn[11:0] 는 UBRRnH 와 UBRRnL 레지스터로분리 UBRRnH UBRRnL bit 11-8 : UBRRn -> USART 보레이트 (Baud Rate) 레지스터상위 4 비트 bit 7-0 : UBRRn -> USART 보레이트 (Baud Rate) 레지스터하위 8 비트 49
1.18 USART 통신인터페이스 USART 의제어관련레지스터 UDRn(USART I/O Data Register) USART 의송신및수신데이터를읽거나쓸수있는버퍼 송수신버퍼는 UDRn 의동일한이름으로접근 UDRn의읽기동작접근에서수신버퍼 (RXBn[7:0]) 에접근 ex) ch = UDR0; // 수신버퍼에서값을읽고, ch 변수에저장 UDRn 의쓰기동작접근에서송신버퍼 (TXBn[7:0]) 에접근 ex) UDR0 = dat; // dat 변수값을읽어, 송신버퍼에서쓰기 송신버퍼는오직 UCSRnA.UDREn = 1 인상태에서만쓰기를할수있음. UDREn = 0인상태에서 UDRn에데이터를쓰면송신동작은무시됨 송신기가동작하게되면송신버퍼의데이터는송신시프트레지스터로로드됨 그리고 TXD 핀을통해직렬로전송됨 수신버퍼는 2- 레벨 FIFO 되어있음 FIFO는수신버퍼에접근할때마다변하게됨 따라서수신버퍼의내용은 SBI 또는 CBI 등의 Read-Modify-Write 명령으로사용되지말아야함 또한 SBIC, SBIS 등의비트테스트명령도 FIFO를변하게하기때문에주의해야함 50
1.18 USART 통신인터페이스 USART 의다중프로세서통신 1 개의마스터프로세서가여러개의슬레이브프로세서에게특정한주소를전송함으로써, 1 개의슬레이브만을지정하여데이터를전송하는동작모드 UCSRnA.MPCMn =1 로설정하면, 다중프로세서통신모드로동작 다중프로세서통신을위해송수신모두프레임을 9비트로설정해야함 마스터 = TXB[7:0] + TXB8 을송신 슬레이브 = RXB[7:0] + RXB8 을수신 9번째비트 (RXB8, TXB8) = 1 이면, 주소프레임 9번째비트 (RXB8, TXB8) = 0 이면, 데이터프레임 동작순서 모든슬레이브는 UCSRnA.MPCMn = 1 로설정하고, 마스터프로세서가주소프레임을송신하는것을대기 마스터프로세서는 TXB8 = 1 인주소프레임을송신 모든슬레이브프로세서는주소프레임을수신하면, 인터럽트를발생하여, 자신의주소프레임인지판별 지정된슬레이브프로세서는 UCSRnA.MPCMn = 0 으로설정하고, 데이터프레임을수신대기 지정되지않은슬레이브프로세서는 UCSRnA.MPCMn = 1 을그대로유지 마스터프로세서는 TXB8 = 0 인데이터프레임을송신 지정된슬레이브프로세서는 UCSRnA.MPCMn = 0 이므로, 모든데이터프레임수신가능 지정되지않은슬레이브프로세서는모든데이터프레임을무시함 지정된슬레이브프로세서는통신이전부완료되는시점에서 UCSRnA.MPCMn = 1 로설정하고대기 51
1.18 USART 통신인터페이스 UART 를이용한 RS232 통신 RS232 통신이란? 비동기직렬통신방식으로 PC 나주변기기간통신연결에많이사용하고있음 EIA(Electronic Industries Association) 에의해규격화되었으며, 정확히는 EIA-RS232C 규격임 DTE(Data Terminal Equipment : 데이터단말장치 ) 와 DCE(Data Communication Equipment : 데이터통신장치 ) 사이의인터페이스조건을결정하기위해고안된권고규격 DTE 는컴퓨터또는 I/O 기기등의제어장치를말함 DCE 는모뎀등의회선단말장치를말함 52
1.18 USART 통신인터페이스 UART 를이용한 RS232 통신 RS232C 신호및기능 핀번호 25 핀 9 핀 명 칭 신호방향 DTE-DCE 기호 1 보안용접지 (Frame Ground) - FG 2 3 송신데이터 (Transmitted Data) TXD 3 2 수신데이터 (Receive Data) RXD 4 7 송신요구 (Request to Send) nrts 5 8 송신허가 (Clear to Send) ncts 6 6 데이터 ( 통신기기 ) 세트준비 (Data Set Ready) ndsr 7 5 신호용접지 (Signal Ground) - SG(GND) 8 1 캐리어검출 (Data Carrier Detect) ndcd 20 4 데이터단말준비 (Data Terminal Ready) DTR 22 9 링알림 (Ring Indicator, 벨소리 ) nri 53
1.18 USART 통신인터페이스 UART 를이용한 RS232 통신 RS232C 널 - 모뎀 (Null-Modem) 통신 표준연결구조 가장심플하고 경제적인연결구조 전형적인 Null 모뎀구조궤환을이용한 AVR 자체통신테스트 궤환 (feedback) 구조자신의 2-3 연결 (RXD-TXD) 표준-핸드세이크 AVR의핸드세이크연결접속대응연결에주로이용 Full Function 모뎀의 4-6 연결 (DTR-DSR) Full Function 모뎀의 7-8 연결 (RTS-CTS) 핸드세이크방식의접속 (Full Function 접속 ) 54
1.18 USART 통신인터페이스 UART 를이용한 RS232 통신 AVR 과 MAX232 IC 의연결 MAX232 16 AVR TXD RXD 11 T1IN T1OUT 14 12 R1OUT R1IN 13 10 T2IN T2OUT 7 232_TXD 232_RXD 232_TXD 232_RXD 1 2 3 4 5 6 7 8 9 9 R2OUT R2IN 8 9 핀 D-SUB Female 커넥터연결 ( 연장선연결방식 ) ex) AVR- 연장선 -PC 15 232_RXD 232_TXD 1 2 3 4 5 6 7 8 9 D-Sub Male 9Pin( 수 ) D-Sub Female 9Pin( 암 ) - PC의 COM 포트형태 -핀이삽입될수있는 -바늘같은핀이구멍이나있음돌출된형태 9 핀 D-SUB Male 커넥터연결 (Null 모뎀연결방식 ) ex) AVR-Null 모뎀케이블 -PC 55
1.19 EEPROM 데이터메모리 EEPROM MCU 에내장된비휘발성메모리이며, 데이터메모리로사용됨 ATmega128 의경우내부에 4kByte(4096 Byte) 가내장 같은데이터메모리종류인 SRAM 과별개의영역에존재함 별도의상태및제어레지스터를통해제어할수있음 EEARH, EEARL (EEPROM 주소레지스터 ) EEDR (EEPROM 데이터레지스터 ) EECR (EEPROM 제어레지스터 ) EEPROM 의인터럽트 EEPROM 준비완료인터럽트 56
1.19 EEPROM 데이터메모리 EEPROM 제어관련레지스터 EEARH and EEARL(EEPROM Address Register) 0~4095 바이트의 EEPROM 데이터에접근할수있는 EEPROM 의주소를저장하는레지스터 EEDR (EEPROM Data Register) EEPROM 에데이터를쓰거나, 읽는동작에서 8 비트데이터가저장되는레지스터 57
1.19 EEPROM 데이터메모리 EEPROM 제어관련레지스터 EECR (EEPROM Control Register) Bit 3 ->EERIE : EEPROM 준비인터럽트인에이블 EEPROM 의준비인터럽트를개별적으로허용하는비트 EEPROM 준비인터럽트는 EECR 레지스터의 EEWE 비트가논리 0 일때요구된다. Bit 2->EEMWE : EEPROM 마스터쓰기인에이블 EEMWE 비트는 EEPROM 에기록가능한상태를지정하는비트 EEWE 비트를논리 1 로설정하여 EEPROM 에쓰기를할것인지결정하는비트 EEMWE = 1 일때, 4 사이클안에 EEWE = 1 로설정, EEAR 의주소에 EEDR 의데이터를쓰기함 EEMWE = 0 일때, EEWE = 1 로설정되어도아무런영향을받지않음 EEMWE = 1 로세트되면, 4 사이클이지난후에, 자동으로 EEMWE = 0 으로클리어 58
1.19 EEPROM 데이터메모리 EEPROM 제어관련레지스터 EECR (EEPROM Control Register) Bit 1 -> EEWE : EEPROM 쓰기인에이블 EEWE 비트는 EEPROM 에쓰기동작을허용하는스트로브신호 쓰기동작을위해서는반드시 EEMWE = 1 이어야함 쓰기동작순서» EEWE == 0 이될때까지대기» SPMCSR.SPMEN == 0 이될때까지대기 MCU 의플래시메모리에값을쓰는도중에는 EEPROM 에값을쓸수없기때문» EEAR 과 EEDR 에주소및데이터를쓴다 ( 선택사항 )» EEMWE = 1 로세트하고, 4 사이클안에 EEWE = 1 로세트함 보통은 EECR = (1 << EEMWE) (1 << EEME); 의문장으로동시에두비트를세트함 쓰기동작전에 SREG.I = 0 으로설정하여인터럽트를금지하고, 후에 SREG.I = 1 로인터럽트허용» 쓰기동작을하는동안 EEMWE 비트는 4 사이클후에 0 으로클리어되므로, 쓰기도중에인터럽트 가발생하면 EEPROM 쓰기동작은실패할수있기때문에, SREG.I = 0 으로하여인터럽트서브루 틴으로점프하지않도록하는것이바람직함 1MHz 의클록에서 1 바이트쓰기동작시간 = 약 8.5 [ms] 59
1.19 EEPROM 데이터메모리 EEPROM 제어관련레지스터 EECR (EEPROM Control Register) Bit 0 -> EERE : EEPROM 읽기인에이블 EERE 비트는 EEPROM 에읽기동작을허용하는스트로브신호 EEAR = 목적주소때, EERE = 1 이면, 읽기동작을시작 EEPROM 을읽는과정은한번의명령으로즉시데이터를읽음.» EEPROM 읽을때다음명령이실행되기전 4 사이클동안 CPU 는정지된다. 사용자는읽기동작을시작하기전에 EEWE 비트를폴링방식으로검사해야함» 쓰기동작중에는, EEPROM 의데이터읽기동작불가능 EEPROM 의주소 (EEAR 레지스터 ) 변경불가능 60
1.20 ATmega128의아날로그디지털변환 AD 변환개념 분해능이높을수록변환된디지털신호를정밀한아날로그신호로변환이가능해진다. 샘플링속도가높을수록변환된디지털신호를정밀한아날로그신호로변환이가능해진다. V V V 2 비트 3 2 1 0 V REF if) V REF = 5 [V] V UNIT = V REF / 2 2비트 = 5 / 4 V UNIT = 1.25 [V] 0 Sample 1 Sample 2 Sample 3 Sample 4 4 비트 t V REF 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 0 Sample 1 if) V REF = 5 [V] V UNIT = V REF / 2 4비트 = 5 / 16 V UNIT = 0.3125 [V] Sample 2 Sample 3 Sample 4 10 비트 t 1023 895 767 639 511 383 255 127 V REF V UNIT 0 Sample 1 if) V REF = 5 [V] V UNIT = V REF / 210 비트 = 5 / 1024 = 4.8828125 [mv] 5 [mv] Sample 2 Sample 3 Sample 4 t V V V 1023 V REF 1023 V REF 1023 V REF 895 895 895 767 767 767 639 511 10 비트 639 511 10 비트 639 511 383 383 383 255 255 255 127 0 Sample 1 Sample 2 Sample 3 Sample 4 t 127 0 S1 S2 S3 S4 S5 S6 S7 S8 t 127 0 S1 S3 S5 S7 S9 S11 S13 S15 S2 S4 S6 S8 S10 S12 S14 S16 t 61
1.20 ATmega128의아날로그디지털변환 ATmega128 의 ADC 특징 10 비트분해능 0.5 LSB 적분비선형성 (Integral Non-linearity) ±2 LSB 정확도 13 ~ 260 usec 변환시간 (50 khz ~ 200 khz) 15kSPS 의최대분해능 8 채널의멀티플렉스된단일입력 7 채널의차동입력 10 배또는 200 배의증폭률을가진 2 채널의차동입력 ADC 결과값의좌정렬 0 ~ AVCC 의 ADC 입력전압범위 선택가능한 2.56V 의 ADC 기준전압 지속 (Free running) 또는단일 (Single) 변환모드 ADC 변환완료인터럽트 ADC 잡음감소슬립모드지원 62
1.20 ATmega128의아날로그디지털변환 ATmega128 의 ADC 특징 축차비교형 (SAR) ADC Successive-Approximation ADC 10 비트분해능 AVCC, AGND 별도전원사용 AREF 외부기준전압단자 포트 F 를 AD 입력채널로사용 ADC0 ~ ADC7 축차비교형 ADC 의기본구성 10 비트 DAC 아날로그비교기 10 비트링카운터 레지스터 ADMUX : AD 멀티플렉서 ADSCR : AD 상태제어 ADCH : AD 변환상위바이트 ADCL : AD 변환하위바이트 63
1.20 ATmega128의아날로그디지털변환 ATmega128 의 ADC 특징 (D) 샘플 / 홀드및변환시간 조건 샘플 / 홀드시간 ( 사이클 ) AD 변환시간 ( 사이클 ) ADEN=1 설정이후에최초변환그이후의일반적인 AD 변환 ( 단극성입력 ) 그이후의일반적인 AD 변환 ( 차동입력 ) 13.5 25 1.5 13 1.5/2.5 13/14 (A) ADEN = 1 설정후최초의변환 (B) 그이후의일반적인변환 (C) 프리런닝모드의동작타이밍 64