Statistics
| Branch: | Tag: | Revision:

amiro-os / modules / PowerManagement_1-1 / module.h @ 53710ca3

History | View | Annotate | Download (24.525 KB)

1 e545e620 Thomas Schöpping
/*
2
AMiRo-OS is an operating system designed for the Autonomous Mini Robot (AMiRo) platform.
3
Copyright (C) 2016..2018  Thomas Schöpping et al.
4

5
This program is free software: you can redistribute it and/or modify
6
it under the terms of the GNU General Public License as published by
7
the Free Software Foundation, either version 3 of the License, or
8
(at your option) any later version.
9

10
This program is distributed in the hope that it will be useful,
11
but WITHOUT ANY WARRANTY; without even the implied warranty of
12
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
GNU General Public License for more details.
14

15
You should have received a copy of the GNU General Public License
16
along with this program.  If not, see <http://www.gnu.org/licenses/>.
17
*/
18
19 53710ca3 Marc Rothmann
/**
20
 * @file    
21
 * @brief   Structures and constant for the PowerManagement module.
22
 *
23
 * @addtogroup powermanagement_module
24
 * @{
25
 */
26
27 e545e620 Thomas Schöpping
#ifndef _AMIROOS_MODULE_H_
28
#define _AMIROOS_MODULE_H_
29
30
/*===========================================================================*/
31
/**
32
 * @name Module specific functions
33
 * @{
34
 */
35
/*===========================================================================*/
36
37
/*
38
 * @brief Makro to store data in the core coupled memory (ccm).
39
 *        Example:
40
 *        int compute_buffer[128] CCM_RAM;
41
 *
42
 * @note The ccm is not connected to any bus system.
43
 */
44
#define CCM_RAM                                 __attribute__((section(".ram4"), aligned(4)))
45
46
/*
47
 * @brief Makro to store data in the ethernet memory (eth).
48
 *        Example:
49
 *        int dma_buffer[128] ETH_RAM;
50
 *
51
 * @note The eth is a dedicated memory block with its own DMA controller.
52
 */
53
#define ETH_RAM                                 __attribute__((section(".ram2"), aligned(4)))
54
55
/*
56
 * @brief Makro to store data in the backup memory (bckp).
57
 *        Example:
58
 *        int backup_buffer[128] BCKP_RAM;
59
 *
60
 * @note The eth is a dedicated memory block with its own DMA controller.
61
 */
62
#define BCKP_RAM                                __attribute__((section(".ram5"), aligned(4)))
63
64
/** @} */
65
66
/*===========================================================================*/
67
/**
68
 * @name ChibiOS/HAL configuration
69
 * @{
70
 */
71
/*===========================================================================*/
72
#include <hal.h>
73
74
/**
75
 * @brief   ADC driver for reading the system voltage.
76
 */
77
#define MODULE_HAL_ADC_VSYS                     ADCD1
78
79
/**
80
 * @brief   Configuration for the ADC.
81
 */
82
extern ADCConversionGroup moduleHalAdcVsysConversionGroup;
83
84
/**
85
 * @brief   CAN driver to use.
86
 */
87
#define MODULE_HAL_CAN                          CAND1
88
89
/**
90
 * @brief   Configuration for the CAN driver.
91
 */
92
extern CANConfig moduleHalCanConfig;
93
94
/**
95
 * @brief   I2C driver to access multiplexer, proximity sensors 1 to 4, power monitors for VIO1.8 and VIO 3.3, and fuel gauge (rear battery).
96
 */
97
#define MODULE_HAL_I2C_PROX_PM18_PM33_GAUGEREAR I2CD1
98
99
/**
100
 * @brief   Configuration for the multiplexer, proximity sensors 1 to 4, power monitors for VIO1.8 and VIO 3.3, and fuel gauge (rear battery) I2C driver.
101
 */
102
extern I2CConfig moduleHalI2cProxPm18Pm33GaugeRearConfig;
103
104
/**
105
 * @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).
106
 */
107
#define MODULE_HAL_I2C_PROX_PM42_PM50_PMVDD_EEPROM_TOUCH_GAUGEFRONT I2CD2
108
109
/**
110
 * @brief   Configuration for the multiplexer, proximity sensors 1 to 4, power monitors for VIO1.8 and VIO 3.3, and fuel gauge (rear battery) I2C driver.
111
 */
112
extern I2CConfig moduleHalI2cProxPm42Pm50PmVddEepromTouchGaugeFrontConfig;
113
114
/**
115
 * @brief   PWM driver for the buzzer.
116
 */
117
#define MODULE_HAL_PWM_BUZZER                   PWMD3
118
119
/**
120
 * @brief   Configuration of the PWM driver.
121
 */
122
extern PWMConfig moduleHalPwmBuzzerConfig;
123
124
/**
125
 * @brief   PWM channeö for the buzzer.
126
 */
127
#define MODULE_HAL_PWM_BUZZER_CHANNEL           1
128
129
/**
130
 * @brief   Serial driver of the programmer interface.
131
 */
