|
发表于 2012-1-30 13:41:07
|
显示全部楼层
#define SCAN_CHANNLE_NUM 4
typedef struct{
unsigned int Data[10];
}ADC_Struct;
ADC_Struct ADC;
void Init_ADC(void)
{
CLK->PCKENR2 |= CLK_PCKENR2_ADC;
//*** ADC INITIALIZATION ***
ADC1->CSR= ADC1_CSR_EOCIE | (SCAN_CHANNLE_NUM & ADC1_CSR_CH); // AD interrupt enable, channel count
ADC1->CR1|= ADC1_CR1_CONT | ((7<<4) & ADC1_CR1_SPSEL); // continuous conversion mode, fmaster/18
ADC1->CR2 = ADC1_CR2_SCAN | ADC1_CR2_ALIGN; //Scan mode,Data Align right
ADC1->CR3 = ADC1_CR3_DBUF; //Enable ADC Data Buffer
ADC1->TDRH= 0x00; // disable Schmitt trigger on AD input
ADC1->TDRL= 0x03;
ADC1->CR1|= ADC1_CR1_ADON; // ADC on
_delay(20); // wait for stabilization (min 7 us)
ADC1->CR1|= ADC1_CR1_ADON;
}
void Start_ADC_Scan(void)
{
ADC1->CSR = ADC1_CSR_EOCIE | (SCAN_CHANNLE_NUM & ADC1_CSR_CH); // AD interrupt enable,clear end of conversion flag
ADC1->CR1 |= ADC1_CR1_ADON;
}
void Get_ADC_Data(void)
{
ADC.Data[0] = (unsigned int)(ADC1->DB0RH<<8) |ADC1->DB0RL;
ADC.Data[1] = (unsigned int)(ADC1->DB1RH<<8) |ADC1->DB1RL;
ADC.Data[2] = (unsigned int)(ADC1->DB2RH<<8) |ADC1->DB2RL;
ADC.Data[3] = (unsigned int)(ADC1->DB3RH<<8) |ADC1->DB3RL;
ADC.Data[4] = (unsigned int)(ADC1->DB4RH<<8) |ADC1->DB4RL;
ADC.Data[5] = (unsigned int)(ADC1->DB5RH<<8) |ADC1->DB5RL;
ADC.Data[6] = (unsigned int)(ADC1->DB6RH<<8) |ADC1->DB6RL;
ADC.Data[7] = (unsigned int)(ADC1->DB7RH<<8) |ADC1->DB7RL;
ADC.Data[8] = (unsigned int)(ADC1->DB8RH<<8) |ADC1->DB8RL;
ADC.Data[9] = (unsigned int)(ADC1->DB9RH<<8) |ADC1->DB9RL;
}
把Get_ADC_Data();Start_ADC_Scan();放ADC中断里就OK。
这个是ADC1的连续扫描转换程序,你把所有的ADC1改成ADC2就行。 |
|