17
뻔뻔한 AVR 프로그래밍 The 5 th Lecture 유명환 ( [email protected])

뻔뻔한AVR 프로그래밍 - 뻔한_AVR_야간... · PDF fileINDEX 인터럽트(Interrupt) 총정리 AT 128 외부 인터럽트 제어 분석 1 2 ATmega128 외부인터럽트제어분석

  • Upload
    dinhdat

  • View
    249

  • Download
    8

Embed Size (px)

Citation preview

Page 1: 뻔뻔한AVR 프로그래밍 - 뻔한_AVR_야간... · PDF fileINDEX 인터럽트(Interrupt) 총정리 AT 128 외부 인터럽트 제어 분석 1 2 ATmega128 외부인터럽트제어분석

뻔뻔한 AVR 프로그래밍뻔뻔한 프로그래밍The 5th Lecture

유 명 환 ( [email protected])

Page 2: 뻔뻔한AVR 프로그래밍 - 뻔한_AVR_야간... · PDF fileINDEX 인터럽트(Interrupt) 총정리 AT 128 외부 인터럽트 제어 분석 1 2 ATmega128 외부인터럽트제어분석

INDEX인터럽트(Interrupt) 총 정리

AT 128 외부 인터럽트 제어 분석

1

2 ATmega128 외부 인터럽트 제어 분석

ATmega128 외부 인터럽트 관련 레지스터

2

3 ATmega128 외부 인터럽트 관련 레지스터

뻔뻔한 노하우 : AVR을 위한 C 소스 코드 작성 法

3

4 뻔뻔한 노하우 : AVR을 위한 C 소스 코드 작성 法

ATmega128 외부 인터럽트 실습 : 적외선 광 센서

4

5 g

Page 3: 뻔뻔한AVR 프로그래밍 - 뻔한_AVR_야간... · PDF fileINDEX 인터럽트(Interrupt) 총정리 AT 128 외부 인터럽트 제어 분석 1 2 ATmega128 외부인터럽트제어분석

인터럽트(I t t) 총 정리1 인터럽트(Interrupt) 총 정리1

소프트웨어(S/W) 인터럽트

소프트웨어 요청에 의해 발생되는 인터럽트

인터럽트

웨어 청에 의해 발생되는 인터럽

프로세서(CPU) 내부에서 발생

예) 타이머/카운터

하드웨어(H/W) 인터럽트

하드웨어(주변 디바이스) 요청에 의해 발생되는 인터럽트하드웨어(주변 디바이스) 요청에 의해 발생되는 인터럽트

프로세서(CPU) 외부에서 발생

예) 네트워크 카드

Page 4: 뻔뻔한AVR 프로그래밍 - 뻔한_AVR_야간... · PDF fileINDEX 인터럽트(Interrupt) 총정리 AT 128 외부 인터럽트 제어 분석 1 2 ATmega128 외부인터럽트제어분석

1 인터럽트(I t t) 총 정리1

Application

인터럽트(Interrupt) 총 정리

(System) LibraryUser Level System Call Hacking

System CallKernel Level

Software Interrupt

y

Virtual File System

Device File SystemGeneral File System Network File System

Buffer Cache TCP/IP Protocol Stack

Character Device DriverBlock Device Driver Network Device Driver

Device InterfaceDevice Interface

Block Device Character Device Network Device

Page 5: 뻔뻔한AVR 프로그래밍 - 뻔한_AVR_야간... · PDF fileINDEX 인터럽트(Interrupt) 총정리 AT 128 외부 인터럽트 제어 분석 1 2 ATmega128 외부인터럽트제어분석

1 인터럽트(I t t) 총 정리1 인터럽트(Interrupt) 총 정리

Software

int main()

Application

open()

(System) Library

sys_open()

Software Interrupt System Call

int main(){

………

open();

open(){

………

swi 0x900005;Interrupt Vector (5)

………

open();

………}

swi 0x900005;

………}

Interrupt Vector (2)

Interrupt Vector (3)

