text: /** @file spi.h
  *   @brief SPI Driver Definition File
  *   @date 07-July-2017
  *   @version 04.07.00
  *
  */
  
  /* 
  * Copyright (C) 2009-2016 Texas Instruments Incorporated - www.ti.com  
  * 
  * 
  *  Redistribution and use in source and binary forms, with or without 
  *  modification, are permitted provided that the following conditions 
  *  are met:
  *
  *    Redistributions of source code must retain the above copyright 
  *    notice, this list of conditions and the following disclaimer.
  *
  *    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.
  *
  *    Neither the name of Texas Instruments Incorporated nor the names of
  *    its contributors may 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 
  *  OWNER 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 __SPI_H__
  #define __SPI_H__
  
  #include "HL_reg_spi.h"
  
  #ifdef __cplusplus
  extern "C" {
  #endif
  
  /** @enum chipSelect
  *   @brief Transfer Group Chip Select
  */
  enum spiChipSelect
  {
      SPI_CS_NONE = 0xFFU,
      SPI_CS_0    = 0xFEU,
      SPI_CS_1    = 0xFDU,
      SPI_CS_2    = 0xFBU,
      SPI_CS_3    = 0xF7U,
      SPI_CS_4    = 0xEFU,
      SPI_CS_5    = 0xDFU,
      SPI_CS_6    = 0xBFU,
      SPI_CS_7    = 0x7FU
  };
  
  /** @enum spiPinSelect
  *   @brief spi Pin Select
  */
  enum spiPinSelect
  {
      SPI_PIN_CS0    = 0U,
      SPI_PIN_CS1    = 1U,
      SPI_PIN_CS2    = 2U,
      SPI_PIN_CS3    = 3U,
      SPI_PIN_CS4    = 4U,
      SPI_PIN_CS5    = 5U,
      SPI_PIN_CS6    = 6U,
      SPI_PIN_CS7    = 7U,
      SPI_PIN_ENA    = 8U,
      SPI_PIN_CLK    = 9U,
      SPI_PIN_SIMO   = 10U,
      SPI_PIN_SOMI   = 11U,
      SPI_PIN_SIMO_1 = 17U,
      SPI_PIN_SIMO_2 = 18U,
      SPI_PIN_SIMO_3 = 19U,
      SPI_PIN_SIMO_4 = 20U,
      SPI_PIN_SIMO_5 = 21U,
      SPI_PIN_SIMO_6 = 22U,
      SPI_PIN_SIMO_7 = 23U,
      SPI_PIN_SOMI_1 = 25U,
      SPI_PIN_SOMI_2 = 26U,
      SPI_PIN_SOMI_3 = 27U,
      SPI_PIN_SOMI_4 = 28U,
      SPI_PIN_SOMI_5 = 29U,
      SPI_PIN_SOMI_6 = 30U,
      SPI_PIN_SOMI_7 = 31U
  };
  
  /** @enum dataformat
  *   @brief SPI dataformat register select
  */
  typedef enum dataformat
  {
      SPI_FMT_0 = 0U,
      SPI_FMT_1 = 1U,
      SPI_FMT_2 = 2U,
      SPI_FMT_3 = 3U
  }SPIDATAFMT_t;
  
  /** @struct spiDAT1RegConfig
  *   @brief SPI data register configuration
  */
  typedef struct spiDAT1RegConfig
  {
      boolean CS_HOLD;
      boolean WDEL;
      SPIDATAFMT_t DFSEL;
      uint8 CSNR;
  }spiDAT1_t;
  
  /** @enum SpiTxRxDataStatus
  *   @brief SPI Data Status
  */
  typedef enum SpiTxRxDataStatus
  {
      SPI_READY = 0U,
      SPI_PENDING = 1U,
      SPI_COMPLETED = 2U
  }SpiDataStatus_t;
  
  /* USER CODE BEGIN (0) */
  /* USER CODE END */
  
  typedef struct spi_config_reg
  {
      uint32 CONFIG_GCR1;
      uint32 CONFIG_INT0;
      uint32 CONFIG_LVL;
      uint32 CONFIG_PC0;
      uint32 CONFIG_PC1;
      uint32 CONFIG_PC6;
      uint32 CONFIG_PC7;
      uint32 CONFIG_PC8;
      uint32 CONFIG_DELAY;
      uint32 CONFIG_FMT0;
      uint32 CONFIG_FMT1;
      uint32 CONFIG_FMT2;
      uint32 CONFIG_FMT3;
  }spi_config_reg_t;
  
  
  
  
  
  
  
  
  
  
  /**
   *  @defgroup SPI SPI
   *  @brief Serial Peripheral Interface Module.
   *
   *  SPI is a high-speed synchronous serial input/output port that allows a serial bit stream of
   *  programmed length (2 to 16 bits) to be shifted in and out of the device at a programmed bit-transfer rate.
   *
   *    Related Files
   *   - HL_reg_spi.h
   *   - HL_spi.h
   *   - HL_spi.c
   *  @addtogroup SPI
   *  @{
   */
  
  /* SPI Interface Functions */
  void spiInit(void);
  void spiSetFunctional(spiBASE_t *spi, uint32 port);
  void spiEnableNotification(spiBASE_t *spi, uint32 flags);
  void spiDisableNotification(spiBASE_t *spi, uint32 flags);
  uint32 spiTransmitData(spiBASE_t *spi, spiDAT1_t *dataconfig_t, uint32 blocksize, uint16 * srcbuff);
  void spiSendData(spiBASE_t *spi, spiDAT1_t *dataconfig_t, uint32 blocksize, uint16 * srcbuff);
  uint32 spiReceiveData(spiBASE_t *spi, spiDAT1_t *dataconfig_t, uint32 blocksize, uint16 * destbuff);
  void spiGetData(spiBASE_t *spi, spiDAT1_t *dataconfig_t, uint32 blocksize, uint16 * destbuff);
  uint32 spiTransmitAndReceiveData(spiBASE_t *spi, spiDAT1_t *dataconfig_t, uint32 blocksize, uint16 * srcbuff, uint16 * destbuff);
  void spiSendAndGetData(spiBASE_t *spi, spiDAT1_t *dataconfig_t, uint32 blocksize, uint16 * srcbuff, uint16 * destbuff);
  void spiEnableLoopback(spiBASE_t *spi, loopBackType_t Loopbacktype);
  void spiDisableLoopback(spiBASE_t *spi);
  SpiDataStatus_t SpiTxStatus(spiBASE_t *spi);
  SpiDataStatus_t SpiRxStatus(spiBASE_t *spi);
  
  /** @fn void spiNotification(spiBASE_t *spi, uint32 flags)
  *   @brief Interrupt callback
  *   @param[in] spi   - Spi module base address
  *   @param[in] flags - Copy of error interrupt flags
  *
  * This is a callback that is provided by the application and is called upon
  * an interrupt.  The parameter passed to the callback is a copy of the
  * interrupt flag register.
  */
  void spiNotification(spiBASE_t *spi, uint32 flags);
  
  /** @fn void spiEndNotification(spiBASE_t *spi)
  *   @brief Interrupt callback for End of TX or RX data length.
  *   @param[in] spi   - Spi module base address
  *
  * This is a callback that is provided by the application and is called upon
  * an interrupt at the End of TX or RX data length.
  */
  void spiEndNotification(spiBASE_t *spi);
  
  /**@}*/
  /* USER CODE BEGIN (1) */
  /* USER CODE END */
  
  #ifdef __cplusplus
  }
  #endif /*extern "C" */
  
  #endif
  