summaryrefslogtreecommitdiff
path: root/mcc_generated_files/system/port.h
diff options
context:
space:
mode:
Diffstat (limited to 'mcc_generated_files/system/port.h')
-rw-r--r--mcc_generated_files/system/port.h902
1 files changed, 902 insertions, 0 deletions
diff --git a/mcc_generated_files/system/port.h b/mcc_generated_files/system/port.h
new file mode 100644
index 0000000..3c6c5fb
--- /dev/null
+++ b/mcc_generated_files/system/port.h
@@ -0,0 +1,902 @@
+/**
+ * Generated Ports header File
+ *
+ * @file port.h
+ *
+ * @ingroup pinsdriver
+ *
+ * @brief This Source file provides APIs.
+ *
+ * @version Driver Version 1.0.1
+*/
+
+/*
+© [2025] Microchip Technology Inc. and its subsidiaries.
+
+ Subject to your compliance with these terms, you may use Microchip
+ software and any derivatives exclusively with Microchip products.
+ You are responsible for complying with 3rd party license terms
+ applicable to your use of 3rd party software (including open source
+ software) that may accompany Microchip software. SOFTWARE IS ?AS IS.?
+ NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS
+ SOFTWARE, INCLUDING ANY IMPLIED WARRANTIES OF NON-INFRINGEMENT,
+ MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT
+ WILL MICROCHIP BE LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE,
+ INCIDENTAL OR CONSEQUENTIAL LOSS, DAMAGE, COST OR EXPENSE OF ANY
+ KIND WHATSOEVER RELATED TO THE SOFTWARE, HOWEVER CAUSED, EVEN IF
+ MICROCHIP HAS BEEN ADVISED OF THE POSSIBILITY OR THE DAMAGES ARE
+ FORESEEABLE. TO THE FULLEST EXTENT ALLOWED BY LAW, MICROCHIP?S
+ TOTAL LIABILITY ON ALL CLAIMS RELATED TO THE SOFTWARE WILL NOT
+ EXCEED AMOUNT OF FEES, IF ANY, YOU PAID DIRECTLY TO MICROCHIP FOR
+ THIS SOFTWARE.
+*/
+
+
+#ifndef PORT_INCLUDED
+#define PORT_INCLUDED
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "utils/compiler.h"
+
+/* @ingroup pinsdriver
+ * @enum port_pull_mode
+ * Defines the pullup modes.
+ */
+enum port_pull_mode {
+ PORT_PULL_OFF,
+ PORT_PULL_UP,
+};
+
+/* @ingroup pinsdriver
+ * @enum port_dir
+ * Defines the port directions.
+ */
+enum port_dir {
+ PORT_DIR_IN,
+ PORT_DIR_OUT,
+ PORT_DIR_OFF,
+};
+
+/**
+ * @ingroup pinsdriver
+ * @brief Set port pin pull mode, Configure pin to pull up, down or disable pull mode, supported pull modes are defined by device used.
+ * @param pin The pin number within port
+ * @param pull_mode Pin pull mode
+ * @return none
+ */
+static inline void PORTA_set_pin_pull_mode(const uint8_t pin, const enum port_pull_mode pull_mode)
+{
+ volatile uint8_t *port_pin_ctrl = ((uint8_t *)&PORTA + 0x10 + pin);
+
+ if (pull_mode == PORT_PULL_UP) {
+ *port_pin_ctrl |= PORT_PULLUPEN_bm;
+ } else if (pull_mode == PORT_PULL_OFF) {
+ *port_pin_ctrl &= ~PORT_PULLUPEN_bm;
+ }
+}
+
+/**
+ * @ingroup pinsdriver
+ * @brief Set port pin inverted mode, Configure pin invert I/O or not.
+ * @param pin The pin number within port
+ * @param inverted Pin inverted mode
+ * @return none
+ */
+static inline void PORTA_pin_set_inverted(const uint8_t pin, const bool inverted)
+{
+ volatile uint8_t *port_pin_ctrl = ((uint8_t *)&PORTA + 0x10 + pin);
+
+ if (inverted) {
+ *port_pin_ctrl |= PORT_INVEN_bm;
+ } else {
+ *port_pin_ctrl &= ~PORT_INVEN_bm;
+ }
+}
+
+/**
+ * @ingroup pinsdriver
+ * @brief Set port pin input/sense configuration, Enable/disable digital input buffer and pin change interrupt,
+ * select pin interrupt edge/level sensing mode
+ * @param The pin number within port
+ * @param isc PORT_ISC_t
+ * @return none
+ */
+static inline void PORTA_pin_set_isc(const uint8_t pin, const PORT_ISC_t isc)
+{
+ volatile uint8_t *port_pin_ctrl = ((uint8_t *)&PORTA + 0x10 + pin);
+
+ *port_pin_ctrl = (*port_pin_ctrl & ~PORT_ISC_gm) | isc;
+}
+
+/**
+ * @ingroup pinsdriver
+ * @brief Set port data direction, Select if the pin data direction is input, output or disabled.
+ * If disabled state is not possible, this function throws an assert.
+ *
+ * @param mask Bit mask where 1 means apply direction setting to the
+ * corresponding pin
+ * @param dir port_dir
+ * @return none
+ */
+static inline void PORTA_set_port_dir(const uint8_t mask, const enum port_dir dir)
+{
+ switch (dir) {
+ case PORT_DIR_IN:
+ VPORTA.DIR &= ~mask;
+ break;
+ case PORT_DIR_OUT:
+ VPORTA.DIR |= mask;
+ break;
+ case PORT_DIR_OFF:
+ /*/ should activate the pullup for power saving
+ but a bit costly to do it here */
+ {
+ for (uint8_t i = 0; i < 8; i++) {
+ if (mask & 1 << i) {
+ *((uint8_t *)&PORTA + 0x10 + i) |= 1 << PORT_PULLUPEN_bp;
+ }
+ }
+ }
+ break;
+ default:
+ break;
+ }
+}
+
+/**
+ * @ingroup pinsdriver
+ * @brief Set port pin data direction, Select if the pin data direction is input, output or disabled.
+ * If disabled state is not possible, this function throws an assert.
+ *
+ * @param pin The pin number within port
+ * @param dir port_dir
+ * @return none
+ */
+static inline void PORTA_set_pin_dir(const uint8_t pin, const enum port_dir dir)
+{
+ switch (dir) {
+ case PORT_DIR_IN:
+ VPORTA.DIR &= ~(1 << pin);
+ break;
+ case PORT_DIR_OUT:
+ VPORTA.DIR |= (1 << pin);
+ break;
+ case PORT_DIR_OFF:
+ *((uint8_t *)&PORTA + 0x10 + pin) |= 1 << PORT_PULLUPEN_bp;
+ break;
+ default:
+ break;
+ }
+}
+
+/**
+ * @ingroup pinsdriver
+ * @brief Set port level, Sets output level on the pins defined by the bit mask.
+ *
+ * @param mask Bit mask where 1 means apply port level to the corresponding
+ * pin
+ * @param level -boolean value that defines the logic state of the pin level
+ * false = Pin levels set to "low" state
+ * @return none
+ */
+static inline void PORTA_set_port_level(const uint8_t mask, const bool level)
+{
+ if (level == true) {
+ VPORTA.OUT |= mask;
+ } else {
+ VPORTA.OUT &= ~mask;
+ }
+}
+
+/**
+ * @ingroup pinsdriver
+ * @brief Set port level, Sets output level on a pin.
+ *
+ * @param pin The pin number within port
+ * @param level -boolean value that defines the logic state of the pin level
+ * @return none
+ */
+static inline void PORTA_set_pin_level(const uint8_t pin, const bool level)
+{
+ if (level == true) {
+ VPORTA.OUT |= (1 << pin);
+ } else {
+ VPORTA.OUT &= ~(1 << pin);
+ }
+}
+
+/**
+ * @ingroup pinsdriver
+ * @brief Toggle out level on pins, Toggle the pin levels on pins defined by bit mask.
+ *
+ * @param mask Bit mask where 1 means toggle pin level to the corresponding
+ * pin
+ * @return none
+ */
+static inline void PORTA_toggle_port_level(const uint8_t mask)
+{
+ PORTA.OUTTGL = mask;
+}
+
+/**
+ * @ingroup pinsdriver
+ * @brief Toggle output level on pin, Toggle the pin levels on pins defined by bit mask.
+ *
+ * @param pin The pin number within port
+ * @return none
+ */
+static inline void PORTA_toggle_pin_level(const uint8_t pin)
+{
+ PORTA.OUTTGL = 1 << pin;
+}
+
+/**
+ * @ingroup pinsdriver
+ * @brief Get input level on pins, Read the input level on pins connected to a port.
+ *
+ * @param none
+ * @return none
+ */
+static inline uint8_t PORTA_get_port_level()
+{
+ return VPORTA.IN;
+}
+
+/**
+ * @ingroup pinsdriver
+ * @brief Get level on pin, Reads the level on pins connected to a port.
+ *
+ * @param pin The pin number within port
+ * @return none
+ */
+static inline bool PORTA_get_pin_level(const uint8_t pin)
+{
+ return VPORTA.IN & (1 << pin);
+}
+
+/**
+ * @ingroup pinsdriver
+ * @brief Write value to Port, Write directly to the port OUT register.
+ *
+ * @param value Value to write to the port register
+ * @return none
+ */
+static inline void PORTA_write_port(const uint8_t value)
+{
+ VPORTA.OUT = value;
+}
+
+/**
+ * @ingroup pinsdriver
+ * @brief Set port pin pull mode, Configure pin to pull up, down or disable pull mode, supported pull modes are defined by device used.
+ * @param pin The pin number within port
+ * @param pull_mode Pin pull mode
+ * @return none
+ */
+static inline void PORTC_set_pin_pull_mode(const uint8_t pin, const enum port_pull_mode pull_mode)
+{
+ volatile uint8_t *port_pin_ctrl = ((uint8_t *)&PORTC + 0x10 + pin);
+
+ if (pull_mode == PORT_PULL_UP) {
+ *port_pin_ctrl |= PORT_PULLUPEN_bm;
+ } else if (pull_mode == PORT_PULL_OFF) {
+ *port_pin_ctrl &= ~PORT_PULLUPEN_bm;
+ }
+}
+
+/**
+ * @ingroup pinsdriver
+ * @brief Set port pin inverted mode, Configure pin invert I/O or not.
+ * @param pin The pin number within port
+ * @param inverted Pin inverted mode
+ * @return none
+ */
+static inline void PORTC_pin_set_inverted(const uint8_t pin, const bool inverted)
+{
+ volatile uint8_t *port_pin_ctrl = ((uint8_t *)&PORTC + 0x10 + pin);
+
+ if (inverted) {
+ *port_pin_ctrl |= PORT_INVEN_bm;
+ } else {
+ *port_pin_ctrl &= ~PORT_INVEN_bm;
+ }
+}
+
+/**
+ * @ingroup pinsdriver
+ * @brief Set port pin input/sense configuration, Enable/disable digital input buffer and pin change interrupt,
+ * select pin interrupt edge/level sensing mode
+ * @param The pin number within port
+ * @param isc PORT_ISC_t
+ * @return none
+ */
+static inline void PORTC_pin_set_isc(const uint8_t pin, const PORT_ISC_t isc)
+{
+ volatile uint8_t *port_pin_ctrl = ((uint8_t *)&PORTC + 0x10 + pin);
+
+ *port_pin_ctrl = (*port_pin_ctrl & ~PORT_ISC_gm) | isc;
+}
+
+/**
+ * @ingroup pinsdriver
+ * @brief Set port data direction, Select if the pin data direction is input, output or disabled.
+ * If disabled state is not possible, this function throws an assert.
+ *
+ * @param mask Bit mask where 1 means apply direction setting to the
+ * corresponding pin
+ * @param dir port_dir
+ * @return none
+ */
+static inline void PORTC_set_port_dir(const uint8_t mask, const enum port_dir dir)
+{
+ switch (dir) {
+ case PORT_DIR_IN:
+ VPORTC.DIR &= ~mask;
+ break;
+ case PORT_DIR_OUT:
+ VPORTC.DIR |= mask;
+ break;
+ case PORT_DIR_OFF:
+ /*/ should activate the pullup for power saving
+ but a bit costly to do it here */
+ {
+ for (uint8_t i = 0; i < 8; i++) {
+ if (mask & 1 << i) {
+ *((uint8_t *)&PORTC + 0x10 + i) |= 1 << PORT_PULLUPEN_bp;
+ }
+ }
+ }
+ break;
+ default:
+ break;
+ }
+}
+
+/**
+ * @ingroup pinsdriver
+ * @brief Set port pin data direction, Select if the pin data direction is input, output or disabled.
+ * If disabled state is not possible, this function throws an assert.
+ *
+ * @param pin The pin number within port
+ * @param dir port_dir
+ * @return none
+ */
+static inline void PORTC_set_pin_dir(const uint8_t pin, const enum port_dir dir)
+{
+ switch (dir) {
+ case PORT_DIR_IN:
+ VPORTC.DIR &= ~(1 << pin);
+ break;
+ case PORT_DIR_OUT:
+ VPORTC.DIR |= (1 << pin);
+ break;
+ case PORT_DIR_OFF:
+ *((uint8_t *)&PORTC + 0x10 + pin) |= 1 << PORT_PULLUPEN_bp;
+ break;
+ default:
+ break;
+ }
+}
+
+/**
+ * @ingroup pinsdriver
+ * @brief Set port level, Sets output level on the pins defined by the bit mask.
+ *
+ * @param mask Bit mask where 1 means apply port level to the corresponding
+ * pin
+ * @param level -boolean value that defines the logic state of the pin level
+ * false = Pin levels set to "low" state
+ * @return none
+ */
+static inline void PORTC_set_port_level(const uint8_t mask, const bool level)
+{
+ if (level == true) {
+ VPORTC.OUT |= mask;
+ } else {
+ VPORTC.OUT &= ~mask;
+ }
+}
+
+/**
+ * @ingroup pinsdriver
+ * @brief Set port level, Sets output level on a pin.
+ *
+ * @param pin The pin number within port
+ * @param level -boolean value that defines the logic state of the pin level
+ * @return none
+ */
+static inline void PORTC_set_pin_level(const uint8_t pin, const bool level)
+{
+ if (level == true) {
+ VPORTC.OUT |= (1 << pin);
+ } else {
+ VPORTC.OUT &= ~(1 << pin);
+ }
+}
+
+/**
+ * @ingroup pinsdriver
+ * @brief Toggle out level on pins, Toggle the pin levels on pins defined by bit mask.
+ *
+ * @param mask Bit mask where 1 means toggle pin level to the corresponding
+ * pin
+ * @return none
+ */
+static inline void PORTC_toggle_port_level(const uint8_t mask)
+{
+ PORTC.OUTTGL = mask;
+}
+
+/**
+ * @ingroup pinsdriver
+ * @brief Toggle output level on pin, Toggle the pin levels on pins defined by bit mask.
+ *
+ * @param pin The pin number within port
+ * @return none
+ */
+static inline void PORTC_toggle_pin_level(const uint8_t pin)
+{
+ PORTC.OUTTGL = 1 << pin;
+}
+
+/**
+ * @ingroup pinsdriver
+ * @brief Get input level on pins, Read the input level on pins connected to a port.
+ *
+ * @param none
+ * @return none
+ */
+static inline uint8_t PORTC_get_port_level()
+{
+ return VPORTC.IN;
+}
+
+/**
+ * @ingroup pinsdriver
+ * @brief Get level on pin, Reads the level on pins connected to a port.
+ *
+ * @param pin The pin number within port
+ * @return none
+ */
+static inline bool PORTC_get_pin_level(const uint8_t pin)
+{
+ return VPORTC.IN & (1 << pin);
+}
+
+/**
+ * @ingroup pinsdriver
+ * @brief Write value to Port, Write directly to the port OUT register.
+ *
+ * @param value Value to write to the port register
+ * @return none
+ */
+static inline void PORTC_write_port(const uint8_t value)
+{
+ VPORTC.OUT = value;
+}
+
+/**
+ * @ingroup pinsdriver
+ * @brief Set port pin pull mode, Configure pin to pull up, down or disable pull mode, supported pull modes are defined by device used.
+ * @param pin The pin number within port
+ * @param pull_mode Pin pull mode
+ * @return none
+ */
+static inline void PORTD_set_pin_pull_mode(const uint8_t pin, const enum port_pull_mode pull_mode)
+{
+ volatile uint8_t *port_pin_ctrl = ((uint8_t *)&PORTD + 0x10 + pin);
+
+ if (pull_mode == PORT_PULL_UP) {
+ *port_pin_ctrl |= PORT_PULLUPEN_bm;
+ } else if (pull_mode == PORT_PULL_OFF) {
+ *port_pin_ctrl &= ~PORT_PULLUPEN_bm;
+ }
+}
+
+/**
+ * @ingroup pinsdriver
+ * @brief Set port pin inverted mode, Configure pin invert I/O or not.
+ * @param pin The pin number within port
+ * @param inverted Pin inverted mode
+ * @return none
+ */
+static inline void PORTD_pin_set_inverted(const uint8_t pin, const bool inverted)
+{
+ volatile uint8_t *port_pin_ctrl = ((uint8_t *)&PORTD + 0x10 + pin);
+
+ if (inverted) {
+ *port_pin_ctrl |= PORT_INVEN_bm;
+ } else {
+ *port_pin_ctrl &= ~PORT_INVEN_bm;
+ }
+}
+
+/**
+ * @ingroup pinsdriver
+ * @brief Set port pin input/sense configuration, Enable/disable digital input buffer and pin change interrupt,
+ * select pin interrupt edge/level sensing mode
+ * @param The pin number within port
+ * @param isc PORT_ISC_t
+ * @return none
+ */
+static inline void PORTD_pin_set_isc(const uint8_t pin, const PORT_ISC_t isc)
+{
+ volatile uint8_t *port_pin_ctrl = ((uint8_t *)&PORTD + 0x10 + pin);
+
+ *port_pin_ctrl = (*port_pin_ctrl & ~PORT_ISC_gm) | isc;
+}
+
+/**
+ * @ingroup pinsdriver
+ * @brief Set port data direction, Select if the pin data direction is input, output or disabled.
+ * If disabled state is not possible, this function throws an assert.
+ *
+ * @param mask Bit mask where 1 means apply direction setting to the
+ * corresponding pin
+ * @param dir port_dir
+ * @return none
+ */
+static inline void PORTD_set_port_dir(const uint8_t mask, const enum port_dir dir)
+{
+ switch (dir) {
+ case PORT_DIR_IN:
+ VPORTD.DIR &= ~mask;
+ break;
+ case PORT_DIR_OUT:
+ VPORTD.DIR |= mask;
+ break;
+ case PORT_DIR_OFF:
+ /*/ should activate the pullup for power saving
+ but a bit costly to do it here */
+ {
+ for (uint8_t i = 0; i < 8; i++) {
+ if (mask & 1 << i) {
+ *((uint8_t *)&PORTD + 0x10 + i) |= 1 << PORT_PULLUPEN_bp;
+ }
+ }
+ }
+ break;
+ default:
+ break;
+ }
+}
+
+/**
+ * @ingroup pinsdriver
+ * @brief Set port pin data direction, Select if the pin data direction is input, output or disabled.
+ * If disabled state is not possible, this function throws an assert.
+ *
+ * @param pin The pin number within port
+ * @param dir port_dir
+ * @return none
+ */
+static inline void PORTD_set_pin_dir(const uint8_t pin, const enum port_dir dir)
+{
+ switch (dir) {
+ case PORT_DIR_IN:
+ VPORTD.DIR &= ~(1 << pin);
+ break;
+ case PORT_DIR_OUT:
+ VPORTD.DIR |= (1 << pin);
+ break;
+ case PORT_DIR_OFF:
+ *((uint8_t *)&PORTD + 0x10 + pin) |= 1 << PORT_PULLUPEN_bp;
+ break;
+ default:
+ break;
+ }
+}
+
+/**
+ * @ingroup pinsdriver
+ * @brief Set port level, Sets output level on the pins defined by the bit mask.
+ *
+ * @param mask Bit mask where 1 means apply port level to the corresponding
+ * pin
+ * @param level -boolean value that defines the logic state of the pin level
+ * false = Pin levels set to "low" state
+ * @return none
+ */
+static inline void PORTD_set_port_level(const uint8_t mask, const bool level)
+{
+ if (level == true) {
+ VPORTD.OUT |= mask;
+ } else {
+ VPORTD.OUT &= ~mask;
+ }
+}
+
+/**
+ * @ingroup pinsdriver
+ * @brief Set port level, Sets output level on a pin.
+ *
+ * @param pin The pin number within port
+ * @param level -boolean value that defines the logic state of the pin level
+ * @return none
+ */
+static inline void PORTD_set_pin_level(const uint8_t pin, const bool level)
+{
+ if (level == true) {
+ VPORTD.OUT |= (1 << pin);
+ } else {
+ VPORTD.OUT &= ~(1 << pin);
+ }
+}
+
+/**
+ * @ingroup pinsdriver
+ * @brief Toggle out level on pins, Toggle the pin levels on pins defined by bit mask.
+ *
+ * @param mask Bit mask where 1 means toggle pin level to the corresponding
+ * pin
+ * @return none
+ */
+static inline void PORTD_toggle_port_level(const uint8_t mask)
+{
+ PORTD.OUTTGL = mask;
+}
+
+/**
+ * @ingroup pinsdriver
+ * @brief Toggle output level on pin, Toggle the pin levels on pins defined by bit mask.
+ *
+ * @param pin The pin number within port
+ * @return none
+ */
+static inline void PORTD_toggle_pin_level(const uint8_t pin)
+{
+ PORTD.OUTTGL = 1 << pin;
+}
+
+/**
+ * @ingroup pinsdriver
+ * @brief Get input level on pins, Read the input level on pins connected to a port.
+ *
+ * @param none
+ * @return none
+ */
+static inline uint8_t PORTD_get_port_level()
+{
+ return VPORTD.IN;
+}
+
+/**
+ * @ingroup pinsdriver
+ * @brief Get level on pin, Reads the level on pins connected to a port.
+ *
+ * @param pin The pin number within port
+ * @return none
+ */
+static inline bool PORTD_get_pin_level(const uint8_t pin)
+{
+ return VPORTD.IN & (1 << pin);
+}
+
+/**
+ * @ingroup pinsdriver
+ * @brief Write value to Port, Write directly to the port OUT register.
+ *
+ * @param value Value to write to the port register
+ * @return none
+ */
+static inline void PORTD_write_port(const uint8_t value)
+{
+ VPORTD.OUT = value;
+}
+
+/**
+ * @ingroup pinsdriver
+ * @brief Set port pin pull mode, Configure pin to pull up, down or disable pull mode, supported pull modes are defined by device used.
+ * @param pin The pin number within port
+ * @param pull_mode Pin pull mode
+ * @return none
+ */
+static inline void PORTF_set_pin_pull_mode(const uint8_t pin, const enum port_pull_mode pull_mode)
+{
+ volatile uint8_t *port_pin_ctrl = ((uint8_t *)&PORTF + 0x10 + pin);
+
+ if (pull_mode == PORT_PULL_UP) {
+ *port_pin_ctrl |= PORT_PULLUPEN_bm;
+ } else if (pull_mode == PORT_PULL_OFF) {
+ *port_pin_ctrl &= ~PORT_PULLUPEN_bm;
+ }
+}
+
+/**
+ * @ingroup pinsdriver
+ * @brief Set port pin inverted mode, Configure pin invert I/O or not.
+ * @param pin The pin number within port
+ * @param inverted Pin inverted mode
+ * @return none
+ */
+static inline void PORTF_pin_set_inverted(const uint8_t pin, const bool inverted)
+{
+ volatile uint8_t *port_pin_ctrl = ((uint8_t *)&PORTF + 0x10 + pin);
+
+ if (inverted) {
+ *port_pin_ctrl |= PORT_INVEN_bm;
+ } else {
+ *port_pin_ctrl &= ~PORT_INVEN_bm;
+ }
+}
+
+/**
+ * @ingroup pinsdriver
+ * @brief Set port pin input/sense configuration, Enable/disable digital input buffer and pin change interrupt,
+ * select pin interrupt edge/level sensing mode
+ * @param The pin number within port
+ * @param isc PORT_ISC_t
+ * @return none
+ */
+static inline void PORTF_pin_set_isc(const uint8_t pin, const PORT_ISC_t isc)
+{
+ volatile uint8_t *port_pin_ctrl = ((uint8_t *)&PORTF + 0x10 + pin);
+
+ *port_pin_ctrl = (*port_pin_ctrl & ~PORT_ISC_gm) | isc;
+}
+
+/**
+ * @ingroup pinsdriver
+ * @brief Set port data direction, Select if the pin data direction is input, output or disabled.
+ * If disabled state is not possible, this function throws an assert.
+ *
+ * @param mask Bit mask where 1 means apply direction setting to the
+ * corresponding pin
+ * @param dir port_dir
+ * @return none
+ */
+static inline void PORTF_set_port_dir(const uint8_t mask, const enum port_dir dir)
+{
+ switch (dir) {
+ case PORT_DIR_IN:
+ VPORTF.DIR &= ~mask;
+ break;
+ case PORT_DIR_OUT:
+ VPORTF.DIR |= mask;
+ break;
+ case PORT_DIR_OFF:
+ /*/ should activate the pullup for power saving
+ but a bit costly to do it here */
+ {
+ for (uint8_t i = 0; i < 8; i++) {
+ if (mask & 1 << i) {
+ *((uint8_t *)&PORTF + 0x10 + i) |= 1 << PORT_PULLUPEN_bp;
+ }
+ }
+ }
+ break;
+ default:
+ break;
+ }
+}
+
+/**
+ * @ingroup pinsdriver
+ * @brief Set port pin data direction, Select if the pin data direction is input, output or disabled.
+ * If disabled state is not possible, this function throws an assert.
+ *
+ * @param pin The pin number within port
+ * @param dir port_dir
+ * @return none
+ */
+static inline void PORTF_set_pin_dir(const uint8_t pin, const enum port_dir dir)
+{
+ switch (dir) {
+ case PORT_DIR_IN:
+ VPORTF.DIR &= ~(1 << pin);
+ break;
+ case PORT_DIR_OUT:
+ VPORTF.DIR |= (1 << pin);
+ break;
+ case PORT_DIR_OFF:
+ *((uint8_t *)&PORTF + 0x10 + pin) |= 1 << PORT_PULLUPEN_bp;
+ break;
+ default:
+ break;
+ }
+}
+
+/**
+ * @ingroup pinsdriver
+ * @brief Set port level, Sets output level on the pins defined by the bit mask.
+ *
+ * @param mask Bit mask where 1 means apply port level to the corresponding
+ * pin
+ * @param level -boolean value that defines the logic state of the pin level
+ * false = Pin levels set to "low" state
+ * @return none
+ */
+static inline void PORTF_set_port_level(const uint8_t mask, const bool level)
+{
+ if (level == true) {
+ VPORTF.OUT |= mask;
+ } else {
+ VPORTF.OUT &= ~mask;
+ }
+}
+
+/**
+ * @ingroup pinsdriver
+ * @brief Set port level, Sets output level on a pin.
+ *
+ * @param pin The pin number within port
+ * @param level -boolean value that defines the logic state of the pin level
+ * @return none
+ */
+static inline void PORTF_set_pin_level(const uint8_t pin, const bool level)
+{
+ if (level == true) {
+ VPORTF.OUT |= (1 << pin);
+ } else {
+ VPORTF.OUT &= ~(1 << pin);
+ }
+}
+
+/**
+ * @ingroup pinsdriver
+ * @brief Toggle out level on pins, Toggle the pin levels on pins defined by bit mask.
+ *
+ * @param mask Bit mask where 1 means toggle pin level to the corresponding
+ * pin
+ * @return none
+ */
+static inline void PORTF_toggle_port_level(const uint8_t mask)
+{
+ PORTF.OUTTGL = mask;
+}
+
+/**
+ * @ingroup pinsdriver
+ * @brief Toggle output level on pin, Toggle the pin levels on pins defined by bit mask.
+ *
+ * @param pin The pin number within port
+ * @return none
+ */
+static inline void PORTF_toggle_pin_level(const uint8_t pin)
+{
+ PORTF.OUTTGL = 1 << pin;
+}
+
+/**
+ * @ingroup pinsdriver
+ * @brief Get input level on pins, Read the input level on pins connected to a port.
+ *
+ * @param none
+ * @return none
+ */
+static inline uint8_t PORTF_get_port_level()
+{
+ return VPORTF.IN;
+}
+
+/**
+ * @ingroup pinsdriver
+ * @brief Get level on pin, Reads the level on pins connected to a port.
+ *
+ * @param pin The pin number within port
+ * @return none
+ */
+static inline bool PORTF_get_pin_level(const uint8_t pin)
+{
+ return VPORTF.IN & (1 << pin);
+}
+
+/**
+ * @ingroup pinsdriver
+ * @brief Write value to Port, Write directly to the port OUT register.
+ *
+ * @param value Value to write to the port register
+ * @return none
+ */
+static inline void PORTF_write_port(const uint8_t value)
+{
+ VPORTF.OUT = value;
+}
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* PORT_INCLUDED */ \ No newline at end of file