Direct Memory Access. CPU 가 바이트마다 개입하지 않게 만든다.
DMA 없이 인터럽트마다 CPU 가 1바이트 옮긴다 → 1Mbps 면 초당 10만 번 인터럽트
DMA 로 하드웨어가 알아서 옮기고, 끝나면 한 번만 알려 준다
어디에 쓰나
UART 대량 수신 로그·프로토콜 프레임
ADC 연속 변환 정해진 주기로 배열을 채운다
SPI 화면 전송 수 KB 프레임을 한 번에
쓸 때 반드시 챙길 것
- 버퍼는 정적으로 잡고 수명이 전송보다 길어야 한다
- 컴파일러가 모르는 사이에 메모리가 바뀌므로 버퍼를
volatile로 두거나 접근 시점을 관리한다 - 캐시가 있는 칩에서는 캐시 일관성 처리가 필요하다(Cortex-M4 대부분은 캐시가 없어 해당 없음)
- DMA 가 접근 가능한 메모리 영역이 제한된 칩이 있다. 링커로 버퍼 위치를 고정한다
완료를 어떻게 아나
전송 완료 인터럽트를 쓰거나, 절반 완료 인터럽트로 더블 버퍼링을 구성한다.