amiro-os / modules / PowerManagement_1-1 / module.c @ 47e89ebf
History | View | Annotate | Download (32.87 KB)
1 | e545e620 | Thomas Schöpping | /*
|
---|---|---|---|
2 | AMiRo-OS is an operating system designed for the Autonomous Mini Robot (AMiRo) platform.
|
||
3 | 84f0ce9e | Thomas Schöpping | Copyright (C) 2016..2019 Thomas Schöpping et al.
|
4 | e545e620 | Thomas Schöpping | |
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 | acc97cbf | Thomas Schöpping | * @file
|
21 | 53710ca3 | Marc Rothmann | * @brief Structures and constant for the PowerManagement module.
|
22 | *
|
||
23 | * @addtogroup powermanagement_module
|
||
24 | * @{
|
||
25 | */
|
||
26 | |||
27 | e545e620 | Thomas Schöpping | #include "module.h" |
28 | |||
29 | /*===========================================================================*/
|
||
30 | /**
|
||
31 | * @name Module specific functions
|
||
32 | * @{
|
||
33 | */
|
||
34 | /*===========================================================================*/
|
||
35 | |||
36 | /** @} */
|
||
37 | |||
38 | /*===========================================================================*/
|
||
39 | /**
|
||
40 | * @name ChibiOS/HAL configuration
|
||
41 | * @{
|
||
42 | */
|
||
43 | /*===========================================================================*/
|
||
44 | |||
45 | ADCConversionGroup moduleHalAdcVsysConversionGroup = { |
||
46 | /* buffer type */ true, |
||
47 | /* number of channels */ 1, |
||
48 | /* callback function */ NULL, |
||
49 | /* error callback */ NULL, |
||
50 | /* CR1 */ ADC_CR1_AWDEN | ADC_CR1_AWDIE,
|
||
51 | /* CR2 */ ADC_CR2_SWSTART | ADC_CR2_CONT,
|
||
52 | /* SMPR1 */ 0, |
||
53 | /* SMPR2 */ ADC_SMPR2_SMP_AN9(ADC_SAMPLE_480),
|
||
54 | /* HTR */ ADC_HTR_HT,
|
||
55 | /* LTR */ 0, |
||
56 | /* SQR1 */ ADC_SQR1_NUM_CH(1), |
||
57 | /* SQR2 */ 0, |
||
58 | /* SQR3 */ ADC_SQR3_SQ1_N(ADC_CHANNEL_IN9),
|
||
59 | }; |
||
60 | |||
61 | CANConfig moduleHalCanConfig = { |
||
62 | /* mcr */ CAN_MCR_ABOM | CAN_MCR_AWUM | CAN_MCR_TXFP,
|
||
63 | 933df08e | Thomas Schöpping | /* btr */ CAN_BTR_SJW(1) | CAN_BTR_TS2(3) | CAN_BTR_TS1(15) | CAN_BTR_BRP(1), |
64 | e545e620 | Thomas Schöpping | }; |
65 | |||
66 | 8be006e0 | Thomas Schöpping | I2CConfig moduleHalI2cSrPm18Pm33GaugeRearConfig = { |
67 | e545e620 | Thomas Schöpping | /* I²C mode */ OPMODE_I2C,
|
68 | /* frequency */ 400000, // TODO: replace with some macro (-> ChibiOS/HAL) |
||
69 | /* duty cycle */ FAST_DUTY_CYCLE_2,
|
||
70 | }; |
||
71 | |||
72 | 8be006e0 | Thomas Schöpping | I2CConfig moduleHalI2cSrPm42Pm50PmVddEepromGaugeFrontConfig = { |
73 | e545e620 | Thomas Schöpping | /* I²C mode */ OPMODE_I2C,
|
74 | /* frequency */ 400000, // TODO: replace with some macro (-> ChibiOS/HAL) |
||
75 | /* duty cycle */ FAST_DUTY_CYCLE_2,
|
||
76 | }; |
||
77 | |||
78 | PWMConfig moduleHalPwmBuzzerConfig = { |
||
79 | /* frequency */ 1000000, |
||
80 | /* period */ 0, |
||
81 | /* callback */ NULL, |
||
82 | /* channel configurations */ {
|
||
83 | /* channel 0 */ {
|
||
84 | /* mode */ PWM_OUTPUT_DISABLED,
|
||
85 | /* callback */ NULL |
||
86 | }, |
||
87 | /* channel 1 */ {
|
||
88 | /* mode */ PWM_OUTPUT_ACTIVE_HIGH,
|
||
89 | /* callback */ NULL |
||
90 | }, |
||
91 | /* channel 2 */ {
|
||
92 | /* mode */ PWM_OUTPUT_DISABLED,
|
||
93 | /* callback */ NULL |
||
94 | }, |
||
95 | /* channel 3 */ {
|
||
96 | /* mode */ PWM_OUTPUT_DISABLED,
|
||
97 | /* callback */ NULL |
||
98 | }, |
||
99 | }, |
||
100 | /* TIM CR2 register */ 0, |
||
101 | 7de0cc90 | Thomas Schöpping | #if (STM32_PWM_USE_ADVANCED == TRUE)
|
102 | e545e620 | Thomas Schöpping | /* TIM BDTR register */ 0, |
103 | 7de0cc90 | Thomas Schöpping | #endif /* (STM32_PWM_USE_ADVANCED == TRUE) */ |
104 | e545e620 | Thomas Schöpping | /* TIM DIER register */ 0, |
105 | }; |
||
106 | |||
107 | SerialConfig moduleHalProgIfConfig = { |
||
108 | /* bit rate */ 115200, |
||
109 | /* CR1 */ 0, |
||
110 | /* CR1 */ 0, |
||
111 | /* CR1 */ 0, |
||
112 | }; |
||
113 | |||
114 | /** @} */
|
||
115 | |||
116 | /*===========================================================================*/
|
||
117 | /**
|
||
118 | * @name GPIO definitions
|
||
119 | * @{
|
||
120 | */
|
||
121 | /*===========================================================================*/
|
||
122 | |||
123 | 1e5f7648 | Thomas Schöpping | /**
|
124 | * @brief SYS_REG_EN output signal GPIO.
|
||
125 | */
|
||
126 | static apalGpio_t _gpioSysRegEn = {
|
||
127 | 3106e8cc | Thomas Schöpping | /* line */ LINE_SYS_REG_EN,
|
128 | e545e620 | Thomas Schöpping | }; |
129 | 9af9aaea | Thomas Schöpping | ROMCONST apalControlGpio_t moduleGpioSysRegEn = { |
130 | 1e5f7648 | Thomas Schöpping | /* GPIO */ &_gpioSysRegEn,
|
131 | /* meta */ {
|
||
132 | /* direction */ APAL_GPIO_DIRECTION_OUTPUT,
|
||
133 | /* active state */ APAL_GPIO_ACTIVE_HIGH,
|
||
134 | /* interrupt edge */ APAL_GPIO_EDGE_NONE,
|
||
135 | }, |
||
136 | }; |
||
137 | e545e620 | Thomas Schöpping | |
138 | 1e5f7648 | Thomas Schöpping | /**
|
139 | * @brief IR_INT1 input signal GPIO.
|
||
140 | */
|
||
141 | static apalGpio_t _gpioIrInt1 = {
|
||
142 | 3106e8cc | Thomas Schöpping | /* line */ LINE_IR_INT1_N,
|
143 | e545e620 | Thomas Schöpping | }; |
144 | acc97cbf | Thomas Schöpping | ROMCONST apalControlGpio_t moduleGpioIrInt1 = { |
145 | 1e5f7648 | Thomas Schöpping | /* GPIO */ &_gpioIrInt1,
|
146 | /* meta */ {
|
||
147 | /* direction */ APAL_GPIO_DIRECTION_INPUT,
|
||
148 | 8be006e0 | Thomas Schöpping | #if (BOARD_SENSORRING == BOARD_PROXIMITYSENSOR)
|
149 | 1e5f7648 | Thomas Schöpping | /* active state */ (VCNL4020_LLD_INT_EDGE == APAL_GPIO_EDGE_RISING) ? APAL_GPIO_ACTIVE_HIGH : APAL_GPIO_ACTIVE_LOW,
|
150 | /* interrupt edge */ VCNL4020_LLD_INT_EDGE,
|
||
151 | 8be006e0 | Thomas Schöpping | #elif (BOARD_SENSORRING == BOARD_DISTANCESENSOR_VL53L0X)
|
152 | bffb3465 | Thomas Schöpping | /* active state */ (PCAL6524_LLD_INT_EDGE == APAL_GPIO_EDGE_RISING) ? APAL_GPIO_ACTIVE_HIGH : APAL_GPIO_ACTIVE_LOW,
|
153 | /* interrupt edge */ PCAL6524_LLD_INT_EDGE,
|
||
154 | 8be006e0 | Thomas Schöpping | #elif (BOARD_SENSORRING == BOARD_DISTANCESENSOR_VL53L1X)
|
155 | bffb3465 | Thomas Schöpping | /* active state */ (PCAL6524_LLD_INT_EDGE == APAL_GPIO_EDGE_RISING) ? APAL_GPIO_ACTIVE_HIGH : APAL_GPIO_ACTIVE_LOW,
|
156 | /* interrupt edge */ PCAL6524_LLD_INT_EDGE,
|
||
157 | 7de0cc90 | Thomas Schöpping | #else /* (BOARD_SENSORRING == ?) */ |
158 | 8be006e0 | Thomas Schöpping | /* active state */ APAL_GPIO_ACTIVE_LOW,
|
159 | /* interrupt edge */ APAL_GPIO_EDGE_NONE,
|
||
160 | 7de0cc90 | Thomas Schöpping | #endif /* (BOARD_SENSORRING == ?) */ |
161 | 1e5f7648 | Thomas Schöpping | }, |
162 | }; |
||
163 | e545e620 | Thomas Schöpping | |
164 | 1e5f7648 | Thomas Schöpping | /**
|
165 | * @brief POWER_EN output signal GPIO.
|
||
166 | */
|
||
167 | static apalGpio_t _gpioPowerEn = {
|
||
168 | 3106e8cc | Thomas Schöpping | /* line */ LINE_POWER_EN,
|
169 | e545e620 | Thomas Schöpping | }; |
170 | acc97cbf | Thomas Schöpping | ROMCONST apalControlGpio_t moduleGpioPowerEn = { |
171 | 1e5f7648 | Thomas Schöpping | /* GPIO */ &_gpioPowerEn,
|
172 | /* meta */ {
|
||
173 | /* direction */ APAL_GPIO_DIRECTION_OUTPUT,
|
||
174 | /* active state */ APAL_GPIO_ACTIVE_HIGH,
|
||
175 | /* interrupt edge */ APAL_GPIO_EDGE_NONE,
|
||
176 | }, |
||
177 | }; |
||
178 | e545e620 | Thomas Schöpping | |
179 | 1e5f7648 | Thomas Schöpping | /**
|
180 | * @brief SYS_UART_DN bidirectional signal GPIO.
|
||
181 | */
|
||
182 | static apalGpio_t _gpioSysUartDn = {
|
||
183 | 3106e8cc | Thomas Schöpping | /* line */ LINE_SYS_UART_DN,
|
184 | e545e620 | Thomas Schöpping | }; |
185 | acc97cbf | Thomas Schöpping | ROMCONST apalControlGpio_t moduleGpioSysUartDn = { |
186 | 1e5f7648 | Thomas Schöpping | /* GPIO */ &_gpioSysUartDn,
|
187 | /* meta */ {
|
||
188 | /* direction */ APAL_GPIO_DIRECTION_BIDIRECTIONAL,
|
||
189 | /* active state */ APAL_GPIO_ACTIVE_LOW,
|
||
190 | /* interrupt edge */ APAL_GPIO_EDGE_BOTH,
|
||
191 | }, |
||
192 | }; |
||
193 | e545e620 | Thomas Schöpping | |
194 | 1e5f7648 | Thomas Schöpping | /**
|
195 | * @brief CHARGE_STAT2A input signal GPIO.
|
||
196 | */
|
||
197 | static apalGpio_t _gpioChargeStat2A = {
|
||
198 | 3106e8cc | Thomas Schöpping | /* line */ LINE_CHARGE_STAT2A,
|
199 | e545e620 | Thomas Schöpping | }; |
200 | acc97cbf | Thomas Schöpping | ROMCONST apalControlGpio_t moduleGpioChargeStat2A = { |
201 | 1e5f7648 | Thomas Schöpping | /* GPIO */ &_gpioChargeStat2A,
|
202 | /* meta */ {
|
||
203 | /* direction */ APAL_GPIO_DIRECTION_INPUT,
|
||
204 | ddf34c3d | Thomas Schöpping | /* active state */ BQ241xx_LLD_CHARGE_STATUS_GPIO_ACTIVE_STATE,
|
205 | 1e5f7648 | Thomas Schöpping | /* interrupt edge */ APAL_GPIO_EDGE_NONE,
|
206 | }, |
||
207 | }; |
||
208 | e545e620 | Thomas Schöpping | |
209 | 1e5f7648 | Thomas Schöpping | /**
|
210 | * @brief GAUGE_BATLOW2 input signal GPIO.
|
||
211 | */
|
||
212 | static apalGpio_t _gpioGaugeBatLow2 = {
|
||
213 | 3106e8cc | Thomas Schöpping | /* line */ LINE_GAUGE_BATLOW2,
|
214 | e545e620 | Thomas Schöpping | }; |
215 | acc97cbf | Thomas Schöpping | ROMCONST apalControlGpio_t moduleGpioGaugeBatLow2 = { |
216 | 1e5f7648 | Thomas Schöpping | /* GPIO */ &_gpioGaugeBatLow2,
|
217 | /* meta */ {
|