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

📄 adc.c

📁 基于s3c44b0的adc数据采集程序,经过测试。
💻 C
字号:
//====================================================================
// File Name : Adc.c
// Function  : 44b0 ADC function 
// Program   : liu
// Date      : 2009-3-16
// Version   : 0.0
//====================================================================
#include <string.h>
#include "..\inc\44b.h"
#include "..\inc\44blib.h"
#include "..\inc\Adc.h"
#include "..\inc\def.h"

#define  CHANNEL_NUM 8
#define REQCNT 10              
#define ADC_FREQ 2500000
//#define ADC_FREQ   1250000
//#define LOOP 1
#define LOOP 10000
#define PCLK 40000000

int ReadAdc(int ch);	        //Return type is int, Declare Prototype function
volatile U32 preScaler;

//==================================================================================
void Test_Adc(void)
{
    int i,key;
    //int a=0,a0=0,a1=0,a2=0,a3=0,a4=0,a5=0,a6=0,a7=0; //Initialize variables
    int channel[CHANNEL_NUM];
    int selectedChannel = 0;
    
    Uart_Printf("[ ADC_IN Test ]\n");
    Uart_Printf("0. AIN0 1. AIN1 2.AIN2 3.AIN3 4.AIN4 5.AIN5 6.AIN6 7.AIN7 8.AIN0-AIN7\n\n");
    Uart_Printf("Select : ");
    key = Uart_GetIntNum();
    Uart_Printf("\n\n");    
      
    preScaler = ADC_FREQ;
    //Uart_Printf("ADC conv. freq. = %dHz\n",preScaler);
    preScaler = PCLK/ADC_FREQ -1;               //PCLK:50.7MHz
    //ADC conversion time = 5CYCLES*(1/(ADC Freq.)), ADC Freq. = PCLK/(ADCPSR+1)
    // Uart_Printf("PCLK/ADC_FREQ - 1 = %d\n",preScaler);
    
    Uart_Printf("[ AIN %d ]\n", key);
    
    switch (key) {
	case 0:
	case 1:
	case 2:
	case 3:
	case 4:
	case 5:
	case 6:
	case 7: Uart_Printf("[ AIN %d ]\n", key);
			for (i = 0; i < REQCNT; i++) {
				selectedChannel = ReadAdc(key);
				Uart_Printf("%04d\n", selectedChannel);
			}
			break;

	case 8: 
			for (i = 0; i < CHANNEL_NUM; i++) {
				channel[i] = ReadAdc(i);
				Uart_Printf("AIN%d:\t %04d\n", i, channel[i]);
			}
			break;
	}
   
    rADCCON=(0<<14)|(19<<6)|(7<<3)|(1<<2);  //stand by mode to reduce power consumption	

   // Uart_Printf("\nrADCCON = 0x%x\n", rADCCON);
}

//==================================================================================		
int ReadAdc(int ch)
{
    int i;
    static int prevCh=-1;

    rADCCON = (1<<14)|(preScaler<<6)|(ch<<3);	//setup channel

    if(prevCh!=ch)
    {
	rADCCON = (1<<14)|(preScaler<<6)|(ch<<3);   //setup channel
	for(i=0;i<LOOP;i++);	//delay to set up the next channel
	prevCh=ch;
    }
    rADCCON|=0x1;   //start ADC

    while(rADCCON & 0x1);	//check if Enable_start is low
 //   while(!(rADCCON & 0x8000));	//check if EC(End of Conversion) flag is high

    return ( (int)rADCDAT & 0x3ff );
}

//==================================================================================
volatile char end_test;

⌨️ 快捷键说明

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