Download - SIOC 實驗 6 : DMA

Transcript
Page 1: SIOC  實驗 6 : DMA

WU-YANG Technology Co., Ltd.

SIOC 實驗 6 : DMA

黃彥翔 /陳慶瀚MIAT實驗室

Page 2: SIOC  實驗 6 : DMA

2

實驗目的 控制 DMA自動搬一記憶體或周邊之資料,並透過 VCP傳送到超級終端機顯示操作過程。

實作重點 DMA的控制

Polling Interrupt

Page 3: SIOC  實驗 6 : DMA

SIOC DMA 簡介

DMA(Direct Memory Access),無須 CPU可直接控制記憶體,透過 DMA,能使 CPU的效率大為提高。

最多有兩個 DMA控制器, DMA1 有 7 個通道,每個通道專門用來管理來自一個或多個外部的請求,還有一個仲裁器來協調各個 DMA請求的優先權。

3

Page 4: SIOC  實驗 6 : DMA

WU-YANG Technology Co., Ltd.

DMA Registers

Page 5: SIOC  實驗 6 : DMA

DMA Channel Mapping

5

Page 6: SIOC  實驗 6 : DMA

DMA Request Mapping

6

Page 7: SIOC  實驗 6 : DMA

DMA Interrupt Status Register

7

Page 8: SIOC  實驗 6 : DMA

DMA Interrupt Status Register Cont.,

8

Page 9: SIOC  實驗 6 : DMA

DMA Interrupt Flag Clear Register

9

Page 10: SIOC  實驗 6 : DMA

DMA Channel x Configuration Register

10

Page 11: SIOC  實驗 6 : DMA

DMA Channel x Configuration Register Cont.,

11

Page 12: SIOC  實驗 6 : DMA

DMA Channel x Configuration Register Cont.,

12

Page 13: SIOC  實驗 6 : DMA

DMA Channel x Number of Data Register

13

Page 14: SIOC  實驗 6 : DMA

DMA Channel x Peripheral Address Register

14

Page 15: SIOC  實驗 6 : DMA

DMA Channel x Memory Address Register

15

Page 16: SIOC  實驗 6 : DMA

DMA Register Mapping

16

Page 17: SIOC  實驗 6 : DMA

DMA Register Mapping Cont.,

17

Page 18: SIOC  實驗 6 : DMA

DMA Register Mapping Cont.,

18

Page 19: SIOC  實驗 6 : DMA

DMA Register Mapping Cont.,

19

Page 20: SIOC  實驗 6 : DMA

WU-YANG Technology Co., Ltd.

DMA Standard Driver Library

Page 21: SIOC  實驗 6 : DMA

DMA Standard Driver Library List

21

Page 22: SIOC  實驗 6 : DMA

DMA DeInit Function

22

Page 23: SIOC  實驗 6 : DMA

DMA Init Function

23

Page 24: SIOC  實驗 6 : DMA

DMA Init Function Cont.,

24

Page 25: SIOC  實驗 6 : DMA

DMA Init Function Cont.,

25

Page 26: SIOC  實驗 6 : DMA

DMA Init Function Cont.,

26

Page 27: SIOC  實驗 6 : DMA

DMA Init Function Cont.,

27

Page 28: SIOC  實驗 6 : DMA

DMA Init Function Cont.,

28

Page 29: SIOC  實驗 6 : DMA

DMA Init Function Cont.,

29

Page 30: SIOC  實驗 6 : DMA

DMA Command Function

30

Page 31: SIOC  實驗 6 : DMA

DMA Interrupt Function

31

Page 32: SIOC  實驗 6 : DMA

DMA Interrupt Function Cont.,

32

Page 33: SIOC  實驗 6 : DMA

DMA Get CurrDataCounter Function

33

Page 34: SIOC  實驗 6 : DMA

DMA Get Flag Status Function

34

Page 35: SIOC  實驗 6 : DMA

DMA Get Flag Status Function Cont.,

35

Page 36: SIOC  實驗 6 : DMA

DMA Get Flag Status Function Cont.,

36

Page 37: SIOC  實驗 6 : DMA

DMA Get Flag Status Function Cont.,

37

Page 38: SIOC  實驗 6 : DMA

DMA Get Flag Status Function Cont.,

38

Page 39: SIOC  實驗 6 : DMA

DMA Clear Flag Function

39

Page 40: SIOC  實驗 6 : DMA

DMA Get Interrupt Status Function

40

Page 41: SIOC  實驗 6 : DMA

DMA Get Interrupt Status Function Cont.,

41

Page 42: SIOC  實驗 6 : DMA

DMA Get Interrupt Status Function Cont.,

42

Page 43: SIOC  實驗 6 : DMA

DMA Get Interrupt Status Function Cont.,

43

Page 44: SIOC  實驗 6 : DMA

DMA Clear Interrupt Pending Bit Function

44

Page 45: SIOC  實驗 6 : DMA

實驗 1 – Polling DMA

Goal Use DMA to copy data from memory to memory

Principle Check the DMA flag

45

Page 46: SIOC  實驗 6 : DMA

Development Flow

46

Embedded Software Side Download Program to the Flash of the STM32

0

1

2

3

4

RCC Configure

NVIC Configure

DMA Configure

Check DMA Complete Flag

=1

=1

=1

=1

=1

Page 47: SIOC  實驗 6 : DMA

RCC Configure

47

/* RCC Configure *//* DMA1 clock enable */ RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);

Turn On DMA1 Clock

Page 48: SIOC  實驗 6 : DMA

DMA Configure

48

/* DMA Configure */void DMA_Configuration(void){ DMA_InitTypeDef DMA_InitStructure;

/* DMA1 channel6 configuration */ DMA_DeInit(DMA1_Channel6); DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)SRC_Const_Buffer; DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)DST_Buffer; DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; DMA_InitStructure.DMA_BufferSize = BufferSize; DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Enable; DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word; DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Word; DMA_InitStructure.DMA_Mode = DMA_Mode_Normal; DMA_InitStructure.DMA_Priority = DMA_Priority_High; DMA_InitStructure.DMA_M2M = DMA_M2M_Enable; DMA_Init(DMA1_Channel6, &DMA_InitStructure);}

Page 49: SIOC  實驗 6 : DMA

User Program

49

/* User Program */ while (DMA_GetFlagStatus(DMA1_FLAG_TC5) == RESET); DMA_ClearFlag(DMA1_FLAG_TC5); DMA_Configuration(); //DMA_Cmd(DMA1_Channel5, ENABLE);

Page 50: SIOC  實驗 6 : DMA

實驗 2 – Interrupt DMA

Goal Use DMA to copy data from memory to memory

Principle Use the DMA Interrupt

50

Page 51: SIOC  實驗 6 : DMA

Development Flow

51

Download Program to the Flash of the STM32F103C8

0

1

2

3

4

RCC Configure

NVIC Configure

DMA Configure

Check DMA Interrupt

=1

=1

=1

=1

=1

Page 52: SIOC  實驗 6 : DMA

Q & A