00001
00002
00003 #include "global.h"
00004 #include "AT91SAM7S64.h"
00005
00006
00007 #include "rprintf.h"
00008 #include "a2d.h"
00009
00010 void a2dInit(void)
00011 {
00012
00013
00014
00015
00016 AT91C_BASE_PIOA->PIO_PER = AT91C_PIO_PA17|AT91C_PIO_PA18|AT91C_PIO_PA19|AT91C_PIO_PA20;
00017 AT91C_BASE_PIOA->PIO_ODR = AT91C_PIO_PA17|AT91C_PIO_PA18|AT91C_PIO_PA19|AT91C_PIO_PA20;
00018 AT91C_BASE_PIOA->PIO_PPUDR = AT91C_PIO_PA17|AT91C_PIO_PA18|AT91C_PIO_PA19|AT91C_PIO_PA20;
00019
00020
00021 AT91C_BASE_ADC->ADC_MR = AT91C_ADC_TRGEN_DIS |
00022 AT91C_ADC_LOWRES_10_BIT |
00023 AT91C_ADC_SLEEP_NORMAL_MODE |
00024 (0x3F<<8) |
00025 (0x08<<16) |
00026 (0x0F<<24);
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038 }
00039
00040 int a2dConvert(int channel)
00041 {
00042
00043 AT91C_BASE_ADC->ADC_CHDR = 0xFF;
00044 AT91C_BASE_ADC->ADC_CHER = 1<<channel;
00045
00046
00047 AT91C_BASE_ADC->ADC_CR = AT91C_ADC_START;
00048
00049
00050
00051 while(!(AT91C_BASE_ADC->ADC_SR & AT91C_ADC_DRDY));
00052
00053
00054 return AT91C_BASE_ADC->ADC_LCDR;
00055 }