| | |
| | | * Version : $Revision:$ |
| | | * Date : $Date:$ |
| | | * Description : LIS3DH driver file |
| | | * |
| | | * |
| | | * HISTORY: |
| | | * Date | Modification | Author |
| | | * 24/06/2011 | Initial Revision | Fabio Tota |
| | |
| | | |
| | | //int main(void) |
| | | //{ |
| | | // delay_init(); //延时函数初始化 |
| | | // delay_init(); //延时函数初始化 |
| | | // uart_init(115200); //串口初始化为115200 |
| | | // IIC2_Init(); |
| | | // delay_ms(100); |
| | | // while(1) |
| | | // { |
| | | // LIS3DH_Data_Init(); |
| | | // delay_ms(1000); |
| | | // } |
| | | // |
| | | // LIS3DH_Data_Init(); |
| | | // delay_ms(1000); |
| | | // } |
| | | // |
| | | //} |
| | | |
| | | |
| | |
| | | #define ARM_BIT_8 0 |
| | | |
| | | #if ARM_BIT_8 |
| | | //如下数据类型是在8位机上定义的,在其它平台(比如32位)可能存在差别,需要根据实际情况修改 。 |
| | | //如下数据类型是在8位机上定义的,在其它平台(比如32位)可能存在差别,需要根据实际情况修改 。 |
| | | typedef unsigned char u8_m; /* 无符号8位整型变量*/ |
| | | typedef signed char s8_m; /* 有符号8位整型变量*/ |
| | | typedef unsigned int u16_m; /* 无符号16位整型变量*/ |
| | |
| | | typedef float fp32_m; /* 单精度浮点数(32位长度)*/ |
| | | typedef double fp64_m; /* 双精度浮点数(64位长度)*/ |
| | | #else |
| | | //如下数据类型是在32位机上定义的,在其它平台(比如8位)可能存在差别,需要根据实际情况修改 。 |
| | | //如下数据类型是在32位机上定义的,在其它平台(比如8位)可能存在差别,需要根据实际情况修改 。 |
| | | typedef unsigned char u8_m; /* 无符号8位整型变量*/ |
| | | typedef signed char s8_m; /* 有符号8位整型变量*/ |
| | | typedef unsigned short u16_m; /* 无符号16位整型变量*/ |
| | |
| | | |
| | | s8_m mir3da_register_read(u8_m ReadAddr, u8_m *data_m, u8_m Len) |
| | | { |
| | | |
| | | mir3da_ReadOneByte(ReadAddr); |
| | | |
| | | |
| | | mir3da_ReadOneByte(ReadAddr); |
| | | |
| | | } |
| | | |
| | | s8_m mir3da_register_write(u8_m ReadAddr, u8_m data_m) |
| | | { |
| | | |
| | | mir3da_WriteOneByte(ReadAddr,data_m); |
| | | |
| | | |
| | | mir3da_WriteOneByte(ReadAddr,data_m); |
| | | |
| | | } |
| | | |
| | | s8_m mir3da_register_mask_write(u8_m ReadAddr, u8_m mask, u8_m data) |
| | | { |
| | | int res=0; |
| | | unsigned char tmp_data=0; |
| | | |
| | | |
| | | res = mir3da_register_read(ReadAddr, &tmp_data, 1); |
| | | tmp_data &= ~mask; |
| | | tmp_data &= ~mask; |
| | | tmp_data |= data & mask; |
| | | res |= mir3da_register_write(ReadAddr, tmp_data); |
| | | |
| | | |
| | | return 0; |
| | | } |
| | | |
| | | |
| | | //void delay_us(uint32_t nTimer) |
| | | //{ |
| | | // uint32_t i=0; |
| | | // for(i=0;i<nTimer;i++){ |
| | | // __NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP(); |
| | | // __NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP(); |
| | | // __NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP(); |
| | | // __NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP(); |
| | | // __NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP(); |
| | | // __NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP(); |
| | | // __NOP();__NOP();__NOP();__NOP(); |
| | | // } |
| | | //} |
| | | static void delay_us(uint32_t nTimer) |
| | | { |
| | | uint32_t i=0; |
| | | for(i=0;i<nTimer;i++){ |
| | | __NOP(); |
| | | __NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP(); |
| | | __NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP(); |
| | | __NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP(); |
| | | __NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP(); |
| | | __NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP(); |
| | | __NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP(); |
| | | |
| | | |
| | | } |
| | | } |
| | | AxesRaw_t lis2dhdata; |
| | | |
| | | //OLED初始化IIC |
| | | uint8_t t11; |
| | | void IIC2_Init(void) |
| | | { |
| | | { |
| | | // GPIO_InitTypeDef GPIO_InitStructure= {0}; |
| | | // __HAL_RCC_GPIOA_CLK_ENABLE(); |
| | | // |
| | | // |
| | | // GPIO_InitStructure.Pin = GPIO_PIN_2|GPIO_PIN_3; |
| | | // GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_OD ; //开漏输出 |
| | | // GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_HIGH; |
| | | // HAL_GPIO_Init(GPIOA, &GPIO_InitStructure); |
| | | // HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2|GPIO_PIN_3,GPIO_PIN_SET); //PB6,PB7 输出高 |
| | | |
| | | //IIC引脚MK配置PIN10 SDA ,PIN11 SCL |
| | | |
| | | //IIC引脚MK配置PIN10 SDA ,PIN11 SCL |
| | | io_pin_mux_set(SDA_PIN, IO_FUNC0); |
| | | io_pin_mux_set(SCL_PIN, IO_FUNC0); |
| | | |
| | | gpio_pin_set_dir(SDA_PIN , GPIO_DIR_OUT, 1); |
| | | io_open_drain_set(SDA_PIN, 1); |
| | | io_pull_set(SDA_PIN , IO_PULL_UP, IO_PULL_UP_NONE);//输出高阻态 |
| | | |
| | | gpio_pin_set_dir(SCL_PIN , GPIO_DIR_OUT, 1); |
| | | io_open_drain_set(SCL_PIN, 1);//设置开漏输出 |
| | | io_pull_set(SCL_PIN , IO_PULL_UP, IO_PULL_UP_NONE); |
| | | |
| | | |
| | | |
| | | gpio_pin_set_dir(SDA_PIN , GPIO_DIR_OUT, 1); |
| | | //io_open_drain_set(SDA_PIN, 1); |
| | | io_pull_set(SDA_PIN , IO_PULL_UP, IO_PULL_UP_LEVEL2);//输出高阻态 |
| | | |
| | | gpio_pin_set_dir(SCL_PIN , GPIO_DIR_OUT, 1); |
| | | //io_open_drain_set(SCL_PIN, 1);//设置开漏输出 |
| | | io_pull_set(SCL_PIN , IO_HIGH_Z, IO_PULL_UP_NONE); |
| | | } |
| | | |
| | | uint8_t lisid; |
| | | uint8_t lisidtemp; |
| | | |
| | | void Accelerometer_Init() |
| | | void Accelerometer_Init() |
| | | { |
| | | |
| | | LIS3DH_GetWHO_AM_I(&lisidtemp); |
| | | LIS3DH_GetWHO_AM_I(&lisidtemp); |
| | | lisid=(uint16_t)lisidtemp; |
| | | |
| | | |
| | | if(lisid == 0x33) |
| | | { |
| | | LIS3DH_Data_Init(); |
| | |
| | | |
| | | } |
| | | |
| | | void mir3da_init() |
| | | void mir3da_init() |
| | | { |
| | | u8_m data_m = 0; |
| | | int i; |
| | | int threshold = 0; |
| | | |
| | | |
| | | //softreset |
| | | mir3da_register_write(REG_SPI_CONFIG, 0x24); |
| | | delay_us(20000); |
| | | u8_m data_m = 0; |
| | | int i; |
| | | int threshold = 0; |
| | | |
| | | mir3da_register_write(REG_RESOLUTION_RANGE, 0x00); //0x0F; +/-2G,14bit |
| | | mir3da_register_write(REG_ODR_AXIS, 0x05); //0x10; ODR=31.25hz(step counter minimum ODR) |
| | | mir3da_register_write(REG_MODE_BW, 0x04); //0x11; suspend mode, osr=1x, bw=1/10odr, autosleep disable |
| | | |
| | | //load_offset_from_filesystem(offset_x, offset_y, offset_z); //pseudo-code |
| | | |
| | | //private register, just do it. |
| | | mir3da_register_write(0x7F, 0x83); |
| | | mir3da_register_write(0x7F, 0x69); |
| | | mir3da_register_write(0x7F, 0xBD); |
| | | //softreset |
| | | mir3da_register_write(REG_SPI_CONFIG, 0x24); |
| | | delay_us(20000); |
| | | |
| | | //don't pull up sd0 pin |
| | | if(i2c_addr == 0x26){ |
| | | mir3da_register_mask_write(0x8C, 0x40, 0x00); |
| | | } |
| | | mir3da_register_write(REG_RESOLUTION_RANGE, 0x00); //0x0F; +/-2G,14bit |
| | | mir3da_register_write(REG_ODR_AXIS, 0x05); //0x10; ODR=31.25hz(step counter minimum ODR) |
| | | mir3da_register_write(REG_MODE_BW, 0x04); //0x11; suspend mode, osr=1x, bw=1/10odr, autosleep disable |
| | | |
| | | mir3da_set_active_interrupt_enable(1); |
| | | |
| | | g_com_map[IMU_THRES]=0x14; |
| | | //load_offset_from_filesystem(offset_x, offset_y, offset_z); //pseudo-code |
| | | |
| | | //private register, just do it. |
| | | mir3da_register_write(0x7F, 0x83); |
| | | mir3da_register_write(0x7F, 0x69); |
| | | mir3da_register_write(0x7F, 0xBD); |
| | | |
| | | //don't pull up sd0 pin |
| | | if(i2c_addr == 0x26) { |
| | | mir3da_register_mask_write(0x8C, 0x40, 0x00); |
| | | } |
| | | |
| | | mir3da_set_active_interrupt_enable(1); |
| | | |
| | | g_com_map[IMU_THRES]=0x14; |
| | | // LIS3DH_WriteReg(LIS3DH_INT1_THS, (uint8_t)g_com_map[IMU_THRES]); /* INT1_THS(32h): ?????? 0x10: 16*2(FS) 0x20: 32*16(FS) */ |
| | | mir3da_register_write(REG_ACTIVE_THS,(uint8_t)g_com_map[IMU_THRES]); |
| | | |
| | | delay_us(10); |
| | | |
| | | mir3da_set_enable(1); |
| | | |
| | | mir3da_set_step_counter_open(1); |
| | | mir3da_register_write(REG_ACTIVE_THS,(uint8_t)g_com_map[IMU_THRES]); |
| | | |
| | | delay_us(10); |
| | | |
| | | mir3da_set_enable(1); |
| | | |
| | | mir3da_set_step_counter_open(1); |
| | | |
| | | } |
| | | |
| | | |
| | | void LIS3DH_Data_Init() |
| | | void LIS3DH_Data_Init() |
| | | { |
| | | //uint8_t buffer[26]; |
| | | |
| | | uint8_t response; |
| | | //uint8_t buffer[26]; |
| | | |
| | | uint8_t response; |
| | | // uint8_t lisidtemp; |
| | | |
| | | LIS3DH_WriteReg(LIS3DH_CTRL_REG1, 0x37); /* CTRL_REG1(20h): ??sensor,???????? ODR 25HZ */ |
| | | LIS3DH_WriteReg(LIS3DH_CTRL_REG2, 0x03); /* CTRL_REG2(21h): IA1?IA2 ?????? bc */ |
| | | |
| | | LIS3DH_WriteReg(LIS3DH_CTRL_REG3, 0x40); /* CTRL_REG3(22h): 0x80 ???????INT_1 INT_2 */ |
| | | LIS3DH_WriteReg(LIS3DH_CTRL_REG4, 0x08); /* CTRL_REG4(23h): ???,????,???+/-2G,?????? */ |
| | | LIS3DH_WriteReg(LIS3DH_INT1_CFG, 0xaa); /* INT1_CFG(30h): ??,6D X/Y/Z???????? */ |
| | | g_com_map[IMU_THRES]=2; |
| | | LIS3DH_WriteReg(LIS3DH_INT1_THS, (uint8_t)g_com_map[IMU_THRES]); /* INT1_THS(32h): ?????? 0x10: 16*2(FS) 0x20: 32*16(FS) */ |
| | | LIS3DH_WriteReg(LIS3DH_INT1_DURATION, 0x01); /* INT1_DURATION(33h): 1LSB=1/ODR ??ODR=100HZ ??1LSB=10ms ???? 1s,??100->0x64 */ |
| | | /* Start sensor */ |
| | | LIS3DH_WriteReg(0x20, 0x5f); /* CTRL_REG1(20h): Start sensor at ODR 100Hz Low-power mode */ |
| | | |
| | | |
| | | // Read ID |
| | | LIS3DH_GetWHO_AM_I(&lisidtemp); |
| | | |
| | | LIS3DH_WriteReg(LIS3DH_CTRL_REG1, 0x37); /* CTRL_REG1(20h): ??sensor,???????? ODR 25HZ */ |
| | | LIS3DH_WriteReg(LIS3DH_CTRL_REG2, 0x03); /* CTRL_REG2(21h): IA1?IA2 ?????? bc */ |
| | | |
| | | LIS3DH_WriteReg(LIS3DH_CTRL_REG3, 0x40); /* CTRL_REG3(22h): 0x80 ???????INT_1 INT_2 */ |
| | | LIS3DH_WriteReg(LIS3DH_CTRL_REG4, 0x08); /* CTRL_REG4(23h): ???,????,???+/-2G,?????? */ |
| | | LIS3DH_WriteReg(LIS3DH_INT1_CFG, 0xaa); /* INT1_CFG(30h): ??,6D X/Y/Z???????? */ |
| | | g_com_map[IMU_THRES]=2; |
| | | LIS3DH_WriteReg(LIS3DH_INT1_THS, (uint8_t)g_com_map[IMU_THRES]); /* INT1_THS(32h): ?????? 0x10: 16*2(FS) 0x20: 32*16(FS) */ |
| | | LIS3DH_WriteReg(LIS3DH_INT1_DURATION, 0x01); /* INT1_DURATION(33h): 1LSB=1/ODR ??ODR=100HZ ??1LSB=10ms ???? 1s,??100->0x64 */ |
| | | /* Start sensor */ |
| | | LIS3DH_WriteReg(0x20, 0x5f); /* CTRL_REG1(20h): Start sensor at ODR 100Hz Low-power mode */ |
| | | |
| | | |
| | | // Read ID |
| | | LIS3DH_GetWHO_AM_I(&lisidtemp); |
| | | // lisid=(uint16_t)lisidtemp; |
| | | |
| | | |
| | | |
| | | //get Acceleration Raw data |
| | | |
| | | //get Acceleration Raw data |
| | | // response=LIS3DH_GetAccAxesRaw(&data); |
| | | //print data values |
| | | delay_us(10); |
| | | //print data values |
| | | delay_us(10); |
| | | // if(response==1) |
| | | // { |
| | | // |
| | | // |
| | | // printf("传感器原始值:x=%d, y=%d, z=%d\r\n", lis2dhdata.AXIS_X, lis2dhdata.AXIS_Y, lis2dhdata.AXIS_Z); |
| | | // printf( "处理后的加速度值Accel:[x]%dmg,[y]%dmg,[z]%dmg\r\n", |
| | | // (int16_t)((float)lis2dhdata.AXIS_X*4/65536*1000), |
| | | // (int16_t)((float)lis2dhdata.AXIS_Y*4/65536*1000), |
| | | // printf( "处理后的加速度值Accel:[x]%dmg,[y]%dmg,[z]%dmg\r\n", |
| | | // (int16_t)((float)lis2dhdata.AXIS_X*4/65536*1000), |
| | | // (int16_t)((float)lis2dhdata.AXIS_Y*4/65536*1000), |
| | | // (int16_t)((float)lis2dhdata.AXIS_Z*4/65536*1000)); |
| | | // |
| | | // |
| | | // } |
| | | |
| | | } |
| | | void LIS3DH_ENTER_STY_Init() |
| | | void LIS3DH_ENTER_STY_Init() |
| | | { |
| | | //uint8_t buffer[26]; |
| | | |
| | | uint8_t response; |
| | | uint8_t lisidtemp; |
| | | //set ODR (turn ON device) |
| | | LIS3DH_SetODR(LIS3DH_ODR_10Hz); |
| | | //set PowerMode |
| | | LIS3DH_SetMode(LIS3DH_POWER_DOWN); |
| | | //set Fullscale |
| | | LIS3DH_SetFullScale(LIS3DH_FULLSCALE_2); |
| | | LIS3DH_SetInt2Pin(LIS3DH_I1_INT2_ON_PIN_INT1_ENABLE); |
| | | //uint8_t buffer[26]; |
| | | |
| | | uint8_t response; |
| | | uint8_t lisidtemp; |
| | | //set ODR (turn ON device) |
| | | LIS3DH_SetODR(LIS3DH_ODR_10Hz); |
| | | //set PowerMode |
| | | LIS3DH_SetMode(LIS3DH_POWER_DOWN); |
| | | //set Fullscale |
| | | LIS3DH_SetFullScale(LIS3DH_FULLSCALE_2); |
| | | LIS3DH_SetInt2Pin(LIS3DH_I1_INT2_ON_PIN_INT1_ENABLE); |
| | | //LIS3DH_SetTriggerInt(LIS3DH_TRIG_INT2); |
| | | // LIS3DH_WriteReg(0x34,0xff); |
| | | // LIS3DH_WriteReg(0x35,0x7f); |
| | | // LIS3DH_WriteReg(0x36,0x20); |
| | | //set axis Enable |
| | | LIS3DH_SetAxis(LIS3DH_X_DISABLE | LIS3DH_Y_DISABLE | LIS3DH_Y_DISABLE); |
| | | // Read ID |
| | | //LIS3DH_GetWHO_AM_I(&lisidtemp); |
| | | //set axis Enable |
| | | LIS3DH_SetAxis(LIS3DH_X_DISABLE | LIS3DH_Y_DISABLE | LIS3DH_Y_DISABLE); |
| | | // Read ID |
| | | //LIS3DH_GetWHO_AM_I(&lisidtemp); |
| | | // lisid=(uint16_t)lisidtemp; |
| | | // printf("LIS3DH ID: %x \r\n",lisid); |
| | | //get Acceleration Raw data |
| | | //get Acceleration Raw data |
| | | // response=LIS3DH_GetAccAxesRaw(&data); |
| | | //print data values |
| | | //HAL_Delay(100);yuan |
| | | delay_us(100000); |
| | | //print data values |
| | | //HAL_Delay(100);yuan |
| | | delay_us(100000); |
| | | // if(response==1) |
| | | // { |
| | | // |
| | | // |
| | | // printf("传感器原始值:x=%d, y=%d, z=%d\r\n", lis2dhdata.AXIS_X, lis2dhdata.AXIS_Y, lis2dhdata.AXIS_Z); |
| | | // printf( "处理后的加速度值Accel:[x]%dmg,[y]%dmg,[z]%dmg\r\n", |
| | | // (int16_t)((float)lis2dhdata.AXIS_X*4/65536*1000), |
| | | // (int16_t)((float)lis2dhdata.AXIS_Y*4/65536*1000), |
| | | // printf( "处理后的加速度值Accel:[x]%dmg,[y]%dmg,[z]%dmg\r\n", |
| | | // (int16_t)((float)lis2dhdata.AXIS_X*4/65536*1000), |
| | | // (int16_t)((float)lis2dhdata.AXIS_Y*4/65536*1000), |
| | | // (int16_t)((float)lis2dhdata.AXIS_Z*4/65536*1000)); |
| | | // |
| | | // |
| | | // } |
| | | |
| | | } |
| | |
| | | |
| | | //enable/disable the chip |
| | | void mir3da_set_enable(int enable) //开启使能 |
| | | { |
| | | if(enable) |
| | | mir3da_register_mask_write(REG_MODE_BW, 0x80, 0x00); //power on |
| | | else |
| | | mir3da_register_mask_write(REG_MODE_BW, 0x80, 0x80); |
| | | |
| | | delay_us(100000); |
| | | { |
| | | if(enable) |
| | | mir3da_register_mask_write(REG_MODE_BW, 0x80, 0x00); //power on |
| | | else |
| | | mir3da_register_mask_write(REG_MODE_BW, 0x80, 0x80); |
| | | |
| | | delay_us(100000); |
| | | } |
| | | |
| | | //Read three axis data, 2g range, counting 12bit, 1G=1000mg=1024lsb |
| | | void mir3da_read_raw_data(short *x, short *y, short *z) |
| | | { |
| | | u8_m tmp_data[6] = {0}; |
| | | |
| | | mir3da_register_read(REG_ACC_X_LSB, tmp_data, 6); |
| | | |
| | | mir3da_register_read(REG_ACC_X_LSB, tmp_data, 6); |
| | | |
| | | *x = ((short)(tmp_data[1] << 8 | tmp_data[0]))>> 4; |
| | | *y = ((short)(tmp_data[3] << 8 | tmp_data[2]))>> 4; |
| | | *z = ((short)(tmp_data[5] << 8 | tmp_data[4]))>> 4; |
| | | *z = ((short)(tmp_data[5] << 8 | tmp_data[4]))>> 4; |
| | | } |
| | | |
| | | void mir3da_read_data(short *x, short *y, short *z) |
| | | { |
| | | u8_m tmp_data[6] = {0}; |
| | | |
| | | mir3da_register_read(REG_ACC_X_LSB, tmp_data, 6); |
| | | |
| | | mir3da_register_read(REG_ACC_X_LSB, tmp_data, 6); |
| | | |
| | | *x = ((short)(tmp_data[1] << 8 | tmp_data[0])) >> 4 - offset_x; |
| | | *y = ((short)(tmp_data[3] << 8 | tmp_data[2])) >> 4 - offset_y; |
| | |
| | | //open active interrupt |
| | | void mir3da_set_active_interrupt_enable(int enable) |
| | | { |
| | | if(enable){ |
| | | mir3da_register_write(REG_ACTIVE_DUR, 0x00); //持续时间 |
| | | if(enable) { |
| | | mir3da_register_write(REG_ACTIVE_DUR, 0x00); //持续时间 |
| | | // mir3da_register_write(REG_ACTIVE_THS, 0x3); //阈值 |
| | | mir3da_register_write(REG_INT_MAP1, 0x04 ); |
| | | mir3da_register_write(REG_INT_SET1, 0x87); |
| | | } |
| | | else{ |
| | | mir3da_register_write(REG_INT_MAP1, 0x04 ); |
| | | mir3da_register_write(REG_INT_SET1, 0x87); |
| | | } |
| | | else { |
| | | mir3da_register_write(REG_INT_SET1,0x00 ); |
| | | mir3da_register_write(REG_INT_MAP1,0x00 ); |
| | | } |
| | | mir3da_register_write(REG_INT_MAP1,0x00 ); |
| | | } |
| | | } |
| | | |
| | | void mir3da_set_step_counter_open(int enable) //开启步数计数 |
| | | { |
| | | if(enable){ |
| | | mir3da_register_write(REG_STEP_CONGIF1, 0x01); |
| | | if(enable) { |
| | | mir3da_register_write(REG_STEP_CONGIF1, 0x01); |
| | | mir3da_register_write(REG_STEP_CONGIF2, 0x62); |
| | | mir3da_register_write(REG_STEP_CONGIF3, 0x46); |
| | | mir3da_register_write(REG_STEP_CONGIF4, 0x32); |
| | | mir3da_register_write(REG_STEP_FILTER, 0xa2); |
| | | } |
| | | else{ |
| | | mir3da_register_write(REG_STEP_FILTER, 0xa2); |
| | | } |
| | | else { |
| | | mir3da_register_write(REG_STEP_FILTER, 0x22); |
| | | } |
| | | } |
| | | } |
| | | |
| | | void mir3da_reset_step_counter(void) |
| | | { |
| | | mir3da_register_mask_write(REG_RESET_STEP, 0x80, 0x80); |
| | | mir3da_register_mask_write(REG_RESET_STEP, 0x80, 0x80); |
| | | } |
| | | |
| | | |
| | | u16_m mir3da_get_step() //获得运动步数 |
| | | { |
| | | u8_m tmp_data[2] = {0}; |
| | | u8_m tmp_data[2] = {0}; |
| | | |
| | | f_step = mir3da_ReadLenByte(REG_STEPS_MSB, 2); |
| | | |
| | | return f_step; |
| | | |
| | | f_step = mir3da_ReadLenByte(REG_STEPS_MSB, 2); |
| | | |
| | | return f_step; |
| | | |
| | | } |
| | | |
| | | //获取数据 |
| | |
| | | |
| | | float drv_lis2dh12_get_angle(void) |
| | | { |
| | | float acc_x, acc_y, acc_z,acc_g; |
| | | float angle_x, angle_y, angle_z, angle_xyz; |
| | | int8_t data[6]; |
| | | uint8_t i; |
| | | uint8_t response; |
| | | uint8_t lisidtemp; |
| | | //set ODR (turn ON device) |
| | | LIS3DH_SetODR(LIS3DH_ODR_100Hz); |
| | | //set PowerMode |
| | | LIS3DH_SetMode(LIS3DH_NORMAL); |
| | | //set Fullscale |
| | | LIS3DH_SetFullScale(LIS3DH_FULLSCALE_2); |
| | | //set axis Enable |
| | | LIS3DH_SetAxis(LIS3DH_X_ENABLE | LIS3DH_Y_ENABLE | LIS3DH_Z_ENABLE); |
| | | // Read ID |
| | | LIS3DH_GetWHO_AM_I(&lisidtemp); |
| | | float acc_x, acc_y, acc_z,acc_g; |
| | | float angle_x, angle_y, angle_z, angle_xyz; |
| | | int8_t data[6]; |
| | | uint8_t i; |
| | | uint8_t response; |
| | | uint8_t lisidtemp; |
| | | //set ODR (turn ON device) |
| | | LIS3DH_SetODR(LIS3DH_ODR_100Hz); |
| | | //set PowerMode |
| | | LIS3DH_SetMode(LIS3DH_NORMAL); |
| | | //set Fullscale |
| | | LIS3DH_SetFullScale(LIS3DH_FULLSCALE_2); |
| | | //set axis Enable |
| | | LIS3DH_SetAxis(LIS3DH_X_ENABLE | LIS3DH_Y_ENABLE | LIS3DH_Z_ENABLE); |
| | | // Read ID |
| | | LIS3DH_GetWHO_AM_I(&lisidtemp); |
| | | // lisid=(uint16_t)lisidtemp; |
| | | // printf("LIS3DH ID: %x \r\n",lisid); |
| | | //get Acceleration Raw data |
| | | response=LIS3DH_GetAccAxesRaw(&lis2dhdata); |
| | | //print data values |
| | | delay_us(10); |
| | | //get Acceleration Raw data |
| | | response=LIS3DH_GetAccAxesRaw(&lis2dhdata); |
| | | //print data values |
| | | delay_us(10); |
| | | // LIS3DH_GetAccAxesRaw(&lis2dhdata); |
| | | // for (i=0; i<6; i++) |
| | | // drv_lis2dh12_iic_read_byte(0x28 + i, data+i); |
| | | if(response==1) |
| | | { |
| | | /* x, y, z ???? */ |
| | | acc_x = abs(lis2dhdata.AXIS_X); |
| | | acc_y = abs(lis2dhdata.AXIS_Y); |
| | | acc_z = abs(lis2dhdata.AXIS_Z); |
| | | |
| | | /* ????? */ |
| | | acc_g = sqrt(pow(acc_x, 2) + pow(acc_y, 2) + pow(acc_z, 2)); |
| | | |
| | | if (acc_z > acc_g) |
| | | acc_z = acc_g; |
| | | if(response==1) |
| | | { |
| | | /* x, y, z ???? */ |
| | | acc_x = abs(lis2dhdata.AXIS_X); |
| | | acc_y = abs(lis2dhdata.AXIS_Y); |
| | | acc_z = abs(lis2dhdata.AXIS_Z); |
| | | |
| | | /* angle_z/90 = asin(acc_z/acc_g)/p/2 */ |
| | | angle_z = asin(acc_z/acc_g) * 2 / 3.14 * 90; |
| | | angle_z = 90 - angle_z; |
| | | if(angle_z < 0) |
| | | angle_z = 0; |
| | | } |
| | | return acc_g; |
| | | /* ????? */ |
| | | acc_g = sqrt(pow(acc_x, 2) + pow(acc_y, 2) + pow(acc_z, 2)); |
| | | |
| | | if (acc_z > acc_g) |
| | | acc_z = acc_g; |
| | | |
| | | /* angle_z/90 = asin(acc_z/acc_g)/p/2 */ |
| | | angle_z = asin(acc_z/acc_g) * 2 / 3.14 * 90; |
| | | angle_z = 90 - angle_z; |
| | | if(angle_z < 0) |
| | | angle_z = 0; |
| | | } |
| | | return acc_g; |
| | | } |
| | | |
| | | |
| | | void IIC2_SDA_OUT() |
| | | { |
| | | gpio_pin_set_dir(SDA_PIN , GPIO_DIR_OUT, 1); |
| | | } |
| | | void IIC2_SDA_IN() |
| | | { |
| | | gpio_pin_set_dir(SDA_PIN,GPIO_DIR_IN,1); //SDA设置为输入等待接收端的应答信号 |
| | | } |
| | | //产生IIC起始信号 |
| | | void IIC2_Start(void) |
| | | { |
| | | // IIC2_SDA_OUT(); //sda线输出 |
| | | IIC2_SDA_OUT(); //sda线输出 |
| | | SDA_1; |
| | | // delay_us(10); |
| | | SCL_1; |
| | |
| | | //产生IIC停止信号 |
| | | void IIC2_Stop(void) |
| | | { |
| | | // IIC2_SDA_OUT();//sda线输出 |
| | | IIC2_SDA_OUT();//sda线输出 |
| | | SCL_0; |
| | | // delay_us(10); |
| | | SDA_0;//STOP:when CLK is high DATA change form low to high |
| | |
| | | uint8_t IIC2_Wait_Ack(void) |
| | | { |
| | | uint8_t ucErrTime=0; |
| | | // IIC2_SDA_IN(); //SDA设置为输入 |
| | | IIC2_SDA_IN(); |
| | | SDA_1; |
| | | delay_us(6); |
| | | delay_us(15); |
| | | SCL_1; |
| | | delay_us(6); |
| | | delay_us(15); |
| | | |
| | | while(IIC2_READ_SDA) |
| | | { |
| | |
| | | void IIC2_Ack(void) |
| | | { |
| | | SCL_0; |
| | | // IIC2_SDA_OUT(); |
| | | IIC2_SDA_OUT(); |
| | | SDA_0; |
| | | delay_us(10); |
| | | SCL_1; |
| | |
| | | void IIC2_NAck(void) |
| | | { |
| | | SCL_0; |
| | | // IIC2_SDA_OUT(); |
| | | IIC2_SDA_OUT(); |
| | | SDA_1; |
| | | delay_us(10); |
| | | SCL_1; |
| | |
| | | void IIC2_Send_Byte(uint8_t txd) |
| | | { |
| | | uint8_t t; |
| | | // IIC2_SDA_OUT(); |
| | | IIC2_SDA_OUT(); |
| | | SCL_0;//拉低时钟开始数据传输 |
| | | for(t=0;t<8;t++) |
| | | { |
| | |
| | | uint8_t IIC2_Read_Byte(unsigned char ack) |
| | | { |
| | | unsigned char i,receive=0; |
| | | // IIC2_SDA_IN();//SDA设置为输入 |
| | | IIC2_SDA_IN();//SDA设置为输入 |
| | | for(i=0;i<8;i++ ) |
| | | { |
| | | SCL_0; |
| | |
| | | } |
| | | |
| | | //在LIS3DH里面的指定地址开始读一字节数据 |
| | | //ReadAddr :读出的地址 |
| | | //ReadAddr :读出的地址 |
| | | //返回值 :读出的数据 |
| | | uint8_t LIS3DH_ReadOneByte(uint16_t ReadAddr) |
| | | { |
| | | uint8_t temp=0; |
| | | IIC2_Start(); |
| | | IIC2_Send_Byte(0X32); //发送写命令 |
| | | IIC2_Wait_Ack(); |
| | | IIC2_Send_Byte(ReadAddr); //发送读地址 |
| | | IIC2_Wait_Ack(); |
| | | IIC2_Start(); |
| | | IIC2_Send_Byte(0X33); //发送读命令,进入接收模式 |
| | | IIC2_Wait_Ack(); |
| | | temp=IIC2_Read_Byte(0); |
| | | IIC2_Stop(); //产生一个停止条件 |
| | | return temp; |
| | | uint8_t temp=0; |
| | | IIC2_Start(); |
| | | IIC2_Send_Byte(0X32); //发送写命令 |
| | | IIC2_Wait_Ack(); |
| | | IIC2_Send_Byte(ReadAddr); //发送读地址 |
| | | IIC2_Wait_Ack(); |
| | | IIC2_Start(); |
| | | IIC2_Send_Byte(0X33); //发送读命令,进入接收模式 |
| | | IIC2_Wait_Ack(); |
| | | temp=IIC2_Read_Byte(0); |
| | | IIC2_Stop(); //产生一个停止条件 |
| | | return temp; |
| | | } |
| | | //在LIS3DH指定地址写入一个数据 |
| | | //WriteAddr :写入数据的目的地址 |
| | | //WriteAddr :写入数据的目的地址 |
| | | //DataToWrite:要写入的数据 |
| | | void LIS3DH_WriteOneByte(uint16_t WriteAddr,uint8_t DataToWrite) |
| | | { |
| | | IIC2_Start(); |
| | | IIC2_Send_Byte(0X32); //发送写命令 |
| | | IIC2_Wait_Ack(); |
| | | IIC2_Send_Byte(WriteAddr); //发送地址 |
| | | IIC2_Wait_Ack(); |
| | | IIC2_Send_Byte(DataToWrite); //发送字节 |
| | | IIC2_Wait_Ack(); |
| | | IIC2_Stop();//产生一个停止条件 |
| | | delay_us(10); |
| | | |
| | | { |
| | | IIC2_Start(); |
| | | IIC2_Send_Byte(0X32); //发送写命令 |
| | | IIC2_Wait_Ack(); |
| | | IIC2_Send_Byte(WriteAddr); //发送地址 |
| | | IIC2_Wait_Ack(); |
| | | IIC2_Send_Byte(DataToWrite); //发送字节 |
| | | IIC2_Wait_Ack(); |
| | | IIC2_Stop();//产生一个停止条件 |
| | | delay_us(10); |
| | | |
| | | } |
| | | //在AT24CXX里面的指定地址开始写入长度为Len的数据 |
| | | //该函数用于写入16bit或者32bit的数据. |
| | | //WriteAddr :开始写入的地址 |
| | | //WriteAddr :开始写入的地址 |
| | | //DataToWrite:数据数组首地址 |
| | | //Len :要写入数据的长度2,4 |
| | | void LIS3DH_WriteLenByte(uint16_t WriteAddr,uint32_t DataToWrite,uint8_t Len) |
| | | { |
| | | uint8_t t; |
| | | for(t=0;t<Len;t++) |
| | | { |
| | | LIS3DH_WriteOneByte(WriteAddr+t,(DataToWrite>>(8*t))&0xff); |
| | | } |
| | | { |
| | | uint8_t t; |
| | | for(t=0; t<Len; t++) |
| | | { |
| | | LIS3DH_WriteOneByte(WriteAddr+t,(DataToWrite>>(8*t))&0xff); |
| | | } |
| | | } |
| | | |
| | | //在AT24CXX里面的指定地址开始读出长度为Len的数据 |
| | | //该函数用于读出16bit或者32bit的数据. |
| | | //ReadAddr :开始读出的地址 |
| | | //ReadAddr :开始读出的地址 |
| | | //返回值 :数据 |
| | | //Len :要读出数据的长度2,4 |
| | | uint32_t LIS3DH_ReadLenByte(uint16_t ReadAddr,uint8_t Len) |
| | | { |
| | | uint8_t t; |
| | | uint32_t temp=0; |
| | | for(t=0;t<Len;t++) |
| | | { |
| | | temp<<=8; |
| | | temp+=LIS3DH_ReadOneByte(ReadAddr+Len-t-1); |
| | | } |
| | | return temp; |
| | | { |
| | | uint8_t t; |
| | | uint32_t temp=0; |
| | | for(t=0; t<Len; t++) |
| | | { |
| | | temp<<=8; |
| | | temp+=LIS3DH_ReadOneByte(ReadAddr+Len-t-1); |
| | | } |
| | | return temp; |
| | | } |
| | | |
| | | //在mir3da里面的指定地址开始读一字节数据 |
| | | //ReadAddr :读出的地址 |
| | | //ReadAddr :读出的地址 |
| | | //返回值 :读出的数据 |
| | | uint8_t mir3da_ReadOneByte(uint16_t ReadAddr) |
| | | { |
| | | uint8_t temp=0; |
| | | IIC2_Start(); |
| | | IIC2_Send_Byte(0X4e); //发送写命令 |
| | | IIC2_Wait_Ack(); |
| | | IIC2_Send_Byte(ReadAddr); //发送读地址 |
| | | IIC2_Wait_Ack(); |
| | | IIC2_Start(); |
| | | IIC2_Send_Byte(0X4f); //发送读命令,进入接收模式 |
| | | IIC2_Wait_Ack(); |
| | | temp=IIC2_Read_Byte(0); |
| | | IIC2_Stop(); //产生一个停止条件 |
| | | return temp; |
| | | uint8_t temp=0; |
| | | IIC2_Start(); |
| | | IIC2_Send_Byte(0X4e); //发送写命令 |
| | | IIC2_Wait_Ack(); |
| | | IIC2_Send_Byte(ReadAddr); //发送读地址 |
| | | IIC2_Wait_Ack(); |
| | | IIC2_Start(); |
| | | IIC2_Send_Byte(0X4f); //发送读命令,进入接收模式 |
| | | IIC2_Wait_Ack(); |
| | | temp=IIC2_Read_Byte(0); |
| | | IIC2_Stop(); //产生一个停止条件 |
| | | return temp; |
| | | } |
| | | //在mir3da指定地址写入一个数据 |
| | | //WriteAddr :写入数据的目的地址 |
| | | //WriteAddr :写入数据的目的地址 |
| | | //DataToWrite:要写入的数据 |
| | | void mir3da_WriteOneByte(uint16_t WriteAddr,uint8_t DataToWrite) |
| | | { |
| | | IIC2_Start(); |
| | | IIC2_Send_Byte(0X4e); //发送写命令 |
| | | IIC2_Wait_Ack(); |
| | | IIC2_Send_Byte(WriteAddr); //发送地址 |
| | | IIC2_Wait_Ack(); |
| | | IIC2_Send_Byte(DataToWrite); //发送字节 |
| | | IIC2_Wait_Ack(); |
| | | IIC2_Stop();//产生一个停止条件 |
| | | delay_us(10); |
| | | |
| | | { |
| | | IIC2_Start(); |
| | | IIC2_Send_Byte(0X4e); //发送写命令 |
| | | IIC2_Wait_Ack(); |
| | | IIC2_Send_Byte(WriteAddr); //发送地址 |
| | | IIC2_Wait_Ack(); |
| | | IIC2_Send_Byte(DataToWrite); //发送字节 |
| | | IIC2_Wait_Ack(); |
| | | IIC2_Stop();//产生一个停止条件 |
| | | delay_us(10); |
| | | |
| | | } |
| | | //在AT24CXX里面的指定地址开始写入长度为Len的数据 |
| | | //该函数用于写入16bit或者32bit的数据. |
| | | //WriteAddr :开始写入的地址 |
| | | //WriteAddr :开始写入的地址 |
| | | //DataToWrite:数据数组首地址 |
| | | //Len :要写入数据的长度2,4 |
| | | void mir3da_WriteLenByte(uint16_t WriteAddr,uint32_t DataToWrite,uint8_t Len) |
| | | { |
| | | uint8_t t; |
| | | for(t=0;t<Len;t++) |
| | | { |
| | | mir3da_WriteOneByte(WriteAddr+t,(DataToWrite>>(8*t))&0xff); |
| | | } |
| | | { |
| | | uint8_t t; |
| | | for(t=0; t<Len; t++) |
| | | { |
| | | mir3da_WriteOneByte(WriteAddr+t,(DataToWrite>>(8*t))&0xff); |
| | | } |
| | | } |
| | | |
| | | //在AT24CXX里面的指定地址开始读出长度为Len的数据 |
| | | //该函数用于读出16bit或者32bit的数据. |
| | | //ReadAddr :开始读出的地址 |
| | | //ReadAddr :开始读出的地址 |
| | | //返回值 :数据 |
| | | //Len :要读出数据的长度2,4 |
| | | uint32_t bu=0; |
| | | uint32_t mir3da_ReadLenByte(uint16_t ReadAddr,int Len) |
| | | { |
| | | uint8_t t; |
| | | u8_m data[Len]; |
| | | memset(data, 0, Len); |
| | | for(t=0;t<Len;t++) |
| | | { |
| | | data[t] = mir3da_ReadOneByte(ReadAddr+t); |
| | | } |
| | | bu = (data[0] << 8 | data[1])/2; |
| | | |
| | | return bu; |
| | | { |
| | | uint8_t t; |
| | | u8_m data[Len]; |
| | | memset(data, 0, Len); |
| | | for(t=0; t<Len; t++) |
| | | { |
| | | data[t] = mir3da_ReadOneByte(ReadAddr+t); |
| | | } |
| | | bu = (data[0] << 8 | data[1])/2; |
| | | |
| | | return bu; |
| | | } |
| | | |
| | | |
| | | /******************************************************************************* |
| | | * Function Name : LIS3DH_ReadReg |
| | | * Description : Generic Reading function. It must be fullfilled with either |
| | | * : I2C or SPI reading functions |
| | | * : I2C or SPI reading functions |
| | | * Input : Register Address |
| | | * Output : Data REad |
| | | * Return : None |
| | | *******************************************************************************/ |
| | | uint8_t LIS3DH_ReadReg(uint8_t Reg, uint8_t* Data) { |
| | | |
| | | //To be completed with either I2c or SPI reading function |
| | | //i.e. *Data = SPI_Mems_Read_Reg( Reg ); |
| | | *Data = LIS3DH_ReadOneByte(Reg); |
| | | return 1; |
| | | |
| | | //To be completed with either I2c or SPI reading function |
| | | //i.e. *Data = SPI_Mems_Read_Reg( Reg ); |
| | | *Data = LIS3DH_ReadOneByte(Reg); |
| | | return 1; |
| | | } |
| | | |
| | | |
| | |
| | | * Return : None |
| | | *******************************************************************************/ |
| | | uint8_t LIS3DH_WriteReg(uint8_t WriteAddr, uint8_t Data) { |
| | | |
| | | //To be completed with either I2c or SPI writing function |
| | | //i.e. SPI_Mems_Write_Reg(WriteAddr, Data); |
| | | LIS3DH_WriteOneByte(WriteAddr,Data); |
| | | |
| | | return 1; |
| | | |
| | | //To be completed with either I2c or SPI writing function |
| | | //i.e. SPI_Mems_Write_Reg(WriteAddr, Data); |
| | | LIS3DH_WriteOneByte(WriteAddr,Data); |
| | | |
| | | return 1; |
| | | } |
| | | |
| | | /* Private functions ---------------------------------------------------------*/ |
| | |
| | | * Output : None |
| | | * Return : Status [value of FSS] |
| | | *******************************************************************************/ |
| | | status_t LIS3DH_GetWHO_AM_I(uint8_t* val){ |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_WHO_AM_I, val) ) |
| | | return MEMS_ERROR; |
| | | status_t LIS3DH_GetWHO_AM_I(uint8_t* val) { |
| | | |
| | | return MEMS_SUCCESS; |
| | | if( !LIS3DH_ReadReg(LIS3DH_WHO_AM_I, val) ) |
| | | return MEMS_ERROR; |
| | | |
| | | return MEMS_SUCCESS; |
| | | } |
| | | |
| | | /******************************************************************************* |
| | |
| | | * Return : Status [MEMS_ERROR, MEMS_SUCCESS] |
| | | *******************************************************************************/ |
| | | status_t LIS3DH_GetStatusAUX(uint8_t* val) { |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_STATUS_AUX, val) ) |
| | | return MEMS_ERROR; |
| | | |
| | | return MEMS_SUCCESS; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_STATUS_AUX, val) ) |
| | | return MEMS_ERROR; |
| | | |
| | | return MEMS_SUCCESS; |
| | | } |
| | | |
| | | |
| | |
| | | * Return : Status of BIT [MEMS_ERROR, MEMS_SUCCESS] |
| | | *******************************************************************************/ |
| | | status_t LIS3DH_GetStatusAUXBit(uint8_t statusBIT, uint8_t* val) { |
| | | uint8_t value; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_STATUS_AUX, &value) ) |
| | | uint8_t value; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_STATUS_AUX, &value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | if(statusBIT == LIS3DH_STATUS_AUX_321OR) { |
| | | if(value &= LIS3DH_STATUS_AUX_321OR) { |
| | | *val = MEMS_SET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | else { |
| | | *val = MEMS_RESET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | } |
| | | |
| | | if(statusBIT == LIS3DH_STATUS_AUX_3OR) { |
| | | if(value &= LIS3DH_STATUS_AUX_3OR) { |
| | | *val = MEMS_SET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | else { |
| | | *val = MEMS_RESET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | } |
| | | |
| | | if(statusBIT == LIS3DH_STATUS_AUX_2OR) { |
| | | if(value &= LIS3DH_STATUS_AUX_2OR) { |
| | | *val = MEMS_SET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | else { |
| | | *val = MEMS_RESET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | } |
| | | |
| | | if(statusBIT == LIS3DH_STATUS_AUX_1OR) { |
| | | if(value &= LIS3DH_STATUS_AUX_1OR) { |
| | | *val = MEMS_SET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | else { |
| | | *val = MEMS_RESET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | } |
| | | |
| | | if(statusBIT == LIS3DH_STATUS_AUX_321DA) { |
| | | if(value &= LIS3DH_STATUS_AUX_321DA) { |
| | | *val = MEMS_SET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | else { |
| | | *val = MEMS_RESET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | } |
| | | |
| | | if(statusBIT == LIS3DH_STATUS_AUX_3DA) { |
| | | if(value &= LIS3DH_STATUS_AUX_3DA) { |
| | | *val = MEMS_SET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | else { |
| | | *val = MEMS_RESET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | } |
| | | |
| | | if(statusBIT == LIS3DH_STATUS_AUX_2DA) { |
| | | if(value &= LIS3DH_STATUS_AUX_2DA) { |
| | | *val = MEMS_SET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | else { |
| | | *val = MEMS_RESET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | } |
| | | |
| | | if(statusBIT == LIS3DH_STATUS_AUX_1DA) { |
| | | if(value &= LIS3DH_STATUS_AUX_1DA) { |
| | | *val = MEMS_SET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | else { |
| | | *val = MEMS_RESET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | } |
| | | return MEMS_ERROR; |
| | | |
| | | if(statusBIT == LIS3DH_STATUS_AUX_321OR){ |
| | | if(value &= LIS3DH_STATUS_AUX_321OR){ |
| | | *val = MEMS_SET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | else{ |
| | | *val = MEMS_RESET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | } |
| | | |
| | | if(statusBIT == LIS3DH_STATUS_AUX_3OR){ |
| | | if(value &= LIS3DH_STATUS_AUX_3OR){ |
| | | *val = MEMS_SET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | else{ |
| | | *val = MEMS_RESET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | } |
| | | |
| | | if(statusBIT == LIS3DH_STATUS_AUX_2OR){ |
| | | if(value &= LIS3DH_STATUS_AUX_2OR){ |
| | | *val = MEMS_SET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | else{ |
| | | *val = MEMS_RESET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | } |
| | | |
| | | if(statusBIT == LIS3DH_STATUS_AUX_1OR){ |
| | | if(value &= LIS3DH_STATUS_AUX_1OR){ |
| | | *val = MEMS_SET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | else{ |
| | | *val = MEMS_RESET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | } |
| | | |
| | | if(statusBIT == LIS3DH_STATUS_AUX_321DA){ |
| | | if(value &= LIS3DH_STATUS_AUX_321DA) { |
| | | *val = MEMS_SET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | else{ |
| | | *val = MEMS_RESET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | } |
| | | |
| | | if(statusBIT == LIS3DH_STATUS_AUX_3DA){ |
| | | if(value &= LIS3DH_STATUS_AUX_3DA){ |
| | | *val = MEMS_SET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | else{ |
| | | *val = MEMS_RESET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | } |
| | | |
| | | if(statusBIT == LIS3DH_STATUS_AUX_2DA){ |
| | | if(value &= LIS3DH_STATUS_AUX_2DA){ |
| | | *val = MEMS_SET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | else{ |
| | | *val = MEMS_RESET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | } |
| | | |
| | | if(statusBIT == LIS3DH_STATUS_AUX_1DA){ |
| | | if(value &= LIS3DH_STATUS_AUX_1DA){ |
| | | *val = MEMS_SET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | else{ |
| | | *val = MEMS_RESET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | } |
| | | return MEMS_ERROR; |
| | | } |
| | | |
| | | |
| | |
| | | * Output : None |
| | | * Return : Status [MEMS_ERROR, MEMS_SUCCESS] |
| | | *******************************************************************************/ |
| | | status_t LIS3DH_SetODR(LIS3DH_ODR_t ov){ |
| | | uint8_t value; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG1, &value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | value &= 0x0f; |
| | | value |= ov<<LIS3DH_ODR_BIT; |
| | | |
| | | if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG1, value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | return MEMS_SUCCESS; |
| | | status_t LIS3DH_SetODR(LIS3DH_ODR_t ov) { |
| | | uint8_t value; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG1, &value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | value &= 0x0f; |
| | | value |= ov<<LIS3DH_ODR_BIT; |
| | | |
| | | if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG1, value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | return MEMS_SUCCESS; |
| | | } |
| | | |
| | | |
| | |
| | | * Description : Sets LIS3DH Output Temperature |
| | | * Input : MEMS_ENABLE, MEMS_DISABLE |
| | | * Output : None |
| | | * Note : For Read Temperature by LIS3DH_OUT_AUX_3, LIS3DH_SetADCAux and LIS3DH_SetBDU |
| | | * Note : For Read Temperature by LIS3DH_OUT_AUX_3, LIS3DH_SetADCAux and LIS3DH_SetBDU |
| | | functions must be ENABLE |
| | | * Return : Status [MEMS_ERROR, MEMS_SUCCESS] |
| | | *******************************************************************************/ |
| | | status_t LIS3DH_SetTemperature(State_t state){ |
| | | uint8_t value; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_TEMP_CFG_REG, &value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | value &= 0xBF; |
| | | value |= state<<LIS3DH_TEMP_EN; |
| | | |
| | | if( !LIS3DH_WriteReg(LIS3DH_TEMP_CFG_REG, value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | return MEMS_SUCCESS; |
| | | status_t LIS3DH_SetTemperature(State_t state) { |
| | | uint8_t value; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_TEMP_CFG_REG, &value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | value &= 0xBF; |
| | | value |= state<<LIS3DH_TEMP_EN; |
| | | |
| | | if( !LIS3DH_WriteReg(LIS3DH_TEMP_CFG_REG, value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | return MEMS_SUCCESS; |
| | | } |
| | | |
| | | |
| | |
| | | * Output : None |
| | | * Return : Status [MEMS_ERROR, MEMS_SUCCESS] |
| | | *******************************************************************************/ |
| | | status_t LIS3DH_SetADCAux(State_t state){ |
| | | uint8_t value; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_TEMP_CFG_REG, &value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | value &= 0x7F; |
| | | value |= state<<LIS3DH_ADC_PD; |
| | | |
| | | if( !LIS3DH_WriteReg(LIS3DH_TEMP_CFG_REG, value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | return MEMS_SUCCESS; |
| | | status_t LIS3DH_SetADCAux(State_t state) { |
| | | uint8_t value; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_TEMP_CFG_REG, &value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | value &= 0x7F; |
| | | value |= state<<LIS3DH_ADC_PD; |
| | | |
| | | if( !LIS3DH_WriteReg(LIS3DH_TEMP_CFG_REG, value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | return MEMS_SUCCESS; |
| | | } |
| | | |
| | | |
| | |
| | | * Return : Status [MEMS_ERROR, MEMS_SUCCESS] |
| | | *******************************************************************************/ |
| | | status_t LIS3DH_GetAuxRaw(LIS3DH_Aux123Raw_t* buff) { |
| | | uint8_t valueL; |
| | | uint8_t valueH; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_OUT_1_L, &valueL) ) |
| | | return MEMS_ERROR; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_OUT_1_H, &valueH) ) |
| | | return MEMS_ERROR; |
| | | |
| | | buff->AUX_1 = (uint16_t)( (valueH << 8) | valueL )/16; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_OUT_2_L, &valueL) ) |
| | | return MEMS_ERROR; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_OUT_2_H, &valueH) ) |
| | | return MEMS_ERROR; |
| | | |
| | | buff->AUX_2 = (uint16_t)( (valueH << 8) | valueL )/16; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_OUT_3_L, &valueL) ) |
| | | return MEMS_ERROR; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_OUT_3_H, &valueH) ) |
| | | return MEMS_ERROR; |
| | | |
| | | buff->AUX_3 = (uint16_t)( (valueH << 8) | valueL )/16; |
| | | |
| | | return MEMS_SUCCESS; |
| | | uint8_t valueL; |
| | | uint8_t valueH; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_OUT_1_L, &valueL) ) |
| | | return MEMS_ERROR; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_OUT_1_H, &valueH) ) |
| | | return MEMS_ERROR; |
| | | |
| | | buff->AUX_1 = (uint16_t)( (valueH << 8) | valueL )/16; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_OUT_2_L, &valueL) ) |
| | | return MEMS_ERROR; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_OUT_2_H, &valueH) ) |
| | | return MEMS_ERROR; |
| | | |
| | | buff->AUX_2 = (uint16_t)( (valueH << 8) | valueL )/16; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_OUT_3_L, &valueL) ) |
| | | return MEMS_ERROR; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_OUT_3_H, &valueH) ) |
| | | return MEMS_ERROR; |
| | | |
| | | buff->AUX_3 = (uint16_t)( (valueH << 8) | valueL )/16; |
| | | |
| | | return MEMS_SUCCESS; |
| | | } |
| | | |
| | | |
| | |
| | | * Return : Status [MEMS_ERROR, MEMS_SUCCESS] |
| | | *******************************************************************************/ |
| | | status_t LIS3DH_GetTempRaw(int8_t* buff) { |
| | | uint8_t valueL; |
| | | uint8_t valueH; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_OUT_3_L, &valueL) ) |
| | | return MEMS_ERROR; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_OUT_3_H, &valueH) ) |
| | | return MEMS_ERROR; |
| | | |
| | | *buff = (int8_t)( valueH ); |
| | | |
| | | return MEMS_SUCCESS; |
| | | uint8_t valueL; |
| | | uint8_t valueH; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_OUT_3_L, &valueL) ) |
| | | return MEMS_ERROR; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_OUT_3_H, &valueH) ) |
| | | return MEMS_ERROR; |
| | | |
| | | *buff = (int8_t)( valueH ); |
| | | |
| | | return MEMS_SUCCESS; |
| | | } |
| | | |
| | | |
| | |
| | | * Return : Status [MEMS_ERROR, MEMS_SUCCESS] |
| | | *******************************************************************************/ |
| | | status_t LIS3DH_SetMode(LIS3DH_Mode_t md) { |
| | | uint8_t value; |
| | | uint8_t value2; |
| | | static uint8_t ODR_old_value; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG1, &value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG4, &value2) ) |
| | | return MEMS_ERROR; |
| | | |
| | | if((value & 0xF0)==0) |
| | | value = value | (ODR_old_value & 0xF0); //if it comes from POWERDOWN |
| | | |
| | | switch(md) { |
| | | |
| | | case LIS3DH_POWER_DOWN: |
| | | ODR_old_value = value; |
| | | value &= 0x0F; |
| | | break; |
| | | |
| | | case LIS3DH_NORMAL: |
| | | value &= 0xF7; |
| | | value |= (MEMS_RESET<<LIS3DH_LPEN); |
| | | value2 &= 0xF7; |
| | | value2 |= (MEMS_SET<<LIS3DH_HR); //set HighResolution_BIT |
| | | break; |
| | | |
| | | case LIS3DH_LOW_POWER: |
| | | value &= 0xF7; |
| | | value |= (MEMS_SET<<LIS3DH_LPEN); |
| | | value2 &= 0xF7; |
| | | value2 |= (MEMS_RESET<<LIS3DH_HR); //reset HighResolution_BIT |
| | | break; |
| | | |
| | | default: |
| | | return MEMS_ERROR; |
| | | } |
| | | |
| | | if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG1, value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG4, value2) ) |
| | | return MEMS_ERROR; |
| | | |
| | | return MEMS_SUCCESS; |
| | | uint8_t value; |
| | | uint8_t value2; |
| | | static uint8_t ODR_old_value; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG1, &value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG4, &value2) ) |
| | | return MEMS_ERROR; |
| | | |
| | | if((value & 0xF0)==0) |
| | | value = value | (ODR_old_value & 0xF0); //if it comes from POWERDOWN |
| | | |
| | | switch(md) { |
| | | |
| | | case LIS3DH_POWER_DOWN: |
| | | ODR_old_value = value; |
| | | value &= 0x0F; |
| | | break; |
| | | |
| | | case LIS3DH_NORMAL: |
| | | value &= 0xF7; |
| | | value |= (MEMS_RESET<<LIS3DH_LPEN); |
| | | value2 &= 0xF7; |
| | | value2 |= (MEMS_SET<<LIS3DH_HR); //set HighResolution_BIT |
| | | break; |
| | | |
| | | case LIS3DH_LOW_POWER: |
| | | value &= 0xF7; |
| | | value |= (MEMS_SET<<LIS3DH_LPEN); |
| | | value2 &= 0xF7; |
| | | value2 |= (MEMS_RESET<<LIS3DH_HR); //reset HighResolution_BIT |
| | | break; |
| | | |
| | | default: |
| | | return MEMS_ERROR; |
| | | } |
| | | |
| | | if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG1, value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG4, value2) ) |
| | | return MEMS_ERROR; |
| | | |
| | | return MEMS_SUCCESS; |
| | | } |
| | | |
| | | |
| | |
| | | * Return : Status [MEMS_ERROR, MEMS_SUCCESS] |
| | | *******************************************************************************/ |
| | | status_t LIS3DH_SetAxis(LIS3DH_Axis_t axis) { |
| | | uint8_t value; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG1, &value) ) |
| | | return MEMS_ERROR; |
| | | value &= 0xF8; |
| | | value |= (0x07 & axis); |
| | | |
| | | if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG1, value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | return MEMS_SUCCESS; |
| | | uint8_t value; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG1, &value) ) |
| | | return MEMS_ERROR; |
| | | value &= 0xF8; |
| | | value |= (0x07 & axis); |
| | | |
| | | if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG1, value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | return MEMS_SUCCESS; |
| | | } |
| | | |
| | | |
| | |
| | | * Return : Status [MEMS_ERROR, MEMS_SUCCESS] |
| | | *******************************************************************************/ |
| | | status_t LIS3DH_SetFullScale(LIS3DH_Fullscale_t fs) { |
| | | uint8_t value; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG4, &value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | value &= 0xCF; |
| | | value |= (fs<<LIS3DH_FS); |
| | | |
| | | if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG4, value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | return MEMS_SUCCESS; |
| | | uint8_t value; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG4, &value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | value &= 0xCF; |
| | | value |= (fs<<LIS3DH_FS); |
| | | |
| | | if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG4, value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | return MEMS_SUCCESS; |
| | | } |
| | | |
| | | |
| | |
| | | * Return : Status [MEMS_ERROR, MEMS_SUCCESS] |
| | | *******************************************************************************/ |
| | | status_t LIS3DH_SetBDU(State_t bdu) { |
| | | uint8_t value; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG4, &value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | value &= 0x7F; |
| | | value |= (bdu<<LIS3DH_BDU); |
| | | |
| | | if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG4, value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | return MEMS_SUCCESS; |
| | | uint8_t value; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG4, &value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | value &= 0x7F; |
| | | value |= (bdu<<LIS3DH_BDU); |
| | | |
| | | if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG4, value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | return MEMS_SUCCESS; |
| | | } |
| | | |
| | | |
| | |
| | | * Return : Status [MEMS_ERROR, MEMS_SUCCESS] |
| | | *******************************************************************************/ |
| | | status_t LIS3DH_SetBLE(LIS3DH_Endianess_t ble) { |
| | | uint8_t value; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG4, &value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | value &= 0xBF; |
| | | value |= (ble<<LIS3DH_BLE); |
| | | |
| | | if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG4, value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | return MEMS_SUCCESS; |
| | | uint8_t value; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG4, &value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | value &= 0xBF; |
| | | value |= (ble<<LIS3DH_BLE); |
| | | |
| | | if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG4, value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | return MEMS_SUCCESS; |
| | | } |
| | | |
| | | |
| | |
| | | * Return : Status [MEMS_ERROR, MEMS_SUCCESS] |
| | | *******************************************************************************/ |
| | | status_t LIS3DH_SetSelfTest(LIS3DH_SelfTest_t st) { |
| | | uint8_t value; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG4, &value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | value &= 0xF9; |
| | | value |= (st<<LIS3DH_ST); |
| | | |
| | | if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG4, value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | return MEMS_SUCCESS; |
| | | uint8_t value; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG4, &value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | value &= 0xF9; |
| | | value |= (st<<LIS3DH_ST); |
| | | |
| | | if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG4, value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | return MEMS_SUCCESS; |
| | | } |
| | | |
| | | |
| | |
| | | * Return : Status [MEMS_ERROR, MEMS_SUCCESS] |
| | | *******************************************************************************/ |
| | | status_t LIS3DH_HPFClickEnable(State_t hpfe) { |
| | | uint8_t value; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG2, &value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | value &= 0xFB; |
| | | value |= (hpfe<<LIS3DH_HPCLICK); |
| | | |
| | | if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG2, value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | return MEMS_SUCCESS; |
| | | uint8_t value; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG2, &value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | value &= 0xFB; |
| | | value |= (hpfe<<LIS3DH_HPCLICK); |
| | | |
| | | if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG2, value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | return MEMS_SUCCESS; |
| | | } |
| | | |
| | | |
| | |
| | | * Return : Status [MEMS_ERROR, MEMS_SUCCESS] |
| | | *******************************************************************************/ |
| | | status_t LIS3DH_HPFAOI1Enable(State_t hpfe) { |
| | | uint8_t value; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG2, &value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | value &= 0xFE; |
| | | value |= (hpfe<<LIS3DH_HPIS1); |
| | | |
| | | if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG2, value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | return MEMS_SUCCESS; |
| | | uint8_t value; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG2, &value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | value &= 0xFE; |
| | | value |= (hpfe<<LIS3DH_HPIS1); |
| | | |
| | | if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG2, value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | return MEMS_SUCCESS; |
| | | } |
| | | |
| | | |
| | |
| | | * Return : Status [MEMS_ERROR, MEMS_SUCCESS] |
| | | *******************************************************************************/ |
| | | status_t LIS3DH_HPFAOI2Enable(State_t hpfe) { |
| | | uint8_t value; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG2, &value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | value &= 0xFD; |
| | | value |= (hpfe<<LIS3DH_HPIS2); |
| | | |
| | | if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG2, value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | return MEMS_SUCCESS; |
| | | uint8_t value; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG2, &value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | value &= 0xFD; |
| | | value |= (hpfe<<LIS3DH_HPIS2); |
| | | |
| | | if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG2, value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | return MEMS_SUCCESS; |
| | | } |
| | | |
| | | |
| | |
| | | * Return : Status [MEMS_ERROR, MEMS_SUCCESS] |
| | | *******************************************************************************/ |
| | | status_t LIS3DH_SetHPFMode(LIS3DH_HPFMode_t hpm) { |
| | | uint8_t value; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG2, &value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | value &= 0x3F; |
| | | value |= (hpm<<LIS3DH_HPM); |
| | | |
| | | if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG2, value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | return MEMS_SUCCESS; |
| | | uint8_t value; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG2, &value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | value &= 0x3F; |
| | | value |= (hpm<<LIS3DH_HPM); |
| | | |
| | | if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG2, value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | return MEMS_SUCCESS; |
| | | } |
| | | |
| | | |
| | |
| | | * Return : Status [MEMS_ERROR, MEMS_SUCCESS] |
| | | *******************************************************************************/ |
| | | status_t LIS3DH_SetHPFCutOFF(LIS3DH_HPFCutOffFreq_t hpf) { |
| | | uint8_t value; |
| | | |
| | | if (hpf > 3) |
| | | return MEMS_ERROR; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG2, &value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | value &= 0xCF; |
| | | value |= (hpf<<LIS3DH_HPCF); |
| | | |
| | | if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG2, value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | return MEMS_SUCCESS; |
| | | |
| | | uint8_t value; |
| | | |
| | | if (hpf > 3) |
| | | return MEMS_ERROR; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG2, &value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | value &= 0xCF; |
| | | value |= (hpf<<LIS3DH_HPCF); |
| | | |
| | | if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG2, value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | return MEMS_SUCCESS; |
| | | |
| | | } |
| | | |
| | | |
| | |
| | | * Return : Status [MEMS_ERROR, MEMS_SUCCESS] |
| | | *******************************************************************************/ |
| | | status_t LIS3DH_SetFilterDataSel(State_t state) { |
| | | uint8_t value; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG2, &value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | value &= 0xF7; |
| | | value |= (state<<LIS3DH_FDS); |
| | | |
| | | if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG2, value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | return MEMS_SUCCESS; |
| | | |
| | | uint8_t value; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG2, &value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | value &= 0xF7; |
| | | value |= (state<<LIS3DH_FDS); |
| | | |
| | | if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG2, value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | return MEMS_SUCCESS; |
| | | |
| | | } |
| | | |
| | | |
| | | /******************************************************************************* |
| | | * Function Name : LIS3DH_SetInt1Pin |
| | | * Description : Set Interrupt1 pin Function |
| | | * Input : LIS3DH_CLICK_ON_PIN_INT1_ENABLE/DISABLE | LIS3DH_I1_INT1_ON_PIN_INT1_ENABLE/DISABLE | |
| | | LIS3DH_I1_INT2_ON_PIN_INT1_ENABLE/DISABLE | LIS3DH_I1_DRDY1_ON_INT1_ENABLE/DISABLE | |
| | | LIS3DH_I1_DRDY2_ON_INT1_ENABLE/DISABLE | LIS3DH_WTM_ON_INT1_ENABLE/DISABLE | |
| | | LIS3DH_INT1_OVERRUN_ENABLE/DISABLE |
| | | * example : SetInt1Pin(LIS3DH_CLICK_ON_PIN_INT1_ENABLE | LIS3DH_I1_INT1_ON_PIN_INT1_ENABLE | |
| | | * Input : LIS3DH_CLICK_ON_PIN_INT1_ENABLE/DISABLE | LIS3DH_I1_INT1_ON_PIN_INT1_ENABLE/DISABLE | |
| | | LIS3DH_I1_INT2_ON_PIN_INT1_ENABLE/DISABLE | LIS3DH_I1_DRDY1_ON_INT1_ENABLE/DISABLE | |
| | | LIS3DH_I1_DRDY2_ON_INT1_ENABLE/DISABLE | LIS3DH_WTM_ON_INT1_ENABLE/DISABLE | |
| | | LIS3DH_INT1_OVERRUN_ENABLE/DISABLE |
| | | * example : SetInt1Pin(LIS3DH_CLICK_ON_PIN_INT1_ENABLE | LIS3DH_I1_INT1_ON_PIN_INT1_ENABLE | |
| | | LIS3DH_I1_INT2_ON_PIN_INT1_DISABLE | LIS3DH_I1_DRDY1_ON_INT1_ENABLE | LIS3DH_I1_DRDY2_ON_INT1_ENABLE | |
| | | LIS3DH_WTM_ON_INT1_DISABLE | LIS3DH_INT1_OVERRUN_DISABLE ) |
| | | LIS3DH_WTM_ON_INT1_DISABLE | LIS3DH_INT1_OVERRUN_DISABLE ) |
| | | * Note : To enable Interrupt signals on INT1 Pad (You MUST use all input variable in the argument, as example) |
| | | * Output : None |
| | | * Return : Status [MEMS_ERROR, MEMS_SUCCESS] |
| | | *******************************************************************************/ |
| | | status_t LIS3DH_SetInt1Pin(LIS3DH_IntPinConf_t pinConf) { |
| | | uint8_t value; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG3, &value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | value &= 0x00; |
| | | value |= pinConf; |
| | | |
| | | if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG3, value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | return MEMS_SUCCESS; |
| | | uint8_t value; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG3, &value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | value &= 0x00; |
| | | value |= pinConf; |
| | | |
| | | if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG3, value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | return MEMS_SUCCESS; |
| | | } |
| | | |
| | | |
| | | /******************************************************************************* |
| | | * Function Name : LIS3DH_SetInt2Pin |
| | | * Description : Set Interrupt2 pin Function |
| | | * Input : LIS3DH_CLICK_ON_PIN_INT2_ENABLE/DISABLE | LIS3DH_I2_INT1_ON_PIN_INT2_ENABLE/DISABLE | |
| | | LIS3DH_I2_INT2_ON_PIN_INT2_ENABLE/DISABLE | LIS3DH_I2_BOOT_ON_INT2_ENABLE/DISABLE | |
| | | * Input : LIS3DH_CLICK_ON_PIN_INT2_ENABLE/DISABLE | LIS3DH_I2_INT1_ON_PIN_INT2_ENABLE/DISABLE | |
| | | LIS3DH_I2_INT2_ON_PIN_INT2_ENABLE/DISABLE | LIS3DH_I2_BOOT_ON_INT2_ENABLE/DISABLE | |
| | | LIS3DH_INT_ACTIVE_HIGH/LOW |
| | | * example : LIS3DH_SetInt2Pin(LIS3DH_CLICK_ON_PIN_INT2_ENABLE/DISABLE | LIS3DH_I2_INT1_ON_PIN_INT2_ENABLE/DISABLE | |
| | | LIS3DH_I2_INT2_ON_PIN_INT2_ENABLE/DISABLE | LIS3DH_I2_BOOT_ON_INT2_ENABLE/DISABLE | |
| | | * example : LIS3DH_SetInt2Pin(LIS3DH_CLICK_ON_PIN_INT2_ENABLE/DISABLE | LIS3DH_I2_INT1_ON_PIN_INT2_ENABLE/DISABLE | |
| | | LIS3DH_I2_INT2_ON_PIN_INT2_ENABLE/DISABLE | LIS3DH_I2_BOOT_ON_INT2_ENABLE/DISABLE | |
| | | LIS3DH_INT_ACTIVE_HIGH/LOW) |
| | | * Note : To enable Interrupt signals on INT2 Pad (You MUST use all input variable in the argument, as example) |
| | | * Output : None |
| | | * Return : Status [MEMS_ERROR, MEMS_SUCCESS] |
| | | *******************************************************************************/ |
| | | status_t LIS3DH_SetInt2Pin(LIS3DH_IntPinConf_t pinConf) { |
| | | uint8_t value; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG6, &value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | value &= 0x00; |
| | | value |= pinConf; |
| | | |
| | | if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG6, value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | return MEMS_SUCCESS; |
| | | } |
| | | uint8_t value; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG6, &value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | value &= 0x00; |
| | | value |= pinConf; |
| | | |
| | | if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG6, value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | return MEMS_SUCCESS; |
| | | } |
| | | |
| | | |
| | | /******************************************************************************* |
| | | * Function Name : LIS3DH_SetClickCFG |
| | | * Description : Set Click Interrupt config Function |
| | | * Input : LIS3DH_ZD_ENABLE/DISABLE | LIS3DH_ZS_ENABLE/DISABLE | LIS3DH_YD_ENABLE/DISABLE | |
| | | LIS3DH_YS_ENABLE/DISABLE | LIS3DH_XD_ENABLE/DISABLE | LIS3DH_XS_ENABLE/DISABLE |
| | | * example : LIS3DH_SetClickCFG( LIS3DH_ZD_ENABLE | LIS3DH_ZS_DISABLE | LIS3DH_YD_ENABLE | |
| | | * Input : LIS3DH_ZD_ENABLE/DISABLE | LIS3DH_ZS_ENABLE/DISABLE | LIS3DH_YD_ENABLE/DISABLE | |
| | | LIS3DH_YS_ENABLE/DISABLE | LIS3DH_XD_ENABLE/DISABLE | LIS3DH_XS_ENABLE/DISABLE |
| | | * example : LIS3DH_SetClickCFG( LIS3DH_ZD_ENABLE | LIS3DH_ZS_DISABLE | LIS3DH_YD_ENABLE | |
| | | LIS3DH_YS_DISABLE | LIS3DH_XD_ENABLE | LIS3DH_XS_ENABLE) |
| | | * Note : You MUST use all input variable in the argument, as example |
| | | * Output : None |
| | | * Return : Status [MEMS_ERROR, MEMS_SUCCESS] |
| | | *******************************************************************************/ |
| | | status_t LIS3DH_SetClickCFG(uint8_t status) { |
| | | uint8_t value; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_CLICK_CFG, &value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | value &= 0xC0; |
| | | value |= status; |
| | | |
| | | if( !LIS3DH_WriteReg(LIS3DH_CLICK_CFG, value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | return MEMS_SUCCESS; |
| | | } |
| | | uint8_t value; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_CLICK_CFG, &value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | value &= 0xC0; |
| | | value |= status; |
| | | |
| | | if( !LIS3DH_WriteReg(LIS3DH_CLICK_CFG, value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | return MEMS_SUCCESS; |
| | | } |
| | | |
| | | |
| | | /******************************************************************************* |
| | |
| | | * Return : Status [MEMS_ERROR, MEMS_SUCCESS] |
| | | *******************************************************************************/ |
| | | status_t LIS3DH_SetClickTHS(uint8_t ths) { |
| | | |
| | | if(ths>127) |
| | | return MEMS_ERROR; |
| | | |
| | | if( !LIS3DH_WriteReg(LIS3DH_CLICK_THS, ths) ) |
| | | return MEMS_ERROR; |
| | | |
| | | return MEMS_SUCCESS; |
| | | } |
| | | |
| | | if(ths>127) |
| | | return MEMS_ERROR; |
| | | |
| | | if( !LIS3DH_WriteReg(LIS3DH_CLICK_THS, ths) ) |
| | | return MEMS_ERROR; |
| | | |
| | | return MEMS_SUCCESS; |
| | | } |
| | | |
| | | |
| | | /******************************************************************************* |
| | |
| | | * Return : Status [MEMS_ERROR, MEMS_SUCCESS] |
| | | *******************************************************************************/ |
| | | status_t LIS3DH_SetClickLIMIT(uint8_t t_limit) { |
| | | |
| | | if(t_limit>127) |
| | | return MEMS_ERROR; |
| | | |
| | | if( !LIS3DH_WriteReg(LIS3DH_TIME_LIMIT, t_limit) ) |
| | | return MEMS_ERROR; |
| | | |
| | | return MEMS_SUCCESS; |
| | | } |
| | | |
| | | if(t_limit>127) |
| | | return MEMS_ERROR; |
| | | |
| | | if( !LIS3DH_WriteReg(LIS3DH_TIME_LIMIT, t_limit) ) |
| | | return MEMS_ERROR; |
| | | |
| | | return MEMS_SUCCESS; |
| | | } |
| | | |
| | | |
| | | /******************************************************************************* |
| | |
| | | * Return : Status [MEMS_ERROR, MEMS_SUCCESS] |
| | | *******************************************************************************/ |
| | | status_t LIS3DH_SetClickLATENCY(uint8_t t_latency) { |
| | | |
| | | if( !LIS3DH_WriteReg(LIS3DH_TIME_LATENCY, t_latency) ) |
| | | return MEMS_ERROR; |
| | | |
| | | return MEMS_SUCCESS; |
| | | } |
| | | |
| | | if( !LIS3DH_WriteReg(LIS3DH_TIME_LATENCY, t_latency) ) |
| | | return MEMS_ERROR; |
| | | |
| | | return MEMS_SUCCESS; |
| | | } |
| | | |
| | | |
| | | /******************************************************************************* |
| | |
| | | * Return : Status [MEMS_ERROR, MEMS_SUCCESS] |
| | | *******************************************************************************/ |
| | | status_t LIS3DH_SetClickWINDOW(uint8_t t_window) { |
| | | |
| | | if( !LIS3DH_WriteReg(LIS3DH_TIME_WINDOW, t_window) ) |
| | | return MEMS_ERROR; |
| | | |
| | | return MEMS_SUCCESS; |
| | | |
| | | if( !LIS3DH_WriteReg(LIS3DH_TIME_WINDOW, t_window) ) |
| | | return MEMS_ERROR; |
| | | |
| | | return MEMS_SUCCESS; |
| | | } |
| | | |
| | | |
| | |
| | | * Return : Status [MEMS_ERROR, MEMS_SUCCESS] |
| | | *******************************************************************************/ |
| | | status_t LIS3DH_GetClickResponse(uint8_t* res) { |
| | | uint8_t value; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_CLICK_SRC, &value) ) |
| | | uint8_t value; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_CLICK_SRC, &value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | value &= 0x7F; |
| | | |
| | | if((value & LIS3DH_IA)==0) { |
| | | *res = LIS3DH_NO_CLICK; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | else { |
| | | if (value & LIS3DH_DCLICK) { |
| | | if (value & LIS3DH_CLICK_SIGN) { |
| | | if (value & LIS3DH_CLICK_Z) { |
| | | *res = LIS3DH_DCLICK_Z_N; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | if (value & LIS3DH_CLICK_Y) { |
| | | *res = LIS3DH_DCLICK_Y_N; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | if (value & LIS3DH_CLICK_X) { |
| | | *res = LIS3DH_DCLICK_X_N; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | } |
| | | else { |
| | | if (value & LIS3DH_CLICK_Z) { |
| | | *res = LIS3DH_DCLICK_Z_P; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | if (value & LIS3DH_CLICK_Y) { |
| | | *res = LIS3DH_DCLICK_Y_P; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | if (value & LIS3DH_CLICK_X) { |
| | | *res = LIS3DH_DCLICK_X_P; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | } |
| | | } |
| | | else { |
| | | if (value & LIS3DH_CLICK_SIGN) { |
| | | if (value & LIS3DH_CLICK_Z) { |
| | | *res = LIS3DH_SCLICK_Z_N; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | if (value & LIS3DH_CLICK_Y) { |
| | | *res = LIS3DH_SCLICK_Y_N; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | if (value & LIS3DH_CLICK_X) { |
| | | *res = LIS3DH_SCLICK_X_N; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | } |
| | | else { |
| | | if (value & LIS3DH_CLICK_Z) { |
| | | *res = LIS3DH_SCLICK_Z_P; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | if (value & LIS3DH_CLICK_Y) { |
| | | *res = LIS3DH_SCLICK_Y_P; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | if (value & LIS3DH_CLICK_X) { |
| | | *res = LIS3DH_SCLICK_X_P; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | return MEMS_ERROR; |
| | | |
| | | value &= 0x7F; |
| | | |
| | | if((value & LIS3DH_IA)==0) { |
| | | *res = LIS3DH_NO_CLICK; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | else { |
| | | if (value & LIS3DH_DCLICK){ |
| | | if (value & LIS3DH_CLICK_SIGN){ |
| | | if (value & LIS3DH_CLICK_Z) { |
| | | *res = LIS3DH_DCLICK_Z_N; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | if (value & LIS3DH_CLICK_Y) { |
| | | *res = LIS3DH_DCLICK_Y_N; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | if (value & LIS3DH_CLICK_X) { |
| | | *res = LIS3DH_DCLICK_X_N; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | } |
| | | else{ |
| | | if (value & LIS3DH_CLICK_Z) { |
| | | *res = LIS3DH_DCLICK_Z_P; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | if (value & LIS3DH_CLICK_Y) { |
| | | *res = LIS3DH_DCLICK_Y_P; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | if (value & LIS3DH_CLICK_X) { |
| | | *res = LIS3DH_DCLICK_X_P; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | } |
| | | } |
| | | else{ |
| | | if (value & LIS3DH_CLICK_SIGN){ |
| | | if (value & LIS3DH_CLICK_Z) { |
| | | *res = LIS3DH_SCLICK_Z_N; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | if (value & LIS3DH_CLICK_Y) { |
| | | *res = LIS3DH_SCLICK_Y_N; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | if (value & LIS3DH_CLICK_X) { |
| | | *res = LIS3DH_SCLICK_X_N; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | } |
| | | else{ |
| | | if (value & LIS3DH_CLICK_Z) { |
| | | *res = LIS3DH_SCLICK_Z_P; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | if (value & LIS3DH_CLICK_Y) { |
| | | *res = LIS3DH_SCLICK_Y_P; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | if (value & LIS3DH_CLICK_X) { |
| | | *res = LIS3DH_SCLICK_X_P; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | return MEMS_ERROR; |
| | | } |
| | | } |
| | | |
| | | |
| | | /******************************************************************************* |
| | |
| | | * Return : Status [MEMS_ERROR, MEMS_SUCCESS] |
| | | *******************************************************************************/ |
| | | status_t LIS3DH_Int1LatchEnable(State_t latch) { |
| | | uint8_t value; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG5, &value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | value &= 0xF7; |
| | | value |= latch<<LIS3DH_LIR_INT1; |
| | | |
| | | if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG5, value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | return MEMS_SUCCESS; |
| | | uint8_t value; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG5, &value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | value &= 0xF7; |
| | | value |= latch<<LIS3DH_LIR_INT1; |
| | | |
| | | if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG5, value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | return MEMS_SUCCESS; |
| | | } |
| | | |
| | | |
| | |
| | | * Return : Status [MEMS_ERROR, MEMS_SUCCESS] |
| | | *******************************************************************************/ |
| | | status_t LIS3DH_ResetInt1Latch(void) { |
| | | uint8_t value; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_INT1_SRC, &value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | return MEMS_SUCCESS; |
| | | uint8_t value; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_INT1_SRC, &value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | return MEMS_SUCCESS; |
| | | } |
| | | |
| | | |
| | |
| | | * Return : Status [MEMS_ERROR, MEMS_SUCCESS] |
| | | *******************************************************************************/ |
| | | status_t LIS3DH_SetIntConfiguration(LIS3DH_Int1Conf_t ic) { |
| | | uint8_t value; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_INT1_CFG, &value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | value &= 0x40; |
| | | value |= ic; |
| | | |
| | | if( !LIS3DH_WriteReg(LIS3DH_INT1_CFG, value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | return MEMS_SUCCESS; |
| | | } |
| | | uint8_t value; |
| | | |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_INT1_CFG, &value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | value &= 0x40; |
| | | value |= ic; |
| | | |
| | | if( !LIS3DH_WriteReg(LIS3DH_INT1_CFG, value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | return MEMS_SUCCESS; |
| | | } |
| | | |
| | | |
| | | /******************************************************************************* |
| | | * Function Name : LIS3DH_SetIntMode |
| | | * Description : Interrupt 1 Configuration mode (OR, 6D Movement, AND, 6D Position) |
| | | * Input : LIS3DH_INT_MODE_OR, LIS3DH_INT_MODE_6D_MOVEMENT, LIS3DH_INT_MODE_AND, |
| | | * Input : LIS3DH_INT_MODE_OR, LIS3DH_INT_MODE_6D_MOVEMENT, LIS3DH_INT_MODE_AND, |
| | | LIS3DH_INT_MODE_6D_POSITION |
| | | * Output : None |
| | | * Return : Status [MEMS_ERROR, MEMS_SUCCESS] |
| | | *******************************************************************************/ |
| | | status_t LIS3DH_SetIntMode(LIS3DH_Int1Mode_t int_mode) { |
| | | uint8_t value; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_INT1_CFG, &value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | value &= 0x3F; |
| | | value |= (int_mode<<LIS3DH_INT_6D); |
| | | |
| | | if( !LIS3DH_WriteReg(LIS3DH_INT1_CFG, value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | return MEMS_SUCCESS; |
| | | uint8_t value; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_INT1_CFG, &value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | value &= 0x3F; |
| | | value |= (int_mode<<LIS3DH_INT_6D); |
| | | |
| | | if( !LIS3DH_WriteReg(LIS3DH_INT1_CFG, value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | return MEMS_SUCCESS; |
| | | } |
| | | |
| | | |
| | | |
| | | /******************************************************************************* |
| | | * Function Name : LIS3DH_SetInt6D4DConfiguration |
| | | * Description : 6D, 4D Interrupt Configuration |
| | |
| | | * Return : Status [MEMS_ERROR, MEMS_SUCCESS] |
| | | *******************************************************************************/ |
| | | status_t LIS3DH_SetInt6D4DConfiguration(LIS3DH_INT_6D_4D_t ic) { |
| | | uint8_t value; |
| | | uint8_t value2; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_INT1_CFG, &value) ) |
| | | return MEMS_ERROR; |
| | | if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG5, &value2) ) |
| | | return MEMS_ERROR; |
| | | |
| | | if(ic == LIS3DH_INT1_6D_ENABLE){ |
| | | value &= 0xBF; |
| | | value |= (MEMS_ENABLE<<LIS3DH_INT_6D); |
| | | value2 &= 0xFB; |
| | | value2 |= (MEMS_DISABLE<<LIS3DH_D4D_INT1); |
| | | } |
| | | |
| | | if(ic == LIS3DH_INT1_4D_ENABLE){ |
| | | value &= 0xBF; |
| | | value |= (MEMS_ENABLE<<LIS3DH_INT_6D); |
| | | value2 &= 0xFB; |
| | | value2 |= (MEMS_ENABLE<<LIS3DH_D4D_INT1); |
| | | } |
| | | |
| | | if(ic == LIS3DH_INT1_6D_4D_DISABLE){ |
| | | value &= 0xBF; |
| | | value |= (MEMS_DISABLE<<LIS3DH_INT_6D); |
| | | value2 &= 0xFB; |
| | | value2 |= (MEMS_DISABLE<<LIS3DH_D4D_INT1); |
| | | } |
| | | |
| | | if( !LIS3DH_WriteReg(LIS3DH_INT1_CFG, value) ) |
| | | return MEMS_ERROR; |
| | | if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG5, value2) ) |
| | | return MEMS_ERROR; |
| | | |
| | | return MEMS_SUCCESS; |
| | | uint8_t value; |
| | | uint8_t value2; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_INT1_CFG, &value) ) |
| | | return MEMS_ERROR; |
| | | if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG5, &value2) ) |
| | | return MEMS_ERROR; |
| | | |
| | | if(ic == LIS3DH_INT1_6D_ENABLE) { |
| | | value &= 0xBF; |
| | | value |= (MEMS_ENABLE<<LIS3DH_INT_6D); |
| | | value2 &= 0xFB; |
| | | value2 |= (MEMS_DISABLE<<LIS3DH_D4D_INT1); |
| | | } |
| | | |
| | | if(ic == LIS3DH_INT1_4D_ENABLE) { |
| | | value &= 0xBF; |
| | | value |= (MEMS_ENABLE<<LIS3DH_INT_6D); |
| | | value2 &= 0xFB; |
| | | value2 |= (MEMS_ENABLE<<LIS3DH_D4D_INT1); |
| | | } |
| | | |
| | | if(ic == LIS3DH_INT1_6D_4D_DISABLE) { |
| | | value &= 0xBF; |
| | | value |= (MEMS_DISABLE<<LIS3DH_INT_6D); |
| | | value2 &= 0xFB; |
| | | value2 |= (MEMS_DISABLE<<LIS3DH_D4D_INT1); |
| | | } |
| | | |
| | | if( !LIS3DH_WriteReg(LIS3DH_INT1_CFG, value) ) |
| | | return MEMS_ERROR; |
| | | if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG5, value2) ) |
| | | return MEMS_ERROR; |
| | | |
| | | return MEMS_SUCCESS; |
| | | } |
| | | |
| | | |
| | |
| | | * Output : None |
| | | * Return : Status [MEMS_ERROR, MEMS_SUCCESS] |
| | | *******************************************************************************/ |
| | | status_t LIS3DH_Get6DPosition(uint8_t* val){ |
| | | uint8_t value; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_INT1_SRC, &value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | value &= 0x7F; |
| | | |
| | | switch (value){ |
| | | case LIS3DH_UP_SX: |
| | | *val = LIS3DH_UP_SX; |
| | | break; |
| | | case LIS3DH_UP_DX: |
| | | *val = LIS3DH_UP_DX; |
| | | break; |
| | | case LIS3DH_DW_SX: |
| | | *val = LIS3DH_DW_SX; |
| | | break; |
| | | case LIS3DH_DW_DX: |
| | | *val = LIS3DH_DW_DX; |
| | | break; |
| | | case LIS3DH_TOP: |
| | | *val = LIS3DH_TOP; |
| | | break; |
| | | case LIS3DH_BOTTOM: |
| | | *val = LIS3DH_BOTTOM; |
| | | break; |
| | | } |
| | | |
| | | return MEMS_SUCCESS; |
| | | status_t LIS3DH_Get6DPosition(uint8_t* val) { |
| | | uint8_t value; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_INT1_SRC, &value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | value &= 0x7F; |
| | | |
| | | switch (value) { |
| | | case LIS3DH_UP_SX: |
| | | *val = LIS3DH_UP_SX; |
| | | break; |
| | | case LIS3DH_UP_DX: |
| | | *val = LIS3DH_UP_DX; |
| | | break; |
| | | case LIS3DH_DW_SX: |
| | | *val = LIS3DH_DW_SX; |
| | | break; |
| | | case LIS3DH_DW_DX: |
| | | *val = LIS3DH_DW_DX; |
| | | break; |
| | | case LIS3DH_TOP: |
| | | *val = LIS3DH_TOP; |
| | | break; |
| | | case LIS3DH_BOTTOM: |
| | | *val = LIS3DH_BOTTOM; |
| | | break; |
| | | } |
| | | |
| | | return MEMS_SUCCESS; |
| | | } |
| | | |
| | | |
| | |
| | | * Return : Status [MEMS_ERROR, MEMS_SUCCESS] |
| | | *******************************************************************************/ |
| | | status_t LIS3DH_SetInt1Threshold(uint8_t ths) { |
| | | if (ths > 127) |
| | | return MEMS_ERROR; |
| | | |
| | | if( !LIS3DH_WriteReg(LIS3DH_INT1_THS, ths) ) |
| | | return MEMS_ERROR; |
| | | |
| | | return MEMS_SUCCESS; |
| | | if (ths > 127) |
| | | return MEMS_ERROR; |
| | | |
| | | if( !LIS3DH_WriteReg(LIS3DH_INT1_THS, ths) ) |
| | | return MEMS_ERROR; |
| | | |
| | | return MEMS_SUCCESS; |
| | | } |
| | | |
| | | |
| | |
| | | * Return : Status [MEMS_ERROR, MEMS_SUCCESS] |
| | | *******************************************************************************/ |
| | | status_t LIS3DH_SetInt1Duration(LIS3DH_Int1Conf_t id) { |
| | | |
| | | if (id > 127) |
| | | return MEMS_ERROR; |
| | | |
| | | if( !LIS3DH_WriteReg(LIS3DH_INT1_DURATION, id) ) |
| | | return MEMS_ERROR; |
| | | |
| | | return MEMS_SUCCESS; |
| | | |
| | | if (id > 127) |
| | | return MEMS_ERROR; |
| | | |
| | | if( !LIS3DH_WriteReg(LIS3DH_INT1_DURATION, id) ) |
| | | return MEMS_ERROR; |
| | | |
| | | return MEMS_SUCCESS; |
| | | } |
| | | |
| | | |
| | | /******************************************************************************* |
| | | * Function Name : LIS3DH_FIFOModeEnable |
| | | * Description : Sets Fifo Modality |
| | | * Input : LIS3DH_FIFO_DISABLE, LIS3DH_FIFO_BYPASS_MODE, LIS3DH_FIFO_MODE, |
| | | * Input : LIS3DH_FIFO_DISABLE, LIS3DH_FIFO_BYPASS_MODE, LIS3DH_FIFO_MODE, |
| | | LIS3DH_FIFO_STREAM_MODE, LIS3DH_FIFO_TRIGGER_MODE |
| | | * Output : None |
| | | * Return : Status [MEMS_ERROR, MEMS_SUCCESS] |
| | | *******************************************************************************/ |
| | | status_t LIS3DH_FIFOModeEnable(LIS3DH_FifoMode_t fm) { |
| | | uint8_t value; |
| | | |
| | | if(fm == LIS3DH_FIFO_DISABLE) { |
| | | if( !LIS3DH_ReadReg(LIS3DH_FIFO_CTRL_REG, &value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | value &= 0x1F; |
| | | value |= (LIS3DH_FIFO_BYPASS_MODE<<LIS3DH_FM); |
| | | |
| | | if( !LIS3DH_WriteReg(LIS3DH_FIFO_CTRL_REG, value) ) //fifo mode bypass |
| | | return MEMS_ERROR; |
| | | if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG5, &value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | value &= 0xBF; |
| | | |
| | | if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG5, value) ) //fifo disable |
| | | return MEMS_ERROR; |
| | | } |
| | | |
| | | if(fm == LIS3DH_FIFO_BYPASS_MODE) { |
| | | if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG5, &value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | value &= 0xBF; |
| | | value |= MEMS_SET<<LIS3DH_FIFO_EN; |
| | | |
| | | if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG5, value) ) //fifo enable |
| | | return MEMS_ERROR; |
| | | if( !LIS3DH_ReadReg(LIS3DH_FIFO_CTRL_REG, &value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | value &= 0x1f; |
| | | value |= (fm<<LIS3DH_FM); //fifo mode configuration |
| | | |
| | | if( !LIS3DH_WriteReg(LIS3DH_FIFO_CTRL_REG, value) ) |
| | | return MEMS_ERROR; |
| | | } |
| | | |
| | | if(fm == LIS3DH_FIFO_MODE) { |
| | | if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG5, &value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | value &= 0xBF; |
| | | value |= MEMS_SET<<LIS3DH_FIFO_EN; |
| | | |
| | | if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG5, value) ) //fifo enable |
| | | return MEMS_ERROR; |
| | | if( !LIS3DH_ReadReg(LIS3DH_FIFO_CTRL_REG, &value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | value &= 0x1f; |
| | | value |= (fm<<LIS3DH_FM); //fifo mode configuration |
| | | |
| | | if( !LIS3DH_WriteReg(LIS3DH_FIFO_CTRL_REG, value) ) |
| | | return MEMS_ERROR; |
| | | } |
| | | |
| | | if(fm == LIS3DH_FIFO_STREAM_MODE) { |
| | | if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG5, &value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | value &= 0xBF; |
| | | value |= MEMS_SET<<LIS3DH_FIFO_EN; |
| | | |
| | | if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG5, value) ) //fifo enable |
| | | return MEMS_ERROR; |
| | | if( !LIS3DH_ReadReg(LIS3DH_FIFO_CTRL_REG, &value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | value &= 0x1f; |
| | | value |= (fm<<LIS3DH_FM); //fifo mode configuration |
| | | |
| | | if( !LIS3DH_WriteReg(LIS3DH_FIFO_CTRL_REG, value) ) |
| | | return MEMS_ERROR; |
| | | } |
| | | |
| | | if(fm == LIS3DH_FIFO_TRIGGER_MODE) { |
| | | if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG5, &value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | value &= 0xBF; |
| | | value |= MEMS_SET<<LIS3DH_FIFO_EN; |
| | | |
| | | if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG5, value) ) //fifo enable |
| | | return MEMS_ERROR; |
| | | if( !LIS3DH_ReadReg(LIS3DH_FIFO_CTRL_REG, &value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | value &= 0x1f; |
| | | value |= (fm<<LIS3DH_FM); //fifo mode configuration |
| | | |
| | | if( !LIS3DH_WriteReg(LIS3DH_FIFO_CTRL_REG, value) ) |
| | | return MEMS_ERROR; |
| | | } |
| | | |
| | | return MEMS_SUCCESS; |
| | | uint8_t value; |
| | | |
| | | if(fm == LIS3DH_FIFO_DISABLE) { |
| | | if( !LIS3DH_ReadReg(LIS3DH_FIFO_CTRL_REG, &value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | value &= 0x1F; |
| | | value |= (LIS3DH_FIFO_BYPASS_MODE<<LIS3DH_FM); |
| | | |
| | | if( !LIS3DH_WriteReg(LIS3DH_FIFO_CTRL_REG, value) ) //fifo mode bypass |
| | | return MEMS_ERROR; |
| | | if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG5, &value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | value &= 0xBF; |
| | | |
| | | if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG5, value) ) //fifo disable |
| | | return MEMS_ERROR; |
| | | } |
| | | |
| | | if(fm == LIS3DH_FIFO_BYPASS_MODE) { |
| | | if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG5, &value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | value &= 0xBF; |
| | | value |= MEMS_SET<<LIS3DH_FIFO_EN; |
| | | |
| | | if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG5, value) ) //fifo enable |
| | | return MEMS_ERROR; |
| | | if( !LIS3DH_ReadReg(LIS3DH_FIFO_CTRL_REG, &value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | value &= 0x1f; |
| | | value |= (fm<<LIS3DH_FM); //fifo mode configuration |
| | | |
| | | if( !LIS3DH_WriteReg(LIS3DH_FIFO_CTRL_REG, value) ) |
| | | return MEMS_ERROR; |
| | | } |
| | | |
| | | if(fm == LIS3DH_FIFO_MODE) { |
| | | if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG5, &value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | value &= 0xBF; |
| | | value |= MEMS_SET<<LIS3DH_FIFO_EN; |
| | | |
| | | if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG5, value) ) //fifo enable |
| | | return MEMS_ERROR; |
| | | if( !LIS3DH_ReadReg(LIS3DH_FIFO_CTRL_REG, &value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | value &= 0x1f; |
| | | value |= (fm<<LIS3DH_FM); //fifo mode configuration |
| | | |
| | | if( !LIS3DH_WriteReg(LIS3DH_FIFO_CTRL_REG, value) ) |
| | | return MEMS_ERROR; |
| | | } |
| | | |
| | | if(fm == LIS3DH_FIFO_STREAM_MODE) { |
| | | if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG5, &value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | value &= 0xBF; |
| | | value |= MEMS_SET<<LIS3DH_FIFO_EN; |
| | | |
| | | if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG5, value) ) //fifo enable |
| | | return MEMS_ERROR; |
| | | if( !LIS3DH_ReadReg(LIS3DH_FIFO_CTRL_REG, &value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | value &= 0x1f; |
| | | value |= (fm<<LIS3DH_FM); //fifo mode configuration |
| | | |
| | | if( !LIS3DH_WriteReg(LIS3DH_FIFO_CTRL_REG, value) ) |
| | | return MEMS_ERROR; |
| | | } |
| | | |
| | | if(fm == LIS3DH_FIFO_TRIGGER_MODE) { |
| | | if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG5, &value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | value &= 0xBF; |
| | | value |= MEMS_SET<<LIS3DH_FIFO_EN; |
| | | |
| | | if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG5, value) ) //fifo enable |
| | | return MEMS_ERROR; |
| | | if( !LIS3DH_ReadReg(LIS3DH_FIFO_CTRL_REG, &value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | value &= 0x1f; |
| | | value |= (fm<<LIS3DH_FM); //fifo mode configuration |
| | | |
| | | if( !LIS3DH_WriteReg(LIS3DH_FIFO_CTRL_REG, value) ) |
| | | return MEMS_ERROR; |
| | | } |
| | | |
| | | return MEMS_SUCCESS; |
| | | } |
| | | |
| | | |
| | |
| | | * Return : Status [MEMS_ERROR, MEMS_SUCCESS] |
| | | *******************************************************************************/ |
| | | status_t LIS3DH_SetTriggerInt(LIS3DH_TrigInt_t tr) { |
| | | uint8_t value; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_FIFO_CTRL_REG, &value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | value &= 0xDF; |
| | | value |= (tr<<LIS3DH_TR); |
| | | |
| | | if( !LIS3DH_WriteReg(LIS3DH_FIFO_CTRL_REG, value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | return MEMS_SUCCESS; |
| | | uint8_t value; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_FIFO_CTRL_REG, &value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | value &= 0xDF; |
| | | value |= (tr<<LIS3DH_TR); |
| | | |
| | | if( !LIS3DH_WriteReg(LIS3DH_FIFO_CTRL_REG, value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | return MEMS_SUCCESS; |
| | | } |
| | | |
| | | |
| | |
| | | * Return : Status [MEMS_ERROR, MEMS_SUCCESS] |
| | | *******************************************************************************/ |
| | | status_t LIS3DH_SetWaterMark(uint8_t wtm) { |
| | | uint8_t value; |
| | | |
| | | if(wtm > 31) |
| | | return MEMS_ERROR; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_FIFO_CTRL_REG, &value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | value &= 0xE0; |
| | | value |= wtm; |
| | | |
| | | if( !LIS3DH_WriteReg(LIS3DH_FIFO_CTRL_REG, value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | return MEMS_SUCCESS; |
| | | uint8_t value; |
| | | |
| | | if(wtm > 31) |
| | | return MEMS_ERROR; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_FIFO_CTRL_REG, &value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | value &= 0xE0; |
| | | value |= wtm; |
| | | |
| | | if( !LIS3DH_WriteReg(LIS3DH_FIFO_CTRL_REG, value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | return MEMS_SUCCESS; |
| | | } |
| | | |
| | | |
| | | |
| | | /******************************************************************************* |
| | | * Function Name : LIS3DH_GetStatusReg |
| | | * Description : Read the status register |
| | |
| | | * Return : Status [MEMS_ERROR, MEMS_SUCCESS] |
| | | *******************************************************************************/ |
| | | status_t LIS3DH_GetStatusReg(uint8_t* val) { |
| | | if( !LIS3DH_ReadReg(LIS3DH_STATUS_REG, val) ) |
| | | return MEMS_ERROR; |
| | | |
| | | return MEMS_SUCCESS; |
| | | if( !LIS3DH_ReadReg(LIS3DH_STATUS_REG, val) ) |
| | | return MEMS_ERROR; |
| | | |
| | | return MEMS_SUCCESS; |
| | | } |
| | | |
| | | |
| | |
| | | * Function Name : LIS3DH_GetStatusBIT |
| | | * Description : Read the status register BIT |
| | | * Input : LIS3DH_STATUS_REG_ZYXOR, LIS3DH_STATUS_REG_ZOR, LIS3DH_STATUS_REG_YOR, LIS3DH_STATUS_REG_XOR, |
| | | LIS3DH_STATUS_REG_ZYXDA, LIS3DH_STATUS_REG_ZDA, LIS3DH_STATUS_REG_YDA, LIS3DH_STATUS_REG_XDA, |
| | | LIS3DH_STATUS_REG_ZYXDA, LIS3DH_STATUS_REG_ZDA, LIS3DH_STATUS_REG_YDA, LIS3DH_STATUS_REG_XDA, |
| | | LIS3DH_DATAREADY_BIT |
| | | val: Byte to be filled with the status bit |
| | | val: Byte to be filled with the status bit |
| | | * Output : status register BIT |
| | | * Return : Status [MEMS_ERROR, MEMS_SUCCESS] |
| | | *******************************************************************************/ |
| | | status_t LIS3DH_GetStatusBit(uint8_t statusBIT, uint8_t* val) { |
| | | uint8_t value; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_STATUS_REG, &value) ) |
| | | uint8_t value; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_STATUS_REG, &value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | switch (statusBIT) { |
| | | case LIS3DH_STATUS_REG_ZYXOR: |
| | | if(value &= LIS3DH_STATUS_REG_ZYXOR) { |
| | | *val = MEMS_SET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | else { |
| | | *val = MEMS_RESET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | case LIS3DH_STATUS_REG_ZOR: |
| | | if(value &= LIS3DH_STATUS_REG_ZOR) { |
| | | *val = MEMS_SET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | else { |
| | | *val = MEMS_RESET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | case LIS3DH_STATUS_REG_YOR: |
| | | if(value &= LIS3DH_STATUS_REG_YOR) { |
| | | *val = MEMS_SET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | else { |
| | | *val = MEMS_RESET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | case LIS3DH_STATUS_REG_XOR: |
| | | if(value &= LIS3DH_STATUS_REG_XOR) { |
| | | *val = MEMS_SET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | else { |
| | | *val = MEMS_RESET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | case LIS3DH_STATUS_REG_ZYXDA: |
| | | if(value &= LIS3DH_STATUS_REG_ZYXDA) { |
| | | *val = MEMS_SET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | else { |
| | | *val = MEMS_RESET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | case LIS3DH_STATUS_REG_ZDA: |
| | | if(value &= LIS3DH_STATUS_REG_ZDA) { |
| | | *val = MEMS_SET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | else { |
| | | *val = MEMS_RESET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | case LIS3DH_STATUS_REG_YDA: |
| | | if(value &= LIS3DH_STATUS_REG_YDA) { |
| | | *val = MEMS_SET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | else { |
| | | *val = MEMS_RESET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | case LIS3DH_STATUS_REG_XDA: |
| | | if(value &= LIS3DH_STATUS_REG_XDA) { |
| | | *val = MEMS_SET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | else { |
| | | *val = MEMS_RESET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | |
| | | } |
| | | return MEMS_ERROR; |
| | | |
| | | switch (statusBIT){ |
| | | case LIS3DH_STATUS_REG_ZYXOR: |
| | | if(value &= LIS3DH_STATUS_REG_ZYXOR){ |
| | | *val = MEMS_SET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | else{ |
| | | *val = MEMS_RESET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | case LIS3DH_STATUS_REG_ZOR: |
| | | if(value &= LIS3DH_STATUS_REG_ZOR){ |
| | | *val = MEMS_SET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | else{ |
| | | *val = MEMS_RESET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | case LIS3DH_STATUS_REG_YOR: |
| | | if(value &= LIS3DH_STATUS_REG_YOR){ |
| | | *val = MEMS_SET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | else{ |
| | | *val = MEMS_RESET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | case LIS3DH_STATUS_REG_XOR: |
| | | if(value &= LIS3DH_STATUS_REG_XOR){ |
| | | *val = MEMS_SET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | else{ |
| | | *val = MEMS_RESET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | case LIS3DH_STATUS_REG_ZYXDA: |
| | | if(value &= LIS3DH_STATUS_REG_ZYXDA){ |
| | | *val = MEMS_SET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | else{ |
| | | *val = MEMS_RESET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | case LIS3DH_STATUS_REG_ZDA: |
| | | if(value &= LIS3DH_STATUS_REG_ZDA){ |
| | | *val = MEMS_SET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | else{ |
| | | *val = MEMS_RESET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | case LIS3DH_STATUS_REG_YDA: |
| | | if(value &= LIS3DH_STATUS_REG_YDA){ |
| | | *val = MEMS_SET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | else{ |
| | | *val = MEMS_RESET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | case LIS3DH_STATUS_REG_XDA: |
| | | if(value &= LIS3DH_STATUS_REG_XDA){ |
| | | *val = MEMS_SET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | else{ |
| | | *val = MEMS_RESET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | |
| | | } |
| | | return MEMS_ERROR; |
| | | } |
| | | |
| | | |
| | |
| | | * Return : Status [MEMS_ERROR, MEMS_SUCCESS] |
| | | *******************************************************************************/ |
| | | status_t LIS3DH_GetAccAxesRaw(AxesRaw_t* buff) { |
| | | int16_t value; |
| | | uint8_t *valueL = (uint8_t *)(&value); |
| | | uint8_t *valueH = ((uint8_t *)(&value)+1); |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_OUT_X_L, valueL) ) |
| | | return MEMS_ERROR; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_OUT_X_H, valueH) ) |
| | | return MEMS_ERROR; |
| | | |
| | | buff->AXIS_X = value; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_OUT_Y_L, valueL) ) |
| | | return MEMS_ERROR; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_OUT_Y_H, valueH) ) |
| | | return MEMS_ERROR; |
| | | |
| | | buff->AXIS_Y = value; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_OUT_Z_L, valueL) ) |
| | | return MEMS_ERROR; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_OUT_Z_H, valueH) ) |
| | | return MEMS_ERROR; |
| | | |
| | | buff->AXIS_Z = value; |
| | | |
| | | return MEMS_SUCCESS; |
| | | int16_t value; |
| | | uint8_t *valueL = (uint8_t *)(&value); |
| | | uint8_t *valueH = ((uint8_t *)(&value)+1); |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_OUT_X_L, valueL) ) |
| | | return MEMS_ERROR; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_OUT_X_H, valueH) ) |
| | | return MEMS_ERROR; |
| | | |
| | | buff->AXIS_X = value; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_OUT_Y_L, valueL) ) |
| | | return MEMS_ERROR; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_OUT_Y_H, valueH) ) |
| | | return MEMS_ERROR; |
| | | |
| | | buff->AXIS_Y = value; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_OUT_Z_L, valueL) ) |
| | | return MEMS_ERROR; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_OUT_Z_H, valueH) ) |
| | | return MEMS_ERROR; |
| | | |
| | | buff->AXIS_Z = value; |
| | | |
| | | return MEMS_SUCCESS; |
| | | } |
| | | |
| | | |
| | |
| | | * Return : Status [MEMS_ERROR, MEMS_SUCCESS] |
| | | *******************************************************************************/ |
| | | status_t LIS3DH_GetInt1Src(uint8_t* val) { |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_INT1_SRC, val) ) |
| | | return MEMS_ERROR; |
| | | |
| | | return MEMS_SUCCESS; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_INT1_SRC, val) ) |
| | | return MEMS_ERROR; |
| | | |
| | | return MEMS_SUCCESS; |
| | | } |
| | | |
| | | |
| | |
| | | * Return : Status of BIT [MEMS_ERROR, MEMS_SUCCESS] |
| | | *******************************************************************************/ |
| | | status_t LIS3DH_GetInt1SrcBit(uint8_t statusBIT, uint8_t* val) { |
| | | uint8_t value; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_INT1_SRC, &value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | if(statusBIT == LIS3DH_INT1_SRC_IA){ |
| | | if(value &= LIS3DH_INT1_SRC_IA){ |
| | | *val = MEMS_SET; |
| | | return MEMS_SUCCESS; |
| | | uint8_t value; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_INT1_SRC, &value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | if(statusBIT == LIS3DH_INT1_SRC_IA) { |
| | | if(value &= LIS3DH_INT1_SRC_IA) { |
| | | *val = MEMS_SET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | else { |
| | | *val = MEMS_RESET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | } |
| | | else{ |
| | | *val = MEMS_RESET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | } |
| | | |
| | | if(statusBIT == LIS3DH_INT1_SRC_ZH){ |
| | | if(value &= LIS3DH_INT1_SRC_ZH){ |
| | | *val = MEMS_SET; |
| | | return MEMS_SUCCESS; |
| | | |
| | | if(statusBIT == LIS3DH_INT1_SRC_ZH) { |
| | | if(value &= LIS3DH_INT1_SRC_ZH) { |
| | | *val = MEMS_SET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | else { |
| | | *val = MEMS_RESET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | } |
| | | else{ |
| | | *val = MEMS_RESET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | } |
| | | |
| | | if(statusBIT == LIS3DH_INT1_SRC_ZL){ |
| | | if(value &= LIS3DH_INT1_SRC_ZL){ |
| | | *val = MEMS_SET; |
| | | return MEMS_SUCCESS; |
| | | |
| | | if(statusBIT == LIS3DH_INT1_SRC_ZL) { |
| | | if(value &= LIS3DH_INT1_SRC_ZL) { |
| | | *val = MEMS_SET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | else { |
| | | *val = MEMS_RESET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | } |
| | | else{ |
| | | *val = MEMS_RESET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | } |
| | | |
| | | if(statusBIT == LIS3DH_INT1_SRC_YH){ |
| | | if(value &= LIS3DH_INT1_SRC_YH){ |
| | | *val = MEMS_SET; |
| | | return MEMS_SUCCESS; |
| | | |
| | | if(statusBIT == LIS3DH_INT1_SRC_YH) { |
| | | if(value &= LIS3DH_INT1_SRC_YH) { |
| | | *val = MEMS_SET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | else { |
| | | *val = MEMS_RESET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | } |
| | | else{ |
| | | *val = MEMS_RESET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | } |
| | | |
| | | if(statusBIT == LIS3DH_INT1_SRC_YL){ |
| | | if(value &= LIS3DH_INT1_SRC_YL){ |
| | | *val = MEMS_SET; |
| | | return MEMS_SUCCESS; |
| | | |
| | | if(statusBIT == LIS3DH_INT1_SRC_YL) { |
| | | if(value &= LIS3DH_INT1_SRC_YL) { |
| | | *val = MEMS_SET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | else { |
| | | *val = MEMS_RESET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | } |
| | | else{ |
| | | *val = MEMS_RESET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | } |
| | | if(statusBIT == LIS3DH_INT1_SRC_XH){ |
| | | if(value &= LIS3DH_INT1_SRC_XH){ |
| | | *val = MEMS_SET; |
| | | return MEMS_SUCCESS; |
| | | if(statusBIT == LIS3DH_INT1_SRC_XH) { |
| | | if(value &= LIS3DH_INT1_SRC_XH) { |
| | | *val = MEMS_SET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | else { |
| | | *val = MEMS_RESET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | } |
| | | else{ |
| | | *val = MEMS_RESET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | } |
| | | |
| | | if(statusBIT == LIS3DH_INT1_SRC_XL){ |
| | | if(value &= LIS3DH_INT1_SRC_XL){ |
| | | *val = MEMS_SET; |
| | | return MEMS_SUCCESS; |
| | | |
| | | if(statusBIT == LIS3DH_INT1_SRC_XL) { |
| | | if(value &= LIS3DH_INT1_SRC_XL) { |
| | | *val = MEMS_SET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | else { |
| | | *val = MEMS_RESET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | } |
| | | else{ |
| | | *val = MEMS_RESET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | } |
| | | return MEMS_ERROR; |
| | | return MEMS_ERROR; |
| | | } |
| | | |
| | | |
| | |
| | | * Return : Status [MEMS_ERROR, MEMS_SUCCESS] |
| | | *******************************************************************************/ |
| | | status_t LIS3DH_GetFifoSourceReg(uint8_t* val) { |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_FIFO_SRC_REG, val) ) |
| | | return MEMS_ERROR; |
| | | |
| | | return MEMS_SUCCESS; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_FIFO_SRC_REG, val) ) |
| | | return MEMS_ERROR; |
| | | |
| | | return MEMS_SUCCESS; |
| | | } |
| | | |
| | | |
| | |
| | | * Output : None |
| | | * Return : Status of BIT [MEMS_ERROR, MEMS_SUCCESS] |
| | | *******************************************************************************/ |
| | | status_t LIS3DH_GetFifoSourceBit(uint8_t statusBIT, uint8_t* val){ |
| | | uint8_t value; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_FIFO_SRC_REG, &value) ) |
| | | status_t LIS3DH_GetFifoSourceBit(uint8_t statusBIT, uint8_t* val) { |
| | | uint8_t value; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_FIFO_SRC_REG, &value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | |
| | | if(statusBIT == LIS3DH_FIFO_SRC_WTM) { |
| | | if(value &= LIS3DH_FIFO_SRC_WTM) { |
| | | *val = MEMS_SET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | else { |
| | | *val = MEMS_RESET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | } |
| | | |
| | | if(statusBIT == LIS3DH_FIFO_SRC_OVRUN) { |
| | | if(value &= LIS3DH_FIFO_SRC_OVRUN) { |
| | | *val = MEMS_SET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | else { |
| | | *val = MEMS_RESET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | } |
| | | if(statusBIT == LIS3DH_FIFO_SRC_EMPTY) { |
| | | if(value &= statusBIT == LIS3DH_FIFO_SRC_EMPTY) { |
| | | *val = MEMS_SET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | else { |
| | | *val = MEMS_RESET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | } |
| | | return MEMS_ERROR; |
| | | |
| | | |
| | | if(statusBIT == LIS3DH_FIFO_SRC_WTM){ |
| | | if(value &= LIS3DH_FIFO_SRC_WTM){ |
| | | *val = MEMS_SET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | else{ |
| | | *val = MEMS_RESET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | } |
| | | |
| | | if(statusBIT == LIS3DH_FIFO_SRC_OVRUN){ |
| | | if(value &= LIS3DH_FIFO_SRC_OVRUN){ |
| | | *val = MEMS_SET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | else{ |
| | | *val = MEMS_RESET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | } |
| | | if(statusBIT == LIS3DH_FIFO_SRC_EMPTY){ |
| | | if(value &= statusBIT == LIS3DH_FIFO_SRC_EMPTY){ |
| | | *val = MEMS_SET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | else{ |
| | | *val = MEMS_RESET; |
| | | return MEMS_SUCCESS; |
| | | } |
| | | } |
| | | return MEMS_ERROR; |
| | | } |
| | | |
| | | |
| | |
| | | * Output : None |
| | | * Return : Status [value of FSS] |
| | | *******************************************************************************/ |
| | | status_t LIS3DH_GetFifoSourceFSS(uint8_t* val){ |
| | | uint8_t value; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_FIFO_SRC_REG, &value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | value &= 0x1F; |
| | | |
| | | *val = value; |
| | | |
| | | return MEMS_SUCCESS; |
| | | status_t LIS3DH_GetFifoSourceFSS(uint8_t* val) { |
| | | uint8_t value; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_FIFO_SRC_REG, &value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | value &= 0x1F; |
| | | |
| | | *val = value; |
| | | |
| | | return MEMS_SUCCESS; |
| | | } |
| | | |
| | | |
| | | |
| | | /******************************************************************************* |
| | | * Function Name : LIS3DH_SetSPIInterface |
| | | * Description : Set SPI mode: 3 Wire Interface OR 4 Wire Interface |
| | |
| | | * Return : Status [MEMS_ERROR, MEMS_SUCCESS] |
| | | *******************************************************************************/ |
| | | status_t LIS3DH_SetSPIInterface(LIS3DH_SPIMode_t spi) { |
| | | uint8_t value; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG4, &value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | value &= 0xFE; |
| | | value |= spi<<LIS3DH_SIM; |
| | | |
| | | if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG4, value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | return MEMS_SUCCESS; |
| | | uint8_t value; |
| | | |
| | | if( !LIS3DH_ReadReg(LIS3DH_CTRL_REG4, &value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | value &= 0xFE; |
| | | value |= spi<<LIS3DH_SIM; |
| | | |
| | | if( !LIS3DH_WriteReg(LIS3DH_CTRL_REG4, value) ) |
| | | return MEMS_ERROR; |
| | | |
| | | return MEMS_SUCCESS; |
| | | } |
| | | /******************* (C) COPYRIGHT 2012 STMicroelectronics *****END OF FILE****/ |
| | | |