이번에는 간단하게 GPIO 설정 및 사용을 해봅니다.
모든 MCU 기본이라 쉽게 접근이 가능할 것으로 예상합니다.
먼저 블럭 다이어그램을 봅니다.
DIRn 을 통해서 입력, 출력 여부를 설정해줘야합니다.
PORTx.PINnCTRL의 INVEN Bit와 PULLUPEN Bit를 통해서 Invert 출력, 내부 풀업 기능을 설정 가능합니다.
void gpioInit(void)
{
// 출력
PORTA.DIRSET = PIN1_bm;
PORTB.DIRSET = PIN0_bm | PIN1_bm;
// 입력
PORTA.DIRCLR = PIN4_bm;
PORTA.PIN4CTRL |= PORT_PULLUPEN_bm;
PORTB.DIRCLR = PIN3_bm;
PORTB.PIN3CTRL |= PORT_PULLUPEN_bm;
}
일단 저는 입력 PA4, PB3, 그리고 내부풀업을 사용하고
출력은 PA1, PB0, PB1을 설정하였습니다.
while (1)
{
PORTA.OUTTGL = PIN1_bm;
PORTB.OUTSET = PIN0_bm;
_delay_ms(100);
PORTB.OUTCLR = PIN0_bm;
_delay_ms(100);
}
PORTA.1번핀에 연결된 LED는 200ms로 ON/OFF가 반복될 것이고
PORTB.0번핀에 연결된 LED는 100ms로 ON/OFF가 반복됩니다.
입력은
while (1)
{
if(!(PORTB.IN & PIN3_bm))
{
PORTB.OUTSET = PIN0_bm;
}
else
{
PORTB.OUTCLR = PIN0_bm;
}
}
이렇게 작성하면 버튼 상태에 따라 ON / OFF가 됩니다.
반응형
'b. 임베디드 > AVR' 카테고리의 다른 글
[ATtiny1616] Watchdog 사용하기 (0) | 2022.05.04 |
---|---|
[ATtiny1616] TCA 타이머 사용하기 (0) | 2022.05.03 |
[ATtiny1616] ADC 함수 만들기 (0) | 2022.05.02 |
[ATtiny1616] TCB를 이용한 millis()함수 만들기 (0) | 2022.04.30 |
[ATtiny1616] 메인 Clock 설정 (0) | 2022.04.27 |
[AVR128DA48] 타이머 TCB0 예제 (0) | 2022.04.06 |
[AVR128DA48] TWI (I2C) 동작 (PCA9685) (0) | 2022.04.05 |
[AVR128DA] Bootloader (0) | 2021.12.01 |