text: /*******************************************************************************
    SYS PORTS Static Functions for PORTS System Service
  
    Company:
      Microchip Technology Inc.
  
    File Name:
      plib_gpio.c
  
    Summary:
      GPIO function implementations for the GPIO PLIB.
  
    Description:
      The GPIO PLIB provides a simple interface to manage peripheral
      input-output controller.
  
  *******************************************************************************/
  
  //DOM-IGNORE-BEGIN
  /*******************************************************************************
  * Copyright (C) 2019 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. It is your
  * responsibility to comply with third party license terms applicable to your
  * use of third party software (including open source software) that may
  * accompany Microchip software.
  *
  * THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS". NO WARRANTIES, WHETHER
  * EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE, INCLUDING ANY IMPLIED
  * WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY, AND 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 IN
  * ANY WAY RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT OF FEES, IF ANY,
  * THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS SOFTWARE.
  *******************************************************************************/
  //DOM-IGNORE-END
  
  #include "plib_gpio.h"
  
  
  
  /******************************************************************************
    Function:
      GPIO_Initialize ( void )
  
    Summary:
      Initialize the GPIO library.
  
    Remarks:
      See plib_gpio.h for more details.
  */
  void GPIO_Initialize ( void )
  {
      /* PORTA Initialization */
      LATA = 0x400; /* Initial Latch Value */
      TRISACLR = 0x400; /* Direction Control */
  
      /* PORTB Initialization */
  
      /* PORTC Initialization */
  
      /* PORTD Initialization */
  
      /* PORTE Initialization */
      ANSELECLR = 0x2000; /* Digital Mode Enable */
      CNPUESET = 0x2000; /* Pull-Up Enable */
  
      /* PORTF Initialization */
  
      /* PORTG Initialization */
  
  
  
      /* PPS Input Remapping */
  
      /* PPS Output Remapping */
  
  
  }
  
  // *****************************************************************************
  // *****************************************************************************
  // Section: GPIO APIs which operates on multiple pins of a port
  // *****************************************************************************
  // *****************************************************************************
  
  // *****************************************************************************
  /* Function:
      uint32_t GPIO_PortRead ( GPIO_PORT port )
  
    Summary:
      Read all the I/O lines of the selected port.
  
    Description:
      This function reads the live data values on all the I/O lines of the
      selected port.  Bit values returned in each position indicate corresponding
      pin levels.
      1 = Pin is high.
      0 = Pin is low.
  
      This function reads the value regardless of pin configuration, whether it is
      set as as an input, driven by the GPIO Controller, or driven by a peripheral.
  
    Remarks:
      If the port has less than 32-bits, unimplemented pins will read as
      low (0).
      Implemented pins are Right aligned in the 32-bit return value.
  */
  uint32_t GPIO_PortRead(GPIO_PORT port)
  {
      return (*(volatile uint32_t *)(&PORTA + (port * 0x40)));
  }
  
  // *****************************************************************************
  /* Function:
      void GPIO_PortWrite (GPIO_PORT port, uint32_t mask, uint32_t value);
  
    Summary:
      Write the value on the masked I/O lines of the selected port.
  
    Remarks:
      See plib_gpio.h for more details.
  */
  void GPIO_PortWrite(GPIO_PORT port, uint32_t mask, uint32_t value)
  {
      *(volatile uint32_t *)(&LATA + (port * 0x40)) = (*(volatile uint32_t *)(&LATA + (port * 0x40)) & (~mask)) | (mask & value);
  }
  
  // *****************************************************************************
  /* Function:
      uint32_t GPIO_PortLatchRead ( GPIO_PORT port )
  
    Summary:
      Read the latched value on all the I/O lines of the selected port.
  
    Remarks:
      See plib_gpio.h for more details.
  */
  uint32_t GPIO_PortLatchRead(GPIO_PORT port)
  {
      return (*(volatile uint32_t *)(&LATA + (port * 0x40)));
  }
  
  // *****************************************************************************
  /* Function:
      void GPIO_PortSet ( GPIO_PORT port, uint32_t mask )
  
    Summary:
      Set the selected IO pins of a port.
  
    Remarks:
      See plib_gpio.h for more details.
  */
  void GPIO_PortSet(GPIO_PORT port, uint32_t mask)
  {
      *(volatile uint32_t *)(&LATASET + (port * 0x40)) = mask;
  }
  
  // *****************************************************************************
  /* Function:
      void GPIO_PortClear ( GPIO_PORT port, uint32_t mask )
  
    Summary:
      Clear the selected IO pins of a port.
  
    Remarks:
      See plib_gpio.h for more details.
  */
  void GPIO_PortClear(GPIO_PORT port, uint32_t mask)
  {
      *(volatile uint32_t *)(&LATACLR + (port * 0x40)) = mask;
  }
  
  // *****************************************************************************
  /* Function:
      void GPIO_PortToggle ( GPIO_PORT port, uint32_t mask )
  
    Summary:
      Toggles the selected IO pins of a port.
  
    Remarks:
      See plib_gpio.h for more details.
  */
  void GPIO_PortToggle(GPIO_PORT port, uint32_t mask)
  {
      *(volatile uint32_t *)(&LATAINV + (port * 0x40))= mask;
  }
  
  // *****************************************************************************
  /* Function:
      void GPIO_PortInputEnable ( GPIO_PORT port, uint32_t mask )
  
    Summary:
      Enables selected IO pins of a port as input.
  
    Remarks:
      See plib_gpio.h for more details.
  */
  void GPIO_PortInputEnable(GPIO_PORT port, uint32_t mask)
  {
      *(volatile uint32_t *)(&TRISASET + (port * 0x40)) = mask;
  }
  
  // *****************************************************************************
  /* Function:
      void GPIO_PortOutputEnable ( GPIO_PORT port, uint32_t mask )
  
    Summary:
      Enables selected IO pins of a port as output(s).
  
    Remarks:
      See plib_gpio.h for more details.
  */
  void GPIO_PortOutputEnable(GPIO_PORT port, uint32_t mask)
  {
      *(volatile uint32_t *)(&TRISACLR + (port * 0x40)) = mask;
  }
  
  
  
  
  /*******************************************************************************
   End of File
  */
  