Interrupt Vector (4)

Interrupt Vector (1)

Interrupt Vector (2)

Interrupt Vector Tablefd = open();

sd = socket();

Interrupt Vector Table

User Level Kernel Level

Page 6: 뻔뻔한AVR 프로그래밍 - 뻔한_AVR_야간... · PDF fileINDEX 인터럽트(Interrupt) 총정리 AT 128 외부 인터럽트 제어 분석 1 2 ATmega128 외부인터럽트제어분석

1 인터럽트(I t t) 총 정리1 인터럽트(Interrupt) 총 정리

write() copy_from_user()

Device Driver Network Device (H/W)

copy_to_user()read()

인터럽트

wake_up()

ATmega128ATmega128 Sleep

Page 7: 뻔뻔한AVR 프로그래밍 - 뻔한_AVR_야간... · PDF fileINDEX 인터럽트(Interrupt) 총정리 AT 128 외부 인터럽트 제어 분석 1 2 ATmega128 외부인터럽트제어분석

1 인터럽트(I t t) 총 정리1 인터럽트(Interrupt) 총 정리

P lliP lli I t tI t t ?PollingPolling vs InterruptInterrupt ?

Interrupt on (H/W) BUSBUS ?

Page 8: 뻔뻔한AVR 프로그래밍 - 뻔한_AVR_야간... · PDF fileINDEX 인터럽트(Interrupt) 총정리 AT 128 외부 인터럽트 제어 분석 1 2 ATmega128 외부인터럽트제어분석

AT 128 외부 인터럽트 제어 분석2 ATmega128 외부 인터럽트 제어 분석2

ATmega128 Interrupt Vector Table AVR Assembly Code

Page 9: 뻔뻔한AVR 프로그래밍 - 뻔한_AVR_야간... · PDF fileINDEX 인터럽트(Interrupt) 총정리 AT 128 외부 인터럽트 제어 분석 1 2 ATmega128 외부인터럽트제어분석

2 AT 128 외부 인터럽트 제어 분석2 ATmega128 외부 인터럽트 제어 분석

Page 10: 뻔뻔한AVR 프로그래밍 - 뻔한_AVR_야간... · PDF fileINDEX 인터럽트(Interrupt) 총정리 AT 128 외부 인터럽트 제어 분석 1 2 ATmega128 외부인터럽트제어분석

AT 128 외부 인터럽트 관련 레지스터3 ATmega128 외부 인터럽트 관련 레지스터3

SREG: Status Register

Register 설명 실제 구현 예

SREG • AVR Core 내부에있는 Status Register는 ALU 연산수행후

갱신됨

sei();// <avr/interrupt.h>// #define sei()

– MCU의현상태및최근 ALU실행에대한결과를포함

• Bit7. I (Global Interrupt Enable): 프로세서 내 모든 인터럽트 활성화 비트 -> 허용!!!

설정 인터럽트허용

// #define sei() __asm__ __volatile__ ("sei" ::)

SREG |= 1<<SREG_I;•1로설정 인터럽트허용

Page 11: 뻔뻔한AVR 프로그래밍 - 뻔한_AVR_야간... · PDF fileINDEX 인터럽트(Interrupt) 총정리 AT 128 외부 인터럽트 제어 분석 1 2 ATmega128 외부인터럽트제어분석

3 AT 128 외부 인터럽트 관련 레지스터3 ATmega128 외부 인터럽트 관련 레지스터

EIMSK : External Interrupt Mask Register

Register 설명 실제 구현 예

Bit 7:0 •해당비트값을 “1”로설정(= Masking)하면

해당되는핀이외부인터럽트핀으로활성화됨

EIMSK = (1<<INT4);

해당되는핀이외부인터럽트핀으로활성화됨

Page 12: 뻔뻔한AVR 프로그래밍 - 뻔한_AVR_야간... · PDF fileINDEX 인터럽트(Interrupt) 총정리 AT 128 외부 인터럽트 제어 분석 1 2 ATmega128 외부인터럽트제어분석

