Daniel Delsuc
/
RM3100BB_Sample_Code
Sample program for interfacing with PNI's RM3100 Breakout Board
RM3100MagDriver.h@0:6ddf88b49483, 2017-10-26 (annotated)
- Committer:
- ddelsuc
- Date:
- Thu Oct 26 18:40:57 2017 +0000
- Revision:
- 0:6ddf88b49483
Sample program for interfacing with PNI's RM3100 Breakout Board
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
ddelsuc | 0:6ddf88b49483 | 1 | /** |
ddelsuc | 0:6ddf88b49483 | 2 | * @file RM3100MagDriver.h |
ddelsuc | 0:6ddf88b49483 | 3 | * |
ddelsuc | 0:6ddf88b49483 | 4 | * @brief RM3100 driver |
ddelsuc | 0:6ddf88b49483 | 5 | * @authors Betty Zhang, Daniel Delsuc |
ddelsuc | 0:6ddf88b49483 | 6 | * @date 03/03/2017 |
ddelsuc | 0:6ddf88b49483 | 7 | * @copyright (C) 2017 PNI Corp |
ddelsuc | 0:6ddf88b49483 | 8 | * |
ddelsuc | 0:6ddf88b49483 | 9 | * @copyright This sample code is provided "as is" without express or implied warranty. |
ddelsuc | 0:6ddf88b49483 | 10 | * |
ddelsuc | 0:6ddf88b49483 | 11 | */ |
ddelsuc | 0:6ddf88b49483 | 12 | #ifndef __RM3100_H_ |
ddelsuc | 0:6ddf88b49483 | 13 | #define __RM3100_H_ |
ddelsuc | 0:6ddf88b49483 | 14 | |
ddelsuc | 0:6ddf88b49483 | 15 | #include "main.h" |
ddelsuc | 0:6ddf88b49483 | 16 | |
ddelsuc | 0:6ddf88b49483 | 17 | |
ddelsuc | 0:6ddf88b49483 | 18 | #define MAX_I2C_WRITE 32 |
ddelsuc | 0:6ddf88b49483 | 19 | |
ddelsuc | 0:6ddf88b49483 | 20 | #define RM3100_I2C_ADDRESS_7bit 0x20 |
ddelsuc | 0:6ddf88b49483 | 21 | #define RM3100_I2C_ADDRESS_8bit 0x20 << 1 // MBED uses 8 bit address |
ddelsuc | 0:6ddf88b49483 | 22 | |
ddelsuc | 0:6ddf88b49483 | 23 | #define RM3100_MAG_REG 0x00 |
ddelsuc | 0:6ddf88b49483 | 24 | #define RM3100_BEACON_REG 0x01 |
ddelsuc | 0:6ddf88b49483 | 25 | #define RM3100_TMRC_REG 0x0B |
ddelsuc | 0:6ddf88b49483 | 26 | |
ddelsuc | 0:6ddf88b49483 | 27 | #define RM3100_REVID_REG 0x36 |
ddelsuc | 0:6ddf88b49483 | 28 | #define RM3100_TEST3_REG 0x72 |
ddelsuc | 0:6ddf88b49483 | 29 | |
ddelsuc | 0:6ddf88b49483 | 30 | #define RM3100_LROSCADJ_REG 0x63 |
ddelsuc | 0:6ddf88b49483 | 31 | |
ddelsuc | 0:6ddf88b49483 | 32 | #define RM3100_LROSCADJ_VALUE 0xA7 |
ddelsuc | 0:6ddf88b49483 | 33 | #define RM3100_SLPOSCADJ_VALUE 0x08 |
ddelsuc | 0:6ddf88b49483 | 34 | |
ddelsuc | 0:6ddf88b49483 | 35 | #define RM3100_ENABLED 0x79 |
ddelsuc | 0:6ddf88b49483 | 36 | #define RM3100_DISABLED 0x00 |
ddelsuc | 0:6ddf88b49483 | 37 | |
ddelsuc | 0:6ddf88b49483 | 38 | #define RM3100_QX2_REG 0x24 |
ddelsuc | 0:6ddf88b49483 | 39 | #define RM3100_QX1_REG 0x25 |
ddelsuc | 0:6ddf88b49483 | 40 | #define RM3100_QX0_REG 0x26 |
ddelsuc | 0:6ddf88b49483 | 41 | #define RM3100_QY2_REG 0x27 |
ddelsuc | 0:6ddf88b49483 | 42 | #define RM3100_QY1_REG 0x28 |
ddelsuc | 0:6ddf88b49483 | 43 | #define RM3100_QY0_REG 0x29 |
ddelsuc | 0:6ddf88b49483 | 44 | #define RM3100_QZ2_REG 0x2A |
ddelsuc | 0:6ddf88b49483 | 45 | #define RM3100_QZ1_REG 0x2B |
ddelsuc | 0:6ddf88b49483 | 46 | #define RM3100_QZ0_REG 0x2C |
ddelsuc | 0:6ddf88b49483 | 47 | |
ddelsuc | 0:6ddf88b49483 | 48 | #define RM3100_PNI_KEY1_REG 0x2D |
ddelsuc | 0:6ddf88b49483 | 49 | #define RM3100_PNI_KEY2_REG 0x2E |
ddelsuc | 0:6ddf88b49483 | 50 | |
ddelsuc | 0:6ddf88b49483 | 51 | #define RM3100_CCPX1_REG 0x04 |
ddelsuc | 0:6ddf88b49483 | 52 | #define RM3100_CCPX0_REG 0x05 |
ddelsuc | 0:6ddf88b49483 | 53 | #define RM3100_CCPY1_REG 0x06 |
ddelsuc | 0:6ddf88b49483 | 54 | #define RM3100_CCPY0_REG 0x07 |
ddelsuc | 0:6ddf88b49483 | 55 | #define RM3100_CCPZ1_REG 0x08 |
ddelsuc | 0:6ddf88b49483 | 56 | #define RM3100_CCPZ0_REG 0x09 |
ddelsuc | 0:6ddf88b49483 | 57 | |
ddelsuc | 0:6ddf88b49483 | 58 | #define RM3100_NOS_REG 0x0A |
ddelsuc | 0:6ddf88b49483 | 59 | |
ddelsuc | 0:6ddf88b49483 | 60 | #define CCP0 0xC8 /* 200 Cycle Count */ |
ddelsuc | 0:6ddf88b49483 | 61 | #define CCP1 0x00 |
ddelsuc | 0:6ddf88b49483 | 62 | #define NOS 0x01 /* Number of Samples for averaging*/ |
ddelsuc | 0:6ddf88b49483 | 63 | |
ddelsuc | 0:6ddf88b49483 | 64 | #define TMRC 0x04 /* Default rate 125 Hz */ |
ddelsuc | 0:6ddf88b49483 | 65 | |
ddelsuc | 0:6ddf88b49483 | 66 | /************************/ |
ddelsuc | 0:6ddf88b49483 | 67 | /* Enumerations */ |
ddelsuc | 0:6ddf88b49483 | 68 | /************************/ |
ddelsuc | 0:6ddf88b49483 | 69 | /** |
ddelsuc | 0:6ddf88b49483 | 70 | * @enum SensorPowerMode |
ddelsuc | 0:6ddf88b49483 | 71 | * |
ddelsuc | 0:6ddf88b49483 | 72 | * @brief Possible sensor power modes supported. |
ddelsuc | 0:6ddf88b49483 | 73 | * |
ddelsuc | 0:6ddf88b49483 | 74 | */ |
ddelsuc | 0:6ddf88b49483 | 75 | typedef enum { |
ddelsuc | 0:6ddf88b49483 | 76 | SensorPowerModePowerDown = 0, |
ddelsuc | 0:6ddf88b49483 | 77 | SensorPowerModeSuspend = 1, |
ddelsuc | 0:6ddf88b49483 | 78 | SensorPowerModeActive = 255, |
ddelsuc | 0:6ddf88b49483 | 79 | } SensorPowerMode; |
ddelsuc | 0:6ddf88b49483 | 80 | |
ddelsuc | 0:6ddf88b49483 | 81 | /** |
ddelsuc | 0:6ddf88b49483 | 82 | * @enum SensorStatus |
ddelsuc | 0:6ddf88b49483 | 83 | * |
ddelsuc | 0:6ddf88b49483 | 84 | * @brief Sensor status results. |
ddelsuc | 0:6ddf88b49483 | 85 | */ |
ddelsuc | 0:6ddf88b49483 | 86 | typedef enum { |
ddelsuc | 0:6ddf88b49483 | 87 | /* Valid Responses */ |
ddelsuc | 0:6ddf88b49483 | 88 | SensorOK, /**< @brief Sensor responded with expected data. */ |
ddelsuc | 0:6ddf88b49483 | 89 | SensorInitialized, /**< @brief Sensor has been initialized. */ |
ddelsuc | 0:6ddf88b49483 | 90 | |
ddelsuc | 0:6ddf88b49483 | 91 | /* Error Responses */ |
ddelsuc | 0:6ddf88b49483 | 92 | SensorUnknownError, /**< @brief An unknown error has occurred. */ |
ddelsuc | 0:6ddf88b49483 | 93 | SensorErrorNonExistant, /**< @brief Unable to communicate with sensor, sensor did not ACK. */ |
ddelsuc | 0:6ddf88b49483 | 94 | SensorErrorUnexpectedDevice, /**< @brief A different sensor was detected at the address. */ |
ddelsuc | 0:6ddf88b49483 | 95 | |
ddelsuc | 0:6ddf88b49483 | 96 | SensorStatusPending = 255, /**< @brief Reserved for internal used */ |
ddelsuc | 0:6ddf88b49483 | 97 | } SensorStatus; |
ddelsuc | 0:6ddf88b49483 | 98 | |
ddelsuc | 0:6ddf88b49483 | 99 | #endif /* __RM3100_H_ */ |
ddelsuc | 0:6ddf88b49483 | 100 |