/*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; }
/*FUNCTION**************************************************************** * * Function Name: FLEXIO_Camera_HAL_Configure * Description: Configure the flexio working as flexio_camera device. * * There are only data pin, pclk pin and href pin are simulated with flexio. * So the camera interface can be considered as an advanced SPI interface with * 8-bit data parallel bus. the pclk and href signal are just working as SCLK * and CS signal of SPI bus. * *END*********************************************************************/ flexio_status_t FLEXIO_Camera_HAL_Configure(flexio_camera_dev_t *devPtr) { uint32_t i; flexio_shifter_config_t flexioShifterConfig; flexio_timer_config_t flexioTimerConfig; if (!devPtr) { return kStatus_FLEXIO_InvalidArgument; } /* FLEXIO_CAMERA_SHIFTER_TEMPLETE_CONFIG */ flexioShifterConfig.timsel = 0; /* control the available data, would be changed according to application. */ flexioShifterConfig.timpol = kFlexioShifterTimerPolarityOnPositive; flexioShifterConfig.pincfg = kFlexioPinConfigOutputDisabled; flexioShifterConfig.pinsel = 0; /* data pin, would be changed according to application. */ flexioShifterConfig.pinpol = kFlexioPinActiveHigh; flexioShifterConfig.smode = kFlexioShifterModeReceive; flexioShifterConfig.pwidth = FLEXIO_CAMERA_PARALLEL_DATA_WIDTH-1U; flexioShifterConfig.insrc = kFlexioShifterInputFromNextShifterOutput; flexioShifterConfig.sstop = kFlexioShifterStopBitDisable; flexioShifterConfig.sstart = kFlexioShifterStartBitDisabledLoadDataOnEnable; /* FLEXIO_CAMERA_TIMER_TEMPLETE_CONFIG */ flexioTimerConfig.trgsel = FLEXIO_HAL_TIMER_TRIGGER_SEL_PININPUT(0); /* HREF pin, would be changed. */ flexioTimerConfig.trgpol = kFlexioTimerTriggerPolarityActiveHigh; flexioTimerConfig.trgsrc = kFlexioTimerTriggerSourceInternal; flexioTimerConfig.pincfg = kFlexioPinConfigOutputDisabled; flexioTimerConfig.pinsel = 0U; /* PCLK pin, would be changed. */ flexioTimerConfig.pinpol = kFlexioPinActiveHigh; flexioTimerConfig.timod = kFlexioTimerModeSingle16Bit; flexioTimerConfig.timout = kFlexioTimerOutputZeroNotAffectedByReset; flexioTimerConfig.timdec = kFlexioTimerDecSrcOnPinInputShiftPinInput; flexioTimerConfig.timrst = kFlexioTimerResetOnTimerTriggerRisingEdge; flexioTimerConfig.timdis = kFlexioTimerDisableOnTriggerFallingEdge; flexioTimerConfig.timena = kFlexioTimerEnableOnTriggerRisingEdge; flexioTimerConfig.tstop = kFlexioTimerStopBitDisabled; flexioTimerConfig.tstart = kFlexioTimerStartBitDisabled; flexioTimerConfig.timcmp = 0; /* time of shift buffer, would be changed. */ /* Configure the shifters as FIFO buffer. */ flexioShifterConfig.timsel = devPtr->timerIdx; /* driven timer. */ flexioShifterConfig.pinsel = devPtr->datPinStartIdx; /* data pin. */ for ( i = devPtr->shifterStartIdx; i < (devPtr->shifterStartIdx + devPtr->shifterCount - 1U); i++) { FLEXIO_HAL_ConfigureShifter(devPtr->flexioBase, i, &flexioShifterConfig); } flexioShifterConfig.insrc = kFlexioShifterInputFromPin; FLEXIO_HAL_ConfigureShifter(devPtr->flexioBase, i, &flexioShifterConfig); /* Configure the timer to select the available data. * The PCLK's clk is source of timer to drive the shifter. * The HREF is the selecting signal for available data. */ flexioTimerConfig.trgsel = FLEXIO_HAL_TIMER_TRIGGER_SEL_PININPUT(devPtr->hrefPinIdx); /* HREF pin. */ flexioTimerConfig.pinsel = devPtr->pclkPinIdx; /* PCLK pin. */ flexioTimerConfig.timcmp = 8U * devPtr->shifterCount - 1U; FLEXIO_HAL_ConfigureTimer(devPtr->flexioBase, devPtr->timerIdx, &flexioTimerConfig); /* Clear flags. */ FLEXIO_HAL_ClearShifterErrorFlags(devPtr->flexioBase, ((1U<<(devPtr->shifterCount))-1U)<<(devPtr->shifterStartIdx) ); FLEXIO_HAL_ClearTimerStatusFlags(devPtr->flexioBase, 1U<<(devPtr->timerIdx) ); return kStatus_FLEXIO_Success; }
/*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; }
/*! * @brief Main function */ int main (void) { /* enable clock for PORTs */ CLOCK_SYS_EnablePortClock(PORTA_IDX); //CLOCK_SYS_EnablePortClock(PORTB_IDX); CLOCK_SYS_EnablePortClock(PORTC_IDX); CLOCK_SYS_EnablePortClock(PORTD_IDX); CLOCK_SYS_EnablePortClock(PORTE_IDX); /* Set allowed power mode, allow all. */ SMC_HAL_SetProtection(SMC, kAllowPowerModeAll); /* Set system clock configuration. */ CLOCK_SYS_SetConfiguration(&g_defaultClockConfigVlpr); /* Initialize LPTMR */ lptmr_state_t lptmrState; LPTMR_DRV_Init(LPTMR0_IDX, &lptmrState, &g_lptmrConfig); LPTMR_DRV_SetTimerPeriodUs(LPTMR0_IDX, 100000); LPTMR_DRV_InstallCallback(LPTMR0_IDX, lptmr_call_back); /* Initialize DMA */ dma_state_t dma_state; DMA_DRV_Init(&dma_state); /* Initialize PIT */ PIT_DRV_Init(0, false); PIT_DRV_InitChannel(0, 0, &g_pitChan0); /* Initialize CMP */ CMP_DRV_Init(0, &g_cmpState, &g_cmpConf); CMP_DRV_ConfigDacChn(0, &g_cmpDacConf); PORT_HAL_SetMuxMode(g_portBase[GPIOC_IDX], 0, kPortMuxAlt5); CMP_DRV_Start(0); /* Buttons */ GPIO_DRV_InputPinInit(&g_switch1); GPIO_DRV_InputPinInit(&g_switch2); GPIO_DRV_InputPinInit(&g_switchUp); GPIO_DRV_InputPinInit(&g_switchDown); GPIO_DRV_InputPinInit(&g_switchLeft); GPIO_DRV_InputPinInit(&g_switchRight); GPIO_DRV_InputPinInit(&g_switchSelect); /* Start LPTMR */ LPTMR_DRV_Start(LPTMR0_IDX); /* Setup LPUART1 */ LPUART_DRV_Init(1, &g_lpuartState, &g_lpuartConfig); LPUART_DRV_InstallRxCallback(1, lpuartRxCallback, rxBuff, NULL, true); LPUART_DRV_InstallTxCallback(1, lpuartTxCallback, NULL, NULL); LPUART_BWR_CTRL_TXINV(g_lpuartBase[1], 1); PORT_HAL_SetMuxMode(g_portBase[GPIOE_IDX], 0, kPortMuxAlt3); PORT_HAL_SetMuxMode(g_portBase[GPIOE_IDX], 1, kPortMuxAlt3); /* Setup FlexIO for the WS2812B */ FLEXIO_Type *fiobase = g_flexioBase[0]; CLOCK_SYS_SetFlexioSrc(0, kClockFlexioSrcMcgIrClk); FLEXIO_DRV_Init(0, &g_flexioConfig); FLEXIO_HAL_ConfigureTimer(fiobase, 0, &g_timerConfig); FLEXIO_HAL_ConfigureShifter(fiobase, 0, &g_shifterConfig); PORT_HAL_SetMuxMode(g_portBase[GPIOE_IDX], 20, kPortMuxAlt6); FLEXIO_DRV_Start(0); FLEXIO_HAL_SetShifterStatusDmaCmd(fiobase, 1, true); DMA_DRV_RequestChannel(kDmaAnyChannel, kDmaRequestMux0FlexIOChannel0, &g_fioChan); DMA_DRV_RegisterCallback(&g_fioChan, fioDmaCallback, NULL); /* Connect buzzer to TPM0_CH3 */ PORT_HAL_SetMuxMode(g_portBase[GPIOE_IDX], 30, kPortMuxAlt3); tpm_general_config_t tmpConfig = { .isDBGMode = false, .isGlobalTimeBase = false, .isTriggerMode = false, .isStopCountOnOveflow = false, .isCountReloadOnTrig = false, .triggerSource = kTpmTrigSel0, }; TPM_DRV_Init(0, &tmpConfig); TPM_DRV_SetClock(0, kTpmClockSourceModuleMCGIRCLK, kTpmDividedBy1); /* Blank LED just in case, saves power */ led(0x00, 0x00, 0x00); /* Init e-paper display */ EPD_Init(); /* Throw up first image */ int ret = EPD_Draw(NULL, images[current_image]); if (-1 == ret) { led(0xff, 0x00, 0x00); } else if (-2 == ret) { led(0xff, 0xff, 0x00); } else if (-3 == ret) { led(0x00, 0x00, 0xff); } else { led(0x00, 0xff, 0x00); } blank_led = 30; /* Deinit so we can mess around on the bus pirate */ //EPD_Deinit(); /* We're done, everything else is triggered through interrupts */ for(;;) { if (cue_next_image) { int old_image = current_image; current_image = (current_image + 1) % image_count; EPD_Draw(images[old_image], images[current_image]); cue_next_image = 0; } #ifndef DEBUG SMC_HAL_SetMode(SMC, &g_idlePowerMode); #endif } }
/*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; }
/*FUNCTION**************************************************************** * * Function Name: FLEXIO_SPI_HAL_ConfigSlave * Description: Configure the flexio working as spi slave. * *END*********************************************************************/ flexio_status_t FLEXIO_SPI_HAL_ConfigSlave(flexio_spi_dev_t *devPtr, const flexio_spi_slave_config_t *configPtr) { flexio_shifter_config_t mFlexioShfiterConfigStruct; flexio_timer_config_t mFlexioTimerConfigStruct; memset(&mFlexioShfiterConfigStruct, 0, sizeof(mFlexioShfiterConfigStruct)); memset(&mFlexioTimerConfigStruct, 0, sizeof(mFlexioTimerConfigStruct)); 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; /* MISO */ mFlexioShfiterConfigStruct.pinpol = kFlexioPinActiveHigh; mFlexioShfiterConfigStruct.smode = kFlexioShifterModeTransmit; mFlexioShfiterConfigStruct.insrc = kFlexioShifterInputFromPin; mFlexioShfiterConfigStruct.sstop = kFlexioShifterStopBitDisable; mFlexioShfiterConfigStruct.sstart = kFlexioShifterStartBitDisabledLoadDataOnShift; } else { mFlexioShfiterConfigStruct.timsel = devPtr->timerIdx[0]; mFlexioShfiterConfigStruct.timpol = kFlexioShifterTimerPolarityOnNegitive; mFlexioShfiterConfigStruct.pincfg = kFlexioPinConfigOutput; mFlexioShfiterConfigStruct.pinsel = devPtr->txPinIdx; /* MISO */ 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 tx. */ if (configPtr->cphaOneEnable) { mFlexioShfiterConfigStruct.timsel = devPtr->timerIdx[0]; mFlexioShfiterConfigStruct.timpol = kFlexioShifterTimerPolarityOnNegitive; mFlexioShfiterConfigStruct.pincfg = kFlexioPinConfigOutputDisabled; mFlexioShfiterConfigStruct.pinsel = devPtr->rxPinIdx; /* MOSI */ mFlexioShfiterConfigStruct.pinpol = kFlexioPinActiveHigh; mFlexioShfiterConfigStruct.smode = kFlexioShifterModeReceive; } else { mFlexioShfiterConfigStruct.timsel = devPtr->timerIdx[0]; mFlexioShfiterConfigStruct.timpol = kFlexioShifterTimerPolarityOnPositive; mFlexioShfiterConfigStruct.pincfg = kFlexioPinConfigOutputDisabled; mFlexioShfiterConfigStruct.pinsel = devPtr->rxPinIdx; /* MOSI */ 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_PININPUT(devPtr->csnPinIdx); /* CSn. */ mFlexioTimerConfigStruct.trgpol = kFlexioTimerTriggerPolarityActiveLow; mFlexioTimerConfigStruct.trgsrc = kFlexioTimerTriggerSourceExternal; mFlexioTimerConfigStruct.pincfg = kFlexioPinConfigOutputDisabled; mFlexioTimerConfigStruct.pinsel = devPtr->sclkPinIdx; /* SCLK. */ mFlexioTimerConfigStruct.pinpol = kFlexioPinActiveHigh; mFlexioTimerConfigStruct.timod = kFlexioTimerModeSingle16Bit; mFlexioTimerConfigStruct.timout = kFlexioTimerOutputZeroNotAffectedByReset; mFlexioTimerConfigStruct.timdec = kFlexioTimerDecSrcOnPinInputShiftPinInput; mFlexioTimerConfigStruct.timrst = kFlexioTimerResetNever; mFlexioTimerConfigStruct.timdis = kFlexioTimerDisableOnTriggerFallingEdge; mFlexioTimerConfigStruct.timena = kFlexioTimerEnableOnTriggerRisingEdge; mFlexioTimerConfigStruct.tstop = kFlexioTimerStopBitDisabled; if (configPtr->cphaOneEnable) { mFlexioTimerConfigStruct.tstart = kFlexioTimerStartBitEnabled; } else { mFlexioTimerConfigStruct.tstart = kFlexioTimerStartBitDisabled; } mFlexioTimerConfigStruct.timcmp = ( (configPtr->bitCount << 1U) - 1U ); FLEXIO_HAL_ConfigureTimer( devPtr->flexioBase, devPtr->timerIdx[0], &mFlexioTimerConfigStruct); return kStatus_FLEXIO_Success; }