设为首页 加入收藏

TOP

S3C6410 裸机DMA(一)
2014-11-24 07:43:34 来源: 作者: 【 】 浏览:3
Tags:S3C6410 裸机 DMA

/*************************************************************************************************************
* 文件名: dma.c
* 功能: S3C6410 DMA底层驱动函数
* 作者: cp1300@139.com
* 创建时间: 2013年01月23日21:06
* 最后修改时间:2013年01月23日
* 详细: DMA控制器底层驱动
*************************************************************************************************************/
#include "system.h"
#include "DMA.h"



/*************************************************************************************************************************
*函数 : void DMA_Init(void)
*功能 : DMA初始化
*参数 : 无
*返回 : 无
*依赖 : 底层
*作者 : cp1300@139.com
*时间 : 20130131
*最后修改时间 : 20130131
*说明 : 无
*************************************************************************************************************************/
void DMA_Init(void)
{
Set_GateClk(HCLK_DMA0, ENABLE);
Set_GateClk(HCLK_DMA1, ENABLE);

}



/*************************************************************************************************************************
*函数 : void DMA_SetConfig(DMA_TypeDef *DMA, DMA_CHX ch, DMA_Config *config)
*功能 : DMA配置
*参数 : DMA:DMA模块选择,见DMA_TypeDef;ch:通道选择,见DMA_CHX;config:配置,见DMA_Config
*返回 : 无
*依赖 : 底层
*作者 : cp1300@139.com
*时间 : 20130131
*最后修改时间 : 20130131
*说明 : 用于设置DMA
*************************************************************************************************************************/
void DMA_SetConfig(DMA_TypeDef *DMA, DMA_CHX ch, 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)// enable DMA requests
| (0<<16) // disables locked transfers
| (1<<15) // Teminal count interrupt enable
| (0<<14) // Interrupt error mask //允许DMA请求
| (((config->SrcPeripheral == DMA_MEM) 0 : 1) << 12)
| (((config->DestPeripheral == DMA_MEM) 0 : 1) << 11) //传输模式,如内存到内存等
| (config->DestPeripheral & 0x0f) << 6 //目标外设
| (config->SrcPeripheral & 0x0f) << 1; //源外设
(DMA->CH[ch]).LLI = config->LLIArrd; //下一个传输LLI配置位置
//(DMA->CH[ch]).ConfigExp = 7;
}



/*************************************************************************************************************************
*函数 : void DMA_Enable(DMA_TypeDef *DMA)
*功能 : DMA使能
*参数 : DMA:DMA模块选择,见DMA_TypeDef;
*返回 : 无
*依赖 : 底层
*作者 : cp1300@139.com
*时间 : 20130131
*最后修改时间 : 20130131
*说明 : 无
*************************************************************************************************************************/
void DMA_Enable(DMA_TypeDef *DMA)
{
DMA->Config = 0x01; //AHB小端模式,启动DMA控制器
}



/*************************************************************************************************************************
*函数 : void DMA_Disable(DMA_TypeDef *DMA)
*功能 : DMA关闭
*参数 : DMA:DMA模块选择,见DMA_TypeDef;
*返回 : 无
*依赖 : 底层
*作者 : cp1300@139.com
*时间 : 20130131
*最后修改时间 : 20130131
*说明 : 无
************

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Spring集成Quartz定时任务框架介.. 下一篇S3C6410裸机定时器

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Asus Armoury Crate (2025-12-26 02:52:33)
·WindowsFX (LinuxFX) (2025-12-26 02:52:30)
·[ Linux运维学习 ] (2025-12-26 02:52:27)
·HTTPS 详解一:附带 (2025-12-26 02:20:37)
·TCP/IP协议到底在讲 (2025-12-26 02:20:34)