Esempio n. 1
0
void interrupt iic0_Service (void)
{
    IIC_FLG_CLEAR();
  
    // Deteccion de eot
    if (iic_data.currCB == iic_data.eotCB)
    {

	#ifdef IIC_DEBUG_EOT
		putchar('e');putchar('o');putchar('t');putchar('\n');
	#endif

        IIC_STOP();		
       	 
    	if (IIC0_IBCR_TX_RX == 0)
    		iic_commData.dataPtr[iic_data.dataIdx] = IIC_RECEIVE();    
    }
    
    // Deteccion de errores
    if (((IIC0_IBSR_RXAK == 1) && (IIC0_IBCR_TX_RX == 1)) || (IIC0_IBSR_IBAL == IIC_ARBITRATION_LOST))
    {
		IIC_STOP();
		
    	iic_data.currCB = iic_data.commFailedCB;
    }
  
    if (iic_data.currCB != NULL)
    	(*iic_data.currCB)();
     
    return;
}
Esempio n. 2
0
void interrupt iic0_srv (void)
{
    IIC_FLG_CLEAR();   
  
    // Deteccion de eot
    if (iic_data.currCB == iic_data.eotCB)
    {
        IIC_STOP();		
       	 
    	if (IIC0_IBCR_TX_RX == 0)
    		iic_commData.data[iic_data.dataIdx] = IIC_RECEIVE();
    }
    
    // Deteccion de errores
    if (((IIC0_IBSR_RXAK == 1) && (IIC0_IBCR_TX_RX == 1)) || (IIC0_IBSR_IBAL == IIC_ARBITRATION_LOST))
    {
		IIC_STOP();
		
    	iic_data.currCB = iic_data.commFailedCB;
    }
  
    if (iic_data.currCB != NULL)
    	(*iic_data.currCB)();
     
    return;
}
Esempio n. 3
0
void IIC_DataEvent(void)
{
	uint8_t data;
	uint8_t send = 0;
	if((IIC_Status.sw == IIC_Switch_Pause) || (IIC_Status.i2cstat == IIC_I2CStat_Free))
	{
		//dummy read
		IIC_MCU_DUMMYREAD(&data);
		IIC_STOP();
	}else
	{
		if(IIC_Status.step == IIC_Step_Sub)
			//restart
		{
			if(IIC_Status.stat == IIC_Stat_Write)
			{
				IIC_Status.step = IIC_Step_RW;
				IIC_QueuePointer = 0;
				//start register Write
				send = 1;
				data = IIC_Queue[IIC_QueuePointer];
			}else
			{
				IIC_MCU_RESTART;
			}
		}else
		{
			if(IIC_Status.stat == IIC_Stat_Write)
				//send Write queue
			{
				IIC_QueuePointer ++;
				if(IIC_QueuePointer == IIC_Status.queuelength)
					//one unit Write done
				{
					IIC_STOP();
					//dummy read
					IIC_MCU_DUMMYREAD(&data);
					//auto pause
					//IIC_Status.sw = IIC_Switch_Pause;
					IIC_Status.stat = IIC_Stat_Done;
				}else
				{
					send = 1;
					data = IIC_Queue[IIC_QueuePointer];
				}
			}else
			{
				if((IIC_QueuePointer + 2) == IIC_Status.queuelength)
				{
					IIC_MCU_STOP1;
				}
				else if((IIC_QueuePointer + 1) == IIC_Status.queuelength)
				{
					IIC_MCU_STOP2;
				}
				if(IIC_QueuePointer < IIC_Status.queuelength)
						IIC_MCU_RECEIVEDATA(&IIC_Queue[IIC_QueuePointer]);
				IIC_QueuePointer ++;
				if(IIC_QueuePointer == IIC_Status.queuelength)
				{
					IIC_MCU_STOP3;
					IIC_MCU_DUMMYREAD(&data);
					IIC_Status.stat = IIC_Stat_Done;
					IIC_UserProcedureAfterScanOnce;
				}
			}
		}
		if(send)IIC_MCU_SENDDATA(data);
	}
}