L3GD20 Library using FIFO and Interrupt
Fork of L3GD20_SPI by
Diff: L3GD20.h
- Revision:
- 1:2ebc045424af
- Parent:
- 0:175bf093daa8
- Child:
- 2:be6daa938101
diff -r 175bf093daa8 -r 2ebc045424af L3GD20.h --- a/L3GD20.h Mon May 12 05:59:12 2014 +0000 +++ b/L3GD20.h Mon May 12 07:23:09 2014 +0000 @@ -2,10 +2,29 @@ #define MBED_SPI #include "mbed.h" #include "L3GD20_Resister.h" -/** @file - * - * This is test program. - */ +/** L3GD20(SPI) class +* +* This is the L3GD20 class. +* @code +#include "mbed.h" +#include "L3GD20.h" + +Serial pc(USBTX,USBRX);//tx,rx +L3GD20 L3GD20(p11,p12,p13,p14,p15);//miso,mosi,sck,cs,interrupt + +void interruption(anglerrates *val) +{ + printf("X:%+05d\tY:%+05d\tZ:%+05d level:%02d\r\n",(val->X),(val->Y),(val->Z),(L3GD20.FIFO.level)); +} +int main() +{ + L3GD20.start(L3GD20::XYZ,&interruption); + while(1) { + sleep(); + } +} +* @endcode +*/ class L3GD20 { public: @@ -13,8 +32,18 @@ typedef enum { null=0x00,WhoAmI=0x0F,CtrlReg1=0x20,CtrlReg2=0x21,CtrlReg3=0x22,CtrlReg4=0x23,CtrlReg5=0x24,Reference=0x25,OutTemp=0x26,StatusReg=0x27,OutXL=0x28,OutXH=0x29,OutYL=0x2A,OutYH=0x2B,OutZL=0x2C,OutZH=0x2D,FIFOCtrlReg=0x2E,FIFOSrcReg=0x2F,INT1Cfg=0x30,INT1Src=0x31,INT1ThsXH=0x32,INT1ThsXL=0x33,INT1ThsYH=0x34,INT1ThsYL=0x35,INT1ThsZH=0x36,INT1ThsZL=0x37,INT1Duration=0x38,READ=0x80 } RESISTER; + /** @enum DIRECTION + * enable direction\n + * Example...L3GD20::XY,L3GD20::XYZ + */ typedef enum { - Y=0x1,X=0x1<<1,Z=0x1<<2,XY=X|Y,XZ=X|Z,YZ=Y|Z,XYZ=X|Y|Z + Y=0x1, + X=0x1<<1, + Z=0x1<<2, + XY=X|Y, + XZ=X|Z, + YZ=Y|Z, + XYZ=X|Y|Z } DIRECTION; typedef enum { BYPASSmode=0x0,FIFOmode,STREAMmode,STREAMtoFIFOmode,BYPASStoSTREAMmode @@ -54,25 +83,48 @@ int INT1_SRC; } _status; //Class method - /** Power_OnOff - * - * @param enable L3GD20 channel + /** @fn void L3GD20::start(DIRECTION enable); + * Start command send to module + * @param enable */ void start(DIRECTION enable); + /** @fn void L3GD20::start(DIRECTION enable,void (*func)(anglerrates*)); + * Start with interrupt + * @param enable L3GD20 channel + * @param func user function(call by InterrtptIn) + */ void start(DIRECTION enable,void (*func)(anglerrates*)); - /** stop sampling + /** @fn void L3GD20::stop() + * stop sampling command send */ void stop(); + /** @fn void L3GD20::sleep() + * sleep command send + */ void sleep(); - //only read data and calcurate dps + /** @fn void L3GD20::read(anglerrates* val,DIRECTION direction) + * read angler rates with direction(L3GD20::XY)\n + * This is read and calcurate dps, reading value is set to class instanse + */ void read(anglerrates* val,DIRECTION direction); - //only read temperature (I don't know meanig of this data) + /** @fn int L3GD20::readTemperature() + * read temperature without format + * (I don't know meaning of value.) + */ int readTemperature(); - //L3GD20mode change need reset(bypass) when filled FIFObuffor - void enableFIFO(FIFO_mode mode,FIFOstatus interrupt,const int threshold); - //status Update + /** @fn void L3GD20::enableFIFO(FIFO_mode mode,FIFOstatus interrupt,const int threshold) + * @bref L3GD20mode need to reset(to bypass mode) when filled FIFObuffor + * @param mode FIFOmode(L3GD20::BYPASSmode,FIFOmode,STREAMmode,STREAMtoFIFOmode,BYPASStoSTREAMmode) + * @param interrupt cause of interrupt(L3GD20::none,empty,watermark,overrun) + * @param threshold interruption threshold(1 to 30 vaild) + */ + void enableFIFO(FIFO_mode mode,FIFOstatus interrupt,const int threshold=30); + /** @fn int L3GD20::updateFIFO(void) + * @bref Update FIFO status + * @return FIFO buffer level + */ int updateFIFO(void); - anglerrates _value; + anglerrates value;///< @brief latest angler rates protected: //write command to resister void write(RESISTER reg,int val);