hw_adc.c 1.65 KB
#include "os_config.h"


#include "c_def.h"
#include "debug.h"
#include "oem.h"


#if 1//def KEY_SCAN_ENABLE

#include "regmap.h"
#include "hw_adc.h"
#include "hw_pll.h"

#if 0
//#define BUS_CLKS        (SystemClock/2)
#endif


//#define ADC_CLK         (2*1000*1000) //2 mHz
#define ADC_CLK           (2*1000*100) //200 kHz


//BUS_CLKS = ADC_CLK * ( X + 1 ) * 2
//X = (BUS_CLKS - ADC_CLK * 2)/(ADC_CLK * 2)
//Note: ADC_CLK_DIV != 0
#define ADC_CLK_DIV     (BUS_CLKS - ADC_CLK * 2)/(ADC_CLK * 2)


void hw_adc_init(void)
{
	volatile U32 tmp, val;

#if 0
    //** canneled **//
#else
	MISC_ADC_CONTROLs *adc_config;
	tmp = REG_MISC_ADC_CTL;
	adc_config = (MISC_ADC_CONTROLs *) &tmp;
	
	//clk/2, channel 0
	//adc_config->regAdcCtl_clkDiv = 4;

	//32 mHz
	adc_config->regAdcCtl_clkDiv = 0x3FF;  //2.6 ms/int
	//adc_config->regAdcCtl_clkDiv = 0x1FF;  //1.3 ms/int
	//adc_config->regAdcCtl_clkDiv = 0x0FF;  //0.68 ms/int

	

    #if 0 //def LOW_CONSUMPTION_MODE
	adc_config->regAdcCtl_adcen = 0;
    #else
	adc_config->regAdcCtl_adcen = 1;
    #endif

    #ifdef ADC_INT_ENABLE
	adc_config->regAdc_int_en = 1;
    #else
	adc_config->regAdc_int_en = 0;
    #endif

    #if 1 //single-ended
	adc_config->regAdcCtl_diff = 0;
	adc_config->regAdcCtl_df = 0;
    #else
    adc_config->regAdcCtl_diff = 1;
	adc_config->regAdcCtl_df = 1;  
    #endif
	adc_config->regAdcCtl_addr = 0; //adc0: 0, adc1: 8, adc2: 1, adc3: 9

	REG_MISC_ADC_CTL = tmp;

	//loopdelay(10);
	adc_config->regAdcCtl_start	= 1;
	REG_MISC_ADC_CTL = tmp;
    
	//while (1)
	{
		asm("nop");
	}
#endif

}

 
void adc_close(void)
{
	//BUS_CLK/2(for CPU 32kHz)
	REG_MISC_ADC_CTL =0x0 ; // bit2 is disable adc
}
#endif //KEY_SCAN_ENABLE