Davide Urbano
/
microSDreader
Working version. ADXL355 data saved to microSD.
adxl355.h
- Committer:
- DUR
- Date:
- 2017-09-29
- Revision:
- 0:e2579e8d9b13
File content as of revision 0:e2579e8d9b13:
/** ****************************************************************************** * @file adxl355.h * @author DUR * @version V1.0.0 * @date 01-Aug-2017 * @brief Header file of a library for adxl355 interface. ****************************************************************************** * @attention * * <h2><center>© COPYRIGHT(c) 2014 TD Group</center></h2> * * The information contained herein is property of TD Group S.p.A. * * Licensees are granted free, non-transferable use of the information. NO * WARRANTY of ANY KIND is provided. This heading must NOT be removed from * the file. * ****************************************************************************** */ /* Define to prevent recursive inclusion -------------------------------------*/ #ifndef __ADXL355_H #define __ADXL355_H /* Includes ------------------------------------------------------------------*/ #include <stdint.h> #include <string.h> /* Exported define -----------------------------------------------------------*/ /** @brief ID dell'accelerometro */ #define ADXL355_DEVICE_ID 0xED /** @brief Codice per effettuare il reset sw dell'accelerometro */ #define ADXL355_RESET_CODE 0x52 /** @brief Start/stop self-test */ #define ADXL355_SELF_TEST_ENABLE 0x01 #define ADXL355_SELF_TEST_DISABLE 0x00 /** @brief Indirizzi registri accelerometro */ #define ADXL355_DEVID_AD 0x00 #define ADXL355_DEVID_MST 0x01 #define ADXL355_PARTID 0x02 #define ADXL355_REVID 0x03 #define ADXL355_STATUS 0x04 #define ADXL355_FIFO_ENTRIES 0x05 #define ADXL355_TEMP2 0x06 #define ADXL355_TEMP1 0x07 #define ADXL355_XDATA3 0x08 #define ADXL355_XDATA2 0x09 #define ADXL355_XDATA1 0x0A #define ADXL355_YDATA3 0x0B #define ADXL355_YDATA2 0x0C #define ADXL355_YDATA1 0x0D #define ADXL355_ZDATA3 0x0E #define ADXL355_ZDATA2 0x0F #define ADXL355_ZDATA1 0x10 #define ADXL355_FIFO_DATA 0x11 #define ADXL355_OFFSET_X_H 0x1E #define ADXL355_OFFSET_X_L 0x1F #define ADXL355_OFFSET_Y_H 0x20 #define ADXL355_OFFSET_Y_L 0x21 #define ADXL355_OFFSET_Z_H 0x22 #define ADXL355_OFFSET_Z_L 0x23 #define ADXL355_ACT_EN 0x24 #define ADXL355_ACT_THRESH_H 0x25 #define ADXL355_ACT_THRESH_L 0x26 #define ADXL355_ACT_COUNT 0x27 #define ADXL355_FILTER 0x28 #define ADXL355_FIFO_SAMPLES 0x29 #define ADXL355_INT_MAP 0x2A #define ADXL355_SYNC 0x2B #define ADXL355_RANGE 0x2C #define ADXL355_POWER_CTL 0x2D #define ADXL355_SELF_TEST 0x2E #define ADXL355_RESET 0x2F /** @brief Maschere di bit */ #define ADXL355_READ_BYTE_MASK 0x01 #define ADXL355_WRITE_BYTE_MASK 0xFE #define ADXL355_20_BIT_MASK 0x000FFFFF #define ADXL355_12_BIT_MASK 0x0FFF #define ADXL355_RANGE_MASK 0x03 #define ADXL355_ODR_MASK 0x0F #define ADXL355_INT_POL_MASK 0x40 #define ADXL355_INT_1_MASK 0x0F #define ADXL355_INT_2_MASK 0xF0 #define ADXL355_MEAS_MASK 0x03 #define ADXL355_DRDY_OFF_MASK 0x04 #define ADXL355_SELF_TEST_MASK 0x03 /** @brief Temperature parameters */ #define ADXL355_TEMP_BIAS (float)1852.0 /* Accelerometer temperature bias(in ADC codes) at 25 Deg C */ #define ADXL355_TEMP_SLOPE (float)-9.05 /* Accelerometer temperature change from datasheet (LSB/degC) */ /* Exported typedef ----------------------------------------------------------*/ /** @brief Enumerativo per le misure attive sul sensore in un determinato momento. */ typedef enum { adxl355_acc = 0u, //Sola misura di accelerazione attiva adxl355_both, //Entrambe le misure attive (accelerazione e temperatura) adxl355_none //Nessuna misura attiva }adxl355_measure_enabled; /** @brief Enumerativo per valori di range di misura ammissibili. */ typedef enum { adxl355_2g = 1u, adxl355_4g, adxl355_8g }adxl355_range_value; /** @brief Enumerativo per valori di output data rate ammissibili. */ typedef enum { adxl355_4000hz = 0u, adxl355_2000hz, adxl355_1000hz, adxl355_500hz, adxl355_250hz, adxl355_125hz, adxl355_62p5hz, adxl355_31p25hz, adxl355_15p625hz, adxl355_7p813hz, adxl355_3p906hz }adxl355_output_datarate_value; /** @brief Enumerativo per i differenti eventi associabili ai 2 interrupt ammissibili. */ typedef enum { adxl355_rdy_en = 0u, //DATA_RDY interrupt enable on INT1/2 adxl355_full_en, //FIFO_FULL interrupt enable on INT1/2 adxl355_ovr_en, //FIFO_OVR interrupt enable on INT1/2 adxl355_act_en //Activity interrupt enable on INT1/2 }adxl355_int_event; /** @brief Struttura che setta i parametri degli interrupt sui 2 pin a disposizione. */ typedef struct adxl355_gpio_config_t { adxl355_int_event int1_evt; //evento che scatena l'interrupt 1 adxl355_int_event int2_evt; //evento che scatena l'interrupt 2 bool int_act_low; // se true gli interrupt sono attivi basso, altrimenti attivi alto }adxl355_int_config; /** @brief Struttura che definisce i parametri di configurazione ed utilizzo * dell'accelerometro */ typedef struct adxl355_handler_t { /* Range di misura */ adxl355_range_value measure_range; /* Data rate di acquisizione */ adxl355_output_datarate_value out_data_rate; /* Pin di controllo dell'accelerometro - porre a NULL se non utilizzati */ uint32_t drdy_pin; //output uint32_t int1_pin; //output uint32_t int2_pin; //output /* Configurazione interrupt */ adxl355_int_config int_config; /* Valori grezzi della accelerazione */ uint32_t raw_acc_x_value; uint32_t raw_acc_y_value; uint32_t raw_acc_z_value; /* Valore grezzo della temperatura */ uint16_t raw_temp_value; }adxl355_handler; /* Exported types ------------------------------------------------------------*/ /* Exported constants --------------------------------------------------------*/ /* Exported macro ------------------------------------------------------------*/ /* Exported function prototypes ----------------------------------------------*/ /**< Funzione che restituisce i parametri identificativi del driver */ void adxl355_driver_info(uint8_t * adxl355_driver_version, uint8_t * adxl355_driver_revision, uint8_t * adxl355_driver_patch); /**< Funzione che restituisce l'ID dell'accelerometro */ uint16_t adxl355_who_am_i(uint8_t * adxl355_device_id); /**< Funzione di inizializzazione dell'accelerometro */ uint16_t adxl355_init(adxl355_handler *adxl_init_handler); /**< Funzione di start/stop delle acquisizioni */ uint16_t adxl355_start_acquisition(adxl355_measure_enabled adxl_start); /**< Funzione per la lettura del/i dato/i acquisito/i */ uint16_t adxl355_get_data(adxl355_handler *adxl_data_handler); /**< Funzione che restituisce il valore grezzo di accelerazione lungo l'asse X */ uint32_t adxl355_raw_x_acc(adxl355_handler *adxl_xdata_handler); /**< Funzione che restituisce il valore grezzo di accelerazione lungo l'asse Y */ uint32_t adxl355_raw_y_acc(adxl355_handler *adxl_ydata_handler); /**< Funzione che restituisce il valore grezzo di accelerazione lungo l'asse Z */ uint32_t adxl355_raw_z_acc(adxl355_handler *adxl_zdata_handler); /**< Funzione che restituisce il valore grezzo di temperatura */ uint16_t adxl355_raw_temp(adxl355_handler *adxl_tdata_handler); /**< Funzione per il reset sw */ uint16_t adxl355_sw_reset(void); /**< Funzione per il self-test */ uint16_t adxl355_self_test(bool adxl_start); /* Funzione di trasferimento su bus SPI */ extern uint16_t adxl355_spi_transfer(uint8_t * rbuffer, uint32_t rlen); #endif /************************ (C) COPYRIGHT TD Group *****END OF FILE****/