Revision 849b383a modules/NUCLEO-L476RG/module.h
modules/NUCLEO-L476RG/module.h | ||
---|---|---|
60 | 60 |
*/ |
61 | 61 |
#define MODULE_HAL_RTC RTCD1 |
62 | 62 |
|
63 |
#if (BOARD_MPU6050_CONNECTED == true) || defined(__DOXYGEN__) |
|
63 |
#if (BOARD_MPU6050_CONNECTED == true || BOARD_VL53L1X_CONNECTED == true) || defined(__DOXYGEN__)
|
|
64 | 64 |
|
65 | 65 |
/** |
66 | 66 |
* @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). |
... | ... | |
72 | 72 |
*/ |
73 | 73 |
extern I2CConfig moduleHalI2c3Config; |
74 | 74 |
|
75 |
#endif /* (BOARD_MPU6050_CONNECTED == true) */ |
|
75 |
#endif /* (BOARD_MPU6050_CONNECTED == true || BOARD_VL53L1X_CONNECTED == true) */
|
|
76 | 76 |
|
77 | 77 |
/** @} */ |
78 | 78 |
|
... | ... | |
92 | 92 |
* @brief User button input signal. |
93 | 93 |
*/ |
94 | 94 |
extern ROMCONST apalControlGpio_t moduleGpioUserButton; |
95 |
extern ROMCONST apalControlGpio_t moduleGpioVl53l1xINT; |
|
96 |
extern ROMCONST apalControlGpio_t moduleGpioVl53l1xXSHUT; |
|
95 | 97 |
|
96 | 98 |
/** @} */ |
97 | 99 |
|
... | ... | |
102 | 104 |
*/ |
103 | 105 |
/*===========================================================================*/ |
104 | 106 |
|
107 |
#include <math.h> |
|
108 |
|
|
105 | 109 |
/** |
106 | 110 |
* @brief Event flag to be set on a USER_BUTTON interrupt. |
107 | 111 |
*/ |
... | ... | |
121 | 125 |
/* user button */ \ |
122 | 126 |
palSetLineCallback(moduleGpioUserButton.gpio->line, aosSysGetStdGpioCallback(), &moduleGpioUserButton.gpio->line); \ |
123 | 127 |
palEnableLineEvent(moduleGpioUserButton.gpio->line, APAL2CH_EDGE(moduleGpioUserButton.meta.edge)); \ |
128 |
MODULE_INIT_INTERRUPTS_VL53L1X(); \ |
|
124 | 129 |
} |
125 | 130 |
|
131 |
|
|
132 |
#if (BOARD_VL53L1X_CONNECTED == true) |
|
133 |
#define MODULE_INIT_INTERRUPTS_VL53L1X() { \ |
|
134 |
palSetLineCallback(moduleGpioVl53l1xINT.gpio->line, aosSysGetStdGpioCallback(), &moduleGpioVl53l1xINT.gpio->line); \ |
|
135 |
palEnableLineEvent(moduleGpioVl53l1xINT.gpio->line, APAL2CH_EDGE(moduleGpioVl53l1xINT.meta.edge)); \ |
|
136 |
} |
|
137 |
#else /* (BOARD_VL53L1X_CONNECTED == true) */ |
|
138 |
#define MODULE_INIT_INTERRUPTS_VL53L1X() {} |
|
139 |
#endif /* (BOARD_VL53L1X_CONNECTED == true) */ |
|
140 |
|
|
126 | 141 |
/** |
127 | 142 |
* @brief Test initialization hook. |
128 | 143 |
*/ |
... | ... | |
131 | 146 |
aosShellAddCommand(&aos.shell, &moduleTestLedShellCmd); \ |
132 | 147 |
aosShellAddCommand(&aos.shell, &moduleTestButtonShellCmd); \ |
133 | 148 |
MODULE_INIT_TEST_MPU6050(); \ |
149 |
MODULE_INIT_TEST_VL53L1X(); \ |
|
134 | 150 |
aosShellAddCommand(&aos.shell, &moduleTestAllShellCmd); \ |
135 | 151 |
} |
136 | 152 |
#if (BOARD_MPU6050_CONNECTED == true) |
... | ... | |
141 | 157 |
#define MODULE_INIT_TEST_MPU6050() {} |
142 | 158 |
#endif /* (BOARD_MPU6050_CONNECTED == true) */ |
143 | 159 |
|
160 |
#if (BOARD_VL53L1X_CONNECTED == true) |
|
161 |
#define MODULE_INIT_TEST_VL53L1X() { \ |
|
162 |
aosShellAddCommand(&aos.shell, &moduleTestVL53L1XShellCmd); \ |
|
163 |
aosShellAddCommand(&aos.shell, &moduleTestVL53L1XInitShellCmd); \ |
|
164 |
} |
|
165 |
#else /* (BOARD_VL53L1X_CONNECTED == true) */ |
|
166 |
#define MODULE_INIT_TEST_VL53L1X() {} |
|
167 |
#endif /* (BOARD_VL53L1X_CONNECTED == true) */ |
|
168 |
|
|
144 | 169 |
/** |
145 | 170 |
* @brief Periphery communication interfaces initialization hook. |
146 | 171 |
*/ |
... | ... | |
149 | 174 |
sdStart(&MODULE_HAL_PROGIF, &moduleHalProgIfConfig); \ |
150 | 175 |
/* MPU6050 demo */ \ |
151 | 176 |
MODULE_INIT_PERIPHERY_IF_MPU6050(); \ |
177 |
MODULE_INIT_PERIPHERY_IF_VL53L1X(); \ |
|
152 | 178 |
} |
153 | 179 |
#if (BOARD_MPU6050_CONNECTED == true) |
154 | 180 |
#define MODULE_INIT_PERIPHERY_IF_MPU6050() { \ |
... | ... | |
179 | 205 |
#define MODULE_INIT_PERIPHERY_IF_MPU6050() {} |
180 | 206 |
#endif /* (BOARD_MPU6050_CONNECTED == true) */ |
181 | 207 |
|
208 |
#if (BOARD_VL53L1X_CONNECTED == true) |
|
209 |
#define MODULE_INIT_PERIPHERY_IF_VL53L1X() { \ |
|
210 |
/* maximum I2C frequency is 1MHz for this MCU */ \ |
|
211 |
uint32_t i2c3_freq = 1000000; \ |
|
212 |
/* find minimum amon all devices connected to this bus */ \ |
|
213 |
i2c3_freq = (VL53L1X_LLD_I2C_MAXFREQUENCY < i2c3_freq) ? VL53L1X_LLD_I2C_MAXFREQUENCY : i2c3_freq; \ |
|
214 |
/* calculate PRESC (prescaler): \ |
|
215 |
* target is 1/(I2CXCLK * (PRESC + 1)) = 125ns \ |
|
216 |
*/ \ |
|
217 |
moduleHalI2c3Config.timingr = ((uint8_t)((0.000000125f * STM32_I2C3CLK) - 1)) << I2C_TIMINGR_PRESC_Pos; \ |
|
218 |
/* SCL shall be low half of the time. */ \ |
|
219 |
moduleHalI2c3Config.timingr |= ((uint8_t)((1.f / i2c3_freq / 2 / 0.000000125f) - 1)) << I2C_TIMINGR_SCLL_Pos; \ |
|
220 |
/* SCL shall be high half the time of low or slightly longer. */ \ |
|
221 |
moduleHalI2c3Config.timingr |= (uint8_t)(ceilf(((moduleHalI2c3Config.timingr & I2C_TIMINGR_SCLL_Msk) >> I2C_TIMINGR_SCLL_Pos) / 2.f)) << I2C_TIMINGR_SCLH_Pos; \ |
|
222 |
/* SDA shall be delayed 1/10 of SCL low, or shorter */ \ |
|
223 |
moduleHalI2c3Config.timingr |= (uint8_t)(((moduleHalI2c3Config.timingr & I2C_TIMINGR_SCLL_Msk) >> I2C_TIMINGR_SCLL_Pos) * 0.1f) << I2C_TIMINGR_SDADEL_Pos; \ |
|
224 |
/* SCL shall be delyed twice as long as SDA, but longer than 0. */ \ |
|
225 |
moduleHalI2c3Config.timingr |= ((((moduleHalI2c3Config.timingr & I2C_TIMINGR_SDADEL_Msk) >> I2C_TIMINGR_SDADEL_Pos) * 2) + 1) << I2C_TIMINGR_SCLDEL_Pos; \ |
|
226 |
/* setup the GPIO signals */ \ |
|
227 |
moduleHalI2c3Config.timingr = 0x00702991; \ |
|
228 |
chSysLock(); \ |
|
229 |
PAL_PORT(moduleLldVl53l1x.xshut->gpio->line)->PUPDR &= ~(3U << (PAL_PAD(moduleLldVl53l1x.xshut->gpio->line) * 2U)); \ |
|
230 |
PAL_PORT(moduleLldVl53l1x.xshut->gpio->line)->PUPDR |= PIN_PUPDR_PULLUP(PAL_PAD(moduleLldVl53l1x.xshut->gpio->line)); \ |
|
231 |
/* palSetLineMode(moduleLldVl53l1x.xshut->gpio->line, PAL_MODE_OUTPUT_OPENDRAIN); \*/ \ |
|
232 |
palSetLineMode(moduleLldVl53l1x.xshut->gpio->line, PAL_MODE_OUTPUT_PUSHPULL); \ |
|
233 |
palSetLineMode(moduleLldVl53l1x.gpio1->gpio->line, PAL_MODE_INPUT_PULLUP); \ |
|
234 |
palSetLineMode(LINE_ARD_A4, PAL_MODE_ALTERNATE(4)); \ |
|
235 |
palSetLineMode(LINE_ARD_A5, PAL_MODE_ALTERNATE(4)); \ |
|
236 |
chSysUnlock(); \ |
|
237 |
apalControlGpioSet(moduleLldVl53l1x.xshut, APAL_GPIO_OFF); \ |
|
238 |
/* now we can start the I2C driver */ \ |
|
239 |
i2cStart(&MODULE_HAL_I2C3, &moduleHalI2c3Config); \ |
|
240 |
} |
|
241 |
#else /* (BOARD_VL53L1X_CONNECTED == true) */ |
|
242 |
#define MODULE_INIT_PERIPHERY_IF_VL53L1X() {} |
|
243 |
#endif /* (BOARD_VL53L1X_CONNECTED == true) */ |
|
244 |
|
|
182 | 245 |
/** |
183 | 246 |
* @brief Periphery communication interface deinitialization hook. |
184 | 247 |
*/ |
... | ... | |
226 | 289 |
*/ |
227 | 290 |
extern LEDDriver moduleLldLed; |
228 | 291 |
|
292 |
#if (BOARD_VL53L1X_CONNECTED == true) || defined(__DOXYGEN__) |
|
293 |
|
|
294 |
#include <alld_VL53L1X.h> |
|
295 |
|
|
296 |
extern VL53L1XDriver moduleLldVl53l1x; |
|
297 |
|
|
298 |
#endif /* (BOARD_VL53L1X_CONNECTED == true) */ |
|
299 |
|
|
229 | 300 |
/** |
230 | 301 |
* @brief Button driver. |
231 | 302 |
*/ |
... | ... | |
258 | 329 |
extern aos_shellcommand_t moduleTestLedShellCmd; |
259 | 330 |
|
260 | 331 |
/** |
332 |
* @brief VL53L1X test command. |
|
333 |
*/ |
|
334 |
extern aos_shellcommand_t moduleTestVL53L1XShellCmd; |
|
335 |
extern aos_shellcommand_t moduleTestVL53L1XInitShellCmd; |
|
336 |
|
|
337 |
/** |
|
261 | 338 |
* @brief User button test command. |
262 | 339 |
*/ |
263 | 340 |
extern aos_shellcommand_t moduleTestButtonShellCmd; |
Also available in: Unified diff