all three accelerometer channels working now, using burst conversion on MAT0.1
authorBdale Garbee <bdale@gag.com>
Fri, 15 Feb 2008 06:23:02 +0000 (23:23 -0700)
committerBdale Garbee <bdale@gag.com>
Fri, 15 Feb 2008 06:47:20 +0000 (23:47 -0700)
adc/adc.c
sensors/sensors.c

index cc7158eff2fa0e684b6c2a926f383ba3ea7dbcfd..a1a08d56d7618f76bd12536621eb7eee7f89d3d1 100644 (file)
--- a/adc/adc.c
+++ b/adc/adc.c
@@ -35,10 +35,28 @@ void adcInit (void)
 
 void adcStartXYZ (void)
 {
-//  AD1_CR = AD_CR_CLKS10 | AD_CR_PDN | ((11 - 1) << AD_CR_CLKDIVSHIFT) | AD_CR_SEL3 | AD_CR_SEL4 | AD_CR_SEL6 | AD_CR_BURST;
-//  AD1_CR = AD_CR_CLKS10 | AD_CR_PDN | ((11 - 1) << AD_CR_CLKDIVSHIFT) | AD_CR_SEL3 | AD_CR_BURST;
-  AD1_CR = AD_CR_CLKS10 | AD_CR_PDN | ((11 - 1) << AD_CR_CLKDIVSHIFT) | AD_CR_SEL6 | AD_CR_BURST;
-  AD1_CR |= AD_CR_START_NOW;
+  unsigned portLONG ulCompareMatch;
+
+  // configure MAT0.1 ... assumes TIMER0 already initialized and running
+
+  // Calculate the match value required for 1khz ADC trigger rate
+  ulCompareMatch = configCPU_CLOCK_HZ / 1000;
+
+  // Account for prescaler, protecting against divide by zero.
+  #if portPRESCALE_VALUE != 0
+  {
+       ulCompareMatch /= ( portPRESCALE_VALUE + 1 );
+  }
+  #endif
+  T0_MR1 = ulCompareMatch;
+  
+  // burst sample 3 channels of accelerometer triggering on MAT0.1
+  AD1_CR = AD_CR_CLKS10 | AD_CR_PDN | ((11 - 1) << AD_CR_CLKDIVSHIFT) | AD_CR_SEL3 | AD_CR_SEL4 | AD_CR_SEL6 | AD_CR_BURST;
+  AD1_CR |= AD_CR_START_MAT01;
+
+// following works for one channel repeated sampling
+//  AD1_CR = AD_CR_CLKS10 | AD_CR_PDN | ((11 - 1) << AD_CR_CLKDIVSHIFT) | AD_CR_SEL6 | AD_CR_BURST;
+//  AD1_CR |= AD_CR_START_NOW;
 
 // wait for conversion to complete
 //  while (!(AD1_DR3 & AD_DR_DONE))
@@ -51,7 +69,7 @@ void adcStartXYZ (void)
 //
 int adcReadX (void)
 {
-//  while (!(AD1_DR3 & AD_DR_DONE)) ;
+  while (!(AD1_DR3 & AD_DR_DONE)) ;
   return ((AD1_DR3 & AD_DR_RESULTMASK) >> AD_DR_RESULTSHIFT);
 }
 
@@ -60,7 +78,7 @@ int adcReadX (void)
 //
 int adcReadY (void)
 {
-//  while (!(AD1_DR4 & AD_DR_DONE)) ;
+  while (!(AD1_DR4 & AD_DR_DONE)) ;
   return ((AD1_DR4 & AD_DR_RESULTMASK) >> AD_DR_RESULTSHIFT);
 }
 
index 1f69a3647d3d82d11bb3143d54e39ff0441e7dfb..272b291b5454bb15d7a2223910754100b7c549c0 100644 (file)
@@ -62,7 +62,7 @@ portTASK_FUNCTION (vSensorsTask, pvParameters __attribute__ ((unused)))
   {
     vTaskDelayUntil (&xTickCount, 100 / portTICK_RATE_MS);
 
-    printf("tick\n");
+    // printf("tick\n");
 
     //
     //  Adjust the DAC value so we output a slow sine wave