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

如何确定TMS320F28335 AD模块是否工作?

我在使用ICETEK-F28335-A实验板,以及SEED-XD560PLUS仿真器,在CCS4.2.0027 (UNLICENSED)中成功进入DEBUG,调试TI官方的例程

 FILE:   Example_2823xAdcSeqModeTest.c //                    // TITLE:  DSP2823x ADC Seq Mode Test.

编译不报错无警告,但是无法完成AD转换,连随机电平都读不到,我怀疑是AD整体不工作,观察AdcRegs.ADCTRL2.bit.SOC_SEQ1及AdcRegs.ADCRESULT0,其中AdcRegs.ADCTRL2.bit.SOC_SEQ1一直为1,而AdcRegs.ADCRESULT0一直为0

 

 

 

上程序

 

 

#include "DSP28x_Project.h"     // Device Headerfile and Examples Include File

// ADC start parameters #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 #define ADC_CKPS   0x1   // ADC module clock = HSPCLK/2*ADC_CKPS   = 25.0MHz/(1*2) = 12.5MHz #define ADC_SHCLK  0xf   // S/H width in ADC module periods                        = 16 ADC clocks #define AVG        1000  // Average sample limit #define ZOFFSET    0x00  // Average Zero offset #define BUF_SIZE   2048  // Sample buffer size

// Global variable for this example Uint16 SampleTable[BUF_SIZE];

