Statistics
| Branch: | Tag: | Revision:

amiro-os / modules / PowerManagement_1-1 / module.h @ 1e5f7648

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