/*FUNCTION****************************************************************
 *
 * Function Name: FLEXIO_UART_Tx_HAL_Configure
 * Description: Configure the flexio working as uart tx device.
 *
 *END*********************************************************************/
flexio_status_t FLEXIO_UART_Tx_HAL_Configure(
    flexio_uart_tx_dev_t *devPtr, const flexio_uart_config_t *configPtr)
{
    flexio_timer_config_t   mFlexioTimerConfigStruct;
    flexio_shifter_config_t mFlexioShifterConfigStruct;
    memset(&mFlexioShifterConfigStruct, 0, sizeof(mFlexioShifterConfigStruct));
    memset(&mFlexioTimerConfigStruct, 0, sizeof(mFlexioTimerConfigStruct));

    uint32_t divider, timCmp;
    
    if ( (!devPtr) || (!configPtr) )
    {
        return kStatus_FLEXIO_InvalidArgument;
    }

    /* 1. Configure the shifter 0 for tx buffer. */
    mFlexioShifterConfigStruct.timsel = devPtr->timerIdx;
    mFlexioShifterConfigStruct.timpol = kFlexioShifterTimerPolarityOnPositive;
    mFlexioShifterConfigStruct.pincfg = kFlexioPinConfigOutput;
    mFlexioShifterConfigStruct.pinsel = devPtr->txPinIdx;
    mFlexioShifterConfigStruct.pinpol = kFlexioPinActiveHigh;
    mFlexioShifterConfigStruct.smode  = kFlexioShifterModeTransmit;
    mFlexioShifterConfigStruct.insrc  = kFlexioShifterInputFromPin;
    mFlexioShifterConfigStruct.sstop  = kFlexioShifterStopBitHigh;
    mFlexioShifterConfigStruct.sstart = kFlexioShifterStartBitLow;
    FLEXIO_HAL_ConfigureShifter(
        devPtr->flexioBase, devPtr->shifterIdx, &mFlexioShifterConfigStruct);

    /* 2. Configure the timer 0 for bandrate. */
    mFlexioTimerConfigStruct.trgsel = FLEXIO_HAL_TIMER_TRIGGER_SEL_SHIFTnSTAT(devPtr->shifterIdx);
    mFlexioTimerConfigStruct.trgpol = kFlexioTimerTriggerPolarityActiveLow;
    mFlexioTimerConfigStruct.trgsrc = kFlexioTimerTriggerSourceInternal;
    mFlexioTimerConfigStruct.pincfg = kFlexioPinConfigOutputDisabled;
    mFlexioTimerConfigStruct.pinsel = devPtr->txPinIdx;
    mFlexioTimerConfigStruct.pinpol = kFlexioPinActiveHigh;
    mFlexioTimerConfigStruct.timod  = kFlexioTimerModeDual8BitBaudBit; 
    mFlexioTimerConfigStruct.timout = kFlexioTimerOutputOneNotAffectedByReset;
    mFlexioTimerConfigStruct.timdec = kFlexioTimerDecSrcOnFlexIOClockShiftTimerOutput;
    mFlexioTimerConfigStruct.timrst = kFlexioTimerResetNever;
    mFlexioTimerConfigStruct.timdis = kFlexioTimerDisableOnTimerCompare;
    mFlexioTimerConfigStruct.timena = kFlexioTimerEnableOnTriggerHigh;
    mFlexioTimerConfigStruct.tstop  = kFlexioTimerStopBitEnableOnTimerCompareDisable;
    mFlexioTimerConfigStruct.tstart = kFlexioTimerStartBitEnabled;
    divider = configPtr->flexioBusClk / configPtr->baudrate;
    timCmp = ( ((configPtr->bitCount) << 1U) - 1U )  << 8U;
    timCmp |= ( (divider >> 1U) - 1U );
    mFlexioTimerConfigStruct.timcmp = timCmp;
    FLEXIO_HAL_ConfigureTimer(
        devPtr->flexioBase, devPtr->timerIdx, &mFlexioTimerConfigStruct);

    return kStatus_FLEXIO_Success;
}
Example #2
0
    .baudRate = 9600,
    .parityMode = kLpuartParityEven,
    .stopBitCount = kLpuartOneStopBit,
    .bitCountPerChar = kLpuart9BitsPerChar,
};

/* FlexIO config for RGB LED */
static flexio_user_config_t g_flexioConfig = {
    .useInt = false,
    .onDozeEnable = true,
    .onDebugEnable = false,
    .fastAccessEnable = true,
};

