/******************************************************************************* * Function Name: I2C_Init ******************************************************************************** * * Summary: * Initializes I2C registers with initial values provided from customizer. * * Parameters: * None * * Return: * None * * Global variables: * None * * Reentrant: * No * *******************************************************************************/ void I2C_Init(void) { #if(I2C_FF_IMPLEMENTED) I2C_CFG_REG = I2C_DEFAULT_CFG; I2C_XCFG_REG = I2C_DEFAULT_XCFG; #if(CY_PSOC5A) I2C_CLKDIV_REG = LO8(I2C_DEFAULT_DIVIDE_FACTOR); #else I2C_CLKDIV1_REG = LO8(I2C_DEFAULT_DIVIDE_FACTOR); I2C_CLKDIV2_REG = HI8(I2C_DEFAULT_DIVIDE_FACTOR); #endif /* (CY_PSOC5A) */ #else uint8 enableInterrupts; I2C_CFG_REG = I2C_DEFAULT_CFG; /* control */ I2C_INT_MASK_REG = I2C_DEFAULT_INT_MASK; /* int_mask */ /* Enable interrupts from block */ enableInterrupts = CyEnterCriticalSection(); I2C_INT_ENABLE_REG |= I2C_INTR_ENABLE; /* aux_ctl */ CyExitCriticalSection(enableInterrupts); #if(I2C_MODE_MASTER_ENABLED) I2C_MCLK_PRD_REG = I2C_DEFAULT_MCLK_PRD; I2C_MCLK_CMP_REG = I2C_DEFAULT_MCLK_CMP; #endif /* (I2C_MODE_MASTER_ENABLED) */ #if(I2C_MODE_SLAVE_ENABLED) I2C_PERIOD_REG = I2C_DEFAULT_PERIOD; #endif /* (I2C_MODE_SLAVE_ENABLED) */ #endif /* (I2C_FF_IMPLEMENTED) */ #if(I2C_TIMEOUT_ENABLED) I2C_TimeoutInit(); #endif /* (I2C_TIMEOUT_ENABLED) */ /* Disable Interrupt and set vector and priority */ CyIntDisable (I2C_ISR_NUMBER); CyIntSetPriority(I2C_ISR_NUMBER, I2C_ISR_PRIORITY); #if(I2C_INTERN_I2C_INTR_HANDLER) (void) CyIntSetVector(I2C_ISR_NUMBER, &I2C_ISR); #endif /* (I2C_INTERN_I2C_INTR_HANDLER) */ /* Put state machine in idle state */ I2C_state = I2C_SM_IDLE; #if(I2C_MODE_SLAVE_ENABLED) /* Reset status and buffers index */ I2C_SlaveClearReadBuf(); I2C_SlaveClearWriteBuf(); I2C_slStatus = 0u; /* Reset slave status */ /* Set default address */ I2C_SlaveSetAddress(I2C_DEFAULT_ADDR); #endif /* (I2C_MODE_SLAVE_ENABLED) */ #if(I2C_MODE_MASTER_ENABLED) /* Reset status and buffers index */ I2C_MasterClearReadBuf(); I2C_MasterClearWriteBuf(); (void) I2C_MasterClearStatus(); #endif /* (I2C_MODE_MASTER_ENABLED) */ }
/******************************************************************************* * Function Name: I2C_Init ******************************************************************************** * * Summary: * Initializes I2C registers with initial values provided from customizer. * * Parameters: * None. * * Return: * None. * * Global variables: * None. * * Reentrant: * No. * *******************************************************************************/ void I2C_Init(void) { #if (I2C_FF_IMPLEMENTED) /* Configure fixed function block */ I2C_CFG_REG = I2C_DEFAULT_CFG; I2C_XCFG_REG = I2C_DEFAULT_XCFG; I2C_ADDR_REG = I2C_DEFAULT_ADDR; I2C_CLKDIV1_REG = LO8(I2C_DEFAULT_DIVIDE_FACTOR); I2C_CLKDIV2_REG = HI8(I2C_DEFAULT_DIVIDE_FACTOR); #else uint8 intState; /* Configure control and interrupt sources */ I2C_CFG_REG = I2C_DEFAULT_CFG; I2C_INT_MASK_REG = I2C_DEFAULT_INT_MASK; /* Enable interrupt generation in status */ intState = CyEnterCriticalSection(); I2C_INT_ENABLE_REG |= I2C_INTR_ENABLE; CyExitCriticalSection(intState); /* Configure bit counter */ #if (I2C_MODE_SLAVE_ENABLED) I2C_PERIOD_REG = I2C_DEFAULT_PERIOD; #endif /* (I2C_MODE_SLAVE_ENABLED) */ /* Configure clock generator */ #if (I2C_MODE_MASTER_ENABLED) I2C_MCLK_PRD_REG = I2C_DEFAULT_MCLK_PRD; I2C_MCLK_CMP_REG = I2C_DEFAULT_MCLK_CMP; #endif /* (I2C_MODE_MASTER_ENABLED) */ #endif /* (I2C_FF_IMPLEMENTED) */ #if (I2C_TIMEOUT_ENABLED) I2C_TimeoutInit(); #endif /* (I2C_TIMEOUT_ENABLED) */ /* Configure internal interrupt */ CyIntDisable (I2C_ISR_NUMBER); CyIntSetPriority(I2C_ISR_NUMBER, I2C_ISR_PRIORITY); #if (I2C_INTERN_I2C_INTR_HANDLER) (void) CyIntSetVector(I2C_ISR_NUMBER, &I2C_ISR); #endif /* (I2C_INTERN_I2C_INTR_HANDLER) */ /* Set FSM to default state */ I2C_state = I2C_SM_IDLE; #if (I2C_MODE_SLAVE_ENABLED) /* Clear status and buffers index */ I2C_slStatus = 0u; I2C_slRdBufIndex = 0u; I2C_slWrBufIndex = 0u; /* Configure matched address */ I2C_SlaveSetAddress(I2C_DEFAULT_ADDR); #endif /* (I2C_MODE_SLAVE_ENABLED) */ #if (I2C_MODE_MASTER_ENABLED) /* Clear status and buffers index */ I2C_mstrStatus = 0u; I2C_mstrRdBufIndex = 0u; I2C_mstrWrBufIndex = 0u; #endif /* (I2C_MODE_MASTER_ENABLED) */ }