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

📄 dsp28_adc.c

📁 cap口例程
💻 C
字号:
//
//      TMDX ALPHA RELEASE
//      Intended for product evaluation purposes
//
//###########################################################################
//
// FILE:	DSP28_Adc.c
//
// TITLE:	DSP28 ADC Initialization & Support Functions.
//
//###########################################################################
//
//  Ver | dd mmm yyyy | Who  | Description of changes
// =====|=============|======|===============================================
//  0.55| 06 May 2002 | L.H. | EzDSP Alpha Release
//  0.56| 20 May 2002 | L.H. | No change
//  0.57| 27 May 2002 | L.H. | No change
//###########################################################################

#include "DSP28_Device.h"

#define ADC_usDELAY  5000L    //L=10e-9second,ns
#define ADC_usDELAY2 20L

//---------------------------------------------------------------------------
// InitAdc: 
//---------------------------------------------------------------------------
// This function initializes ADC to a known state.
//
void  InitAdc (void)
{
	extern void DSP28x_usDelay(unsigned long Count);
	
      // To powerup the ADC the ADCENCLK bit should be set first to enable
      // clocks, followed by powering up the bandgap and reference circuitry.
      // After a 5ms delay the rest of the ADC can be powered up. After ADC
      // powerup, another 20us delay is required before performing the first
      // ADC conversion. Please note that for the delay function below to
      // operate correctly the CPU_CLOCK_SPEED define statement in the
      // DSP28_Device.h file must contain the correct CPU clock period in
      // nanoseconds. For example:
      //
      // #define CPU_CLOCK_SPEED  6.6667L      // for a 150MHz CPU clock speed
	
	//This was done in the InitSysCtrl() function in DSP28_SysCtrl.c
	//asm("	EALLOW");
	//SysCtrlRegs.PCLKCR.bit.ADCENCLK = 1;     // Power up clocks to ADC
	//SysCtrlRegs.WDCR = 0x6F;                 // Disable WD
	//asm("	EDIS");

	
	AdcRegs.ADCTRL1.bit.RESET=1;            //复位
	NOP;
	AdcRegs.ADCTRL1.bit.RESET=0;            //自动清位
	AdcRegs.ADCTRL1.bit.SUSMOD=3;           //仿真挂起模式选择,=3立即结束
	AdcRegs.ADCTRL1.bit.ACQ_PS=0;           //SOC宽度=0+1ADCLK周期
	AdcRegs.ADCTRL1.bit.CPS=0;              //内核时钟时钟预定标=0 HSPCLK/6/1,=1 HSPCLK/6/2,ADCCLK=HSPCLK/6/1=20MHz
	AdcRegs.ADCTRL1.bit.CONT_RUN=0;         //=1连续转换模式自动回CONV00,=0起-停转换模式从停止处开始
	AdcRegs.ADCTRL1.bit.SEQ_CASC=1;         //=1级连模式,=0双排序器模式
	
	AdcRegs.ADCTRL3.bit.ADCBGRFDN=3;	    // Power up bandgap/reference circuitry
	DELAY_US(ADC_usDELAY);                    // Delay before powering up rest of ADC
	AdcRegs.ADCTRL3.bit.ADCPWDN=1;		    // Power up rest of ADC
	DELAY_US(ADC_usDELAY2);                   // Delay after powering up ADC
	AdcRegs.ADCTRL3.bit.ADCCLKPS=3;         //时钟周期倍频HSPCLK/3=25MHz
	AdcRegs.ADCTRL3.bit.SMODE_SEL=1;        //采样模式选择=1同步采样,=0序列采样
	
	AdcRegs.ADCMAXCONV.all=15;              //共16通道
	AdcRegs.ADCCHSELSEQ1.bit.CONV00=0;      //转换顺序设定
	AdcRegs.ADCCHSELSEQ1.bit.CONV01=1;
	AdcRegs.ADCCHSELSEQ1.bit.CONV02=2;
	AdcRegs.ADCCHSELSEQ1.bit.CONV03=3;
	
	AdcRegs.ADCCHSELSEQ2.bit.CONV04=4;
	AdcRegs.ADCCHSELSEQ2.bit.CONV05=5;
	AdcRegs.ADCCHSELSEQ2.bit.CONV06=6;
	AdcRegs.ADCCHSELSEQ2.bit.CONV07=7;
	
	AdcRegs.ADCCHSELSEQ3.bit.CONV08=8;
	AdcRegs.ADCCHSELSEQ3.bit.CONV09=9;
	AdcRegs.ADCCHSELSEQ3.bit.CONV10=10;
	AdcRegs.ADCCHSELSEQ3.bit.CONV11=11;
	
	AdcRegs.ADCCHSELSEQ4.bit.CONV12=12;
	AdcRegs.ADCCHSELSEQ4.bit.CONV13=13;
	AdcRegs.ADCCHSELSEQ4.bit.CONV14=14;
	AdcRegs.ADCCHSELSEQ4.bit.CONV15=15;

	AdcRegs.ADCST.bit.INT_SEQ1_CLR=1;       //清中断标志位
	AdcRegs.ADCST.bit.INT_SEQ2_CLR=1;	
	
	AdcRegs.ADCTRL2.bit.EVB_SOC_SEQ=1;      //EVB SOC触发级连(cascaded sequencer)
	AdcRegs.ADCTRL2.bit.RST_SEQ1=0;
	AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1=1;     //=1,使能SEQ1中断
	AdcRegs.ADCTRL2.bit.INT_MOD_SEQ1=0;     //SEQ1中断模式选择=1每两个SEQ1中断一次,=0每个SEQ1中断一次
	AdcRegs.ADCTRL2.bit.EVA_SOC_SEQ1=0;     //屏蔽位=0,SEQ1不能由EVA启动
	AdcRegs.ADCTRL2.bit.EXT_SOC_SEQ1=0;     //=1,外部启动SEQ1
	AdcRegs.ADCTRL2.bit.RST_SEQ2=0;
	AdcRegs.ADCTRL2.bit.SOC_SEQ2=0;         //=1,软件启动SEQ2
	AdcRegs.ADCTRL2.bit.INT_ENA_SEQ2=0;     //=1,使能SEQ2中断
	AdcRegs.ADCTRL2.bit.INT_MOD_SEQ2=0;     //SEQ2中断模式选择=1每两个SEQ2中断一次,=0每个SEQ2中断一次
	AdcRegs.ADCTRL2.bit.EVB_SOC_SEQ2=0;     //屏蔽位=0,SEQ2不能由EVB启动
	AdcRegs.ADCTRL2.bit.SOC_SEQ1=0;	
	
}	


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

⌨️ 快捷键说明

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