본문으로 건너뛰기

M04.02 · GPIO·UART·인터럽트·타이머

단위별 목표·권장 선수와 자료 준비 상태를 확인하고, 공개된 본문과 활동을 읽고 준비 상태를 확인할 수 있습니다.

전체 커리큘럼

학습 안내

본문을 읽고 장비 없는 기본 실습·세 확인 문제와 해설로 이해를 확인하세요.

예상 학습 시간: 미정. 이 페이지 방문이나 자료 열람으로 완료·숙달을 자동 부여하지 않습니다.

현재 경로·이전·다음 단위 확인 ↓

학습 목표

  • GPIO의 방향/래치·입력 읽기와 스위치 논리/전기적 조건을 구분한다.
  • 실제 주변장치 clock과 모드로 UART baud·직렬 전송량·타이머 주기/범위를 계산한다.
  • 이벤트 발생·pending 표시·ISR 서비스·호스트 메시지의 시각과 누락/과부하를 합성 사건에서 판정한다.

아래 설명·실습·문제로 각 학습 목표를 확인하세요.

권장 선수

M04.01의 타깃/레지스터·메모리/공유 접근이 선수다. 일반 코딩을 전제로 C/C++ 문법이나 레지스터 쓰기 코드를 가르치지 않는다. ATmega328P의 명시한 모드/clock과 합성 표를 분석하며 실제 배선/컴파일·펌웨어/퓨즈/핀 쓰기·장비 실증은 하지 않는다. 이미 알고 있다면 직접 열어볼 수 있습니다.

설명 필수

세 목표에 대응하는 검수된 설명·예제를 읽습니다.

설정한 주기와 실제로 처리한 시각을 나눈다

센서를1ms마다 읽고 호스트에 보내려 한다고 하자. 타이머 설정이1ms라는 사실만으로 측정·ISR처리·직렬 전송/수신까지1ms에 끝난다고 볼 수는 없다. 핀 기능/실제 clock·전송량·처리 지연과 누락이 맞아야 한다. 이번 단위는 이 조건을 종이 계산과 사건표로 나눈다.

사례는 M04.01과 같은 ATmega328P다. Microchip 7810D-AVR-01/15의 GPIO·Timer0 CTC·USART normal mode를 참고한다. 제시한 설정을 실제 장치에 쓰는 절차가 아니다. 같은 이름의 주변장치라도 다른 MCU/모드에는 식/접근 규칙을 그대로 적용하지 않는다.

GPIO의 방향·래치·핀 읽기는 서로 다른 역할이다

GPIO는 범용 디지털 입출력이다. 이 사례에서 DDRx는 방향, PORTx는 출력 래치/입력 pull-up 관련 설정, PINx는 입력 핀 읽기와 관계한다. 아래는 정상 GPIO 기능·대체기능에 의한 override가 없다고 가정한 한 비트의 표다. PUD는 전역 pull-up 비활성화 비트다.

DDR/PORTPUD=0에서의 의미추가 확인
0/0입력·Hi-Z(높은 임피던스)외부 구동/pull-up 등이 없으면 읽은 값으로 상태를 확정 못 함
0/1입력·내부 pull-up출력 high로 구동한 것과 다름
1/0출력 low부하/핀 정격·외부 회로 별도
1/1출력 high부하/핀 정격·외부 회로 별도

PUD=1이면 입력0/1의 내부 pull-up도 비활성이다. PORT의1만 보고 항상 high출력이라고 해석하지 않는다. PIN읽기와 래치 값, GPIO/주변장치 대체 기능·디지털 입력 경로가 맞는지도 확인한다. PINx의 특수 쓰기 부작용은 M04.01처럼 따로 구분한다.

합성 스위치 계약을 '정상 입력/pull-up, 눌렀을 때 low'로 정했다면 PIN0은 눌림, PIN1은 해제다. 이를 active-low라고 부른다. 숫자0을 곧바로 기능 꺼짐/오류라고 바꾸지 않는다. 접점 변화/잡음과 안정화, 전압/구동 조건은 추가 확인이며 이 표만으로 실제 핀/모터 동작을 승인하지 않는다. 전기적 명세는 M03.04와 연결한다.

UART의 한 바이트는 선로에서 여덟 비트만 차지하지 않는다

UART는 비동기 직렬 통신의 한 방식이다. 여기서는 이진 신호·8N1을 가정한다. 데이터8bit, parity없음(N), stop1bit이고 start1bit도 있어 데이터1B마다 선로10bit가 필요하다. 이번 이진 UART에서는 baud와 bit/s를 같은 숫자로 계산한다. 다른 변조 방식까지 일반화하지 않는다.

요청9600baud 기준으로 데이터 상한은9600/10=960B/s다. 프로토콜 헤더/검사 바이트까지 포함한 전체 메시지가24B라고 정하면 선로240bit, 이상 전송시간은240/9600=0.025s=25ms다. 처리/큐·간격/드라이버·호스트 지연은 이 숫자에 포함하지 않았다. 24B가 payload만이라면 추가 헤더도 세어야 한다.

