Statistics
| Branch: | Tag: | Revision:

amiro-os / modules / NUCLEO-L476RG / module.c @ 7387fb42

History | View | Annotate | Download (6.107 KB)

1
/*
2
AMiRo-OS is an operating system designed for the Autonomous Mini Robot (AMiRo) platform.
3
Copyright (C) 2016..2020  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
/**
20
 * @file
21
 * @brief   Structures and constant for the NUCLEO-L476RG module.
22
 *
23
 * @addtogroup NUCLEO-L476RG_module
24
 * @{
25
 */
26

    
27
#include <amiroos.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
SerialConfig moduleHalProgIfConfig = {
46
  /* bit rate */ 115200,
47
  /* CR1      */ 0,
48
  /* CR1      */ 0,
49
  /* CR1      */ 0,
50
};
51

    
52
#if (BOARD_MPU6050_CONNECTED == true)
53

    
54
I2CConfig moduleHalI2c3Config = {
55
  /* timing reg */ 0, // configured later in MODULE_INIT_PERIPHERY_IF_MPU6050() hook
56
  /* CR1        */ 0,
57
  /* CR2        */ 0,
58
};
59

    
60
#endif /* (BOARD_MPU6050_CONNECTED == true) */
61

    
62
/** @} */
63

    
64
/*===========================================================================*/
65
/**
66
 * @name GPIO definitions
67
 * @{
68
 */
69
/*===========================================================================*/
70

    
71
/**
72
 * @brief   LED output signal GPIO.
73
 */
74
static apalGpio_t _gpioLed = {
75
  /* line */ LINE_LED_GREEN,
76
};
77
ROMCONST apalControlGpio_t moduleGpioLed = {
78
  /* GPIO */ &_gpioLed,
79
  /* meta */ {
80
    /* direction      */ APAL_GPIO_DIRECTION_OUTPUT,
81
    /* active state   */ APAL_GPIO_ACTIVE_HIGH,
82
    /* interrupt edge */ APAL_GPIO_EDGE_NONE,
83
  },
84
};
85

    
86
/**
87
 * @brief   User button input signal GPIO.
88
 */
89
static apalGpio_t _gpioUserButton = {
90
  /* line */ LINE_BUTTON,
91
};
92
ROMCONST apalControlGpio_t moduleGpioUserButton = {
93
  /* GPIO */ &_gpioUserButton,
94
  /* meta */ {
95
    /* direction      */ APAL_GPIO_DIRECTION_INPUT,
96
    /* active state   */ APAL_GPIO_ACTIVE_LOW,
97
    /* interrupt edge */ APAL_GPIO_EDGE_BOTH,
98
  },
99
};
100

    
101
/** @} */
102

    
103
/*===========================================================================*/
104
/**
105
 * @name AMiRo-OS core configurations
106
 * @{
107
 */
108
/*===========================================================================*/
109

    
110
#if (AMIROOS_CFG_SHELL_ENABLE == true) || defined(__DOXYGEN__)
111
ROMCONST char* moduleShellPrompt = "NUCLEO-L476RG";
112
#endif /* (AMIROOS_CFG_SHELL_ENABLE == true) */
113

    
114
/** @} */
115

    
116
/*===========================================================================*/
117
/**
118
 * @name Startup Shutdown Synchronization Protocol (SSSP)
119
 * @{
120
 */
121
/*===========================================================================*/
122

    
123
/** @} */
124

    
125
/*===========================================================================*/
126
/**
127
 * @name Low-level drivers
128
 * @{
129
 */
130
/*===========================================================================*/
131

    
132
LEDDriver moduleLldLed = {
133
  /* LED enable Gpio */ &moduleGpioLed,
134
};
135

    
136
ButtonDriver moduleLldUserButton = {
137
  /* Button Gpio  */ &moduleGpioUserButton,
138
};
139

    
140
#if (BOARD_MPU6050_CONNECTED == true)
141

    
142
MPU6050Driver moduleLldMpu6050 = {
143
  /* I2C Driver       */ &MODULE_HAL_I2C3,
144
  /* I²C address      */ MPU6050_LLD_I2C_ADDR_FIXED,
145
};
146

    
147
#endif /* (BOARD_MPU6050_CONNECTED == true) */
148

    
149
/** @} */
150

    
151
/*===========================================================================*/
152
/**
153
 * @name Tests
154
 * @{
155
 */
156
/*===========================================================================*/
157
#if (AMIROOS_CFG_TESTS_ENABLE == true) || defined(__DOXYGEN__)
158

    
159
/*
160
 * LED
161
 */
162
#include <module_test_LED.h>
163
static int _testLedShellCmdCb(BaseSequentialStream* stream, int argc, char* argv[])
164
{
165
  return moduleTestLedShellCb(stream, argc, argv, NULL);
166
}
167
AOS_SHELL_COMMAND(moduleTestLedShellCmd, "test:LED", _testLedShellCmdCb);
168

    
169
/*
170
 * User button
171
 */
172
#include <module_test_button.h>
173
static int _testButtonShellCmdCb(BaseSequentialStream* stream, int argc, char* argv[])
174
{
175
  return moduleTestButtonShellCb(stream, argc, argv, NULL);
176
}
177
AOS_SHELL_COMMAND(moduleTestButtonShellCmd, "test:button", _testButtonShellCmdCb);
178

    
179
#if (BOARD_MPU6050_CONNECTED == true) || defined(__DOXYGEN__)
180

    
181
/*
182
 * MPU6050 (accelerometer & gyroscope)
183
 */
184
#include <module_test_MPU6050.h>
185
static int _testMpu6050ShellCmdCb(BaseSequentialStream* stream, int argc, char* argv[])
186
{
187
  return moduleTestMpu6050ShellCb(stream, argc, argv, NULL);
188
}
189
AOS_SHELL_COMMAND(moduleTestMpu6050ShellCmd, "test:IMU", _testMpu6050ShellCmdCb);
190

    
191
#endif /* (BOARD_MPU6050_CONNECTED == true) */
192

    
193
/*
194
 * entire module
195
 */
196
static int _testAllShellCmdCb(BaseSequentialStream* stream, int argc, char* argv[])
197
{
198
  (void)argc;
199
  (void)argv;
200

    
201
  int status = AOS_OK;
202
  char* targv[AMIROOS_CFG_SHELL_MAXARGS] = {NULL};
203
  aos_testresult_t result_test = {0, 0};
204
  aos_testresult_t result_total = {0, 0};
205

    
206
  /* LED */
207
  status |= moduleTestLedShellCb(stream, 0, targv, &result_test);
208
  result_total = aosTestResultAdd(result_total, result_test);
209

    
210
  /* User button */
211
  status |= moduleTestButtonShellCb(stream, 0, targv, &result_test);
212
  result_total = aosTestResultAdd(result_total, result_test);
213

    
214
  /* MPU6050 (accelerometer & gyroscope) */
215
#if (BOARD_MPU6050_CONNECTED == true)
216
  status |= moduleTestMpu6050ShellCb(stream, 0, targv, &result_test);
217
  result_total = aosTestResultAdd(result_total, result_test);
218
#endif /* (BOARD_MPU6050_CONNECTED == true) */
219

    
220
  // print total result
221
  chprintf(stream, "\n");
222
  aosTestResultPrintSummary(stream, &result_total, "entire module");
223

    
224
  return status;
225
}
226
AOS_SHELL_COMMAND(moduleTestAllShellCmd, "test:all", _testAllShellCmdCb);
227

    
228
#endif /* (AMIROOS_CFG_TESTS_ENABLE == true) */
229

    
230
/** @} */
231
/** @} */