Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: test_FXAS21002 testSensor RD-KL25Z-AGMP01_SensorStream pelion-example-frdm ... more
FXAS21002.cpp
00001 #include "mbed.h" 00002 #include "FXAS21002.h" 00003 00004 /* Register Address definitions */ 00005 #define REG_STATUS 0x00 00006 #define REG_OUT_X_MSB 0x01 00007 #define REG_OUT_X_LSB 0x02 00008 #define REG_OUT_Y_MSB 0x03 00009 #define REG_OUT_Y_LSB 0x04 00010 #define REG_OUT_Z_MSB 0x05 00011 #define REG_OUT_Z_LSB 0x06 00012 #define REG_DR_STATUS 0x07 00013 #define REG_F_STATUS 0x08 00014 #define REG_F_SETUP 0x09 00015 #define REG_F_EVENT 0x0A 00016 #define REG_INT_SRC_FLAG 0x0B 00017 #define REG_WHO_AM_I 0x0C 00018 #define REG_CTRL_REG0 0x0D 00019 #define REG_RT_CFG 0x0E 00020 #define REG_RT_SRC 0x0F 00021 #define REG_RT_THS 0x10 00022 #define REG_RT_COUNT 0x11 00023 #define REG_TEMP 0x12 00024 #define REG_CTRL_REG1 0x13 00025 #define REG_CTRL_REG2 0x14 00026 #define REG_CTRL_REG3 0x15 00027 00028 00029 FXAS21002::FXAS21002(PinName sda, PinName scl, int addr) : m_i2c(sda, scl), m_addr(addr<<1) { 00030 // activate the peripheral 00031 } 00032 00033 FXAS21002::~FXAS21002() { } 00034 00035 uint8_t FXAS21002::getStatus(void) 00036 { 00037 uint8_t status ; 00038 readRegs(REG_STATUS, &status, 1) ; 00039 return( status ) ; 00040 } 00041 00042 int16_t FXAS21002::getX(void) 00043 { 00044 uint8_t data[2] ; 00045 int16_t value ; 00046 readRegs(REG_OUT_X_MSB, &data[0], 1) ; 00047 readRegs(REG_OUT_X_LSB, &data[1], 1) ; 00048 value = (data[0] << 8) | data[1] ; 00049 return(value) ; 00050 } 00051 00052 int16_t FXAS21002::getY(void) 00053 { 00054 uint8_t data[2] ; 00055 int16_t value ; 00056 readRegs(REG_OUT_Y_MSB, &data[0], 1) ; 00057 readRegs(REG_OUT_Y_LSB, &data[1], 1) ; 00058 value = (data[0] << 8) | data[1] ; 00059 return(value) ; 00060 } 00061 00062 int16_t FXAS21002::getZ(void) 00063 { 00064 uint8_t data[2] ; 00065 int16_t value ; 00066 readRegs(REG_OUT_Z_MSB, &data[0], 1) ; 00067 readRegs(REG_OUT_Z_LSB, &data[1], 1) ; 00068 value = (data[0] << 8) | data[1] ; 00069 return(value) ; 00070 } 00071 00072 void FXAS21002::selftest(bool mode) 00073 { 00074 uint8_t value ; 00075 value = getCTRL1() ; 00076 if (mode) { 00077 value |= 0x10 ; 00078 } else { 00079 value ^= 0x10 ; 00080 } 00081 setCTRL1(value) ; 00082 } 00083 00084 void FXAS21002::activate(bool mode) 00085 { 00086 uint8_t value ; 00087 value = getCTRL1() ; 00088 if (mode) { 00089 value |= 0x02 ; 00090 } else { 00091 value ^= 0x02 ; 00092 } 00093 setCTRL1(value) ; 00094 } 00095 00096 void FXAS21002::ready(bool mode) 00097 { 00098 uint8_t value ; 00099 value = getCTRL1() ; 00100 if (mode) { 00101 value |= 0x01 ; 00102 } else { 00103 value ^= 0x01 ; 00104 } 00105 setCTRL1(value) ; 00106 } 00107 00108 uint8_t FXAS21002::getCTRL1(void) 00109 { 00110 uint8_t value ; 00111 readRegs(REG_CTRL_REG1, &value, 1) ; 00112 return(value) ; 00113 } 00114 00115 void FXAS21002::setCTRL1(uint8_t value) 00116 { 00117 uint8_t data[2] ; 00118 data[0] = REG_CTRL_REG1 ; 00119 data[1] = value ; 00120 writeRegs(data, 2) ; 00121 } 00122 00123 uint8_t FXAS21002::getCTRL2(void) 00124 { 00125 uint8_t value ; 00126 readRegs(REG_CTRL_REG2, &value, 1) ; 00127 return(value) ; 00128 } 00129 00130 void FXAS21002::setCTRL2(uint8_t value) 00131 { 00132 uint8_t data[2] ; 00133 data[0] = REG_CTRL_REG2 ; 00134 data[1] = value ; 00135 writeRegs(data, 2) ; 00136 } 00137 00138 uint8_t FXAS21002::getCTRL3(void) 00139 { 00140 uint8_t value ; 00141 readRegs(REG_CTRL_REG3, &value, 1) ; 00142 return(value) ; 00143 } 00144 00145 void FXAS21002::setCTRL3(uint8_t value) 00146 { 00147 uint8_t data[2] ; 00148 data[0] = REG_CTRL_REG3 ; 00149 data[1] = value ; 00150 writeRegs(data, 2) ; 00151 } 00152 00153 00154 void FXAS21002::readRegs(int addr, uint8_t * data, int len) { 00155 char t[1] = {addr}; 00156 m_i2c.write(m_addr, t, 1, true); 00157 m_i2c.read(m_addr, (char *)data, len); 00158 } 00159 00160 void FXAS21002::writeRegs(uint8_t * data, int len) { 00161 m_i2c.write(m_addr, (char *)data, len); 00162 }
Generated on Thu Jul 14 2022 03:46:15 by
