123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 |
- /*
- * Copyright (c) 2021 HPMicro
- *
- * SPDX-License-Identifier: BSD-3-Clause
- *
- */
- #ifndef HPM_GPIOM_DRV_H
- #define HPM_GPIOM_DRV_H
- #include "hpm_gpiom_regs.h"
- #include "hpm_gpiom_soc_drv.h"
- /**
- *
- * @brief GPIOM driver APIs
- * @defgroup gpiom_interface GPIOM driver APIs
- * @ingroup io_interfaces
- * @{
- */
- /* @brief pin visibility */
- typedef enum gpiom_pin_visibility {
- gpiom_pin_visible = 0,
- gpiom_pin_invisible = 1,
- } gpiom_pin_visibility_t;
- #ifdef __cplusplus
- extern "C" {
- #endif
- /**
- * @brief Get pin's controller
- *
- * @param ptr GPIOM base address
- * @param gpio_index gpio port index
- * @param pin_index pin index
- *
- * @retval pin control module
- */
- static inline gpiom_gpio_t gpiom_get_pin_controller(GPIOM_Type *ptr,
- uint8_t gpio_index,
- uint8_t pin_index)
- {
- return (gpiom_gpio_t)((ptr->ASSIGN[gpio_index].PIN[pin_index]
- & (GPIOM_ASSIGN_PIN_SELECT_MASK)) >> GPIOM_ASSIGN_PIN_SELECT_SHIFT);
- }
- /**
- * @brief set pin's controller
- *
- * @param ptr GPIOM base address
- * @param gpio_index gpio port index
- * @param pin_index pin index
- * @param gpio gpio module index
- */
- static inline void gpiom_set_pin_controller(GPIOM_Type *ptr,
- uint8_t gpio_index,
- uint8_t pin_index,
- gpiom_gpio_t gpio)
- {
- ptr->ASSIGN[gpio_index].PIN[pin_index] =
- (ptr->ASSIGN[gpio_index].PIN[pin_index] & ~(GPIOM_ASSIGN_PIN_SELECT_MASK))
- | GPIOM_ASSIGN_PIN_SELECT_SET(gpio);
- }
- /**
- * @brief Check if pin is visibility for specified module
- *
- * @param ptr GPIOM base address
- * @param gpio_index gpio port index
- * @param pin_index pin index
- * @param gpio gpio module index
- *
- * @retval true if pin is visible by specified module
- * @retval false if pin is not visible by specified module
- */
- static inline bool gpiom_check_pin_visibility(GPIOM_Type *ptr,
- uint8_t gpio_index,
- uint8_t pin_index,
- gpiom_gpio_t gpio)
- {
- return (ptr->ASSIGN[gpio_index].PIN[pin_index] & ((1 << gpio) << GPIOM_ASSIGN_PIN_HIDE_SHIFT))
- >> GPIOM_ASSIGN_PIN_HIDE_SHIFT >> gpio == gpiom_pin_visible;
- }
- /**
- * @brief enable pin visibility for specified module
- *
- * @param ptr GPIOM base address
- * @param gpio_index gpio port index
- * @param pin_index pin index
- * @param gpio gpio module index
- */
- static inline void gpiom_enable_pin_visibility(GPIOM_Type *ptr,
- uint8_t gpio_index,
- uint8_t pin_index,
- gpiom_gpio_t gpio)
- {
- ptr->ASSIGN[gpio_index].PIN[pin_index] =
- (ptr->ASSIGN[gpio_index].PIN[pin_index] & ~((1 << gpio) << GPIOM_ASSIGN_PIN_HIDE_SHIFT));
- }
- /**
- * @brief disable pin visibility for specified module
- *
- * @param ptr GPIOM base address
- * @param gpio_index gpio port index
- * @param pin_index pin index
- * @param gpio gpio module index
- */
- static inline void gpiom_disable_pin_visibility(GPIOM_Type *ptr,
- uint8_t gpio_index,
- uint8_t pin_index,
- gpiom_gpio_t gpio)
- {
- ptr->ASSIGN[gpio_index].PIN[pin_index] =
- (ptr->ASSIGN[gpio_index].PIN[pin_index] & ~((1 << gpio) << GPIOM_ASSIGN_PIN_HIDE_SHIFT))
- | GPIOM_ASSIGN_PIN_HIDE_SET(1 << gpio);
- }
- /**
- * @brief Check if pin management is locked
- *
- * @param ptr GPIOM base address
- * @param gpio_index gpio port index
- * @param pin_index pin index
- *
- * @retval true if pin management is locked
- * @retval false if pin management is not locked
- */
- static inline bool gpiom_pin_is_locked(GPIOM_Type *ptr,
- uint8_t gpio_index,
- uint8_t pin_index)
- {
- return (ptr->ASSIGN[gpio_index].PIN[pin_index] & GPIOM_ASSIGN_PIN_LOCK_MASK)
- == GPIOM_ASSIGN_PIN_LOCK_MASK;
- }
- /**
- * @brief lock pin management
- *
- * @param ptr GPIOM base address
- * @param gpio_index gpio port index
- * @param pin_index pin index
- */
- static inline void gpiom_lock_pin(GPIOM_Type *ptr,
- uint8_t gpio_index,
- uint8_t pin_index)
- {
- ptr->ASSIGN[gpio_index].PIN[pin_index] |= GPIOM_ASSIGN_PIN_LOCK_MASK;
- }
- #ifdef __cplusplus
- }
- #endif
- /**
- * @}
- */
- #endif /* HPM_GPIOM_DRV_H */
|