main() {    Uint16 i;

// Step 1. Initialize System Control: // PLL, WatchDog, enable Peripheral Clocks // This example function is found in the DSP2833x_SysCtrl.c file.    InitSysCtrl();

// Specific clock setting for this example:    EALLOW;    SysCtrlRegs.HISPCP.all = ADC_MODCLK; // HSPCLK = SYSCLKOUT/ADC_MODCLK    EDIS;

// Step 2. Initialize GPIO: // This example function is found in the DSP2833x_Gpio.c file and // illustrates how to set the GPIO to it's default state. // InitGpio();  // Skipped for this example

// Step 3. Clear all interrupts and initialize PIE vector table: // Disable CPU interrupts    DINT;

// Initialize the PIE control registers to their default state. // The default state is all PIE interrupts disabled and flags // are cleared. // This function is found in the DSP2833x_PieCtrl.c file.    InitPieCtrl();

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

// Initialize the PIE vector table with pointers to the shell Interrupt // Service Routines (ISR). // This will populate the entire table, even if the interrupt // is not used in this example.  This is useful for debug purposes. // The shell ISR routines are found in DSP2833x_DefaultIsr.c. // This function is found in DSP2833x_PieVect.c.    InitPieVectTable();

// Step 4. Initialize all the Device Peripherals: // This function is found in DSP2833x_InitPeripherals.c // InitPeripherals(); // Not required for this example    InitAdc();  // For this example, init the ADC

// Specific ADC setup for this example:    AdcRegs.ADCTRL1.bit.ACQ_PS = ADC_SHCLK;    AdcRegs.ADCTRL3.bit.ADCCLKPS = ADC_CKPS;    AdcRegs.ADCTRL1.bit.SEQ_CASC = 1;        // 1  Cascaded mode    AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0;     //选择A2    AdcRegs.ADCTRL1.bit.CONT_RUN = 1;       // Setup continuous run

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

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

   // Start SEQ1    AdcRegs.ADCTRL2.all = 0x2000;

   // Take ADC data and log the in SampleTable array    for(;;)    {      for (i=0; i<AVG; i++)      {         while (AdcRegs.ADCST.bit.INT_SEQ1== 0) {} // Wait for interrupt                         AdcRegs.ADCTRL2.bit.RST_SEQ1 = 1;         // Reset SEQ1               SampleTable[i] =((AdcRegs.ADCRESULT0>>4) );                  }    } }

//=========================================================================== // No more. //===========================================================================

 

感觉程序问题不大,纠结了一个多星期不知道问题出在哪儿,求帮助~~~~~~~~~~~~~要毕不了业了!!!!QQ 342811994

haotian Yang:

我觉得可能是跟ADCLO可能没有接地有关,在ICETEK-F28335-A实验板的原理图涉及到ADCLO/ADCREFIN的跳线J3 J4如何使用

 

求大神HITer~~~~~~~~~~~~~要毕不了业了!!!!QQ 342811994

 

\

我在使用ICETEK-F28335-A实验板,以及SEED-XD560PLUS仿真器,在CCS4.2.0027 (UNLICENSED)中成功进入DEBUG,调试TI官方的例程

 FILE:   Example_2823xAdcSeqModeTest.c //                    // TITLE:  DSP2823x ADC Seq Mode Test.

编译不报错无警告,但是无法完成AD转换,连随机电平都读不到,我怀疑是AD整体不工作,观察AdcRegs.ADCTRL2.bit.SOC_SEQ1及AdcRegs.ADCRESULT0,其中AdcRegs.ADCTRL2.bit.SOC_SEQ1一直为1,而AdcRegs.ADCRESULT0一直为0

 

 

 

上程序

 

 

#include "DSP28x_Project.h"     // Device Headerfile and Examples Include File

// ADC start parameters #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 #define ADC_CKPS   0x1   // ADC module clock = HSPCLK/2*ADC_CKPS   = 25.0MHz/(1*2) = 12.5MHz #define ADC_SHCLK  0xf   // S/H width in ADC module periods                        = 16 ADC clocks #define AVG        1000  // Average sample limit #define ZOFFSET    0x00  // Average Zero offset #define BUF_SIZE   2048  // Sample buffer size

// Global variable for this example Uint16 SampleTable[BUF_SIZE];

main() {    Uint16 i;

// Step 1. Initialize System Control: // PLL, WatchDog, enable Peripheral Clocks // This example function is found in the DSP2833x_SysCtrl.c file.    InitSysCtrl();

// Specific clock setting for this example:    EALLOW;    SysCtrlRegs.HISPCP.all = ADC_MODCLK; // HSPCLK = SYSCLKOUT/ADC_MODCLK    EDIS;

// Step 2. Initialize GPIO: // This example function is found in the DSP2833x_Gpio.c file and // illustrates how to set the GPIO to it's default state. // InitGpio();  // Skipped for this example

// Step 3. Clear all interrupts and initialize PIE vector table: // Disable CPU interrupts    DINT;

// Initialize the PIE control registers to their default state. // The default state is all PIE interrupts disabled and flags // are cleared. // This function is found in the DSP2833x_PieCtrl.c file.    InitPieCtrl();

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

// Initialize the PIE vector table with pointers to the shell Interrupt // Service Routines (ISR). // This will populate the entire table, even if the interrupt // is not used in this example.  This is useful for debug purposes. // The shell ISR routines are found in DSP2833x_DefaultIsr.c. // This function is found in DSP2833x_PieVect.c.    InitPieVectTable();

// Step 4. Initialize all the Device Peripherals: // This function is found in DSP2833x_InitPeripherals.c // InitPeripherals(); // Not required for this example    InitAdc();  // For this example, init the ADC

// Specific ADC setup for this example:    AdcRegs.ADCTRL1.bit.ACQ_PS = ADC_SHCLK;    AdcRegs.ADCTRL3.bit.ADCCLKPS = ADC_CKPS;    AdcRegs.ADCTRL1.bit.SEQ_CASC = 1;        // 1  Cascaded mode    AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0;     //选择A2    AdcRegs.ADCTRL1.bit.CONT_RUN = 1;       // Setup continuous run

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

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

   // Start SEQ1    AdcRegs.ADCTRL2.all = 0x2000;

   // Take ADC data and log the in SampleTable array    for(;;)    {      for (i=0; i<AVG; i++)      {         while (AdcRegs.ADCST.bit.INT_SEQ1== 0) {} // Wait for interrupt                         AdcRegs.ADCTRL2.bit.RST_SEQ1 = 1;         // Reset SEQ1               SampleTable[i] =((AdcRegs.ADCRESULT0>>4) );                  }    } }

//=========================================================================== // No more. //===========================================================================

 

感觉程序问题不大,纠结了一个多星期不知道问题出在哪儿,求帮助~~~~~~~~~~~~~要毕不了业了!!!!QQ 342811994

Tony Chopper:

回复 haotian Yang:

我用函数发生器产生了一路50mV到2V的正弦电压,一根线接到ADCINA3,另一根接到ADCLO,每次采集到的数据要么是2.999,要么是负值,而ADCRESULT寄存器中的值,经常会达到4095,毕不了业了,求助啊

我在使用ICETEK-F28335-A实验板,以及SEED-XD560PLUS仿真器,在CCS4.2.0027 (UNLICENSED)中成功进入DEBUG,调试TI官方的例程

 FILE:   Example_2823xAdcSeqModeTest.c //                    // TITLE:  DSP2823x ADC Seq Mode Test.

编译不报错无警告,但是无法完成AD转换,连随机电平都读不到,我怀疑是AD整体不工作,观察AdcRegs.ADCTRL2.bit.SOC_SEQ1及AdcRegs.ADCRESULT0,其中AdcRegs.ADCTRL2.bit.SOC_SEQ1一直为1,而AdcRegs.ADCRESULT0一直为0

 

 

 

上程序

 

 

#include "DSP28x_Project.h"     // Device Headerfile and Examples Include File

// ADC start parameters #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 #define ADC_CKPS   0x1   // ADC module clock = HSPCLK/2*ADC_CKPS   = 25.0MHz/(1*2) = 12.5MHz #define ADC_SHCLK  0xf   // S/H width in ADC module periods                        = 16 ADC clocks #define AVG        1000  // Average sample limit #define ZOFFSET    0x00  // Average Zero offset #define BUF_SIZE   2048  // Sample buffer size

// Global variable for this example Uint16 SampleTable[BUF_SIZE];

main() {    Uint16 i;

// Step 1. Initialize System Control: // PLL, WatchDog, enable Peripheral Clocks // This example function is found in the DSP2833x_SysCtrl.c file.    InitSysCtrl();

// Specific clock setting for this example:    EALLOW;    SysCtrlRegs.HISPCP.all = ADC_MODCLK; // HSPCLK = SYSCLKOUT/ADC_MODCLK    EDIS;

// Step 2. Initialize GPIO: // This example function is found in the DSP2833x_Gpio.c file and // illustrates how to set the GPIO to it's default state. // InitGpio();  // Skipped for this example

// Step 3. Clear all interrupts and initialize PIE vector table: // Disable CPU interrupts    DINT;

// Initialize the PIE control registers to their default state. // The default state is all PIE interrupts disabled and flags // are cleared. // This function is found in the DSP2833x_PieCtrl.c file.    InitPieCtrl();

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

// Initialize the PIE vector table with pointers to the shell Interrupt // Service Routines (ISR). // This will populate the entire table, even if the interrupt // is not used in this example.  This is useful for debug purposes. // The shell ISR routines are found in DSP2833x_DefaultIsr.c. // This function is found in DSP2833x_PieVect.c.    InitPieVectTable();

// Step 4. Initialize all the Device Peripherals: // This function is found in DSP2833x_InitPeripherals.c // InitPeripherals(); // Not required for this example    InitAdc();  // For this example, init the ADC

// Specific ADC setup for this example:    AdcRegs.ADCTRL1.bit.ACQ_PS = ADC_SHCLK;    AdcRegs.ADCTRL3.bit.ADCCLKPS = ADC_CKPS;    AdcRegs.ADCTRL1.bit.SEQ_CASC = 1;        // 1  Cascaded mode    AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0;     //选择A2    AdcRegs.ADCTRL1.bit.CONT_RUN = 1;       // Setup continuous run

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

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

   // Start SEQ1    AdcRegs.ADCTRL2.all = 0x2000;

   // Take ADC data and log the in SampleTable array    for(;;)    {      for (i=0; i<AVG; i++)      {         while (AdcRegs.ADCST.bit.INT_SEQ1== 0) {} // Wait for interrupt                         AdcRegs.ADCTRL2.bit.RST_SEQ1 = 1;         // Reset SEQ1               SampleTable[i] =((AdcRegs.ADCRESULT0>>4) );                  }    } }

//=========================================================================== // No more. //===========================================================================

 

感觉程序问题不大,纠结了一个多星期不知道问题出在哪儿,求帮助~~~~~~~~~~~~~要毕不了业了!!!!QQ 342811994

haotian Yang:

回复 Tony Chopper:

ADCLO是一个参考电位,一般是接地为0电位,你这个是接到函数发生器的地了么?还是用跳线接到别的地方去了?是开发板还是自己做的板子?

赞(0)
未经允许不得转载:TI中文支持网 » 如何确定TMS320F28335 AD模块是否工作?
分享到: 更多 (0)