打印

等精度采样后在DMA中的数据怎么提取出来

[复制链接]
2873|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
783055156|  楼主 | 2010-1-20 11:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
AD设置()

  ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;  //独立转换
  ADC_InitStructure.ADC_ScanConvMode = DISABLE;  //单通道
  ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; //单次转换
  ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC1; //定时触发
  ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; //数据右对齐
  ADC_InitStructure.ADC_NbrOfChannel = 1;  //转换通道数
  ADC_Init(ADC1, &ADC_InitStructure);



  /* ADC1 regular channel14 configuration */
  ADC_RegularChannelConfig(ADC1, ADC_Channel_14, 1, ADC_SampleTime_239Cycles5);

  /* Set injected sequencer length */
  ADC_InjectedSequencerLengthConfig(ADC1, 1);
  /* ADC1 injected channel Configuration */
  ADC_InjectedChannelConfig(ADC1, ADC_Channel_11, 1, ADC_SampleTime_71Cycles5);
  /* ADC1 injected external trigger configuration */
  ADC_ExternalTrigInjectedConvConfig(ADC1, ADC_ExternalTrigInjecConv_None);

  /* Enable automatic injected conversion start after regular one */
  ADC_AutoInjectedConvCmd(ADC1, ENABLE);

  /* Enable ADC1 DMA */
  ADC_DMACmd(ADC1, ENABLE);

  /* Enable ADC1 external trigger */
  ADC_ExternalTrigConvCmd(ADC1, ENABLE);

  /* Enable JEOC interupt */
  ADC_ITConfig(ADC1, ADC_IT_JEOC, ENABLE);

  /* Enable ADC1 */
  ADC_Cmd(ADC1, ENABLE);

  /* Enable ADC1 reset calibaration register */   
  ADC_ResetCalibration(ADC1);
  /* Check the end of ADC1 reset calibration register */
  while(ADC_GetResetCalibrationStatus(ADC1));

  /* Start ADC1 calibaration */
  ADC_StartCalibration(ADC1);
  /* Check the end of ADC1 calibration */
  while(ADC_GetCalibrationStatus(ADC1));



定时器设置

  /* Time Base configuration */
  TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);
  TIM_TimeBaseStructure.TIM_Period = 0xFF;  //定时值        
  TIM_TimeBaseStructure.TIM_Prescaler = 0x4; //分频系数      
  TIM_TimeBaseStructure.TIM_ClockDivision = 0x0; //时间分割值  
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //向上计数
  TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);
  /* TIM1 channel1 configuration in PWM mode */
  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;               
  TIM_OCInitStructure.TIM_Pulse = 0x7F;
  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;         
  TIM_OC1Init(TIM1, &TIM_OCInitStructure);
沙发
783055156|  楼主 | 2010-1-20 11:07 | 只看该作者
此为采集正弦波一个周期内1024个点    通过定时触发采样时间
直接用定时器触发ADC转换,再由ADC触发DMA传送,在1024次传送完成时产生中断,一次性处理1024个采样结果。  而现在需要处理这1024个数据  DMA传输后的数据不晓得传到哪个函数里了

使用特权

评论回复
板凳
lxyppc| | 2010-1-20 15:04 | 只看该作者


楼主,DMA的意思是Direct Memory Access
传完的数据当然是放在内存中了
你只要去读你指定的内存地址就行了,没有特别的函数

使用特权

评论回复
地板
783055156|  楼主 | 2010-1-20 18:00 | 只看该作者
O(∩_∩)O谢谢

使用特权

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

本版积分规则

5

主题

18

帖子

0

粉丝