Advertisement
teplofizik

lis302dl.h (SPI)

Jun 1st, 2013
268
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 6.78 KB | None | 0 0
  1. //
  2. // lis302dl.h
  3. // Описание регистров акселерометра LIS302DL
  4. // Плата STM32F4-Discovery
  5.  
  6. #ifndef _LIS302DL_H
  7. #define _LIS302DL_H
  8.  
  9.     // Регистры акселерометра
  10.     #define LIS302DL_WHO_AM_I_ADDR   0x0F // Device Identification Register
  11.     #define LIS302DL_CTRL_REG1_ADDR  0x20 // Control Register 1
  12.     #define LIS302DL_CTRL_REG2_ADDR  0x21 // Control Register 2
  13.     #define LIS302DL_CTRL_REG3_ADDR  0x22 // Interrupt Control Register
  14.     #define LIS302DL_HP_FILTER_RESET_REG_ADDR  0x23 // Dummy register.
  15.    
  16.    
  17.     // Reading at this address zeroes instantaneously the content of the internal
  18.     // high pass filter. If the high pass filter is enabled all three axes are
  19.     // instantaneously set to 0g. This allows to overcome the settling time of
  20.     // the high pass filter.
  21.    
  22.     #define LIS302DL_STATUS_REG_ADDR  0x27 // Status Register
  23.  
  24.     #define LIS302DL_OUT_X_ADDR  0x29 // X-axis output Data
  25.     #define LIS302DL_OUT_Y_ADDR  0x2B // Y-axis output Data
  26.     #define LIS302DL_OUT_Z_ADDR  0x2D // Z-axis output Data
  27.  
  28.     // Правильное содержимое WHO_AM_I
  29.     #define LIS302DL_WHO_AM_I_ID 0x3B
  30.  
  31.     // Регистр CTRL_REG1
  32.     #define LIS302DL_CTRL_REG1_DR 0x80 // Data Rate selection.
  33.     // 0 - 100 Hz output data rate
  34.     // 1 - 400 Hz output data rate
  35.    
  36.     #define LIS302DL_CTRL_REG1_PD 0x40 // Power Down control.
  37.     // 0 - power down mode
  38.     // 1 - active mode
  39.    
  40.     #define LIS302DL_CTRL_REG1_FS 0x20 // Full Scale selection.
  41.     // 0 - Typical measurement range 2.3
  42.     // 1 - Typical measurement range 9.2
  43.    
  44.     #define LIS302DL_CTRL_REG1_STP 0x10 // Self Test P Enable.
  45.     #define LIS302DL_CTRL_REG1_STM 0x08 // Self Test M Enable.
  46.     // STP | STM
  47.     // 0 | 0 | Normal mode
  48.     // 0 | 1 | Self Test M
  49.     // 1 | 0 | Self Test P
  50.    
  51.     #define LIS302DL_CTRL_REG1_ZEN 0x04 // Z axis enable.
  52.     // 0 - Z axis disabled
  53.     // 1 - Z axis enabled
  54.    
  55.     #define LIS302DL_CTRL_REG1_YEN 0x02 // Y axis enable.
  56.     // 0 - Y axis disabled
  57.     // 1 - Y axis enabled
  58.    
  59.     #define LIS302DL_CTRL_REG1_XEN 0x01 // X axis enable.
  60.     // 0 - X axis disabled
  61.     // 1 - X axis enabled
  62.  
  63.     // Регистр CTRL_REG2
  64.     #define LIS302DL_CTRL_REG2_SIM   0x80 // SPI Serial Interface Mode Selection.
  65.     // 0 - 4 wire interface
  66.     // 1 - 3 wire interface
  67.    
  68.     #define LIS302DL_CTRL_REG2_BOOT  0x40 // Reboot memory content.
  69.     // 0 - normal mode
  70.     // 1 - reboot memory content
  71.    
  72.     #define LIS302DL_CTRL_REG2_FDS   0x10 // Filtered data selection.
  73.     // 0 - internal filter bypassed
  74.     // 1 - data from internal filter sent to output register
  75.    
  76.     #define LIS302DL_CTRL_REG2_HP_FF_WU2 0x08 // High pass filter enabled for FreeFall/WakeUp#2.
  77.     // 0 - filter bypassed
  78.     // 1 - filter enabled
  79.    
  80.     #define LIS302DL_CTRL_REG2_HP_FF_WU1 0x04 // High pass filter enabled for FreeFall/WakeUp#1.
  81.     // 0 - filter bypassed
  82.     // 1 - filter enabled
  83.    
  84.     #define LIS302DL_CTRL_REG2_HP_COEFF2 0x02 // High pass filter cut-off frequency (ft) configuration.
  85.     #define LIS302DL_CTRL_REG2_HP_COEFF1 0x01 // High pass filter cut-off frequency (ft) configuration.
  86.     //
  87.     // ft= ODR[hz]/6*HP coeff
  88.     // HP coeff2 | HP coeff1 | HP coeff
  89.     // ---------------------------------
  90.     // 0 | 0 | 8
  91.     // 0 | 1 | 16
  92.     // 1 | 0 | 32
  93.     // 1 | 1 | 64
  94.     //
  95.     // HP coeff | ft[hz] | ft[hz] |
  96.     // | ODR 100Hz | ODR 400Hz |
  97.     // ----------------------------------
  98.     // 00 | 2 | 8 |
  99.     // 01 | 1 | 4 |
  100.     // 10 | 0.5 | 2 |
  101.     // 11 | 0.25 | 1 |
  102.  
  103.     // Регистр CTRL_REG3
  104.     #define LIS302DL_CTRL_REG3_IHL   0x80 // Interrupt active high/low.
  105.     // 0 - active high
  106.     // 1 - active low
  107.    
  108.     #define LIS302DL_CTRL_REG3_PP_OD 0x40 // push-pull/open-drain.
  109.     // 0 - push-pull
  110.     // 1 - open-drain
  111.    
  112.     #define LIS302DL_CTRL_REG3_I2_CFG2 0x20 // Data signal on INT2 pad control bits
  113.     #define LIS302DL_CTRL_REG3_I2_CFG1 0x10 // Data signal on INT2 pad control bits
  114.     #define LIS302DL_CTRL_REG3_I2_CFG0 0x08 // Data signal on INT2 pad control bits
  115.  
  116.     #define LIS302DL_CTRL_REG3_I1_CFG2 0x04 // Data signal on INT1 pad control bits
  117.     #define LIS302DL_CTRL_REG3_I1_CFG1 0x02 // Data signal on INT1 pad control bits
  118.     #define LIS302DL_CTRL_REG3_I1_CFG0 0x01 // Data signal on INT1 pad control bits
  119.     // I1(2)_CFG2 | I1(2)_CFG1 | I1(2)_CFG0 | INT1(2) Pad
  120.     // ----------------------------------------------------------
  121.     // 0 | 0 | 0 | GND
  122.     // 0 | 0 | 1 | FreeFall/WakeUp#1
  123.     // 0 | 1 | 0 | FreeFall/WakeUp#2
  124.     // 0 | 1 | 1 | FreeFall/WakeUp#1 or FreeFall/WakeUp#2
  125.     // 1 | 0 | 0 | Data ready
  126.     // 1 | 1 | 1 | Click interrupt
  127.  
  128.     // Регистр STATUS_REG
  129.     #define LIS302DL_STATUS_REG_ZYXOR 0x80 // X, Y and Z axis data overrun.
  130.     // 0: no overrun has occurred
  131.     // 1: new data has overwritten the previous one before it was read
  132.    
  133.     #define LIS302DL_STATUS_REG_ZOR   0x40 // Z axis data overrun.
  134.     // 0: no overrun has occurred
  135.     // 1: new data for Z-axis has overwritten the previous one before it was read
  136.    
  137.     #define LIS302DL_STATUS_REG_yOR   0x20 // y axis data overrun.
  138.     // 0: no overrun has occurred
  139.     // 1: new data for y-axis has overwritten the previous one before it was read
  140.    
  141.     #define LIS302DL_STATUS_REG_XOR   0x10 // X axis data overrun.
  142.     // 0: no overrun has occurred
  143.     // 1: new data for X-axis has overwritten the previous one before it was read
  144.    
  145.     #define LIS302DL_STATUS_REG_ZYXDA 0x08 // X, Y and Z axis new data available
  146.     // 0: a new set of data is not yet available
  147.     // 1: a new set of data is available
  148.    
  149.     #define LIS302DL_STATUS_REG_ZDA   0x04 // Z axis new data available.
  150.     // 0: a new set of data is not yet available
  151.     // 1: a new data for Z axis is available
  152.    
  153.     #define LIS302DL_STATUS_REG_YDA   0x02 // Y axis new data available
  154.     // 0: a new set of data is not yet available
  155.     // 1: a new data for Y axis is available
  156.    
  157.     #define LIS302DL_STATUS_REG_XDA   0x01 // X axis new data available
  158.     // 0: a new set of data is not yet available
  159.     // 1: a new data for X axis is available
  160.  
  161.     // Там ещё дофига, но мне надоело
  162.  
  163.     #define LIS302DL_SENSITIVITY_2_3G 18 // 18 mg/digit
  164.     #define LIS302DL_SENSITIVITY_9_2G 72 // 72 mg/digit
  165.  
  166.     #define LIS302DL_DATARATE_100 0x00
  167.     #define LIS302DL_DATARATE_400 0x80
  168.  
  169.     #define LIS302DL_LOWPOWERMODE_POWERDOWN 0x00
  170.     #define LIS302DL_LOWPOWERMODE_ACTIVE    0x40
  171.  
  172.     #define LIS302DL_FULLSCALE_2_3 0x00
  173.     #define LIS302DL_FULLSCALE_9_2 0x20
  174.  
  175.     #define LIS302DL_X_ENABLE 0x01
  176.     #define LIS302DL_Y_ENABLE 0x02
  177.     #define LIS302DL_Z_ENABLE 0x04
  178.     #define LIS302DL_XYZ_ENABLE 0x07
  179.  
  180. #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement