Mouse code for the MacroRat

Dependencies:   ITG3200 QEI

Committer:
sahilmgandhi
Date:
Sat Jun 03 00:22:44 2017 +0000
Revision:
46:b156ef445742
Parent:
18:6a4db94011d3
Final code for internal battlebot competition.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sahilmgandhi 18:6a4db94011d3 1 /**************************************************************************//**
sahilmgandhi 18:6a4db94011d3 2 * @file i2c.c
sahilmgandhi 18:6a4db94011d3 3 * @version V3.00
sahilmgandhi 18:6a4db94011d3 4 * $Revision: 23 $
sahilmgandhi 18:6a4db94011d3 5 * $Date: 15/08/11 10:26a $
sahilmgandhi 18:6a4db94011d3 6 * @brief M451 series I2C driver source file
sahilmgandhi 18:6a4db94011d3 7 *
sahilmgandhi 18:6a4db94011d3 8 * @note
sahilmgandhi 18:6a4db94011d3 9 * Copyright (C) 2014~2015 Nuvoton Technology Corp. All rights reserved.
sahilmgandhi 18:6a4db94011d3 10 *****************************************************************************/
sahilmgandhi 18:6a4db94011d3 11 #include "M451Series.h"
sahilmgandhi 18:6a4db94011d3 12
sahilmgandhi 18:6a4db94011d3 13 /** @addtogroup Standard_Driver Standard Driver
sahilmgandhi 18:6a4db94011d3 14 @{
sahilmgandhi 18:6a4db94011d3 15 */
sahilmgandhi 18:6a4db94011d3 16
sahilmgandhi 18:6a4db94011d3 17 /** @addtogroup I2C_Driver I2C Driver
sahilmgandhi 18:6a4db94011d3 18 @{
sahilmgandhi 18:6a4db94011d3 19 */
sahilmgandhi 18:6a4db94011d3 20
sahilmgandhi 18:6a4db94011d3 21
sahilmgandhi 18:6a4db94011d3 22 /** @addtogroup I2C_EXPORTED_FUNCTIONS I2C Exported Functions
sahilmgandhi 18:6a4db94011d3 23 @{
sahilmgandhi 18:6a4db94011d3 24 */
sahilmgandhi 18:6a4db94011d3 25
sahilmgandhi 18:6a4db94011d3 26 /**
sahilmgandhi 18:6a4db94011d3 27 * @brief Enable specify I2C Controller and set Clock Divider
sahilmgandhi 18:6a4db94011d3 28 *
sahilmgandhi 18:6a4db94011d3 29 * @param[in] i2c Specify I2C port
sahilmgandhi 18:6a4db94011d3 30 * @param[in] u32BusClock The target I2C bus clock in Hz
sahilmgandhi 18:6a4db94011d3 31 *
sahilmgandhi 18:6a4db94011d3 32 * @return Actual I2C bus clock frequency
sahilmgandhi 18:6a4db94011d3 33 *
sahilmgandhi 18:6a4db94011d3 34 * @details The function enable the specify I2C Controller and set proper Clock Divider
sahilmgandhi 18:6a4db94011d3 35 * in I2C CLOCK DIVIDED REGISTER (I2CLK) according to the target I2C Bus clock.
sahilmgandhi 18:6a4db94011d3 36 * I2C Bus clock = PCLK / (4*(divider+1).
sahilmgandhi 18:6a4db94011d3 37 *
sahilmgandhi 18:6a4db94011d3 38 */
sahilmgandhi 18:6a4db94011d3 39 uint32_t I2C_Open(I2C_T *i2c, uint32_t u32BusClock)
sahilmgandhi 18:6a4db94011d3 40 {
sahilmgandhi 18:6a4db94011d3 41 uint32_t u32Div;
sahilmgandhi 18:6a4db94011d3 42
sahilmgandhi 18:6a4db94011d3 43 u32Div = (uint32_t)(((SystemCoreClock * 10) / (u32BusClock * 4) + 5) / 10 - 1); /* Compute proper divider for I2C clock */
sahilmgandhi 18:6a4db94011d3 44 i2c->CLKDIV = u32Div;
sahilmgandhi 18:6a4db94011d3 45
sahilmgandhi 18:6a4db94011d3 46 /* Enable I2C */
sahilmgandhi 18:6a4db94011d3 47 i2c->CTL |= I2C_CTL_I2CEN_Msk;
sahilmgandhi 18:6a4db94011d3 48
sahilmgandhi 18:6a4db94011d3 49 return (SystemCoreClock / ((u32Div + 1) << 2));
sahilmgandhi 18:6a4db94011d3 50 }
sahilmgandhi 18:6a4db94011d3 51
sahilmgandhi 18:6a4db94011d3 52 /**
sahilmgandhi 18:6a4db94011d3 53 * @brief Disable specify I2C Controller
sahilmgandhi 18:6a4db94011d3 54 *
sahilmgandhi 18:6a4db94011d3 55 * @param[in] i2c Specify I2C port
sahilmgandhi 18:6a4db94011d3 56 *
sahilmgandhi 18:6a4db94011d3 57 * @return None
sahilmgandhi 18:6a4db94011d3 58 *
sahilmgandhi 18:6a4db94011d3 59 * @details Reset I2C Controller and disable specify I2C port.
sahilmgandhi 18:6a4db94011d3 60 *
sahilmgandhi 18:6a4db94011d3 61 */
sahilmgandhi 18:6a4db94011d3 62
sahilmgandhi 18:6a4db94011d3 63 void I2C_Close(I2C_T *i2c)
sahilmgandhi 18:6a4db94011d3 64 {
sahilmgandhi 18:6a4db94011d3 65 /* Reset I2C Controller */
sahilmgandhi 18:6a4db94011d3 66 if((uint32_t)i2c == I2C0_BASE)
sahilmgandhi 18:6a4db94011d3 67 {
sahilmgandhi 18:6a4db94011d3 68 SYS->IPRST1 |= SYS_IPRST1_I2C0RST_Msk;
sahilmgandhi 18:6a4db94011d3 69 SYS->IPRST1 &= ~SYS_IPRST1_I2C0RST_Msk;
sahilmgandhi 18:6a4db94011d3 70 }
sahilmgandhi 18:6a4db94011d3 71 else if((uint32_t)i2c == I2C1_BASE)
sahilmgandhi 18:6a4db94011d3 72 {
sahilmgandhi 18:6a4db94011d3 73 SYS->IPRST1 |= SYS_IPRST1_I2C1RST_Msk;
sahilmgandhi 18:6a4db94011d3 74 SYS->IPRST1 &= ~SYS_IPRST1_I2C1RST_Msk;
sahilmgandhi 18:6a4db94011d3 75 }
sahilmgandhi 18:6a4db94011d3 76
sahilmgandhi 18:6a4db94011d3 77 /* Disable I2C */
sahilmgandhi 18:6a4db94011d3 78 i2c->CTL &= ~I2C_CTL_I2CEN_Msk;
sahilmgandhi 18:6a4db94011d3 79 }
sahilmgandhi 18:6a4db94011d3 80
sahilmgandhi 18:6a4db94011d3 81 /**
sahilmgandhi 18:6a4db94011d3 82 * @brief Clear Time-out Counter flag
sahilmgandhi 18:6a4db94011d3 83 *
sahilmgandhi 18:6a4db94011d3 84 * @param[in] i2c Specify I2C port
sahilmgandhi 18:6a4db94011d3 85 *
sahilmgandhi 18:6a4db94011d3 86 * @return None
sahilmgandhi 18:6a4db94011d3 87 *
sahilmgandhi 18:6a4db94011d3 88 * @details When Time-out flag will be set, use this function to clear I2C Bus Time-out counter flag .
sahilmgandhi 18:6a4db94011d3 89 *
sahilmgandhi 18:6a4db94011d3 90 */
sahilmgandhi 18:6a4db94011d3 91 void I2C_ClearTimeoutFlag(I2C_T *i2c)
sahilmgandhi 18:6a4db94011d3 92 {
sahilmgandhi 18:6a4db94011d3 93 i2c->TOCTL |= I2C_TOCTL_TOIF_Msk;
sahilmgandhi 18:6a4db94011d3 94 }
sahilmgandhi 18:6a4db94011d3 95
sahilmgandhi 18:6a4db94011d3 96 /**
sahilmgandhi 18:6a4db94011d3 97 * @brief Set Control bit of I2C Controller
sahilmgandhi 18:6a4db94011d3 98 *
sahilmgandhi 18:6a4db94011d3 99 * @param[in] i2c Specify I2C port
sahilmgandhi 18:6a4db94011d3 100 * @param[in] u8Start Set I2C START condition
sahilmgandhi 18:6a4db94011d3 101 * @param[in] u8Stop Set I2C STOP condition
sahilmgandhi 18:6a4db94011d3 102 * @param[in] u8Si Clear SI flag
sahilmgandhi 18:6a4db94011d3 103 * @param[in] u8Ack Set I2C ACK bit
sahilmgandhi 18:6a4db94011d3 104 *
sahilmgandhi 18:6a4db94011d3 105 * @return None
sahilmgandhi 18:6a4db94011d3 106 *
sahilmgandhi 18:6a4db94011d3 107 * @details The function set I2C Control bit of I2C Bus protocol.
sahilmgandhi 18:6a4db94011d3 108 *
sahilmgandhi 18:6a4db94011d3 109 */
sahilmgandhi 18:6a4db94011d3 110 void I2C_Trigger(I2C_T *i2c, uint8_t u8Start, uint8_t u8Stop, uint8_t u8Si, uint8_t u8Ack)
sahilmgandhi 18:6a4db94011d3 111 {
sahilmgandhi 18:6a4db94011d3 112 uint32_t u32Reg = 0;
sahilmgandhi 18:6a4db94011d3 113
sahilmgandhi 18:6a4db94011d3 114 if(u8Start)
sahilmgandhi 18:6a4db94011d3 115 u32Reg |= I2C_CTL_STA;
sahilmgandhi 18:6a4db94011d3 116 if(u8Stop)
sahilmgandhi 18:6a4db94011d3 117 u32Reg |= I2C_CTL_STO;
sahilmgandhi 18:6a4db94011d3 118 if(u8Si)
sahilmgandhi 18:6a4db94011d3 119 u32Reg |= I2C_CTL_SI;
sahilmgandhi 18:6a4db94011d3 120 if(u8Ack)
sahilmgandhi 18:6a4db94011d3 121 u32Reg |= I2C_CTL_AA;
sahilmgandhi 18:6a4db94011d3 122
sahilmgandhi 18:6a4db94011d3 123 i2c->CTL = (i2c->CTL & ~0x3C) | u32Reg;
sahilmgandhi 18:6a4db94011d3 124 }
sahilmgandhi 18:6a4db94011d3 125
sahilmgandhi 18:6a4db94011d3 126 /**
sahilmgandhi 18:6a4db94011d3 127 * @brief Disable Interrupt of I2C Controller
sahilmgandhi 18:6a4db94011d3 128 *
sahilmgandhi 18:6a4db94011d3 129 * @param[in] i2c Specify I2C port
sahilmgandhi 18:6a4db94011d3 130 *
sahilmgandhi 18:6a4db94011d3 131 * @return None
sahilmgandhi 18:6a4db94011d3 132 *
sahilmgandhi 18:6a4db94011d3 133 * @details The function is used for disable I2C interrupt
sahilmgandhi 18:6a4db94011d3 134 *
sahilmgandhi 18:6a4db94011d3 135 */
sahilmgandhi 18:6a4db94011d3 136 void I2C_DisableInt(I2C_T *i2c)
sahilmgandhi 18:6a4db94011d3 137 {
sahilmgandhi 18:6a4db94011d3 138 i2c->CTL &= ~I2C_CTL_INTEN_Msk;
sahilmgandhi 18:6a4db94011d3 139 }
sahilmgandhi 18:6a4db94011d3 140
sahilmgandhi 18:6a4db94011d3 141 /**
sahilmgandhi 18:6a4db94011d3 142 * @brief Enable Interrupt of I2C Controller
sahilmgandhi 18:6a4db94011d3 143 *
sahilmgandhi 18:6a4db94011d3 144 * @param[in] i2c Specify I2C port
sahilmgandhi 18:6a4db94011d3 145 *
sahilmgandhi 18:6a4db94011d3 146 * @return None
sahilmgandhi 18:6a4db94011d3 147 *
sahilmgandhi 18:6a4db94011d3 148 * @details The function is used for enable I2C interrupt
sahilmgandhi 18:6a4db94011d3 149 *
sahilmgandhi 18:6a4db94011d3 150 */
sahilmgandhi 18:6a4db94011d3 151 void I2C_EnableInt(I2C_T *i2c)
sahilmgandhi 18:6a4db94011d3 152 {
sahilmgandhi 18:6a4db94011d3 153 i2c->CTL |= I2C_CTL_INTEN_Msk;
sahilmgandhi 18:6a4db94011d3 154 }
sahilmgandhi 18:6a4db94011d3 155
sahilmgandhi 18:6a4db94011d3 156 /**
sahilmgandhi 18:6a4db94011d3 157 * @brief Get I2C Bus Clock
sahilmgandhi 18:6a4db94011d3 158 *
sahilmgandhi 18:6a4db94011d3 159 * @param[in] i2c Specify I2C port
sahilmgandhi 18:6a4db94011d3 160 *
sahilmgandhi 18:6a4db94011d3 161 * @return The actual I2C Bus clock in Hz
sahilmgandhi 18:6a4db94011d3 162 *
sahilmgandhi 18:6a4db94011d3 163 * @details To get the actual I2C Bus Clock frequency.
sahilmgandhi 18:6a4db94011d3 164 */
sahilmgandhi 18:6a4db94011d3 165 uint32_t I2C_GetBusClockFreq(I2C_T *i2c)
sahilmgandhi 18:6a4db94011d3 166 {
sahilmgandhi 18:6a4db94011d3 167 uint32_t u32Divider = i2c->CLKDIV;
sahilmgandhi 18:6a4db94011d3 168
sahilmgandhi 18:6a4db94011d3 169 return (SystemCoreClock / ((u32Divider + 1) << 2));
sahilmgandhi 18:6a4db94011d3 170 }
sahilmgandhi 18:6a4db94011d3 171
sahilmgandhi 18:6a4db94011d3 172 /**
sahilmgandhi 18:6a4db94011d3 173 * @brief Set I2C Bus Clock
sahilmgandhi 18:6a4db94011d3 174 *
sahilmgandhi 18:6a4db94011d3 175 * @param[in] i2c Specify I2C port
sahilmgandhi 18:6a4db94011d3 176 * @param[in] u32BusClock The target I2C Bus Clock in Hz
sahilmgandhi 18:6a4db94011d3 177 *
sahilmgandhi 18:6a4db94011d3 178 * @return The actual I2C Bus Clock in Hz
sahilmgandhi 18:6a4db94011d3 179 *
sahilmgandhi 18:6a4db94011d3 180 * @details To set the actual I2C Bus Clock frequency.
sahilmgandhi 18:6a4db94011d3 181 */
sahilmgandhi 18:6a4db94011d3 182 uint32_t I2C_SetBusClockFreq(I2C_T *i2c, uint32_t u32BusClock)
sahilmgandhi 18:6a4db94011d3 183 {
sahilmgandhi 18:6a4db94011d3 184 uint32_t u32Div;
sahilmgandhi 18:6a4db94011d3 185
sahilmgandhi 18:6a4db94011d3 186 u32Div = (uint32_t)(((SystemCoreClock * 10) / (u32BusClock * 4) + 5) / 10 - 1); /* Compute proper divider for I2C clock */
sahilmgandhi 18:6a4db94011d3 187 i2c->CLKDIV = u32Div;
sahilmgandhi 18:6a4db94011d3 188
sahilmgandhi 18:6a4db94011d3 189 return (SystemCoreClock / ((u32Div + 1) << 2));
sahilmgandhi 18:6a4db94011d3 190 }
sahilmgandhi 18:6a4db94011d3 191
sahilmgandhi 18:6a4db94011d3 192 /**
sahilmgandhi 18:6a4db94011d3 193 * @brief Get Interrupt Flag
sahilmgandhi 18:6a4db94011d3 194 *
sahilmgandhi 18:6a4db94011d3 195 * @param[in] i2c Specify I2C port
sahilmgandhi 18:6a4db94011d3 196 *
sahilmgandhi 18:6a4db94011d3 197 * @return I2C interrupt flag status
sahilmgandhi 18:6a4db94011d3 198 *
sahilmgandhi 18:6a4db94011d3 199 * @details To get I2C Bus interrupt flag.
sahilmgandhi 18:6a4db94011d3 200 */
sahilmgandhi 18:6a4db94011d3 201 uint32_t I2C_GetIntFlag(I2C_T *i2c)
sahilmgandhi 18:6a4db94011d3 202 {
sahilmgandhi 18:6a4db94011d3 203 return ((i2c->CTL & I2C_CTL_SI_Msk) == I2C_CTL_SI_Msk ? 1 : 0);
sahilmgandhi 18:6a4db94011d3 204 }
sahilmgandhi 18:6a4db94011d3 205
sahilmgandhi 18:6a4db94011d3 206 /**
sahilmgandhi 18:6a4db94011d3 207 * @brief Get I2C Bus Status Code
sahilmgandhi 18:6a4db94011d3 208 *
sahilmgandhi 18:6a4db94011d3 209 * @param[in] i2c Specify I2C port
sahilmgandhi 18:6a4db94011d3 210 *
sahilmgandhi 18:6a4db94011d3 211 * @return I2C Status Code
sahilmgandhi 18:6a4db94011d3 212 *
sahilmgandhi 18:6a4db94011d3 213 * @details To get I2C Bus Status Code.
sahilmgandhi 18:6a4db94011d3 214 */
sahilmgandhi 18:6a4db94011d3 215 uint32_t I2C_GetStatus(I2C_T *i2c)
sahilmgandhi 18:6a4db94011d3 216 {
sahilmgandhi 18:6a4db94011d3 217 return (i2c->STATUS);
sahilmgandhi 18:6a4db94011d3 218 }
sahilmgandhi 18:6a4db94011d3 219
sahilmgandhi 18:6a4db94011d3 220 /**
sahilmgandhi 18:6a4db94011d3 221 * @brief Read a Byte from I2C Bus
sahilmgandhi 18:6a4db94011d3 222 *
sahilmgandhi 18:6a4db94011d3 223 * @param[in] i2c Specify I2C port
sahilmgandhi 18:6a4db94011d3 224 *
sahilmgandhi 18:6a4db94011d3 225 * @return I2C Data
sahilmgandhi 18:6a4db94011d3 226 *
sahilmgandhi 18:6a4db94011d3 227 * @details To read a bytes data from specify I2C port.
sahilmgandhi 18:6a4db94011d3 228 */
sahilmgandhi 18:6a4db94011d3 229 uint8_t I2C_GetData(I2C_T *i2c)
sahilmgandhi 18:6a4db94011d3 230 {
sahilmgandhi 18:6a4db94011d3 231 return (i2c->DAT);
sahilmgandhi 18:6a4db94011d3 232 }
sahilmgandhi 18:6a4db94011d3 233
sahilmgandhi 18:6a4db94011d3 234 /**
sahilmgandhi 18:6a4db94011d3 235 * @brief Send a byte to I2C Bus
sahilmgandhi 18:6a4db94011d3 236 *
sahilmgandhi 18:6a4db94011d3 237 * @param[in] i2c Specify I2C port
sahilmgandhi 18:6a4db94011d3 238 * @param[in] u8Data The data to send to I2C bus
sahilmgandhi 18:6a4db94011d3 239 *
sahilmgandhi 18:6a4db94011d3 240 * @return None
sahilmgandhi 18:6a4db94011d3 241 *
sahilmgandhi 18:6a4db94011d3 242 * @details This function is used to write a byte to specified I2C port
sahilmgandhi 18:6a4db94011d3 243 */
sahilmgandhi 18:6a4db94011d3 244 void I2C_SetData(I2C_T *i2c, uint8_t u8Data)
sahilmgandhi 18:6a4db94011d3 245 {
sahilmgandhi 18:6a4db94011d3 246 i2c->DAT = u8Data;
sahilmgandhi 18:6a4db94011d3 247 }
sahilmgandhi 18:6a4db94011d3 248
sahilmgandhi 18:6a4db94011d3 249 /**
sahilmgandhi 18:6a4db94011d3 250 * @brief Set 7-bit Slave Address and GC Mode
sahilmgandhi 18:6a4db94011d3 251 *
sahilmgandhi 18:6a4db94011d3 252 * @param[in] i2c Specify I2C port
sahilmgandhi 18:6a4db94011d3 253 * @param[in] u8SlaveNo Set the number of I2C address register (0~3)
sahilmgandhi 18:6a4db94011d3 254 * @param[in] u8SlaveAddr 7-bit slave address
sahilmgandhi 18:6a4db94011d3 255 * @param[in] u8GCMode Enable/Disable GC mode (I2C_GCMODE_ENABLE / I2C_GCMODE_DISABLE)
sahilmgandhi 18:6a4db94011d3 256 *
sahilmgandhi 18:6a4db94011d3 257 * @return None
sahilmgandhi 18:6a4db94011d3 258 *
sahilmgandhi 18:6a4db94011d3 259 * @details This function is used to set 7-bit slave addresses in I2C SLAVE ADDRESS REGISTER (I2CADDR0~3)
sahilmgandhi 18:6a4db94011d3 260 * and enable GC Mode.
sahilmgandhi 18:6a4db94011d3 261 *
sahilmgandhi 18:6a4db94011d3 262 */
sahilmgandhi 18:6a4db94011d3 263 void I2C_SetSlaveAddr(I2C_T *i2c, uint8_t u8SlaveNo, uint8_t u8SlaveAddr, uint8_t u8GCMode)
sahilmgandhi 18:6a4db94011d3 264 {
sahilmgandhi 18:6a4db94011d3 265 switch(u8SlaveNo)
sahilmgandhi 18:6a4db94011d3 266 {
sahilmgandhi 18:6a4db94011d3 267 case 1:
sahilmgandhi 18:6a4db94011d3 268 i2c->ADDR1 = (u8SlaveAddr << 1) | u8GCMode;
sahilmgandhi 18:6a4db94011d3 269 break;
sahilmgandhi 18:6a4db94011d3 270 case 2:
sahilmgandhi 18:6a4db94011d3 271 i2c->ADDR2 = (u8SlaveAddr << 1) | u8GCMode;
sahilmgandhi 18:6a4db94011d3 272 break;
sahilmgandhi 18:6a4db94011d3 273 case 3:
sahilmgandhi 18:6a4db94011d3 274 i2c->ADDR3 = (u8SlaveAddr << 1) | u8GCMode;
sahilmgandhi 18:6a4db94011d3 275 break;
sahilmgandhi 18:6a4db94011d3 276 case 0:
sahilmgandhi 18:6a4db94011d3 277 default:
sahilmgandhi 18:6a4db94011d3 278 i2c->ADDR0 = (u8SlaveAddr << 1) | u8GCMode;
sahilmgandhi 18:6a4db94011d3 279 break;
sahilmgandhi 18:6a4db94011d3 280 }
sahilmgandhi 18:6a4db94011d3 281 }
sahilmgandhi 18:6a4db94011d3 282
sahilmgandhi 18:6a4db94011d3 283 /**
sahilmgandhi 18:6a4db94011d3 284 * @brief Configure the mask bits of 7-bit Slave Address
sahilmgandhi 18:6a4db94011d3 285 *
sahilmgandhi 18:6a4db94011d3 286 * @param[in] i2c Specify I2C port
sahilmgandhi 18:6a4db94011d3 287 * @param[in] u8SlaveNo Set the number of I2C address mask register (0~3)
sahilmgandhi 18:6a4db94011d3 288 * @param[in] u8SlaveAddrMask A byte for slave address mask
sahilmgandhi 18:6a4db94011d3 289 *
sahilmgandhi 18:6a4db94011d3 290 * @return None
sahilmgandhi 18:6a4db94011d3 291 *
sahilmgandhi 18:6a4db94011d3 292 * @details This function is used to set 7-bit slave addresses.
sahilmgandhi 18:6a4db94011d3 293 *
sahilmgandhi 18:6a4db94011d3 294 */
sahilmgandhi 18:6a4db94011d3 295 void I2C_SetSlaveAddrMask(I2C_T *i2c, uint8_t u8SlaveNo, uint8_t u8SlaveAddrMask)
sahilmgandhi 18:6a4db94011d3 296 {
sahilmgandhi 18:6a4db94011d3 297 switch(u8SlaveNo)
sahilmgandhi 18:6a4db94011d3 298 {
sahilmgandhi 18:6a4db94011d3 299 case 1:
sahilmgandhi 18:6a4db94011d3 300 i2c->ADDRMSK1 = u8SlaveAddrMask << 1;
sahilmgandhi 18:6a4db94011d3 301 break;
sahilmgandhi 18:6a4db94011d3 302 case 2:
sahilmgandhi 18:6a4db94011d3 303 i2c->ADDRMSK2 = u8SlaveAddrMask << 1;
sahilmgandhi 18:6a4db94011d3 304 break;
sahilmgandhi 18:6a4db94011d3 305 case 3:
sahilmgandhi 18:6a4db94011d3 306 i2c->ADDRMSK3 = u8SlaveAddrMask << 1;
sahilmgandhi 18:6a4db94011d3 307 break;
sahilmgandhi 18:6a4db94011d3 308 case 0:
sahilmgandhi 18:6a4db94011d3 309 default:
sahilmgandhi 18:6a4db94011d3 310 i2c->ADDRMSK0 = u8SlaveAddrMask << 1;
sahilmgandhi 18:6a4db94011d3 311 break;
sahilmgandhi 18:6a4db94011d3 312 }
sahilmgandhi 18:6a4db94011d3 313 }
sahilmgandhi 18:6a4db94011d3 314
sahilmgandhi 18:6a4db94011d3 315 /**
sahilmgandhi 18:6a4db94011d3 316 * @brief Enable Time-out Counter Function and support Long Time-out
sahilmgandhi 18:6a4db94011d3 317 *
sahilmgandhi 18:6a4db94011d3 318 * @param[in] i2c Specify I2C port
sahilmgandhi 18:6a4db94011d3 319 * @param[in] u8LongTimeout Configure DIV4 to enable Long Time-out (0/1)
sahilmgandhi 18:6a4db94011d3 320 *
sahilmgandhi 18:6a4db94011d3 321 * @return None
sahilmgandhi 18:6a4db94011d3 322 *
sahilmgandhi 18:6a4db94011d3 323 * @details This function enable Time-out Counter function and configure DIV4 to support Long
sahilmgandhi 18:6a4db94011d3 324 * Time-out.
sahilmgandhi 18:6a4db94011d3 325 *
sahilmgandhi 18:6a4db94011d3 326 */
sahilmgandhi 18:6a4db94011d3 327 void I2C_EnableTimeout(I2C_T *i2c, uint8_t u8LongTimeout)
sahilmgandhi 18:6a4db94011d3 328 {
sahilmgandhi 18:6a4db94011d3 329 if(u8LongTimeout)
sahilmgandhi 18:6a4db94011d3 330 i2c->TOCTL |= I2C_TOCTL_TOCDIV4_Msk;
sahilmgandhi 18:6a4db94011d3 331 else
sahilmgandhi 18:6a4db94011d3 332 i2c->TOCTL &= ~I2C_TOCTL_TOCDIV4_Msk;
sahilmgandhi 18:6a4db94011d3 333
sahilmgandhi 18:6a4db94011d3 334 i2c->TOCTL |= I2C_TOCTL_TOCEN_Msk;
sahilmgandhi 18:6a4db94011d3 335 }
sahilmgandhi 18:6a4db94011d3 336
sahilmgandhi 18:6a4db94011d3 337 /**
sahilmgandhi 18:6a4db94011d3 338 * @brief Disable Time-out Counter Function
sahilmgandhi 18:6a4db94011d3 339 *
sahilmgandhi 18:6a4db94011d3 340 * @param[in] i2c Specify I2C port
sahilmgandhi 18:6a4db94011d3 341 *
sahilmgandhi 18:6a4db94011d3 342 * @return None
sahilmgandhi 18:6a4db94011d3 343 *
sahilmgandhi 18:6a4db94011d3 344 * @details To disable Time-out Counter function in I2CTOC register.
sahilmgandhi 18:6a4db94011d3 345 *
sahilmgandhi 18:6a4db94011d3 346 */
sahilmgandhi 18:6a4db94011d3 347 void I2C_DisableTimeout(I2C_T *i2c)
sahilmgandhi 18:6a4db94011d3 348 {
sahilmgandhi 18:6a4db94011d3 349 i2c->TOCTL &= ~I2C_TOCTL_TOCEN_Msk;
sahilmgandhi 18:6a4db94011d3 350 }
sahilmgandhi 18:6a4db94011d3 351
sahilmgandhi 18:6a4db94011d3 352 /**
sahilmgandhi 18:6a4db94011d3 353 * @brief Enable I2C Wake-up Function
sahilmgandhi 18:6a4db94011d3 354 *
sahilmgandhi 18:6a4db94011d3 355 * @param[in] i2c Specify I2C port
sahilmgandhi 18:6a4db94011d3 356 *
sahilmgandhi 18:6a4db94011d3 357 * @return None
sahilmgandhi 18:6a4db94011d3 358 *
sahilmgandhi 18:6a4db94011d3 359 * @details To enable Wake-up function of I2C Wake-up control register.
sahilmgandhi 18:6a4db94011d3 360 *
sahilmgandhi 18:6a4db94011d3 361 */
sahilmgandhi 18:6a4db94011d3 362 void I2C_EnableWakeup(I2C_T *i2c)
sahilmgandhi 18:6a4db94011d3 363 {
sahilmgandhi 18:6a4db94011d3 364 i2c->WKCTL |= I2C_WKCTL_WKEN_Msk;
sahilmgandhi 18:6a4db94011d3 365 }
sahilmgandhi 18:6a4db94011d3 366
sahilmgandhi 18:6a4db94011d3 367 /**
sahilmgandhi 18:6a4db94011d3 368 * @brief Disable I2C Wake-up Function
sahilmgandhi 18:6a4db94011d3 369 *
sahilmgandhi 18:6a4db94011d3 370 * @param[in] i2c Specify I2C port
sahilmgandhi 18:6a4db94011d3 371 *
sahilmgandhi 18:6a4db94011d3 372 * @return None
sahilmgandhi 18:6a4db94011d3 373 *
sahilmgandhi 18:6a4db94011d3 374 * @details To disable Wake-up function of I2C Wake-up control register.
sahilmgandhi 18:6a4db94011d3 375 *
sahilmgandhi 18:6a4db94011d3 376 */
sahilmgandhi 18:6a4db94011d3 377 void I2C_DisableWakeup(I2C_T *i2c)
sahilmgandhi 18:6a4db94011d3 378 {
sahilmgandhi 18:6a4db94011d3 379 i2c->WKCTL &= ~I2C_WKCTL_WKEN_Msk;
sahilmgandhi 18:6a4db94011d3 380 }
sahilmgandhi 18:6a4db94011d3 381
sahilmgandhi 18:6a4db94011d3 382 /**
sahilmgandhi 18:6a4db94011d3 383 * @brief To get SMBus Status
sahilmgandhi 18:6a4db94011d3 384 *
sahilmgandhi 18:6a4db94011d3 385 * @param[in] i2c Specify I2C port
sahilmgandhi 18:6a4db94011d3 386 *
sahilmgandhi 18:6a4db94011d3 387 * @return SMBus status
sahilmgandhi 18:6a4db94011d3 388 *
sahilmgandhi 18:6a4db94011d3 389 * @details To get the Bus Management status of I2C_BUSSTS register
sahilmgandhi 18:6a4db94011d3 390 *
sahilmgandhi 18:6a4db94011d3 391 */
sahilmgandhi 18:6a4db94011d3 392 uint32_t I2C_SMBusGetStatus(I2C_T *i2c)
sahilmgandhi 18:6a4db94011d3 393 {
sahilmgandhi 18:6a4db94011d3 394 return (i2c->BUSSTS);
sahilmgandhi 18:6a4db94011d3 395 }
sahilmgandhi 18:6a4db94011d3 396
sahilmgandhi 18:6a4db94011d3 397 /**
sahilmgandhi 18:6a4db94011d3 398 * @brief Clear SMBus Interrupt Flag
sahilmgandhi 18:6a4db94011d3 399 *
sahilmgandhi 18:6a4db94011d3 400 * @param[in] i2c Specify I2C port
sahilmgandhi 18:6a4db94011d3 401 * @param[in] u8SMBusIntFlag Specify SMBus interrupt flag
sahilmgandhi 18:6a4db94011d3 402 *
sahilmgandhi 18:6a4db94011d3 403 * @return None
sahilmgandhi 18:6a4db94011d3 404 *
sahilmgandhi 18:6a4db94011d3 405 * @details To clear flags of I2C_BUSSTS status register if interrupt set.
sahilmgandhi 18:6a4db94011d3 406 *
sahilmgandhi 18:6a4db94011d3 407 */
sahilmgandhi 18:6a4db94011d3 408 void I2C_SMBusClearInterruptFlag(I2C_T *i2c, uint8_t u8SMBusIntFlag)
sahilmgandhi 18:6a4db94011d3 409 {
sahilmgandhi 18:6a4db94011d3 410 i2c->BUSSTS |= u8SMBusIntFlag;
sahilmgandhi 18:6a4db94011d3 411 }
sahilmgandhi 18:6a4db94011d3 412
sahilmgandhi 18:6a4db94011d3 413 /**
sahilmgandhi 18:6a4db94011d3 414 * @brief Set SMBus Bytes Counts of Transmission or Reception
sahilmgandhi 18:6a4db94011d3 415 *
sahilmgandhi 18:6a4db94011d3 416 * @param[in] i2c Specify I2C port
sahilmgandhi 18:6a4db94011d3 417 * @param[in] u32PktSize Transmit / Receive bytes
sahilmgandhi 18:6a4db94011d3 418 *
sahilmgandhi 18:6a4db94011d3 419 * @return None
sahilmgandhi 18:6a4db94011d3 420 *
sahilmgandhi 18:6a4db94011d3 421 * @details The transmission or receive byte number in one transaction when PECEN is set. The maximum is 255 bytes.
sahilmgandhi 18:6a4db94011d3 422 *
sahilmgandhi 18:6a4db94011d3 423 */
sahilmgandhi 18:6a4db94011d3 424 void I2C_SMBusSetPacketByteCount(I2C_T *i2c, uint32_t u32PktSize)
sahilmgandhi 18:6a4db94011d3 425 {
sahilmgandhi 18:6a4db94011d3 426 i2c->PKTSIZE = u32PktSize;
sahilmgandhi 18:6a4db94011d3 427 }
sahilmgandhi 18:6a4db94011d3 428
sahilmgandhi 18:6a4db94011d3 429 /**
sahilmgandhi 18:6a4db94011d3 430 * @brief Init SMBus Host/Device Mode
sahilmgandhi 18:6a4db94011d3 431 *
sahilmgandhi 18:6a4db94011d3 432 * @param[in] i2c Specify I2C port
sahilmgandhi 18:6a4db94011d3 433 * @param[in] u8HostDevice Init SMBus port mode(I2C_SMBH_ENABLE(1)/I2C_SMBD_ENABLE(0))
sahilmgandhi 18:6a4db94011d3 434 *
sahilmgandhi 18:6a4db94011d3 435 * @return None
sahilmgandhi 18:6a4db94011d3 436 *
sahilmgandhi 18:6a4db94011d3 437 * @details Using SMBus communication must specify the port is a Host or a Device.
sahilmgandhi 18:6a4db94011d3 438 *
sahilmgandhi 18:6a4db94011d3 439 */
sahilmgandhi 18:6a4db94011d3 440 void I2C_SMBusOpen(I2C_T *i2c, uint8_t u8HostDevice)
sahilmgandhi 18:6a4db94011d3 441 {
sahilmgandhi 18:6a4db94011d3 442 /* Clear BMHEN, BMDEN of BUSCTL Register */
sahilmgandhi 18:6a4db94011d3 443 i2c->BUSCTL &= ~(I2C_BUSCTL_BMHEN_Msk | I2C_BUSCTL_BMDEN_Msk);
sahilmgandhi 18:6a4db94011d3 444
sahilmgandhi 18:6a4db94011d3 445 /* Set SMBus Host/Device Mode, and enable Bus Management*/
sahilmgandhi 18:6a4db94011d3 446 if(u8HostDevice == I2C_SMBH_ENABLE)
sahilmgandhi 18:6a4db94011d3 447 i2c->BUSCTL |= (I2C_BUSCTL_BMHEN_Msk | I2C_BUSCTL_BUSEN_Msk);
sahilmgandhi 18:6a4db94011d3 448 else
sahilmgandhi 18:6a4db94011d3 449 i2c->BUSCTL |= (I2C_BUSCTL_BMDEN_Msk | I2C_BUSCTL_BUSEN_Msk);
sahilmgandhi 18:6a4db94011d3 450 }
sahilmgandhi 18:6a4db94011d3 451
sahilmgandhi 18:6a4db94011d3 452 /**
sahilmgandhi 18:6a4db94011d3 453 * @brief Disable SMBus function
sahilmgandhi 18:6a4db94011d3 454 *
sahilmgandhi 18:6a4db94011d3 455 * @param[in] i2c Specify I2C port
sahilmgandhi 18:6a4db94011d3 456 *
sahilmgandhi 18:6a4db94011d3 457 * @return None
sahilmgandhi 18:6a4db94011d3 458 *
sahilmgandhi 18:6a4db94011d3 459 * @details Disable all SMBus function include Bus disable, CRC check, Acknowledge by manual, Host/Device Mode.
sahilmgandhi 18:6a4db94011d3 460 *
sahilmgandhi 18:6a4db94011d3 461 */
sahilmgandhi 18:6a4db94011d3 462 void I2C_SMBusClose(I2C_T *i2c)
sahilmgandhi 18:6a4db94011d3 463 {
sahilmgandhi 18:6a4db94011d3 464
sahilmgandhi 18:6a4db94011d3 465 i2c->BUSCTL = 0x00;
sahilmgandhi 18:6a4db94011d3 466 }
sahilmgandhi 18:6a4db94011d3 467
sahilmgandhi 18:6a4db94011d3 468 /**
sahilmgandhi 18:6a4db94011d3 469 * @brief Enable SMBus PEC Transmit Function
sahilmgandhi 18:6a4db94011d3 470 *
sahilmgandhi 18:6a4db94011d3 471 * @param[in] i2c Specify I2C port
sahilmgandhi 18:6a4db94011d3 472 * @param[in] u8PECTxEn CRC transmit enable(PECTX_ENABLE) or disable(PECTX_DISABLE)
sahilmgandhi 18:6a4db94011d3 473 *
sahilmgandhi 18:6a4db94011d3 474 * @return None
sahilmgandhi 18:6a4db94011d3 475 *
sahilmgandhi 18:6a4db94011d3 476 * @details When enable CRC check function, the Host or Device needs to transmit CRC byte.
sahilmgandhi 18:6a4db94011d3 477 *
sahilmgandhi 18:6a4db94011d3 478 */
sahilmgandhi 18:6a4db94011d3 479 void I2C_SMBusPECTxEnable(I2C_T *i2c, uint8_t u8PECTxEn)
sahilmgandhi 18:6a4db94011d3 480 {
sahilmgandhi 18:6a4db94011d3 481 i2c->BUSCTL &= ~I2C_BUSCTL_PECTXEN_Msk;
sahilmgandhi 18:6a4db94011d3 482
sahilmgandhi 18:6a4db94011d3 483 if(u8PECTxEn)
sahilmgandhi 18:6a4db94011d3 484 i2c->BUSCTL |= (I2C_BUSCTL_PECEN_Msk | I2C_BUSCTL_PECTXEN_Msk);
sahilmgandhi 18:6a4db94011d3 485 else
sahilmgandhi 18:6a4db94011d3 486 i2c->BUSCTL |= I2C_BUSCTL_PECEN_Msk;
sahilmgandhi 18:6a4db94011d3 487 }
sahilmgandhi 18:6a4db94011d3 488
sahilmgandhi 18:6a4db94011d3 489 /**
sahilmgandhi 18:6a4db94011d3 490 * @brief Get SMBus CRC value
sahilmgandhi 18:6a4db94011d3 491 *
sahilmgandhi 18:6a4db94011d3 492 * @param[in] i2c Specify I2C port
sahilmgandhi 18:6a4db94011d3 493 *
sahilmgandhi 18:6a4db94011d3 494 * @return A byte is packet error check value
sahilmgandhi 18:6a4db94011d3 495 *
sahilmgandhi 18:6a4db94011d3 496 * @details The CRC check value after a transmission or a reception by count by using CRC8
sahilmgandhi 18:6a4db94011d3 497 *
sahilmgandhi 18:6a4db94011d3 498 */
sahilmgandhi 18:6a4db94011d3 499 uint8_t I2C_SMBusGetPECValue(I2C_T *i2c)
sahilmgandhi 18:6a4db94011d3 500 {
sahilmgandhi 18:6a4db94011d3 501 return i2c->PKTCRC;
sahilmgandhi 18:6a4db94011d3 502 }
sahilmgandhi 18:6a4db94011d3 503
sahilmgandhi 18:6a4db94011d3 504 /**
sahilmgandhi 18:6a4db94011d3 505 * @brief Calculate Time-out of SMBus idle period
sahilmgandhi 18:6a4db94011d3 506 *
sahilmgandhi 18:6a4db94011d3 507 * @param[in] i2c Specify I2C port
sahilmgandhi 18:6a4db94011d3 508 * @param[in] us Time-out length(us)
sahilmgandhi 18:6a4db94011d3 509 * @param[in] u32Hclk I2C peripheral clock frequency
sahilmgandhi 18:6a4db94011d3 510 *
sahilmgandhi 18:6a4db94011d3 511 * @return None
sahilmgandhi 18:6a4db94011d3 512 *
sahilmgandhi 18:6a4db94011d3 513 * @details This function is used to set SMBus Time-out length when bus is in Idle state.
sahilmgandhi 18:6a4db94011d3 514 *
sahilmgandhi 18:6a4db94011d3 515 */
sahilmgandhi 18:6a4db94011d3 516
sahilmgandhi 18:6a4db94011d3 517 void I2C_SMBusIdleTimeout(I2C_T *i2c, uint32_t us, uint32_t u32Hclk)
sahilmgandhi 18:6a4db94011d3 518 {
sahilmgandhi 18:6a4db94011d3 519 uint32_t u32Div, u32Hclk_kHz;
sahilmgandhi 18:6a4db94011d3 520
sahilmgandhi 18:6a4db94011d3 521 i2c->BUSCTL |= I2C_BUSCTL_TIDLE_Msk;
sahilmgandhi 18:6a4db94011d3 522 u32Hclk_kHz = u32Hclk / 1000;
sahilmgandhi 18:6a4db94011d3 523 u32Div = (((us * u32Hclk_kHz) / 1000) >> 2) - 1;
sahilmgandhi 18:6a4db94011d3 524 if(u32Div > 255)
sahilmgandhi 18:6a4db94011d3 525 {
sahilmgandhi 18:6a4db94011d3 526 i2c->BUSTOUT = 0xFF;
sahilmgandhi 18:6a4db94011d3 527 }
sahilmgandhi 18:6a4db94011d3 528 else
sahilmgandhi 18:6a4db94011d3 529 {
sahilmgandhi 18:6a4db94011d3 530 i2c->BUSTOUT = u32Div;
sahilmgandhi 18:6a4db94011d3 531 }
sahilmgandhi 18:6a4db94011d3 532
sahilmgandhi 18:6a4db94011d3 533 }
sahilmgandhi 18:6a4db94011d3 534
sahilmgandhi 18:6a4db94011d3 535 /**
sahilmgandhi 18:6a4db94011d3 536 * @brief Calculate Time-out of SMBus active period
sahilmgandhi 18:6a4db94011d3 537 *
sahilmgandhi 18:6a4db94011d3 538 * @param[in] i2c Specify I2C port
sahilmgandhi 18:6a4db94011d3 539 * @param[in] ms Time-out length(ms)
sahilmgandhi 18:6a4db94011d3 540 * @param[in] u32Pclk peripheral clock frequency
sahilmgandhi 18:6a4db94011d3 541 *
sahilmgandhi 18:6a4db94011d3 542 * @return None
sahilmgandhi 18:6a4db94011d3 543 *
sahilmgandhi 18:6a4db94011d3 544 * @details This function is used to set SMBus Time-out length when bus is in active state.
sahilmgandhi 18:6a4db94011d3 545 * Time-out length is calculate the SCL line "one clock" pull low timing.
sahilmgandhi 18:6a4db94011d3 546 *
sahilmgandhi 18:6a4db94011d3 547 */
sahilmgandhi 18:6a4db94011d3 548
sahilmgandhi 18:6a4db94011d3 549 void I2C_SMBusTimeout(I2C_T *i2c, uint32_t ms, uint32_t u32Pclk)
sahilmgandhi 18:6a4db94011d3 550 {
sahilmgandhi 18:6a4db94011d3 551 uint32_t u32Div, u32Pclk_kHz;
sahilmgandhi 18:6a4db94011d3 552
sahilmgandhi 18:6a4db94011d3 553 i2c->BUSCTL &= ~I2C_BUSCTL_TIDLE_Msk;
sahilmgandhi 18:6a4db94011d3 554
sahilmgandhi 18:6a4db94011d3 555 /* DIV4 disabled */
sahilmgandhi 18:6a4db94011d3 556 i2c->TOCTL &= ~I2C_TOCTL_TOCEN_Msk;
sahilmgandhi 18:6a4db94011d3 557 u32Pclk_kHz = u32Pclk / 1000;
sahilmgandhi 18:6a4db94011d3 558 u32Div = ((ms * u32Pclk_kHz) / (16 * 1024)) - 1;
sahilmgandhi 18:6a4db94011d3 559 if(u32Div <= 0xFF)
sahilmgandhi 18:6a4db94011d3 560 {
sahilmgandhi 18:6a4db94011d3 561 i2c->BUSTOUT = u32Div;
sahilmgandhi 18:6a4db94011d3 562 return;
sahilmgandhi 18:6a4db94011d3 563 }
sahilmgandhi 18:6a4db94011d3 564
sahilmgandhi 18:6a4db94011d3 565 /* DIV4 enabled */
sahilmgandhi 18:6a4db94011d3 566 i2c->TOCTL |= I2C_TOCTL_TOCEN_Msk;
sahilmgandhi 18:6a4db94011d3 567
sahilmgandhi 18:6a4db94011d3 568 i2c->BUSTOUT = (((ms * u32Pclk_kHz) / (16 * 1024 * 4)) - 1) & 0xFF; //The max value is 255
sahilmgandhi 18:6a4db94011d3 569 }
sahilmgandhi 18:6a4db94011d3 570
sahilmgandhi 18:6a4db94011d3 571 /**
sahilmgandhi 18:6a4db94011d3 572 * @brief Calculate Cumulative Clock low Time-out of SMBus active period
sahilmgandhi 18:6a4db94011d3 573 *
sahilmgandhi 18:6a4db94011d3 574 * @param[in] i2c Specify I2C port
sahilmgandhi 18:6a4db94011d3 575 * @param[in] ms Time-out length(ms)
sahilmgandhi 18:6a4db94011d3 576 * @param[in] u32Pclk peripheral clock frequency
sahilmgandhi 18:6a4db94011d3 577 *
sahilmgandhi 18:6a4db94011d3 578 * @return None
sahilmgandhi 18:6a4db94011d3 579 *
sahilmgandhi 18:6a4db94011d3 580 * @details This function is used to set SMBus Time-out length when bus is in Active state.
sahilmgandhi 18:6a4db94011d3 581 * Time-out length is calculate the SCL line "clocks" low cumulative timing.
sahilmgandhi 18:6a4db94011d3 582 *
sahilmgandhi 18:6a4db94011d3 583 */
sahilmgandhi 18:6a4db94011d3 584
sahilmgandhi 18:6a4db94011d3 585 void I2C_SMBusClockLoTimeout(I2C_T *i2c, uint32_t ms, uint32_t u32Pclk)
sahilmgandhi 18:6a4db94011d3 586 {
sahilmgandhi 18:6a4db94011d3 587 uint32_t u32Div, u32Pclk_kHz;
sahilmgandhi 18:6a4db94011d3 588
sahilmgandhi 18:6a4db94011d3 589 i2c->BUSCTL &= ~I2C_BUSCTL_TIDLE_Msk;
sahilmgandhi 18:6a4db94011d3 590
sahilmgandhi 18:6a4db94011d3 591 /* DIV4 disabled */
sahilmgandhi 18:6a4db94011d3 592 i2c->TOCTL &= ~I2C_TOCTL_TOCEN_Msk;
sahilmgandhi 18:6a4db94011d3 593 u32Pclk_kHz = u32Pclk / 1000;
sahilmgandhi 18:6a4db94011d3 594 u32Div = ((ms * u32Pclk_kHz) / (16 * 1024)) - 1;
sahilmgandhi 18:6a4db94011d3 595 if(u32Div <= 0xFF)
sahilmgandhi 18:6a4db94011d3 596 {
sahilmgandhi 18:6a4db94011d3 597 i2c->CLKTOUT = u32Div;
sahilmgandhi 18:6a4db94011d3 598 return;
sahilmgandhi 18:6a4db94011d3 599 }
sahilmgandhi 18:6a4db94011d3 600
sahilmgandhi 18:6a4db94011d3 601 /* DIV4 enabled */
sahilmgandhi 18:6a4db94011d3 602 i2c->TOCTL |= I2C_TOCTL_TOCEN_Msk;
sahilmgandhi 18:6a4db94011d3 603 i2c->CLKTOUT = (((ms * u32Pclk_kHz) / (16 * 1024 * 4)) - 1) & 0xFF; //The max value is 255
sahilmgandhi 18:6a4db94011d3 604 }
sahilmgandhi 18:6a4db94011d3 605
sahilmgandhi 18:6a4db94011d3 606 /*@}*/ /* end of group I2C_EXPORTED_FUNCTIONS */
sahilmgandhi 18:6a4db94011d3 607
sahilmgandhi 18:6a4db94011d3 608 /*@}*/ /* end of group I2C_Driver */
sahilmgandhi 18:6a4db94011d3 609
sahilmgandhi 18:6a4db94011d3 610 /*@}*/ /* end of group Standard_Driver */
sahilmgandhi 18:6a4db94011d3 611
sahilmgandhi 18:6a4db94011d3 612 /*** (C) COPYRIGHT 2014~2015 Nuvoton Technology Corp. ***/