ARM ADC程序设计

ARM ADC程序设计

模拟信号:时间上连续,数值上也连续,数字信号:时间和数值上是离散的,而离散信号只有01

S3c2440内部有8A/D转换通道AIN0~AIN7,但是转换器只有一个,从8路中选出一路进行转换,转换精度10(0~1024-1),转换频率500kSPS(每秒采样500),在mini2440AIN4,5,6,7,用作了触摸屏通道YMYPXMXPAIN0连接可变电阻

ARM ADC程序设计_第1张图片

AIN0为模拟信号输入通道,电压作为模拟信号输入,ADC程序流程:

初始化---->启动(CPU告诉AD硬件做某项工作)---->转换结束(查询,中断)----->读取转换值

初始化:选择转换通道----->设置转换频率 SEL_MUX选择转换通道,PRSCEN1表示使用分频器做频率设置,PRSCVL为具体分频器的值,ECFLG转换结束。

ARM ADC程序设计_第2张图片

数据在0--9

ARM ADC程序设计_第3张图片

使用可调电阻作为输入ADC转换程序:
#define ADC_FREQ 2500000
//#define ADC_FREQ   1250000


volatile U32 preScaler;

void adc_init(void);
int ReadAdc(int channel);
static void cal_cpu_bus_clk(void);
void Set_Clk(void);
void beep_init(void);
void beep_run(void);

void delay(int times) {
    int i,j;
    for(i=0;i>12)&0xff, (mpll_val>>4)&0x3f, mpll_val&3);   //set the register--rMPLLCON
	ChangeClockDivider(key, 12);    //the result of rCLKDIVN [0:1:0:1] 3-0 bit
	cal_cpu_bus_clk();    //HCLK=100M   PCLK=50M
}
static void cal_cpu_bus_clk(void) {
	static U32 cpu_freq;
    static U32 UPLL;
	
	U32 val;
	U8 m, p, s;
	
	val = rMPLLCON;
	m = (val>>12)&0xff;
	p = (val>>4)&0x3f;
	s = val&3;

	//(m+8)*FIN*2 不要超出32位数!
	FCLK = ((m+8)*(FIN/100)*2)/((p+2)*(1<>1)&3;
	p = val&1;	
	val = rCAMDIVN;
	s = val>>8;
	
	switch (m) {
	case 0:
		HCLK = FCLK;
		break;
	case 1:
		HCLK = FCLK>>1;
		break;
	case 2:
		if(s&2)
			HCLK = FCLK>>3;
		else
			HCLK = FCLK>>2;
		break;
	case 3:
		if(s&1)
			HCLK = FCLK/6;
		else
			HCLK = FCLK/3;
		break;
	}
	
	if(p)
		PCLK = HCLK>>1;
	else
		PCLK = HCLK;
	
	if(s&0x10)
		cpu_freq = HCLK;
	else
		cpu_freq = FCLK;
		
	val = rUPLLCON;
	m = (val>>12)&0xff;
	p = (val>>4)&0x3f;
	s = val&3;
	UPLL = ((m+8)*FIN)/((p+2)*(1<>1):UPLL;
}

void beep_init(void) {
    rGPBCON &= ~(0x3<<0);
    rGPBCON |=  (0x1<<0);
}
void beep_run(void) {
    rGPBDAT |= (0x1<<0);
    delay(5000);
    rGPBDAT &= (0x0<<0);
    delay(5000);
}


你可能感兴趣的:(arm嵌入式)