S3C6410 裸机DMA
扫描二维码
随时随地手机看文章
/*************************************************************************************************************
*文件名:dma.c
*功能:S3C6410DMA底层驱动函数
*作者:cp1300@139.com
*创建时间:2013年01月23日21:06
*最后修改时间:2013年01月23日
*详细:DMA控制器底层驱动
*************************************************************************************************************/
#include"system.h"
#include"DMA.h"
/*************************************************************************************************************************
*函数:voidDMA_Init(void)
*功能:DMA初始化
*参数:无
*返回:无
*依赖:底层
*作者:cp1300@139.com
*时间:20130131
*最后修改时间:20130131
*说明:无
*************************************************************************************************************************/
voidDMA_Init(void)
{
Set_GateClk(HCLK_DMA0,ENABLE);
Set_GateClk(HCLK_DMA1,ENABLE);
}
/*************************************************************************************************************************
*函数:voidDMA_SetConfig(DMA_TypeDef*DMA,DMA_CHXch,DMA_Config*config)
*功能:DMA配置
*参数:DMA:DMA模块选择,见DMA_TypeDef;ch:通道选择,见DMA_CHX;config:配置,见DMA_Config
*返回:无
*依赖:底层
*作者:cp1300@139.com
*时间:20130131
*最后修改时间:20130131
*说明:用于设置DMA
*************************************************************************************************************************/
voidDMA_SetConfig(DMA_TypeDef*DMA,DMA_CHXch,DMA_Config*config)
{
DMA_Enable(DMA);//使能DMA模块
(DMA->CH[ch]).SrcAddr=config->SrcAddr;//设置源地址
(DMA->CH[ch]).DestAddr=config->DestAddr;//设置目标地址
(DMA->CH[ch]).Control0=0x80000000//1<<31//是否在当前的传输完成后产生中断
|((config->DestIncrement==ENABLE)?(1<<27):0)//目标地址自增
|((config->SrcIncrement==ENABLE)?(1<<26):0)//源地址自增
|((config->DestPeripheral==DMA_MEM)?AHB_M1:AHB_M2)<<25//目标AHB主机选择
|((config->SrcPeripheral==DMA_MEM)?AHB_M1:AHB_M2)<<24//源AHB主机选择
|(config->FlowWidth&0x7)<<21//目标传输宽度
|(config->FlowWidth&0x7)<<18//源传输宽度
|(config->BurstSize&0x7)<<15//目标传输脉冲大小,单次传输的数量
|(config->BurstSize&0x7)<<12;//源传输脉冲大小,单次传输的数量
(DMA->CH[ch]).Control1=config->DataSize&0x1ffffff;//传输数据数量
(DMA->CH[ch]).Config=(0<<18)//enableDMArequests
|(0<<16)//disableslockedtransfers
|(1<<15)//Teminalcountinterruptenable
| (0<<14) // Interrupt error mask