132
#define MODULE_HAL_PROGIF                       SD1
133
134
/**
135
 * @brief   Configuration for the programmer serial interface driver.
136
 */
137
extern SerialConfig moduleHalProgIfConfig;
138
139 8399aeae Thomas Schöpping
/**
140
 * @brief   Real-Time Clock driver.
141
 */
142
#define MODULE_HAL_RTC                          RTCD1
143
144 e545e620 Thomas Schöpping
/** @} */
145
146
/*===========================================================================*/
147
/**
148
 * @name GPIO definitions
149
 * @{
150
 */
151
/*===========================================================================*/
152
#include <amiro-lld.h>
153
154
/**
155
 * @brief   SYS_REG_EN output signal GPIO.
156
 */
157 1e5f7648 Thomas Schöpping
extern apalControlGpio_t moduleGpioSysRegEn;
158 e545e620 Thomas Schöpping
159
/**
160
 * @brief   IR_INT1 input signal GPIO.
161
 */
162 1e5f7648 Thomas Schöpping
extern apalControlGpio_t moduleGpioIrInt1;
163 e545e620 Thomas Schöpping
164
/**
165
 * @brief   POWER_EN output signal GPIO.
166
 */
167 1e5f7648 Thomas Schöpping
extern apalControlGpio_t moduleGpioPowerEn;
168 e545e620 Thomas Schöpping
169
/**
170
 * @brief   SYS_UART_DN bidirectional signal GPIO.
171
 */
172 1e5f7648 Thomas Schöpping
extern apalControlGpio_t moduleGpioSysUartDn;
173 e545e620 Thomas Schöpping
174
/**
175
 * @brief   CHARGE_STAT2A input signal GPIO.
176
 */
177 1e5f7648 Thomas Schöpping
extern apalControlGpio_t moduleGpioChargeStat2A;
178 e545e620 Thomas Schöpping
179
/**
180
 * @brief   GAUGE_BATLOW2 input signal GPIO.
181
 */
182 1e5f7648 Thomas Schöpping
extern apalControlGpio_t moduleGpioGaugeBatLow2;
183 e545e620 Thomas Schöpping
184
/**
185
 * @brief   GAUGE_BATGD2 input signal GPIO.
186
 */
187 1e5f7648 Thomas Schöpping
extern apalControlGpio_t moduleGpioGaugeBatGd2;
188 e545e620 Thomas Schöpping
189
/**
190
 * @brief   LED output signal GPIO.
191
 */
192 1e5f7648 Thomas Schöpping
extern apalControlGpio_t moduleGpioLed;
193 e545e620 Thomas Schöpping
194
/**
195
 * @brief   SYS_UART_UP bidirectional signal GPIO.
196
 */
197 1e5f7648 Thomas Schöpping
extern apalControlGpio_t moduleGpioSysUartUp;
198 e545e620 Thomas Schöpping
199
/**
200
 * @brief   CHARGE_STAT1A input signal GPIO.
201
 */
202 1e5f7648 Thomas Schöpping
extern apalControlGpio_t moduleGpioChargeStat1A;
203 e545e620 Thomas Schöpping
204
/**
205
 * @brief   GAUGE_BATLOW1 input signal GPIO.
206
 */
207 1e5f7648 Thomas Schöpping
extern apalControlGpio_t moduleGpioGaugeBatLow1;
208 e545e620 Thomas Schöpping
209
/**
210
 * @brief   GAUGE_BATGD1 input signal GPIO.
211
 */
212 1e5f7648 Thomas Schöpping
extern apalControlGpio_t moduleGpioGaugeBatGd1;
213 e545e620 Thomas Schöpping
214
/**
215
 * @brief   CHARG_EN1 output signal GPIO.
216
 */
217 1e5f7648 Thomas Schöpping
extern apalControlGpio_t moduleGpioChargeEn1;
218 e545e620 Thomas Schöpping
219
/**
220
 * @brief   IR_INT2 input signal GPIO.
221
 */
222 1e5f7648 Thomas Schöpping
extern apalControlGpio_t moduleGpioIrInt2;
223 e545e620 Thomas Schöpping
224
/**
225
 * @brief   TOUCH_INT input signal GPIO.
226
 */
227 1e5f7648 Thomas Schöpping
extern apalControlGpio_t moduleGpioTouchInt;
228 e545e620 Thomas Schöpping
229
/**
230
 * @brief   SYS_DONE input signal GPIO.
231
 */
232 1e5f7648 Thomas Schöpping
extern apalControlGpio_t moduleGpioSysDone;
233 e545e620 Thomas Schöpping
234
/**
235
 * @brief   SYS_PROG output signal GPIO.
236
 */
237 1e5f7648 Thomas Schöpping
extern apalControlGpio_t moduleGpioSysProg;
238 e545e620 Thomas Schöpping
239
/**
240
 * @brief   PATH_DC input signal GPIO.
241
 */
242 1e5f7648 Thomas Schöpping
extern apalControlGpio_t moduleGpioPathDc;
243 e545e620 Thomas Schöpping
244
/**
245
 * @brief   SYS_SPI_DIR bidirectional signal GPIO.
246
 */