3 AT 128 외부 인터럽트 관련 레지스터3 ATmega128 외부 인터럽트 관련 레지스터

EICRAEICRA : External Interrupt Control Register A

Register 설명 실제 구현 예

EICRA •트리거신호(Trigger Signal)를설정하기위한레지스터 EICRA = (0<<ISC21) | (0<<ISC20);

// INT2 핀에 Low 신호가 입력되는순간 인터럽트가 발생됨ISCn1 ISCn0 Trigger Signal

0 0 The low level of INTn

0 1 (reserved)

1 0 The falling edge of INTn

1 1 The rising edge of INTn

Page 13: 뻔뻔한AVR 프로그래밍 - 뻔한_AVR_야간... · PDF fileINDEX 인터럽트(Interrupt) 총정리 AT 128 외부 인터럽트 제어 분석 1 2 ATmega128 외부인터럽트제어분석

3 AT 128 외부 인터럽트 관련 레지스터3 ATmega128 외부 인터럽트 관련 레지스터

Signal

H Falling edge Rising edge

L

Low level

Page 14: 뻔뻔한AVR 프로그래밍 - 뻔한_AVR_야간... · PDF fileINDEX 인터럽트(Interrupt) 총정리 AT 128 외부 인터럽트 제어 분석 1 2 ATmega128 외부인터럽트제어분석

3 AT 128 외부 인터럽트 관련 레지스터3 ATmega128 외부 인터럽트 관련 레지스터

EICRBEICRB : External Interrupt Control Register B

Register 설명 실제 구현 예

EICRB •트리거신호(Trigger Signal)를설정하기위한레지스터 EICRB = (0<<ISC41) | (0<<ISC40);

// INT4 핀에 Low 신호가 입력되는순간 인터럽트가 발생됨ISCn1 ISCn0 Trigger Signal

0 0 The low level of INTn

0 1 (reserved)

1 0 The falling edge of INTn

1 1 The rising edge of INTn

Page 15: 뻔뻔한AVR 프로그래밍 - 뻔한_AVR_야간... · PDF fileINDEX 인터럽트(Interrupt) 총정리 AT 128 외부 인터럽트 제어 분석 1 2 ATmega128 외부인터럽트제어분석

3 AT 128 외부 인터럽트 관련 레지스터3 ATmega128 외부 인터럽트 관련 레지스터

Interrupt 발생

main program 실행 main program 실행

Interrupt 서비스루틴실행

Interrupt관련 Interrupt 스택에 해당 인터럽트 PC 값Interrupt 관련register bit 체크

Interrupt trigger 체크 main prog.

PC저장Interrupt vector로점프

서비스루틴 실행

로드메인복귀

SREG,EIMSK EICRA/BEIMSK EICRA/B

11

1

SREG

EIMSK

0 EICRB 0

Page 16: 뻔뻔한AVR 프로그래밍 - 뻔한_AVR_야간... · PDF fileINDEX 인터럽트(Interrupt) 총정리 AT 128 외부 인터럽트 제어 분석 1 2 ATmega128 외부인터럽트제어분석

뻔뻔한 노하우 : AVR을 위한 C 소스 코드 작성 法4 뻔뻔한 노하우 : AVR을 위한 C 소스 코드 작성 法4

int main()

{ ioport init(){

cli();

ioport_init();

ioport_init()

{

// 입출력 포트 초기화 & 설정

}

sei();

timer_init();

……… 초기화 & 설정 루틴 timer_init()

{

for(;;)

{

// 타이머/카운터 초기화 & 설정

}

}

서비스 루틴

}

}

Page 17: 뻔뻔한AVR 프로그래밍 - 뻔한_AVR_야간... · PDF fileINDEX 인터럽트(Interrupt) 총정리 AT 128 외부 인터럽트 제어 분석 1 2 ATmega128 외부인터럽트제어분석

AT 128 외부 인터럽트 실습 : 적외선 광 센서5 ATmega128 외부 인터럽트 실습 : 적외선 광 센서5