Statistics
| Branch: | Tag: | Revision:

amiro-os / modules / PowerManagement_1-1 / module.h @ 0128be0f

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