/*************************************************************************************************************
*文件名:dma.c
*功能:S3C6410DMA底層驅(qū)動函數(shù)
*作者:cp1300@139.com
*創(chuàng)建時間:2013年01月23日21:06
*最后修改時間:2013年01月23日
*詳細(xì):DMA控制器底層驅(qū)動
*************************************************************************************************************/
#include"system.h"
#include"DMA.h"
/*************************************************************************************************************************
*函數(shù):voidDMA_Init(void)
*功能:DMA初始化
*參數(shù):無
*返回:無
*依賴:底層
*作者:cp1300@139.com
*時間:20130131
*最后修改時間:20130131
*說明:無
*************************************************************************************************************************/
voidDMA_Init(void)
{
Set_GateClk(HCLK_DMA0,ENABLE);
Set_GateClk(HCLK_DMA1,ENABLE);
}
/*************************************************************************************************************************
*函數(shù):voidDMA_SetConfig(DMA_TypeDef*DMA,DMA_CHXch,DMA_Config*config)
*功能:DMA配置
*參數(shù):DMA:DMA模塊選擇,見DMA_TypeDef;ch:通道選擇,見DMA_CHX;config:配置,見DMA_Config
*返回:無
*依賴:底層
*作者:cp1300@139.com
*時間:20130131
*最后修改時間:20130131
*說明:用于設(shè)置DMA
*************************************************************************************************************************/
voidDMA_SetConfig(DMA_TypeDef*DMA,DMA_CHXch,DMA_Config*config)
{
DMA_Enable(DMA);//使能DMA模塊
(DMA->CH[ch]).SrcAddr=config->SrcAddr;//設(shè)置源地址
(DMA->CH[ch]).DestAddr=config->DestAddr;//設(shè)置目標(biāo)地址
(DMA->CH[ch]).Control0=0x80000000//1<<31//是否在當(dāng)前的傳輸完成后產(chǎn)生中斷
|((config->DestIncrement==ENABLE)?(1<<27):0)//目標(biāo)地址自增
|((config->SrcIncrement==ENABLE)?(1<<26):0)//源地址自增
|((config->DestPeripheral==DMA_MEM)?AHB_M1:AHB_M2)<<25//目標(biāo)AHB主機(jī)選擇
|((config->SrcPeripheral==DMA_MEM)?AHB_M1:AHB_M2)<<24//源AHB主機(jī)選擇
|(config->FlowWidth&0x7)<<21//目標(biāo)傳輸寬度
|(config->FlowWidth&0x7)<<18//源傳輸寬度
|(config->BurstSize&0x7)<<15//目標(biāo)傳輸脈沖大小,單次傳輸?shù)臄?shù)量
|(config->BurstSize&0x7)<<12;//源傳輸脈沖大小,單次傳輸?shù)臄?shù)量
(DMA->CH[ch]).Control1=config->DataSize&0x1ffffff;//傳輸數(shù)據(jù)數(shù)量
(DMA->CH[ch]).Config=(0<<18)//enableDMArequests
|(0<<16)//disableslockedtransfers
|(1<<15)//Teminalcountinterruptenable
| (0<<14) // Interrupt error mask