Mouse code for the MacroRat

Dependencies:   ITG3200 QEI

Committer:
sahilmgandhi
Date:
Sat Jun 03 00:22:44 2017 +0000
Revision:
46:b156ef445742
Parent:
18:6a4db94011d3
Final code for internal battlebot competition.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sahilmgandhi 18:6a4db94011d3 1 /**
sahilmgandhi 18:6a4db94011d3 2 ******************************************************************************
sahilmgandhi 18:6a4db94011d3 3 * @file stm32f4xx_hal_i2c_ex.c
sahilmgandhi 18:6a4db94011d3 4 * @author MCD Application Team
sahilmgandhi 18:6a4db94011d3 5 * @version V1.5.0
sahilmgandhi 18:6a4db94011d3 6 * @date 06-May-2016
sahilmgandhi 18:6a4db94011d3 7 * @brief I2C Extension HAL module driver.
sahilmgandhi 18:6a4db94011d3 8 * This file provides firmware functions to manage the following
sahilmgandhi 18:6a4db94011d3 9 * functionalities of I2C extension peripheral:
sahilmgandhi 18:6a4db94011d3 10 * + Extension features functions
sahilmgandhi 18:6a4db94011d3 11 *
sahilmgandhi 18:6a4db94011d3 12 @verbatim
sahilmgandhi 18:6a4db94011d3 13 ==============================================================================
sahilmgandhi 18:6a4db94011d3 14 ##### I2C peripheral extension features #####
sahilmgandhi 18:6a4db94011d3 15 ==============================================================================
sahilmgandhi 18:6a4db94011d3 16
sahilmgandhi 18:6a4db94011d3 17 [..] Comparing to other previous devices, the I2C interface for STM32F427xx/437xx/
sahilmgandhi 18:6a4db94011d3 18 429xx/439xx devices contains the following additional features :
sahilmgandhi 18:6a4db94011d3 19
sahilmgandhi 18:6a4db94011d3 20 (+) Possibility to disable or enable Analog Noise Filter
sahilmgandhi 18:6a4db94011d3 21 (+) Use of a configured Digital Noise Filter
sahilmgandhi 18:6a4db94011d3 22
sahilmgandhi 18:6a4db94011d3 23 ##### How to use this driver #####
sahilmgandhi 18:6a4db94011d3 24 ==============================================================================
sahilmgandhi 18:6a4db94011d3 25 [..] This driver provides functions to configure Noise Filter
sahilmgandhi 18:6a4db94011d3 26 (#) Configure I2C Analog noise filter using the function HAL_I2C_AnalogFilter_Config()
sahilmgandhi 18:6a4db94011d3 27 (#) Configure I2C Digital noise filter using the function HAL_I2C_DigitalFilter_Config()
sahilmgandhi 18:6a4db94011d3 28
sahilmgandhi 18:6a4db94011d3 29 @endverbatim
sahilmgandhi 18:6a4db94011d3 30 ******************************************************************************
sahilmgandhi 18:6a4db94011d3 31 * @attention
sahilmgandhi 18:6a4db94011d3 32 *
sahilmgandhi 18:6a4db94011d3 33 * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>
sahilmgandhi 18:6a4db94011d3 34 *
sahilmgandhi 18:6a4db94011d3 35 * Redistribution and use in source and binary forms, with or without modification,
sahilmgandhi 18:6a4db94011d3 36 * are permitted provided that the following conditions are met:
sahilmgandhi 18:6a4db94011d3 37 * 1. Redistributions of source code must retain the above copyright notice,
sahilmgandhi 18:6a4db94011d3 38 * this list of conditions and the following disclaimer.
sahilmgandhi 18:6a4db94011d3 39 * 2. Redistributions in binary form must reproduce the above copyright notice,
sahilmgandhi 18:6a4db94011d3 40 * this list of conditions and the following disclaimer in the documentation
sahilmgandhi 18:6a4db94011d3 41 * and/or other materials provided with the distribution.
sahilmgandhi 18:6a4db94011d3 42 * 3. Neither the name of STMicroelectronics nor the names of its contributors
sahilmgandhi 18:6a4db94011d3 43 * may be used to endorse or promote products derived from this software
sahilmgandhi 18:6a4db94011d3 44 * without specific prior written permission.
sahilmgandhi 18:6a4db94011d3 45 *
sahilmgandhi 18:6a4db94011d3 46 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
sahilmgandhi 18:6a4db94011d3 47 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
sahilmgandhi 18:6a4db94011d3 48 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
sahilmgandhi 18:6a4db94011d3 49 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
sahilmgandhi 18:6a4db94011d3 50 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
sahilmgandhi 18:6a4db94011d3 51 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
sahilmgandhi 18:6a4db94011d3 52 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
sahilmgandhi 18:6a4db94011d3 53 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
sahilmgandhi 18:6a4db94011d3 54 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
sahilmgandhi 18:6a4db94011d3 55 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
sahilmgandhi 18:6a4db94011d3 56 *
sahilmgandhi 18:6a4db94011d3 57 ******************************************************************************
sahilmgandhi 18:6a4db94011d3 58 */
sahilmgandhi 18:6a4db94011d3 59
sahilmgandhi 18:6a4db94011d3 60 /* Includes ------------------------------------------------------------------*/
sahilmgandhi 18:6a4db94011d3 61 #include "stm32f4xx_hal.h"
sahilmgandhi 18:6a4db94011d3 62
sahilmgandhi 18:6a4db94011d3 63 /** @addtogroup STM32F4xx_HAL_Driver
sahilmgandhi 18:6a4db94011d3 64 * @{
sahilmgandhi 18:6a4db94011d3 65 */
sahilmgandhi 18:6a4db94011d3 66
sahilmgandhi 18:6a4db94011d3 67 /** @defgroup I2CEx I2CEx
sahilmgandhi 18:6a4db94011d3 68 * @brief I2C HAL module driver
sahilmgandhi 18:6a4db94011d3 69 * @{
sahilmgandhi 18:6a4db94011d3 70 */
sahilmgandhi 18:6a4db94011d3 71
sahilmgandhi 18:6a4db94011d3 72 #ifdef HAL_I2C_MODULE_ENABLED
sahilmgandhi 18:6a4db94011d3 73
sahilmgandhi 18:6a4db94011d3 74 #if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) ||\
sahilmgandhi 18:6a4db94011d3 75 defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F411xE) || defined(STM32F446xx) ||\
sahilmgandhi 18:6a4db94011d3 76 defined(STM32F469xx) || defined(STM32F479xx)
sahilmgandhi 18:6a4db94011d3 77 /* Private typedef -----------------------------------------------------------*/
sahilmgandhi 18:6a4db94011d3 78 /* Private define ------------------------------------------------------------*/
sahilmgandhi 18:6a4db94011d3 79 /* Private macro -------------------------------------------------------------*/
sahilmgandhi 18:6a4db94011d3 80 /* Private variables ---------------------------------------------------------*/
sahilmgandhi 18:6a4db94011d3 81 /* Private function prototypes -----------------------------------------------*/
sahilmgandhi 18:6a4db94011d3 82 /* Exported functions --------------------------------------------------------*/
sahilmgandhi 18:6a4db94011d3 83 /** @defgroup I2CEx_Exported_Functions I2C Exported Functions
sahilmgandhi 18:6a4db94011d3 84 * @{
sahilmgandhi 18:6a4db94011d3 85 */
sahilmgandhi 18:6a4db94011d3 86
sahilmgandhi 18:6a4db94011d3 87
sahilmgandhi 18:6a4db94011d3 88 /** @defgroup I2CEx_Exported_Functions_Group1 Extension features functions
sahilmgandhi 18:6a4db94011d3 89 * @brief Extension features functions
sahilmgandhi 18:6a4db94011d3 90 *
sahilmgandhi 18:6a4db94011d3 91 @verbatim
sahilmgandhi 18:6a4db94011d3 92 ===============================================================================
sahilmgandhi 18:6a4db94011d3 93 ##### Extension features functions #####
sahilmgandhi 18:6a4db94011d3 94 ===============================================================================
sahilmgandhi 18:6a4db94011d3 95 [..] This section provides functions allowing to:
sahilmgandhi 18:6a4db94011d3 96 (+) Configure Noise Filters
sahilmgandhi 18:6a4db94011d3 97
sahilmgandhi 18:6a4db94011d3 98 @endverbatim
sahilmgandhi 18:6a4db94011d3 99 * @{
sahilmgandhi 18:6a4db94011d3 100 */
sahilmgandhi 18:6a4db94011d3 101
sahilmgandhi 18:6a4db94011d3 102 /**
sahilmgandhi 18:6a4db94011d3 103 * @brief Configures I2C Analog noise filter.
sahilmgandhi 18:6a4db94011d3 104 * @param hi2c: pointer to a I2C_HandleTypeDef structure that contains
sahilmgandhi 18:6a4db94011d3 105 * the configuration information for the specified I2Cx peripheral.
sahilmgandhi 18:6a4db94011d3 106 * @param AnalogFilter: new state of the Analog filter.
sahilmgandhi 18:6a4db94011d3 107 * @retval HAL status
sahilmgandhi 18:6a4db94011d3 108 */
sahilmgandhi 18:6a4db94011d3 109 HAL_StatusTypeDef HAL_I2CEx_ConfigAnalogFilter(I2C_HandleTypeDef *hi2c, uint32_t AnalogFilter)
sahilmgandhi 18:6a4db94011d3 110 {
sahilmgandhi 18:6a4db94011d3 111 /* Check the parameters */
sahilmgandhi 18:6a4db94011d3 112 assert_param(IS_I2C_ALL_INSTANCE(hi2c->Instance));
sahilmgandhi 18:6a4db94011d3 113 assert_param(IS_I2C_ANALOG_FILTER(AnalogFilter));
sahilmgandhi 18:6a4db94011d3 114
sahilmgandhi 18:6a4db94011d3 115 if(hi2c->State == HAL_I2C_STATE_READY)
sahilmgandhi 18:6a4db94011d3 116 {
sahilmgandhi 18:6a4db94011d3 117 hi2c->State = HAL_I2C_STATE_BUSY;
sahilmgandhi 18:6a4db94011d3 118
sahilmgandhi 18:6a4db94011d3 119 /* Disable the selected I2C peripheral */
sahilmgandhi 18:6a4db94011d3 120 __HAL_I2C_DISABLE(hi2c);
sahilmgandhi 18:6a4db94011d3 121
sahilmgandhi 18:6a4db94011d3 122 /* Reset I2Cx ANOFF bit */
sahilmgandhi 18:6a4db94011d3 123 hi2c->Instance->FLTR &= ~(I2C_FLTR_ANOFF);
sahilmgandhi 18:6a4db94011d3 124
sahilmgandhi 18:6a4db94011d3 125 /* Disable the analog filter */
sahilmgandhi 18:6a4db94011d3 126 hi2c->Instance->FLTR |= AnalogFilter;
sahilmgandhi 18:6a4db94011d3 127
sahilmgandhi 18:6a4db94011d3 128 __HAL_I2C_ENABLE(hi2c);
sahilmgandhi 18:6a4db94011d3 129
sahilmgandhi 18:6a4db94011d3 130 hi2c->State = HAL_I2C_STATE_READY;
sahilmgandhi 18:6a4db94011d3 131
sahilmgandhi 18:6a4db94011d3 132 return HAL_OK;
sahilmgandhi 18:6a4db94011d3 133 }
sahilmgandhi 18:6a4db94011d3 134 else
sahilmgandhi 18:6a4db94011d3 135 {
sahilmgandhi 18:6a4db94011d3 136 return HAL_BUSY;
sahilmgandhi 18:6a4db94011d3 137 }
sahilmgandhi 18:6a4db94011d3 138 }
sahilmgandhi 18:6a4db94011d3 139
sahilmgandhi 18:6a4db94011d3 140 /**
sahilmgandhi 18:6a4db94011d3 141 * @brief Configures I2C Digital noise filter.
sahilmgandhi 18:6a4db94011d3 142 * @param hi2c: pointer to a I2C_HandleTypeDef structure that contains
sahilmgandhi 18:6a4db94011d3 143 * the configuration information for the specified I2Cx peripheral.
sahilmgandhi 18:6a4db94011d3 144 * @param DigitalFilter: Coefficient of digital noise filter between 0x00 and 0x0F.
sahilmgandhi 18:6a4db94011d3 145 * @retval HAL status
sahilmgandhi 18:6a4db94011d3 146 */
sahilmgandhi 18:6a4db94011d3 147 HAL_StatusTypeDef HAL_I2CEx_ConfigDigitalFilter(I2C_HandleTypeDef *hi2c, uint32_t DigitalFilter)
sahilmgandhi 18:6a4db94011d3 148 {
sahilmgandhi 18:6a4db94011d3 149 uint16_t tmpreg = 0U;
sahilmgandhi 18:6a4db94011d3 150
sahilmgandhi 18:6a4db94011d3 151 /* Check the parameters */
sahilmgandhi 18:6a4db94011d3 152 assert_param(IS_I2C_ALL_INSTANCE(hi2c->Instance));
sahilmgandhi 18:6a4db94011d3 153 assert_param(IS_I2C_DIGITAL_FILTER(DigitalFilter));
sahilmgandhi 18:6a4db94011d3 154
sahilmgandhi 18:6a4db94011d3 155 if(hi2c->State == HAL_I2C_STATE_READY)
sahilmgandhi 18:6a4db94011d3 156 {
sahilmgandhi 18:6a4db94011d3 157 hi2c->State = HAL_I2C_STATE_BUSY;
sahilmgandhi 18:6a4db94011d3 158
sahilmgandhi 18:6a4db94011d3 159 /* Disable the selected I2C peripheral */
sahilmgandhi 18:6a4db94011d3 160 __HAL_I2C_DISABLE(hi2c);
sahilmgandhi 18:6a4db94011d3 161
sahilmgandhi 18:6a4db94011d3 162 /* Get the old register value */
sahilmgandhi 18:6a4db94011d3 163 tmpreg = hi2c->Instance->FLTR;
sahilmgandhi 18:6a4db94011d3 164
sahilmgandhi 18:6a4db94011d3 165 /* Reset I2Cx DNF bit [3:0] */
sahilmgandhi 18:6a4db94011d3 166 tmpreg &= ~(I2C_FLTR_DNF);
sahilmgandhi 18:6a4db94011d3 167
sahilmgandhi 18:6a4db94011d3 168 /* Set I2Cx DNF coefficient */
sahilmgandhi 18:6a4db94011d3 169 tmpreg |= DigitalFilter;
sahilmgandhi 18:6a4db94011d3 170
sahilmgandhi 18:6a4db94011d3 171 /* Store the new register value */
sahilmgandhi 18:6a4db94011d3 172 hi2c->Instance->FLTR = tmpreg;
sahilmgandhi 18:6a4db94011d3 173
sahilmgandhi 18:6a4db94011d3 174 __HAL_I2C_ENABLE(hi2c);
sahilmgandhi 18:6a4db94011d3 175
sahilmgandhi 18:6a4db94011d3 176 hi2c->State = HAL_I2C_STATE_READY;
sahilmgandhi 18:6a4db94011d3 177
sahilmgandhi 18:6a4db94011d3 178 return HAL_OK;
sahilmgandhi 18:6a4db94011d3 179 }
sahilmgandhi 18:6a4db94011d3 180 else
sahilmgandhi 18:6a4db94011d3 181 {
sahilmgandhi 18:6a4db94011d3 182 return HAL_BUSY;
sahilmgandhi 18:6a4db94011d3 183 }
sahilmgandhi 18:6a4db94011d3 184 }
sahilmgandhi 18:6a4db94011d3 185
sahilmgandhi 18:6a4db94011d3 186 /**
sahilmgandhi 18:6a4db94011d3 187 * @}
sahilmgandhi 18:6a4db94011d3 188 */
sahilmgandhi 18:6a4db94011d3 189
sahilmgandhi 18:6a4db94011d3 190 /**
sahilmgandhi 18:6a4db94011d3 191 * @}
sahilmgandhi 18:6a4db94011d3 192 */
sahilmgandhi 18:6a4db94011d3 193 #endif /* STM32F427xx || STM32F429xx || STM32F437xx || STM32F439xx || STM32F401xC ||\
sahilmgandhi 18:6a4db94011d3 194 STM32F401xE || STM32F446xx || STM32F469xx || STM32F479xx */
sahilmgandhi 18:6a4db94011d3 195
sahilmgandhi 18:6a4db94011d3 196 #endif /* HAL_I2C_MODULE_ENABLED */
sahilmgandhi 18:6a4db94011d3 197 /**
sahilmgandhi 18:6a4db94011d3 198 * @}
sahilmgandhi 18:6a4db94011d3 199 */
sahilmgandhi 18:6a4db94011d3 200
sahilmgandhi 18:6a4db94011d3 201 /**
sahilmgandhi 18:6a4db94011d3 202 * @}
sahilmgandhi 18:6a4db94011d3 203 */
sahilmgandhi 18:6a4db94011d3 204
sahilmgandhi 18:6a4db94011d3 205 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/