⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ex_adc.c

📁 TMS320F2808 DSP芯片的接口控制源码
💻 C
字号:
#include "DSP280x_Device.h"     // DSP280x Headerfile Include File
#include "DSP280x_Examples.h"   // DSP280x Examples Include File

#define	  SetLoad	GpioDataRegs.GPADAT.bit.GPIO14 = 1
#define	  ClrLoad	GpioDataRegs.GPADAT.bit.GPIO14 = 0
void DA_OUT(Uint16 CHANNEL,Uint16 RNG,Uint16 SPI_DATA);
// ADC start parameters
#define ADC_MODCLK 0x4   // HSPCLK = SYSCLKOUT/2*ADC_MODCLK2 = 100/(2*4)         = 12,5MHz
#define ADC_CKPS   0x1   // ADC module clock = HSPCLK/2*ADC_CKPS   = 12,5MHz/(1*2) = 6.25MHz
#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];

void main()
{
   Uint16 i;

    InitSysCtrl();

 	InitGpio();  
	InitSpi();
	SetCs(1);
	SetCs(0);

    DINT;

    InitPieCtrl();
   
   IER = 0x0000;
   IFR = 0x0000;

   InitPieVectTable();


	if(Spib_TxReady() == 1)
	{
		SpibRegs.SPITXBUF = 0XFFFF;
		ClrCs(0);
		SetCs(0);		
	}
	SetLoad;

    DA_OUT(0,0,0X40);                
    DA_OUT(1,0,0X80);                
    DA_OUT(2,0,0XC0);                
    DA_OUT(3,0,0XFF);                

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

    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;
    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
        // Software wait = (HISPCP*2) * (ADCCLKPS*2) * (CPS+1) cycles
        //               = (3*2)      * (1*2)        * (0+1)   = 12 cycles
        asm(" RPT #11 || NOP");
        AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1;
        SampleTable[i] =((AdcRegs.ADCRESULT0>>4) ); 
     }
   }

} 

void DA_OUT(Uint16 CHANNEL,Uint16 RNG,Uint16 SPI_DATA)
{  
	Uint16	Temp = 0;
    Uint16  flag=0;
    Temp = CHANNEL<<14;    
    Temp = Temp | (RNG<<13);  
    Temp = Temp | SPI_DATA<<5;
    SpiaRegs.SPITXBUF= Temp;
    while(1)
    {
    	flag=SpiaRegs.SPISTS.all & 0x40;
    	if(flag==0x40)     break;
    }
    SpiaRegs.SPIRXBUF=SpiaRegs.SPIRXBUF;

	ClrLoad;
	DELAY_US(3);
	SetLoad;
    
}
//===========================================================================
// No more.
//===========================================================================

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -