2 * @brief I2C Driver Definition File
\r
8 /* (c) Texas Instruments 2009-2012, All rights reserved. */
\r
14 #include "sys_common.h"
\r
19 * @brief Alias names for i2c modes
\r
20 * This enumeration is used to provide alias names for I2C modes:
\r
25 I2C_FD_FORMAT = 0x0008, /* Free Data Format */
\r
26 I2C_START_BYTE = 0x0010,
\r
27 I2C_RESET_OUT = 0x0020, I2C_RESET_IN = 0x0000,
\r
28 I2C_DLOOPBACK = 0x0040,
\r
29 I2C_REPEATMODE = 0x0080, /* In Master Mode only */
\r
30 I2C_10BIT_AMODE = 0x0100, I2C_7BIT_AMODE = 0x0000,
\r
31 I2C_TRANSMITTER = 0x0200, I2C_RECEIVER = 0x0000,
\r
32 I2C_MASTER = 0x0400, I2C_SLAVE = 0x0000,
\r
33 I2C_STOP_COND = 0x0800, /* In Master Mode only */
\r
34 I2C_START_COND = 0x2000, /* In Master Mode only */
\r
35 I2C_FREE_RUN = 0x4000,
\r
36 I2C_NACK_MODE = 0x8000
\r
40 /** @enum i2cBitCount
\r
41 * @brief Alias names for i2c bit count
\r
42 * This enumeration is used to provide alias names for I2C bit count:
\r
58 /** @enum i2cIntFlags
\r
59 * @brief Interrupt Flag Definitions
\r
61 * Used with I2CEnableNotification, I2CDisableNotification
\r
65 I2C_AL_INT = 0x0001, /* arbitration lost */
\r
66 I2C_NACK_INT = 0x0002, /* no acknowledgement */
\r
67 I2C_ARDY_INT = 0x0004, /* access ready */
\r
68 I2C_RX_INT = 0x0008, /* receive data ready */
\r
69 I2C_TX_INT = 0x0010, /* transmit data ready */
\r
70 I2C_SCD_INT = 0x0020, /* stop condition detect */
\r
71 I2C_AAS_INT = 0x0040 /* address as slave */
\r
75 /** @enum i2cStatFlags
\r
76 * @brief Interrupt Status Definitions
\r
81 I2C_BUSBUSY = 0x1000, /* bus busy */
\r
82 I2C_RXFULL = 0x0800 /* receive full */
\r
87 * @brief I2C DMA definitions
\r
89 * Used before i2c transfer
\r
98 * @brief I2C Base Register Definition
\r
100 * This structure is used to access the I2C module egisters.
\r
102 /** @typedef i2cBASE_t
\r
103 * @brief I2C Register Frame Type Definition
\r
105 * This type is used to access the I2C Registers.
\r
107 typedef volatile struct i2cBase
\r
110 uint32_t OAR; /**< 0x0000 I2C Own Address register */
\r
111 uint32_t IMR; /**< 0x0004 I2C Interrupt Mask/Status register */
\r
112 uint32_t STR; /**< 0x0008 I2C Interrupt Status register */
\r
113 uint32_t CLKL; /**< 0x000C I2C Clock Divider Low register */
\r
114 uint32_t CLKH; /**< 0x0010 I2C Clock Divider High register */
\r
115 uint32_t CNT; /**< 0x0014 I2C Data Count register */
\r
116 uint32_t DRR; /**< 0x0018 I2C Data Receive register */
\r
117 uint32_t SAR; /**< 0x001C I2C Slave Address register */
\r
118 uint32_t DXR; /**< 0x0020 I2C Data Transmit register */
\r
119 uint32_t MDR; /**< 0x0024 I2C Mode register */
\r
120 uint32_t IVR; /**< 0x0028 I2C Interrupt Vector register */
\r
121 uint32_t EMDR; /**< 0x002C I2C Extended Mode register */
\r
122 uint32_t PSC; /**< 0x0030 I2C Prescaler register */
\r
123 uint32_t PID11; /**< 0x0034 I2C Peripheral ID register 1 */
\r
124 uint32_t PID12; /**< 0x0038 I2C Peripheral ID register 2 */
\r
125 uint32_t DMAC; /**< 0x003C I2C DMA Control Register */
\r
126 uint32_t : 32U; /**< 0x0040 Reserved */
\r
127 uint32_t : 32U; /**< 0x0044 Reserved */
\r
128 uint32_t FUN; /**< 0x0048 Pin Function Register */
\r
129 uint32_t DIR; /**< 0x004C Pin Direction Register */
\r
130 uint32_t DIN; /**< 0x0050 Pin Data In Register */
\r
131 uint32_t DOUT; /**< 0x0054 Pin Data Out Register */
\r
132 uint32_t SET; /**< 0x0058 Pin Data Set Register */
\r
133 uint32_t CLR; /**< 0x005C Pin Data Clr Register */
\r
134 uint32_t ODR; /**< 0x0060 Pin Open Drain Output Enable Register */
\r
135 uint32_t PD; /**< 0x0064 Pin Pullup/Pulldown Disable Register */
\r
136 uint32_t PSL; /**< 0x0068 Pin Pullup/Pulldown Selection Register */
\r
141 * @brief I2C Register Frame Pointer
\r
143 * This pointer is used by the I2C driver to access the I2C module registers.
\r
145 #define i2cREG1 ((i2cBASE_t *)0xFFF7D400U)
\r
147 /* USER CODE BEGIN (0) */
\r
148 /* USER CODE END */
\r
152 * @brief I2C GIO Port Register Pointer
\r
154 * Pointer used by the GIO driver to access I/O PORT of I2C
\r
155 * (use the GIO drivers to access the port pins).
\r
157 #define i2cPORT1 ((gioPORT_t *)0xFFF7D44CU)
\r
159 /* I2C Interface Functions */
\r
160 void i2cInit(void);
\r
161 void i2cSetOwnAdd(i2cBASE_t *i2c, uint32_t oadd);
\r
162 void i2cSetSlaveAdd(i2cBASE_t *i2c, uint32_t sadd);
\r
163 void i2cSetBaudrate(i2cBASE_t *i2c, uint32_t baud);
\r
164 uint32_t i2cIsTxReady(i2cBASE_t *i2c);
\r
165 void i2cSendByte(i2cBASE_t *i2c, uint8_t byte);
\r
166 void i2cSend(i2cBASE_t *i2c, uint32_t length, uint8_t *data);
\r
167 uint32_t i2cIsRxReady(i2cBASE_t *i2c);
\r
168 void i2cClearSCD(i2cBASE_t *i2c);
\r
169 uint32_t i2cRxError(i2cBASE_t *i2c);
\r
170 uint32_t i2cReceiveByte(i2cBASE_t *i2c);
\r
171 void i2cReceive(i2cBASE_t *i2c, uint32_t length, uint8_t *data);
\r
172 void i2cEnableNotification(i2cBASE_t *i2c, uint32_t flags);
\r
173 void i2cDisableNotification(i2cBASE_t *i2c, uint32_t flags);
\r
174 void i2cSetStart(i2cBASE_t *i2c);
\r
175 void i2cSetStop(i2cBASE_t *i2c);
\r
176 void i2cSetCount(i2cBASE_t *i2c ,uint32_t cnt);
\r
177 void i2cEnableLoopback(i2cBASE_t *i2c);
\r
178 void i2cDisableLoopback(i2cBASE_t *i2c);
\r
180 /** @fn void i2cNotification(i2cBASE_t *i2c, uint32_t flags)
\r
181 * @brief Interrupt callback
\r
182 * @param[in] i2c - I2C module base address
\r
183 * @param[in] flags - copy of error interrupt flags
\r
185 * This is a callback that is provided by the application and is called apon
\r
186 * an interrupt. The parameter passed to the callback is a copy of the
\r
187 * interrupt flag register.
\r
189 void i2cNotification(i2cBASE_t *i2c, uint32_t flags);
\r