原创
ADC初始化程序
2009-1-14 18:14
3671
4
4
分类:
处理器与DSP
//ADC初始化程序
#include "DSP28_Device.h"
#define ADC_usDELAY??8000
#define ADC_usDELAY2 20
extern void DelayUs(unsigned int);
//---------------------------------------------------------------------------
// InitAdc:?
//---------------------------------------------------------------------------
// This function initializes ADC to a known state.
//
void InitAdc(void)
{
// 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_Examples.h file must contain the correct CPU clock period in
// nanoseconds. For example:
? ? ? ? EALLOW;
? ? ? ??
// ADC复位
? ? ? ? AdcRegs.ADCTRL1.bit.RESET = 1;? ? ? ? ? ? ? ? ? ? ? ? // Resets entire ADC module??
? ? ? ? asm(" RPT #10 || NOP");? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? // Provides the required delay.10 NOP
// ADC上电? ? ? ??
? ? ? ? AdcRegs.ADCTRL3.bit.ADCBGRFDN = 0x3;? ? ? ? // Power up bandgap/reference circuitry?
? ? ? ? DelayUs(ADC_usDELAY);? ?? ?? ?? ?? ?? ? // Delay before powering up rest of ADC
? ? ? ? DelayUs(ADC_usDELAY);??
? ? ? ? AdcRegs.ADCTRL3.bit.ADCPWDN = 1;? ? ? ? ? ? ? ? // Power up rest of ADC
? ? ? ? DelayUs(ADC_usDELAY2);? ?? ?? ?? ?? ?? ?// Delay after powering up ADC
? ? ? ? DelayUs(ADC_usDELAY2);
? ? ? ? DelayUs(ADC_usDELAY2);
// ADC时钟选择? ? ? ??
? ? ? ? AdcRegs.ADCTRL3.bit.EXTREF = 0;? ? ? ? ? ? ? ? ? ? ? ? // ADCREFP(2V) and ADCREFM(1V) pins are outputs for internal reference sources.
? ? ? ? AdcRegs.ADCTRL1.bit.CPS = 0;? ? ? ? ? ? ? ? ? ? ? ? // Core clock prescaler. ADCCLK = Fclk /1
? ? ? ? AdcRegs.ADCTRL3.bit.ADCCLKPS = 0x5;??? ? ? ? // Core clock divider.ADC module clock = HSPCLK/2*ADC_CKPS? ?= 75MHz/(2*5) = 7.5MHz? ?
? ? ? ? AdcRegs.ADCTRL1.bit.ACQ_PS = 0xe;? ? ? ? ? ? ? ? // S/H width in ADC module periods = 15 ADC clocks. ADC conversion frequency = 7.5/15 = 0.5M.
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? // ADC conversion time = 1/0.5 = 2us. 16 channels conversion time = 2*16 = 32us
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? // 50Hz waveform sampled 512 dot,sample cycle = 20ms/512 = 39.06us.
// ADC模式选择? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ?? ? ? ? AdcRegs.ADCTRL1.bit.SEQ_CASC = 1;? ?? ? // 1??Cascaded mode.SEQ1 and SEQ2 operate as a single 16-state sequencer (SEQ).?
? ? AdcRegs.ADCTRL3.bit.SMODE_SEL = 0;? ? ? ? ? ? ? ? // Sampling mode select. Sequential sampling mode is selected.
? ?? ? ? ? AdcRegs.ADCTRL1.bit.CONT_RUN = 0;? ?? ? // Start-stop mode.
? ?? ? ? ? AdcRegs.ADCTRL1.bit.SEQ_OVRD = 0;? ?? ? // Allows the sequencer to wrap around at the end of conversions set by MAX CONVn.
// ADC通道选择? ?? ? ? ??
? ?? ? ? ? AdcRegs.MAX_CONV.bit.MAX_CONV = 0x0f;? ? ? ? // defines the maximum number 16.
? ?? ? ? ? AdcRegs.CHSELSEQ1.all = 0x2200;? ? ? ? ? ? ? ? ? ? ? ? // ADC Input Channel Select Sequence
? ?? ? ? ? AdcRegs.CHSELSEQ2.all = 0x6644;
? ?? ? ? ? AdcRegs.CHSELSEQ3.all = 0xaa88;
? ?? ? ? ? AdcRegs.CHSELSEQ4.all = 0xeecc;
// ADC启动模式/中断模式
? ? ? ? AdcRegs.ADCTRL2.bit.EVA_SOC_SEQ1 = 0;
? ? ? ? AdcRegs.ADCTRL2.bit.EVB_SOC_SEQ = 0;
? ? ? ? AdcRegs.ADCTRL2.bit.EVB_SOC_SEQ2 = 0;
? ? ? ? AdcRegs.ADCTRL2.bit.EXT_SOC_SEQ1 = 0;
? ? ? ? AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 0;
? ? ? ? AdcRegs.ADCTRL2.bit.INT_ENA_SEQ2 = 0;
? ? ? ? AdcRegs.ADCTRL2.bit.INT_MOD_SEQ1 = 0;
? ? ? ? AdcRegs.ADCTRL2.bit.INT_MOD_SEQ2 = 0;
? ? ? ? AdcRegs.ADCTRL2.bit.RST_SEQ1 = 1;? ? ? ? ? ? ? ? // Immediately reset sequencer to state CONV00
? ? ? ? AdcRegs.ADCTRL2.bit.RST_SEQ2 = 0;
? ? ? ? AdcRegs.ADCTRL2.bit.SOC_SEQ1 = 1;? ? ? ? ? ? ? ? // Software trigger . Start SEQ1 from currently stopped position?
? ? ? ? AdcRegs.ADCTRL2.bit.SOC_SEQ2 = 0;
? ?? ? ? ? EDIS;
}? ? ? ??
//?
文章评论(0条评论)
登录后参与讨论