打印

ADC最大采样数设置问题

[复制链接]
1682|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
824653578|  楼主 | 2014-10-10 21:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
824653578|  楼主 | 2014-10-10 21:10 | 只看该作者
自己顶顶

使用特权

评论回复
板凳
824653578|  楼主 | 2014-10-10 21:10 | 只看该作者

使用特权

评论回复
地板
824653578|  楼主 | 2014-10-10 21:58 | 只看该作者
???????

使用特权

评论回复
5
zhangmangui| | 2014-10-12 09:57 | 只看该作者
这属于两个寄存器    两句分别赋值
无效是什么意思    你看看别的地方有没有对AdcRegs.ADCMAXCONV.bit.MAX_CONV2
进行修改或对要实现的功能的限制

使用特权

评论回复
6
scottly| | 2014-10-13 17:44 | 只看该作者
的确是无效,第一条已经设置最大转换通道数为8了

使用特权

评论回复
7
小木欧尼| | 2014-10-13 20:13 | 只看该作者
支持楼上的

使用特权

评论回复
8
edishen| | 2014-10-13 20:45 | 只看该作者
不太懂 帮忙顶了

使用特权

评论回复
9
824653578|  楼主 | 2014-10-13 22:09 | 只看该作者
zhangmangui 发表于 2014-10-12 09:57
这属于两个寄存器    两句分别赋值
无效是什么意思    你看看别的地方有没有对AdcRegs.ADCMAXCONV.bit.MAX_ ...

  谢谢回复,问题已解决。下面是程序设置

AdcRegs.ADCTRL1.bit.ACQ_PS = ADC_SHCLK;  // Sequential mode: Sample rate   = 1/[(2+ACQ_PS)*ADC clock in ns]
                        //                     = 1/(3*40ns) =8.3MHz (for 150 MHz SYSCLKOUT)
                                            //                     = 1/(3*80ns) =4.17MHz (for 100 MHz SYSCLKOUT)
                                            // If Simultaneous mode enabled: Sample rate = 1/[(3+ACQ_PS)*ADC clock in ns]
   AdcRegs.ADCTRL3.bit.ADCCLKPS = ADC_CKPS;
//   AdcRegs.ADCTRL1.bit.SEQ_CASC = 1;        // 1  Cascaded mode
   AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0;
//   AdcRegs.ADCTRL1.bit.CONT_RUN = 1;       // Setup continuous

//   AdcRegs.ADCTRL1.bit.SEQ_OVRD = 1;       // Enable Sequencer override feature
   AdcRegs.ADCCHSELSEQ1.all = 0x0;         // Initialize all ADC channel selects to A0
   AdcRegs.ADCCHSELSEQ2.all = 0x0;
   AdcRegs.ADCCHSELSEQ3.all = 0x0;
   AdcRegs.ADCCHSELSEQ4.all = 0x0;
   AdcRegs.ADCMAXCONV.bit.MAX_CONV1 = 0x3;  
   AdcRegs.ADCMAXCONV.bit.MAX_CONV2 = 0x3;

// Step 5. User specific code, enable interrupts:


// Clear SampleTable
   for (i=0; i<BUF_SIZE; i++)
   {
     SampleTable = 0;
   }

// Start SEQ1
   AdcRegs.ADCTRL2.all = 0x2000;//软件触发SOC