247 1e5f7648 Thomas Schöpping
extern apalControlGpio_t moduleGpioSysSpiDir;
248 e545e620 Thomas Schöpping
249
/**
250
 * @brief   SYS_SYNC bidirectional signal GPIO.
251
 */
252 1e5f7648 Thomas Schöpping
extern apalControlGpio_t moduleGpioSysSync;
253 e545e620 Thomas Schöpping
254
/**
255
 * @brief   SYS_PD bidirectional signal GPIO.
256
 */
257 1e5f7648 Thomas Schöpping
extern apalControlGpio_t moduleGpioSysPd;
258 e545e620 Thomas Schöpping
259
/**
260
 * @brief   SYS_WARMRST bidirectional signal GPIO.
261
 */
262 1e5f7648 Thomas Schöpping
extern apalControlGpio_t moduleGpioSysWarmrst;
263 e545e620 Thomas Schöpping
264
/**
265
 * @brief   BT_RST output signal GPIO.
266
 */
267 1e5f7648 Thomas Schöpping
extern apalControlGpio_t moduleGpioBtRst;
268 e545e620 Thomas Schöpping
269
/**
270
 * @brief   CHARGE_EN2 output signal GPIO.
271
 */
272 1e5f7648 Thomas Schöpping
extern apalControlGpio_t moduleGpioChargeEn2;
273 e545e620 Thomas Schöpping
274
/** @} */
275
276
/*===========================================================================*/
277
/**
278
 * @name AMiRo-OS core configurations
279
 * @{
280
 */
281
/*===========================================================================*/
282
283
/**
284
 * @brief   Event flag to be set on a IR_INT1 / CHARGE_STAT1A interrupt.
285
 */
286 1e5f7648 Thomas Schöpping
#define MODULE_OS_IOEVENTFLAGS_IRINT1           ((eventflags_t)1 << GPIOB_IR_INT1_N)
287 e545e620 Thomas Schöpping
288
/**
289
 * @brief   Event flag to be set on a GAUGE_BATLOW1 interrupt.
290
 */
291 1e5f7648 Thomas Schöpping
#define MODULE_OS_IOEVENTFLAGS_GAUGEBATLOW1     ((eventflags_t)1 << GPIOC_GAUGE_BATLOW1)
292 e545e620 Thomas Schöpping
293
/**
294
 * @brief   Event flag to be set on a GAUGE_BATGD1 interrupt.
295
 */
296 1e5f7648 Thomas Schöpping
#define MODULE_OS_IOEVENTFLAGS_GAUGEBATGD1      ((eventflags_t)1 << GPIOC_GAUGE_BATGD1_N)
297 e545e620 Thomas Schöpping
298
/**
299
 * @brief   Event flag to be set on a SYS_UART_DN interrupt.
300
 */
301 1e5f7648 Thomas Schöpping
#define MODULE_OS_IOEVENTFLAGS_SYSUARTDN        ((eventflags_t)1 << GPIOB_SYS_UART_DN)
302 e545e620 Thomas Schöpping
303
/**
304
 * @brief   Event flag to be set on a IR_INT2 / CHARGE_STAT2A interrupt.
305
 */
306 1e5f7648 Thomas Schöpping
#define MODULE_OS_IOEVENTFLAGS_IRINT2           ((eventflags_t)1 << GPIOC_IR_INT2_N)
307 e545e620 Thomas Schöpping
308
/**
309
 * @brief   Event flag to be set on a TOUCH_INT interrupt.
310
 */
311 1e5f7648 Thomas Schöpping
#define MODULE_OS_IOEVENTFLAGS_TOUCHINT         ((eventflags_t)1 << GPIOC_TOUCH_INT_N)
312 e545e620 Thomas Schöpping
313
/**
314
 * @brief   Event flag to be set on a GAUGE_BATLOW2 interrupt.
315
 */
316 1e5f7648 Thomas Schöpping
#define MODULE_OS_IOEVENTFLAGS_GAUGEBATLOW2     ((eventflags_t)1 << GPIOB_GAUGE_BATLOW2)
317 e545e620 Thomas Schöpping
318
/**
319
 * @brief   Event flag to be set on a GAUGE_BATGD2 interrupt.
320
 */
321 1e5f7648 Thomas Schöpping
#define MODULE_OS_IOEVENTFLAGS_GAUGEBATGD2      ((eventflags_t)1 << GPIOB_GAUGE_BATGD2_N)
322 e545e620 Thomas Schöpping
323
/**
324
 * @brief   Event flag to be set on a PATH_DC interrupt.
325
 */
326 1e5f7648 Thomas Schöpping
#define MODULE_OS_IOEVENTFLAGS_PATHDC           ((eventflags_t)1 << GPIOC_PATH_DC)
327 e545e620 Thomas Schöpping
328
/**
329
 * @brief   Event flag to be set on a SYS_SPI_DIR interrupt.
330
 */
331 1e5f7648 Thomas Schöpping
#define MODULE_OS_IOEVENTFLAGS_SYSSPIDIR        ((eventflags_t)1 << GPIOC_SYS_SPI_DIR)
332 e545e620 Thomas Schöpping
333
/**
334
 * @brief   Event flag to be set on a SYS_SYNC interrupt.
335
 */