static flexio_timer_config_t g_timerConfig = {
    .trgsel = FLEXIO_HAL_TIMER_TRIGGER_SEL_SHIFTnSTAT(0),
    .trgpol = kFlexioTimerTriggerPolarityActiveLow,
    .trgsrc = kFlexioTimerTriggerSourceInternal,
    .pincfg = kFlexioPinConfigOutputDisabled,
    .timod = kFlexioTimerModeDual8BitBaudBit,
    .timout = kFlexioTimerOutputOneNotAffectedByReset,
    .timdec = kFlexioTimerDecSrcOnFlexIOClockShiftTimerOutput,
    .timrst = kFlexioTimerResetNever,
    .timdis = kFlexioTimerDisableOnTimerCompare,
    .timena = kFlexioTimerEnableOnTriggerHigh,
    .tstop = kFlexioTimerStopBitDisabled,
    .tstart = kFlexioTimerStartBitDisabled,
    .timcmp = (32 * 2 - 1) << 8 | (2 - 1), // 32 bits at 2 MHz
};

static flexio_shifter_config_t g_shifterConfig = {
/*FUNCTION****************************************************************
 *
 * Function Name: FLEXIO_I2C_HAL_ConfigMaster
 * Description: Configure the flexio working as i2c master device.
 *
 *END*********************************************************************/
flexio_status_t FLEXIO_I2C_HAL_ConfigMaster(flexio_i2c_dev_t *devPtr, 
    const flexio_i2c_master_config_t *configPtr)
{
    flexio_shifter_config_t mFlexioShfiterConfigStruct;
    flexio_timer_config_t mFlexioTimerConfigStruct;
    memset(&mFlexioShfiterConfigStruct, 0, sizeof(mFlexioShfiterConfigStruct));
    memset(&mFlexioTimerConfigStruct, 0, sizeof(mFlexioTimerConfigStruct));

    uint32_t timdiv = 0U, timcmp = 0U;

    if ( (!devPtr) || (!configPtr) )
    {
        return kStatus_FLEXIO_InvalidArgument;
    }

    /* 1. Configure the shifter 0 for tx. */
    mFlexioShfiterConfigStruct.timsel = devPtr->timerIdx[1];
    mFlexioShfiterConfigStruct.timpol = kFlexioShifterTimerPolarityOnPositive;
    mFlexioShfiterConfigStruct.pincfg = kFlexioPinConfigOpenDrainOrBidirection;
    mFlexioShfiterConfigStruct.pinsel = devPtr->sdaPinIdx; /* Pin 0. */
    mFlexioShfiterConfigStruct.pinpol = kFlexioPinActiveLow;
    mFlexioShfiterConfigStruct.smode  = kFlexioShifterModeTransmit; /* Tx. */
    mFlexioShfiterConfigStruct.insrc  = kFlexioShifterInputFromPin;
    mFlexioShfiterConfigStruct.sstop  = kFlexioShifterStopBitHigh; /* Check ACK Tx. */
    mFlexioShfiterConfigStruct.sstart = kFlexioShifterStartBitLow; /* Start after low ACK. */
    FLEXIO_HAL_ConfigureShifter(
            devPtr->flexioBase, devPtr->shifterIdx[0], &mFlexioShfiterConfigStruct);

    /* 2. Configure the shifter 1 for rx. */
    mFlexioShfiterConfigStruct.timsel = devPtr->timerIdx[1];
    mFlexioShfiterConfigStruct.timpol = kFlexioShifterTimerPolarityOnNegitive;
    mFlexioShfiterConfigStruct.pincfg = kFlexioPinConfigOutputDisabled;
    mFlexioShfiterConfigStruct.pinsel = devPtr->sdaPinIdx; /* Pin 0. */
    mFlexioShfiterConfigStruct.pinpol = kFlexioPinActiveHigh; /*inverted or not*/
    mFlexioShfiterConfigStruct.smode  = kFlexioShifterModeReceive; /* Rx. */
    mFlexioShfiterConfigStruct.insrc  = kFlexioShifterInputFromPin;
    mFlexioShfiterConfigStruct.sstop  = kFlexioShifterStopBitLow; /* Check ACK Rx. */
    mFlexioShfiterConfigStruct.sstart = kFlexioShifterStartBitDisabledLoadDataOnEnable; /* Do not check start Rx. */
    FLEXIO_HAL_ConfigureShifter(
            devPtr->flexioBase, devPtr->shifterIdx[1], &mFlexioShfiterConfigStruct);

    /* 3. Configure the timer 0 for generating bit clock. */
    mFlexioTimerConfigStruct.trgsel = FLEXIO_HAL_TIMER_TRIGGER_SEL_SHIFTnSTAT(devPtr->shifterIdx[0]); /* trigger from tx shifter. */
    mFlexioTimerConfigStruct.trgpol = kFlexioTimerTriggerPolarityActiveLow;
    mFlexioTimerConfigStruct.trgsrc = kFlexioTimerTriggerSourceInternal;
    mFlexioTimerConfigStruct.pincfg = kFlexioPinConfigOpenDrainOrBidirection;
    mFlexioTimerConfigStruct.pinsel = devPtr->sckPinIdx; /* Pin 1. */
    mFlexioTimerConfigStruct.pinpol = kFlexioPinActiveHigh;
    mFlexioTimerConfigStruct.timod  = kFlexioTimerModeDual8BitBaudBit; /* To generate baudrate. */
    
    mFlexioTimerConfigStruct.timout = kFlexioTimerOutputZeroNotAffectedByReset;
    mFlexioTimerConfigStruct.timdec = kFlexioTimerDecSrcOnFlexIOClockShiftTimerOutput;
    mFlexioTimerConfigStruct.timrst = kFlexioTimerResetOnTimerPinEqualToTimerOutput;
    mFlexioTimerConfigStruct.timdis = kFlexioTimerDisableOnTimerCompare;
    mFlexioTimerConfigStruct.timena = kFlexioTimerEnableOnTriggerHigh;
    mFlexioTimerConfigStruct.tstop  = kFlexioTimerStopBitEnableOnTimerDisable;
    mFlexioTimerConfigStruct.tstart = kFlexioTimerStartBitEnabled;

    /*
     * Set TIMCMP[15:8] = (number of words x 18) + 1. 
     * Set TIMCMP[7:0] = (baud rate divider / 2) - 1.
     */
    timdiv = configPtr->flexioBusClk / configPtr->baudrate;
    timcmp = configPtr->xferWordCount * 18U + 1U;
    timcmp <<= 8U;
    timcmp |= timdiv / 2U - 1U;
    mFlexioTimerConfigStruct.timcmp = timcmp;
    FLEXIO_HAL_ConfigureTimer(
            devPtr->flexioBase, devPtr->timerIdx[0], &mFlexioTimerConfigStruct);

    /* 4. Configure the timer 1 for controlling shifters. */
    mFlexioTimerConfigStruct.trgsel = FLEXIO_HAL_TIMER_TRIGGER_SEL_SHIFTnSTAT(devPtr->shifterIdx[0]); /* trigger from tx shifter. */
    mFlexioTimerConfigStruct.trgpol = kFlexioTimerTriggerPolarityActiveLow;
    mFlexioTimerConfigStruct.trgsrc = kFlexioTimerTriggerSourceInternal; /* trigger no sense here. */
    mFlexioTimerConfigStruct.pincfg = kFlexioPinConfigOutputDisabled;
    mFlexioTimerConfigStruct.pinsel = devPtr->sckPinIdx; /* Pin 1. */
    mFlexioTimerConfigStruct.pinpol = kFlexioPinActiveLow;
    mFlexioTimerConfigStruct.timod  = kFlexioTimerModeSingle16Bit;
    
    mFlexioTimerConfigStruct.timout = kFlexioTimerOutputOneNotAffectedByReset; /* no sense here. */
    mFlexioTimerConfigStruct.timdec = kFlexioTimerDecSrcOnPinInputShiftPinInput;
    mFlexioTimerConfigStruct.timrst = kFlexioTimerResetNever;
    mFlexioTimerConfigStruct.timdis = kFlexioTimerDisableOnPreTimerDisable;
    mFlexioTimerConfigStruct.timena = kFlexioTimerEnableOnPrevTimerEnable;
    mFlexioTimerConfigStruct.tstop  = kFlexioTimerStopBitEnableOnTimerCompare;
    mFlexioTimerConfigStruct.tstart = kFlexioTimerStartBitEnabled;

    /* Set TIMCMP[15:0] = (number of bits x 2) - 1 */
    mFlexioTimerConfigStruct.timcmp = 8U * 2U - 1U;// change to 8 bit
    FLEXIO_HAL_ConfigureTimer(
            devPtr->flexioBase, devPtr->timerIdx[1], &mFlexioTimerConfigStruct);

    return kStatus_FLEXIO_Success;
}
/*FUNCTION****************************************************************
 *
 * Function Name: FLEXIO_SPI_HAL_ConfigMaster
 * Description: Configure the flexio working as spi master.
 *
 *END*********************************************************************/
flexio_status_t FLEXIO_SPI_HAL_ConfigMaster(flexio_spi_dev_t *devPtr, 
    const flexio_spi_master_config_t *configPtr)
{
    flexio_shifter_config_t mFlexioShfiterConfigStruct;
    flexio_timer_config_t mFlexioTimerConfigStruct;
    memset(&mFlexioShfiterConfigStruct, 0, sizeof(mFlexioShfiterConfigStruct));
    memset(&mFlexioTimerConfigStruct, 0, sizeof(mFlexioTimerConfigStruct));
    uint32_t timdiv = 0U, timcmp = 0U;
    
    if ( (!devPtr) || (!configPtr) )
    {
        return kStatus_FLEXIO_InvalidArgument;
    }

    /* 1. Configure shifter 0 for tx. */
    if (configPtr->cphaOneEnable)
    {
        mFlexioShfiterConfigStruct.timsel = devPtr->timerIdx[0];
        mFlexioShfiterConfigStruct.timpol = kFlexioShifterTimerPolarityOnPositive;
        mFlexioShfiterConfigStruct.pincfg = kFlexioPinConfigOutput;
        mFlexioShfiterConfigStruct.pinsel = devPtr->txPinIdx; /* MOSI */
        mFlexioShfiterConfigStruct.pinpol = kFlexioPinActiveHigh;
        mFlexioShfiterConfigStruct.smode  = kFlexioShifterModeTransmit;
        mFlexioShfiterConfigStruct.insrc  = kFlexioShifterInputFromPin;
        mFlexioShfiterConfigStruct.sstop  = kFlexioShifterStopBitLow;
        mFlexioShfiterConfigStruct.sstart = kFlexioShifterStartBitDisabledLoadDataOnShift;
    }
    else
    {
        mFlexioShfiterConfigStruct.timsel = devPtr->timerIdx[0];
        mFlexioShfiterConfigStruct.timpol = kFlexioShifterTimerPolarityOnNegitive;
        mFlexioShfiterConfigStruct.pincfg = kFlexioPinConfigOutput;
        mFlexioShfiterConfigStruct.pinsel = devPtr->txPinIdx; /* MOSI */
        mFlexioShfiterConfigStruct.pinpol = kFlexioPinActiveHigh;
        mFlexioShfiterConfigStruct.smode  = kFlexioShifterModeTransmit;
        mFlexioShfiterConfigStruct.insrc  = kFlexioShifterInputFromPin;
        mFlexioShfiterConfigStruct.sstop  = kFlexioShifterStopBitDisable;
        mFlexioShfiterConfigStruct.sstart = kFlexioShifterStartBitDisabledLoadDataOnEnable;
    }
    FLEXIO_HAL_ConfigureShifter(
        devPtr->flexioBase, devPtr->shifterIdx[0], &mFlexioShfiterConfigStruct);
    
    /* 2. Configure shifter 1 for rx. */
    if (configPtr->cphaOneEnable)
    {
        mFlexioShfiterConfigStruct.timsel = devPtr->timerIdx[0];
        mFlexioShfiterConfigStruct.timpol = kFlexioShifterTimerPolarityOnNegitive;
        mFlexioShfiterConfigStruct.pincfg = kFlexioPinConfigOutputDisabled;
        mFlexioShfiterConfigStruct.pinsel = devPtr->rxPinIdx; /* MISO */
        mFlexioShfiterConfigStruct.pinpol = kFlexioPinActiveHigh;
        mFlexioShfiterConfigStruct.smode  = kFlexioShifterModeReceive;
    }
    else
    {
        mFlexioShfiterConfigStruct.timsel = devPtr->timerIdx[0];
        mFlexioShfiterConfigStruct.timpol = kFlexioShifterTimerPolarityOnPositive;
        mFlexioShfiterConfigStruct.pincfg = kFlexioPinConfigOutputDisabled;
        mFlexioShfiterConfigStruct.pinsel = devPtr->rxPinIdx; /* MISO */
        mFlexioShfiterConfigStruct.pinpol = kFlexioPinActiveHigh;
        mFlexioShfiterConfigStruct.smode  = kFlexioShifterModeReceive;
    }
    mFlexioShfiterConfigStruct.insrc  = kFlexioShifterInputFromPin;
    mFlexioShfiterConfigStruct.sstop  = kFlexioShifterStopBitDisable;
    mFlexioShfiterConfigStruct.sstart = kFlexioShifterStartBitDisabledLoadDataOnEnable;
    FLEXIO_HAL_ConfigureShifter(
        devPtr->flexioBase, devPtr->shifterIdx[1], &mFlexioShfiterConfigStruct);

    /* 3. Configure timer 1 for csn. */
    mFlexioTimerConfigStruct.trgsel = FLEXIO_HAL_TIMER_TRIGGER_SEL_TIMn(devPtr->timerIdx[0]);
    mFlexioTimerConfigStruct.trgpol = kFlexioTimerTriggerPolarityActiveHigh;
    mFlexioTimerConfigStruct.trgsrc = kFlexioTimerTriggerSourceInternal;
    mFlexioTimerConfigStruct.pincfg = kFlexioPinConfigOutput;
    mFlexioTimerConfigStruct.pinsel = devPtr->csnPinIdx; /* CSn. */
    mFlexioTimerConfigStruct.pinpol = kFlexioPinActiveLow;
    mFlexioTimerConfigStruct.timod  = kFlexioTimerModeSingle16Bit;
    mFlexioTimerConfigStruct.timout = kFlexioTimerOutputOneNotAffectedByReset;
    mFlexioTimerConfigStruct.timdec = kFlexioTimerDecSrcOnFlexIOClockShiftTimerOutput;
    mFlexioTimerConfigStruct.timrst = kFlexioTimerResetNever;
    mFlexioTimerConfigStruct.timdis = kFlexioTimerDisableOnPreTimerDisable;
    mFlexioTimerConfigStruct.timena = kFlexioTimerEnableOnPrevTimerEnable;
    mFlexioTimerConfigStruct.tstop  = kFlexioTimerStopBitDisabled;
    mFlexioTimerConfigStruct.tstart = kFlexioTimerStartBitDisabled;
    mFlexioTimerConfigStruct.timcmp = 0xFFFFU;
    FLEXIO_HAL_ConfigureTimer(
        devPtr->flexioBase, devPtr->timerIdx[1], &mFlexioTimerConfigStruct);

    /* 4. Configure timer 0 for sclk. */
    mFlexioTimerConfigStruct.trgsel = FLEXIO_HAL_TIMER_TRIGGER_SEL_SHIFTnSTAT(devPtr->shifterIdx[0]);
    mFlexioTimerConfigStruct.trgpol = kFlexioTimerTriggerPolarityActiveLow;
    mFlexioTimerConfigStruct.trgsrc = kFlexioTimerTriggerSourceInternal;
    mFlexioTimerConfigStruct.pincfg = kFlexioPinConfigOutput;
    mFlexioTimerConfigStruct.pinsel = devPtr->sclkPinIdx; /* SCLK. */
    mFlexioTimerConfigStruct.pinpol = kFlexioPinActiveHigh;
    mFlexioTimerConfigStruct.timod  = kFlexioTimerModeDual8BitBaudBit; 
    mFlexioTimerConfigStruct.timout = kFlexioTimerOutputZeroNotAffectedByReset;
    mFlexioTimerConfigStruct.timdec = kFlexioTimerDecSrcOnFlexIOClockShiftTimerOutput;
    mFlexioTimerConfigStruct.timrst = kFlexioTimerResetNever;
    mFlexioTimerConfigStruct.timdis = kFlexioTimerDisableOnTimerCompare;
    mFlexioTimerConfigStruct.timena = kFlexioTimerEnableOnTriggerHigh;
    mFlexioTimerConfigStruct.tstop  = kFlexioTimerStopBitEnableOnTimerDisable;
    mFlexioTimerConfigStruct.tstart = kFlexioTimerStartBitEnabled;
    timdiv = (configPtr->flexioBusClk) / (configPtr->baudrate);
    timcmp = ( (configPtr->bitCount << 1U) - 1U )  << 8U;
    timcmp |= ( (timdiv >> 1U) - 1U);
    mFlexioTimerConfigStruct.timcmp = timcmp;
    FLEXIO_HAL_ConfigureTimer(
        devPtr->flexioBase, devPtr->timerIdx[0], &mFlexioTimerConfigStruct);

    return kStatus_FLEXIO_Success;
}