임베디드 용어 사전
타이머·ADC

DMA

CPU를 거치지 않고 주변장치와 메모리 사이에 데이터를 옮기는 하드웨어. 대량 전송에서 CPU를 해방시킨다.

Direct Memory Access. CPU 가 바이트마다 개입하지 않게 만든다.

DMA 없이   인터럽트마다 CPU 가 1바이트 옮긴다 → 1Mbps 면 초당 10만 번 인터럽트
DMA 로     하드웨어가 알아서 옮기고, 끝나면 한 번만 알려 준다

어디에 쓰나

UART 대량 수신    로그·프로토콜 프레임
ADC 연속 변환     정해진 주기로 배열을 채운다
SPI 화면 전송     수 KB 프레임을 한 번에

쓸 때 반드시 챙길 것

  • 버퍼는 정적으로 잡고 수명이 전송보다 길어야 한다
  • 컴파일러가 모르는 사이에 메모리가 바뀌므로 버퍼를 volatile 두거나 접근 시점을 관리한다
  • 캐시가 있는 칩에서는 캐시 일관성 처리가 필요하다(Cortex-M4 대부분은 캐시가 없어 해당 없음)
  • DMA 가 접근 가능한 메모리 영역이 제한된 칩이 있다. 링커로 버퍼 위치를 고정한다

완료를 어떻게 아나

전송 완료 인터럽트를 쓰거나, 절반 완료 인터럽트로 더블 버퍼링을 구성한다.

함께 보면 좋은 용어

노트에서 맥락과 함께 보기 — ADC — 아날로그를 숫자로