//         AdcRegs.ADCTRL2.all = 0x0020;
   for(;;)
   {  // Take ADC data and log them in SampleTable array

     // Initalize the array index.  This points to the current
     // location within the SampleTable
     array_index = 0;

     for (i=0; i<(BUF_SIZE/16); i++)
     {
       // Wait for int1
       while (AdcRegs.ADCST.bit.INT_SEQ1== 0){}
//       while (AdcRegs.ADCST.bit.INT_SEQ1== 1){}
       GpioDataRegs.GPBSET.bit.GPIO34 = 1;  // Set GPIO34 for monitoring  -optional

       AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1;

                #if INLINE_SHIFT
                       SampleTable[array_index++]= ( (AdcRegs.ADCRESULT0)>>4);
                       SampleTable[array_index++]= ( (AdcRegs.ADCRESULT1)>>4);
                       SampleTable[array_index++]= ( (AdcRegs.ADCRESULT2)>>4);
                       SampleTable[array_index++]= ( (AdcRegs.ADCRESULT3)>>4);
                       SampleTable[array_index++]= ( (AdcRegs.ADCRESULT4)>>4);
                       SampleTable[array_index++]= ( (AdcRegs.ADCRESULT5)>>4);
                       SampleTable[array_index++]= ( (AdcRegs.ADCRESULT6)>>4);
                       SampleTable[array_index++]= ( (AdcRegs.ADCRESULT7)>>4);
               
                #endif //-- INLINE_SHIFT

                #if NO_SHIFT || POST_SHIFT
               
                       SampleTable[array_index++]= ( (AdcRegs.ADCRESULT0));
                       SampleTable[array_index++]= ( (AdcRegs.ADCRESULT1));
                       SampleTable[array_index++]= ( (AdcRegs.ADCRESULT2));
                       SampleTable[array_index++]= ( (AdcRegs.ADCRESULT3));
                       SampleTable[array_index++]= ( (AdcRegs.ADCRESULT4));
                       SampleTable[array_index++]= ( (AdcRegs.ADCRESULT5));
                       SampleTable[array_index++]= ( (AdcRegs.ADCRESULT6));
                       SampleTable[array_index++]= ( (AdcRegs.ADCRESULT7));

                #endif //-- NO_SHIFT || POST_SHIFT
                AdcRegs.ADCTRL2.bit.RST_SEQ1 = 1;


           AdcRegs.ADCTRL2.all = 0x0020;//软件触发


       while (AdcRegs.ADCST.bit.INT_SEQ2== 0){}
//             while (AdcRegs.ADCST.bit.INT_SEQ1== 1){}
           GpioDataRegs.GPBCLEAR.bit.GPIO34 = 1;  // Clear GPIO34 for monitoring  -optional
       AdcRegs.ADCST.bit.INT_SEQ2_CLR = 1;

                #if INLINE_SHIFT
               
                       SampleTable[array_index++]= ( (AdcRegs.ADCRESULT8)>>4);
                       SampleTable[array_index++]= ( (AdcRegs.ADCRESULT9)>>4);
                       SampleTable[array_index++]= ( (AdcRegs.ADCRESULT10)>>4);
                       SampleTable[array_index++]= ( (AdcRegs.ADCRESULT11)>>4);
                       SampleTable[array_index++]= ( (AdcRegs.ADCRESULT12)>>4);
                       SampleTable[array_index++]= ( (AdcRegs.ADCRESULT13)>>4);
                       SampleTable[array_index++]= ( (AdcRegs.ADCRESULT14)>>4);
                       SampleTable[array_index++]= ( (AdcRegs.ADCRESULT15)>>4);
               
                #endif //-- INLINE_SHIFT
               
                #if NO_SHIFT || POST_SHIFT
               
                       SampleTable[array_index++]= ( (AdcRegs.ADCRESULT8));
                       SampleTable[array_index++]= ( (AdcRegs.ADCRESULT9));
                       SampleTable[array_index++]= ( (AdcRegs.ADCRESULT10));
                       SampleTable[array_index++]= ( (AdcRegs.ADCRESULT11));
                       SampleTable[array_index++]= ( (AdcRegs.ADCRESULT12));
                       SampleTable[array_index++]= ( (AdcRegs.ADCRESULT13));
                       SampleTable[array_index++]= ( (AdcRegs.ADCRESULT14));
                       SampleTable[array_index++]= ( (AdcRegs.ADCRESULT15));
                #endif // -- NO_SHIFT || POST_SHIFT

                }
       
       
        #if POST_SHIFT
            // For post shifting, shift the ADC results
            // in the SampleTable buffer after the buffer is full.
            for (i=0; i<BUF_SIZE; i++)
            {
              SampleTable = ((SampleTable) >>4);
            }
        #endif // -- POST_SHIFT
          AdcRegs.ADCTRL2.bit.RST_SEQ2 = 1;  ////////////////////////////////////////////////////////////////////
            GpioDataRegs.GPBCLEAR.bit.GPIO34 = 1;  // Clear GPIO34 for monitoring  -optional
  }

