| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- // SPDX-License-Identifier: BSD-3-Clause
- // Copyright (c) 2021, Alex Taradov <alex@taradov.com>. All rights reserved.
- #ifndef _HAL_GPIO_H_
- #define _HAL_GPIO_H_
- /*- Definitions -------------------------------------------------------------*/
- #define HAL_GPIO_PIN(name, port, pin, func) \
- static inline void HAL_GPIO_##name##_set(void) \
- { \
- SIO->GPIO_OUT_SET = (1 << pin); \
- (void)HAL_GPIO_##name##_set; \
- } \
- \
- static inline void HAL_GPIO_##name##_clr(void) \
- { \
- SIO->GPIO_OUT_CLR = (1 << pin); \
- (void)HAL_GPIO_##name##_clr; \
- } \
- \
- static inline void HAL_GPIO_##name##_toggle(void) \
- { \
- SIO->GPIO_OUT_XOR = (1 << pin); \
- (void)HAL_GPIO_##name##_toggle; \
- } \
- \
- static inline void HAL_GPIO_##name##_write(int value) \
- { \
- if (value) \
- SIO->GPIO_OUT_SET = (1 << pin); \
- else \
- SIO->GPIO_OUT_CLR = (1 << pin); \
- (void)HAL_GPIO_##name##_write; \
- } \
- \
- static inline void HAL_GPIO_##name##_in(void) \
- { \
- SIO->GPIO_OE_CLR = (1 << pin); \
- IO_BANK##port->GPIO##pin##_CTRL = IO_BANK##port##_GPIO##pin##_CTRL_FUNCSEL_sio_##pin; \
- PADS_BANK##port##_CLR->GPIO##pin = PADS_BANK##port##_GPIO##pin##_PDE_Msk | PADS_BANK##port##_GPIO##pin##_PUE_Msk; \
- PADS_BANK##port##_SET->GPIO##pin = PADS_BANK##port##_GPIO##pin##_IE_Msk; \
- (void)HAL_GPIO_##name##_in; \
- } \
- \
- static inline void HAL_GPIO_##name##_out(void) \
- { \
- SIO->GPIO_OE_SET = (1 << pin); \
- IO_BANK##port->GPIO##pin##_CTRL = IO_BANK##port##_GPIO##pin##_CTRL_FUNCSEL_sio_##pin; \
- (void)HAL_GPIO_##name##_out; \
- } \
- \
- static inline void HAL_GPIO_##name##_init(void) \
- { \
- IO_BANK##port->GPIO##pin##_CTRL = IO_BANK##port##_GPIO##pin##_CTRL_FUNCSEL_##func; \
- (void)HAL_GPIO_##name##_init; \
- } \
- \
- static inline void HAL_GPIO_##name##_pullup(void) \
- { \
- PADS_BANK##port##_SET->GPIO##pin = PADS_BANK##port##_GPIO##pin##_PUE_Msk; \
- PADS_BANK##port##_CLR->GPIO##pin = PADS_BANK##port##_GPIO##pin##_PDE_Msk; \
- (void)HAL_GPIO_##name##_pullup; \
- } \
- \
- static inline void HAL_GPIO_##name##_pulldown(void) \
- { \
- PADS_BANK##port##_SET->GPIO##pin = PADS_BANK##port##_GPIO##pin##_PDE_Msk; \
- PADS_BANK##port##_CLR->GPIO##pin = PADS_BANK##port##_GPIO##pin##_PUE_Msk; \
- (void)HAL_GPIO_##name##_pulldown; \
- } \
- \
- static inline int HAL_GPIO_##name##_read(void) \
- { \
- return (SIO->GPIO_IN & (1 << pin)) != 0; \
- (void)HAL_GPIO_##name##_read; \
- } \
- \
- static inline void HAL_GPIO_##name##_funcsel(int fn) \
- { \
- IO_BANK##port->GPIO##pin##_CTRL_b.FUNCSEL = fn; \
- (void)HAL_GPIO_##name##_funcsel; \
- } \
- #endif // _HAL_GPIO_H_
|