336 1e5f7648 Thomas Schöpping
#define MODULE_OS_IOEVENTFLAGS_SYSSYNC          ((eventflags_t)1 << GPIOC_SYS_INT_N)
337 e545e620 Thomas Schöpping
338
/**
339
 * @brief   Event flag to be set on a SYS_PD interrupt.
340
 */
341 1e5f7648 Thomas Schöpping
#define MODULE_OS_IOEVENTFLAGS_SYSPD            ((eventflags_t)1 << GPIOC_SYS_PD_N)
342 e545e620 Thomas Schöpping
343
/**
344
 * @brief   Event flag to be set on a SYS_WARMRST interrupt.
345
 */
346 1e5f7648 Thomas Schöpping
#define MODULE_OS_IOEVENTFLAGS_SYSWARMRST       ((eventflags_t)1 << GPIOC_SYS_WARMRST_N)
347 e545e620 Thomas Schöpping
348
/**
349
 * @brief   Event flag to be set on a SYS_UART_UP interrupt.
350
 */
351 1e5f7648 Thomas Schöpping
#define MODULE_OS_IOEVENTFLAGS_SYSUARTUP        ((eventflags_t)1 << GPIOB_SYS_UART_UP)
352 e545e620 Thomas Schöpping
353 6b53f6bf Thomas Schöpping
#if (AMIROOS_CFG_SHELL_ENABLE == true) || defined(__DOXYGEN__)
354 e545e620 Thomas Schöpping
/**
355
 * @brief   Shell prompt text.
356
 */
357
extern const char* moduleShellPrompt;
358 6b53f6bf Thomas Schöpping
#endif
359 e545e620 Thomas Schöpping
360
/**
361 1e5f7648 Thomas Schöpping
 * @brief   Interrupt initialization macro.
362
 * @note    SSSP related interrupt signals are already initialized in 'aos_system.c'.
363
 */
364
#define MODULE_INIT_INTERRUPTS() {                                            \
365
  /* IR_INT1 */                                                               \
366
  palSetPadCallback(moduleGpioIrInt1.gpio->port, moduleGpioIrInt1.gpio->pad, _intCallback, &moduleGpioIrInt1.gpio->pad); \
367
  palEnablePadEvent(moduleGpioIrInt1.gpio->port, moduleGpioIrInt1.gpio->pad, APAL2CH_EDGE(moduleGpioIrInt1.meta.edge));  \
368
  /* GAUGE_BATLOW2 */                                                         \
369
  palSetPadCallback(moduleGpioGaugeBatLow2.gpio->port, moduleGpioGaugeBatLow2.gpio->pad, _intCallback, &moduleGpioGaugeBatLow2.gpio->pad);  \
370
  palEnablePadEvent(moduleGpioGaugeBatLow2.gpio->port, moduleGpioGaugeBatLow2.gpio->pad, APAL2CH_EDGE(moduleGpioGaugeBatLow2.meta.edge));   \
371
  /* GAUGE_BATGD2 */                                                          \
372
  palSetPadCallback(moduleGpioGaugeBatGd2.gpio->port, moduleGpioGaugeBatGd2.gpio->pad, _intCallback, &moduleGpioGaugeBatGd2.gpio->pad); \
373
  palEnablePadEvent(moduleGpioGaugeBatGd2.gpio->port, moduleGpioGaugeBatGd2.gpio->pad, APAL2CH_EDGE(moduleGpioGaugeBatGd2.meta.edge));  \
374
  /* GAUGE_BATLOW1 */                                                         \
375
  palSetPadCallback(moduleGpioGaugeBatLow1.gpio->port, moduleGpioGaugeBatLow1.gpio->pad, _intCallback, &moduleGpioGaugeBatLow1.gpio->pad);  \
376
  palEnablePadEvent(moduleGpioGaugeBatLow1.gpio->port, moduleGpioGaugeBatLow1.gpio->pad, APAL2CH_EDGE(moduleGpioGaugeBatLow1.meta.edge));   \
377
  /* GAUGE_BATGD1 */                                                          \
378
  palSetPadCallback(moduleGpioGaugeBatGd1.gpio->port, moduleGpioGaugeBatGd1.gpio->pad, _intCallback, &moduleGpioGaugeBatGd1.gpio->pad); \
379
  palEnablePadEvent(moduleGpioGaugeBatGd1.gpio->port, moduleGpioGaugeBatGd1.gpio->pad, APAL2CH_EDGE(moduleGpioGaugeBatGd1.meta.edge));  \
380
  /* IR_INT1 */                                                               \
381
  palSetPadCallback(moduleGpioIrInt2.gpio->port, moduleGpioIrInt2.gpio->pad, _intCallback, &moduleGpioIrInt1.gpio->pad); \
382
  palEnablePadEvent(moduleGpioIrInt2.gpio->port, moduleGpioIrInt2.gpio->pad, APAL2CH_EDGE(moduleGpioIrInt1.meta.edge));  \
