打印

做一个简单的28335ADC采样 但是采样值一直不正确

[复制链接]
2302|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
江心秋月白|  楼主 | 2016-11-27 20:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
江心秋月白|  楼主 | 2016-11-27 20:44 | 只看该作者
#include "DSP2833x_Device.h"     // DSP2833x Headerfile Include File
#include "DSP2833x_Examples.h"   // DSP2833x Examples Include File

interrupt void adc_isr(void);

Uint16 LoopCount;
Uint16 ConversionCount;
Uint16 Voltage1[10];



main()
{


   InitSysCtrl();


   EALLOW;
   #if (CPU_FRQ_150MHZ)     // Default - 150 MHz SYSCLKOUT
     #define ADC_MODCLK 0x3 // HSPCLK = SYSCLKOUT/2*ADC_MODCLK2 = 150/(2*3)   = 25.0 MHz
   #endif
   #if (CPU_FRQ_100MHZ)
     #define ADC_MODCLK 0x2 // HSPCLK = SYSCLKOUT/2*ADC_MODCLK2 = 100/(2*2)   = 25.0 MHz
   #endif
   EDIS;

   DINT;

   InitPieCtrl();

// Disable CPU interrupts and clear all CPU interrupt flags:
   IER = 0x0000;
   IFR = 0x0000;

   InitPieVectTable();


   EALLOW;  
   PieVectTable.ADCINT = &adc_isr;
   EDIS;   

   InitAdc();  // For this example, init the ADC

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

// Enable ADCINT in PIE
   PieCtrlRegs.PIEIER1.bit.INTx6 = 1;
   IER |= M_INT1; // Enable CPU Interrupt 1
   EINT;          // Enable Global interrupt INTM
   ERTM;          // Enable Global realtime interrupt DBGM

   LoopCount = 0;
   ConversionCount = 0;

   AdcRegs.ADCMAXCONV.all = 0x0000;       // Setup 1 conv's on SEQ1
   AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x7; // Setup ADCINA0 as 1st SEQ1 conv.
   AdcRegs.ADCTRL2.bit.EPWM_SOCA_SEQ1 = 1;// Enable SOCA from ePWM to start SEQ1
   AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 1;  // Enable SEQ1 interrupt (every EOS)


       EPwm1Regs.ETSEL.bit.SOCAEN = 1;        // Enable SOC on A group  ADC转换序列A启动使能位 1使能
   EPwm1Regs.ETSEL.bit.SOCASEL = 4;       // Select SOC from from CPMA on upcount  EPWMxSOCA脉冲生成选择位
                                                       //100:计数器增加时,TBCTR=CMPA
   EPwm1Regs.ETPS.bit.SOCAPRD = 1;        // Generate pulse on 1st event  该位决定发生多少个事件后产生EPWMxSOCA
                                                   
   
   EPwm1Regs.TBPRD = 0xFFFF;              // Set period for ePWM1 确定定时器的周期,设置PWM的频率
                                              //2^16=65536
                                              //PWM的周期也就是采样周期为[1/(75*1000000)]*65536
   EPwm1Regs.TBCTR=0X0000;                 //清除TB计数器
   
   EPwm1Regs.TBCTL.bit.CTRMODE = 0;                  // count up and start定时器计数模式  00:连续增模式
   


// Wait for ADC interrupt
   for(;;)
   {
      LoopCount++;
   }

}


interrupt void  adc_isr(void)
{

  Voltage1[ConversionCount] = AdcRegs.ADCRESULT0 >>4;

  // If 40 conversions have been logged, start over
  if(ConversionCount == 9)
  {
     ConversionCount = 0;
  }
  else ConversionCount++;

  // Reinitialize for next ADC sequence
  AdcRegs.ADCTRL2.bit.RST_SEQ1 = 1;         // Reset SEQ1
  AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1;       // Clear INT SEQ1 bit
  PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;   // Acknowledge interrupt to PIE

  return;
}


使用特权

评论回复
板凳
江心秋月白|  楼主 | 2016-11-27 20:45 | 只看该作者
这是源程序 就是官网例程简单修改   在板上输入是接的A7也没有接错

使用特权

评论回复
地板
江心秋月白|  楼主 | 2016-11-27 20:47 | 只看该作者
其他的引脚看芯片的原理接线图都已经接好了 所以都没有接 ,使用的接口就是A7一个,开发板与输入电源共地以及ADCLO接地都试过但是输出没有变化,请问这到底是怎么回事呢  

使用特权

评论回复
5
zhangmangui| | 2016-11-27 21:41 | 只看该作者
刷新时寄存器值跳动说明配置应该是对的
下载controlSUITE里面的例子先试试

使用特权

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

本版积分规则

2

主题

8

帖子

0

粉丝