Driver for AK7451 Angle Senor(SPI).

Fork of AK7451 by AKM Development Platform

Committer:
masahikofukasawa
Date:
Mon Sep 12 17:23:27 2016 +0000
Revision:
1:536cf25b0eb4
Parent:
0:56b554871e05
Child:
2:b1079549c6a1
remove unnecessary functions

Who changed what in which revision?

UserRevisionLine numberNew contents of line
masahikofukasawa 0:56b554871e05 1 #ifndef AK7451_H
masahikofukasawa 0:56b554871e05 2 #define AK7451_H
masahikofukasawa 0:56b554871e05 3
masahikofukasawa 0:56b554871e05 4 #include "mbed.h"
masahikofukasawa 0:56b554871e05 5
masahikofukasawa 0:56b554871e05 6 /**
masahikofukasawa 0:56b554871e05 7 * This is a device driver of AK7451.
masahikofukasawa 0:56b554871e05 8 *
masahikofukasawa 0:56b554871e05 9 * @note AK7451 is a high speed angle sensor IC manufactured by AKM.
masahikofukasawa 0:56b554871e05 10 *
masahikofukasawa 0:56b554871e05 11 * Example:
masahikofukasawa 0:56b554871e05 12 * @code
masahikofukasawa 0:56b554871e05 13 * #include "mbed.h"
masahikofukasawa 0:56b554871e05 14 * #include "ak7451.h"
masahikofukasawa 0:56b554871e05 15 *
masahikofukasawa 0:56b554871e05 16 *
masahikofukasawa 0:56b554871e05 17 * int main() {
masahikofukasawa 0:56b554871e05 18 * // Creates an instance of SPI
masahikofukasawa 0:56b554871e05 19 * }
masahikofukasawa 0:56b554871e05 20 * @endcode
masahikofukasawa 0:56b554871e05 21 */
masahikofukasawa 0:56b554871e05 22 class AK7451
masahikofukasawa 0:56b554871e05 23 {
masahikofukasawa 0:56b554871e05 24 public:
masahikofukasawa 0:56b554871e05 25
masahikofukasawa 0:56b554871e05 26 /**
masahikofukasawa 0:56b554871e05 27 * Available opration modes in AK7451.
masahikofukasawa 0:56b554871e05 28 */
masahikofukasawa 0:56b554871e05 29 typedef enum {
masahikofukasawa 0:56b554871e05 30 AK7451_NORMAL_MODE = 0x0000,
masahikofukasawa 0:56b554871e05 31 AK7451_USER_MODE = 0x050F,
masahikofukasawa 0:56b554871e05 32 } OperationMode;
masahikofukasawa 0:56b554871e05 33
masahikofukasawa 0:56b554871e05 34 /**
masahikofukasawa 0:56b554871e05 35 * Status of function.
masahikofukasawa 0:56b554871e05 36 */
masahikofukasawa 0:56b554871e05 37 typedef enum {
masahikofukasawa 0:56b554871e05 38 SUCCESS, /**< The function processed successfully. */
masahikofukasawa 0:56b554871e05 39 ERROR, /**< General Error */
masahikofukasawa 0:56b554871e05 40 ERROR_IN_USER_MODE,
masahikofukasawa 0:56b554871e05 41 ERROR_IN_NORMAL_MODE,
masahikofukasawa 0:56b554871e05 42 ERROR_PARITY,
masahikofukasawa 0:56b554871e05 43 ERROR_ABNORMAL_STRENGTH,
masahikofukasawa 0:56b554871e05 44 } Status;
masahikofukasawa 0:56b554871e05 45
masahikofukasawa 0:56b554871e05 46 /**
masahikofukasawa 0:56b554871e05 47 * Constructor.
masahikofukasawa 0:56b554871e05 48 *
masahikofukasawa 0:56b554871e05 49 */
masahikofukasawa 0:56b554871e05 50 AK7451();
masahikofukasawa 0:56b554871e05 51
masahikofukasawa 0:56b554871e05 52 /**
masahikofukasawa 0:56b554871e05 53 * Destructor.
masahikofukasawa 0:56b554871e05 54 *
masahikofukasawa 0:56b554871e05 55 */
masahikofukasawa 0:56b554871e05 56 ~AK7451();
masahikofukasawa 0:56b554871e05 57
masahikofukasawa 0:56b554871e05 58 /**
masahikofukasawa 0:56b554871e05 59 * begin
masahikofukasawa 0:56b554871e05 60 *
masahikofukasawa 0:56b554871e05 61 * @param *spi pointer to SPI instance
masahikofukasawa 0:56b554871e05 62 * @param *cs pointer to DigitalOut instance for CS
masahikofukasawa 0:56b554871e05 63 */
masahikofukasawa 0:56b554871e05 64 void begin(SPI *spi, DigitalOut *cs);
masahikofukasawa 0:56b554871e05 65
masahikofukasawa 0:56b554871e05 66 /**
masahikofukasawa 0:56b554871e05 67 * Check the connection.
masahikofukasawa 0:56b554871e05 68 *
masahikofukasawa 0:56b554871e05 69 * @note Connection check is performed by reading a register which has a fixed value and verify it.
masahikofukasawa 0:56b554871e05 70 *
masahikofukasawa 0:56b554871e05 71 * @return Returns SUCCESS when succeeded, otherwise returns another code.
masahikofukasawa 0:56b554871e05 72 */
masahikofukasawa 0:56b554871e05 73 Status checkConnection();
masahikofukasawa 0:56b554871e05 74
masahikofukasawa 0:56b554871e05 75 /**
masahikofukasawa 0:56b554871e05 76 * Writes data to EEPROM on the device.
masahikofukasawa 0:56b554871e05 77 * @param address EEPROM address
masahikofukasawa 0:56b554871e05 78 * @param data data to be written
masahikofukasawa 0:56b554871e05 79 * @return Returns SUCCESS when succeeded, otherwise returns another.
masahikofukasawa 0:56b554871e05 80 */
masahikofukasawa 0:56b554871e05 81 Status writeEEPROM(char address, const char *data);
masahikofukasawa 0:56b554871e05 82
masahikofukasawa 0:56b554871e05 83 /**
masahikofukasawa 0:56b554871e05 84 * Reads data from EEPROM on the device.
masahikofukasawa 0:56b554871e05 85 * @param address EEPROM address
masahikofukasawa 0:56b554871e05 86 * @param data data to read
masahikofukasawa 0:56b554871e05 87 * @return Returns SUCCESS when succeeded, otherwise returns another.
masahikofukasawa 0:56b554871e05 88 */
masahikofukasawa 0:56b554871e05 89 Status readEEPROM(char address, char *data);
masahikofukasawa 0:56b554871e05 90
masahikofukasawa 0:56b554871e05 91 /**
masahikofukasawa 0:56b554871e05 92 * Writes data to register on the device.
masahikofukasawa 0:56b554871e05 93 * @param address register address
masahikofukasawa 0:56b554871e05 94 * @param data data to be written
masahikofukasawa 0:56b554871e05 95 * @return Returns SUCCESS when succeeded, otherwise returns another.
masahikofukasawa 0:56b554871e05 96 */
masahikofukasawa 0:56b554871e05 97 Status writeRegister(char address, const char *data);
masahikofukasawa 0:56b554871e05 98
masahikofukasawa 0:56b554871e05 99 /**
masahikofukasawa 0:56b554871e05 100 * Reads data from register on the device.
masahikofukasawa 0:56b554871e05 101 * @param address register address
masahikofukasawa 0:56b554871e05 102 * @param data data to read
masahikofukasawa 0:56b554871e05 103 * @return Returns SUCCESS when succeeded, otherwise returns another.
masahikofukasawa 0:56b554871e05 104 */
masahikofukasawa 0:56b554871e05 105 Status readRegister(char address, char *data);
masahikofukasawa 0:56b554871e05 106
masahikofukasawa 0:56b554871e05 107 /**
masahikofukasawa 0:56b554871e05 108 * Sets device operation mode.
masahikofukasawa 0:56b554871e05 109 *
masahikofukasawa 0:56b554871e05 110 * @param mode device opration mode
masahikofukasawa 0:56b554871e05 111 *
masahikofukasawa 0:56b554871e05 112 * @return Returns SUCCESS when succeeded, otherwise returns another code.
masahikofukasawa 0:56b554871e05 113 */
masahikofukasawa 0:56b554871e05 114 Status setOperationMode(OperationMode mode);
masahikofukasawa 0:56b554871e05 115
masahikofukasawa 0:56b554871e05 116 /**
masahikofukasawa 0:56b554871e05 117 * Reads angle data from the device.
masahikofukasawa 0:56b554871e05 118 *
masahikofukasawa 0:56b554871e05 119 * @param angle pointer to read angle data buffer
masahikofukasawa 0:56b554871e05 120 *
masahikofukasawa 0:56b554871e05 121 * @return Returns SUCCESS when succeeded, otherwise returns another code.
masahikofukasawa 0:56b554871e05 122 */
masahikofukasawa 0:56b554871e05 123 Status readAngle(char *angle);
masahikofukasawa 0:56b554871e05 124
masahikofukasawa 0:56b554871e05 125 /**
masahikofukasawa 0:56b554871e05 126 * Measures and reads angle, magnetic flux density and abnormal state code while in the user mode.
masahikofukasawa 0:56b554871e05 127 *
masahikofukasawa 0:56b554871e05 128 * @param angle pointer to angle data buffer
masahikofukasawa 0:56b554871e05 129 * @param density magnetic flux density
masahikofukasawa 0:56b554871e05 130 * @param abnormal_state abnormal state
masahikofukasawa 0:56b554871e05 131 *
masahikofukasawa 0:56b554871e05 132 * @return Returns SUCCESS when succeeded, otherwise returns another code.
masahikofukasawa 0:56b554871e05 133 */
masahikofukasawa 0:56b554871e05 134 Status readAngleMeasureCommand(char *angle, char *density, char *abnormal_state);
masahikofukasawa 0:56b554871e05 135
masahikofukasawa 0:56b554871e05 136 /**
masahikofukasawa 0:56b554871e05 137 * Measures current angle and sets the value to EEPROM as zero angle position.
masahikofukasawa 0:56b554871e05 138 *
masahikofukasawa 0:56b554871e05 139 * @return Returns SUCCESS when succeeded, otherwise returns another code.
masahikofukasawa 0:56b554871e05 140 */
masahikofukasawa 0:56b554871e05 141 Status setAngleZero();
masahikofukasawa 0:56b554871e05 142
masahikofukasawa 0:56b554871e05 143 /**
masahikofukasawa 0:56b554871e05 144 * Sets the value to EEPROM as zero angle position.
masahikofukasawa 0:56b554871e05 145 *
masahikofukasawa 0:56b554871e05 146 * @param angle zero angle position
masahikofukasawa 0:56b554871e05 147 *
masahikofukasawa 0:56b554871e05 148 * @return Returns SUCCESS when succeeded, otherwise returns another code.
masahikofukasawa 0:56b554871e05 149 */
masahikofukasawa 0:56b554871e05 150 Status setAngleZero(const char *angle);
masahikofukasawa 0:56b554871e05 151
masahikofukasawa 0:56b554871e05 152 private:
masahikofukasawa 0:56b554871e05 153 /**
masahikofukasawa 0:56b554871e05 154 * Holds a pointer to an SPI object.
masahikofukasawa 0:56b554871e05 155 */
masahikofukasawa 0:56b554871e05 156 SPI *_spi;
masahikofukasawa 0:56b554871e05 157
masahikofukasawa 0:56b554871e05 158 /**
masahikofukasawa 0:56b554871e05 159 * Holds a DigitalOut oblject for CS;
masahikofukasawa 0:56b554871e05 160 */
masahikofukasawa 0:56b554871e05 161 DigitalOut *_cs;
masahikofukasawa 0:56b554871e05 162
masahikofukasawa 0:56b554871e05 163 /**
masahikofukasawa 0:56b554871e05 164 * Holds current mode
masahikofukasawa 0:56b554871e05 165 */
masahikofukasawa 0:56b554871e05 166 OperationMode operationMode;
masahikofukasawa 0:56b554871e05 167
masahikofukasawa 0:56b554871e05 168 /**
masahikofukasawa 0:56b554871e05 169 * Reads data from device.
masahikofukasawa 0:56b554871e05 170 * @param buf buffer to store the read data
masahikofukasawa 0:56b554871e05 171 * @param length bytes to be read
masahikofukasawa 0:56b554871e05 172 * @return Returns SUCCESS when succeeded, otherwise returns another.
masahikofukasawa 0:56b554871e05 173 */
masahikofukasawa 0:56b554871e05 174 Status read(char operation_code, char address, char *data);
masahikofukasawa 0:56b554871e05 175
masahikofukasawa 0:56b554871e05 176 /**
masahikofukasawa 0:56b554871e05 177 * Writes data to the device.
masahikofukasawa 0:56b554871e05 178 * @param data data to be written
masahikofukasawa 0:56b554871e05 179 * @param length of the data
masahikofukasawa 0:56b554871e05 180 * @return Returns SUCCESS when succeeded, otherwise returns another.
masahikofukasawa 0:56b554871e05 181 */
masahikofukasawa 0:56b554871e05 182 Status write(char operation_code, char address, const char *data);
masahikofukasawa 0:56b554871e05 183
masahikofukasawa 0:56b554871e05 184 /**
masahikofukasawa 0:56b554871e05 185 * Checks parity bits sub function
masahikofukasawa 0:56b554871e05 186 * @param data data 12bit read data
masahikofukasawa 0:56b554871e05 187 * @param parity parity bit status
masahikofukasawa 0:56b554871e05 188 * @param error error bit status
masahikofukasawa 0:56b554871e05 189 * @return Returns SUCCESS when succeeded, otherwise returns another.
masahikofukasawa 0:56b554871e05 190 */
masahikofukasawa 0:56b554871e05 191 Status parityCheckSub(const char data, const char parity, const char error);
masahikofukasawa 0:56b554871e05 192
masahikofukasawa 0:56b554871e05 193 /**
masahikofukasawa 0:56b554871e05 194 * Checks parity bits
masahikofukasawa 0:56b554871e05 195 * @param data 2 byte read data to chek parity
masahikofukasawa 0:56b554871e05 196 * @return Returns SUCCESS when succeeded, otherwise returns another.
masahikofukasawa 0:56b554871e05 197 */
masahikofukasawa 0:56b554871e05 198 Status parityCheck(const char *data);
masahikofukasawa 0:56b554871e05 199 };
masahikofukasawa 0:56b554871e05 200
masahikofukasawa 0:56b554871e05 201 #endif