티스토리 뷰
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의 기능을 확인해 봄으로써 객체 지향 프로그램으로 원하는 기능을 수행할 수 있음을 확인할 수 있었다.
'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 |
댓글