383
  /* TOUCH_INT */                                                             \
384
  palSetPadCallback(moduleGpioTouchInt.gpio->port, moduleGpioTouchInt.gpio->pad, _intCallback, &moduleGpioTouchInt.gpio->pad); \
385
  palEnablePadEvent(moduleGpioTouchInt.gpio->port, moduleGpioTouchInt.gpio->pad, APAL2CH_EDGE(moduleGpioTouchInt.meta.edge));  \
386
  /* PATH_DC */                                                               \
387
  palSetPadCallback(moduleGpioPathDc.gpio->port, moduleGpioPathDc.gpio->pad, _intCallback, &moduleGpioPathDc.gpio->pad);  \
388
  palEnablePadEvent(moduleGpioPathDc.gpio->port, moduleGpioPathDc.gpio->pad, APAL2CH_EDGE(moduleGpioPathDc.meta.edge));   \
389
  /* SYS_SPI_DIR */                                                           \
390
  palSetPadCallback(moduleGpioSysSpiDir.gpio->port, moduleGpioSysSpiDir.gpio->pad, _intCallback, &moduleGpioSysSpiDir.gpio->pad); \
391
  palEnablePadEvent(moduleGpioSysSpiDir.gpio->port, moduleGpioSysSpiDir.gpio->pad, APAL2CH_EDGE(moduleGpioSysSpiDir.meta.edge));  \
392
  /* SYS_WARMRST */                                                           \
393
  palSetPadCallback(moduleGpioSysWarmrst.gpio->port, moduleGpioSysWarmrst.gpio->pad, _intCallback, &moduleGpioSysWarmrst.gpio->pad);  \
394
  palEnablePadEvent(moduleGpioSysWarmrst.gpio->port, moduleGpioSysWarmrst.gpio->pad, APAL2CH_EDGE(moduleGpioSysWarmrst.meta.edge));   \
395
}
396
397
/**
398 e545e620 Thomas Schöpping
 * @brief   Unit test initialization hook.
399
 */
400
#define MODULE_INIT_TESTS() {                                                 \
401
  /* add unit-test shell commands */                                          \
402 6b53f6bf Thomas Schöpping
  aosShellAddCommand(&aos.shell, &moduleUtAdcVsys.shellcmd);                  \
403
  aosShellAddCommand(&aos.shell, &moduleUtAlldAt24c01bn.shellcmd);            \
404
  aosShellAddCommand(&aos.shell, &moduleUtAlldBq24103a.shellcmd);             \
405
  aosShellAddCommand(&aos.shell, &moduleUtAlldBq27500.shellcmd);              \
406
  aosShellAddCommand(&aos.shell, &moduleUtAlldBq27500Bq24103a.shellcmd);      \
407
  aosShellAddCommand(&aos.shell, &moduleUtAlldIna219.shellcmd);               \
408
  aosShellAddCommand(&aos.shell, &moduleUtAlldMpr121.shellcmd);               \
409
  aosShellAddCommand(&aos.shell, &moduleUtAlldPca9544a.shellcmd);             \
410
  aosShellAddCommand(&aos.shell, &moduleUtAlldPklcs1212e4001.shellcmd);       \
411
  aosShellAddCommand(&aos.shell, &moduleUtAlldLed.shellcmd);                  \
412
  aosShellAddCommand(&aos.shell, &moduleUtAlldTps62113.shellcmd);             \
413
  aosShellAddCommand(&aos.shell, &moduleUtAlldTps62113Ina219.shellcmd);       \
414
  aosShellAddCommand(&aos.shell, &moduleUtAlldVcnl4020.shellcmd);             \
415 e545e620 Thomas Schöpping
}
416
417
/**
418
 * @brief   Periphery communication interfaces initialization hook.
419
 */
420
#define MODULE_INIT_PERIPHERY_COMM() {                                        \
421
  /* serial driver */                                                         \
422
  sdStart(&MODULE_HAL_PROGIF, &moduleHalProgIfConfig);                        \
423
  /* I2C */                                                                   \
424
  moduleHalI2cProxPm18Pm33GaugeRearConfig.clock_speed = (PCA9544A_LLD_I2C_MAXFREQUENCY < moduleHalI2cProxPm18Pm33GaugeRearConfig.clock_speed) ? PCA9544A_LLD_I2C_MAXFREQUENCY : moduleHalI2cProxPm18Pm33GaugeRearConfig.clock_speed;  \
425
  moduleHalI2cProxPm18Pm33GaugeRearConfig.clock_speed = (VCNL4020_LLD_I2C_MAXFREQUENCY < moduleHalI2cProxPm18Pm33GaugeRearConfig.clock_speed) ? VCNL4020_LLD_I2C_MAXFREQUENCY : moduleHalI2cProxPm18Pm33GaugeRearConfig.clock_speed;  \
426
  moduleHalI2cProxPm18Pm33GaugeRearConfig.clock_speed = (INA219_LLD_I2C_MAXFREQUENCY < moduleHalI2cProxPm18Pm33GaugeRearConfig.clock_speed) ? INA219_LLD_I2C_MAXFREQUENCY : moduleHalI2cProxPm18Pm33GaugeRearConfig.clock_speed;  \
