Debug - Add support for debug pins on H7.
[betaflight.git] / src / main / build / debug_pin.c
blobfb8e711cbd9830f97c16e9072d832d41d22a15b5
1 /*
2 * This file is part of Cleanflight and Betaflight.
4 * Cleanflight and Betaflight are free software. You can redistribute
5 * this software and/or modify this software under the terms of the
6 * GNU General Public License as published by the Free Software
7 * Foundation, either version 3 of the License, or (at your option)
8 * any later version.
10 * Cleanflight and Betaflight are distributed in the hope that they
11 * will be useful, but WITHOUT ANY WARRANTY; without even the implied
12 * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
13 * See the GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this software.
18 * If not, see <http://www.gnu.org/licenses/>.
21 #include "platform.h"
23 #ifdef USE_DEBUG_PIN
25 #include "drivers/io.h"
26 #include "drivers/io_impl.h"
28 typedef struct dbgPin_s {
29 ioTag_t tag;
30 GPIO_TypeDef *gpio;
31 uint32_t setBSRR;
32 uint32_t resetBSRR;
33 } dbgPin_t;
35 __weak dbgPin_t dbgPins[] = {
36 { .tag = IO_TAG(NONE) },
39 void dbgPinInit(void)
41 for (unsigned i = 0; i < ARRAYLEN(dbgPins); i++) {
42 dbgPin_t *dbgPin = &dbgPins[i];
43 IO_t io = IOGetByTag(dbgPin->tag);
44 if (!io) {
45 continue;
47 IOConfigGPIO(io, IOCFG_OUT_PP);
48 dbgPin->gpio = IO_GPIO(io);
49 int pinSrc = IO_GPIO_PinSource(io);
50 dbgPin->setBSRR = (1 << pinSrc);
51 dbgPin->resetBSRR = (1 << (pinSrc + 16));
55 void dbgPinHi(int index)
57 if ((unsigned)index >= ARRAYLEN(dbgPins)) {
58 return;
61 dbgPin_t *dbgPin = &dbgPins[index];
62 if (dbgPin->gpio) {
63 #if defined(STM32F7) || defined(STM32H7)
64 dbgPin->gpio->BSRR = dbgPin->setBSRR;
65 #else
66 dbgPin->gpio->BSRRL = dbgPin->setBSRR;
67 #endif
71 void dbgPinLo(int index)
73 if ((unsigned)index > ARRAYLEN(dbgPins)) {
74 return;
77 dbgPin_t *dbgPin = &dbgPins[index];
79 if (dbgPin->gpio) {
80 #if defined(STM32F7) || defined(STM32H7)
81 dbgPin->gpio->BSRR = dbgPin->resetBSRR;
82 #else
83 dbgPin->gpio->BSRRL = dbgPin->resetBSRR;
84 #endif
88 #endif