diff --git a/XilinxProcessorIPLib/drivers/iicps/src/xiicps.c b/XilinxProcessorIPLib/drivers/iicps/src/xiicps.c index e05b71a6..47d09316 100755 --- a/XilinxProcessorIPLib/drivers/iicps/src/xiicps.c +++ b/XilinxProcessorIPLib/drivers/iicps/src/xiicps.c @@ -47,6 +47,7 @@ * 2.1 hk 04/25/14 Explicitly reset CR and clear FIFO in Abort function * and state the same in the comments. CR# 784254. * Fix for CR# 761060 - provision for repeated start. +* 2.3 sk 10/07/14 Repeated start feature removed. * * * @@ -129,9 +130,6 @@ int XIicPs_CfgInitialize(XIicPs *InstancePtr, XIicPs_Config *ConfigPtr, */ InstancePtr->Options = XIicPs_GetOptions(InstancePtr); - /* Initialize repeated start flag to 0 */ - InstancePtr->IsRepeatedStart = 0; - return XST_SUCCESS; } diff --git a/XilinxProcessorIPLib/drivers/iicps/src/xiicps.h b/XilinxProcessorIPLib/drivers/iicps/src/xiicps.h index 4085494b..18ad244f 100755 --- a/XilinxProcessorIPLib/drivers/iicps/src/xiicps.h +++ b/XilinxProcessorIPLib/drivers/iicps/src/xiicps.h @@ -167,6 +167,7 @@ * 2.2 hk 08/23/14 Slave monitor mode changes - clear FIFO, enable * read mode and clear transfer size register. * Disable NACK to avoid interrupts on each retry. +* 2.3 sk 10/07/14 Repeated start feature deleted. * * * @@ -199,7 +200,6 @@ extern "C" { #define XIICPS_7_BIT_ADDR_OPTION 0x01 /**< 7-bit address mode */ #define XIICPS_10_BIT_ADDR_OPTION 0x02 /**< 10-bit address mode */ #define XIICPS_SLAVE_MON_OPTION 0x04 /**< Slave monitor mode */ -#define XIICPS_REP_START_OPTION 0x08 /**< Repeated Start */ /*@}*/ /** @name Callback events @@ -275,7 +275,6 @@ typedef struct { int UpdateTxSize; /* If tx size register has to be updated */ int IsSend; /* Whether master is sending or receiving */ - int IsRepeatedStart; /* Indicates if user set repeated start */ XIicPs_IntrHandler StatusHandler; /* Event handler function */ void *CallBackRef; /* Callback reference for event handler */ diff --git a/XilinxProcessorIPLib/drivers/iicps/src/xiicps_master.c b/XilinxProcessorIPLib/drivers/iicps/src/xiicps_master.c index 42c4bc7d..917ebe6f 100755 --- a/XilinxProcessorIPLib/drivers/iicps/src/xiicps_master.c +++ b/XilinxProcessorIPLib/drivers/iicps/src/xiicps_master.c @@ -55,6 +55,7 @@ * Disable NACK to avoid interrupts on each retry. * 2.3 sk 10/06/14 Fill transmit fifo before address register when sending. * Replaced XIICPS_DATA_INTR_DEPTH with XIICPS_FIFO_DEPTH. +* Repeated start feature removed. * * * @@ -115,21 +116,21 @@ void XIicPs_MasterSend(XIicPs *InstancePtr, u8 *MsgPtr, int ByteCount, InstancePtr->RecvBufferPtr = NULL; InstancePtr->IsSend = 1; - /* - * Set repeated start if sending more than FIFO of data. - */ - if ((InstancePtr->IsRepeatedStart) || - (ByteCount > XIICPS_FIFO_DEPTH)) { - XIicPs_WriteReg(BaseAddr, XIICPS_CR_OFFSET, - XIicPs_ReadReg(BaseAddr, XIICPS_CR_OFFSET) | - XIICPS_CR_HOLD_MASK); - } /* * Setup as a master sending role. */ XIicPs_SetupMaster(InstancePtr, SENDING_ROLE); + /* + * Set HOLD bit if sending more than FIFO of data. + */ + if (ByteCount > XIICPS_FIFO_DEPTH) { + XIicPs_WriteReg(BaseAddr, XIICPS_CR_OFFSET, + XIicPs_ReadReg(BaseAddr, XIICPS_CR_OFFSET) | + XIICPS_CR_HOLD_MASK); + } + TransmitFifoFill(InstancePtr); /* @@ -180,9 +181,7 @@ void XIicPs_MasterRecv(XIicPs *InstancePtr, u8 *MsgPtr, int ByteCount, InstancePtr->IsSend = 0; InstancePtr->UpdateTxSize = 0; - if ((ByteCount > XIICPS_FIFO_DEPTH) || - (InstancePtr->IsRepeatedStart)) - { + if (ByteCount > XIICPS_FIFO_DEPTH) { XIicPs_WriteReg(BaseAddr, XIICPS_CR_OFFSET, XIicPs_ReadReg(BaseAddr, XIICPS_CR_OFFSET) | XIICPS_CR_HOLD_MASK); @@ -258,8 +257,7 @@ int XIicPs_MasterSendPolled(XIicPs *InstancePtr, u8 *MsgPtr, InstancePtr->SendBufferPtr = MsgPtr; InstancePtr->SendByteCount = ByteCount; - if ((InstancePtr->IsRepeatedStart) || - (ByteCount > XIICPS_FIFO_DEPTH)) { + if (ByteCount > XIICPS_FIFO_DEPTH) { XIicPs_WriteReg(BaseAddr, XIICPS_CR_OFFSET, XIicPs_ReadReg(BaseAddr, XIICPS_CR_OFFSET) | XIICPS_CR_HOLD_MASK); @@ -325,11 +323,9 @@ int XIicPs_MasterSendPolled(XIicPs *InstancePtr, u8 *MsgPtr, } } - if (!(InstancePtr->IsRepeatedStart)) { - XIicPs_WriteReg(BaseAddr, XIICPS_CR_OFFSET, - XIicPs_ReadReg(BaseAddr,XIICPS_CR_OFFSET) & - (~XIICPS_CR_HOLD_MASK)); - } + XIicPs_WriteReg(BaseAddr, XIICPS_CR_OFFSET, + XIicPs_ReadReg(BaseAddr,XIICPS_CR_OFFSET) & + (~XIICPS_CR_HOLD_MASK)); return XST_SUCCESS; } @@ -376,17 +372,15 @@ int XIicPs_MasterRecvPolled(XIicPs *InstancePtr, u8 *MsgPtr, InstancePtr->RecvBufferPtr = MsgPtr; InstancePtr->RecvByteCount = ByteCount; - if((ByteCount > XIICPS_FIFO_DEPTH) || - (InstancePtr->IsRepeatedStart)) - { + XIicPs_SetupMaster(InstancePtr, RECVING_ROLE); + + if(ByteCount > XIICPS_FIFO_DEPTH) { XIicPs_WriteReg(BaseAddr, XIICPS_CR_OFFSET, XIicPs_ReadReg(BaseAddr, XIICPS_CR_OFFSET) | XIICPS_CR_HOLD_MASK); IsHold = 1; } - XIicPs_SetupMaster(InstancePtr, RECVING_ROLE); - /* * Clear the interrupt status register before use it to monitor. */ @@ -425,8 +419,7 @@ int XIicPs_MasterRecvPolled(XIicPs *InstancePtr, u8 *MsgPtr, while (StatusReg & XIICPS_SR_RXDV_MASK) { if ((InstancePtr->RecvByteCount < - XIICPS_DATA_INTR_DEPTH) && IsHold && - (!(InstancePtr->IsRepeatedStart))) { + XIICPS_DATA_INTR_DEPTH) && IsHold) { IsHold = 0; XIicPs_WriteReg(BaseAddr, XIICPS_CR_OFFSET, XIicPs_ReadReg(BaseAddr, @@ -472,11 +465,9 @@ int XIicPs_MasterRecvPolled(XIicPs *InstancePtr, u8 *MsgPtr, IntrStatusReg = XIicPs_ReadReg(BaseAddr, XIICPS_ISR_OFFSET); } - if (!(InstancePtr->IsRepeatedStart)) { - XIicPs_WriteReg(BaseAddr, XIICPS_CR_OFFSET, - XIicPs_ReadReg(BaseAddr,XIICPS_CR_OFFSET) & - (~XIICPS_CR_HOLD_MASK)); - } + XIicPs_WriteReg(BaseAddr, XIICPS_CR_OFFSET, + XIicPs_ReadReg(BaseAddr,XIICPS_CR_OFFSET) & + (~XIICPS_CR_HOLD_MASK)); if (IntrStatusReg & Intrs) { return XST_FAILURE; @@ -683,8 +674,7 @@ void XIicPs_MasterInterruptHandler(XIicPs *InstancePtr) while (XIicPs_ReadReg(BaseAddr, XIICPS_SR_OFFSET) & XIICPS_SR_RXDV_MASK) { if ((InstancePtr->RecvByteCount < - XIICPS_DATA_INTR_DEPTH) && IsHold && - (!(InstancePtr->IsRepeatedStart))) { + XIICPS_DATA_INTR_DEPTH) && IsHold) { IsHold = 0; XIicPs_WriteReg(BaseAddr, XIICPS_CR_OFFSET, XIicPs_ReadReg(BaseAddr, @@ -734,12 +724,10 @@ void XIicPs_MasterInterruptHandler(XIicPs *InstancePtr) * If all done, tell the application. */ if (InstancePtr->RecvByteCount == 0){ - if (!(InstancePtr->IsRepeatedStart)) { - XIicPs_WriteReg(BaseAddr, XIICPS_CR_OFFSET, - XIicPs_ReadReg(BaseAddr, - XIICPS_CR_OFFSET) & - (~XIICPS_CR_HOLD_MASK)); - } + XIicPs_WriteReg(BaseAddr, XIICPS_CR_OFFSET, + XIicPs_ReadReg(BaseAddr, + XIICPS_CR_OFFSET) & + (~XIICPS_CR_HOLD_MASK)); StatusEvent |= XIICPS_EVENT_COMPLETE_RECV; } } @@ -753,12 +741,10 @@ void XIicPs_MasterInterruptHandler(XIicPs *InstancePtr) } if (0 != (IntrStatusReg & XIICPS_IXR_NACK_MASK)) { - if (!(InstancePtr->IsRepeatedStart)) { - XIicPs_WriteReg(BaseAddr, XIICPS_CR_OFFSET, - XIicPs_ReadReg(BaseAddr, - XIICPS_CR_OFFSET) & - (~XIICPS_CR_HOLD_MASK)); - } + XIicPs_WriteReg(BaseAddr, XIICPS_CR_OFFSET, + XIicPs_ReadReg(BaseAddr, + XIICPS_CR_OFFSET) & + (~XIICPS_CR_HOLD_MASK)); StatusEvent |= XIICPS_EVENT_NACK; } @@ -768,12 +754,10 @@ void XIicPs_MasterInterruptHandler(XIicPs *InstancePtr) if (0 != (IntrStatusReg & (XIICPS_IXR_NACK_MASK | XIICPS_IXR_ARB_LOST_MASK | XIICPS_IXR_RX_UNF_MASK | XIICPS_IXR_TX_OVR_MASK | XIICPS_IXR_RX_OVR_MASK))) { - if (!(InstancePtr->IsRepeatedStart)) { - XIicPs_WriteReg(BaseAddr, XIICPS_CR_OFFSET, - XIicPs_ReadReg(BaseAddr, - XIICPS_CR_OFFSET) & - (~XIICPS_CR_HOLD_MASK)); - } + XIicPs_WriteReg(BaseAddr, XIICPS_CR_OFFSET, + XIicPs_ReadReg(BaseAddr, + XIICPS_CR_OFFSET) & + (~XIICPS_CR_HOLD_MASK)); StatusEvent |= XIICPS_EVENT_ERROR; } @@ -816,7 +800,7 @@ static int XIicPs_SetupMaster(XIicPs *InstancePtr, int Role) /* - * Only check if bus is busy when repeated start option is not set. + * Only check if bus is busy when HOLD bit is not set. */ if ((ControlReg & XIICPS_CR_HOLD_MASK) == 0) { if (XIicPs_BusIsBusy(InstancePtr)) { @@ -865,18 +849,10 @@ static void MasterSendData(XIicPs *InstancePtr) * Clear hold bit if done, so stop can be sent out. */ if (InstancePtr->SendByteCount == 0) { - - /* - * If user has enabled repeated start as an option, - * do not disable it. - */ - if (!(InstancePtr->IsRepeatedStart)) { - - XIicPs_WriteReg(InstancePtr->Config.BaseAddress, - XIICPS_CR_OFFSET, - XIicPs_ReadReg(InstancePtr->Config.BaseAddress, - XIICPS_CR_OFFSET) & ~ XIICPS_CR_HOLD_MASK); - } + XIicPs_WriteReg(InstancePtr->Config.BaseAddress, + XIICPS_CR_OFFSET, + XIicPs_ReadReg(InstancePtr->Config.BaseAddress, + XIICPS_CR_OFFSET) & ~ XIICPS_CR_HOLD_MASK); } return; diff --git a/XilinxProcessorIPLib/drivers/iicps/src/xiicps_options.c b/XilinxProcessorIPLib/drivers/iicps/src/xiicps_options.c index 55481158..84c24d68 100755 --- a/XilinxProcessorIPLib/drivers/iicps/src/xiicps_options.c +++ b/XilinxProcessorIPLib/drivers/iicps/src/xiicps_options.c @@ -50,6 +50,7 @@ * 2.0 hk 03/07/14 Limited frequency set when 100KHz or 400KHz is * selected. This is a hardware limitation. CR#779290. * 2.1 hk 04/24/14 Fix for CR# 761060 - provision for repeated start. +* 2.3 sk 10/07/14 Repeated start feature removed. * * * @@ -86,7 +87,6 @@ static OptionsMap OptionsTable[] = { {XIICPS_7_BIT_ADDR_OPTION, XIICPS_CR_NEA_MASK}, {XIICPS_10_BIT_ADDR_OPTION, XIICPS_CR_NEA_MASK}, {XIICPS_SLAVE_MON_OPTION, XIICPS_CR_SLVMON_MASK}, - {XIICPS_REP_START_OPTION, XIICPS_CR_HOLD_MASK}, }; #define XIICPS_NUM_OPTIONS (sizeof(OptionsTable) / sizeof(OptionsMap)) @@ -124,16 +124,6 @@ int XIicPs_SetOptions(XIicPs *InstancePtr, u32 Options) ControlReg = XIicPs_ReadReg(InstancePtr->Config.BaseAddress, XIICPS_CR_OFFSET); - /* - * If repeated start option is requested, set the flag. - * The hold bit in CR will be written by driver when the next transfer - * is initiated. - */ - if (Options & XIICPS_REP_START_OPTION) { - InstancePtr->IsRepeatedStart = 1; - Options = Options & (~XIICPS_REP_START_OPTION); - } - /* * Loop through the options table, turning the option on. */ @@ -203,16 +193,6 @@ int XIicPs_ClearOptions(XIicPs *InstancePtr, u32 Options) ControlReg = XIicPs_ReadReg(InstancePtr->Config.BaseAddress, XIICPS_CR_OFFSET); - /* - * If repeated start option is cleared, set the flag. - * The hold bit in CR will be cleared by driver when the - * following transfer ends. - */ - if (Options & XIICPS_REP_START_OPTION) { - InstancePtr->IsRepeatedStart = 0; - Options = Options & (~XIICPS_REP_START_OPTION); - } - /* * Loop through the options table and clear the specified options. */ @@ -296,9 +276,6 @@ u32 XIicPs_GetOptions(XIicPs *InstancePtr) } } - if (InstancePtr->IsRepeatedStart) { - OptionsFlag |= XIICPS_REP_START_OPTION; - } return OptionsFlag; }