mirror of
https://github.com/openmv/openmv.git
synced 2025-11-04 14:49:50 +08:00
404 lines
12 KiB
C
404 lines
12 KiB
C
/**
|
|
*
|
|
* \file
|
|
*
|
|
* \brief WINC Peripherals Application Interface.
|
|
*
|
|
* Copyright (c) 2016-2018 Microchip Technology Inc. and its subsidiaries.
|
|
*
|
|
* \asf_license_start
|
|
*
|
|
* \page License
|
|
*
|
|
* 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.
|
|
*
|
|
* \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 resistor 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_ */ |