티스토리 뷰

반응형

15. DMA Poll(Direct Memory Access)

           -이번장은 DMA 컨트롤러를 통한 데이터의 이동 방법에 대해 배운다

 

DMA원리         



좌측은 DMA 컨트롤러 없는 MCU의 데이터 복사 방법이다 데이터를 복사 완료할 때까지 MCU는 다른 작업을 하지 못하고 데이터를 복사하고 있는다.

우측은 DMA 컨트롤러가 있는 MCU의 데이터 복사 방법이다 MCUDMA contoller에게 데이터를 복사하라고 명령하면 DMA controller는 복사를 실행한다 그렇게 되면 MCU는 그 시간에 다른 작업을 할 수 있어 효율적이다.

 


DMA Controller 구조

DMA1 컨트롤러는 AHB 주변 포트는 DMA2 컨트롤러처럼 연결 되어 있지 않다 따라서 DMA2만 메모리-메모리 전송이 가능하다(RM0090 데이터 시트 참고)


DMA block diagram


한 스트림에 8개의 채널이 연결되어 있다(RM0090 데이터 시트 참고)


DMA diagram


CUBE MX 설정


위와 같이 설정한다

1. IncrementAddress: 데이터의 주소값을 증가시키며 데이터를 저장한다

2. Data Width: 복사할 데이터의 크기

3.Threshold FIFO: 아래 내용 참조



위의 데이터 시트는 링크AN4031 데이터시트를 참고하면 된다.

(찾는 방법은 링크 사이트에서 DMA를 검색하여 찾았다.)

3. Use Fifo: FIFO레지스터는 4Word(4*32byte)이다 4Word에 얼만큼 데이터가 차면 Destination으로 데이터를 내보내겠는가에 대한 설정이다. 현재 Half Full로 되어있는데 2Word만큼의 데이터가 차면 Destination으로 데이터를 보낸다.

2. Data width: 원본 데이터와 복사 저장소의 데이터 크기를 설정

 

Source Code

/* USER CODE BEGIN 0 */

uint8_t Buffer_Src[10000];

uint8_t Buffer_Dest[10000];

/* USER CODE END 0 */.

/* USER CODE BEGIN 2 */

    for(int i = 0; i<10000; i++){

    Buffer_Src[i] = 'a';

  }

 

  HAL_DMA_Start(&hdma_memtomem_dma2_stream0, (uint32_t) (Buffer_Src), (uint32_t) (Buffer_Dest), 100);//DMAC에게 데이터 100개 복사 명령

  while(HAL_DMA_PollForTransfer(&hdma_memtomem_dma2_stream0, HAL_DMA_FULL_TRANSFER, 100) != HAL_OK);//전송완료 Flag Register를 초기화 시킨다

  /* USER CODE END 2 */

실행 결과

15.DMA 폴더 동영상 참조

HAL_DMA_Start(); 데이터를 복사하라고 DMAC에게 명령

HAL_DMA_PollForTransfer(); 데이터 전송완료 Flag 초기화 이 Flag를 초기화 하지 않으면 데이터 복사를 다시 실행할 수 없다.

 

 

 



반응형

'STM32Fxx' 카테고리의 다른 글

STM32F429-TIM DMA  (0) 2018.11.08
STM32F429-DMA IT (Direct Memory Access Interrupt)  (0) 2018.11.08
STM32F429 - WWDG(Window Watch Dog)  (0) 2018.11.04
STM32F429-IWDG(Independent Watch Dog)  (0) 2018.10.24
STM32F429-SPI IT  (0) 2018.10.24
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함