blob: 492c5219334d5c6fada38576720985cbba78c2c5 [file] [log] [blame]
/*
* Copyright 2025 Google LLC
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <stm32_ll_gpio.h>
#include "stm32_hsem.h"
#define CPU_CLOCK CONFIG_SYS_CLOCK_HW_CYCLES_PER_SEC
#define FAST_BITBANG_HW_SUPPORT 1
static ALWAYS_INLINE void swdp_ll_pin_input(void *const base, uint8_t pin)
{
GPIO_TypeDef *gpio = base;
z_stm32_hsem_lock(CFG_HW_GPIO_SEMID, HSEM_LOCK_DEFAULT_RETRY);
LL_GPIO_SetPinMode(gpio, BIT(pin), LL_GPIO_MODE_INPUT);
z_stm32_hsem_unlock(CFG_HW_GPIO_SEMID);
}
static ALWAYS_INLINE void swdp_ll_pin_output(void *const base, uint8_t pin)
{
GPIO_TypeDef *gpio = base;
z_stm32_hsem_lock(CFG_HW_GPIO_SEMID, HSEM_LOCK_DEFAULT_RETRY);
LL_GPIO_SetPinMode(gpio, BIT(pin), LL_GPIO_MODE_OUTPUT);
z_stm32_hsem_unlock(CFG_HW_GPIO_SEMID);
}
static ALWAYS_INLINE void swdp_ll_pin_set(void *const base, uint8_t pin)
{
GPIO_TypeDef *gpio = base;
LL_GPIO_SetOutputPin(gpio, BIT(pin));
}
static ALWAYS_INLINE void swdp_ll_pin_clr(void *const base, uint8_t pin)
{
GPIO_TypeDef *gpio = base;
LL_GPIO_ResetOutputPin(gpio, BIT(pin));
}
static ALWAYS_INLINE uint32_t swdp_ll_pin_get(void *const base, uint8_t pin)
{
GPIO_TypeDef *gpio = base;
return (LL_GPIO_ReadInputPort(gpio) >> pin) & 1;
}