找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

帖子
查看: 3529|回復(fù): 0
收起左側(cè)

STM32學(xué)習(xí)歷程之DMA介紹

[復(fù)制鏈接]
ID:82083 發(fā)表于 2015-6-9 02:03 | 顯示全部樓層 |閱讀模式

DMA控制器介紹

DMA控制器提供7個(gè)數(shù)據(jù)通道的訪問(wèn)。由于外設(shè)實(shí)現(xiàn)了向存儲(chǔ)器的映射,因此數(shù)據(jù)對(duì)來(lái)自或發(fā)向外設(shè)的數(shù)據(jù)傳輸,也可以像內(nèi)存之間的數(shù)據(jù)傳輸一樣管理。

  • 1.DMA寄存器結(jié)構(gòu)

DMA寄存器結(jié)構(gòu),DMA_Channel_TypeDef和DMA_TypeDef在文件“stm32f10x_map.h”定義如下:

typedef struct

{

  vu32CCR;

  vu32CNDTR;

  vu32CPAR;

  vu32CMAR;

}DMA_Channel_TypeDef;

typedef struct

{

  vu32ISR;

  vu32IFCR;

} DMA_TypeDef;

DMA寄存器介紹:

ISR: DMA中斷狀態(tài)寄存器

IFCR: DMA中斷標(biāo)志位清除寄存器

CCRx: DMA通道x設(shè)置寄存器

CNDTRx:DMA通道x待傳輸數(shù)據(jù)數(shù)目寄存器

CPARx: DMA通道x外設(shè)地址寄存器

CMARx: DMA通道x內(nèi)存地址寄存器

  • 2.DMA庫(kù)函數(shù)

2.1 函數(shù)DMA_DeInit

函數(shù)原形 :voidDMA_DeInit(DMA_Channel_TypeDef* DMA_Channelx)

函數(shù)功能:將DMA的通道x寄存器重設(shè)為缺省值

函數(shù)參數(shù):DMA_Channelx中x取值為1-7來(lái)選擇通道

2.2 函數(shù)DMA_Init

函數(shù)原形 :voidDMA_Init(DMA_Channel_TypeDef* DMA_Channelx, DMA_InitTypeDef*DMA_InitStruct)

函數(shù)功能:根據(jù)DMA_InitStruct中指定的參數(shù)初始化DMA的通道x寄存器

函數(shù)參數(shù):DMA_Channelx中x取值為1-7來(lái)選擇通道

          DMA_InitStruct:指向結(jié)構(gòu)DMA_InitTypeDef的指針,包含了DMA通道x的配置信息

參數(shù)介紹:DMA_PeripheralBaseAddr  該參數(shù)用以定義DMA外設(shè)基地址

         DMA_MemoryBaseAddr   該參數(shù)用以定義DMA內(nèi)存基地址

         DMA_DIR  DMA_DIR規(guī)定了外設(shè)是作為數(shù)據(jù)傳輸?shù)哪康牡剡€是來(lái)源

          DMA_BufferSize  用以定義指定DMA通道的DMA緩存的大小,單位為數(shù)據(jù)單位

         DMA_PeripheralInc  用來(lái)設(shè)定外設(shè)地址寄存器遞增與否

         DMA_MemoryInc  用來(lái)設(shè)定內(nèi)存地址寄存器遞增與否

         DMA_PeripheralDataSize  設(shè)定了外設(shè)數(shù)據(jù)寬度

         DMA_MemoryDataSize  設(shè)定了外設(shè)數(shù)據(jù)寬度

         DMA_Mode   設(shè)置了工作模式

         DMA_Priority   設(shè)定DMA通道x的軟件優(yōu)先級(jí)

         DMA_M2M   使能DMA通道的內(nèi)存到內(nèi)存?zhèn)鬏?/p>

2.3 函數(shù)DMA_Cmd

函數(shù)原形 :voidDMA_Cmd(DMA_Channel_TypeDef* DMA_Channelx, FunctionalStateNewState)

函數(shù)功能 :使能或者失能指定的通道x

參數(shù)描述 :DMAChannelx:x可以是1,2…,或者7來(lái)選擇DMA通道x

          NewState:DMA通道x的新?tīng)顟B(tài)。這個(gè)參數(shù)可以�。篍NABLE或者DISABLE

2.4 函數(shù)DMA_ITConfig

函數(shù)原形 :voidDMA_ITConfig(DMA_Channel_TypeDef* DMA_Channelx, u32 DMA_IT,

                            FunctionalState NewState)

函數(shù)功能 :使能或者失能指定的通道x中斷

函數(shù)參數(shù) :DMAChannelx:x可以是1,2…,或者7來(lái)選擇DMA通道x

           DMA_IT:待使能或者失能的DMA中斷源,使用操作符“|”可以同時(shí)選中多個(gè)DMA中斷源

2.5 函數(shù)DMA_GetCurrDataCounte

函數(shù)原形 :u16DMA_GetCurrDataCounter(DMA_Channel_TypeDef* DMA_Channelx)

函數(shù)功能:返回當(dāng)前DMA通道x剩余的待傳輸數(shù)據(jù)數(shù)目

函數(shù)參數(shù) :DMAChannelx:x可以是1,2…,或者7來(lái)選擇DMA通道x

函數(shù)返回:當(dāng)前DMA通道x剩余的待傳輸數(shù)據(jù)數(shù)目

2.6 函數(shù)DMA_GetFlagStatus

函數(shù)原形 :FlagStatusDMA_GetFlagStatus(u32 DMA_FLAG)

函數(shù)功能:檢查指定的DMA通道x標(biāo)志位設(shè)置與否

函數(shù)參數(shù):DMA_FLAG:待檢查的DMA標(biāo)志位

函數(shù)返回:DMA_FLAG的新?tīng)顟B(tài)(SET或者RESET)

2.7 函數(shù)DMA_ClearFlag

函數(shù)原形 :voidDMA_ClearFlag(u32 DMA_FLAG)

函數(shù)功能 :清除DMA通道x待處理標(biāo)志位

函數(shù)參數(shù):DMA_FLAG:待清除的DMA標(biāo)志位,使用操作符“|”可以同時(shí)選中多個(gè)DMA標(biāo)志位

2.8 函數(shù)DMA_GetITStatus

函數(shù)原形 :ITStatusDMA_GetITStatus(u32 DMA_IT)

函數(shù)功能:檢查指定的DMA通道x中斷發(fā)生與否

函數(shù)參數(shù):DMA_IT:待檢查的DMA中斷源

函數(shù)返回:DMA_IT的新?tīng)顟B(tài)(SET或者RESET)

2.9 函數(shù)DMA_ClearITPendingBit

函數(shù)原形 :voidDMA_ClearITPendingBit(u32 DMA_IT)

函數(shù)功能 :清除DMA通道x中斷待處理標(biāo)志位

函數(shù)參數(shù):DMA_IT:待清除的DMA中斷待處理標(biāo)志位


回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表