#include "adc.h"
//
+// Assumes PCLK == 48Mhz
//
-//
-int adcRead0_3 (void)
+void adcInit (void)
{
- AD0_CR |= AD_CR_START_NOW;
+ unsigned portLONG ulCompareMatch;
+
+ SCB_PCONP |= SCB_PCONP_PCAD0;
+ SCB_PCONP |= SCB_PCONP_PCAD1;
+
+ PCB_PINSEL0 |= PCB_PINSEL0_P06_AD10;
+ PCB_PINSEL0 |= PCB_PINSEL0_P010_AD12;
+ PCB_PINSEL0 |= PCB_PINSEL0_P012_AD13;
+ PCB_PINSEL0 |= PCB_PINSEL0_P013_AD14;
+ PCB_PINSEL0 |= PCB_PINSEL0_P015_AD15;
+
+ // configure MAT0.1 ... assumes TIMER0 already initialized and running
- while (!(AD0_DR3 & AD_DR_DONE))
- ;
+ // Calculate the match value required for 1khz ADC trigger rate
+ ulCompareMatch = configCPU_CLOCK_HZ / 1000;
- return ((AD0_DR3 & AD_DR_RESULTMASK) >> AD_DR_RESULTSHIFT);
+ // Account for prescaler, protecting against divide by zero.
+ #if portPRESCALE_VALUE != 0
+ {
+ ulCompareMatch /= ( portPRESCALE_VALUE + 1 );
+ }
+ #endif
+ T0_MR1 = ulCompareMatch;
+
+ // burst sample desired inputs triggering on MAT0.1
+ AD1_CR = AD_CR_CLKS10 | AD_CR_PDN | ((11 - 1) << AD_CR_CLKDIVSHIFT);
+ AD1_CR |= AD_CR_SEL0 | AD_CR_SEL2 | AD_CR_SEL3 | AD_CR_SEL4 | AD_CR_SEL5 | AD_CR_BURST;
+ AD1_CR |= AD_CR_START_MAT01;
}
//
-// Assumes PCLK == 48Mhz
+// Read and return X accelerometer value
//
-void adcInit (void)
+int adcReadX (void)
{
- SCB_PCONP |= SCB_PCONP_PCAD0;
+ while (!(AD1_DR3 & AD_DR_DONE)) ;
+ return ((AD1_DR3 & AD_DR_RESULTMASK) >> AD_DR_RESULTSHIFT);
+}
+
+//
+// Read and return Y accelerometer value
+//
+int adcReadY (void)
+{
+ while (!(AD1_DR4 & AD_DR_DONE)) ;
+ return ((AD1_DR4 & AD_DR_RESULTMASK) >> AD_DR_RESULTSHIFT);
+}
+
+//
+// Read and return Z accelerometer value
+//
+int adcReadZ (void)
+{
+ while (!(AD1_DR5 & AD_DR_DONE)) ;
+ return ((AD1_DR5 & AD_DR_RESULTMASK) >> AD_DR_RESULTSHIFT);
+}
- PCB_PINSEL1 |= PCB_PINSEL1_P030_AD03;
+//
+// Read and return battery voltage
+//
+int adcReadVbat (void)
+{
+ while (!(AD1_DR0 & AD_DR_DONE)) ;
+ return ((AD1_DR0 & AD_DR_RESULTMASK) >> AD_DR_RESULTSHIFT);
+}
- AD0_CR = AD_CR_CLKS10 | AD_CR_PDN | ((11 - 1) << AD_CR_CLKDIVSHIFT) | AD_CR_SEL3;
+//
+// Read and return barometric pressure
+//
+int adcReadPres (void)
+{
+ while (!(AD1_DR2 & AD_DR_DONE)) ;
+ return ((AD1_DR2 & AD_DR_RESULTMASK) >> AD_DR_RESULTSHIFT);
}