1
0
Fork 0
mirror of https://github.com/betaflight/betaflight.git synced 2025-07-24 00:35:39 +03:00

IO Clean up and use of Low level for F7

- Move F7 to optional LL driver for IO and
- cleaned up and removed the remaining old gpio functions from other targets
This commit is contained in:
blckmn 2017-07-28 04:03:56 +10:00
parent da46ef68a9
commit e8c4ef83d9
26 changed files with 75 additions and 541 deletions

View file

@ -156,8 +156,10 @@ bool IORead(IO_t io)
{
if (!io)
return false;
#if defined(USE_HAL_DRIVER)
return !! HAL_GPIO_ReadPin(IO_GPIO(io),IO_Pin(io));
#if defined(USE_LOWLEVEL_DRIVER)
return !! (LL_GPIO_ReadInputPort(IO_GPIO(io)) & IO_Pin(io));
#elif defined(USE_HAL_DRIVER)
return !! HAL_GPIO_ReadPin(IO_GPIO(io), IO_Pin(io));
#else
return !! (IO_GPIO(io)->IDR & IO_Pin(io));
#endif
@ -167,7 +169,9 @@ void IOWrite(IO_t io, bool hi)
{
if (!io)
return;
#if defined(USE_HAL_DRIVER)
#if defined(USE_LOWLEVEL_DRIVER)
LL_GPIO_SetOutputPin(IO_GPIO(io), IO_Pin(io) << (hi ? 0 : 16));
#elif defined(USE_HAL_DRIVER)
if (hi) {
HAL_GPIO_WritePin(IO_GPIO(io),IO_Pin(io),GPIO_PIN_SET);
}
@ -190,7 +194,9 @@ void IOHi(IO_t io)
{
if (!io)
return;
#if defined(USE_HAL_DRIVER)
#if defined(USE_LOWLEVEL_DRIVER)
LL_GPIO_SetOutputPin(IO_GPIO(io), IO_Pin(io));
#elif defined(USE_HAL_DRIVER)
HAL_GPIO_WritePin(IO_GPIO(io),IO_Pin(io),GPIO_PIN_SET);
#elif defined(STM32F4)
IO_GPIO(io)->BSRRL = IO_Pin(io);
@ -203,7 +209,9 @@ void IOLo(IO_t io)
{
if (!io)
return;
#if defined(USE_HAL_DRIVER)
#if defined(USE_LOWLEVEL_DRIVER)
LL_GPIO_ResetOutputPin(IO_GPIO(io), IO_Pin(io));
#elif defined(USE_HAL_DRIVER)
HAL_GPIO_WritePin(IO_GPIO(io),IO_Pin(io),GPIO_PIN_RESET);
#elif defined(STM32F4)
IO_GPIO(io)->BSRRH = IO_Pin(io);
@ -216,11 +224,16 @@ void IOToggle(IO_t io)
{
if (!io)
return;
uint32_t mask = IO_Pin(io);
// Read pin state from ODR but write to BSRR because it only changes the pins
// high in the mask value rather than all pins. XORing ODR directly risks
// setting other pins incorrectly because it change all pins' state.
#if defined(USE_HAL_DRIVER)
#if defined(USE_LOWLEVEL_DRIVER)
if (LL_GPIO_ReadOutputPort(IO_GPIO(io)) & mask)
mask <<= 16; // bit is set, shift mask to reset half
LL_GPIO_SetOutputPin(IO_GPIO(io), mask);
#elif defined(USE_HAL_DRIVER)
(void)mask;
HAL_GPIO_TogglePin(IO_GPIO(io),IO_Pin(io));
#elif defined(STM32F4)
@ -284,18 +297,7 @@ void IOConfigGPIO(IO_t io, ioConfig_t cfg)
void IOConfigGPIO(IO_t io, ioConfig_t cfg)
{
if (!io)
return;
rccPeriphTag_t rcc = ioPortDefs[IO_GPIOPortIdx(io)].rcc;
RCC_ClockCmd(rcc, ENABLE);
GPIO_InitTypeDef init = {
.Pin = IO_Pin(io),
.Mode = (cfg >> 0) & 0x13,
.Speed = (cfg >> 2) & 0x03,
.Pull = (cfg >> 5) & 0x03,
};
HAL_GPIO_Init(IO_GPIO(io), &init);
IOConfigGPIOAF(io, cfg, 0);
}
void IOConfigGPIOAF(IO_t io, ioConfig_t cfg, uint8_t af)
@ -305,6 +307,17 @@ void IOConfigGPIOAF(IO_t io, ioConfig_t cfg, uint8_t af)
rccPeriphTag_t rcc = ioPortDefs[IO_GPIOPortIdx(io)].rcc;
RCC_ClockCmd(rcc, ENABLE);
#if defined(USE_LOWLEVEL_DRIVER)
LL_GPIO_InitTypeDef init = {
.Pin = IO_Pin(io),
.Mode = (cfg >> 0) & 0x13,
.Speed = (cfg >> 2) & 0x03,
.Pull = (cfg >> 5) & 0x03,
.Alternate = af
};
LL_GPIO_Init(IO_GPIO(io), &init);
#else
GPIO_InitTypeDef init = {
.Pin = IO_Pin(io),
.Mode = (cfg >> 0) & 0x13,
@ -313,7 +326,9 @@ void IOConfigGPIOAF(IO_t io, ioConfig_t cfg, uint8_t af)
.Alternate = af
};
HAL_GPIO_Init(IO_GPIO(io), &init);
#endif
}
#elif defined(STM32F3) || defined(STM32F4)
void IOConfigGPIO(IO_t io, ioConfig_t cfg)