使用特权

评论回复
10
824653578|  楼主 | 2014-10-13 22:10 | 只看该作者
edishen 发表于 2014-10-13 20:45
不太懂 帮忙顶了

谢谢

使用特权

评论回复
11
824653578|  楼主 | 2014-10-13 22:10 | 只看该作者
小木欧尼 发表于 2014-10-13 20:13
支持楼上的

这个可以有效,测试成功。
  谢谢回复,问题已解决。下面是程序设置

AdcRegs.ADCTRL1.bit.ACQ_PS = ADC_SHCLK;  // Sequential mode: Sample rate   = 1/[(2+ACQ_PS)*ADC clock in ns]
                        //                     = 1/(3*40ns) =8.3MHz (for 150 MHz SYSCLKOUT)
                                            //                     = 1/(3*80ns) =4.17MHz (for 100 MHz SYSCLKOUT)
                                            // If Simultaneous mode enabled: Sample rate = 1/[(3+ACQ_PS)*ADC clock in ns]
   AdcRegs.ADCTRL3.bit.ADCCLKPS = ADC_CKPS;
//   AdcRegs.ADCTRL1.bit.SEQ_CASC = 1;        // 1  Cascaded mode
   AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0;
//   AdcRegs.ADCTRL1.bit.CONT_RUN = 1;       // Setup continuous

//   AdcRegs.ADCTRL1.bit.SEQ_OVRD = 1;       // Enable Sequencer override feature
   AdcRegs.ADCCHSELSEQ1.all = 0x0;         // Initialize all ADC channel selects to A0
   AdcRegs.ADCCHSELSEQ2.all = 0x0;
   AdcRegs.ADCCHSELSEQ3.all = 0x0;
   AdcRegs.ADCCHSELSEQ4.all = 0x0;
   AdcRegs.ADCMAXCONV.bit.MAX_CONV1 = 0x3;  
   AdcRegs.ADCMAXCONV.bit.MAX_CONV2 = 0x3;

// Step 5. User specific code, enable interrupts:


// Clear SampleTable
   for (i=0; i<BUF_SIZE; i++)
   {
     SampleTable = 0;
   }

// Start SEQ1
   AdcRegs.ADCTRL2.all = 0x2000;//软件触发SOC
