티스토리 뷰

Embedded OOP

GPIO In

Just4Fun 2020. 4. 15. 13:58

strm32f429 disovery 보드에는 파란 색의 푸쉬버튼 하나가 제공된다.

버튼 값은 GPIO port A의 0번 핀에서 읽어 볼 수 있다.  버튼을 누르게 되면 PA0의 값이 high가 된다.  이 값을 읽어 LED를 켜 보도록 하겠다.

class Gpio_in : public Gpio
{
public:
    Gpio_in(PORT port, uint32_t pin, PUPD pupd=PULL_DN)
        : Gpio{port, pin, MODE_IN, OPEN_DRAIN, HIGH, pupd}
    {}

    uint32_t Get(uint32_t pins);
    bool Get_pin(uint32_t pin);
};

inline bool Gpio_in::Get_pin(uint32_t pin) 
{ 
    if (pin & io_pin) 
        return !!(reg->idr & pin);

    return false;
}

Gpio_in class를 위와 같이 정의해 보았다.

uint32_t Gpio_in::Get(uint32_t pins)
{
    return ((io_pin & pins) == pins) ? reg->idr & pins : 0;
}

하나의 핀 값의 상태를 읽어 오려면 Get_pin()을 사용하고 여러개의 핀의 상태를 한번에 읽어 보려면 Get()을 사용하면 된다.

 

핀의 상태를 제대로 읽어 오는지 다음의 코드를 이용해서 확인해 보도록 하겠다.

#define PUSH_BUTTON PIN0

Gpio_in*     button;

static void setup()
{
    led = new Gpio_out{Gpio::PORTG, LED_GRN|LED_RED};
    button = new Gpio_in{Gpio::PORTA, PUSH_BUTTON};
}

static void loop()
{
    if (button->Get_pin(PUSH_BUTTON))
        led->Set(LED_GRN|LED_RED);
    else
        led->Reset(LED_GRN|LED_RED);
}

버튼을 누르면 LED가 켜지고 버튼을 놓으면 LED가 끄지게 된다.

 

이로써 기본적인 Gpio Out과 Gpio In의 기능을 확인해 봄으로써 객체 지향 프로그램으로 원하는 기능을 수행할 수 있음을 확인할 수 있었다.

 

embed-oop.zip
0.02MB

'Embedded OOP' 카테고리의 다른 글

I2C  (0) 2020.05.01
UART  (0) 2020.04.18
System Clock 설정  (0) 2020.04.15
GPIO Out  (0) 2020.04.15
객체지향 임베디드  (2) 2020.04.12
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함