임베디드 개발보드‎ > ‎mbed‎ > ‎

[ARM mbed 강좌] 13. 인터럽트 (스위치 및 LED 이용)

mbed (ARM Core + Online tools + Community)



 1. 인터럽트 (Interrupt)


: 인터럽트는 외부적인 인터럽트, 즉, 외부 디지털 입력핀으로 들어오는 신호의 엣지 등의 신호를 감지하여 실행중인 프로그램이 잠시 중단되고 미리 정해진 우선 순위 작업을 수행하는 것을 말한다. mbed의 인터럽트는 디지털 출력 핀에 해당되는 모든 핀에 적용되어 있다. 즉, mbed NXP NPC1768 은 총 26개의 핀으로 구성되어있다. 이는 uart, sci, can, spi, i2c, AnalogIn, AnalogOut, PwmOut 등의 특수 목적으로도 이용가능하지만 범용적으로 사용자가 자유롭게 디지털 출력핀으로 사용 가능하다. 









 2. 학습내용


: 이번 강좌에서는 mbed의 인터럽트 기능을 이용하기로 하자. 우선, 메인 루프는 led4번을 0.25초 간격으로 점멸시키는 것에외는 아무것도 없다. 이때 외부 인터럽트로서 버튼1을 누르게 되면, 잠시 메인 루프를 멈추고 외부 인터럽트가 지정한 상위 작업 led1을 키거나 끄는 테스트를 해보도록 하겠다.


 3. 회로도


▶ 아래의 부품을 이용하여 아래의 회로도 처럼 구성하기로 하자. 

  • 필요부품 : Switch 4개, 1K옴 저항 4개, LED 4개, 330옴 저항 4개, 여분의 배선, 브래드보드 
  • 회로도(오픈 소스 fritzing 프로그램 이용, 첨부파일 다운로드 가능)



 4. 배선도


▶ 회로의 배선도이다. 브래드보드에 아래와 같이 mbed 보드와 구성품을 배치, 배선 후 mbed를 PC에 연결하도록 하자.




 5. 프로그램 소스


▶ 메인 루프는 led4번을 0.25초 간격으로 점멸시키는 것에외는 아무것도 없다. 이때 외부 인터럽트로서 버튼1을 누르게 되면, 잠시 메인 루프를 멈추고 외부 인터럽트가 지정한 상위 작업 led1을 키거나 끄는 프로그램이다. 프로그램의 세부 설명은 소스에 기재되어 있는 설명을 참고하도록 하자. 

▶  mbed.org 컴파일러에서 직접 코딩하여, 컴파일하기를 추천한다. 아무리 간단한 코딩이라도 할 수록 늘고, 자신감도 붙기 마련이다.아래의 소스를 복사/붙여넣기도 가능하지만, 꼭 직접 코딩하고, 컴파일해보고, 결과를 눈으로 직접 보기를 강력 추천한다.

▶  mbed 소스작성, 컴파일, 업로드 방식은 "mbed 기초 강좌 : 03. mbed 소스작성, 컴파일, 업로드" 를 참고하도록 하자.


#include "mbed.h"
 
InterruptIn button(p17);    // Interrupt In Pin
DigitalOut  led(p21);       // Digital Out Pin
DigitalOut  flash(p24);     // Digital Out Pin
 
void flip() 
{
    led = !led;         // Interrput Action
}
 
int main() 
{
    button.mode(PullUp);// Pullup circuit
    button.rise(&flip); // Interrupt Set : Rising Edge
    
    while(1)            // Wait around, interrupts will interrupt this! 
    {           
        flash = !flash;
        wait(0.25);
    }
}


 6. 사용한 라이브러리





 7. 실행 결과


▶ 프로그램을 업로드하고, 리셋버튼을 누르면 메인루프에서 지정한 led4만 0.25초 간격으로 반복 점멸을 반복하다가, 버튼 1을 누르면 led1이 켜지(꺼지)는 작업을 수행한다. 


 참고자료


[1] mbedhttp://mbed.org
 
작성자: 표윤석(http://robotpilot.net/)
 
Comments