Step-by-Step

[Embedded] DMA 본문

임베디드/Embedded C

[Embedded] DMA

희주(KHJ) 2024. 9. 26. 16:09

DMA

Direct Memory Access - 직접 메모리 접근

CPU의 도움 없이 메모리와 외부 장치 간에 데이터를 직접 주고 받을 수 있게 해주는 기술

특정 하드웨어 하위 시스템이 CPU와 독립적으로 메인 시스템 메모리에 접근할 수 있게 해주는 컴퓨터 시스템 기능

 


보통 컴퓨터에서 데이터를 주고받을 때, CPU가 모든 과정을 제어

ex) 컴퓨터에서 연결된 하드디스크에서 데이터를 메모리로 옮기려면, CPU가 그 과정을 하나하나 지시함

→ CPU의 작업이 많이 늘어나서 느려질 수 있음

 

 

 

해당 부분에서 DMA는, 

  1. CPU 대신 데이터를 직접 메모리로 옮기는 기술 (외부메모리 접근, 내부 연산 동작 등 수행)
  2. CPU는 지시만 하고, 실제 데이터 전송은 DMA 컨트롤러가 처리
  3. CPU의 부담이 줄어들고, 전체 시스템 기능이 향상됨

단, CPU 관점에서 DMA도 하나의 장치이므로, DMA도 CPU의 제어로 동작하게 됩니다.

 

 

 

DMA의 동작

DMA로 메모리간 이동을 하려면 SOURCE → DMA DESTINATION 과정이 진행된다.

SOURCE DMA DESTINATION
soucre 시작 주소
한 번 전송할 크기 (UNIT)
이동 방식(Mem, Peri 간)
전송할 횟수
destination 시작 주소
한 번 전송할 크기 (UNIT)

 

 

단, 더 다양한 DMA 활용을 위해서는 다음 설정도 필요하다.

SOURCE DMA DESTINATION
주소모드 (증가/고정) Trigger Source
Circular Mode
채널 우선순위 (4레벨)
주소모드 (증가/고정)

 

 

 

DMA 주소모드

주소모드에는 증가(INC), 고정(FIX) 모드 두 가지가 있다.

 

보통 이론적으로, 데이터를 전송할 때, 메모리 주소를 생각하면,

둘 다 증가모드로 증가한다. 

 

 

하지만, SOURCE나 DESTINATION 전송을 위해 잠시 저장하는 공간이라면,

SOURCE 고정 모드

 

DESTINATION 고정 모드

메모리의 주소값이 변경되지 않는 고정 모드로 진행하게 된다.

 

 

 

 

DMA Trigger

DMA 전송을 시작하는 신호나 조건

데이터를 전송하기 위해 준비된 상태에서 "언제 데이터를 전송할지" 결정하는 트리거가 필요함

 

Trigger 주요 유형

  • 소프트웨어 트리거 (Software Trigger)
    • 소프트웨어에 직접적으로 DMA 전송을 시작하는 경우
    • CPU가 특정 명령을 실행해 DMA 전송을 시작하라고 지시하는 방식
    • ex) CPU가 특정 메모리 블록을 다른 위치로 이동하도록 DMA에게 명령할 때
  • 하드웨어 트리거 (Hardware Trigger)
    • 외부 장치에서 발생한 하드웨어 이벤트가 DMA 전송을 시작하도록 만드는 방식
    • ex) 장치에서 데이터 전송을 시작할 준비가 되었을 때, 해당 자잋가 신호를 보내 DMA 전송 시작
  • 타이머 트리거 (Tiimer Trigger)
    • 주기적으로 발생하는 타이머에 의해 DMA 전송 시작
    • 주기적인 데이터 전송이 필요한 경우 (센서 데이터 수집 등) 타이머가 트리거 역할을 할 수 있음

 

Trigger 역할

  • 효율적인 데이터 전송 : DMA 전송이 정확한 시점에 시작하여, 불필요한 대기를 줄이고 필요한 순간에만 사용한다.
  • CPU 부담 경감 : HW 트리거를 이용하여 CPU가 전송 타이밍을 관리하지 않고 데이터를 전송하여, CPU가 다른 작업에 집중가능하다.

 

 

 

 

'임베디드 > Embedded C' 카테고리의 다른 글

[Embedded] UART  (0) 2024.09.24
[C] 매크로 #define  (0) 2024.09.24
[Embedded] 구조체 멤버 메모리 할당 #Pragma  (0) 2024.09.06
Comments