mbed library sources. Supersedes mbed-src.

Dependents:   Nucleo_Hello_Encoder BLE_iBeaconScan AM1805_DEMO DISCO-F429ZI_ExportTemplate1 ... more

Committer:
AnnaBridge
Date:
Mon Oct 02 15:33:19 2017 +0100
Revision:
174:b96e65c34a4d
This updates the lib to the mbed lib v 152

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AnnaBridge 174:b96e65c34a4d 1 /****************************************************************************//**
AnnaBridge 174:b96e65c34a4d 2 * @file i2c.h
AnnaBridge 174:b96e65c34a4d 3 * @version V1.00
AnnaBridge 174:b96e65c34a4d 4 * $Revision: 5 $
AnnaBridge 174:b96e65c34a4d 5 * $Date: 15/06/05 5:06p $
AnnaBridge 174:b96e65c34a4d 6 * @brief Nano100 series I2C driver header file
AnnaBridge 174:b96e65c34a4d 7 *
AnnaBridge 174:b96e65c34a4d 8 * @note
AnnaBridge 174:b96e65c34a4d 9 * Copyright (C) 2014 Nuvoton Technology Corp. All rights reserved.
AnnaBridge 174:b96e65c34a4d 10 *****************************************************************************/
AnnaBridge 174:b96e65c34a4d 11 #ifndef __I2C_H__
AnnaBridge 174:b96e65c34a4d 12 #define __I2C_H__
AnnaBridge 174:b96e65c34a4d 13
AnnaBridge 174:b96e65c34a4d 14 #ifdef __cplusplus
AnnaBridge 174:b96e65c34a4d 15 extern "C"
AnnaBridge 174:b96e65c34a4d 16 {
AnnaBridge 174:b96e65c34a4d 17 #endif
AnnaBridge 174:b96e65c34a4d 18
AnnaBridge 174:b96e65c34a4d 19
AnnaBridge 174:b96e65c34a4d 20 /** @addtogroup NANO100_Device_Driver NANO100 Device Driver
AnnaBridge 174:b96e65c34a4d 21 @{
AnnaBridge 174:b96e65c34a4d 22 */
AnnaBridge 174:b96e65c34a4d 23
AnnaBridge 174:b96e65c34a4d 24 /** @addtogroup NANO100_I2C_Driver I2C Driver
AnnaBridge 174:b96e65c34a4d 25 @{
AnnaBridge 174:b96e65c34a4d 26 */
AnnaBridge 174:b96e65c34a4d 27
AnnaBridge 174:b96e65c34a4d 28 /** @addtogroup NANO100_I2C_EXPORTED_CONSTANTS I2C Exported Constants
AnnaBridge 174:b96e65c34a4d 29 @{
AnnaBridge 174:b96e65c34a4d 30 */
AnnaBridge 174:b96e65c34a4d 31
AnnaBridge 174:b96e65c34a4d 32 #define I2C_STA 0x08 /*!< I2C START bit value */
AnnaBridge 174:b96e65c34a4d 33 #define I2C_STO 0x04 /*!< I2C STOP bit value*/
AnnaBridge 174:b96e65c34a4d 34 #define I2C_SI 0x10 /*!< I2C SI bit value */
AnnaBridge 174:b96e65c34a4d 35 #define I2C_AA 0x02 /*!< I2C ACK bit value */
AnnaBridge 174:b96e65c34a4d 36
AnnaBridge 174:b96e65c34a4d 37 #define I2C_GCMODE_ENABLE 1 /*!< Enable I2C GC Mode */
AnnaBridge 174:b96e65c34a4d 38 #define I2C_GCMODE_DISABLE 0 /*!< Disable I2C GC Mode */
AnnaBridge 174:b96e65c34a4d 39
AnnaBridge 174:b96e65c34a4d 40 /*@}*/ /* end of group NANO100_I2C_EXPORTED_CONSTANTS */
AnnaBridge 174:b96e65c34a4d 41
AnnaBridge 174:b96e65c34a4d 42
AnnaBridge 174:b96e65c34a4d 43 /** @addtogroup NANO100_I2C_EXPORTED_FUNCTIONS I2C Exported Functions
AnnaBridge 174:b96e65c34a4d 44 @{
AnnaBridge 174:b96e65c34a4d 45 */
AnnaBridge 174:b96e65c34a4d 46
AnnaBridge 174:b96e65c34a4d 47 /**
AnnaBridge 174:b96e65c34a4d 48 * @brief This macro sets the I2C control register at one time.
AnnaBridge 174:b96e65c34a4d 49 * @param[in] i2c is the base address of I2C module.
AnnaBridge 174:b96e65c34a4d 50 * @param[in] u8Ctrl is the register value of I2C control register.
AnnaBridge 174:b96e65c34a4d 51 * @return none
AnnaBridge 174:b96e65c34a4d 52 * \hideinitializer
AnnaBridge 174:b96e65c34a4d 53 */
AnnaBridge 174:b96e65c34a4d 54 #define I2C_SET_CONTROL_REG(i2c, u8Ctrl) ( (i2c)->CON = ((i2c)->CON & ~0x1e) | u8Ctrl )
AnnaBridge 174:b96e65c34a4d 55
AnnaBridge 174:b96e65c34a4d 56 /**
AnnaBridge 174:b96e65c34a4d 57 * @brief This macro only set START bit to the control register of I2C module.
AnnaBridge 174:b96e65c34a4d 58 * @param[in] i2c is the base address of I2C module.
AnnaBridge 174:b96e65c34a4d 59 * @return none
AnnaBridge 174:b96e65c34a4d 60 * \hideinitializer
AnnaBridge 174:b96e65c34a4d 61 */
AnnaBridge 174:b96e65c34a4d 62 #define I2C_START(i2c) ( (i2c)->CON = ((i2c)->CON & ~I2C_CON_I2C_STS_Msk) | I2C_CON_START_Msk )
AnnaBridge 174:b96e65c34a4d 63
AnnaBridge 174:b96e65c34a4d 64 /**
AnnaBridge 174:b96e65c34a4d 65 * @brief This macro only set STOP bit to the control register of I2C module.
AnnaBridge 174:b96e65c34a4d 66 * @param[in] i2c is the base address of I2C module.
AnnaBridge 174:b96e65c34a4d 67 * @return none
AnnaBridge 174:b96e65c34a4d 68 * \hideinitializer
AnnaBridge 174:b96e65c34a4d 69 */
AnnaBridge 174:b96e65c34a4d 70 static __INLINE void I2C_STOP(I2C_T *i2c)
AnnaBridge 174:b96e65c34a4d 71 {
AnnaBridge 174:b96e65c34a4d 72 i2c->CON |= (I2C_CON_I2C_STS_Msk | I2C_CON_STOP_Msk);
AnnaBridge 174:b96e65c34a4d 73 while(i2c->CON & I2C_CON_STOP_Msk);
AnnaBridge 174:b96e65c34a4d 74 }
AnnaBridge 174:b96e65c34a4d 75
AnnaBridge 174:b96e65c34a4d 76 /**
AnnaBridge 174:b96e65c34a4d 77 * @brief This macro will return when I2C module is ready.
AnnaBridge 174:b96e65c34a4d 78 * @param[in] i2c is the base address of I2C module.
AnnaBridge 174:b96e65c34a4d 79 * @return none
AnnaBridge 174:b96e65c34a4d 80 * \hideinitializer
AnnaBridge 174:b96e65c34a4d 81 */
AnnaBridge 174:b96e65c34a4d 82 static __INLINE void I2C_WAIT_READY(I2C_T *i2c)
AnnaBridge 174:b96e65c34a4d 83 {
AnnaBridge 174:b96e65c34a4d 84 while(!(i2c->INTSTS & I2C_INTSTS_INTSTS_Msk));
AnnaBridge 174:b96e65c34a4d 85 i2c->INTSTS |= I2C_INTSTS_INTSTS_Msk;
AnnaBridge 174:b96e65c34a4d 86 }
AnnaBridge 174:b96e65c34a4d 87
AnnaBridge 174:b96e65c34a4d 88 /**
AnnaBridge 174:b96e65c34a4d 89 * @brief This macro returns the data stored in data register of I2C module.
AnnaBridge 174:b96e65c34a4d 90 * @param[in] i2c is the base address of I2C module.
AnnaBridge 174:b96e65c34a4d 91 * @return Data.
AnnaBridge 174:b96e65c34a4d 92 * \hideinitializer
AnnaBridge 174:b96e65c34a4d 93 */
AnnaBridge 174:b96e65c34a4d 94 #define I2C_GET_DATA(i2c) ( (i2c)->DATA )
AnnaBridge 174:b96e65c34a4d 95
AnnaBridge 174:b96e65c34a4d 96 /**
AnnaBridge 174:b96e65c34a4d 97 * @brief This macro writes the data to data register of I2C module.
AnnaBridge 174:b96e65c34a4d 98 * @param[in] i2c is the base address of I2C module.
AnnaBridge 174:b96e65c34a4d 99 * @param[in] u8Data is the data which will be write to data register of I2C module.
AnnaBridge 174:b96e65c34a4d 100 * @return none
AnnaBridge 174:b96e65c34a4d 101 * \hideinitializer
AnnaBridge 174:b96e65c34a4d 102 */
AnnaBridge 174:b96e65c34a4d 103 #define I2C_SET_DATA(i2c, u8Data) ( (i2c)->DATA = u8Data )
AnnaBridge 174:b96e65c34a4d 104
AnnaBridge 174:b96e65c34a4d 105 /**
AnnaBridge 174:b96e65c34a4d 106 * @brief This macro returns the status of I2C module.
AnnaBridge 174:b96e65c34a4d 107 * @param[in] i2c is the base address of I2C module.
AnnaBridge 174:b96e65c34a4d 108 * @return Status.
AnnaBridge 174:b96e65c34a4d 109 * \hideinitializer
AnnaBridge 174:b96e65c34a4d 110 */
AnnaBridge 174:b96e65c34a4d 111 #define I2C_GET_STATUS(i2c) ( (i2c)->STATUS )
AnnaBridge 174:b96e65c34a4d 112
AnnaBridge 174:b96e65c34a4d 113 /**
AnnaBridge 174:b96e65c34a4d 114 * @brief This macro returns timeout flag.
AnnaBridge 174:b96e65c34a4d 115 * @param[in] i2c is the base address of I2C module.
AnnaBridge 174:b96e65c34a4d 116 * @return Status.
AnnaBridge 174:b96e65c34a4d 117 * @retval 0 Flag is not set.
AnnaBridge 174:b96e65c34a4d 118 * @retval 1 Flag is set.
AnnaBridge 174:b96e65c34a4d 119 * \hideinitializer
AnnaBridge 174:b96e65c34a4d 120 */
AnnaBridge 174:b96e65c34a4d 121 #define I2C_GET_TIMEOUT_FLAG(i2c) ( ((i2c)->INTSTS & I2C_INTSTS_TIF_Msk) == I2C_INTSTS_TIF_Msk ? 1:0 )
AnnaBridge 174:b96e65c34a4d 122
AnnaBridge 174:b96e65c34a4d 123 /**
AnnaBridge 174:b96e65c34a4d 124 * @brief This macro clears timeout flag.
AnnaBridge 174:b96e65c34a4d 125 * @param[in] i2c is the base address of I2C module.
AnnaBridge 174:b96e65c34a4d 126 * @return none
AnnaBridge 174:b96e65c34a4d 127 * \hideinitializer
AnnaBridge 174:b96e65c34a4d 128 */
AnnaBridge 174:b96e65c34a4d 129 #define I2C_CLEAR_TIMEOUT_FLAG(i2c) ( (i2c)->INTSTS |= I2C_INTSTS_TIF_Msk )
AnnaBridge 174:b96e65c34a4d 130
AnnaBridge 174:b96e65c34a4d 131 /**
AnnaBridge 174:b96e65c34a4d 132 * @brief This macro returns wakeup flag.
AnnaBridge 174:b96e65c34a4d 133 * @param[in] i2c is the base address of I2C module.
AnnaBridge 174:b96e65c34a4d 134 * @return Status.
AnnaBridge 174:b96e65c34a4d 135 * @retval 0 Flag is not set.
AnnaBridge 174:b96e65c34a4d 136 * @retval 1 Flag is set.
AnnaBridge 174:b96e65c34a4d 137 * \hideinitializer
AnnaBridge 174:b96e65c34a4d 138 */
AnnaBridge 174:b96e65c34a4d 139 #define I2C_GET_WAKEUP_FLAG(i2c) ( ((i2c)->WKUPSTS & I2C_WKUPSTS_WKUPIF_Msk) == I2C_WKUPSTS_WKUPIF_Msk ? 1:0 )
AnnaBridge 174:b96e65c34a4d 140
AnnaBridge 174:b96e65c34a4d 141 /**
AnnaBridge 174:b96e65c34a4d 142 * @brief This macro clears wakeup flag.
AnnaBridge 174:b96e65c34a4d 143 * @param[in] i2c is the base address of I2C module.
AnnaBridge 174:b96e65c34a4d 144 * @return none
AnnaBridge 174:b96e65c34a4d 145 * \hideinitializer
AnnaBridge 174:b96e65c34a4d 146 */
AnnaBridge 174:b96e65c34a4d 147 #define I2C_CLEAR_WAKEUP_FLAG(i2c) ( (i2c)->WKUPSTS |= I2C_WKUPSTS_WKUPIF_Msk )
AnnaBridge 174:b96e65c34a4d 148
AnnaBridge 174:b96e65c34a4d 149 uint32_t I2C_Open(I2C_T *i2c, uint32_t u32BusClock);
AnnaBridge 174:b96e65c34a4d 150 void I2C_Close(I2C_T *i2c);
AnnaBridge 174:b96e65c34a4d 151 void I2C_ClearTimeoutFlag(I2C_T *i2c);
AnnaBridge 174:b96e65c34a4d 152 void I2C_Trigger(I2C_T *i2c, uint8_t u8Start, uint8_t u8Stop, uint8_t u8Si, uint8_t u8Ack);
AnnaBridge 174:b96e65c34a4d 153 void I2C_DisableInt(I2C_T *i2c);
AnnaBridge 174:b96e65c34a4d 154 void I2C_EnableInt(I2C_T *i2c);
AnnaBridge 174:b96e65c34a4d 155 uint32_t I2C_GetBusClockFreq(I2C_T *i2c);
AnnaBridge 174:b96e65c34a4d 156 uint32_t I2C_SetBusClockFreq(I2C_T *i2c, uint32_t u32BusClock);
AnnaBridge 174:b96e65c34a4d 157 uint32_t I2C_GetIntFlag(I2C_T *i2c);
AnnaBridge 174:b96e65c34a4d 158 void I2C_ClearIntFlag(I2C_T *i2c);
AnnaBridge 174:b96e65c34a4d 159 uint32_t I2C_GetStatus(I2C_T *i2c);
AnnaBridge 174:b96e65c34a4d 160 uint32_t I2C_GetData(I2C_T *i2c);
AnnaBridge 174:b96e65c34a4d 161 void I2C_SetData(I2C_T *i2c, uint8_t u8Data);
AnnaBridge 174:b96e65c34a4d 162 void I2C_SetSlaveAddr(I2C_T *i2c, uint8_t u8SlaveNo, uint8_t u8SlaveAddr, uint8_t u8GCMode);
AnnaBridge 174:b96e65c34a4d 163 void I2C_SetSlaveAddrMask(I2C_T *i2c, uint8_t u8SlaveNo, uint8_t u8SlaveAddrMask);
AnnaBridge 174:b96e65c34a4d 164 void I2C_EnableTimeout(I2C_T *i2c, uint8_t u8LongTimeout);
AnnaBridge 174:b96e65c34a4d 165 void I2C_DisableTimeout(I2C_T *i2c);
AnnaBridge 174:b96e65c34a4d 166 void I2C_EnableWakeup(I2C_T *i2c);
AnnaBridge 174:b96e65c34a4d 167 void I2C_DisableWakeup(I2C_T *i2c);
AnnaBridge 174:b96e65c34a4d 168
AnnaBridge 174:b96e65c34a4d 169 /*@}*/ /* end of group NANO100_I2C_EXPORTED_FUNCTIONS */
AnnaBridge 174:b96e65c34a4d 170
AnnaBridge 174:b96e65c34a4d 171 /*@}*/ /* end of group NANO100_I2C_Driver */
AnnaBridge 174:b96e65c34a4d 172
AnnaBridge 174:b96e65c34a4d 173 /*@}*/ /* end of group NANO100_Device_Driver */
AnnaBridge 174:b96e65c34a4d 174
AnnaBridge 174:b96e65c34a4d 175 #ifdef __cplusplus
AnnaBridge 174:b96e65c34a4d 176 }
AnnaBridge 174:b96e65c34a4d 177 #endif
AnnaBridge 174:b96e65c34a4d 178
AnnaBridge 174:b96e65c34a4d 179 #endif //__I2C_H__
AnnaBridge 174:b96e65c34a4d 180
AnnaBridge 174:b96e65c34a4d 181 /*** (C) COPYRIGHT 2014 Nuvoton Technology Corp. ***/