//         AdcRegs.ADCTRL2.all = 0x0020;
   for(;;)
   {  // Take ADC data and log them in SampleTable array

     // Initalize the array index.  This points to the current
     // location within the SampleTable
     array_index = 0;

     for (i=0; i<(BUF_SIZE/16); i++)
     {
       // Wait for int1
       while (AdcRegs.ADCST.bit.INT_SEQ1== 0){}
//       while (AdcRegs.ADCST.bit.INT_SEQ1== 1){}
       GpioDataRegs.GPBSET.bit.GPIO34 = 1;  // Set GPIO34 for monitoring  -optional

       AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1;

                #if INLINE_SHIFT
                       SampleTable[array_index++]= ( (AdcRegs.ADCRESULT0)>>4);
                       SampleTable[array_index++]= ( (AdcRegs.ADCRESULT1)>>4);
                       SampleTable[array_index++]= ( (AdcRegs.ADCRESULT2)>>4);
                       SampleTable[array_index++]= ( (AdcRegs.ADCRESULT3)>>4);
                       SampleTable[array_index++]= ( (AdcRegs.ADCRESULT4)>>4);
                       SampleTable[array_index++]= ( (AdcRegs.ADCRESULT5)>>4);
                       SampleTable[array_index++]= ( (AdcRegs.ADCRESULT6)>>4);
                       SampleTable[array_index++]= ( (AdcRegs.ADCRESULT7)>>4);
               
                #endif //-- INLINE_SHIFT

                #if NO_SHIFT || POST_SHIFT
               
                       SampleTable[array_index++]= ( (AdcRegs.ADCRESULT0));
                       SampleTable[array_index++]= ( (AdcRegs.ADCRESULT1));
                       SampleTable[array_index++]= ( (AdcRegs.ADCRESULT2));
                       SampleTable[array_index++]= ( (AdcRegs.ADCRESULT3));
                       SampleTable[array_index++]= ( (AdcRegs.ADCRESULT4));
                       SampleTable[array_index++]= ( (AdcRegs.ADCRESULT5));
                       SampleTable[array_index++]= ( (AdcRegs.ADCRESULT6));
                       SampleTable[array_index++]= ( (AdcRegs.ADCRESULT7));

                #endif //-- NO_SHIFT || POST_SHIFT
                AdcRegs.ADCTRL2.bit.RST_SEQ1 = 1;


           AdcRegs.ADCTRL2.all = 0x0020;//软件触发


       while (AdcRegs.ADCST.bit.INT_SEQ2== 0){}
//             while (AdcRegs.ADCST.bit.INT_SEQ1== 1){}
           GpioDataRegs.GPBCLEAR.bit.GPIO34 = 1;  // Clear GPIO34 for monitoring  -optional
       AdcRegs.ADCST.bit.INT_SEQ2_CLR = 1;

                #if INLINE_SHIFT
               
                       SampleTable[array_index++]= ( (AdcRegs.ADCRESULT8)>>4);
                       SampleTable[array_index++]= ( (AdcRegs.ADCRESULT9)>>4);
                       SampleTable[array_index++]= ( (AdcRegs.ADCRESULT10)>>4);
                       SampleTable[array_index++]= ( (AdcRegs.ADCRESULT11)>>4);
                       SampleTable[array_index++]= ( (AdcRegs.ADCRESULT12)>>4);
                       SampleTable[array_index++]= ( (AdcRegs.ADCRESULT13)>>4);
                       SampleTable[array_index++]= ( (AdcRegs.ADCRESULT14)>>4);
                       SampleTable[array_index++]= ( (AdcRegs.ADCRESULT15)>>4);
               
                #endif //-- INLINE_SHIFT
               
                #if NO_SHIFT || POST_SHIFT
               
                       SampleTable[array_index++]= ( (AdcRegs.ADCRESULT8));
                       SampleTable[array_index++]= ( (AdcRegs.ADCRESULT9));
                       SampleTable[array_index++]= ( (AdcRegs.ADCRESULT10));
                       SampleTable[array_index++]= ( (AdcRegs.ADCRESULT11));
                       SampleTable[array_index++]= ( (AdcRegs.ADCRESULT12));
                       SampleTable[array_index++]= ( (AdcRegs.ADCRESULT13));
                       SampleTable[array_index++]= ( (AdcRegs.ADCRESULT14));
                       SampleTable[array_index++]= ( (AdcRegs.ADCRESULT15));
                #endif // -- NO_SHIFT || POST_SHIFT

                }
       
       
        #if POST_SHIFT
            // For post shifting, shift the ADC results
            // in the SampleTable buffer after the buffer is full.
            for (i=0; i<BUF_SIZE; i++)
            {
              SampleTable = ((SampleTable) >>4);
            }
        #endif // -- POST_SHIFT
          AdcRegs.ADCTRL2.bit.RST_SEQ2 = 1;  ////////////////////////////////////////////////////////////////////
            GpioDataRegs.GPBCLEAR.bit.GPIO34 = 1;  // Clear GPIO34 for monitoring  -optional
  }

使用特权

评论回复
12
824653578|  楼主 | 2014-10-13 22:11 | 只看该作者
scottly 发表于 2014-10-13 17:44
的确是无效,第一条已经设置最大转换通道数为8了

高位可以忽略的,在非级联模式。

使用特权

评论回复
13
zhangmangui| | 2014-10-13 22:11 | 只看该作者
824653578 发表于 2014-10-13 22:09
谢谢回复,问题已解决。下面是程序设置

AdcRegs.ADCTRL1.bit.ACQ_PS = ADC_SHCLK;  // Sequential mo ...

感谢你的反馈和代码分享  

使用特权

评论回复
14
小木欧尼| | 2014-10-23 18:51 | 只看该作者
824653578 发表于 2014-10-13 22:10
这个可以有效,测试成功。
  谢谢回复,问题已解决。下面是程序设置

楼主 真给力 一起进步啦

使用特权

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

本版积分规则

4

主题

42

帖子

0

粉丝