L3GD20 Library using FIFO and Interrupt
Fork of L3GD20_SPI by
L3GD20.h
- Committer:
- lelect
- Date:
- 2014-05-12
- Revision:
- 0:175bf093daa8
- Child:
- 1:2ebc045424af
File content as of revision 0:175bf093daa8:
#ifndef MBED_SPI #define MBED_SPI #include "mbed.h" #include "L3GD20_Resister.h" /** @file * * This is test program. */ class L3GD20 { public: L3GD20(PinName miso, PinName mosi, PinName scl, PinName cs,PinName interrupt2=NC); 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; typedef enum { 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 } FIFO_mode; typedef enum { none=0,empty,watermark,overrun } FIFOstatus; struct tagFIFO { FIFOstatus status; int level; } FIFO; struct config { //read and write resister union CTRL_REG1 CTRL_REG1; union CTRL_REG2 CTRL_REG2; union CTRL_REG3 CTRL_REG3; union CTRL_REG4 CTRL_REG4; union CTRL_REG5 CTRL_REG5; union REF_DATACAP REF_DATACAP; union OUT_TEMP OUT_TEMP; union STATUS_REG STATUS_REG; union FIFO_CTRL_REG FIFO_CTRL_REG; union INT1_CFG INT1_CFG; union INT1_TSH_XH INT1_TSH_XH; union INT1_TSH_XL INT1_TSH_XL; union INT1_TSH_YH INT1_TSH_YH; union INT1_TSH_YL INT1_TSH_YL; union INT1_TSH_ZH INT1_TSH_ZH; union INT1_TSH_ZL INT1_TSH_ZL; union INT1_DURATION INT1_DURATION; } _config; struct status { //read only resister int OUT_TEMP; int STATUS_REG; union FIFO_SRC_REG FIFO_SRC_REG; int INT1_SRC; } _status; //Class method /** Power_OnOff * * @param enable L3GD20 channel */ void start(DIRECTION enable); void start(DIRECTION enable,void (*func)(anglerrates*)); /** stop sampling */ void stop(); void sleep(); //only read data and calcurate dps void read(anglerrates* val,DIRECTION direction); //only read temperature (I don't know meanig of this data) int readTemperature(); //L3GD20mode change need reset(bypass) when filled FIFObuffor void enableFIFO(FIFO_mode mode,FIFOstatus interrupt,const int threshold); //status Update int updateFIFO(void); anglerrates _value; protected: //write command to resister void write(RESISTER reg,int val); //read resister for resister void read(RESISTER reg,int* val); //just send reboot command void reboot(); //read all configration rester void configReadOut(void); //read all status rester void statusReadOut(void); //for InterruptIn function ,call userFunction in this methed void interrupt(void); /* void datarate(uint8_t rate,uint8_t bandwidth); void setDataFormat(); void filter(uint8_t mode,uint8_t frequency); void channelSource(uint8_t channnel,uint8_t dataSelection,uint8_t interruptSelection); void FIFO(uint8_t mode,uint8_t watermark); void interrupt(uint8_t source,uint8_t threthold,uint8_t duration,uint8_t Wait); */ void (*userFunction)(anglerrates*); SPI _spi; DigitalOut _cs; InterruptIn _int2; }; #endif