STM32F4 의 DMA
F4시리즈의 어플리케이션 노트중, http://www.st.com/stonline/stappl/resourceSelector/app?page=fullResourceSelector&doctype=application_note&SeriesID=1577
1. DMA -> http://www.st.com/web/en/resource/technical/document/application_note/DM00046011.pdf
(응용노트라기 보다는 상세설명)
2. STM32CubeMX로 제공되는 DMA 라이브러리의 설명문 : http://www.st.com/st-web-ui/static/active/en/resource/technical/document/user_manual/DM00105879.pdf
1번에서 주요사항들.
DMA transfer properties
A DMA transfer is characterized by the following properties:
• DMA stream/channel
• Stream priority
• Source and destination addresses
• Transfer mode
• Transfer size (only when DMA is the flow controller)
• Source/destination address incrementing or non-incrementing
• Source and destination data width
• Transfer type
• FIFO mode
• Source/destination burst size
• Double-buffer mode
• Flow control
DMA Controller 기능블럭도.
from : http://www.st.com/web/en/resource/technical/document/application_note/DM00046011.pdf 의 페이지7.
DMA Stream/Channel
STM32F2/F4에는 2개의 DMA controller가 있고,동시에 동작가능하다.
각 DMA는 2개의 포트를 갖고있다.
각 DMA는 8개의 Stream 을 갖고있다.
각 Stream은 8개의 선택적 채널(request) 이 있다. 선택은 소프트웨어에서 설정가능하다.
1개의 스트림에서 한번에 1개의 채널(request)만 가능하다. 채널이란 해당 SPI TX 와 같은 식으로 페리페랄들의 포트들을 지정하는것에 해당한다. http://www.st.com/web/en/resource/technical/document/application_note/DM00046011.pdf 의 페이지8 Table.2
Stream priority
stream 의 우선권은 소프트웨어 설정가능하다. 만일 동일 priority 로 설정하면 번호작은 stream이 우선한다. 즉 stream0이 stream1보다 우선한다.
Source and destination address.
DMA전송은 source, destination address 로 정의된다. source와 destination은 AHB 혹은 APB 메모리 영역에 있어야 한다.
Transfer mode.
1. periphal -> memory
2. memory -> periphal
3. memory -> memory (DMA2에서만 가능, 이 모드에서는 circular, direct mode는 불가능)
Transfet size.
DMA 가 flow controller 일때만 정의된다.
source 에서 destination 으로 전송될 데이터 크기를 정의하는것.
Incrementing source/destination address.
DMA가 각 전송이후에 자동으로 source/destination address 증가되도록 설정가능하다.
Source and destination data width.
source와 destination 의 데이터 폭은 Byte(8bits), Half-word(16bits), Word(32bits) 3가지 중 하나 설정가능.
Transfer Type.
Circular mode : circular buffer 와 continuous data flow 를 핸들링 가능하다.
(DMA_SxNDTR 이 자동으로 이전 프로그램된 값으로 리로드됨.)
Normal mode : DMA_SxNDTR 이 한번 0이 되면 stream 은 disabled 됨.
DMA FIFO mode.
각각의 stream 은 4word(4x32bits) FIFO 갖고 있다.
FIFO threshold 는 소프트웨어에서 설정가능하다. 1/4(즉, 4바이트), 1/2(8바이트), 3/4(12바이트), Full(16바이트).
FIFO 사용하지 않는것을 Direct mode라고 한다.
FIFO 사용으로 설정되면, data packing/unpacking 과 Burst mode 를 사용가능하다.
packing/unpacking 설명도 -> http://www.st.com/web/en/resource/technical/document/application_note/DM00046011.pdf 페이지12 Figure.4
Source and destination burst size.
data unit 의 4x, 8x, 16x 를 한방에 전송하는것.
data unit은 byte, half-word, word 일 수 있다.
http://www.st.com/web/en/resource/technical/document/application_note/DM00046011.pdf 페이지 13 Figure.5
Double buffer mode.
2개의 메모리를 교번식 처리하는것.
Flow control.
data 전송과 중단을 책임지는 것.
floaw controller는 DMA일수도 있고 peripheral 일수도있다.
1. DMA를 flow controller로 한 경우.
DMA enable하기전에 전송크기를 DMA_SxNDTR 레지스터에 설정해야한다.
2. Peripheral 을 flow controller로 한경우.
전송되어야 할 데이터 수량을 모르는 경우이다. 이는 SD/MMC에서만 지원된다.
본 글이 포함된 상위 정리장소 : http://igotit.tistory.com/244 의 STM32
|
///467.
'임베디드.일렉트로닉스 > STM32' 카테고리의 다른 글
STM32CubeMX 프로젝트 저장방법.(일관성 있는 프로젝트 폴더 관리 목적) (0) | 2016.02.01 |
---|---|
STM32 DFU 모드에서 PC측 USB 장치드라이버. (0) | 2016.01.31 |
STM32 FreeRTOS 사용가능 프로젝트 생성방법. (0) | 2015.12.01 |
STM32L4 개발 보드 : NUCLEO-L476RG (0) | 2015.11.30 |
SW4STM32. System Workbench for STM32. 무료 IDE.설치법. (0) | 2015.11.30 |
댓글