427
  moduleHalI2cProxPm18Pm33GaugeRearConfig.clock_speed = (BQ27500_LLD_I2C_MAXFREQUENCY < moduleHalI2cProxPm18Pm33GaugeRearConfig.clock_speed) ? BQ27500_LLD_I2C_MAXFREQUENCY : moduleHalI2cProxPm18Pm33GaugeRearConfig.clock_speed;  \
428
  moduleHalI2cProxPm18Pm33GaugeRearConfig.duty_cycle = (moduleHalI2cProxPm18Pm33GaugeRearConfig.clock_speed <= 100000) ? STD_DUTY_CYCLE : FAST_DUTY_CYCLE_2;  \
429
  i2cStart(&MODULE_HAL_I2C_PROX_PM18_PM33_GAUGEREAR, &moduleHalI2cProxPm18Pm33GaugeRearConfig); \
430
  moduleHalI2cProxPm42Pm50PmVddEepromTouchGaugeFrontConfig.clock_speed = (PCA9544A_LLD_I2C_MAXFREQUENCY < moduleHalI2cProxPm42Pm50PmVddEepromTouchGaugeFrontConfig.clock_speed) ? PCA9544A_LLD_I2C_MAXFREQUENCY : moduleHalI2cProxPm42Pm50PmVddEepromTouchGaugeFrontConfig.clock_speed; \
431
  moduleHalI2cProxPm42Pm50PmVddEepromTouchGaugeFrontConfig.clock_speed = (VCNL4020_LLD_I2C_MAXFREQUENCY < moduleHalI2cProxPm42Pm50PmVddEepromTouchGaugeFrontConfig.clock_speed) ? VCNL4020_LLD_I2C_MAXFREQUENCY : moduleHalI2cProxPm42Pm50PmVddEepromTouchGaugeFrontConfig.clock_speed; \
432
  moduleHalI2cProxPm42Pm50PmVddEepromTouchGaugeFrontConfig.clock_speed = (INA219_LLD_I2C_MAXFREQUENCY < moduleHalI2cProxPm42Pm50PmVddEepromTouchGaugeFrontConfig.clock_speed) ? INA219_LLD_I2C_MAXFREQUENCY : moduleHalI2cProxPm42Pm50PmVddEepromTouchGaugeFrontConfig.clock_speed; \
433
  moduleHalI2cProxPm42Pm50PmVddEepromTouchGaugeFrontConfig.clock_speed = (AT24C01BN_LLD_I2C_MAXFREQUENCY < moduleHalI2cProxPm42Pm50PmVddEepromTouchGaugeFrontConfig.clock_speed) ? AT24C01BN_LLD_I2C_MAXFREQUENCY : moduleHalI2cProxPm42Pm50PmVddEepromTouchGaugeFrontConfig.clock_speed; \
434
  moduleHalI2cProxPm42Pm50PmVddEepromTouchGaugeFrontConfig.clock_speed = (MPR121_LLD_I2C_MAXFREQUENCY < moduleHalI2cProxPm42Pm50PmVddEepromTouchGaugeFrontConfig.clock_speed) ? MPR121_LLD_I2C_MAXFREQUENCY : moduleHalI2cProxPm42Pm50PmVddEepromTouchGaugeFrontConfig.clock_speed; \
435
  moduleHalI2cProxPm42Pm50PmVddEepromTouchGaugeFrontConfig.clock_speed = (BQ27500_LLD_I2C_MAXFREQUENCY < moduleHalI2cProxPm42Pm50PmVddEepromTouchGaugeFrontConfig.clock_speed) ? BQ27500_LLD_I2C_MAXFREQUENCY : moduleHalI2cProxPm42Pm50PmVddEepromTouchGaugeFrontConfig.clock_speed; \
436
  moduleHalI2cProxPm42Pm50PmVddEepromTouchGaugeFrontConfig.duty_cycle = (moduleHalI2cProxPm42Pm50PmVddEepromTouchGaugeFrontConfig.clock_speed <= 100000) ? STD_DUTY_CYCLE : FAST_DUTY_CYCLE_2;  \
437
  i2cStart(&MODULE_HAL_I2C_PROX_PM42_PM50_PMVDD_EEPROM_TOUCH_GAUGEFRONT, &moduleHalI2cProxPm42Pm50PmVddEepromTouchGaugeFrontConfig);  \
438
  /* ADC */                                                                   \
439
  adcStart(&MODULE_HAL_ADC_VSYS, NULL);                                       \
440
  /* PWM */                                                                   \
441
  pwmStart(&MODULE_HAL_PWM_BUZZER, &moduleHalPwmBuzzerConfig);                \
442
  moduleHalPwmBuzzerConfig.frequency = MODULE_HAL_PWM_BUZZER.clock;           \
443
  pwmStop(&MODULE_HAL_PWM_BUZZER);                                            \
444
  moduleHalPwmBuzzerConfig.period = moduleHalPwmBuzzerConfig.frequency / PKLCS1212E4001_LLD_FREQUENCY_SPEC; \
