00001
00002
00003
00004
00005
00006
00007
00008 #include "ad7998.h"
00009 #include "twi.h"
00010 #include <ccblkfn.h>
00011
00012 namespace ad7998{
00013
00014 const unsigned int CRR = 0;
00015 const unsigned int ASR = 1;
00016 const unsigned int CR = 2;
00017 const unsigned int CTR = 3;
00018 const unsigned int DLR1 =4;
00019 const unsigned int DHR1 =5;
00020 const unsigned int HR1 = 6;
00021 const unsigned int DLR2 =7;
00022 const unsigned int DHR2 =8;
00023 const unsigned int HR2 = 9;
00024 const unsigned int DLR3 =10;
00025 const unsigned int DHR3 =11;
00026 const unsigned int HR3 = 12;
00027 const unsigned int DLR4 =13;
00028 const unsigned int DHR4 =14;
00029 const unsigned int HR4 = 15;
00030
00031 const unsigned int ch1 = 0x0010;
00032 const unsigned int ch2 = 0x0020;
00033 const unsigned int ch3 = 0x0040;
00034 const unsigned int ch4 = 0x0080;
00035 const unsigned int ch5 = 0x0100;
00036 const unsigned int ch6 = 0x0200;
00037 const unsigned int ch7 = 0x0400;
00038 const unsigned int ch8 = 0x0800;
00039 const unsigned int fltr= 0x0008;
00040
00041 const unsigned int VinSeq = 0x70;
00042
00043
00044
00045
00046
00047 const int AD7998 = 0x20;
00048
00049
00050
00051
00052
00053 const int initLen = 3;
00054
00055
00056
00057
00058
00059 const int cmdLen = 1;
00060
00061
00062
00063
00064
00065 const unsigned char initAD7998Str[initLen] = { ad7998::CR , 0x0F, 0xF0 | ad7998::fltr };
00066
00067
00068
00069
00070 const unsigned char cmdAD7998Read[cmdLen] = { ad7998::VinSeq };
00071
00072
00073
00074
00075
00076 const int chNum = 8;
00077
00078
00079
00080
00081
00082
00083 unsigned char rxBuffer[chNum*2] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
00084
00085
00086
00087
00088
00089
00090 unsigned char rxValue[chNum*2];
00091
00092
00093 void callBack( bool rcv );
00094
00095 void init(void)
00096 {
00097 }
00098
00099 void start(void)
00100 {
00101 twi::writeAsync(
00102 AD7998,
00103 initAD7998Str,
00104 initLen,
00105 ad7998::callBack
00106 );
00107 }
00108
00109 shortfract getValue( adcChannel vin )
00110 {
00111 unsigned int imask;
00112 shortfract val;
00113 short temp;
00114 int index;
00115
00116 imask = cli();
00117
00118 index = (int)vin*2;
00119 temp = ( rxValue[index]<<8 ) + rxValue[index+1];
00120 temp &= 0x0FFF;
00121 val.v = temp << 3;
00122
00123 sti(imask);
00124
00125 return val;
00126 }
00127
00128
00129
00130
00131
00132
00133
00134 void callBack( bool rcv )
00135 {
00136 unsigned int imask;
00137
00138 imask = cli();
00139
00140 for ( int i= 0; i<chNum*2; i++ )
00141 rxValue[i] = rxBuffer[i];
00142
00143 sti(imask);
00144
00145 twi::writeReadAsync(
00146 AD7998,
00147 cmdAD7998Read,
00148 cmdLen,
00149 AD7998,
00150 rxBuffer,
00151 chNum*2,
00152 ad7998::callBack
00153 );
00154
00155 }
00156
00157 };
00158
00159
00160