1
0
Fork 0
mirror of https://github.com/betaflight/betaflight.git synced 2025-07-21 07:15:18 +03:00

Debug - Separate pin config from runtime state/implementation details.

This commit is contained in:
Dominic Clifton 2021-08-18 10:17:31 +02:00
parent 8913458041
commit 13a0037b18
2 changed files with 28 additions and 15 deletions

View file

@ -25,30 +25,39 @@
#include "drivers/io.h"
#include "drivers/io_impl.h"
typedef struct dbgPin_s {
ioTag_t tag;
#include "debug_pin.h"
typedef struct dbgPinState_s {
GPIO_TypeDef *gpio;
uint32_t setBSRR;
uint32_t resetBSRR;
} dbgPin_t;
} dbgPinState_t;
__weak dbgPin_t dbgPins[] = {
#ifndef DEBUG_PIN_COUNT
#define DEBUG_PIN_COUNT 1
#endif
// Provide a non-weak reference in target.c or elsewhere
__weak dbgPin_t dbgPins[DEBUG_PIN_COUNT] = {
{ .tag = IO_TAG(NONE) },
};
dbgPinState_t dbgPinStates[DEBUG_PIN_COUNT] = { 0 };
void dbgPinInit(void)
{
for (unsigned i = 0; i < ARRAYLEN(dbgPins); i++) {
dbgPin_t *dbgPin = &dbgPins[i];
dbgPinState_t *dbgPinState = &dbgPinStates[i];
IO_t io = IOGetByTag(dbgPin->tag);
if (!io) {
continue;
}
IOConfigGPIO(io, IOCFG_OUT_PP);
dbgPin->gpio = IO_GPIO(io);
dbgPinState->gpio = IO_GPIO(io);
int pinSrc = IO_GPIO_PinSource(io);
dbgPin->setBSRR = (1 << pinSrc);
dbgPin->resetBSRR = (1 << (pinSrc + 16));
dbgPinState->setBSRR = (1 << pinSrc);
dbgPinState->resetBSRR = (1 << (pinSrc + 16));
}
}
@ -58,12 +67,12 @@ void dbgPinHi(int index)
return;
}
dbgPin_t *dbgPin = &dbgPins[index];
if (dbgPin->gpio) {
dbgPinState_t *dbgPinState = &dbgPinStates[index];
if (dbgPinState->gpio) {
#if defined(STM32F7) || defined(STM32H7)
dbgPin->gpio->BSRR = dbgPin->setBSRR;
dbgPinState->gpio->BSRR = dbgPinState->setBSRR;
#else
dbgPin->gpio->BSRRL = dbgPin->setBSRR;
dbgPinState->gpio->BSRRL = dbgPinState->setBSRR;
#endif
}
}
@ -74,13 +83,13 @@ void dbgPinLo(int index)
return;
}
dbgPin_t *dbgPin = &dbgPins[index];
dbgPinState_t *dbgPinState = &dbgPinStates[index];
if (dbgPin->gpio) {
if (dbgPinState->gpio) {
#if defined(STM32F7) || defined(STM32H7)
dbgPin->gpio->BSRR = dbgPin->resetBSRR;
dbgPinState->gpio->BSRR = dbgPinState->resetBSRR;
#else
dbgPin->gpio->BSRRL = dbgPin->resetBSRR;
dbgPinState->gpio->BSRRL = dbgPinState->resetBSRR;
#endif
}
}

View file

@ -20,6 +20,10 @@
#pragma once
typedef struct dbgPin_s {
ioTag_t tag;
} dbgPin_t;
void dbgPinInit(void);
void dbgPinHi(int index);
void dbgPinLo(int index);