설정한 주기와 실제로 처리한 시각을 나눈다
센서를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/PORT | PUD=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는 정수다. 이 모드의 식은 다음과 같다.
요청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카운트마다 비교 이벤트가 발생한다. 이벤트 주파수는 다음과 같다.
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 | 비교 이벤트1 | pending=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 센서 시간 정합의 네 시각과 연결한다. 장비 없는 기본 완료는 표/식의 판정과 가정·실제 미확인 범위를 설명하는 상태다. 실제 통신/주기 성능이나 물리 동작은 별도 검증이다.