445
  pwmStart(&MODULE_HAL_PWM_BUZZER, &moduleHalPwmBuzzerConfig);                \
446
}
447
448
/**
449
 * @brief   Periphery communication interface deinitialization hook.
450
 */
451
#define MODULE_SHUTDOWN_PERIPHERY_COMM() {                                    \
452
  /* PWM */                                                                   \
453
  pwmStop(&MODULE_HAL_PWM_BUZZER);                                            \
454
  /* ADC */                                                                   \
455
  adcStop(&MODULE_HAL_ADC_VSYS);                                              \
456
  /* I2C */                                                                   \
457
  i2cStop(&MODULE_HAL_I2C_PROX_PM18_PM33_GAUGEREAR);                          \
458
  i2cStop(&MODULE_HAL_I2C_PROX_PM42_PM50_PMVDD_EEPROM_TOUCH_GAUGEFRONT);      \
459
  /* don't stop the serial driver so messages can still be printed */         \
460
}
461
462
/** @} */
463
464
/*===========================================================================*/
465
/**
466 6b53f6bf Thomas Schöpping
 * @name Startup Shutdown Synchronization Protocol (SSSP)
467
 * @{
468
 */
469
/*===========================================================================*/
470
471
/**
472
 * @brief   PD signal GPIO.
473
 */
474 1e5f7648 Thomas Schöpping
#define moduleSsspGpioPd                        moduleGpioSysPd
475 6b53f6bf Thomas Schöpping
476
/**
477
 * @brief   SYNC signal GPIO.
478
 */
479 1e5f7648 Thomas Schöpping
#define moduleSsspGpioSync                       moduleGpioSysSync
480 6b53f6bf Thomas Schöpping
481
/**
482 933df08e Thomas Schöpping
 * @brief   DN signal GPIO.
483
 */
484 1e5f7648 Thomas Schöpping
#define moduleSsspGpioDn                        moduleGpioSysUartDn
485 933df08e Thomas Schöpping
486
/**
487
 * @brief   UP signal GPIO.
488
 */
489 1e5f7648 Thomas Schöpping
#define moduleSsspGpioUp                        moduleGpioSysUartUp
490 933df08e Thomas Schöpping
491
/**
492 6b53f6bf Thomas Schöpping
 * @brief   Event flags for PD signal events.
493
 */
494
#define MODULE_SSSP_EVENTFLAGS_PD               MODULE_OS_IOEVENTFLAGS_SYSPD
495
496
/**
497 933df08e Thomas Schöpping
 * @brief   Event flags for SYNC signal events.
498 6b53f6bf Thomas Schöpping
 */
499
#define MODULE_SSSP_EVENTFLAGS_SYNC             MODULE_OS_IOEVENTFLAGS_SYSSYNC
500
501
/**
502 933df08e Thomas Schöpping
 * @brief   Event flags for UP signal events.
503
 */
504
#define MODULE_SSSP_EVENTFLAGS_UP               MODULE_OS_IOEVENTFLAGS_SYSUARTUP
505
506
/**
507
 * @brief   Event flags for DN signal events.
508
 */
509
#define MODULE_SSSP_EVENTFLAGS_DN               MODULE_OS_IOEVENTFLAGS_SYSUARTDN
510
511 6b53f6bf Thomas Schöpping
/** @} */
512
513
/*===========================================================================*/
514
/**
515 e545e620 Thomas Schöpping
 * @name Low-level drivers
516
 * @{
517
 */
518
/*===========================================================================*/
519
#include <alld_at24c01bn-sh-b.h>
520
#include <alld_bq24103a.h>
521
#include <alld_bq27500.h>
522
#include <alld_ina219.h>
523
#include <alld_led.h>
524
#include <alld_mpr121.h>
525
#include <alld_pca9544a.h>
526
#include <alld_pklcs1212e4001.h>
527
#include <alld_tps62113.h>
528
#include <alld_vcnl4020.h>
529
530
/**
531
 * @brief   EEPROM driver.
532
 */
533
extern AT24C01BNDriver moduleLldEeprom;
534
535
/**
536
 * @brief   Battery charger (front battery) driver.
537
 */
538
extern BQ24103ADriver moduleLldBatteryChargerFront;
539
540
/**
541
 * @brief   Battery charger (rear battery) driver.
542
 */
543
extern BQ24103ADriver moduleLldBatteryChargerRear;
544
545
/**
546
 * @brief   Fuel gauge (front battery) driver.
547
 */
548
extern BQ27500Driver moduleLldFuelGaugeFront;
549
550
/**
551
 * @brief   Fuel gauge (rear battery) driver.
552
 */
553
extern BQ27500Driver moduleLldFuelGaugeRear;
554
555
/**
556
 * @brief   Power monitor (VDD) driver.
557
 */
558
extern INA219Driver moduleLldPowerMonitorVdd;
559
560
/**
561
 * @brief   Power monitor (VIO 1.8) driver.
562
 */
