OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5876|回复: 5

DMA缓冲问题

[复制链接]

1

主题

4

帖子

0

精华

新手入门

积分
28
金钱
28
注册时间
2012-7-28
在线时间
0 小时
发表于 2013-3-16 20:05:36 | 显示全部楼层 |阅读模式

void MYDMA_Config(DMA_Channel_TypeDef* DMA_CHx,u32 cpar,u32 cmar,u16 cndtr)
{
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); //使能DMA传输
 __nop();                    //等待 DMA1 时钟稳定,DMA开启需要时间稳定
    __nop();                    //经测试最少 2 个 nop
    __nop();

 
    DMA_DeInit(DMA_CHx);   //将DMA的通道1寄存器重设为缺省值
 DMA1_MEM_LEN=cndtr;
 DMA_InitStructure.DMA_PeripheralBaseAddr = cpar;  //DMA外设ADC基地址
 DMA_InitStructure.DMA_MemoryBaseAddr = cmar;  //DMA内存基地址
 DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;  //外设作为数据传输的目的地
 DMA_InitStructure.DMA_BufferSize = cndtr;  //DMA通道的DMA缓存的大小
 DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;  //外设地址寄存器不变
 DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;  //内存地址寄存器递增
 DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;  //数据宽度为8位
 DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; //数据宽度为8位
 DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;  //工作在正常缓存模式
 DMA_InitStructure.DMA_Priority = DMA_Priority_Medium; //DMA通道 x拥有中优先级
 DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;  //DMA通道x没有设置为内存到内存传输
 DMA_Init(DMA_CHx, &DMA_InitStructure);  //根据DMA_InitStruct中指定的参数初始化DMA的通道USART1_Tx_DMA_Channel所标识的寄存器
    
}
这个是原子哥的程序
菜鸟想问下配置中
DMA_InitStructure.DMA_BufferSize = cndtr;  //DMA通道的DMA缓存的大小
DMA的缓冲大小是啥意思,我搞不懂! 在手册中也没找到原理!
求告知!求解释!


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-3-16 20:31:37 | 显示全部楼层
就是你的DMA数据缓存区的大小。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
28
金钱
28
注册时间
2012-7-28
在线时间
0 小时
 楼主| 发表于 2013-3-16 21:20:10 | 显示全部楼层
大原子哥:很感谢你及时解决我的问题!
可是DMA不是直接访问寄存器的嘛 ! 为啥还要设置缓冲区! 
STM32中文手册也没有这个设置的解释!
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-3-16 21:48:17 | 显示全部楼层
你再好好了解下DMA的几种工作模式。你就了解了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
28
金钱
28
注册时间
2012-7-28
在线时间
0 小时
 楼主| 发表于 2013-3-16 21:50:28 | 显示全部楼层
大原子哥:是不是这样的在DMA传输没有完成数据来的时间里,又来了另外的数据,现在DMA不能写,所以才开辟缓存区,
将数据存起来
保证在这一段时间里能够将缓存的数据写完
回复 支持 反对

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
28
金钱
28
注册时间
2012-7-28
在线时间
0 小时
 楼主| 发表于 2013-3-16 21:51:37 | 显示全部楼层
恩 ! 好的 我再看看 !谢谢 大原子
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-22 20:20

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表