제목: [Intel] 엣지 AI SW 아카데미
부제목: 13일차
일정: 2023.11.13(월)
수업 내용:
- C언어 프로그래밍
- Micro Processor 원리
- Atmel사의 8bit Micro-controller
- KUT0128 Evaluation Board 기능과 특징
- External Interrupt 제어
목표:
External Interrupt 제어
Mega128a.h에서 정의된 외부 Interrupt
External Interrupt 사용법 요약
• 사용하고자 하는 External Interrupt enable bit의 set 사용 레지스터 : EMISK
• Trigger 방식 설정(rising or falling or level trigger 중 선택) 사용 레지스터 : EICRA(INT0~INT3, EICRB(INT4~INT7)
• Global(전역) Interrupt enable I bit의 set 사용 레지스터 : SREG (최상위 비트) 가능하면 모든 초기 설정이 끝난 후 제일 마지막에 I bit의 set
• 인터럽트 함수 작성
(예제 4-1) External Interrupt 4에 의한 LED 점멸 실험 (falling edge)
• KUT-128_COM 보드의 SW/INT4이 눌려질 때마다 External Interrupt 4가 발생하여, LED가 순차적으로 점멸하도록 프로그램을 작성하라.
• 외부 인터럽트4의 입력 Trigger 는 falling edge 에서 발생하도록 한다.
//(예제 4-1) External Interrupt 4에 의한 LED 점멸 실험 (falling edge)
//• SW1/INT4이 눌려질 때마다 점멸
#include <mega128.h>
unsigned char led = 0xFE;
void main(void)
{
// 포트 초기화
DDRC = 0xFF; // 포트 C 출력 설정
DDRE = 0b00000010; // 포트 E 입력(PE1 출력)
PORTC = led; // 포트 C에 초기값 출력
EIMSK = 0b00010000; // 외부 인터럽트4 enable
EICRB = 0b00000010; // 외부 인터럽트4 falling edge
SREG = 0x80; // 전역 인터럽트 enable set
while(1);
}
// 외부 인터럽트4 서비스 루틴
interrupt [EXT_INT4] void external_int4(void)
{
SREG &= 0x7F; // All Interrupt disable
led = led << 1; // 1비트 쉬프트
led = led | 0b00000001; // LSB bit set
if(led == 0xFF) led = 0xFE;
PORTC = led; // 포트 출력
SREG |= 0x80; // All Interrupt enable
}
//(예제 4-2) External Interrupt 4에 의한 LED 점멸 실험 (rising edge)
//• SW1/INT4이 눌렸다 떼어지는 순간 점멸
#include <mega128.h>
unsigned char led = 0xFE;
void main(void)
{
// 포트 초기화
DDRC = 0xFF; // 포트 C 출력 설정
DDRE = 0b00000010; // 포트 E 입력(PE1 출력)
PORTC = led; // 포트 C에 초기값 출력
EIMSK = 0b00010000; // 외부 인터럽트4 enable
EICRB = 0b00000011; // 외부 인터럽트4 rising edge
SREG = 0x80; // 전역 인터럽트 enable set
while(1);
}
// 외부 인터럽트4 서비스 루틴
interrupt [EXT_INT4] void external_int4(void)
{
SREG &= 0x7F; // All Interrupt disable
led = led << 1; // 1비트 쉬프트
led = led | 0b00000001; // LSB bit set
if(led == 0xFF) led = 0xFE;
PORTC = led; // 포트 출력
SREG |= 0x80; // All Interrupt enable
}
//(예제 4-3) 외부 Interrupt 4에 의한 LED 전자 룰렛 실험[Level trigger : Low level]
//• SW/INT4이 눌려지고 있는 동안 점멸
#include <mega128.h>
#include <delay.h>
unsigned char led = 0xFE;
void main(void)
{
// 포트 초기화
DDRC = 0xFF; // 포트 C 출력 설정
DDRE = 0b00000010; // 포트 E 입력(PE1 출력)
PORTC = led; // 포트 C에 초기값 출력
EIMSK = 0b00010000; // 외부 인터럽트4 enable
EICRB = 0b00000000; // 외부 인터럽트4 level trigger
SREG = 0x80; // 전역 인터럽트 enable-bit set
while(1);
}
// 외부 인터럽트4 서비스 루틴
interrupt [EXT_INT4] void external_int4(void)
{
SREG &= 0x7F; // All Interrupt disable
led = led << 1; // 1비트 쉬프트
led = led | 0b00000001; // LSB bit set
if(led == 0xFF) led = 0xFE;
PORTC = led; // 포트 출력
delay_ms(500);
SREG |= 0x80; // All Interrupt enable
}
'[Intel] 엣지 AI SW 아카데미 > 펌웨어 프로그래밍 75hour' 카테고리의 다른 글
[Intel] 엣지 AI SW 아카데미 15일차 (부산상공회의소 인력개발원) (0) | 2023.11.30 |
---|---|
[Intel] 엣지 AI SW 아카데미 14일차 (부산상공회의소 인력개발원) (1) | 2023.11.30 |
[Intel] 엣지 AI SW 아카데미 12일차 (부산상공회의소 인력개발원) (0) | 2023.11.30 |
[Intel] 엣지 AI SW 아카데미 11일차 (부산상공회의소 인력개발원) (1) | 2023.11.30 |
[Intel] 엣지 AI SW 아카데미 10일차 (부산상공회의소 인력개발원) (0) | 2023.11.30 |