563
extern INA219Driver moduleLldPowerMonitorVio18;
564
565
/**
566
 * @brief   Power monitor (VIO 3.3) driver.
567
 */
568
extern INA219Driver moduleLldPowerMonitorVio33;
569
570
/**
571
 * @brief   Power monitor (VSYS 4.2) driver.
572
 */
573
extern INA219Driver moduleLldPowerMonitorVsys42;
574
575
/**
576
 * @brief   Power monitor (VIO 5.0) driver.
577
 */
578
extern INA219Driver moduleLldPowerMonitorVio50;
579
580
/**
581
 * @brief   Status LED driver.
582
 */
583
extern LEDDriver moduleLldStatusLed;
584
585
/**
586
 * @brief   Touch sensor driver.
587
 */
588
extern MPR121Driver moduleLldTouch;
589
590
/**
591
 * @brief   I2C multiplexer (I2C 1) driver.
592
 */
593
extern PCA9544ADriver moduleLldI2cMultiplexer1;
594
595
/**
596
 * @brief   I2C multiplexer (I2C 2) driver.
597
 */
598
extern PCA9544ADriver moduleLldI2cMultiplexer2;
599
600
/**
601
 * @brief   Step down converter driver.
602
 * @note    Although there multiple TPS62113, those are completely identical from driver few (share the same signals).
603
 */
604
extern TPS62113Driver moduleLldStepDownConverter;
605
606
/**
607
 * @brief   Proximity sensor (I2C 1) driver.
608
 */
609
extern VCNL4020Driver moduleLldProximity1;
610
611
/**
612
 * @brief   Proximity sensor (I2C 2) driver.
613
 */
614
extern VCNL4020Driver moduleLldProximity2;
615
616
/** @} */
617
618
/*===========================================================================*/
619
/**
620
 * @name Unit tests (UT)
621
 * @{
622
 */
623
/*===========================================================================*/
624
#if (AMIROOS_CFG_TESTS_ENABLE == true) || defined(__DOXYGEN__)
625
#include <ut_lld_adc.h>
626
#include <ut_alld_at24c01bn-sh-b.h>
627
#include <ut_alld_bq24103a.h>
628
#include <ut_alld_bq27500.h>
629
#include <ut_alld_bq27500_bq24103a.h>
630
#include <ut_alld_ina219.h>
631
#include <ut_alld_led.h>
632
#include <ut_alld_mpr121.h>
633
#include <ut_alld_pca9544a.h>
634
#include <ut_alld_pklcs1212e4001.h>
635
#include <ut_alld_tps62113.h>
636
#include <ut_alld_tps62113_ina219.h>
637
#include <ut_alld_vcnl4020.h>
638
639
/**
640
 * @brief   ADC unit test object.
641
 */
642
extern aos_unittest_t moduleUtAdcVsys;
643
644
/**
645
 * @brief   AT24C01BN-SH-B (EEPROM) unit test object.
646
 */
647
extern aos_unittest_t moduleUtAlldAt24c01bn;
648
649
/**
650
 * @brief   BQ24103A (battery charger) unit test object.
651
 */
652
extern aos_unittest_t moduleUtAlldBq24103a;
653
654
/**
655
 * @brief   BQ27500 (fuel gauge) unit test object.
656
 */
657
extern aos_unittest_t moduleUtAlldBq27500;
658
659
/**
660
 * @brief   BQ27500 (fuela gauge) in combination with BQ24103A (battery charger) unit test object.
661
 */
662
extern aos_unittest_t moduleUtAlldBq27500Bq24103a;
663
664
/**
665
 * @brief   INA219 (power monitor) unit test object.
666
 */
667
extern aos_unittest_t moduleUtAlldIna219;
668
669
/**
670
 * @brief   Status LED unit test object.
671
 */
672
extern aos_unittest_t moduleUtAlldLed;
673
674
/**
675
 * @brief   MPR121 (touch sensor) unit test object.
676
 */
677
extern aos_unittest_t moduleUtAlldMpr121;
678
679
/**
680
 * @brief   PCA9544A (I2C multiplexer) unit test object.
681
 */
682
extern aos_unittest_t moduleUtAlldPca9544a;
683
684
/**
685
 * @brief   PKLCS1212E4001 (buzzer) unit test object.
686
 */
687
extern aos_unittest_t moduleUtAlldPklcs1212e4001;
688
689
/**
690
 * @brief   TPS62113 (step-down converter) unit test object.
691
 */
692
extern aos_unittest_t moduleUtAlldTps62113;
693
694
/**
695
 * @brief   TPS62113 (step-sown converter) in combination with INA219 (power monitor) unit test object.
696
 */
697
extern aos_unittest_t moduleUtAlldTps62113Ina219;
698
699
/**
700
 * @brief   VCNL4020 (proximity sensor) unit test object.
701
 */
702
extern aos_unittest_t moduleUtAlldVcnl4020;
703
704
#endif /* AMIROOS_CFG_TESTS_ENABLE == true */
705
706
/** @} */
707
708
#endif /* _AMIROOS_MODULE_H_ */
709 53710ca3 Marc Rothmann
710
/** @} */