Date: March 20, 2011 This library is created from "LPC17xx CMSIS-Compliant Standard Peripheral Firmware Driver Library (GNU, Keil, IAR) (Jan 28, 2011)", available from NXP's website, under "All microcontrollers support documents" [[http://ics.nxp.com/support/documents/microcontrollers/?type=software]] You will need to follow [[/projects/libraries/svn/mbed/trunk/LPC1768/LPC17xx.h]] while using this library Examples provided here [[/users/frank26080115/programs/LPC1700CMSIS_Examples/]] The beautiful thing is that NXP does not place copyright protection on any of the files in here Only a few modifications are made to make it compile with the mbed online compiler, I fixed some warnings as well. This is untested as of March 20, 2011 Forum post about this library: [[/forum/mbed/topic/2030/]]

Committer:
frank26080115
Date:
Sun Mar 20 18:45:15 2011 +0000
Revision:
0:84d7747641aa

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
frank26080115 0:84d7747641aa 1 /***********************************************************************//**
frank26080115 0:84d7747641aa 2 * @file lpc17xx_i2c.h
frank26080115 0:84d7747641aa 3 * @brief Contains all macro definitions and function prototypes
frank26080115 0:84d7747641aa 4 * support for I2C firmware library on LPC17xx
frank26080115 0:84d7747641aa 5 * @version 2.0
frank26080115 0:84d7747641aa 6 * @date 21. May. 2010
frank26080115 0:84d7747641aa 7 * @author NXP MCU SW Application Team
frank26080115 0:84d7747641aa 8 **************************************************************************
frank26080115 0:84d7747641aa 9 * Software that is described herein is for illustrative purposes only
frank26080115 0:84d7747641aa 10 * which provides customers with programming information regarding the
frank26080115 0:84d7747641aa 11 * products. This software is supplied "AS IS" without any warranties.
frank26080115 0:84d7747641aa 12 * NXP Semiconductors assumes no responsibility or liability for the
frank26080115 0:84d7747641aa 13 * use of the software, conveys no license or title under any patent,
frank26080115 0:84d7747641aa 14 * copyright, or mask work right to the product. NXP Semiconductors
frank26080115 0:84d7747641aa 15 * reserves the right to make changes in the software without
frank26080115 0:84d7747641aa 16 * notification. NXP Semiconductors also make no representation or
frank26080115 0:84d7747641aa 17 * warranty that such application will be suitable for the specified
frank26080115 0:84d7747641aa 18 * use without further testing or modification.
frank26080115 0:84d7747641aa 19 **************************************************************************/
frank26080115 0:84d7747641aa 20
frank26080115 0:84d7747641aa 21 /* Peripheral group ----------------------------------------------------------- */
frank26080115 0:84d7747641aa 22 /** @defgroup I2C I2C
frank26080115 0:84d7747641aa 23 * @ingroup LPC1700CMSIS_FwLib_Drivers
frank26080115 0:84d7747641aa 24 * @{
frank26080115 0:84d7747641aa 25 */
frank26080115 0:84d7747641aa 26
frank26080115 0:84d7747641aa 27 #ifndef LPC17XX_I2C_H_
frank26080115 0:84d7747641aa 28 #define LPC17XX_I2C_H_
frank26080115 0:84d7747641aa 29
frank26080115 0:84d7747641aa 30 /* Includes ------------------------------------------------------------------- */
frank26080115 0:84d7747641aa 31 #include "LPC17xx.h"
frank26080115 0:84d7747641aa 32 #include "lpc_types.h"
frank26080115 0:84d7747641aa 33
frank26080115 0:84d7747641aa 34
frank26080115 0:84d7747641aa 35 #ifdef __cplusplus
frank26080115 0:84d7747641aa 36 extern "C"
frank26080115 0:84d7747641aa 37 {
frank26080115 0:84d7747641aa 38 #endif
frank26080115 0:84d7747641aa 39
frank26080115 0:84d7747641aa 40
frank26080115 0:84d7747641aa 41 /* Private Macros ------------------------------------------------------------- */
frank26080115 0:84d7747641aa 42 /** @defgroup I2C_Private_Macros I2C Private Macros
frank26080115 0:84d7747641aa 43 * @{
frank26080115 0:84d7747641aa 44 */
frank26080115 0:84d7747641aa 45
frank26080115 0:84d7747641aa 46 /* --------------------- BIT DEFINITIONS -------------------------------------- */
frank26080115 0:84d7747641aa 47 /*******************************************************************//**
frank26080115 0:84d7747641aa 48 * I2C Control Set register description
frank26080115 0:84d7747641aa 49 *********************************************************************/
frank26080115 0:84d7747641aa 50 #define I2C_I2CONSET_AA ((0x04)) /*!< Assert acknowledge flag */
frank26080115 0:84d7747641aa 51 #define I2C_I2CONSET_SI ((0x08)) /*!< I2C interrupt flag */
frank26080115 0:84d7747641aa 52 #define I2C_I2CONSET_STO ((0x10)) /*!< STOP flag */
frank26080115 0:84d7747641aa 53 #define I2C_I2CONSET_STA ((0x20)) /*!< START flag */
frank26080115 0:84d7747641aa 54 #define I2C_I2CONSET_I2EN ((0x40)) /*!< I2C interface enable */
frank26080115 0:84d7747641aa 55
frank26080115 0:84d7747641aa 56 /*******************************************************************//**
frank26080115 0:84d7747641aa 57 * I2C Control Clear register description
frank26080115 0:84d7747641aa 58 *********************************************************************/
frank26080115 0:84d7747641aa 59 /** Assert acknowledge Clear bit */
frank26080115 0:84d7747641aa 60 #define I2C_I2CONCLR_AAC ((1<<2))
frank26080115 0:84d7747641aa 61 /** I2C interrupt Clear bit */
frank26080115 0:84d7747641aa 62 #define I2C_I2CONCLR_SIC ((1<<3))
frank26080115 0:84d7747641aa 63 /** START flag Clear bit */
frank26080115 0:84d7747641aa 64 #define I2C_I2CONCLR_STAC ((1<<5))
frank26080115 0:84d7747641aa 65 /** I2C interface Disable bit */
frank26080115 0:84d7747641aa 66 #define I2C_I2CONCLR_I2ENC ((1<<6))
frank26080115 0:84d7747641aa 67
frank26080115 0:84d7747641aa 68 /********************************************************************//**
frank26080115 0:84d7747641aa 69 * I2C Status Code definition (I2C Status register)
frank26080115 0:84d7747641aa 70 *********************************************************************/
frank26080115 0:84d7747641aa 71 /* Return Code in I2C status register */
frank26080115 0:84d7747641aa 72 #define I2C_STAT_CODE_BITMASK ((0xF8))
frank26080115 0:84d7747641aa 73
frank26080115 0:84d7747641aa 74 /* I2C return status code definitions ----------------------------- */
frank26080115 0:84d7747641aa 75
frank26080115 0:84d7747641aa 76 /** No relevant information */
frank26080115 0:84d7747641aa 77 #define I2C_I2STAT_NO_INF ((0xF8))
frank26080115 0:84d7747641aa 78
frank26080115 0:84d7747641aa 79 /* Master transmit mode -------------------------------------------- */
frank26080115 0:84d7747641aa 80 /** A start condition has been transmitted */
frank26080115 0:84d7747641aa 81 #define I2C_I2STAT_M_TX_START ((0x08))
frank26080115 0:84d7747641aa 82 /** A repeat start condition has been transmitted */
frank26080115 0:84d7747641aa 83 #define I2C_I2STAT_M_TX_RESTART ((0x10))
frank26080115 0:84d7747641aa 84 /** SLA+W has been transmitted, ACK has been received */
frank26080115 0:84d7747641aa 85 #define I2C_I2STAT_M_TX_SLAW_ACK ((0x18))
frank26080115 0:84d7747641aa 86 /** SLA+W has been transmitted, NACK has been received */
frank26080115 0:84d7747641aa 87 #define I2C_I2STAT_M_TX_SLAW_NACK ((0x20))
frank26080115 0:84d7747641aa 88 /** Data has been transmitted, ACK has been received */
frank26080115 0:84d7747641aa 89 #define I2C_I2STAT_M_TX_DAT_ACK ((0x28))
frank26080115 0:84d7747641aa 90 /** Data has been transmitted, NACK has been received */
frank26080115 0:84d7747641aa 91 #define I2C_I2STAT_M_TX_DAT_NACK ((0x30))
frank26080115 0:84d7747641aa 92 /** Arbitration lost in SLA+R/W or Data bytes */
frank26080115 0:84d7747641aa 93 #define I2C_I2STAT_M_TX_ARB_LOST ((0x38))
frank26080115 0:84d7747641aa 94
frank26080115 0:84d7747641aa 95 /* Master receive mode -------------------------------------------- */
frank26080115 0:84d7747641aa 96 /** A start condition has been transmitted */
frank26080115 0:84d7747641aa 97 #define I2C_I2STAT_M_RX_START ((0x08))
frank26080115 0:84d7747641aa 98 /** A repeat start condition has been transmitted */
frank26080115 0:84d7747641aa 99 #define I2C_I2STAT_M_RX_RESTART ((0x10))
frank26080115 0:84d7747641aa 100 /** Arbitration lost */
frank26080115 0:84d7747641aa 101 #define I2C_I2STAT_M_RX_ARB_LOST ((0x38))
frank26080115 0:84d7747641aa 102 /** SLA+R has been transmitted, ACK has been received */
frank26080115 0:84d7747641aa 103 #define I2C_I2STAT_M_RX_SLAR_ACK ((0x40))
frank26080115 0:84d7747641aa 104 /** SLA+R has been transmitted, NACK has been received */
frank26080115 0:84d7747641aa 105 #define I2C_I2STAT_M_RX_SLAR_NACK ((0x48))
frank26080115 0:84d7747641aa 106 /** Data has been received, ACK has been returned */
frank26080115 0:84d7747641aa 107 #define I2C_I2STAT_M_RX_DAT_ACK ((0x50))
frank26080115 0:84d7747641aa 108 /** Data has been received, NACK has been return */
frank26080115 0:84d7747641aa 109 #define I2C_I2STAT_M_RX_DAT_NACK ((0x58))
frank26080115 0:84d7747641aa 110
frank26080115 0:84d7747641aa 111 /* Slave receive mode -------------------------------------------- */
frank26080115 0:84d7747641aa 112 /** Own slave address has been received, ACK has been returned */
frank26080115 0:84d7747641aa 113 #define I2C_I2STAT_S_RX_SLAW_ACK ((0x60))
frank26080115 0:84d7747641aa 114
frank26080115 0:84d7747641aa 115 /** Arbitration lost in SLA+R/W as master */
frank26080115 0:84d7747641aa 116 #define I2C_I2STAT_S_RX_ARB_LOST_M_SLA ((0x68))
frank26080115 0:84d7747641aa 117 /** Own SLA+W has been received, ACK returned */
frank26080115 0:84d7747641aa 118 //#define I2C_I2STAT_S_RX_SLAW_ACK ((0x68))
frank26080115 0:84d7747641aa 119
frank26080115 0:84d7747641aa 120 /** General call address has been received, ACK has been returned */
frank26080115 0:84d7747641aa 121 #define I2C_I2STAT_S_RX_GENCALL_ACK ((0x70))
frank26080115 0:84d7747641aa 122
frank26080115 0:84d7747641aa 123 /** Arbitration lost in SLA+R/W (GENERAL CALL) as master */
frank26080115 0:84d7747641aa 124 #define I2C_I2STAT_S_RX_ARB_LOST_M_GENCALL ((0x78))
frank26080115 0:84d7747641aa 125 /** General call address has been received, ACK has been returned */
frank26080115 0:84d7747641aa 126 //#define I2C_I2STAT_S_RX_GENCALL_ACK ((0x78))
frank26080115 0:84d7747641aa 127
frank26080115 0:84d7747641aa 128 /** Previously addressed with own SLV address;
frank26080115 0:84d7747641aa 129 * Data has been received, ACK has been return */
frank26080115 0:84d7747641aa 130 #define I2C_I2STAT_S_RX_PRE_SLA_DAT_ACK ((0x80))
frank26080115 0:84d7747641aa 131 /** Previously addressed with own SLA;
frank26080115 0:84d7747641aa 132 * Data has been received and NOT ACK has been return */
frank26080115 0:84d7747641aa 133 #define I2C_I2STAT_S_RX_PRE_SLA_DAT_NACK ((0x88))
frank26080115 0:84d7747641aa 134 /** Previously addressed with General Call;
frank26080115 0:84d7747641aa 135 * Data has been received and ACK has been return */
frank26080115 0:84d7747641aa 136 #define I2C_I2STAT_S_RX_PRE_GENCALL_DAT_ACK ((0x90))
frank26080115 0:84d7747641aa 137 /** Previously addressed with General Call;
frank26080115 0:84d7747641aa 138 * Data has been received and NOT ACK has been return */
frank26080115 0:84d7747641aa 139 #define I2C_I2STAT_S_RX_PRE_GENCALL_DAT_NACK ((0x98))
frank26080115 0:84d7747641aa 140 /** A STOP condition or repeated START condition has
frank26080115 0:84d7747641aa 141 * been received while still addressed as SLV/REC
frank26080115 0:84d7747641aa 142 * (Slave Receive) or SLV/TRX (Slave Transmit) */
frank26080115 0:84d7747641aa 143 #define I2C_I2STAT_S_RX_STA_STO_SLVREC_SLVTRX ((0xA0))
frank26080115 0:84d7747641aa 144
frank26080115 0:84d7747641aa 145 /** Slave transmit mode */
frank26080115 0:84d7747641aa 146 /** Own SLA+R has been received, ACK has been returned */
frank26080115 0:84d7747641aa 147 #define I2C_I2STAT_S_TX_SLAR_ACK ((0xA8))
frank26080115 0:84d7747641aa 148
frank26080115 0:84d7747641aa 149 /** Arbitration lost in SLA+R/W as master */
frank26080115 0:84d7747641aa 150 #define I2C_I2STAT_S_TX_ARB_LOST_M_SLA ((0xB0))
frank26080115 0:84d7747641aa 151 /** Own SLA+R has been received, ACK has been returned */
frank26080115 0:84d7747641aa 152 //#define I2C_I2STAT_S_TX_SLAR_ACK ((0xB0))
frank26080115 0:84d7747641aa 153
frank26080115 0:84d7747641aa 154 /** Data has been transmitted, ACK has been received */
frank26080115 0:84d7747641aa 155 #define I2C_I2STAT_S_TX_DAT_ACK ((0xB8))
frank26080115 0:84d7747641aa 156 /** Data has been transmitted, NACK has been received */
frank26080115 0:84d7747641aa 157 #define I2C_I2STAT_S_TX_DAT_NACK ((0xC0))
frank26080115 0:84d7747641aa 158 /** Last data byte in I2DAT has been transmitted (AA = 0);
frank26080115 0:84d7747641aa 159 ACK has been received */
frank26080115 0:84d7747641aa 160 #define I2C_I2STAT_S_TX_LAST_DAT_ACK ((0xC8))
frank26080115 0:84d7747641aa 161
frank26080115 0:84d7747641aa 162 /** Time out in case of using I2C slave mode */
frank26080115 0:84d7747641aa 163 #define I2C_SLAVE_TIME_OUT 0x10000UL
frank26080115 0:84d7747641aa 164
frank26080115 0:84d7747641aa 165 /********************************************************************//**
frank26080115 0:84d7747641aa 166 * I2C Data register definition
frank26080115 0:84d7747641aa 167 *********************************************************************/
frank26080115 0:84d7747641aa 168 /** Mask for I2DAT register*/
frank26080115 0:84d7747641aa 169 #define I2C_I2DAT_BITMASK ((0xFF))
frank26080115 0:84d7747641aa 170
frank26080115 0:84d7747641aa 171 /** Idle data value will be send out in slave mode in case of the actual
frank26080115 0:84d7747641aa 172 * expecting data requested from the master is greater than its sending data
frank26080115 0:84d7747641aa 173 * length that can be supported */
frank26080115 0:84d7747641aa 174 #define I2C_I2DAT_IDLE_CHAR (0xFF)
frank26080115 0:84d7747641aa 175
frank26080115 0:84d7747641aa 176 /********************************************************************//**
frank26080115 0:84d7747641aa 177 * I2C Monitor mode control register description
frank26080115 0:84d7747641aa 178 *********************************************************************/
frank26080115 0:84d7747641aa 179 #define I2C_I2MMCTRL_MM_ENA ((1<<0)) /**< Monitor mode enable */
frank26080115 0:84d7747641aa 180 #define I2C_I2MMCTRL_ENA_SCL ((1<<1)) /**< SCL output enable */
frank26080115 0:84d7747641aa 181 #define I2C_I2MMCTRL_MATCH_ALL ((1<<2)) /**< Select interrupt register match */
frank26080115 0:84d7747641aa 182 #define I2C_I2MMCTRL_BITMASK ((0x07)) /**< Mask for I2MMCTRL register */
frank26080115 0:84d7747641aa 183
frank26080115 0:84d7747641aa 184 /********************************************************************//**
frank26080115 0:84d7747641aa 185 * I2C Data buffer register description
frank26080115 0:84d7747641aa 186 *********************************************************************/
frank26080115 0:84d7747641aa 187 /** I2C Data buffer register bit mask */
frank26080115 0:84d7747641aa 188 #define I2DATA_BUFFER_BITMASK ((0xFF))
frank26080115 0:84d7747641aa 189
frank26080115 0:84d7747641aa 190 /********************************************************************//**
frank26080115 0:84d7747641aa 191 * I2C Slave Address registers definition
frank26080115 0:84d7747641aa 192 *********************************************************************/
frank26080115 0:84d7747641aa 193 /** General Call enable bit */
frank26080115 0:84d7747641aa 194 #define I2C_I2ADR_GC ((1<<0))
frank26080115 0:84d7747641aa 195 /** I2C Slave Address registers bit mask */
frank26080115 0:84d7747641aa 196 #define I2C_I2ADR_BITMASK ((0xFF))
frank26080115 0:84d7747641aa 197
frank26080115 0:84d7747641aa 198 /********************************************************************//**
frank26080115 0:84d7747641aa 199 * I2C Mask Register definition
frank26080115 0:84d7747641aa 200 *********************************************************************/
frank26080115 0:84d7747641aa 201 /** I2C Mask Register mask field */
frank26080115 0:84d7747641aa 202 #define I2C_I2MASK_MASK(n) ((n&0xFE))
frank26080115 0:84d7747641aa 203
frank26080115 0:84d7747641aa 204 /********************************************************************//**
frank26080115 0:84d7747641aa 205 * I2C SCL HIGH duty cycle Register definition
frank26080115 0:84d7747641aa 206 *********************************************************************/
frank26080115 0:84d7747641aa 207 /** I2C SCL HIGH duty cycle Register bit mask */
frank26080115 0:84d7747641aa 208 #define I2C_I2SCLH_BITMASK ((0xFFFF))
frank26080115 0:84d7747641aa 209
frank26080115 0:84d7747641aa 210 /********************************************************************//**
frank26080115 0:84d7747641aa 211 * I2C SCL LOW duty cycle Register definition
frank26080115 0:84d7747641aa 212 *********************************************************************/
frank26080115 0:84d7747641aa 213 /** I2C SCL LOW duty cycle Register bit mask */
frank26080115 0:84d7747641aa 214 #define I2C_I2SCLL_BITMASK ((0xFFFF))
frank26080115 0:84d7747641aa 215
frank26080115 0:84d7747641aa 216 /* I2C status values */
frank26080115 0:84d7747641aa 217 #define I2C_SETUP_STATUS_ARBF (1<<8) /**< Arbitration false */
frank26080115 0:84d7747641aa 218 #define I2C_SETUP_STATUS_NOACKF (1<<9) /**< No ACK returned */
frank26080115 0:84d7747641aa 219 #define I2C_SETUP_STATUS_DONE (1<<10) /**< Status DONE */
frank26080115 0:84d7747641aa 220
frank26080115 0:84d7747641aa 221 /*********************************************************************//**
frank26080115 0:84d7747641aa 222 * I2C monitor control configuration defines
frank26080115 0:84d7747641aa 223 **********************************************************************/
frank26080115 0:84d7747641aa 224 #define I2C_MONITOR_CFG_SCL_OUTPUT I2C_I2MMCTRL_ENA_SCL /**< SCL output enable */
frank26080115 0:84d7747641aa 225 #define I2C_MONITOR_CFG_MATCHALL I2C_I2MMCTRL_MATCH_ALL /**< Select interrupt register match */
frank26080115 0:84d7747641aa 226
frank26080115 0:84d7747641aa 227 /* ---------------- CHECK PARAMETER DEFINITIONS ---------------------------- */
frank26080115 0:84d7747641aa 228 /* Macros check I2C slave address */
frank26080115 0:84d7747641aa 229 #define PARAM_I2C_SLAVEADDR_CH(n) ((n)<=3)
frank26080115 0:84d7747641aa 230
frank26080115 0:84d7747641aa 231 /** Macro to determine if it is valid SSP port number */
frank26080115 0:84d7747641aa 232 #define PARAM_I2Cx(n) ((((uint32_t *)n)==((uint32_t *)LPC_I2C0)) \
frank26080115 0:84d7747641aa 233 || (((uint32_t *)n)==((uint32_t *)LPC_I2C1)) \
frank26080115 0:84d7747641aa 234 || (((uint32_t *)n)==((uint32_t *)LPC_I2C2)))
frank26080115 0:84d7747641aa 235
frank26080115 0:84d7747641aa 236 /* Macros check I2C monitor configuration type */
frank26080115 0:84d7747641aa 237 #define PARAM_I2C_MONITOR_CFG(n) ((n==I2C_MONITOR_CFG_SCL_OUTPUT) || (I2C_MONITOR_CFG_MATCHALL))
frank26080115 0:84d7747641aa 238
frank26080115 0:84d7747641aa 239 /**
frank26080115 0:84d7747641aa 240 * @}
frank26080115 0:84d7747641aa 241 */
frank26080115 0:84d7747641aa 242
frank26080115 0:84d7747641aa 243
frank26080115 0:84d7747641aa 244
frank26080115 0:84d7747641aa 245 /* Public Types --------------------------------------------------------------- */
frank26080115 0:84d7747641aa 246 /** @defgroup I2C_Public_Types I2C Public Types
frank26080115 0:84d7747641aa 247 * @{
frank26080115 0:84d7747641aa 248 */
frank26080115 0:84d7747641aa 249
frank26080115 0:84d7747641aa 250 /**
frank26080115 0:84d7747641aa 251 * @brief I2C Own slave address setting structure
frank26080115 0:84d7747641aa 252 */
frank26080115 0:84d7747641aa 253 typedef struct {
frank26080115 0:84d7747641aa 254 uint8_t SlaveAddrChannel; /**< Slave Address channel in I2C control,
frank26080115 0:84d7747641aa 255 should be in range from 0..3
frank26080115 0:84d7747641aa 256 */
frank26080115 0:84d7747641aa 257 uint8_t SlaveAddr_7bit; /**< Value of 7-bit slave address */
frank26080115 0:84d7747641aa 258 uint8_t GeneralCallState; /**< Enable/Disable General Call Functionality
frank26080115 0:84d7747641aa 259 when I2C control being in Slave mode, should be:
frank26080115 0:84d7747641aa 260 - ENABLE: Enable General Call function.
frank26080115 0:84d7747641aa 261 - DISABLE: Disable General Call function.
frank26080115 0:84d7747641aa 262 */
frank26080115 0:84d7747641aa 263 uint8_t SlaveAddrMaskValue; /**< Any bit in this 8-bit value (bit 7:1)
frank26080115 0:84d7747641aa 264 which is set to '1' will cause an automatic compare on
frank26080115 0:84d7747641aa 265 the corresponding bit of the received address when it
frank26080115 0:84d7747641aa 266 is compared to the SlaveAddr_7bit value associated with this
frank26080115 0:84d7747641aa 267 mask register. In other words, bits in SlaveAddr_7bit value
frank26080115 0:84d7747641aa 268 which are masked are not taken into account in determining
frank26080115 0:84d7747641aa 269 an address match
frank26080115 0:84d7747641aa 270 */
frank26080115 0:84d7747641aa 271 } I2C_OWNSLAVEADDR_CFG_Type;
frank26080115 0:84d7747641aa 272
frank26080115 0:84d7747641aa 273
frank26080115 0:84d7747641aa 274 /**
frank26080115 0:84d7747641aa 275 * @brief Master transfer setup data structure definitions
frank26080115 0:84d7747641aa 276 */
frank26080115 0:84d7747641aa 277 typedef struct
frank26080115 0:84d7747641aa 278 {
frank26080115 0:84d7747641aa 279 uint32_t sl_addr7bit; /**< Slave address in 7bit mode */
frank26080115 0:84d7747641aa 280 uint8_t* tx_data; /**< Pointer to Transmit data - NULL if data transmit
frank26080115 0:84d7747641aa 281 is not used */
frank26080115 0:84d7747641aa 282 uint32_t tx_length; /**< Transmit data length - 0 if data transmit
frank26080115 0:84d7747641aa 283 is not used*/
frank26080115 0:84d7747641aa 284 uint32_t tx_count; /**< Current Transmit data counter */
frank26080115 0:84d7747641aa 285 uint8_t* rx_data; /**< Pointer to Receive data - NULL if data receive
frank26080115 0:84d7747641aa 286 is not used */
frank26080115 0:84d7747641aa 287 uint32_t rx_length; /**< Receive data length - 0 if data receive is
frank26080115 0:84d7747641aa 288 not used */
frank26080115 0:84d7747641aa 289 uint32_t rx_count; /**< Current Receive data counter */
frank26080115 0:84d7747641aa 290 uint32_t retransmissions_max; /**< Max Re-Transmission value */
frank26080115 0:84d7747641aa 291 uint32_t retransmissions_count; /**< Current Re-Transmission counter */
frank26080115 0:84d7747641aa 292 uint32_t status; /**< Current status of I2C activity */
frank26080115 0:84d7747641aa 293 void (*callback)(void); /**< Pointer to Call back function when transmission complete
frank26080115 0:84d7747641aa 294 used in interrupt transfer mode */
frank26080115 0:84d7747641aa 295 } I2C_M_SETUP_Type;
frank26080115 0:84d7747641aa 296
frank26080115 0:84d7747641aa 297
frank26080115 0:84d7747641aa 298 /**
frank26080115 0:84d7747641aa 299 * @brief Slave transfer setup data structure definitions
frank26080115 0:84d7747641aa 300 */
frank26080115 0:84d7747641aa 301 typedef struct
frank26080115 0:84d7747641aa 302 {
frank26080115 0:84d7747641aa 303 uint8_t* tx_data;
frank26080115 0:84d7747641aa 304 uint32_t tx_length;
frank26080115 0:84d7747641aa 305 uint32_t tx_count;
frank26080115 0:84d7747641aa 306 uint8_t* rx_data;
frank26080115 0:84d7747641aa 307 uint32_t rx_length;
frank26080115 0:84d7747641aa 308 uint32_t rx_count;
frank26080115 0:84d7747641aa 309 uint32_t status;
frank26080115 0:84d7747641aa 310 void (*callback)(void);
frank26080115 0:84d7747641aa 311 } I2C_S_SETUP_Type;
frank26080115 0:84d7747641aa 312
frank26080115 0:84d7747641aa 313 /**
frank26080115 0:84d7747641aa 314 * @brief Transfer option type definitions
frank26080115 0:84d7747641aa 315 */
frank26080115 0:84d7747641aa 316 typedef enum {
frank26080115 0:84d7747641aa 317 I2C_TRANSFER_POLLING = 0, /**< Transfer in polling mode */
frank26080115 0:84d7747641aa 318 I2C_TRANSFER_INTERRUPT /**< Transfer in interrupt mode */
frank26080115 0:84d7747641aa 319 } I2C_TRANSFER_OPT_Type;
frank26080115 0:84d7747641aa 320
frank26080115 0:84d7747641aa 321
frank26080115 0:84d7747641aa 322 /**
frank26080115 0:84d7747641aa 323 * @}
frank26080115 0:84d7747641aa 324 */
frank26080115 0:84d7747641aa 325
frank26080115 0:84d7747641aa 326
frank26080115 0:84d7747641aa 327 /* Public Functions ----------------------------------------------------------- */
frank26080115 0:84d7747641aa 328 /** @defgroup I2C_Public_Functions I2C Public Functions
frank26080115 0:84d7747641aa 329 * @{
frank26080115 0:84d7747641aa 330 */
frank26080115 0:84d7747641aa 331
frank26080115 0:84d7747641aa 332 /* I2C Init/DeInit functions ---------- */
frank26080115 0:84d7747641aa 333 void I2C_Init(LPC_I2C_TypeDef *I2Cx, uint32_t clockrate);
frank26080115 0:84d7747641aa 334 void I2C_DeInit(LPC_I2C_TypeDef* I2Cx);
frank26080115 0:84d7747641aa 335 //void I2C_SetClock (LPC_I2C_TypeDef *I2Cx, uint32_t target_clock);
frank26080115 0:84d7747641aa 336 void I2C_Cmd(LPC_I2C_TypeDef* I2Cx, FunctionalState NewState);
frank26080115 0:84d7747641aa 337
frank26080115 0:84d7747641aa 338 /* I2C transfer data functions -------- */
frank26080115 0:84d7747641aa 339 Status I2C_MasterTransferData(LPC_I2C_TypeDef *I2Cx, \
frank26080115 0:84d7747641aa 340 I2C_M_SETUP_Type *TransferCfg, I2C_TRANSFER_OPT_Type Opt);
frank26080115 0:84d7747641aa 341 Status I2C_SlaveTransferData(LPC_I2C_TypeDef *I2Cx, \
frank26080115 0:84d7747641aa 342 I2C_S_SETUP_Type *TransferCfg, I2C_TRANSFER_OPT_Type Opt);
frank26080115 0:84d7747641aa 343 uint32_t I2C_MasterTransferComplete(LPC_I2C_TypeDef *I2Cx);
frank26080115 0:84d7747641aa 344 uint32_t I2C_SlaveTransferComplete(LPC_I2C_TypeDef *I2Cx);
frank26080115 0:84d7747641aa 345
frank26080115 0:84d7747641aa 346
frank26080115 0:84d7747641aa 347 void I2C_SetOwnSlaveAddr(LPC_I2C_TypeDef *I2Cx, I2C_OWNSLAVEADDR_CFG_Type *OwnSlaveAddrConfigStruct);
frank26080115 0:84d7747641aa 348 uint8_t I2C_GetLastStatusCode(LPC_I2C_TypeDef* I2Cx);
frank26080115 0:84d7747641aa 349
frank26080115 0:84d7747641aa 350 /* I2C Monitor functions ---------------*/
frank26080115 0:84d7747641aa 351 void I2C_MonitorModeConfig(LPC_I2C_TypeDef *I2Cx, uint32_t MonitorCfgType, FunctionalState NewState);
frank26080115 0:84d7747641aa 352 void I2C_MonitorModeCmd(LPC_I2C_TypeDef *I2Cx, FunctionalState NewState);
frank26080115 0:84d7747641aa 353 uint8_t I2C_MonitorGetDatabuffer(LPC_I2C_TypeDef *I2Cx);
frank26080115 0:84d7747641aa 354 BOOL_8 I2C_MonitorHandler(LPC_I2C_TypeDef *I2Cx, uint8_t *buffer, uint32_t size);
frank26080115 0:84d7747641aa 355
frank26080115 0:84d7747641aa 356 /* I2C Interrupt handler functions ------*/
frank26080115 0:84d7747641aa 357 void I2C_IntCmd (LPC_I2C_TypeDef *I2Cx, Bool NewState);
frank26080115 0:84d7747641aa 358 void I2C_MasterHandler (LPC_I2C_TypeDef *I2Cx);
frank26080115 0:84d7747641aa 359 void I2C_SlaveHandler (LPC_I2C_TypeDef *I2Cx);
frank26080115 0:84d7747641aa 360
frank26080115 0:84d7747641aa 361
frank26080115 0:84d7747641aa 362 /**
frank26080115 0:84d7747641aa 363 * @}
frank26080115 0:84d7747641aa 364 */
frank26080115 0:84d7747641aa 365
frank26080115 0:84d7747641aa 366
frank26080115 0:84d7747641aa 367 #ifdef __cplusplus
frank26080115 0:84d7747641aa 368 }
frank26080115 0:84d7747641aa 369 #endif
frank26080115 0:84d7747641aa 370
frank26080115 0:84d7747641aa 371 #endif /* LPC17XX_I2C_H_ */
frank26080115 0:84d7747641aa 372
frank26080115 0:84d7747641aa 373 /**
frank26080115 0:84d7747641aa 374 * @}
frank26080115 0:84d7747641aa 375 */
frank26080115 0:84d7747641aa 376
frank26080115 0:84d7747641aa 377 /* --------------------------------- End Of File ------------------------------ */