Exemplo n.º 1
0
/*******************************************************************************
* 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) */
}
Exemplo n.º 2
0
/*******************************************************************************
* 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) */
}