?? dma.c
字號:
#include "dma.h"
//////////////////////////////////////////////////////////////////////////////////
//本程序只供學習使用,未經作者許可,不得用于其它任何用途
//Mini STM32開發板
//DMA 驅動代碼
//正點原子@ALIENTEK
//技術論壇:www.openedv.com
//修改日期:2010/6/7
//版本:V1.0
//版權所有,盜版必究。
//Copyright(C) 正點原子 2009-2019
//All rights reserved
//////////////////////////////////////////////////////////////////////////////////
u16 DMA1_MEM_LEN;//保存DMA每次數據傳送的長度
//DMA1的各通道配置
//這里的傳輸形式是固定的,這點要根據不同的情況來修改
//從存儲器->外設模式/8位數據寬度/存儲器增量模式
//DMA_CHx:DMA通道CHx
//cpar:外設地址
//cmar:存儲器地址
//cndtr:數據傳輸量
void MYDMA_Config(DMA_Channel_TypeDef*DMA_CHx,u32 cpar,u32 cmar,u16 cndtr)
{
u32 DR_Base; //做緩沖用,不知道為什么.非要不可
RCC->AHBENR|=1<<0;//開啟DMA1時鐘
DR_Base=cpar;
DMA_CHx->CPAR=DR_Base; //DMA1 外設地址
DMA_CHx->CMAR=(u32)cmar; //DMA1,存儲器地址
DMA1_MEM_LEN=cndtr; //保存DMA傳輸數據量
DMA_CHx->CNDTR=cndtr; //DMA1,傳輸數據量
DMA_CHx->CCR=0X00000000;//復位
DMA_CHx->CCR|=1<<4; //從存儲器讀
DMA_CHx->CCR|=0<<5; //普通模式
DMA_CHx->CCR|=0<<6; //外設地址非增量模式
DMA_CHx->CCR|=1<<7; //存儲器增量模式
DMA_CHx->CCR|=0<<8; //外設數據寬度為8位
DMA_CHx->CCR|=0<<10; //存儲器數據寬度8位
DMA_CHx->CCR|=1<<12; //中等優先級
DMA_CHx->CCR|=0<<14; //非存儲器到存儲器模式
}
//開啟一次DMA傳輸
void MYDMA_Enable(DMA_Channel_TypeDef*DMA_CHx)
{
DMA_CHx->CCR&=~(1<<0); //關閉DMA傳輸
DMA_CHx->CNDTR=DMA1_MEM_LEN; //DMA1,傳輸數據量
DMA_CHx->CCR|=1<<0; //開啟DMA傳輸
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -