工程当中需要添加 S3C2440A.s ;2440lib.c;main.c;adc.c 这四个程序。
主程序:
/*********************************************************************************************
* File name: main.c
* Author: ZXL
* Description: 3.3V输入变压器分压后,输入AD转换器转换,最后用串口打印该分压值
* History: 2013.5.9
*********************************************************************************************/
#include "def.h"
#include "option.h"
#include "2440addr.h"
#include "2440lib.h"
void dely(U32 tt)
{
U32 i;
for(;tt>0;tt--)
for(i=0;i<10000;i++);
}
void init()
{
U32 i;
U8 key;
U32 mpll_val=0;
i = 2 ;
switch ( i ) //设置2440的时钟频率
{
case 0: //200
key = 12;
mpll_val = (92<<12)|(4<<4)|(1);
break;
case 1: //300
key = 13;
mpll_val = (67<<12)|(1<<4)|(1);
break;
case 2: //400
key = 14;
mpll_val = (92<<12)|(1<<4)|(1);
break;
case 3: //440!!!
key = 14;
mpll_val = (102<<12)|(1<<4)|(1);
break;
default:
key = 14;
mpll_val = (92<<12)|(1<<4)|(1);
break;
}
//MDIV=92,PDIV=1,SDIV=1 通过配置MPLLCON,MPLL确定,即FCLK=400MHZ确定
ChangeMPllValue((mpll_val>>12)&0xff, (mpll_val>>4)&0x3f, mpll_val&3);
ChangeClockDivider(key, 12); //FCLK:HCLK:PCLK = 1:1/4:1/8 =400M:100M:50M
Port_Init();
Uart_Init(0,115200);
Uart_Select(0);
Uart_Printf("\n ADC Test begin!!!\n");
}
int main(int argc, char **argv)
{
U32 adc_value;
float m;
init();
adc_init(); /*adc初始化*/
while(1)
{
adc_value=read_adc(); /*读取转换值*/
delay(100);
m=adc_value*3.3/1024;
Uart_Printf("\n 3.3V输入变压器并经AD转换后电压为:\n");
Uart_Printf("\n ADC change result:%f\n",m);
}
}
AD转换程序:
/*********************************************************************************************
* File name: adc.c
* Author: ZXL
* Description: 3.3V输入变压器分压后,输入AD转换器转换,最后用串口打印该分压值
* History: 2013.5.9
*********************************************************************************************/
#include "def.h"
#include "option.h"
#include "2440addr.h"
#include "2440lib.h"
#define ADC_FREQ 2500000 //AD转换频率
U32 preScaler; //设置AD为几分频
void adc_init()
{
int channel=0; //选择输入通道,AIN0,对应开发板上W1可调电阻
preScaler = ADC_FREQ; /*设置分频时钟*/
Uart_Printf("\n AD转换频率为:%dHZ\n",preScaler);
preScaler = 50000000/ADC_FREQ - 1; //PCLK=50M 设置AD分频系数
Uart_Printf("\n AD分频系数PRSCVL为:%d\n",preScaler);
rADCCON = (1<<14)|(preScaler<<6)|(channel<<3);//设置通道0的
dely(100);
}
int read_adc()
{
rADCCON |= 0x01; /*设置开始AD转换*/
while(rADCCON & 0x1); //确认AD转换已经开始
while(!(rADCCON & 0x8000)); /*检查转换是否结束*/
return ( (int)rADCDAT0 & 0x3ff ); //返回AD转换后的结果
}