Lines Matching refs:i2c
167 static void flushRx(I2C_TypeDef *i2c) in flushRx() argument
169 while (i2c->STATUS & I2C_STATUS_RXDATAV) { in flushRx()
170 i2c->RXDATA; in flushRx()
176 I2C_IntClear(i2c, I2C_IF_RXDATAV); in flushRx()
203 uint32_t I2C_BusFreqGet(I2C_TypeDef *i2c) in I2C_BusFreqGet() argument
211 if (i2c == I2C0) { in I2C_BusFreqGet()
214 } else if (i2c == I2C1) { in I2C_BusFreqGet()
218 } else if (i2c == I2C2) { in I2C_BusFreqGet()
226 n = (uint32_t)i2cNSum[(i2c->CTRL & _I2C_CTRL_CLHR_MASK) in I2C_BusFreqGet()
228 return freqHfper / ((n * (i2c->CLKDIV + 1)) + I2C_CR_MAX); in I2C_BusFreqGet()
268 void I2C_BusFreqSet(I2C_TypeDef *i2c, in I2C_BusFreqSet() argument
286 i2c->CTRL &= ~_I2C_CTRL_CLHR_MASK; in I2C_BusFreqSet()
287 BUS_RegMaskedWrite(&i2c->CTRL, in I2C_BusFreqSet()
292 if (i2c == I2C0) { in I2C_BusFreqSet()
295 } else if (i2c == I2C1) { in I2C_BusFreqSet()
299 } else if (i2c == I2C2) { in I2C_BusFreqSet()
309 if (i2c->CTRL & I2C_CTRL_SLAVE) { in I2C_BusFreqSet()
384 if ((i2c->CTRL & I2C_CTRL_SLAVE) && (div == 0)) { in I2C_BusFreqSet()
387 i2c->CLKDIV = (uint32_t)div; in I2C_BusFreqSet()
403 void I2C_Enable(I2C_TypeDef *i2c, bool enable) in I2C_Enable() argument
405 EFM_ASSERT(I2C_REF_VALID(i2c)); in I2C_Enable()
408 BUS_RegBitWrite(&(i2c->EN), _I2C_EN_EN_SHIFT, enable); in I2C_Enable()
410 BUS_RegBitWrite(&(i2c->CTRL), _I2C_CTRL_EN_SHIFT, enable); in I2C_Enable()
424 void I2C_Init(I2C_TypeDef *i2c, const I2C_Init_TypeDef *init) in I2C_Init() argument
426 EFM_ASSERT(I2C_REF_VALID(i2c)); in I2C_Init()
428 i2c->IEN = 0; in I2C_Init()
429 I2C_IntClear(i2c, _I2C_IF_MASK); in I2C_Init()
432 BUS_RegBitWrite(&(i2c->CTRL), _I2C_CTRL_SLAVE_SHIFT, init->master ? 0 : 1); in I2C_Init()
434 I2C_BusFreqSet(i2c, init->refFreq, init->freq, init->clhr); in I2C_Init()
436 I2C_Enable(i2c, init->enable); in I2C_Init()
450 void I2C_Reset(I2C_TypeDef *i2c) in I2C_Reset() argument
453 i2c->CMD = I2C_CMD_CLEARPC | I2C_CMD_CLEARTX | I2C_CMD_ABORT; in I2C_Reset()
454 i2c->CTRL = _I2C_CTRL_RESETVALUE; in I2C_Reset()
455 i2c->CLKDIV = _I2C_CLKDIV_RESETVALUE; in I2C_Reset()
456 i2c->SADDR = _I2C_SADDR_RESETVALUE; in I2C_Reset()
457 i2c->SADDRMASK = _I2C_SADDRMASK_RESETVALUE; in I2C_Reset()
458 i2c->IEN = _I2C_IEN_RESETVALUE; in I2C_Reset()
460 i2c->EN = _I2C_EN_RESETVALUE; in I2C_Reset()
464 flushRx(i2c); in I2C_Reset()
465 I2C_IntClear(i2c, _I2C_IF_MASK); in I2C_Reset()
505 I2C_TransferReturn_TypeDef I2C_Transfer(I2C_TypeDef *i2c) in I2C_Transfer() argument
513 EFM_ASSERT(I2C_REF_VALID(i2c)); in I2C_Transfer()
516 if (i2c == I2C0) { in I2C_Transfer()
520 else if (i2c == I2C1) { in I2C_Transfer()
525 else if (i2c == I2C2) { in I2C_Transfer()
530 else if (i2c == I2C3) { in I2C_Transfer()
540 pending = i2c->IF; in I2C_Transfer()
582 i2c->TXDATA = tmp;/* Data not transmitted until the START is sent. */ in I2C_Transfer()
583 i2c->CMD = I2C_CMD_START; in I2C_Transfer()
592 I2C_IntClear(i2c, I2C_IF_NACK); in I2C_Transfer()
595 i2c->CMD = I2C_CMD_STOP; in I2C_Transfer()
597 I2C_IntClear(i2c, I2C_IF_ACK); in I2C_Transfer()
602 i2c->TXDATA = (uint32_t)(seq->addr) & 0xff; in I2C_Transfer()
608 i2c->CMD = I2C_CMD_NACK; in I2C_Transfer()
624 I2C_IntClear(i2c, I2C_IF_NACK); in I2C_Transfer()
627 i2c->CMD = I2C_CMD_STOP; in I2C_Transfer()
629 I2C_IntClear(i2c, I2C_IF_ACK); in I2C_Transfer()
661 i2c->CMD = I2C_CMD_NACK; in I2C_Transfer()
668 i2c->CMD = I2C_CMD_START; in I2C_Transfer()
669 i2c->TXDATA = tmp; in I2C_Transfer()
679 I2C_IntClear(i2c, I2C_IF_NACK); in I2C_Transfer()
682 i2c->CMD = I2C_CMD_STOP; in I2C_Transfer()
684 I2C_IntClear(i2c, I2C_IF_ACK); in I2C_Transfer()
716 i2c->CMD = I2C_CMD_STOP; in I2C_Transfer()
726 i2c->TXDATA = (uint32_t)(seq->buf[transfer->bufIndx].data[transfer->offset++]); in I2C_Transfer()
736 I2C_IntClear(i2c, I2C_IF_NACK); in I2C_Transfer()
739 i2c->CMD = I2C_CMD_STOP; in I2C_Transfer()
741 I2C_IntClear(i2c, I2C_IF_ACK); in I2C_Transfer()
757 data = (uint8_t)(i2c->RXDATA); in I2C_Transfer()
763 uint32_t status = i2c->STATUS; in I2C_Transfer()
768 (void)i2c->RXDATA; in I2C_Transfer()
770 I2C_IntClear(i2c, I2C_IF_RXUF); in I2C_Transfer()
777 I2C_IntClear(i2c, I2C_IF_RXDATAV); in I2C_Transfer()
788 i2c->CMD = I2C_CMD_STOP; in I2C_Transfer()
791 i2c->CMD = I2C_CMD_ACK; in I2C_Transfer()
797 i2c->CMD = I2C_CMD_NACK; in I2C_Transfer()
809 I2C_IntClear(i2c, I2C_IF_MSTOP); in I2C_Transfer()
828 i2c->IEN = 0; in I2C_Transfer()
868 I2C_TransferReturn_TypeDef I2C_TransferInit(I2C_TypeDef *i2c, in I2C_TransferInit() argument
873 EFM_ASSERT(I2C_REF_VALID(i2c)); in I2C_TransferInit()
877 if (i2c == I2C0) { in I2C_TransferInit()
881 else if (i2c == I2C1) { in I2C_TransferInit()
886 else if (i2c == I2C2) { in I2C_TransferInit()
891 else if (i2c == I2C3) { in I2C_TransferInit()
901 if (i2c->STATE & I2C_STATE_BUSY) { in I2C_TransferInit()
902 i2c->CMD = I2C_CMD_ABORT; in I2C_TransferInit()
923 i2c->CMD = I2C_CMD_CLEARPC | I2C_CMD_CLEARTX; in I2C_TransferInit()
924 flushRx(i2c); in I2C_TransferInit()
927 I2C_IntClear(i2c, _I2C_IF_MASK); in I2C_TransferInit()
932 i2c->IEN |= I2C_IEN_NACK | I2C_IEN_ACK | I2C_IEN_MSTOP in I2C_TransferInit()
936 return I2C_Transfer(i2c); in I2C_TransferInit()