TI中文支持网
TI专业的中文技术问题搜集分享网站

28335ADC

以下示例是关于28335ADC的设置程序,程序中没有出现关于ADCTRL1寄存器设置的语句,它的默认状态是什么?程序是正常的可以采样的

#include "DSP28x_Project.h"    
#include "ADC.h"
interrupt void adc_isr(void);
Uint16 LoopCount;
Uint16 ConversionCount;
void ADC()
{

   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;
   EALLOW;
   SysCtrlRegs.HISPCP.all = ADC_MODCLK;
   EDIS;
   DINT;
   EALLOW;  
   PieVectTable.ADCINT = &adc_isr;
   EDIS;  
   InitAdc();  
   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;

// Configure ADC
   AdcRegs.ADCMAXCONV.all = 0x0001;       // Setup 2 conv's on SEQ1
   AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x08; // Setup ADCINA0 (是B0)as 1st SEQ1 conv.
   AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x09; // Setup ADCINA1(B1) as 2nd 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)

// Assumes ePWM1 clock is already enabled in InitSysCtrl();
   EPwm1Regs.ETSEL.bit.SOCAEN = 1;        // Enable SOC on A group
   EPwm1Regs.ETSEL.bit.SOCASEL = 4;       // 4.Select SOC from from CPMA on upcount
   EPwm1Regs.ETPS.bit.SOCAPRD = 1;        // Generate pulse on 1st event
 //  EPwm1Regs.CMPA.half.CMPA = 0x0080;     // Set compare A value
//   EPwm1Regs.TBPRD = 0xFFFF;              // Set period for ePWM1
 //  EPwm1Regs.TBCTL.bit.CTRMODE = 0;       // count up and start

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

mangui zhang:

ADCTRL1的相关控制应该在函数 InitAdc();  里面

以下示例是关于28335ADC的设置程序,程序中没有出现关于ADCTRL1寄存器设置的语句,它的默认状态是什么?程序是正常的可以采样的

#include "DSP28x_Project.h"    
#include "ADC.h"
interrupt void adc_isr(void);
Uint16 LoopCount;
Uint16 ConversionCount;
void ADC()
{

   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;
   EALLOW;
   SysCtrlRegs.HISPCP.all = ADC_MODCLK;
   EDIS;
   DINT;
   EALLOW;  
   PieVectTable.ADCINT = &adc_isr;
   EDIS;  
   InitAdc();  
   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;

// Configure ADC
   AdcRegs.ADCMAXCONV.all = 0x0001;       // Setup 2 conv's on SEQ1
   AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x08; // Setup ADCINA0 (是B0)as 1st SEQ1 conv.
   AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x09; // Setup ADCINA1(B1) as 2nd 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)

// Assumes ePWM1 clock is already enabled in InitSysCtrl();
   EPwm1Regs.ETSEL.bit.SOCAEN = 1;        // Enable SOC on A group
   EPwm1Regs.ETSEL.bit.SOCASEL = 4;       // 4.Select SOC from from CPMA on upcount
   EPwm1Regs.ETPS.bit.SOCAPRD = 1;        // Generate pulse on 1st event
 //  EPwm1Regs.CMPA.half.CMPA = 0x0080;     // Set compare A value
//   EPwm1Regs.TBPRD = 0xFFFF;              // Set period for ePWM1
 //  EPwm1Regs.TBCTL.bit.CTRMODE = 0;       // count up and start

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

user4737222:

回复 mangui zhang:

 void InitAdc(void){    extern void DSP28x_usDelay(Uint32 Count);    // *IMPORTANT* // The ADC_cal function, which  copies the ADC calibration values from TI reserved // OTP into the ADCREFSEL and ADCOFFTRIM registers, occurs automatically in the // Boot ROM. If the boot ROM code is bypassed during the debug process, the // following function MUST be called for the ADC to function according // to specification. The clocks to the ADC MUST be enabled before calling this // function. // See the device data manual and/or the ADC Reference // Manual for more information.     EALLOW; SysCtrlRegs.PCLKCR0.bit.ADCENCLK = 1; ADC_cal(); EDIS;    // To powerup the ADC the ADCENCLK bit should be set first to enable    // clocks, followed by powering up the bandgap, reference circuitry, and ADC core.    // Before the first conversion is performed a 5ms delay must be observed // after power up to give all analog circuits time to power up and settle    // Please note that for the delay function below to operate correctly the // CPU_RATE define statement in the DSP2833x_Examples.h file must // contain the correct CPU clock period in nanoseconds.    AdcRegs.ADCTRL3.all = 0x00E0;  // Power up bandgap/reference/ADC circuits/somde=0顺序    DELAY_US(ADC_usDELAY);         // Delay before converting ADC channels}

这就是那 InitAdc(void)子函数,没有设置
而且,这里面ADC_cal()子函数也是有定义,没有内容

以下示例是关于28335ADC的设置程序,程序中没有出现关于ADCTRL1寄存器设置的语句,它的默认状态是什么?程序是正常的可以采样的

#include "DSP28x_Project.h"    
#include "ADC.h"
interrupt void adc_isr(void);
Uint16 LoopCount;
Uint16 ConversionCount;
void ADC()
{

   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;
   EALLOW;
   SysCtrlRegs.HISPCP.all = ADC_MODCLK;
   EDIS;
   DINT;
   EALLOW;  
   PieVectTable.ADCINT = &adc_isr;
   EDIS;  
   InitAdc();  
   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;

// Configure ADC
   AdcRegs.ADCMAXCONV.all = 0x0001;       // Setup 2 conv's on SEQ1
   AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x08; // Setup ADCINA0 (是B0)as 1st SEQ1 conv.
   AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x09; // Setup ADCINA1(B1) as 2nd 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)

// Assumes ePWM1 clock is already enabled in InitSysCtrl();
   EPwm1Regs.ETSEL.bit.SOCAEN = 1;        // Enable SOC on A group
   EPwm1Regs.ETSEL.bit.SOCASEL = 4;       // 4.Select SOC from from CPMA on upcount
   EPwm1Regs.ETPS.bit.SOCAPRD = 1;        // Generate pulse on 1st event
 //  EPwm1Regs.CMPA.half.CMPA = 0x0080;     // Set compare A value
//   EPwm1Regs.TBPRD = 0xFFFF;              // Set period for ePWM1
 //  EPwm1Regs.TBCTL.bit.CTRMODE = 0;       // count up and start

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

user4737222:

回复 Brian Wang0:

感谢感谢

赞(0)
未经允许不得转载:TI中文支持网 » 28335ADC
分享到: 更多 (0)