따라서1kHz마다24B를 모두 보내려면24000B/s, 8N1의 이상 선로 요구는240000bit/s다.9600baud에서 단순히 버퍼를 늘려도 지속적인 평균 전송량 부족은 해결되지 않는다. 샘플링/보고 주기·집계/전송량과 허용 누락·overflow를 계약으로 정하고 원본/현재 시각을 보존한다. 비동기 큐에 넣고 반환한 시간도 실제 선로 전송 완료/호스트 수신과 다르다.

요청 baud와 실제 분주 결과를 비교한다

아래에서 f_clk는 USART/Timer0에 실제 공급되는 I/O clock이라고 정한다. 이 사례는16MHz이고 별도 clock 변경은 없다고 가정한다. normal 비동기 USART(U2X=0)의 분주 값 U=UBRR는 정수다. 이 모드의 식은 다음과 같다.

b=fclk16(U+1).b=\frac{f_{clk}}{16(U+1)}.

요청9600을 식에 역대입하면 U약103.1667이다. U=103을 선택하면 실제 b=16000000/(16×104)=9615.3846baud다. 요청 대비 오차는(실제−요청)/요청×100=+0.160256%다. 앞의24B는 이 이상 실제 baud에서24.96ms다.25ms는 요청baud기준 예산이며, 둘 다 실제 시스템의 전체 지연 측정값은 아니다.

이 오차 하나로 모든 상대 장치와 통신이 보장된다고 선언하지 않는다. 양 끝의 실제 clock/허용오차·프레임/모드·신호와 오류 상태를 확인한다. double-speed 등 다른 모드는 식이 다르다. 설정표의모드/U·실제clock·요청/계산baud와 관측 오류를 함께 남긴다.

타이머의 비교 이벤트와 출력 신호의 주기를 구분한다

Timer0를8비트 CTC(clear timer on compare match) 모드로 두고, 분주 N=64·TOP인 OCR=249라고 하자. 이 모형은0부터249까지250카운트마다 비교 이벤트가 발생한다. 이벤트 주파수는 다음과 같다.

fcmp=fclkN(OCR+1).f_{cmp}=\frac{f_{clk}}{N(OCR+1)}.

16MHz/(64×250)=1000Hz, 비교 이벤트 간격은1ms다. 비교 때마다 출력 핀을 토글하는 기능까지 별도로 선택했다면 high/low한 주기에는 두 이벤트가 필요해 출력 주파수는500Hz다.1kHz 이벤트·500Hz 토글 파형·ISR의 실제 처리 횟수는 다른 숫자다. PWM/ADC는 다음 M04.03에서 다룬다.

같은8비트/분주64로10ms를 원하면 필요한OCR는2499로0~255범위를 벗어난다. 잘린 값을 쓰고10ms라고 보고하지 않는다. 다른 타이머/분주나 소프트웨어 분할을 검토하되 해당 모드·해상도/범위·누락 조건을 다시 확인한다. 여기서는 실제 설정을 변경하지 않는다.

실제 I/O clock이8MHz인데 설정 계산만16MHz로 했다고 바꿔 보자. 같은 U=103의 UART는4807.6923baud, 같은N/OCR의 타이머는500Hz·2ms가 된다. 소프트웨어의 F_CPU 같은 선언/메타데이터를16MHz로 적었다고 실제 발진원/퓨즈/분주가 바뀌는 것은 아니다. clock의 출처/구성과 실제 값을 확인한다.

인터럽트 이벤트는 항상 무한한 대기열에 쌓이지 않는다

인터럽트는 장치 사건을 처리 경로에 알리는 방식이고, ISR은 해당 처리 경로다. AVR-LibC Interrupts는 기본 ISR 동작과 중첩/공유 접근의 조건을 설명한다. 이 단위는 기본 비중첩을 가정하며, 모든 장치의 우선순위/중첩·이벤트 저장 방식이 같다고 가정하지 않는다.

다음은 단일 pending bit로 사건 유무만 기억하는 합성 모형이다. 타이머는 계속 움직이고 인터럽트 서비스만900~2400µs동안막혔다. 대기 중 별도 카운터/큐나 중간 clear는 없다. 허용되는 순간에는 처리/clear가 즉시 끝나며 다른 지연도 없다고 정한다.

시각이벤트/서비스pending과 관찰
1000µs비교 이벤트1pending=1, 아직 서비스 못 함
2000µs비교 이벤트2이미1인비트에사건개수2가쌓이지않음
2400µs서비스허용·ISR1/clear한번처리, 첫이벤트부터1400µs지연
3000µs비교 이벤트3·ISR2/clear즉시한번처리

이벤트는3회지만 ISR은2회다. ISR에서 무조건 '1ms 지났다'고 세면 이 구간의 실제3ms를2ms로 세는 결과가 될 수 있다. 이 표는 가정한 사건/서비스 모형의 계산이며 실제 장치의 측정/정확한 지연 보장은 아니다. pending bit·큐/카운터·clear 규칙과 이미 놓친 사건을 복원할 근거를 확인해야 한다.

