/*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; }
.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; }