|
- /**
- *
- * \file
- *
- * \brief WINC Peripherals Application Interface.
- *
- * Copyright (c) 2015 Atmel Corporation. All rights reserved.
- *
- * \asf_license_start
- *
- * \page License
- *
- * 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 Atmel may not be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
- * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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.
- *
- * \asf_license_stop
- *
- */
-
- #ifndef _M2M_PERIPH_H_
- #define _M2M_PERIPH_H_
-
- /*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*
- INCLUDES
- *=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*/
-
- #include "common/include/nm_common.h"
- #include "driver/include/m2m_types.h"
-
- /*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*
- MACROS
- *=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*/
-
- /*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*
- DATA TYPES
- *=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*/
-
- /*!
- @struct \
- tstrPerphInitParam
-
- @brief
- Peripheral module initialization parameters.
- */
- typedef struct {
- void *arg;
- } tstrPerphInitParam;
-
- /*!
- @enum \
- tenuGpioNum
-
- @brief
- A list of GPIO numbers configurable through the m2m_periph module.
- */
- typedef enum {
- M2M_PERIPH_GPIO3, /*!< GPIO15 pad */
- M2M_PERIPH_GPIO4, /*!< GPIO16 pad */
- M2M_PERIPH_GPIO5, /*!< GPIO18 pad */
- M2M_PERIPH_GPIO6, /*!< GPIO18 pad */
- M2M_PERIPH_GPIO15, /*!< GPIO15 pad */
- M2M_PERIPH_GPIO16, /*!< GPIO16 pad */
- M2M_PERIPH_GPIO18, /*!< GPIO18 pad */
- M2M_PERIPH_GPIO_MAX
- } tenuGpioNum;
-
- /*!
- @enum \
- tenuI2cMasterSclMuxOpt
-
- @brief
- Allowed pin multiplexing options for I2C master SCL signal.
- */
- typedef enum {
- M2M_PERIPH_I2C_MASTER_SCL_MUX_OPT_HOST_WAKEUP, /*!< I2C master SCL is avaiable on HOST_WAKEUP. */
- M2M_PERIPH_I2C_MASTER_SCL_MUX_OPT_SD_DAT3, /*!< I2C master SCL is avaiable on SD_DAT3 (GPIO 7). */
- M2M_PERIPH_I2C_MASTER_SCL_MUX_OPT_GPIO13, /*!< I2C master SCL is avaiable on GPIO 13. */
- M2M_PERIPH_I2C_MASTER_SCL_MUX_OPT_GPIO4, /*!< I2C master SCL is avaiable on GPIO 4.*/
- M2M_PERIPH_I2C_MASTER_SCL_MUX_OPT_I2C_SCL, /*!< I2C master SCL is avaiable on I2C slave SCL. */
- M2M_PERIPH_I2C_MASTER_SCL_MUX_OPT_NUM
- } tenuI2cMasterSclMuxOpt;
-
- /*!
- @enum \
- tenuI2cMasterSdaMuxOpt
-
- @brief
- Allowed pin multiplexing options for I2C master SDA signal.
- */
- typedef enum {
- M2M_PERIPH_I2C_MASTER_SDA_MUX_OPT_RTC_CLK, /*!< I2C master SDA is avaiable on RTC_CLK. */
- M2M_PERIPH_I2C_MASTER_SDA_MUX_OPT_SD_CLK, /*!< I2C master SDA is avaiable on SD_CLK (GPIO 8). */
- M2M_PERIPH_I2C_MASTER_SDA_MUX_OPT_GPIO14, /*!< I2C master SDA is avaiable on GPIO 14. */
- M2M_PERIPH_I2C_MASTER_SDA_MUX_OPT_GPIO6, /*!< I2C master SDA is avaiable on GPIO 6.*/
- M2M_PERIPH_I2C_MASTER_SDA_MUX_OPT_I2C_SDA, /*!< I2C master SDA is avaiable on I2C slave SDA. */
- M2M_PERIPH_I2C_MASTER_SDA_MUX_OPT_NUM
- } tenuI2cMasterSdaMuxOpt;
-
- /*!
- @struct \
- tstrI2cMasterInitParam
-
- @brief
- I2C master configuration parameters.
- @sa
- tenuI2cMasterSclMuxOpt
- tenuI2cMasterSdaMuxOpt
- */
- typedef struct {
- uint8 enuSclMuxOpt; /*!< SCL multiplexing option. Allowed value are defined in tenuI2cMasterSclMuxOpt */
- uint8 enuSdaMuxOpt; /*!< SDA multiplexing option. Allowed value are defined in tenuI2cMasterSdaMuxOpt */
- uint8 u8ClkSpeedKHz; /*!< I2C master clock speed in KHz. */
- } tstrI2cMasterInitParam;
-
- /*!
- @enum \
- tenuI2cMasterFlags
-
- @brief
- Bitwise-ORed flags for use in m2m_periph_i2c_master_write and m2m_periph_i2c_master_read
- @sa
- m2m_periph_i2c_master_write
- m2m_periph_i2c_master_read
- */
- typedef enum {
- I2C_MASTER_NO_FLAGS = 0x00,
- /*!< No flags. */
- I2C_MASTER_NO_STOP = 0x01,
- /*!< No stop bit after this transaction. Useful for scattered buffer read/write operations. */
- I2C_MASTER_NO_START = 0x02,
- /*!< No start bit at the beginning of this transaction. Useful for scattered buffer read/write operations.*/
- } tenuI2cMasterFlags;
-
- /*!
- @enum \
- tenuPullupMask
-
- @brief
- Bitwise-ORed flags for use in m2m_perph_pullup_ctrl.
- @sa
- m2m_periph_pullup_ctrl
-
- */
- typedef enum {
- M2M_PERIPH_PULLUP_DIS_HOST_WAKEUP = (1ul << 0),
- M2M_PERIPH_PULLUP_DIS_RTC_CLK = (1ul << 1),
- M2M_PERIPH_PULLUP_DIS_IRQN = (1ul << 2),
- M2M_PERIPH_PULLUP_DIS_GPIO_3 = (1ul << 3),
- M2M_PERIPH_PULLUP_DIS_GPIO_4 = (1ul << 4),
- M2M_PERIPH_PULLUP_DIS_GPIO_5 = (1ul << 5),
- M2M_PERIPH_PULLUP_DIS_SD_DAT3 = (1ul << 6),
- M2M_PERIPH_PULLUP_DIS_SD_DAT2_SPI_RXD = (1ul << 7),
- M2M_PERIPH_PULLUP_DIS_SD_DAT1_SPI_SSN = (1ul << 9),
- M2M_PERIPH_PULLUP_DIS_SD_CMD_SPI_SCK = (1ul << 10),
- M2M_PERIPH_PULLUP_DIS_SD_DAT0_SPI_TXD = (1ul << 11),
- M2M_PERIPH_PULLUP_DIS_GPIO_6 = (1ul << 12),
- M2M_PERIPH_PULLUP_DIS_SD_CLK = (1ul << 13),
- M2M_PERIPH_PULLUP_DIS_I2C_SCL = (1ul << 14),
- M2M_PERIPH_PULLUP_DIS_I2C_SDA = (1ul << 15),
- M2M_PERIPH_PULLUP_DIS_GPIO_11 = (1ul << 16),
- M2M_PERIPH_PULLUP_DIS_GPIO_12 = (1ul << 17),
- M2M_PERIPH_PULLUP_DIS_GPIO_13 = (1ul << 18),
- M2M_PERIPH_PULLUP_DIS_GPIO_14 = (1ul << 19),
- M2M_PERIPH_PULLUP_DIS_GPIO_15 = (1ul << 20),
- M2M_PERIPH_PULLUP_DIS_GPIO_16 = (1ul << 21),
- M2M_PERIPH_PULLUP_DIS_GPIO_17 = (1ul << 22),
- M2M_PERIPH_PULLUP_DIS_GPIO_18 = (1ul << 23),
- M2M_PERIPH_PULLUP_DIS_GPIO_19 = (1ul << 24),
- M2M_PERIPH_PULLUP_DIS_GPIO_20 = (1ul << 25),
- M2M_PERIPH_PULLUP_DIS_GPIO_21 = (1ul << 26),
- M2M_PERIPH_PULLUP_DIS_GPIO_22 = (1ul << 27),
- M2M_PERIPH_PULLUP_DIS_GPIO_23 = (1ul << 28),
- M2M_PERIPH_PULLUP_DIS_GPIO_24 = (1ul << 29),
- } tenuPullupMask;
-
- /*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*
- FUNCTION PROTOTYPES
- *=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*/
-
- #ifdef __cplusplus
- extern "C" {
- #endif
-
- /*!
- @fn \
- NMI_API sint8 m2m_periph_init(tstrPerphInitParam * param);
-
- @brief
- Initialize the NMC1500 peripheral driver module.
-
- @param [in] param
- Peripheral module initialization structure. See members of tstrPerphInitParam.
-
- @return
- The function SHALL return 0 for success and a negative value otherwise.
-
- @sa
- tstrPerphInitParam
- */
- NMI_API sint8 m2m_periph_init(tstrPerphInitParam *param);
-
- /*!
- @fn \
- NMI_API sint8 m2m_periph_gpio_set_dir(uint8 u8GpioNum, uint8 u8GpioDir);
-
- @brief
- Configure a specific NMC1500 pad as a GPIO and sets its direction (input or output).
-
- @param [in] u8GpioNum
- GPIO number. Allowed values are defined in tenuGpioNum.
-
- @param [in] u8GpioDir
- GPIO direction: Zero = input. Non-zero = output.
-
- @return
- The function SHALL return 0 for success and a negative value otherwise.
-
- @sa
- tenuGpioNum
- */
- NMI_API sint8 m2m_periph_gpio_set_dir(uint8 u8GpioNum, uint8 u8GpioDir);
-
- /*!
- @fn \
- NMI_API sint8 m2m_periph_gpio_set_val(uint8 u8GpioNum, uint8 u8GpioVal);
-
- @brief
- Set an NMC1500 GPIO output level high or low.
-
- @param [in] u8GpioNum
- GPIO number. Allowed values are defined in tenuGpioNum.
-
- @param [in] u8GpioVal
- GPIO output value. Zero = low, non-zero = high.
-
- @return
- The function SHALL return 0 for success and a negative value otherwise.
-
- @sa
- tenuGpioNum
- */
- NMI_API sint8 m2m_periph_gpio_set_val(uint8 u8GpioNum, uint8 u8GpioVal);
-
- /*!
- @fn \
- NMI_API sint8 m2m_periph_gpio_get_val(uint8 u8GpioNum, uint8 * pu8GpioVal);
-
- @brief
- Read an NMC1500 GPIO input level.
-
- @param [in] u8GpioNum
- GPIO number. Allowed values are defined in tenuGpioNum.
-
- @param [out] pu8GpioVal
- GPIO input value. Zero = low, non-zero = high.
-
- @return
- The function SHALL return 0 for success and a negative value otherwise.
-
- @sa
- tenuGpioNum
- */
- NMI_API sint8 m2m_periph_gpio_get_val(uint8 u8GpioNum, uint8 *pu8GpioVal);
-
- /*!
- @fn \
- NMI_API sint8 m2m_periph_gpio_pullup_ctrl(uint8 u8GpioNum, uint8 u8PullupEn);
-
- @brief
- Set an NMC1500 GPIO pullup resisitor enable or disable.
-
- @param [in] u8GpioNum
- GPIO number. Allowed values are defined in tenuGpioNum.
-
- @param [in] u8PullupEn
- Zero: pullup disabled. Non-zero: pullup enabled.
-
- @return
- The function SHALL return 0 for success and a negative value otherwise.
-
- @sa
- tenuGpioNum
- */
- NMI_API sint8 m2m_periph_gpio_pullup_ctrl(uint8 u8GpioNum, uint8 u8PullupEn);
-
- /*!
- @fn \
- NMI_API sint8 m2m_periph_i2c_master_init(tstrI2cMasterInitParam * param);
-
- @brief
- Initialize and configure the NMC1500 I2C master peripheral.
-
- @param [in] param
- I2C master initialization structure. See members of tstrI2cMasterInitParam.
-
- @return
- The function SHALL return 0 for success and a negative value otherwise.
-
- @sa
- tstrI2cMasterInitParam
- */
- NMI_API sint8 m2m_periph_i2c_master_init(tstrI2cMasterInitParam *param);
-
- /*!
- @fn \
- NMI_API sint8 m2m_periph_i2c_master_write(uint8 u8SlaveAddr, uint8 * pu8Buf, uint16 u16BufLen, uint8 flags);
-
- @brief
- Write a stream of bytes to the I2C slave device.
-
- @param [in] u8SlaveAddr
- 7-bit I2C slave address.
- @param [in] pu8Buf
- A pointer to an input buffer which contains a stream of bytes.
- @param [in] u16BufLen
- Input buffer length in bytes.
- @param [in] flags
- Write operation bitwise-ORed flags. See tenuI2cMasterFlags.
-
- @return
- The function SHALL return 0 for success and a negative value otherwise.
-
- @sa
- tenuI2cMasterFlags
- */
- NMI_API sint8 m2m_periph_i2c_master_write(uint8 u8SlaveAddr, uint8 *pu8Buf, uint16 u16BufLen, uint8 flags);
-
- /*!
- @fn \
- NMI_API sint8 m2m_periph_i2c_master_read(uint8 u8SlaveAddr, uint8 * pu8Buf, uint16 u16BufLen, uint16 * pu16ReadLen,
- uint8 flags);
-
- @brief
- Write a stream of bytes to the I2C slave device.
-
- @param [in] u8SlaveAddr
- 7-bit I2C slave address.
- @param [out] pu8Buf
- A pointer to an output buffer in which a stream of bytes are received.
- @param [in] u16BufLen
- Max output buffer length in bytes.
- @param [out] pu16ReadLen
- Actual number of bytes received.
- @param [in] flags
- Write operation bitwise-ORed flags. See tenuI2cMasterFlags.
-
- @return
- The function SHALL return 0 for success and a negative value otherwise.
-
- @sa
- tenuI2cMasterFlags
- */
- NMI_API sint8 m2m_periph_i2c_master_read(uint8 u8SlaveAddr, uint8 *pu8Buf, uint16 u16BufLen, uint16 *pu16ReadLen,
- uint8 flags);
-
- /*!
- @fn \
- NMI_API sint8 m2m_periph_pullup_ctrl(uint32 pinmask, uint8 enable);
-
- @brief
- Control the programmable pull-up resistor on the chip pads .
-
- @param [in] pinmask
- Write operation bitwise-ORed mask for which pads to control. Allowed values are defined in
- tenuPullupMask.
-
- @param [in] enable
- Set to 0 to disable pull-up resistor. Non-zero will enable the pull-up.
-
- @return
- The function SHALL return 0 for success and a negative value otherwise.
-
- @sa
- tenuPullupMask
- */
- NMI_API sint8 m2m_periph_pullup_ctrl(uint32 pinmask, uint8 enable);
-
- #ifdef __cplusplus
- }
- #endif
-
- #endif /* _M2M_PERIPH_H_ */
|