ISR은 필요한 관측/상태와 오류를 짧게 남기고, 오래 걸리는 처리/직렬 완료 대기는 적절한 실행 경로로 나누는 설계를 검토한다. 분리했다고 처리량/원자성 문제가 저절로 해결되지는 않는다. M04.01의 공유 자료/메모리 예산, 서비스 지연·overflow/누락을 같이 평가한다. 실제 pin/타이머/ISR코드를 실행한 것은 아니다.

호스트 메시지에는 측정·처리·전송을 구분해 남긴다

GPIO 설정/입력 의미, 실제 clock/모드·분주, 요청/계산 주기와 전송량, 사건/서비스·원본 stamp와 수신/처리 stamp·누락/오류를 각각 기록한다. '주기 설정 성공', 'ISR 호출', '바이트 전송 완료', '유효한 센서 메시지 수신'은 서로 다른 근거다.

기존 4.4 센서 시간 정합의 네 시각과 연결한다. 장비 없는 기본 완료는 표/식의 판정과 가정·실제 미확인 범위를 설명하는 상태다. 실제 통신/주기 성능이나 물리 동작은 별도 검증이다.

학습 범위와 한계

기본 설명·예제가 준비되었습니다. 기존 보충 자료의 범위와 구별하세요.

실습 필수

장비 없는 실습을 수행하고 관찰·계산 근거를 해설과 비교합니다.

정상 GPIO/pull-up·normal USART/8N1·Timer0 CTC와 위 합성 사건을 종이나 메모로 분석한다. 장비·배선·컴파일러/전송은 필요하지 않다.

  1. DDR/PORT의 네 조합과 PUD 변형·active-low 입력의 의미를 적는다. 설정/래치/핀 읽기·전기 명세를 구분한다.
  2. 요청/실제 baud·오차,24B 전송시간·1kHz 전송량을 계산하고 큐/버퍼만 늘리는 대응의 한계를 설명한다.
  3. CTC 비교주기·토글 출력·10ms의 범위 초과, 실제 clock8MHz 변형의 UART/타이머를 계산한다.
  4. 세 이벤트/두 ISR의 순서·지연과 누락을 추적하고, 호스트 메시지에 남길 원본/서비스/수신 시각·오류·미확인을 적는다.

막히면 단위부터 Hz/bit/s/B/s/ms/µs로 분리한다. 타이머 카운트는0부터 TOP를 포함하고, 선로 프레임은 start/stop까지 센다. 사건 발생표와 ISR 서비스표도 별도로 쓴다.

0 / 8,000자 · 확인하면 이 브라우저에 저장

답안을 작성하고 확인하기를 한 번 선택하면 해설·판정 기준을 열어볼 수 있습니다.

학습 범위와 한계

기본 실습은 장비 없이 수행합니다. 실제 장비·GPU 실증을 완료했다는 뜻은 아닙니다.

평가·해설 필수

목표별 세 서술문항에 답하고 해설·판정 기준으로 자기검토합니다.

확인 문제 Q1

DDR0/PORT1이면 항상 high 출력인가? PUD0/1과 유효한 active-low 스위치 입력0을 구분하고, 확인이 남은 조건을 설명하라.

0 / 8,000자 · 확인하면 이 브라우저에 저장

답안을 작성하고 확인하기를 한 번 선택하면 해설·판정 기준을 열어볼 수 있습니다.

확인 문제 Q2

normal USART U103·Timer0 CTC N64/OCR249를 설정했고 계산표는16MHz인데 실제 I/O clock이8MHz다. UART baud·타이머 비교주기와 토글 출력 주파수는 무엇인가? 선언값만 고치면 실제 clock도 바뀌는가?

0 / 8,000자 · 확인하면 이 브라우저에 저장

답안을 작성하고 확인하기를 한 번 선택하면 해설·판정 기준을 열어볼 수 있습니다.

확인 문제 Q3

1ms 비교 설정을 했으므로24B 메시지를9600baud/8N1로 매번 보낼 수 있고, ISR 호출 횟수가 모든 사건 개수라고 한다. 선로 전송량과 단일 pending 사건표로 반박하고 필요한 기록을 적어라.

0 / 8,000자 · 확인하면 이 브라우저에 저장

답안을 작성하고 확인하기를 한 번 선택하면 해설·판정 기준을 열어볼 수 있습니다.

학습 범위와 한계

서술답안과 해설이 준비되었습니다. 자기검토와 학습 완료는 숙달 인증과 별개입니다.

참고 자료

학습 확인

실습과 세 문항의 답안을 해설과 비교한 뒤, 이 단위의 학습 완료를 직접 기록할 수 있습니다. 자기검토·학습 완료는 자동 채점이나 숙달 인증과 별개입니다.

실습1개·확인 문제3개의 답안을 저장하고 각각 자기검토를 기록하세요.

학습 이동

학습 단계 순서 · 공통 과정 이후 전문화 선택

전체 목차로 돌아가기 →

신규 활동의 답안은 이 브라우저의 통합 학습 기록에 저장합니다. 기존 화면의 답안·진도는 원래 키를 유지합니다. AI 강사는 현재 단위의 준비 상태·부족한 범위와 연결된 실제 자료를 참고합니다.