From 18054a9e8f77cd9379d09d8f03a2f6243eed027f Mon Sep 17 00:00:00 2001 From: Joey Castillo Date: Tue, 20 Jul 2021 14:32:49 -0400 Subject: move to a makefile based workflow --- Sensor Watch Starter Project/hal_gpio.h | 126 ++++++++++++++++++++++++++++++++ 1 file changed, 126 insertions(+) create mode 100755 Sensor Watch Starter Project/hal_gpio.h (limited to 'Sensor Watch Starter Project/hal_gpio.h') diff --git a/Sensor Watch Starter Project/hal_gpio.h b/Sensor Watch Starter Project/hal_gpio.h new file mode 100755 index 00000000..821a7a9b --- /dev/null +++ b/Sensor Watch Starter Project/hal_gpio.h @@ -0,0 +1,126 @@ +/* + * Copyright (c) 2014-2016, Alex Taradov + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _HAL_GPIO_H_ +#define _HAL_GPIO_H_ + +/*- Definitions -------------------------------------------------------------*/ +#define HAL_GPIO_PORTA 0 +#define HAL_GPIO_PORTB 1 +#define HAL_GPIO_PORTC 2 + +#define HAL_GPIO_PMUX_A 0 +#define HAL_GPIO_PMUX_B 1 +#define HAL_GPIO_PMUX_C 2 +#define HAL_GPIO_PMUX_D 3 +#define HAL_GPIO_PMUX_E 4 +#define HAL_GPIO_PMUX_F 5 +#define HAL_GPIO_PMUX_G 6 +#define HAL_GPIO_PMUX_H 7 +#define HAL_GPIO_PMUX_I 8 + +#define HAL_GPIO_PIN(name, port, pin) \ + static inline void HAL_GPIO_##name##_set(void) \ + { \ + PORT->Group[HAL_GPIO_PORT##port].OUTSET.reg = (1 << pin); \ + (void)HAL_GPIO_##name##_set; \ + } \ + \ + static inline void HAL_GPIO_##name##_clr(void) \ + { \ + PORT->Group[HAL_GPIO_PORT##port].OUTCLR.reg = (1 << pin); \ + (void)HAL_GPIO_##name##_clr; \ + } \ + \ + static inline void HAL_GPIO_##name##_toggle(void) \ + { \ + PORT->Group[HAL_GPIO_PORT##port].OUTTGL.reg = (1 << pin); \ + (void)HAL_GPIO_##name##_toggle; \ + } \ + \ + static inline void HAL_GPIO_##name##_write(int value) \ + { \ + if (value) \ + PORT->Group[HAL_GPIO_PORT##port].OUTSET.reg = (1 << pin); \ + else \ + PORT->Group[HAL_GPIO_PORT##port].OUTCLR.reg = (1 << pin); \ + (void)HAL_GPIO_##name##_write; \ + } \ + \ + static inline void HAL_GPIO_##name##_in(void) \ + { \ + PORT->Group[HAL_GPIO_PORT##port].DIRCLR.reg = (1 << pin); \ + PORT->Group[HAL_GPIO_PORT##port].PINCFG[pin].reg |= PORT_PINCFG_INEN; \ + PORT->Group[HAL_GPIO_PORT##port].PINCFG[pin].reg &= ~PORT_PINCFG_PULLEN; \ + (void)HAL_GPIO_##name##_in; \ + } \ + \ + static inline void HAL_GPIO_##name##_out(void) \ + { \ + PORT->Group[HAL_GPIO_PORT##port].DIRSET.reg = (1 << pin); \ + PORT->Group[HAL_GPIO_PORT##port].PINCFG[pin].reg |= PORT_PINCFG_INEN; \ + (void)HAL_GPIO_##name##_out; \ + } \ + \ + static inline void HAL_GPIO_##name##_pullup(void) \ + { \ + PORT->Group[HAL_GPIO_PORT##port].OUTSET.reg = (1 << pin); \ + PORT->Group[HAL_GPIO_PORT##port].PINCFG[pin].reg |= PORT_PINCFG_PULLEN; \ + (void)HAL_GPIO_##name##_pullup; \ + } \ + \ + static inline int HAL_GPIO_##name##_read(void) \ + { \ + return (PORT->Group[HAL_GPIO_PORT##port].IN.reg & (1 << pin)) != 0; \ + (void)HAL_GPIO_##name##_read; \ + } \ + \ + static inline int HAL_GPIO_##name##_state(void) \ + { \ + return (PORT->Group[HAL_GPIO_PORT##port].DIR.reg & (1 << pin)) != 0; \ + (void)HAL_GPIO_##name##_state; \ + } \ + \ + static inline void HAL_GPIO_##name##_pmuxen(int mux) \ + { \ + PORT->Group[HAL_GPIO_PORT##port].PINCFG[pin].reg |= PORT_PINCFG_PMUXEN; \ + if (pin & 1) \ + PORT->Group[HAL_GPIO_PORT##port].PMUX[pin>>1].bit.PMUXO = mux; \ + else \ + PORT->Group[HAL_GPIO_PORT##port].PMUX[pin>>1].bit.PMUXE = mux; \ + (void)HAL_GPIO_##name##_pmuxen; \ + } \ + \ + static inline void HAL_GPIO_##name##_pmuxdis(void) \ + { \ + PORT->Group[HAL_GPIO_PORT##port].PINCFG[pin].reg &= ~PORT_PINCFG_PMUXEN; \ + (void)HAL_GPIO_##name##_pmuxdis; \ + } \ + +#endif // _HAL_GPIO_H_ + -- cgit v1.2.3