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.
TLE5012B_REG.h
- Committer:
- hudakz
- Date:
- 2020-09-19
- Revision:
- 0:4b76b1dc05cd
File content as of revision 0:4b76b1dc05cd:
/*! * \name TLE5012B_REG.h - Mbed port of Arduino library for the TLE5012B angle sensor. * \author Infineon Technologies AG (Dr.Olaf Filies) * \copyright 2019 Infineon Technologies AG * \version 2.0.1 * \brief GMR-based angle sensor for angular position sensing in automotive applications * This library include the register read and bit separation function. * \details Ported to Mbed by Zoltan Hudak 2020-08 * * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the * following conditions are met: * * Redistributions of source code must retain the above copyright notice, this list of conditions and the following * disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided with the distribution. * * Neither the name of the copyright holders nor the names of its contributors may be used to endorse or promote * products derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, * WHETHER IN CONTRACT, STRICT LIABILITY,OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * */ #ifndef TLE5012B_REG_H #define TLE5012B_REG_H #include "mbed.h" #include "TLE5012B.h" #define MAX_NUM_REG 0x16 //!< defines the value for temporary data to read all readable registers using namespace TLE5012; class TLE5012B_REG: public TLE5012B { public: /*! * Automatic calibration of offset and amplitude synchronicity for applications * with full-turn. Only 1 LSB corrected at each update. CRC check of calibration * registers is automatically disabled if AUTOCAL activated. */ enum calibrationMode { noAutoCal = 0x0,//!< noAutoCal = no auto-calibration mode1, //!< mode1 update every angle update cycle (FIR_MD setting) mode2, //!< mode2 update every 1.5 revolutions mode3 //!< mode3 update every 11.25° }; /*! * List of possible interface types * witch are preset by fuses and can * be changed into each other */ enum interfaceType { IIF = 0, //!< IIF Incremental Interface (IIF) PWM, //!< PWM Pulse-Width-Modulation (PWM) HSM, //!< HSM Hall Switch Mode (HSM) SPC, //!< SPC Short-PWM-Code (SPC) SSC //!< SSC Synchronous Serial Communication (SSC) }; /*! * List of possible Sensor types and PCB variants * with and without attached XMC2Go */ enum sensorType { TLE5012B_E1000= 0x0,//!< TLE5012B_E1000 Sensor2Go variant TLE5012B_E3005, //!< TLE5012B_E3005 TLE5012B_E5000, //!< TLE5012B_E5000 Sensor2Go variant TLE5012B_E5020, //!< TLE5012B_E5020 TLE5012B_E9000, //!< TLE5012B_E9000 Sensor2Go variant }; //using TLE5012B::TLE5012B; //!< Using the inherited constructor struct stat_t //!< Status register 0x00 { bool RDST; //!< bits 15:15 Read status uint8_t SNR; //!< bits 14:13 Slave number bool NOGMRA; //!< bits 12:12 No valid GMR angle value bool NOGMRXY; //!< bits 11:11 No valid GMR XY values bool SROM; //!< bits 10:10 Status ROM bool SADCT; //!< bits 9:9 Status ADC Test bool Reserved1; //!< bits 8:8 bool SMAGOL; //!< bits 7:7 Status magnitude out of Limit bool SXYOL; //!< bits 6:6 Status X,Y Data out of Limit bool SOV; //!< bits 5:5 Status overflow bool SDSPU; //!< bits 4:4 Status digital signal processing unit bool SFUSE; //!< bits 3:3 Status fuse CRC bool SVR; //!< bits 2:2 Status voltage regulator bool SWD; //!< bits 1:1 Status Watch dog bool SRST; //!< bits 0:0 Status Reset uint16_t reg; //!< the register value bool fetch_SRST(uint16_t reg) {SRST = (reg & 0x1);return (SRST);} //!< status reset bool fetch_SWD(uint16_t reg) {SWD = (reg & 0x2) >> 1;return (SWD);} //!< status watch dog bool fetch_SVR(uint16_t reg) {SVR = (reg & 0x4) >> 2;return (SVR);} //!< status voltage regulator bool fetch_SFUSE(uint16_t reg) {SFUSE = (reg & 0x8) >> 3;return (SFUSE);} //!< status fuses bool fetch_SDSPU(uint16_t reg) {SDSPU = (reg & 0x10) >> 4;return (SDSPU);} //!< status digital signal processing unit bool fetch_SXYOL(uint16_t reg) {SXYOL = (reg & 0x20) >> 5;return (SXYOL);} //!< status overflow bool fetch_SOV(uint16_t reg) {SOV = (reg & 0x40) >> 6;return (SOV);} //!< status X/Y data out limit bool fetch_SMAGOL(uint16_t reg) {SMAGOL = (reg & 0x80) >> 7;return (SMAGOL);} //!< status magnitude out limit bool fetch_Reserved1(uint16_t reg) {Reserved1 = (reg & 0x100) >> 8;return (Reserved1);} //!< reserved bool fetch_SADCT(uint16_t reg) {SADCT = (reg & 0x200) >> 9;return (SADCT);} //!< status ADC test bool fetch_SROM(uint16_t reg) {SROM = (reg & 0x400) >> 10;return (SROM);} //!< status ROM bool fetch_NOGMRXY(uint16_t reg) {NOGMRXY = (reg & 0x800) >> 11;return (NOGMRXY);} //!< no valid GMR XY Values bool fetch_NOGMRA(uint16_t reg) {NOGMRA = (reg & 0x1000) >> 12;return (NOGMRA);} //!< no valid GMR Angle Value uint8_t fetch_SNR(uint16_t reg) {SNR = (reg & 0x6000) >> 13;return (SNR);} //!< slave number bool fetch_RDST(uint16_t reg) {RDST = (reg & 0x8000) >> 15;return (RDST);} //!< read status }; struct acstat_t //!< Activation Status register offset 0x01 { uint8_t Reserved1; //!< bits 15:11 bool ASFRST; //!< bits 10:10 Activation of Firmware Reset bool ASADCT; //!< bits 9:9 Enable ADC Test vector Check bool Reserved2; //!< bits 8:8 bool ASVEGMAG; //!< bits 7:7 Activation of Magnitude Check bool ASVECXY; //!< bits 6:6 Activation of X,Y Out of Limit-Check bool ASOV; //!< bits 5:5 Enable of DSPU Overflow Check bool ASDSPU; //!< bits 4:4 Activation DSPU BIST bool ASFUSE; //!< bits 3:3 Activation Fuse CRC bool ASVR; //!< bits 2:2 Enable Voltage regulator Check bool ASWD; //!< bits 1:1 Enable DSPU Watch dog bool ASRST; //!< bits 0:0 Activation of Hardware Reset uint16_t reg; //!< the register value bool fetch_ASRST(uint16_t reg) {ASRST = (reg & 0x1);return (ASRST);} bool fetch_ASWD(uint16_t reg) {ASWD = (reg & 0x2) >> 1;return (ASWD);} bool fetch_ASVR(uint16_t reg) {ASVR = (reg & 0x4) >> 2;return (ASVR);} bool fetch_ASFUSE(uint16_t reg) {ASFUSE = (reg & 0x8) >> 3;return (ASFUSE);} bool fetch_ASDSPU(uint16_t reg) {ASDSPU = (reg & 0x10) >> 4;return (ASDSPU);} bool fetch_ASOV(uint16_t reg) {ASOV = (reg & 0x20) >> 5;return (ASOV);} bool fetch_ASVECXY(uint16_t reg) {ASVECXY = (reg & 0x40) >> 6;return (ASVECXY);}; bool fetch_ASVEGMAG(uint16_t reg) {ASVEGMAG = (reg & 0x80) >> 7;return (ASVEGMAG);} bool fetch_Reserved2(uint16_t reg) {Reserved2 = (reg & 0x100) >> 8;return (Reserved2);} bool fetch_ASADCT(uint16_t reg) {ASADCT = (reg & 0x200) >> 9;return (ASADCT);} bool fetch_ASFRST(uint16_t reg) {ASFRST = (reg & 0x400) >> 10;return (ASFRST);} uint8_t fetch_Reserved1(uint16_t reg) {Reserved1 = (reg & 0xF800) >> 11;return (Reserved1);} }; struct aval_t //!< Angle Value register offset 0x02 { uint16_t ANGVAL; //!< bits 14:0 Calculated Angle Value (signed 15-bit) bool RDAV; //!< bits 15:15 Read Status, Angle Value uint16_t reg; //!< the register value bool fetch_ANGVAL(uint16_t reg) {ANGVAL = (reg & 0x7FFF);return (ANGVAL);} uint16_t fetch_RDAV(uint16_t reg) {RDAV = (reg & 0x8000) >> 15;return (RDAV);} }; struct aspd_t //!< Angle Speed register offset 0x03 { uint16_t ANGSPD; //!< bits 14:0 Signed value, where the sign bit [14] indicates the direction of the rotation. bool RDAS; //!< bits 15:15 Read Status, Angle Speed uint16_t reg; //!< the register value bool fetch_ANGSPD(uint16_t reg) {ANGSPD = (reg & 0x7FFF);return (ANGSPD);} uint16_t fetch_RDAS(uint16_t reg) {RDAS = (reg & 0x8000) >> 15;return (RDAS);} }; struct arev_t //!< Angle Revolution register offset 0x04 { int16_t REVOL; //!< bits 8:0 Revolution counter. Increments for every full rotation in counter-clockwise direction uint16_t FCNT; //!< bits 14:9 Internal frame counter. Increments every update period bool RDREV; //!< bits 15:15 Read Status, Revolution uint16_t reg; //!< the register value uint16_t fetch_FCNT(uint16_t reg) {FCNT = (reg & 0x7E00) >> 9;return (FCNT);} //!< Frame Counter bool fetch_RDREV(uint16_t reg) {RDREV = (reg & 0x8000) >> 15;return (RDREV);} //!< Read Status, Revolution int16_t fetch_REVOL(uint16_t reg) { REVOL = (reg & 0xFF); if (REVOL & 0x100) { REVOL = REVOL * -1; } return (REVOL); } }; struct fsync_t //!< Frame Synchronization register offset 0x05 { uint16_t FSYNC; //!< bits 15:9 Frame Synchronization Counter Value int16_t TEMPR; //!< bits 8:0 Signed offset compensated temperature value. uint16_t reg; //!< the register value int16_t fetch_TEMPR(uint16_t reg) { TEMPR = (reg & 0xFF); if (TEMPR & 0x100) { TEMPR = TEMPR * -1; } return (TEMPR); } uint16_t fetch_FSYNC(uint16_t reg) { FSYNC = (reg & 0xFE00) >> 9; return (FSYNC); } }; struct mod1_t //!< MOD_1 Interface Mode1 register offset 0x06 { uint8_t FIRMD; //!< bits 15:14 Update Rate Setting uint16_t Reserverd1; //!< bits 13:5 bool CLKSEL; //!< bits 4:4 Switch to external clock at start-up only. bool Reserverd2; //!< bits 3:3 bool DSPUHOLD; //!< bits 2:2 If DSPU is on hold, no watch dog reset is performed by DSPU uint8_t IIFMOD; //!< bits 1:0 Incremental Interface Mode uint16_t reg; //!< the register value uint8_t fetch_IIFMOD(uint16_t reg) {IIFMOD = (reg & 0x3);return (IIFMOD);} bool fetch_DSPUHOLD(uint16_t reg) {DSPUHOLD = (reg & 0x4) >> 2;return (DSPUHOLD);} uint16_t fetch_Reserverd1(uint16_t reg) {Reserverd1 = (reg & 0x8) >> 3;return (Reserverd1);} bool fetch_CLKSEL(uint16_t reg) {CLKSEL = (reg & 0x10) >> 4;return (CLKSEL);} bool fetch_Reserverd2(uint16_t reg) {Reserverd2 = (reg & 0x3FE0) >> 5;return (Reserverd2);} uint8_t fetch_FIRMD(uint16_t reg) {FIRMD = (reg & 0x6000) >> 13;return (FIRMD);} }; struct sil_t //!< SIL register offset 0x07 { bool FILTPAR; //!< bits 15:15 bool FILTINV; //!< bits 14:14 The raw X-signal is routed also to the raw Y-signal input of the filter so SIN and COS signal should be identical. uint8_t Reserverd1; //!< bits 13:11 The X- and Y-signals are inverted. The angle output is then shifted by 180°. bool FUSEREL; //!< bits 10:10 Triggers reload of default values from laser fuses into configuration registers. uint8_t Reserverd2; //!< bits 9:7 bool ADCTVEN; //!< bits 6:6 Sensor elements are internally disconnected and test voltages are connected to ADCs. uint8_t ADCTVY; //!< bits 5:3 Test vector X uint8_t ADCTVX; //!< bits 2:0 Test vector Y uint16_t reg; //!< the register value uint8_t fetch_ADCTVX(uint16_t reg) {ADCTVX = (reg & 0x7);return (ADCTVX);} uint8_t fetch_ADCTVY(uint16_t reg) {ADCTVY = (reg & 0x38) >> 3;return (ADCTVY);} bool fetch_ADCTVEN(uint16_t reg) {ADCTVEN = (reg & 0x40) >> 6;return (ADCTVEN);} uint8_t fetch_Reserverd1(uint16_t reg) {Reserverd1 = (reg & 0x380) >> 7;return (Reserverd1);} bool fetch_FUSEREL(uint16_t reg) {FUSEREL = (reg & 0x400) >> 10;return (FUSEREL);} uint8_t fetch_Reserverd2(uint16_t reg) {Reserverd2 = (reg & 0x3800) >> 11;return (Reserverd2);} bool fetch_FILTINV(uint16_t reg) {FILTINV = (reg & 0x4000) >> 14;return (FILTINV);} bool fetch_FILTPAR(uint16_t reg) {FILTPAR = (reg & 0x8000) >> 15;return (FILTPAR);} }; struct mod2_t //!< MOD_2 Interface Mode2 register offset 0x08 { bool Reserverd1; //!< bits 15:15 uint16_t ANGRANGE; //!< bits 14:4 Changes the representation of the angle output by multiplying the output with a factor ANG_RANGE/128. bool ANGDIR; //!< bits 3:3 Inverts angle and angle speed values and revolution counter behavior. bool PREDICT; //!< bits 2:2 Prediction of angle value based on current angle speed uint8_t AUTOCAL; //!< bits 1:0 Automatic calibration of offset and amplitude synchronicity for applications with full-turn. uint16_t reg; //!< the register value uint8_t fetch_AUTOCAL(uint16_t reg) {AUTOCAL = (reg & 0x3);return (AUTOCAL);} bool fetch_PREDICT(uint16_t reg) {PREDICT = (reg & 0x4) >> 2;return (PREDICT);} bool fetch_ANGDIR(uint16_t reg) {ANGDIR = (reg & 0x8) >> 3;return (ANGDIR);} uint16_t fetch_ANGRANGE(uint16_t reg) {ANGRANGE = (reg & 0x7FF0) >> 4;return (ANGRANGE);} bool fetch_Reserverd1(uint16_t reg) {Reserverd1 = (reg & 0x8000) >> 15;return (Reserverd1);} }; struct mod3_t //!< MOD_3 Interface Mode3 register offset 0x09 { uint16_t ANG_BASE; //!< bits 15:4 Sets the 0° angle position (12 bit value). Angle base is factory-calibrated to make the 0° direction parallel to the edge of the chip. bool SPIKEF; //!< bits 3:3 Filters voltage spikes on input pads (IFC, SCK and CSQ). bool SSCOD; //!< bits 2:2 SSC-Interface Data Pin Output Mode uint8_t PADDRV; //!< bits 1;0 Configuration of Pad-Driver uint16_t reg; //!< the register value uint8_t fetch_PADDRV(uint16_t reg) {PADDRV = (reg & 0x3);return (PADDRV);} bool fetch_SSCOD(uint16_t reg) {SSCOD = (reg & 0x4) >> 2;return (SSCOD);} bool fetch_SPIKEF(uint16_t reg) {SPIKEF = (reg & 0x8) >> 3;return (SPIKEF);} uint16_t fetch_ANG_BASE(uint16_t reg) {ANG_BASE = (reg & 0xFFF0) >> 4;return (ANG_BASE);} }; struct offx_t //!< Offset X offset 0x0a { int16_t XOFFSET; //!< bits 15:4 12-bit signed integer value of raw X-signal offset correction at 25°C. uint8_t Reserverd1; //!< bits 3:0 uint16_t reg; //!< the register value uint8_t fetch_Reserverd1(uint16_t reg) {Reserverd1 = (reg & 0xF);return (Reserverd1);} int16_t fetch_XOFFSET(uint16_t reg) { XOFFSET = ((reg & 0xFFF0) >> 4); if (XOFFSET & 0x800) { XOFFSET = XOFFSET * -1; } return (XOFFSET); } }; struct offy_t //!< Offset Y offset 0x0b { int16_t YOFFSET; //!< bits 15:4 12-bit signed integer value of raw Y-signal offset correction at 25°C. uint8_t Reserverd1; //!< bits 3:0 uint16_t reg; //!< the register value uint8_t fetch_Reserverd1(uint16_t reg) {Reserverd1 = (reg & 0xF);return (Reserverd1);} int16_t fetch_YOFFSET(uint16_t reg) { YOFFSET = ((reg & 0xFFF0) >> 4); if (YOFFSET & 0x800) { YOFFSET = YOFFSET * -1; } return (YOFFSET); } }; struct synch_t { //!< Synchronicity offset 0x0c int16_t SYNCH; //!< bits 15:4 12-bit signed integer value of amplitude synchronicity uint8_t Reserverd1; //!< bits 3:0 uint16_t reg; //!< the register value uint8_t fetch_Reserverd1(uint16_t reg) {Reserverd1 = (reg & 0xF);return (Reserverd1);} int16_t fetch_SYNCH(uint16_t reg) { SYNCH = ((reg & 0xFFF0) >> 4); if (SYNCH & 0x800) { SYNCH = SYNCH * -1; } return (SYNCH); } }; struct ifab_t { //!< IFAB register offset 0x0d int16_t ORTHO; //!< bits 15:4 Orthogonality Correction of X and Y Components bool FIRUDR; //!< bits 3:3 Initial filter update rate (FIR) bool IFABOD; //!< bits 2:2 IFA,IFB,IFC Output Mode uint8_t IFADHYST; //!< bits 1:0 Hysteresis (multi-purpose) uint16_t reg; //!< the register value uint8_t fetch_IFADHYST(uint16_t reg) {IFADHYST = (reg & 0x3);return (IFADHYST);} bool fetch_IFABOD(uint16_t reg) {IFABOD = (reg & 0x4) >> 2;return (IFABOD);} bool fetch_FIRUDR(uint16_t reg) {FIRUDR = (reg & 0x8) >> 3;return (FIRUDR);} int16_t fetch_ORTHO(uint16_t reg) { ORTHO = ((reg & 0xFFF0) >> 4); if (ORTHO & 0x800) { ORTHO = ORTHO * -1; } return (ORTHO); } }; struct mod4_t { //!< MOD_4 Interface Mode4 register offset 0x0e int8_t TCOXT; //!< bits 15:9 7-bit signed integer value of X-offset temperature coefficient. uint8_t HSMPLP; //!< bits 8:5 Hall Switch mode (multi-purpose) uint8_t IFABRES; //!< bits 4:3 IIF resolution (multi-purpose) bool Reserverd1; //!< bits 2:2 uint8_t IFMD; //!< bits 1:0 Interface Mode on IFA,IFB,IFC uint16_t reg; //!< the register value uint8_t fetch_IFMD(uint16_t reg) {IFMD = (reg & 0x3);return (IFMD);} bool fetch_Reserverd1(uint16_t reg) {Reserverd1 = (reg & 0x4) >> 2;return (Reserverd1);} uint8_t fetch_IFABRES(uint16_t reg) {IFABRES = (reg & 0x18) >> 3;return (IFABRES);} uint8_t fetch_HSMPLP(uint16_t reg) {HSMPLP = (reg & 0x1E0) >> 5;return (HSMPLP);} int8_t fetch_TCOXT(uint16_t reg) { TCOXT = ((reg & 0x7E00) >> 9); if (TCOXT & 0x8000) { TCOXT = TCOXT * -1; } return (TCOXT); } }; struct tcoy_t { //!< TCO_Y Temperature Coefficient register offset 0x0f int8_t TCOYT; //!< bits 15:9 7-bit signed integer value of Y-offset temperature coefficient. bool SBIST; //!< bits 8:8 Startup-BIST uint16_t CRCPAR; //!< bits 7:0 CRC of Parameters uint16_t reg; //!< the register value uint16_t fetch_CRCPAR(uint16_t reg) {TCOYT = (reg & 0x7F);return (TCOYT);} bool fetch_SBIST(uint16_t reg) {SBIST = (reg & 0x80) >> 8;return (SBIST);} int8_t fetch_TCOYT(uint16_t reg) { TCOYT = ((reg & 0x7E00) >> 9); if (TCOYT & 0x8000) { TCOYT = TCOYT * -1; } return (TCOYT); } }; struct adc_t { //!< ADC_X offset 0x10, ADC_Y offset 0x11 int16_t ADCX; //!< bits 15:0 ADC value of X-GMR int16_t ADCY; //!< bits 15:0 ADC value of Y-GMR }; struct dmag_t { //!< D_Mag vector magnitude offset 0x14 uint8_t Reserverd1; //!< bits 15:10 uint16_t MAG; //!< bits 9:0 Unsigned Angle Vector Magnitude after X, Y error compensation (due to temperature). uint16_t reg; //!< the register value uint16_t fetch_MAG(uint16_t reg) {MAG = (reg & 0x3FF);return (MAG);} uint8_t fetch_Reserverd1(uint16_t reg) {Reserverd1 = (reg & 0xFC00) >> 10;return (Reserverd1);} }; struct traw_t { //!< T_RAW temperature raw data offset 0x15 bool TTGL; //!< bits 15:15 Temperature Sensor Raw-Value Toggle toggles after every new temperature value uint8_t Reserverd1; //!< bits 14:10 uint16_t TRAW; //!< bits 9:0 Temperature Sensor Raw-Value at ADC without offset uint16_t reg; //!< the register value bool fetch_TRAW(uint16_t reg) {TRAW = (reg & 0x3FF);return (TRAW);} uint8_t fetch_Reserverd1(uint16_t reg) {Reserverd1 = (reg & 0xFC00) >> 10;return (Reserverd1);} uint16_t fetch_TTGL(uint16_t reg) {TTGL = (reg & 0x8000) >> 15;return (TTGL);} }; struct iifcnt_t { //!< IIF counter value offset 0x20 bool Reserverd1; //!< bits 15:14 uint16_t IIFCNT; //!< bits 14:0 14 bit counter value of IIF increments uint16_t reg; //!< the register value uint16_t fetch_IIFCNT(uint16_t reg) {IIFCNT = (reg & 0x7FFF);return (IIFCNT);} bool fetch_Reserverd1(uint16_t reg) {Reserverd1 = (reg & 0x8000) >> 15;return (Reserverd1);} }; struct t250_t { //!< register T250 offset 0x30 int16_t T250; //!< bits 15:9 Signed offset value at 25°C temperature; 1dig=0.36°C. uint16_t Reserverd1; //!< bit 8:0 uint16_t reg; //!< the register value int16_t fetch_T250(uint16_t reg) {T250 = (reg & 0x1FFF);return (T250);} uint16_t fetch_Reserverd1(uint16_t reg) {Reserverd1 = (reg & 0xFE00) >> 9;return (Reserverd1);} }; typedef struct { uint16_t registers[MAX_NUM_REG]; //!< raw register memory interfaceType interface; //!< enum identify the Interface type sensorType sensorBoard; //!< enum identify the PCM board type char interfaceName[4]; char sensorName[16]; const char* nameOfRegister[MAX_NUM_REG] = { "STAT ","ACSTAT","AVAL ","ASPD ","AREV ", "FSYNC ","MOD1 ","SIL ","MOD2 ","MOD3 ", "OFFX ","OFFY ","SYNCH ","IFAB ","MOD4 ", "TCOY ","ADCX ","ADCY ","DMAG ","TRAW ", "IIFCNT","T250 " }; struct stat_t stat; struct acstat_t acstat; struct aval_t aval; struct aspd_t aspd; struct arev_t arev; struct fsync_t fsync; struct mod1_t mod1; struct sil_t sil; struct mod2_t mod2; struct mod3_t mod3; struct offx_t offx; struct offy_t offy; struct synch_t synch; struct ifab_t ifab; struct mod4_t mod4; struct tcoy_t tcoy; struct adc_t adc; struct dmag_t dmag; struct traw_t traw; struct iifcnt_t iifcnt; struct t250_t t250; } regSensor_t; regSensor_t sensorRegister; //!< sensor register read and separation /*! * Function reads all readable sensor registers * and separates the information fields. This function * is needed for finding the selected interface type. * @param [in,out] sensorRegister point to the sensor register structure * @return CRC error type */ errorTypes readSensorType(); /*! * Function identifies the current set interface type * according some characteristic register settings * @return CRC error type */ errorTypes identifyInterfaceType(); /*! * Functions switches between all possible interface types. * ATTENTION: The different interfaces support not always all * values, see documentation for the ability of each interface. * If you want to be save, than choose the default SSC interface * which always supports all possible parameter. * @param iface type of interface to switch to * @return CRC error type */ errorTypes writeInterfaceType(interfaceType iface); /*! * Function reset the Sensor to fuse defaults * @return CRC error type */ errorTypes resetFirmware(); /*! * Function set the sensors calibration mode. Keep in mind, * not all Sensor interface setups have the autocalibration * switched on, so maybe you have to set it explicitly. * @param [in] calibrationMode the auto calibration mode to set * @return CRC error type */ errorTypes setCalibration(calibrationMode calMode); private: /*! * Identify the sensor interface and PCB board */ void _identify(); }; #endif