Revision 126ace3c modules/NUCLEO-L476RG/module.h
modules/NUCLEO-L476RG/module.h | ||
---|---|---|
18 | 18 |
|
19 | 19 |
/** |
20 | 20 |
* @file |
21 |
* @brief Structures and constant for the STM32L476RG-NUCLEO64 module.
|
|
21 |
* @brief Structures and constant for the NUCLEO-L476RG module.
|
|
22 | 22 |
* |
23 |
* @addtogroup STM32L476RG-NUCLEO64_module
|
|
23 |
* @addtogroup NUCLEO-L476RG_module
|
|
24 | 24 |
* @{ |
25 | 25 |
*/ |
26 | 26 |
|
... | ... | |
28 | 28 |
#define AMIROOS_MODULE_H |
29 | 29 |
|
30 | 30 |
#include <amiroos.h> |
31 |
#include <math.h> |
|
31 | 32 |
|
32 | 33 |
/*===========================================================================*/ |
33 | 34 |
/** |
... | ... | |
60 | 61 |
*/ |
61 | 62 |
#define MODULE_HAL_RTC RTCD1 |
62 | 63 |
|
64 |
#if defined(AMIROLLD_CFG_MPU6050) |
|
65 |
|
|
66 |
/** |
|
67 |
* @brief I2C driver to access multiplexer, proximity sensors 5 to 8, power monitors for VSYS4.2, VIO 5.0 and VDD, EEPROM, touch sensor, and fuel gauge (front battery). |
|
68 |
*/ |
|
69 |
#define MODULE_HAL_I2C3 I2CD3 |
|
70 |
|
|
71 |
/** |
|
72 |
* @brief Configuration for the I2C driver #3. |
|
73 |
*/ |
|
74 |
extern I2CConfig moduleHalI2c3Config; |
|
75 |
|
|
76 |
#endif /* defined(AMIROLLD_CFG_MPU6050) */ |
|
77 |
|
|
63 | 78 |
/** @} */ |
64 | 79 |
|
65 | 80 |
/*===========================================================================*/ |
... | ... | |
115 | 130 |
*/ |
116 | 131 |
#define MODULE_INIT_TESTS() { \ |
117 | 132 |
/* add unit-test shell commands */ \ |
133 |
MODULE_INIT_TEST_MPU6050(); \ |
|
118 | 134 |
} |
135 |
#if defined(AMIROLLD_CFG_MPU6050) |
|
136 |
#define MODULE_INIT_TEST_MPU6050() { \ |
|
137 |
/* add unit-test shell commands */ \ |
|
138 |
aosShellAddCommand(&aos.shell, &moduleUtAlldMpu6050.shellcmd); \ |
|
139 |
} |
|
140 |
#else |
|
141 |
#define MODULE_INIT_TEST_MPU6050() {} |
|
142 |
#endif |
|
119 | 143 |
|
120 | 144 |
/** |
121 | 145 |
* @brief Periphery communication interfaces initialization hook. |
... | ... | |
123 | 147 |
#define MODULE_INIT_PERIPHERY_COMM() { \ |
124 | 148 |
/* serial driver */ \ |
125 | 149 |
sdStart(&MODULE_HAL_PROGIF, &moduleHalProgIfConfig); \ |
150 |
/* MPU6050 demo */ \ |
|
151 |
MODULE_INIT_PERIPHERY_COMM_MPU6050(); \ |
|
126 | 152 |
} |
153 |
#if defined(AMIROLLD_CFG_MPU6050) |
|
154 |
#define MODULE_INIT_PERIPHERY_COMM_MPU6050() { \ |
|
155 |
/* maximum I2C frequency is 1MHz for this MCU */ \ |
|
156 |
uint32_t i2c3_freq = 1000000; \ |
|
157 |
/* find minimum amon all devices connected to this bus */ \ |
|
158 |
i2c3_freq = (MPU6050_LLD_I2C_MAXFREQUENCY < i2c3_freq) ? MPU6050_LLD_I2C_MAXFREQUENCY : i2c3_freq; \ |
|
159 |
/* calculate PRESC (prescaler): \ |
|
160 |
* target is 1/(I2CXCLK * (PRESC + 1)) = 125ns \ |
|
161 |
*/ \ |
|
162 |
moduleHalI2c3Config.timingr = ((uint8_t)((0.000000125f * STM32_I2C3CLK) - 1)) << I2C_TIMINGR_PRESC_Pos; \ |
|
163 |
/* SCL shall be low half of the time. */ \ |
|
164 |
moduleHalI2c3Config.timingr |= ((uint8_t)((1.f / i2c3_freq / 2 / 0.000000125f) - 1)) << I2C_TIMINGR_SCLL_Pos; \ |
|
165 |
/* SCL shall be high half the time of low or slightly longer. */ \ |
|
166 |
moduleHalI2c3Config.timingr |= (uint8_t)(ceilf(((moduleHalI2c3Config.timingr & I2C_TIMINGR_SCLL_Msk) >> I2C_TIMINGR_SCLL_Pos) / 2.f)) << I2C_TIMINGR_SCLH_Pos; \ |
|
167 |
/* SDA shall be delayed 1/10 of SCL low, or shorter */ \ |
|
168 |
moduleHalI2c3Config.timingr |= (uint8_t)(((moduleHalI2c3Config.timingr & I2C_TIMINGR_SCLL_Msk) >> I2C_TIMINGR_SCLL_Pos) * 0.1f) << I2C_TIMINGR_SDADEL_Pos; \ |
|
169 |
/* SCL shall be delyed twice as long as SDA, but longer than 0. */ \ |
|
170 |
moduleHalI2c3Config.timingr |= ((((moduleHalI2c3Config.timingr & I2C_TIMINGR_SDADEL_Msk) >> I2C_TIMINGR_SDADEL_Pos) * 2) + 1) << I2C_TIMINGR_SCLDEL_Pos; \ |
|
171 |
/* now we can start the I2C driver */ \ |
|
172 |
i2cStart(&MODULE_HAL_I2C3, &moduleHalI2c3Config); \ |
|
173 |
} |
|
174 |
#else |
|
175 |
#define MODULE_INIT_PERIPHERY_COMM_MPU6050() {} |
|
176 |
#endif |
|
127 | 177 |
|
128 | 178 |
/** |
129 | 179 |
* @brief Periphery communication interface deinitialization hook. |
... | ... | |
160 | 210 |
*/ |
161 | 211 |
/*===========================================================================*/ |
162 | 212 |
|
213 |
#if defined(AMIROLLD_CFG_MPU6050) |
|
214 |
|
|
215 |
#include <alld_MPU6050.h> |
|
216 |
|
|
217 |
/** |
|
218 |
* @brief Accelerometer (MPU6050) driver. |
|
219 |
*/ |
|
220 |
extern MPU6050Driver moduleLldMpu6050; |
|
221 |
|
|
222 |
#endif /* defined(AMIROLLD_CFG_MPU6050) */ |
|
223 |
|
|
163 | 224 |
/** @} */ |
164 | 225 |
|
165 | 226 |
/*===========================================================================*/ |
... | ... | |
170 | 231 |
/*===========================================================================*/ |
171 | 232 |
#if (AMIROOS_CFG_TESTS_ENABLE == true) || defined(__DOXYGEN__) |
172 | 233 |
|
234 |
#if defined(AMIROLLD_CFG_MPU6050) |
|
235 |
|
|
236 |
#include <ut_alld_MPU6050_v1.h> |
|
237 |
|
|
238 |
/** |
|
239 |
* @brief MPU6050 unit test object. |
|
240 |
*/ |
|
241 |
extern aos_unittest_t moduleUtAlldMpu6050; |
|
242 |
|
|
243 |
#endif /* defined(AMIROLLD_CFG_MPU6050) */ |
|
244 |
|
|
173 | 245 |
#endif /* AMIROOS_CFG_TESTS_ENABLE == true */ |
174 | 246 |
|
175 | 247 |
/** @} */ |
Also available in: Unified diff