/** * \addtogroup mbxxx-platform * * @{ */ /******************** (C) COPYRIGHT 2009 STMicroelectronics ******************** * File Name : hal_led.c * Author : MCD Application Team * Version : V1.0 * Date : September 2009 * Description : Driver for leds management on STM32W108 MBXXX boards ******************************************************************************** * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME. * AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT, * INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE * CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING * INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. *******************************************************************************/ /* Includes ------------------------------------------------------------------*/ #include PLATFORM_HEADER #include "mems.h" #include "timer.h" #include "i2c.h" /* Private define -- ---------------------------------------------------------*/ #define SUCCESS 1 #define FAIL 0 /* Private variables ---------------------------------------------------------*/ static boolean fullscale_state; /* Functions -----------------------------------------------------------------*/ /******************************************************************************* * Function Name : MEMS_Write_Reg * Description : It writes a register on the I2C target * Input : slave addr is the I2C target device * reg_addr is the address of the register to be written * reg_value is the value of the register to be written * Output : None * Return : 1 if the register has been successfully written, 0 otherwise. *******************************************************************************/ uint8_t MEMS_Write_Reg (uint8_t slave_addr, uint8_t reg_addr, uint8_t reg_value) { i2c_start(); /* send the address low byte */ i2c_write(slave_addr); /* send register address */ i2c_write(reg_addr); /* send register value */ i2c_write(reg_value); i2c_stop(); return SUCCESS; }/* end MEMS_Write_Reg() */ /******************************************************************************* * Function Name : MEMS_Read_Reg * Description : It reads a register on the I2C target * Input : slave addr is the I2C target device * reg_addr is the address of the register to be read * pBuffer is the storage destination for the read data * NoOfBytes is the amount of data to read * Output : I2C frame * Return : 1 if the register has been successfully read, 0 otherwise. *******************************************************************************/ uint8_t MEMS_Read_Reg (uint8_t slave_addr, uint8_t reg_addr, uint8_t *pBuffer, uint8_t NoOfBytes) { uint8_t i, ack, addr = reg_addr; if (NoOfBytes > 1) addr += REPETIR; i2c_start(); /* send the address low byte */ i2c_write(slave_addr | 0x00); i2c_write(addr); i2c_start(); /* send the address low byte */ i2c_write(slave_addr | 0x01); /* loop receiving the data */ for (i = 0; i < NoOfBytes; i++){ if (i < (NoOfBytes - 1)) /* ack on receipt of data */ ack = 1; else /* don't ack if last one */ ack = 0; /* receive data */ *(pBuffer+i) = i2c_read(ack); } i2c_stop(); return SUCCESS; }/* end MEMS_Read_Reg() */ /******************************************************************************* * Function Name : MEMS_Init * Description : It inits mems * Input : None * Output : status * Return : None *******************************************************************************/ uint8_t MEMS_Init(void) { TIM2_CCER &= 0xFFFFEEEE; MEMS_Write_Reg (kLIS3L02DQ_SLAVE_ADDR, STATUS_REG, 0x00); //no flag MEMS_Write_Reg (kLIS3L02DQ_SLAVE_ADDR, FF_WU_CFG, 0x00); // all off MEMS_Write_Reg (kLIS3L02DQ_SLAVE_ADDR, DD_CFG, 0x00); // all off MEMS_Write_Reg (kLIS3L02DQ_SLAVE_ADDR, CTRL_REG2, 0x00); MEMS_Write_Reg (kLIS3L02DQ_SLAVE_ADDR, CTRL_REG1, 0x87); fullscale_state = MEMS_LOW_RANGE; return 1; }/* end MEMS_Init */ /******************************************************************************* * Function Name : I2C_MEMS_On * Description : It turn on the device. * Input : None * Output : None * Return : 1 if the device has been successfully set to normal mode, 0 otherwise. *******************************************************************************/ uint8_t MEMS_On (void) { return MEMS_Write_Reg (kLIS3L02DQ_SLAVE_ADDR, CTRL_REG1, 0xC7); } /******************************************************************************* * Function Name : MEMS_Off * Description : It turn off the device. * Input : None * Output : None * Return : 1 if the device has been successfully set to power-down mode, 0 otherwise. *******************************************************************************/ uint8_t MEMS_Off (void) { return MEMS_Write_Reg (kLIS3L02DQ_SLAVE_ADDR, CTRL_REG1, 0x87); } /******************************************************************************* * Function Name : I2C_MEMS_SetFullScale * Description : It sets the full-scale range of the device. * Input : range HIGH for high scale selection, LOW for low range. * Output : None * Return : 1 if the device has been successfully set to full scale mode, 0 otherwise. *******************************************************************************/ uint8_t MEMS_SetFullScale (boolean range) { uint8_t i2c_buffer; MEMS_Read_Reg(kLIS3L02DQ_SLAVE_ADDR, CTRL_REG1, &i2c_buffer, 1); if(range==MEMS_HIGH_RANGE){ i2c_buffer |= 0x20; } else { i2c_buffer &= ~0x20; } MEMS_Write_Reg(kLIS3L02DQ_SLAVE_ADDR, CTRL_REG1, i2c_buffer); fullscale_state = range; return 1; } /******************************************************************************* * Function Name : MEMS_GetFullScale * Description : It get the full-scale range of the device. * Input : None * Output : None * Return : range HIGH for high scale selection, LOW for low range. *******************************************************************************/ boolean MEMS_GetFullScale (void) { return fullscale_state; } /******************* (C) COPYRIGHT 2009 STMicroelectronics *****END OF FILE****/ /** @} */