打印

ADC用DMA,分配16K的BufferSize不能有效分配

[复制链接]
3924|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
shanggzq|  楼主 | 2008-12-27 00:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用STM32F103VET6的芯片,分配16K的空间用做ADC1的DMA缓存尺寸,初始化是可以的,使能DMA函数后,
  DMA_DeInit(DMA1_Channel1);
  DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_BASE + 0x4c ;  //base + 0x4c
  DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&ADCConvertedValue;
  DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
  DMA_InitStructure.DMA_BufferSize = 0x2000;                    //64 * 256;
  DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
  DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
  DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
  DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
  DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
  DMA_InitStructure.DMA_Priority = DMA_Priority_VeryHigh;
  DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
  DMA_Init(DMA1_Channel1, &DMA_InitStructure);
  /* Enable DMA1 channel1 */
  DMA_Cmd(DMA1_Channel1, ENABLE);

 运行的DMA_Init函数 DMA_CNDTR1 0x2000

 运行DMA_Cmd函数后 DMA_CNDTR1 变成一个随机的数,但总不是0x2000

 
沙发
a1z26| | 2008-12-29 10:43 | 只看该作者

DMA

DMA一旦使能,传输就开始了,肯定不是0x2000

使用特权

评论回复
板凳
shanggzq|  楼主 | 2008-12-29 17:49 | 只看该作者

AD还没开始转换呢,传输还没开始,就已经不是了,分配小的空间

使用特权

评论回复
地板
香水城| | 2008-12-29 18:09 | 只看该作者

你的DMA存储器地址寄存器的内容是否随DMA计数寄存器变化?

DMA缓冲区的地址是多少?&ADCConvertedValue = ?

使用特权

评论回复
5
shanggzq|  楼主 | 2009-1-2 21:07 | 只看该作者

DMA缓冲区的地址是正确的,初始化后,没开始工作就不对

使用特权

评论回复
6
香水城| | 2009-1-2 21:40 | 只看该作者

“初始化后没开始工作就不对”,这怎么能说明你设置正确

2楼不是已经说过,运行DMA_Cmd函数后,DMA就开始工作了。你是如何判断它没有开始工作?

使用特权

评论回复
7
shanggzq|  楼主 | 2009-1-4 20:27 | 只看该作者

AD还没开始转换呢,DMA哪来的数据工作

使用特权

评论回复
8
shanggzq|  楼主 | 2009-1-4 20:38 | 只看该作者

经过这几天的测试,分配8K以下的没问题,

经过这几天的测试,分配8K BYTES以下的没问题,运行DMA_Cmd函数后,还是保持初始化的数据。所以我认为不是DMA已经开始工作的原因。

使用特权

评论回复
9
shian| | 2009-1-8 11:46 | 只看该作者

我的也有这样的问题!

如题,个人感觉是编译器问题。

使用特权

评论回复
10
violet520| | 2009-1-12 12:41 | 只看该作者

这个问题解决了吗?

使用特权

评论回复
11
shanggzq|  楼主 | 2009-1-12 15:51 | 只看该作者

还没有效解决,找不出原因

还没有效解决,找不出原因. 换一种方式实现,转换后把数据拷贝的缓存里.

使用特权

评论回复
12
香水城| | 2009-1-12 16:00 | 只看该作者

我还是前面的问题,你是如何判断AD还没有开始转换?

如果怀疑是编译器的问题,请检查你的工具软件是否为限制版本。

使用特权

评论回复
13
mxinfa| | 2009-3-25 23:44 | 只看该作者

作个记号

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

18

主题

71

帖子

1

粉丝