From 364c8190eed3a8339542303243370f1da8fee1dd Mon Sep 17 00:00:00 2001 From: Bdale Garbee Date: Thu, 14 Feb 2008 23:23:02 -0700 Subject: [PATCH] all three accelerometer channels working now, using burst conversion on MAT0.1 --- adc/adc.c | 30 ++++++++++++++++++++++++------ sensors/sensors.c | 2 +- 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/adc/adc.c b/adc/adc.c index cc7158e..a1a08d5 100644 --- 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); } diff --git a/sensors/sensors.c b/sensors/sensors.c index 1f69a36..272b291 100644 --- a/sensors/sensors.c +++ b/sensors/sensors.c @@ -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 -- 2.30.2