00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00023 #include "sceptre.h"
00024 #include "accelero.h"
00025
00026
00027 #define ADC_START_CONVERSION AD0CR |= (1<<24)
00028 #define ADC_STOP_CONVERSION AD0CR &= 0xf8ffffff
00029 #define ADC_CHANNEL_123 0x0000000e
00030 #define ADC_GDR_DONE (1<<31)
00031
00032
00038 void accelero_init(int adc_clock)
00039 {
00040
00041 PINSEL1 &= 0xc0ffffff;
00042 PINSEL1 |= 0x15000000;
00043
00044
00045 AD0CR = (((Fpclk/adc_clock-1)&0xff)<<8) | (1<<21);
00046
00047 IODIR1 |= (1<<17);
00048 accelero_sleep(ACCELEROMETER_ON);
00049 }
00050
00051
00057 void accelero_sleep(int sleep)
00058 {
00059 if (sleep==ACCELEROMETER_OFF) IOCLR1 = (1<<17);
00060 else IOSET1 = (1<<17);
00061 }
00062
00063
00070 float accelero_read_one(int channel)
00071 {
00072 AD0CR &= 0xffffff00;
00073 AD0CR |= (1<<channel);
00074
00075 ADC_START_CONVERSION;
00076
00077 while ((AD0GDR&ADC_GDR_DONE)==0);
00078 ADC_STOP_CONVERSION;
00079
00080 return ((AD0GDR>>6)&0x3ff)/1024.0;
00081 }
00082
00083
00090 int accelero_read(float *p_dst)
00091 {
00092 for (int i=0; i<3; i++)
00093 {
00094 p_dst[i] = accelero_read_one(i+1);
00095 }
00096 return 3*sizeof(float);
00097 }
00098