Exclude bak files from Git, more CDC ACM ports.

This commit is contained in:
imi415 2021-05-17 00:31:36 +08:00
parent 0649a20515
commit 1567387843
Signed by: imi415
GPG Key ID: 17F01E106F9F5E0A
21 changed files with 2017 additions and 1562 deletions

View File

@ -44,6 +44,10 @@ add_executable(${MCUX_SDK_PROJECT_NAME}
"${ProjDirPath}/source/freertos_hello.c"
"${ProjDirPath}/source/usb_device_interface_0_cic_vcom.c"
"${ProjDirPath}/source/usb_device_interface_0_cic_vcom.h"
"${ProjDirPath}/source/usb_device_interface_2_cic_vcom.c"
"${ProjDirPath}/source/usb_device_interface_2_cic_vcom.h"
"${ProjDirPath}/source/usb_device_interface_4_cic_vcom.c"
"${ProjDirPath}/source/usb_device_interface_4_cic_vcom.h"
"${ProjDirPath}/source/generated/usb_device_composite.c"
"${ProjDirPath}/source/generated/usb_device_composite.h"
"${ProjDirPath}/source/generated/usb_device_descriptor.c"

View File

@ -1,490 +0,0 @@
/*
* How to setup clock using clock driver functions:
*
* 1. Call CLOCK_InitXXXPLL() to configure corresponding PLL clock.
*
* 2. Call CLOCK_InitXXXpfd() to configure corresponding PLL pfd clock.
*
* 3. Call CLOCK_SetMux() to configure corresponding clock source for target clock out.
*
* 4. Call CLOCK_SetDiv() to configure corresponding clock divider for target clock out.
*
* 5. Call CLOCK_SetXtalFreq() to set XTAL frequency based on board settings.
*
*/
/* TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************
!!GlobalInfo
product: Clocks v7.0
processor: MIMXRT1052xxxxB
package_id: MIMXRT1052DVL6B
mcu_data: ksdk2_0
processor_version: 9.0.1
board: IMXRT1050-EVKB
* BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS **********/
#include "clock_config.h"
#include "fsl_iomuxc.h"
/*******************************************************************************
* Definitions
******************************************************************************/
/*******************************************************************************
* Variables
******************************************************************************/
/* System clock frequency. */
extern uint32_t SystemCoreClock;
/*******************************************************************************
************************ BOARD_InitBootClocks function ************************
******************************************************************************/
void BOARD_InitBootClocks(void)
{
BOARD_BootClockRUN();
}
/*******************************************************************************
********************** Configuration BOARD_BootClockRUN ***********************
******************************************************************************/
/* TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************
!!Configuration
name: BOARD_BootClockRUN
called_from_default_init: true
outputs:
- {id: AHB_CLK_ROOT.outFreq, value: 600 MHz}
- {id: CAN_CLK_ROOT.outFreq, value: 40 MHz}
- {id: CKIL_SYNC_CLK_ROOT.outFreq, value: 32.768 kHz}
- {id: CLK_1M.outFreq, value: 1 MHz}
- {id: CLK_24M.outFreq, value: 24 MHz}
- {id: CSI_CLK_ROOT.outFreq, value: 12 MHz}
- {id: ENET1_TX_CLK.outFreq, value: 2.4 MHz}
- {id: ENET_125M_CLK.outFreq, value: 2.4 MHz}
- {id: ENET_25M_REF_CLK.outFreq, value: 1.2 MHz}
- {id: FLEXIO1_CLK_ROOT.outFreq, value: 30 MHz}
- {id: FLEXIO2_CLK_ROOT.outFreq, value: 30 MHz}
- {id: FLEXSPI_CLK_ROOT.outFreq, value: 160 MHz}
- {id: GPT1_ipg_clk_highfreq.outFreq, value: 75 MHz}
- {id: GPT2_ipg_clk_highfreq.outFreq, value: 75 MHz}
- {id: IPG_CLK_ROOT.outFreq, value: 150 MHz}
- {id: LCDIF_CLK_ROOT.outFreq, value: 67.5 MHz}
- {id: LPI2C_CLK_ROOT.outFreq, value: 60 MHz}
- {id: LPSPI_CLK_ROOT.outFreq, value: 105.6 MHz}
- {id: LVDS1_CLK.outFreq, value: 1.2 GHz}
- {id: MQS_MCLK.outFreq, value: 1080/17 MHz}
- {id: PERCLK_CLK_ROOT.outFreq, value: 75 MHz}
- {id: PLL7_MAIN_CLK.outFreq, value: 24 MHz}
- {id: SAI1_CLK_ROOT.outFreq, value: 1080/17 MHz}
- {id: SAI1_MCLK1.outFreq, value: 1080/17 MHz}
- {id: SAI1_MCLK2.outFreq, value: 1080/17 MHz}
- {id: SAI1_MCLK3.outFreq, value: 30 MHz}
- {id: SAI2_CLK_ROOT.outFreq, value: 1080/17 MHz}
- {id: SAI2_MCLK1.outFreq, value: 1080/17 MHz}
- {id: SAI2_MCLK3.outFreq, value: 30 MHz}
- {id: SAI3_CLK_ROOT.outFreq, value: 1080/17 MHz}
- {id: SAI3_MCLK1.outFreq, value: 1080/17 MHz}
- {id: SAI3_MCLK3.outFreq, value: 30 MHz}
- {id: SEMC_CLK_ROOT.outFreq, value: 75 MHz}
- {id: SPDIF0_CLK_ROOT.outFreq, value: 30 MHz}
- {id: TRACE_CLK_ROOT.outFreq, value: 132 MHz}
- {id: UART_CLK_ROOT.outFreq, value: 80 MHz}
- {id: USDHC1_CLK_ROOT.outFreq, value: 198 MHz}
- {id: USDHC2_CLK_ROOT.outFreq, value: 198 MHz}
settings:
- {id: CCM.AHB_PODF.scale, value: '1', locked: true}
- {id: CCM.ARM_PODF.scale, value: '2', locked: true}
- {id: CCM.FLEXSPI_PODF.scale, value: '3', locked: true}
- {id: CCM.FLEXSPI_SEL.sel, value: CCM.PLL3_SW_CLK_SEL}
- {id: CCM.LPSPI_PODF.scale, value: '5', locked: true}
- {id: CCM.PERCLK_PODF.scale, value: '2', locked: true}
- {id: CCM.SEMC_PODF.scale, value: '8'}
- {id: CCM.TRACE_CLK_SEL.sel, value: CCM_ANALOG.PLL2_MAIN_CLK}
- {id: CCM.TRACE_PODF.scale, value: '4', locked: true}
- {id: CCM_ANALOG.PLL1_BYPASS.sel, value: CCM_ANALOG.PLL1}
- {id: CCM_ANALOG.PLL1_PREDIV.scale, value: '1', locked: true}
- {id: CCM_ANALOG.PLL1_VDIV.scale, value: '50', locked: true}
- {id: CCM_ANALOG.PLL2.denom, value: '1', locked: true}
- {id: CCM_ANALOG.PLL2.num, value: '0', locked: true}
- {id: CCM_ANALOG.PLL2_BYPASS.sel, value: CCM_ANALOG.PLL2_OUT_CLK}
- {id: CCM_ANALOG.PLL2_PFD0_BYPASS.sel, value: CCM_ANALOG.PLL2_PFD0}
- {id: CCM_ANALOG.PLL2_PFD1_BYPASS.sel, value: CCM_ANALOG.PLL2_PFD1}
- {id: CCM_ANALOG.PLL2_PFD2_BYPASS.sel, value: CCM_ANALOG.PLL2_PFD2}
- {id: CCM_ANALOG.PLL2_PFD3_BYPASS.sel, value: CCM_ANALOG.PLL2_PFD3}
- {id: CCM_ANALOG.PLL3_BYPASS.sel, value: CCM_ANALOG.PLL3}
- {id: CCM_ANALOG.PLL3_PFD0_BYPASS.sel, value: CCM_ANALOG.PLL3_PFD0}
- {id: CCM_ANALOG.PLL3_PFD0_DIV.scale, value: '33', locked: true}
- {id: CCM_ANALOG.PLL3_PFD0_MUL.scale, value: '18', locked: true}
- {id: CCM_ANALOG.PLL3_PFD1_BYPASS.sel, value: CCM_ANALOG.PLL3_PFD1}
- {id: CCM_ANALOG.PLL3_PFD2_BYPASS.sel, value: CCM_ANALOG.PLL3_PFD2}
- {id: CCM_ANALOG.PLL3_PFD3_BYPASS.sel, value: CCM_ANALOG.PLL3_PFD3}
- {id: CCM_ANALOG.PLL4.denom, value: '50'}
- {id: CCM_ANALOG.PLL4.div, value: '47'}
- {id: CCM_ANALOG.PLL5.denom, value: '1'}
- {id: CCM_ANALOG.PLL5.div, value: '31', locked: true}
- {id: CCM_ANALOG.PLL5.num, value: '0'}
- {id: CCM_ANALOG.PLL5_BYPASS.sel, value: CCM_ANALOG.PLL5_POST_DIV}
- {id: CCM_ANALOG.PLL5_POST_DIV.scale, value: '2'}
- {id: CCM_ANALOG.VIDEO_DIV.scale, value: '4'}
- {id: CCM_ANALOG_PLL_ENET_POWERDOWN_CFG, value: 'Yes'}
- {id: CCM_ANALOG_PLL_USB1_POWER_CFG, value: 'Yes'}
- {id: CCM_ANALOG_PLL_VIDEO_POWERDOWN_CFG, value: 'No'}
sources:
- {id: XTALOSC24M.RTC_OSC.outFreq, value: 32.768 kHz, enabled: true}
* BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS **********/
/*******************************************************************************
* Variables for BOARD_BootClockRUN configuration
******************************************************************************/
const clock_arm_pll_config_t armPllConfig_BOARD_BootClockRUN =
{
.loopDivider = 100, /* PLL loop divider, Fout = Fin * 50 */
.src = 0, /* Bypass clock source, 0 - OSC 24M, 1 - CLK1_P and CLK1_N */
};
const clock_sys_pll_config_t sysPllConfig_BOARD_BootClockRUN =
{
.loopDivider = 1, /* PLL loop divider, Fout = Fin * ( 20 + loopDivider*2 + numerator / denominator ) */
.numerator = 0, /* 30 bit numerator of fractional loop divider */
.denominator = 1, /* 30 bit denominator of fractional loop divider */
.src = 0, /* Bypass clock source, 0 - OSC 24M, 1 - CLK1_P and CLK1_N */
};
const clock_usb_pll_config_t usb1PllConfig_BOARD_BootClockRUN =
{
.loopDivider = 0, /* PLL loop divider, Fout = Fin * 20 */
.src = 0, /* Bypass clock source, 0 - OSC 24M, 1 - CLK1_P and CLK1_N */
};
const clock_video_pll_config_t videoPllConfig_BOARD_BootClockRUN =
{
.loopDivider = 31, /* PLL loop divider, Fout = Fin * ( loopDivider + numerator / denominator ) */
.postDivider = 8, /* Divider after PLL */
.numerator = 0, /* 30 bit numerator of fractional loop divider, Fout = Fin * ( loopDivider + numerator / denominator ) */
.denominator = 1, /* 30 bit denominator of fractional loop divider, Fout = Fin * ( loopDivider + numerator / denominator ) */
.src = 0, /* Bypass clock source, 0 - OSC 24M, 1 - CLK1_P and CLK1_N */
};
/*******************************************************************************
* Code for BOARD_BootClockRUN configuration
******************************************************************************/
void BOARD_BootClockRUN(void)
{
/* Init RTC OSC clock frequency. */
CLOCK_SetRtcXtalFreq(32768U);
/* Enable 1MHz clock output. */
XTALOSC24M->OSC_CONFIG2 |= XTALOSC24M_OSC_CONFIG2_ENABLE_1M_MASK;
/* Use free 1MHz clock output. */
XTALOSC24M->OSC_CONFIG2 &= ~XTALOSC24M_OSC_CONFIG2_MUX_1M_MASK;
/* Set XTAL 24MHz clock frequency. */
CLOCK_SetXtalFreq(24000000U);
/* Enable XTAL 24MHz clock source. */
CLOCK_InitExternalClk(0);
/* Enable internal RC. */
CLOCK_InitRcOsc24M();
/* Switch clock source to external OSC. */
CLOCK_SwitchOsc(kCLOCK_XtalOsc);
/* Set Oscillator ready counter value. */
CCM->CCR = (CCM->CCR & (~CCM_CCR_OSCNT_MASK)) | CCM_CCR_OSCNT(127);
/* Setting PeriphClk2Mux and PeriphMux to provide stable clock before PLLs are initialed */
CLOCK_SetMux(kCLOCK_PeriphClk2Mux, 1); /* Set PERIPH_CLK2 MUX to OSC */
CLOCK_SetMux(kCLOCK_PeriphMux, 1); /* Set PERIPH_CLK MUX to PERIPH_CLK2 */
/* Setting the VDD_SOC to 1.275V. It is necessary to config AHB to 600Mhz. */
DCDC->REG3 = (DCDC->REG3 & (~DCDC_REG3_TRG_MASK)) | DCDC_REG3_TRG(0x13);
/* Waiting for DCDC_STS_DC_OK bit is asserted */
while (DCDC_REG0_STS_DC_OK_MASK != (DCDC_REG0_STS_DC_OK_MASK & DCDC->REG0))
{
}
/* Set AHB_PODF. */
CLOCK_SetDiv(kCLOCK_AhbDiv, 0);
/* Disable IPG clock gate. */
CLOCK_DisableClock(kCLOCK_Adc1);
CLOCK_DisableClock(kCLOCK_Adc2);
CLOCK_DisableClock(kCLOCK_Xbar1);
CLOCK_DisableClock(kCLOCK_Xbar2);
CLOCK_DisableClock(kCLOCK_Xbar3);
/* Set IPG_PODF. */
CLOCK_SetDiv(kCLOCK_IpgDiv, 3);
/* Set ARM_PODF. */
CLOCK_SetDiv(kCLOCK_ArmDiv, 1);
/* Set PERIPH_CLK2_PODF. */
CLOCK_SetDiv(kCLOCK_PeriphClk2Div, 0);
/* Disable PERCLK clock gate. */
CLOCK_DisableClock(kCLOCK_Gpt1);
CLOCK_DisableClock(kCLOCK_Gpt1S);
CLOCK_DisableClock(kCLOCK_Gpt2);
CLOCK_DisableClock(kCLOCK_Gpt2S);
CLOCK_DisableClock(kCLOCK_Pit);
/* Set PERCLK_PODF. */
CLOCK_SetDiv(kCLOCK_PerclkDiv, 1);
/* Disable USDHC1 clock gate. */
CLOCK_DisableClock(kCLOCK_Usdhc1);
/* Set USDHC1_PODF. */
CLOCK_SetDiv(kCLOCK_Usdhc1Div, 1);
/* Set Usdhc1 clock source. */
CLOCK_SetMux(kCLOCK_Usdhc1Mux, 0);
/* Disable USDHC2 clock gate. */
CLOCK_DisableClock(kCLOCK_Usdhc2);
/* Set USDHC2_PODF. */
CLOCK_SetDiv(kCLOCK_Usdhc2Div, 1);
/* Set Usdhc2 clock source. */
CLOCK_SetMux(kCLOCK_Usdhc2Mux, 0);
/* In SDK projects, SDRAM (configured by SEMC) will be initialized in either debug script or dcd.
* With this macro SKIP_SYSCLK_INIT, system pll (selected to be SEMC source clock in SDK projects) will be left unchanged.
* Note: If another clock source is selected for SEMC, user may want to avoid changing that clock as well.*/
#ifndef SKIP_SYSCLK_INIT
/* Disable Semc clock gate. */
CLOCK_DisableClock(kCLOCK_Semc);
/* Set SEMC_PODF. */
CLOCK_SetDiv(kCLOCK_SemcDiv, 7);
/* Set Semc alt clock source. */
CLOCK_SetMux(kCLOCK_SemcAltMux, 0);
/* Set Semc clock source. */
CLOCK_SetMux(kCLOCK_SemcMux, 0);
#endif
/* In SDK projects, external flash (configured by FLEXSPI) will be initialized by dcd.
* With this macro XIP_EXTERNAL_FLASH, usb1 pll (selected to be FLEXSPI clock source in SDK projects) will be left unchanged.
* Note: If another clock source is selected for FLEXSPI, user may want to avoid changing that clock as well.*/
#if !(defined(XIP_EXTERNAL_FLASH) && (XIP_EXTERNAL_FLASH == 1))
/* Disable Flexspi clock gate. */
CLOCK_DisableClock(kCLOCK_FlexSpi);
/* Set FLEXSPI_PODF. */
CLOCK_SetDiv(kCLOCK_FlexspiDiv, 2);
/* Set Flexspi clock source. */
CLOCK_SetMux(kCLOCK_FlexspiMux, 1);
#endif
/* Disable CSI clock gate. */
CLOCK_DisableClock(kCLOCK_Csi);
/* Set CSI_PODF. */
CLOCK_SetDiv(kCLOCK_CsiDiv, 1);
/* Set Csi clock source. */
CLOCK_SetMux(kCLOCK_CsiMux, 0);
/* Disable LPSPI clock gate. */
CLOCK_DisableClock(kCLOCK_Lpspi1);
CLOCK_DisableClock(kCLOCK_Lpspi2);
CLOCK_DisableClock(kCLOCK_Lpspi3);
CLOCK_DisableClock(kCLOCK_Lpspi4);
/* Set LPSPI_PODF. */
CLOCK_SetDiv(kCLOCK_LpspiDiv, 4);
/* Set Lpspi clock source. */
CLOCK_SetMux(kCLOCK_LpspiMux, 2);
/* Disable TRACE clock gate. */
CLOCK_DisableClock(kCLOCK_Trace);
/* Set TRACE_PODF. */
CLOCK_SetDiv(kCLOCK_TraceDiv, 3);
/* Set Trace clock source. */
CLOCK_SetMux(kCLOCK_TraceMux, 0);
/* Disable SAI1 clock gate. */
CLOCK_DisableClock(kCLOCK_Sai1);
/* Set SAI1_CLK_PRED. */
CLOCK_SetDiv(kCLOCK_Sai1PreDiv, 3);
/* Set SAI1_CLK_PODF. */
CLOCK_SetDiv(kCLOCK_Sai1Div, 1);
/* Set Sai1 clock source. */
CLOCK_SetMux(kCLOCK_Sai1Mux, 0);
/* Disable SAI2 clock gate. */
CLOCK_DisableClock(kCLOCK_Sai2);
/* Set SAI2_CLK_PRED. */
CLOCK_SetDiv(kCLOCK_Sai2PreDiv, 3);
/* Set SAI2_CLK_PODF. */
CLOCK_SetDiv(kCLOCK_Sai2Div, 1);
/* Set Sai2 clock source. */
CLOCK_SetMux(kCLOCK_Sai2Mux, 0);
/* Disable SAI3 clock gate. */
CLOCK_DisableClock(kCLOCK_Sai3);
/* Set SAI3_CLK_PRED. */
CLOCK_SetDiv(kCLOCK_Sai3PreDiv, 3);
/* Set SAI3_CLK_PODF. */
CLOCK_SetDiv(kCLOCK_Sai3Div, 1);
/* Set Sai3 clock source. */
CLOCK_SetMux(kCLOCK_Sai3Mux, 0);
/* Disable Lpi2c clock gate. */
CLOCK_DisableClock(kCLOCK_Lpi2c1);
CLOCK_DisableClock(kCLOCK_Lpi2c2);
CLOCK_DisableClock(kCLOCK_Lpi2c3);
/* Set LPI2C_CLK_PODF. */
CLOCK_SetDiv(kCLOCK_Lpi2cDiv, 0);
/* Set Lpi2c clock source. */
CLOCK_SetMux(kCLOCK_Lpi2cMux, 0);
/* Disable CAN clock gate. */
CLOCK_DisableClock(kCLOCK_Can1);
CLOCK_DisableClock(kCLOCK_Can2);
CLOCK_DisableClock(kCLOCK_Can1S);
CLOCK_DisableClock(kCLOCK_Can2S);
/* Set CAN_CLK_PODF. */
CLOCK_SetDiv(kCLOCK_CanDiv, 1);
/* Set Can clock source. */
CLOCK_SetMux(kCLOCK_CanMux, 2);
/* Disable UART clock gate. */
CLOCK_DisableClock(kCLOCK_Lpuart1);
CLOCK_DisableClock(kCLOCK_Lpuart2);
CLOCK_DisableClock(kCLOCK_Lpuart3);
CLOCK_DisableClock(kCLOCK_Lpuart4);
CLOCK_DisableClock(kCLOCK_Lpuart5);
CLOCK_DisableClock(kCLOCK_Lpuart6);
CLOCK_DisableClock(kCLOCK_Lpuart7);
CLOCK_DisableClock(kCLOCK_Lpuart8);
/* Set UART_CLK_PODF. */
CLOCK_SetDiv(kCLOCK_UartDiv, 0);
/* Set Uart clock source. */
CLOCK_SetMux(kCLOCK_UartMux, 0);
/* Disable LCDIF clock gate. */
CLOCK_DisableClock(kCLOCK_LcdPixel);
/* Set LCDIF_PRED. */
CLOCK_SetDiv(kCLOCK_LcdifPreDiv, 1);
/* Set LCDIF_CLK_PODF. */
CLOCK_SetDiv(kCLOCK_LcdifDiv, 3);
/* Set Lcdif pre clock source. */
CLOCK_SetMux(kCLOCK_LcdifPreMux, 5);
/* Disable SPDIF clock gate. */
CLOCK_DisableClock(kCLOCK_Spdif);
/* Set SPDIF0_CLK_PRED. */
CLOCK_SetDiv(kCLOCK_Spdif0PreDiv, 1);
/* Set SPDIF0_CLK_PODF. */
CLOCK_SetDiv(kCLOCK_Spdif0Div, 7);
/* Set Spdif clock source. */
CLOCK_SetMux(kCLOCK_SpdifMux, 3);
/* Disable Flexio1 clock gate. */
CLOCK_DisableClock(kCLOCK_Flexio1);
/* Set FLEXIO1_CLK_PRED. */
CLOCK_SetDiv(kCLOCK_Flexio1PreDiv, 1);
/* Set FLEXIO1_CLK_PODF. */
CLOCK_SetDiv(kCLOCK_Flexio1Div, 7);
/* Set Flexio1 clock source. */
CLOCK_SetMux(kCLOCK_Flexio1Mux, 3);
/* Disable Flexio2 clock gate. */
CLOCK_DisableClock(kCLOCK_Flexio2);
/* Set FLEXIO2_CLK_PRED. */
CLOCK_SetDiv(kCLOCK_Flexio2PreDiv, 1);
/* Set FLEXIO2_CLK_PODF. */
CLOCK_SetDiv(kCLOCK_Flexio2Div, 7);
/* Set Flexio2 clock source. */
CLOCK_SetMux(kCLOCK_Flexio2Mux, 3);
/* Set Pll3 sw clock source. */
CLOCK_SetMux(kCLOCK_Pll3SwMux, 0);
/* Init ARM PLL. */
CLOCK_InitArmPll(&armPllConfig_BOARD_BootClockRUN);
/* In SDK projects, SDRAM (configured by SEMC) will be initialized in either debug script or dcd.
* With this macro SKIP_SYSCLK_INIT, system pll (selected to be SEMC source clock in SDK projects) will be left unchanged.
* Note: If another clock source is selected for SEMC, user may want to avoid changing that clock as well.*/
#ifndef SKIP_SYSCLK_INIT
#if defined(XIP_BOOT_HEADER_DCD_ENABLE) && (XIP_BOOT_HEADER_DCD_ENABLE == 1)
#warning "SKIP_SYSCLK_INIT should be defined to keep system pll (selected to be SEMC source clock in SDK projects) unchanged."
#endif
/* Init System PLL. */
CLOCK_InitSysPll(&sysPllConfig_BOARD_BootClockRUN);
/* Init System pfd0. */
CLOCK_InitSysPfd(kCLOCK_Pfd0, 27);
/* Init System pfd1. */
CLOCK_InitSysPfd(kCLOCK_Pfd1, 16);
/* Init System pfd2. */
CLOCK_InitSysPfd(kCLOCK_Pfd2, 24);
/* Init System pfd3. */
CLOCK_InitSysPfd(kCLOCK_Pfd3, 16);
/* Disable pfd offset. */
CCM_ANALOG->PLL_SYS &= ~CCM_ANALOG_PLL_SYS_PFD_OFFSET_EN_MASK;
#endif
/* In SDK projects, external flash (configured by FLEXSPI) will be initialized by dcd.
* With this macro XIP_EXTERNAL_FLASH, usb1 pll (selected to be FLEXSPI clock source in SDK projects) will be left unchanged.
* Note: If another clock source is selected for FLEXSPI, user may want to avoid changing that clock as well.*/
#if !(defined(XIP_EXTERNAL_FLASH) && (XIP_EXTERNAL_FLASH == 1))
/* Init Usb1 PLL. */
CLOCK_InitUsb1Pll(&usb1PllConfig_BOARD_BootClockRUN);
/* Init Usb1 pfd0. */
CLOCK_InitUsb1Pfd(kCLOCK_Pfd0, 33);
/* Init Usb1 pfd1. */
CLOCK_InitUsb1Pfd(kCLOCK_Pfd1, 16);
/* Init Usb1 pfd2. */
CLOCK_InitUsb1Pfd(kCLOCK_Pfd2, 17);
/* Init Usb1 pfd3. */
CLOCK_InitUsb1Pfd(kCLOCK_Pfd3, 19);
/* Disable Usb1 PLL output for USBPHY1. */
CCM_ANALOG->PLL_USB1 &= ~CCM_ANALOG_PLL_USB1_EN_USB_CLKS_MASK;
#endif
/* DeInit Audio PLL. */
CLOCK_DeinitAudioPll();
/* Bypass Audio PLL. */
CLOCK_SetPllBypass(CCM_ANALOG, kCLOCK_PllAudio, 1);
/* Set divider for Audio PLL. */
CCM_ANALOG->MISC2 &= ~CCM_ANALOG_MISC2_AUDIO_DIV_LSB_MASK;
CCM_ANALOG->MISC2 &= ~CCM_ANALOG_MISC2_AUDIO_DIV_MSB_MASK;
/* Enable Audio PLL output. */
CCM_ANALOG->PLL_AUDIO |= CCM_ANALOG_PLL_AUDIO_ENABLE_MASK;
/* Init Video PLL. */
uint32_t pllVideo;
/* Disable Video PLL output before initial Video PLL. */
CCM_ANALOG->PLL_VIDEO &= ~CCM_ANALOG_PLL_VIDEO_ENABLE_MASK;
/* Bypass PLL first */
CCM_ANALOG->PLL_VIDEO = (CCM_ANALOG->PLL_VIDEO & (~CCM_ANALOG_PLL_VIDEO_BYPASS_CLK_SRC_MASK)) |
CCM_ANALOG_PLL_VIDEO_BYPASS_MASK | CCM_ANALOG_PLL_VIDEO_BYPASS_CLK_SRC(0);
CCM_ANALOG->PLL_VIDEO_NUM = CCM_ANALOG_PLL_VIDEO_NUM_A(0);
CCM_ANALOG->PLL_VIDEO_DENOM = CCM_ANALOG_PLL_VIDEO_DENOM_B(1);
pllVideo = (CCM_ANALOG->PLL_VIDEO & (~(CCM_ANALOG_PLL_VIDEO_DIV_SELECT_MASK | CCM_ANALOG_PLL_VIDEO_POWERDOWN_MASK))) |
CCM_ANALOG_PLL_VIDEO_ENABLE_MASK |CCM_ANALOG_PLL_VIDEO_DIV_SELECT(31);
pllVideo |= CCM_ANALOG_PLL_VIDEO_POST_DIV_SELECT(1);
CCM_ANALOG->MISC2 = (CCM_ANALOG->MISC2 & (~CCM_ANALOG_MISC2_VIDEO_DIV_MASK)) | CCM_ANALOG_MISC2_VIDEO_DIV(3);
CCM_ANALOG->PLL_VIDEO = pllVideo;
while ((CCM_ANALOG->PLL_VIDEO & CCM_ANALOG_PLL_VIDEO_LOCK_MASK) == 0)
{
}
/* Disable pfd offset. */
CCM_ANALOG->PLL_VIDEO &= ~CCM_ANALOG_PLL_VIDEO_PFD_OFFSET_EN_MASK;
/* Disable bypass for Video PLL. */
CLOCK_SetPllBypass(CCM_ANALOG, kCLOCK_PllVideo, 0);
/* DeInit Enet PLL. */
CLOCK_DeinitEnetPll();
/* Bypass Enet PLL. */
CLOCK_SetPllBypass(CCM_ANALOG, kCLOCK_PllEnet, 1);
/* Set Enet output divider. */
CCM_ANALOG->PLL_ENET = (CCM_ANALOG->PLL_ENET & (~CCM_ANALOG_PLL_ENET_DIV_SELECT_MASK)) | CCM_ANALOG_PLL_ENET_DIV_SELECT(1);
/* Enable Enet output. */
CCM_ANALOG->PLL_ENET |= CCM_ANALOG_PLL_ENET_ENABLE_MASK;
/* Enable Enet25M output. */
CCM_ANALOG->PLL_ENET |= CCM_ANALOG_PLL_ENET_ENET_25M_REF_EN_MASK;
/* DeInit Usb2 PLL. */
CLOCK_DeinitUsb2Pll();
/* Bypass Usb2 PLL. */
CLOCK_SetPllBypass(CCM_ANALOG, kCLOCK_PllUsb2, 1);
/* Enable Usb2 PLL output. */
CCM_ANALOG->PLL_USB2 |= CCM_ANALOG_PLL_USB2_ENABLE_MASK;
/* Set preperiph clock source. */
CLOCK_SetMux(kCLOCK_PrePeriphMux, 3);
/* Set periph clock source. */
CLOCK_SetMux(kCLOCK_PeriphMux, 0);
/* Set periph clock2 clock source. */
CLOCK_SetMux(kCLOCK_PeriphClk2Mux, 0);
/* Set per clock source. */
CLOCK_SetMux(kCLOCK_PerclkMux, 0);
/* Set lvds1 clock source. */
CCM_ANALOG->MISC1 = (CCM_ANALOG->MISC1 & (~CCM_ANALOG_MISC1_LVDS1_CLK_SEL_MASK)) | CCM_ANALOG_MISC1_LVDS1_CLK_SEL(0);
/* Set clock out1 divider. */
CCM->CCOSR = (CCM->CCOSR & (~CCM_CCOSR_CLKO1_DIV_MASK)) | CCM_CCOSR_CLKO1_DIV(0);
/* Set clock out1 source. */
CCM->CCOSR = (CCM->CCOSR & (~CCM_CCOSR_CLKO1_SEL_MASK)) | CCM_CCOSR_CLKO1_SEL(1);
/* Set clock out2 divider. */
CCM->CCOSR = (CCM->CCOSR & (~CCM_CCOSR_CLKO2_DIV_MASK)) | CCM_CCOSR_CLKO2_DIV(0);
/* Set clock out2 source. */
CCM->CCOSR = (CCM->CCOSR & (~CCM_CCOSR_CLKO2_SEL_MASK)) | CCM_CCOSR_CLKO2_SEL(18);
/* Set clock out1 drives clock out1. */
CCM->CCOSR &= ~CCM_CCOSR_CLK_OUT_SEL_MASK;
/* Disable clock out1. */
CCM->CCOSR &= ~CCM_CCOSR_CLKO1_EN_MASK;
/* Disable clock out2. */
CCM->CCOSR &= ~CCM_CCOSR_CLKO2_EN_MASK;
/* Set SAI1 MCLK1 clock source. */
IOMUXC_SetSaiMClkClockSource(IOMUXC_GPR, kIOMUXC_GPR_SAI1MClk1Sel, 0);
/* Set SAI1 MCLK2 clock source. */
IOMUXC_SetSaiMClkClockSource(IOMUXC_GPR, kIOMUXC_GPR_SAI1MClk2Sel, 0);
/* Set SAI1 MCLK3 clock source. */
IOMUXC_SetSaiMClkClockSource(IOMUXC_GPR, kIOMUXC_GPR_SAI1MClk3Sel, 0);
/* Set SAI2 MCLK3 clock source. */
IOMUXC_SetSaiMClkClockSource(IOMUXC_GPR, kIOMUXC_GPR_SAI2MClk3Sel, 0);
/* Set SAI3 MCLK3 clock source. */
IOMUXC_SetSaiMClkClockSource(IOMUXC_GPR, kIOMUXC_GPR_SAI3MClk3Sel, 0);
/* Set MQS configuration. */
IOMUXC_MQSConfig(IOMUXC_GPR,kIOMUXC_MqsPwmOverSampleRate32, 0);
/* Set ENET Tx clock source. */
IOMUXC_EnableMode(IOMUXC_GPR, kIOMUXC_GPR_ENET1RefClkMode, false);
/* Set GPT1 High frequency reference clock source. */
IOMUXC_GPR->GPR5 &= ~IOMUXC_GPR_GPR5_VREF_1M_CLK_GPT1_MASK;
/* Set GPT2 High frequency reference clock source. */
IOMUXC_GPR->GPR5 &= ~IOMUXC_GPR_GPR5_VREF_1M_CLK_GPT2_MASK;
/* Set SystemCoreClock variable. */
SystemCoreClock = BOARD_BOOTCLOCKRUN_CORE_CLOCK;
}

View File

@ -1,116 +0,0 @@
#ifndef _CLOCK_CONFIG_H_
#define _CLOCK_CONFIG_H_
#include "fsl_common.h"
/*******************************************************************************
* Definitions
******************************************************************************/
#define BOARD_XTAL0_CLK_HZ 24000000U /*!< Board xtal0 frequency in Hz */
#define BOARD_XTAL32K_CLK_HZ 32768U /*!< Board xtal32k frequency in Hz */
/*******************************************************************************
************************ BOARD_InitBootClocks function ************************
******************************************************************************/
#if defined(__cplusplus)
extern "C" {
#endif /* __cplusplus*/
/*!
* @brief This function executes default configuration of clocks.
*
*/
void BOARD_InitBootClocks(void);
#if defined(__cplusplus)
}
#endif /* __cplusplus*/
/*******************************************************************************
********************** Configuration BOARD_BootClockRUN ***********************
******************************************************************************/
/*******************************************************************************
* Definitions for BOARD_BootClockRUN configuration
******************************************************************************/
#define BOARD_BOOTCLOCKRUN_CORE_CLOCK 600000000U /*!< Core clock frequency: 600000000Hz */
/* Clock outputs (values are in Hz): */
#define BOARD_BOOTCLOCKRUN_AHB_CLK_ROOT 600000000UL
#define BOARD_BOOTCLOCKRUN_CAN_CLK_ROOT 40000000UL
#define BOARD_BOOTCLOCKRUN_CKIL_SYNC_CLK_ROOT 32768UL
#define BOARD_BOOTCLOCKRUN_CLKO1_CLK 0UL
#define BOARD_BOOTCLOCKRUN_CLKO2_CLK 0UL
#define BOARD_BOOTCLOCKRUN_CLK_1M 1000000UL
#define BOARD_BOOTCLOCKRUN_CLK_24M 24000000UL
#define BOARD_BOOTCLOCKRUN_CSI_CLK_ROOT 12000000UL
#define BOARD_BOOTCLOCKRUN_ENET1_TX_CLK 2400000UL
#define BOARD_BOOTCLOCKRUN_ENET_125M_CLK 2400000UL
#define BOARD_BOOTCLOCKRUN_ENET_25M_REF_CLK 1200000UL
#define BOARD_BOOTCLOCKRUN_FLEXIO1_CLK_ROOT 30000000UL
#define BOARD_BOOTCLOCKRUN_FLEXIO2_CLK_ROOT 30000000UL
#define BOARD_BOOTCLOCKRUN_FLEXSPI_CLK_ROOT 160000000UL
#define BOARD_BOOTCLOCKRUN_GPT1_IPG_CLK_HIGHFREQ 75000000UL
#define BOARD_BOOTCLOCKRUN_GPT2_IPG_CLK_HIGHFREQ 75000000UL
#define BOARD_BOOTCLOCKRUN_IPG_CLK_ROOT 150000000UL
#define BOARD_BOOTCLOCKRUN_LCDIF_CLK_ROOT 67500000UL
#define BOARD_BOOTCLOCKRUN_LPI2C_CLK_ROOT 60000000UL
#define BOARD_BOOTCLOCKRUN_LPSPI_CLK_ROOT 105600000UL
#define BOARD_BOOTCLOCKRUN_LVDS1_CLK 1200000000UL
#define BOARD_BOOTCLOCKRUN_MQS_MCLK 63529411UL
#define BOARD_BOOTCLOCKRUN_PERCLK_CLK_ROOT 75000000UL
#define BOARD_BOOTCLOCKRUN_PLL7_MAIN_CLK 24000000UL
#define BOARD_BOOTCLOCKRUN_SAI1_CLK_ROOT 63529411UL
#define BOARD_BOOTCLOCKRUN_SAI1_MCLK1 63529411UL
#define BOARD_BOOTCLOCKRUN_SAI1_MCLK2 63529411UL
#define BOARD_BOOTCLOCKRUN_SAI1_MCLK3 30000000UL
#define BOARD_BOOTCLOCKRUN_SAI2_CLK_ROOT 63529411UL
#define BOARD_BOOTCLOCKRUN_SAI2_MCLK1 63529411UL
#define BOARD_BOOTCLOCKRUN_SAI2_MCLK2 0UL
#define BOARD_BOOTCLOCKRUN_SAI2_MCLK3 30000000UL
#define BOARD_BOOTCLOCKRUN_SAI3_CLK_ROOT 63529411UL
#define BOARD_BOOTCLOCKRUN_SAI3_MCLK1 63529411UL
#define BOARD_BOOTCLOCKRUN_SAI3_MCLK2 0UL
#define BOARD_BOOTCLOCKRUN_SAI3_MCLK3 30000000UL
#define BOARD_BOOTCLOCKRUN_SEMC_CLK_ROOT 75000000UL
#define BOARD_BOOTCLOCKRUN_SPDIF0_CLK_ROOT 30000000UL
#define BOARD_BOOTCLOCKRUN_SPDIF0_EXTCLK_OUT 0UL
#define BOARD_BOOTCLOCKRUN_TRACE_CLK_ROOT 132000000UL
#define BOARD_BOOTCLOCKRUN_UART_CLK_ROOT 80000000UL
#define BOARD_BOOTCLOCKRUN_USBPHY1_CLK 0UL
#define BOARD_BOOTCLOCKRUN_USBPHY2_CLK 0UL
#define BOARD_BOOTCLOCKRUN_USDHC1_CLK_ROOT 198000000UL
#define BOARD_BOOTCLOCKRUN_USDHC2_CLK_ROOT 198000000UL
/*! @brief Arm PLL set for BOARD_BootClockRUN configuration.
*/
extern const clock_arm_pll_config_t armPllConfig_BOARD_BootClockRUN;
/*! @brief Usb1 PLL set for BOARD_BootClockRUN configuration.
*/
extern const clock_usb_pll_config_t usb1PllConfig_BOARD_BootClockRUN;
/*! @brief Sys PLL for BOARD_BootClockRUN configuration.
*/
extern const clock_sys_pll_config_t sysPllConfig_BOARD_BootClockRUN;
/*! @brief Video PLL set for BOARD_BootClockRUN configuration.
*/
extern const clock_video_pll_config_t videoPllConfig_BOARD_BootClockRUN;
/*******************************************************************************
* API for BOARD_BootClockRUN configuration
******************************************************************************/
#if defined(__cplusplus)
extern "C" {
#endif /* __cplusplus*/
/*!
* @brief This function executes configuration of clocks.
*
*/
void BOARD_BootClockRUN(void);
#if defined(__cplusplus)
}
#endif /* __cplusplus*/
#endif /* _CLOCK_CONFIG_H_ */

View File

@ -1,315 +0,0 @@
/*
* Copyright 2020 NXP
* All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
/***********************************************************************************************************************
* This file was generated by the MCUXpresso Config Tools. Any manual edits made to this file
* will be overwritten if the respective MCUXpresso Config Tools is used to update this file.
**********************************************************************************************************************/
#include "dcd.h"
/* Component ID definition, used by tools. */
#ifndef FSL_COMPONENT_ID
#define FSL_COMPONENT_ID "platform.drivers.xip_board"
#endif
#if defined(XIP_BOOT_HEADER_ENABLE) && (XIP_BOOT_HEADER_ENABLE == 1)
#if defined(XIP_BOOT_HEADER_DCD_ENABLE) && (XIP_BOOT_HEADER_DCD_ENABLE == 1)
#if defined(__CC_ARM) || defined(__ARMCC_VERSION) || defined(__GNUC__)
__attribute__((section(".boot_hdr.dcd_data"), used))
#elif defined(__ICCARM__)
#pragma location = ".boot_hdr.dcd_data"
#endif
/* TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************
!!GlobalInfo
product: DCDx V2.0
processor: MIMXRT1052xxxxB
package_id: MIMXRT1052DVL6B
mcu_data: ksdk2_0
processor_version: 0.0.0
board: IMXRT1050-EVKB
output_format: c_array
* BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS **********/
/* COMMENTS BELOW ARE USED AS SETTINGS FOR DCD DATA */
const uint8_t dcd_data[] = {
/* HEADER */
/* Tag */
0xD2,
/* Image Length */
0x04, 0x10,
/* Version */
0x41,
/* COMMANDS */
/* group: 'Imported Commands' */
/* #1.1-113, command header bytes for merged 'Write - value' command */
0xCC, 0x03, 0x8C, 0x04,
/* #1.1, command: write_value, address: CCM_CCGR0, value: 0xFFFFFFFF, size: 4 */
0x40, 0x0F, 0xC0, 0x68, 0xFF, 0xFF, 0xFF, 0xFF,
/* #1.2, command: write_value, address: CCM_CCGR1, value: 0xFFFFFFFF, size: 4 */
0x40, 0x0F, 0xC0, 0x6C, 0xFF, 0xFF, 0xFF, 0xFF,
/* #1.3, command: write_value, address: CCM_CCGR2, value: 0xFFFFFFFF, size: 4 */
0x40, 0x0F, 0xC0, 0x70, 0xFF, 0xFF, 0xFF, 0xFF,
/* #1.4, command: write_value, address: CCM_CCGR3, value: 0xFFFFFFFF, size: 4 */
0x40, 0x0F, 0xC0, 0x74, 0xFF, 0xFF, 0xFF, 0xFF,
/* #1.5, command: write_value, address: CCM_CCGR4, value: 0xFFFFFFFF, size: 4 */
0x40, 0x0F, 0xC0, 0x78, 0xFF, 0xFF, 0xFF, 0xFF,
/* #1.6, command: write_value, address: CCM_CCGR5, value: 0xFFFFFFFF, size: 4 */
0x40, 0x0F, 0xC0, 0x7C, 0xFF, 0xFF, 0xFF, 0xFF,
/* #1.7, command: write_value, address: CCM_CCGR6, value: 0xFFFFFFFF, size: 4 */
0x40, 0x0F, 0xC0, 0x80, 0xFF, 0xFF, 0xFF, 0xFF,
/* #1.8, command: write_value, address: CCM_ANALOG_PLL_SYS, value: 0x2001, size: 4 */
0x40, 0x0D, 0x80, 0x30, 0x00, 0x00, 0x20, 0x01,
/* #1.9, command: write_value, address: CCM_ANALOG_PFD_528, value: 0x1D0000, size: 4 */
0x40, 0x0D, 0x81, 0x00, 0x00, 0x1D, 0x00, 0x00,
/* #1.10, command: write_value, address: CCM_CBCDR, value: 0x10D40, size: 4 */
0x40, 0x0F, 0xC0, 0x14, 0x00, 0x01, 0x0D, 0x40,
/* #1.11, command: write_value, address: IOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_00, value: 0x00, size: 4 */
0x40, 0x1F, 0x80, 0x14, 0x00, 0x00, 0x00, 0x00,
/* #1.12, command: write_value, address: IOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_01, value: 0x00, size: 4 */
0x40, 0x1F, 0x80, 0x18, 0x00, 0x00, 0x00, 0x00,
/* #1.13, command: write_value, address: IOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_02, value: 0x00, size: 4 */
0x40, 0x1F, 0x80, 0x1C, 0x00, 0x00, 0x00, 0x00,
/* #1.14, command: write_value, address: IOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_03, value: 0x00, size: 4 */
0x40, 0x1F, 0x80, 0x20, 0x00, 0x00, 0x00, 0x00,
/* #1.15, command: write_value, address: IOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_04, value: 0x00, size: 4 */
0x40, 0x1F, 0x80, 0x24, 0x00, 0x00, 0x00, 0x00,
/* #1.16, command: write_value, address: IOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_05, value: 0x00, size: 4 */
0x40, 0x1F, 0x80, 0x28, 0x00, 0x00, 0x00, 0x00,
/* #1.17, command: write_value, address: IOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_06, value: 0x00, size: 4 */
0x40, 0x1F, 0x80, 0x2C, 0x00, 0x00, 0x00, 0x00,
/* #1.18, command: write_value, address: IOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_07, value: 0x00, size: 4 */
0x40, 0x1F, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00,
/* #1.19, command: write_value, address: IOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_08, value: 0x00, size: 4 */
0x40, 0x1F, 0x80, 0x34, 0x00, 0x00, 0x00, 0x00,
/* #1.20, command: write_value, address: IOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_09, value: 0x00, size: 4 */
0x40, 0x1F, 0x80, 0x38, 0x00, 0x00, 0x00, 0x00,
/* #1.21, command: write_value, address: IOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_10, value: 0x00, size: 4 */
0x40, 0x1F, 0x80, 0x3C, 0x00, 0x00, 0x00, 0x00,
/* #1.22, command: write_value, address: IOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_11, value: 0x00, size: 4 */
0x40, 0x1F, 0x80, 0x40, 0x00, 0x00, 0x00, 0x00,
/* #1.23, command: write_value, address: IOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_12, value: 0x00, size: 4 */
0x40, 0x1F, 0x80, 0x44, 0x00, 0x00, 0x00, 0x00,
/* #1.24, command: write_value, address: IOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_13, value: 0x00, size: 4 */
0x40, 0x1F, 0x80, 0x48, 0x00, 0x00, 0x00, 0x00,
/* #1.25, command: write_value, address: IOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_14, value: 0x00, size: 4 */
0x40, 0x1F, 0x80, 0x4C, 0x00, 0x00, 0x00, 0x00,
/* #1.26, command: write_value, address: IOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_15, value: 0x00, size: 4 */
0x40, 0x1F, 0x80, 0x50, 0x00, 0x00, 0x00, 0x00,
/* #1.27, command: write_value, address: IOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_16, value: 0x00, size: 4 */
0x40, 0x1F, 0x80, 0x54, 0x00, 0x00, 0x00, 0x00,
/* #1.28, command: write_value, address: IOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_17, value: 0x00, size: 4 */
0x40, 0x1F, 0x80, 0x58, 0x00, 0x00, 0x00, 0x00,
/* #1.29, command: write_value, address: IOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_18, value: 0x00, size: 4 */
0x40, 0x1F, 0x80, 0x5C, 0x00, 0x00, 0x00, 0x00,
/* #1.30, command: write_value, address: IOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_19, value: 0x00, size: 4 */
0x40, 0x1F, 0x80, 0x60, 0x00, 0x00, 0x00, 0x00,
/* #1.31, command: write_value, address: IOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_20, value: 0x00, size: 4 */
0x40, 0x1F, 0x80, 0x64, 0x00, 0x00, 0x00, 0x00,
/* #1.32, command: write_value, address: IOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_21, value: 0x00, size: 4 */
0x40, 0x1F, 0x80, 0x68, 0x00, 0x00, 0x00, 0x00,
/* #1.33, command: write_value, address: IOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_22, value: 0x00, size: 4 */
0x40, 0x1F, 0x80, 0x6C, 0x00, 0x00, 0x00, 0x00,
/* #1.34, command: write_value, address: IOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_23, value: 0x00, size: 4 */
0x40, 0x1F, 0x80, 0x70, 0x00, 0x00, 0x00, 0x00,
/* #1.35, command: write_value, address: IOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_24, value: 0x00, size: 4 */
0x40, 0x1F, 0x80, 0x74, 0x00, 0x00, 0x00, 0x00,
/* #1.36, command: write_value, address: IOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_25, value: 0x00, size: 4 */
0x40, 0x1F, 0x80, 0x78, 0x00, 0x00, 0x00, 0x00,
/* #1.37, command: write_value, address: IOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_26, value: 0x00, size: 4 */
0x40, 0x1F, 0x80, 0x7C, 0x00, 0x00, 0x00, 0x00,
/* #1.38, command: write_value, address: IOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_27, value: 0x00, size: 4 */
0x40, 0x1F, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00,
/* #1.39, command: write_value, address: IOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_28, value: 0x00, size: 4 */
0x40, 0x1F, 0x80, 0x84, 0x00, 0x00, 0x00, 0x00,
/* #1.40, command: write_value, address: IOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_29, value: 0x00, size: 4 */
0x40, 0x1F, 0x80, 0x88, 0x00, 0x00, 0x00, 0x00,
/* #1.41, command: write_value, address: IOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_30, value: 0x00, size: 4 */
0x40, 0x1F, 0x80, 0x8C, 0x00, 0x00, 0x00, 0x00,
/* #1.42, command: write_value, address: IOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_31, value: 0x00, size: 4 */
0x40, 0x1F, 0x80, 0x90, 0x00, 0x00, 0x00, 0x00,
/* #1.43, command: write_value, address: IOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_32, value: 0x00, size: 4 */
0x40, 0x1F, 0x80, 0x94, 0x00, 0x00, 0x00, 0x00,
/* #1.44, command: write_value, address: IOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_33, value: 0x00, size: 4 */
0x40, 0x1F, 0x80, 0x98, 0x00, 0x00, 0x00, 0x00,
/* #1.45, command: write_value, address: IOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_34, value: 0x00, size: 4 */
0x40, 0x1F, 0x80, 0x9C, 0x00, 0x00, 0x00, 0x00,
/* #1.46, command: write_value, address: IOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_35, value: 0x00, size: 4 */
0x40, 0x1F, 0x80, 0xA0, 0x00, 0x00, 0x00, 0x00,
/* #1.47, command: write_value, address: IOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_36, value: 0x00, size: 4 */
0x40, 0x1F, 0x80, 0xA4, 0x00, 0x00, 0x00, 0x00,
/* #1.48, command: write_value, address: IOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_37, value: 0x00, size: 4 */
0x40, 0x1F, 0x80, 0xA8, 0x00, 0x00, 0x00, 0x00,
/* #1.49, command: write_value, address: IOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_38, value: 0x00, size: 4 */
0x40, 0x1F, 0x80, 0xAC, 0x00, 0x00, 0x00, 0x00,
/* #1.50, command: write_value, address: IOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_39, value: 0x10, size: 4 */
0x40, 0x1F, 0x80, 0xB0, 0x00, 0x00, 0x00, 0x10,
/* #1.51, command: write_value, address: IOMUXC_SW_PAD_CTL_PAD_GPIO_EMC_00, value: 0x110F9, size: 4 */
0x40, 0x1F, 0x82, 0x04, 0x00, 0x01, 0x10, 0xF9,
/* #1.52, command: write_value, address: IOMUXC_SW_PAD_CTL_PAD_GPIO_EMC_01, value: 0x110F9, size: 4 */
0x40, 0x1F, 0x82, 0x08, 0x00, 0x01, 0x10, 0xF9,
/* #1.53, command: write_value, address: IOMUXC_SW_PAD_CTL_PAD_GPIO_EMC_02, value: 0x110F9, size: 4 */
0x40, 0x1F, 0x82, 0x0C, 0x00, 0x01, 0x10, 0xF9,
/* #1.54, command: write_value, address: IOMUXC_SW_PAD_CTL_PAD_GPIO_EMC_03, value: 0x110F9, size: 4 */
0x40, 0x1F, 0x82, 0x10, 0x00, 0x01, 0x10, 0xF9,
/* #1.55, command: write_value, address: IOMUXC_SW_PAD_CTL_PAD_GPIO_EMC_04, value: 0x110F9, size: 4 */
0x40, 0x1F, 0x82, 0x14, 0x00, 0x01, 0x10, 0xF9,
/* #1.56, command: write_value, address: IOMUXC_SW_PAD_CTL_PAD_GPIO_EMC_05, value: 0x110F9, size: 4 */
0x40, 0x1F, 0x82, 0x18, 0x00, 0x01, 0x10, 0xF9,
/* #1.57, command: write_value, address: IOMUXC_SW_PAD_CTL_PAD_GPIO_EMC_06, value: 0x110F9, size: 4 */
0x40, 0x1F, 0x82, 0x1C, 0x00, 0x01, 0x10, 0xF9,
/* #1.58, command: write_value, address: IOMUXC_SW_PAD_CTL_PAD_GPIO_EMC_07, value: 0x110F9, size: 4 */
0x40, 0x1F, 0x82, 0x20, 0x00, 0x01, 0x10, 0xF9,
/* #1.59, command: write_value, address: IOMUXC_SW_PAD_CTL_PAD_GPIO_EMC_08, value: 0x110F9, size: 4 */
0x40, 0x1F, 0x82, 0x24, 0x00, 0x01, 0x10, 0xF9,
/* #1.60, command: write_value, address: IOMUXC_SW_PAD_CTL_PAD_GPIO_EMC_09, value: 0x110F9, size: 4 */
0x40, 0x1F, 0x82, 0x28, 0x00, 0x01, 0x10, 0xF9,
/* #1.61, command: write_value, address: IOMUXC_SW_PAD_CTL_PAD_GPIO_EMC_10, value: 0x110F9, size: 4 */
0x40, 0x1F, 0x82, 0x2C, 0x00, 0x01, 0x10, 0xF9,
/* #1.62, command: write_value, address: IOMUXC_SW_PAD_CTL_PAD_GPIO_EMC_11, value: 0x110F9, size: 4 */
0x40, 0x1F, 0x82, 0x30, 0x00, 0x01, 0x10, 0xF9,
/* #1.63, command: write_value, address: IOMUXC_SW_PAD_CTL_PAD_GPIO_EMC_12, value: 0x110F9, size: 4 */
0x40, 0x1F, 0x82, 0x34, 0x00, 0x01, 0x10, 0xF9,
/* #1.64, command: write_value, address: IOMUXC_SW_PAD_CTL_PAD_GPIO_EMC_13, value: 0x110F9, size: 4 */
0x40, 0x1F, 0x82, 0x38, 0x00, 0x01, 0x10, 0xF9,
/* #1.65, command: write_value, address: IOMUXC_SW_PAD_CTL_PAD_GPIO_EMC_14, value: 0x110F9, size: 4 */
0x40, 0x1F, 0x82, 0x3C, 0x00, 0x01, 0x10, 0xF9,
/* #1.66, command: write_value, address: IOMUXC_SW_PAD_CTL_PAD_GPIO_EMC_15, value: 0x110F9, size: 4 */
0x40, 0x1F, 0x82, 0x40, 0x00, 0x01, 0x10, 0xF9,
/* #1.67, command: write_value, address: IOMUXC_SW_PAD_CTL_PAD_GPIO_EMC_16, value: 0x110F9, size: 4 */
0x40, 0x1F, 0x82, 0x44, 0x00, 0x01, 0x10, 0xF9,
/* #1.68, command: write_value, address: IOMUXC_SW_PAD_CTL_PAD_GPIO_EMC_17, value: 0x110F9, size: 4 */
0x40, 0x1F, 0x82, 0x48, 0x00, 0x01, 0x10, 0xF9,
/* #1.69, command: write_value, address: IOMUXC_SW_PAD_CTL_PAD_GPIO_EMC_18, value: 0x110F9, size: 4 */
0x40, 0x1F, 0x82, 0x4C, 0x00, 0x01, 0x10, 0xF9,
/* #1.70, command: write_value, address: IOMUXC_SW_PAD_CTL_PAD_GPIO_EMC_19, value: 0x110F9, size: 4 */
0x40, 0x1F, 0x82, 0x50, 0x00, 0x01, 0x10, 0xF9,
/* #1.71, command: write_value, address: IOMUXC_SW_PAD_CTL_PAD_GPIO_EMC_20, value: 0x110F9, size: 4 */
0x40, 0x1F, 0x82, 0x54, 0x00, 0x01, 0x10, 0xF9,
/* #1.72, command: write_value, address: IOMUXC_SW_PAD_CTL_PAD_GPIO_EMC_21, value: 0x110F9, size: 4 */
0x40, 0x1F, 0x82, 0x58, 0x00, 0x01, 0x10, 0xF9,
/* #1.73, command: write_value, address: IOMUXC_SW_PAD_CTL_PAD_GPIO_EMC_22, value: 0x110F9, size: 4 */
0x40, 0x1F, 0x82, 0x5C, 0x00, 0x01, 0x10, 0xF9,
/* #1.74, command: write_value, address: IOMUXC_SW_PAD_CTL_PAD_GPIO_EMC_23, value: 0x110F9, size: 4 */
0x40, 0x1F, 0x82, 0x60, 0x00, 0x01, 0x10, 0xF9,
/* #1.75, command: write_value, address: IOMUXC_SW_PAD_CTL_PAD_GPIO_EMC_24, value: 0x110F9, size: 4 */
0x40, 0x1F, 0x82, 0x64, 0x00, 0x01, 0x10, 0xF9,
/* #1.76, command: write_value, address: IOMUXC_SW_PAD_CTL_PAD_GPIO_EMC_25, value: 0x110F9, size: 4 */
0x40, 0x1F, 0x82, 0x68, 0x00, 0x01, 0x10, 0xF9,
/* #1.77, command: write_value, address: IOMUXC_SW_PAD_CTL_PAD_GPIO_EMC_26, value: 0x110F9, size: 4 */
0x40, 0x1F, 0x82, 0x6C, 0x00, 0x01, 0x10, 0xF9,
/* #1.78, command: write_value, address: IOMUXC_SW_PAD_CTL_PAD_GPIO_EMC_27, value: 0x110F9, size: 4 */
0x40, 0x1F, 0x82, 0x70, 0x00, 0x01, 0x10, 0xF9,
/* #1.79, command: write_value, address: IOMUXC_SW_PAD_CTL_PAD_GPIO_EMC_28, value: 0x110F9, size: 4 */
0x40, 0x1F, 0x82, 0x74, 0x00, 0x01, 0x10, 0xF9,
/* #1.80, command: write_value, address: IOMUXC_SW_PAD_CTL_PAD_GPIO_EMC_29, value: 0x110F9, size: 4 */
0x40, 0x1F, 0x82, 0x78, 0x00, 0x01, 0x10, 0xF9,
/* #1.81, command: write_value, address: IOMUXC_SW_PAD_CTL_PAD_GPIO_EMC_30, value: 0x110F9, size: 4 */
0x40, 0x1F, 0x82, 0x7C, 0x00, 0x01, 0x10, 0xF9,
/* #1.82, command: write_value, address: IOMUXC_SW_PAD_CTL_PAD_GPIO_EMC_31, value: 0x110F9, size: 4 */
0x40, 0x1F, 0x82, 0x80, 0x00, 0x01, 0x10, 0xF9,
/* #1.83, command: write_value, address: IOMUXC_SW_PAD_CTL_PAD_GPIO_EMC_32, value: 0x110F9, size: 4 */
0x40, 0x1F, 0x82, 0x84, 0x00, 0x01, 0x10, 0xF9,
/* #1.84, command: write_value, address: IOMUXC_SW_PAD_CTL_PAD_GPIO_EMC_33, value: 0x110F9, size: 4 */
0x40, 0x1F, 0x82, 0x88, 0x00, 0x01, 0x10, 0xF9,
/* #1.85, command: write_value, address: IOMUXC_SW_PAD_CTL_PAD_GPIO_EMC_34, value: 0x110F9, size: 4 */
0x40, 0x1F, 0x82, 0x8C, 0x00, 0x01, 0x10, 0xF9,
/* #1.86, command: write_value, address: IOMUXC_SW_PAD_CTL_PAD_GPIO_EMC_35, value: 0x110F9, size: 4 */
0x40, 0x1F, 0x82, 0x90, 0x00, 0x01, 0x10, 0xF9,
/* #1.87, command: write_value, address: IOMUXC_SW_PAD_CTL_PAD_GPIO_EMC_36, value: 0x110F9, size: 4 */
0x40, 0x1F, 0x82, 0x94, 0x00, 0x01, 0x10, 0xF9,
/* #1.88, command: write_value, address: IOMUXC_SW_PAD_CTL_PAD_GPIO_EMC_37, value: 0x110F9, size: 4 */
0x40, 0x1F, 0x82, 0x98, 0x00, 0x01, 0x10, 0xF9,
/* #1.89, command: write_value, address: IOMUXC_SW_PAD_CTL_PAD_GPIO_EMC_38, value: 0x110F9, size: 4 */
0x40, 0x1F, 0x82, 0x9C, 0x00, 0x01, 0x10, 0xF9,
/* #1.90, command: write_value, address: IOMUXC_SW_PAD_CTL_PAD_GPIO_EMC_39, value: 0x110F9, size: 4 */
0x40, 0x1F, 0x82, 0xA0, 0x00, 0x01, 0x10, 0xF9,
/* #1.91, command: write_value, address: SEMC_MCR, value: 0x10000004, size: 4 */
0x40, 0x2F, 0x00, 0x00, 0x10, 0x00, 0x00, 0x04,
/* #1.92, command: write_value, address: SEMC_BMCR0, value: 0x81, size: 4 */
0x40, 0x2F, 0x00, 0x08, 0x00, 0x00, 0x00, 0x81,
/* #1.93, command: write_value, address: SEMC_BMCR1, value: 0x81, size: 4 */
0x40, 0x2F, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x81,
/* #1.94, command: write_value, address: SEMC_BR0, value: 0x8000001B, size: 4 */
0x40, 0x2F, 0x00, 0x10, 0x80, 0x00, 0x00, 0x1B,
/* #1.95, command: write_value, address: SEMC_BR1, value: 0x8200001B, size: 4 */
0x40, 0x2F, 0x00, 0x14, 0x82, 0x00, 0x00, 0x1B,
/* #1.96, command: write_value, address: SEMC_BR2, value: 0x8400001B, size: 4 */
0x40, 0x2F, 0x00, 0x18, 0x84, 0x00, 0x00, 0x1B,
/* #1.97, command: write_value, address: SEMC_BR3, value: 0x8600001B, size: 4 */
0x40, 0x2F, 0x00, 0x1C, 0x86, 0x00, 0x00, 0x1B,
/* #1.98, command: write_value, address: SEMC_BR4, value: 0x90000021, size: 4 */
0x40, 0x2F, 0x00, 0x20, 0x90, 0x00, 0x00, 0x21,
/* #1.99, command: write_value, address: SEMC_BR5, value: 0xA0000019, size: 4 */
0x40, 0x2F, 0x00, 0x24, 0xA0, 0x00, 0x00, 0x19,
/* #1.100, command: write_value, address: SEMC_BR6, value: 0xA8000017, size: 4 */
0x40, 0x2F, 0x00, 0x28, 0xA8, 0x00, 0x00, 0x17,
/* #1.101, command: write_value, address: SEMC_BR7, value: 0xA900001B, size: 4 */
0x40, 0x2F, 0x00, 0x2C, 0xA9, 0x00, 0x00, 0x1B,
/* #1.102, command: write_value, address: SEMC_BR8, value: 0x21, size: 4 */
0x40, 0x2F, 0x00, 0x30, 0x00, 0x00, 0x00, 0x21,
/* #1.103, command: write_value, address: SEMC_IOCR, value: 0x79A8, size: 4 */
0x40, 0x2F, 0x00, 0x04, 0x00, 0x00, 0x79, 0xA8,
/* #1.104, command: write_value, address: SEMC_SDRAMCR0, value: 0xF31, size: 4 */
0x40, 0x2F, 0x00, 0x40, 0x00, 0x00, 0x0F, 0x31,
/* #1.105, command: write_value, address: SEMC_SDRAMCR1, value: 0x652922, size: 4 */
0x40, 0x2F, 0x00, 0x44, 0x00, 0x65, 0x29, 0x22,
/* #1.106, command: write_value, address: SEMC_SDRAMCR2, value: 0x10920, size: 4 */
0x40, 0x2F, 0x00, 0x48, 0x00, 0x01, 0x09, 0x20,
/* #1.107, command: write_value, address: SEMC_SDRAMCR3, value: 0x50210A08, size: 4 */
0x40, 0x2F, 0x00, 0x4C, 0x50, 0x21, 0x0A, 0x08,
/* #1.108, command: write_value, address: SEMC_DBICR0, value: 0x21, size: 4 */
0x40, 0x2F, 0x00, 0x80, 0x00, 0x00, 0x00, 0x21,
/* #1.109, command: write_value, address: SEMC_DBICR1, value: 0x888888, size: 4 */
0x40, 0x2F, 0x00, 0x84, 0x00, 0x88, 0x88, 0x88,
/* #1.110, command: write_value, address: SEMC_IPCR1, value: 0x02, size: 4 */
0x40, 0x2F, 0x00, 0x94, 0x00, 0x00, 0x00, 0x02,
/* #1.111, command: write_value, address: SEMC_IPCR2, value: 0x00, size: 4 */
0x40, 0x2F, 0x00, 0x98, 0x00, 0x00, 0x00, 0x00,
/* #1.112, command: write_value, address: SEMC_IPCR0, value: 0x80000000, size: 4 */
0x40, 0x2F, 0x00, 0x90, 0x80, 0x00, 0x00, 0x00,
/* #1.113, command: write_value, address: SEMC_IPCMD, value: 0xA55A000F, size: 4 */
0x40, 0x2F, 0x00, 0x9C, 0xA5, 0x5A, 0x00, 0x0F,
/* #2, command: check_any_bit_set, address: SEMC_INTR, value: 0x01, size: 4 */
0xCF, 0x00, 0x0C, 0x1C, 0x40, 0x2F, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x01,
/* #3.1-2, command header bytes for merged 'Write - value' command */
0xCC, 0x00, 0x14, 0x04,
/* #3.1, command: write_value, address: SEMC_IPCR0, value: 0x80000000, size: 4 */
0x40, 0x2F, 0x00, 0x90, 0x80, 0x00, 0x00, 0x00,
/* #3.2, command: write_value, address: SEMC_IPCMD, value: 0xA55A000C, size: 4 */
0x40, 0x2F, 0x00, 0x9C, 0xA5, 0x5A, 0x00, 0x0C,
/* #4, command: check_any_bit_set, address: SEMC_INTR, value: 0x01, size: 4 */
0xCF, 0x00, 0x0C, 0x1C, 0x40, 0x2F, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x01,
/* #5.1-2, command header bytes for merged 'Write - value' command */
0xCC, 0x00, 0x14, 0x04,
/* #5.1, command: write_value, address: SEMC_IPCR0, value: 0x80000000, size: 4 */
0x40, 0x2F, 0x00, 0x90, 0x80, 0x00, 0x00, 0x00,
/* #5.2, command: write_value, address: SEMC_IPCMD, value: 0xA55A000C, size: 4 */
0x40, 0x2F, 0x00, 0x9C, 0xA5, 0x5A, 0x00, 0x0C,
/* #6, command: check_any_bit_set, address: SEMC_INTR, value: 0x01, size: 4 */
0xCF, 0x00, 0x0C, 0x1C, 0x40, 0x2F, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x01,
/* #7.1-3, command header bytes for merged 'Write - value' command */
0xCC, 0x00, 0x1C, 0x04,
/* #7.1, command: write_value, address: SEMC_IPTXDAT, value: 0x33, size: 4 */
0x40, 0x2F, 0x00, 0xA0, 0x00, 0x00, 0x00, 0x33,
/* #7.2, command: write_value, address: SEMC_IPCR0, value: 0x80000000, size: 4 */
0x40, 0x2F, 0x00, 0x90, 0x80, 0x00, 0x00, 0x00,
/* #7.3, command: write_value, address: SEMC_IPCMD, value: 0xA55A000A, size: 4 */
0x40, 0x2F, 0x00, 0x9C, 0xA5, 0x5A, 0x00, 0x0A,
/* #8, command: check_any_bit_set, address: SEMC_INTR, value: 0x01, size: 4 */
0xCF, 0x00, 0x0C, 0x1C, 0x40, 0x2F, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x01,
/* #9, command: write_value, address: SEMC_SDRAMCR3, value: 0x50210A09, size: 4 */
0xCC, 0x00, 0x0C, 0x04, 0x40, 0x2F, 0x00, 0x4C, 0x50, 0x21, 0x0A, 0x09
};
/* BE CAREFUL MODIFYING THIS SETTINGS - IT IS YAML SETTINGS FOR TOOLS */
#else
const uint8_t dcd_data[] = {0x00};
#endif /* XIP_BOOT_HEADER_DCD_ENABLE */
#endif /* XIP_BOOT_HEADER_ENABLE */

View File

@ -1,32 +0,0 @@
/*
* Copyright 2020 NXP
* All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
/***********************************************************************************************************************
* This file was generated by the MCUXpresso Config Tools. Any manual edits made to this file
* will be overwritten if the respective MCUXpresso Config Tools is used to update this file.
**********************************************************************************************************************/
#ifndef __DCD__
#define __DCD__
#include <stdint.h>
/*! @name Driver version */
/*@{*/
/*! @brief XIP_BOARD driver version 2.0.1. */
#define FSL_XIP_BOARD_DRIVER_VERSION (MAKE_VERSION(2, 0, 1))
/*@}*/
/*************************************
* DCD Data
*************************************/
#define DCD_TAG_HEADER (0xD2)
#define DCD_VERSION (0x41)
#define DCD_TAG_HEADER_SHIFT (24)
#define DCD_ARRAY_SIZE 1
#endif /* __DCD__ */

View File

@ -136,8 +136,8 @@ instance:
- deviceSetting:
- vendor_id: '0x1FC9'
- product_id: '0x0094'
- manufacturer_string: 'NXP'
- product_string: 'VCOM'
- manufacturer_string: 'NXP Semiconductors'
- product_string: 'CDC Virtual COM'
- self_powered: 'true'
- max_power: '500'
- interfaces:
@ -199,6 +199,122 @@ instance:
- bRefresh: '0'
- bSynchAddress: 'NoSynchronization'
- quick_selection: 'QS_INTERFACE_DIC_VCOM'
- 2:
- interface_class: 'kClassCic'
- setting_cic:
- interface_name: 'CIC VCOM'
- subclass: 'kSubclassAcm'
- protocol: 'kProtocolNone'
- implementation: 'kImplementationCicVcom'
- endpoints_settings:
- 0:
- setting_name: 'Default'
- endpoints:
- 0:
- direction: 'kIn'
- transfer_type: 'kInterrupt'
- synchronization: 'kNoSynchronization'
- usage: 'kData'
- max_packet_size_fs: 'k16'
- polling_interval_fs: '8'
- max_packet_size_hs: 'k16'
- polling_interval_hs: '7'
- bRefresh: '0'
- bSynchAddress: 'NoSynchronization'
- data_interface_count: '1'
- quick_selection: 'QS_INTERFACE_CIC_VCOM'
- 3:
- interface_class: 'kClassDic'
- setting_dic:
- interface_name: 'DIC VCOM'
- subclass: 'kSubclassNone'
- protocol: 'kProtocolNone'
- implementation: 'kImplementationDicVcom'
- endpoints_settings:
- 0:
- setting_name: 'Default'
- endpoints:
- 0:
- direction: 'kIn'
- transfer_type: 'kBulk'
- synchronization: 'kNoSynchronization'
- usage: 'kData'
- max_packet_size_fs: 'k64'
- polling_interval_fs: '0'
- max_packet_size_hs: 'k512'
- polling_interval_hs: '0'
- bRefresh: '0'
- bSynchAddress: 'NoSynchronization'
- 1:
- direction: 'kOut'
- transfer_type: 'kBulk'
- synchronization: 'kNoSynchronization'
- usage: 'kData'
- max_packet_size_fs: 'k64'
- polling_interval_fs: '0'
- max_packet_size_hs: 'k512'
- polling_interval_hs: '0'
- bRefresh: '0'
- bSynchAddress: 'NoSynchronization'
- quick_selection: 'QS_INTERFACE_DIC_VCOM'
- 4:
- interface_class: 'kClassCic'
- setting_cic:
- interface_name: 'CIC VCOM'
- subclass: 'kSubclassAcm'
- protocol: 'kProtocolNone'
- implementation: 'kImplementationCicVcom'
- endpoints_settings:
- 0:
- setting_name: 'Default'
- endpoints:
- 0:
- direction: 'kIn'
- transfer_type: 'kInterrupt'
- synchronization: 'kNoSynchronization'
- usage: 'kData'
- max_packet_size_fs: 'k16'
- polling_interval_fs: '8'
- max_packet_size_hs: 'k16'
- polling_interval_hs: '7'
- bRefresh: '0'
- bSynchAddress: 'NoSynchronization'
- data_interface_count: '1'
- quick_selection: 'QS_INTERFACE_CIC_VCOM'
- 5:
- interface_class: 'kClassDic'
- setting_dic:
- interface_name: 'DIC VCOM'
- subclass: 'kSubclassNone'
- protocol: 'kProtocolNone'
- implementation: 'kImplementationDicVcom'
- endpoints_settings:
- 0:
- setting_name: 'Default'
- endpoints:
- 0:
- direction: 'kIn'
- transfer_type: 'kBulk'
- synchronization: 'kNoSynchronization'
- usage: 'kData'
- max_packet_size_fs: 'k64'
- polling_interval_fs: '0'
- max_packet_size_hs: 'k512'
- polling_interval_hs: '0'
- bRefresh: '0'
- bSynchAddress: 'NoSynchronization'
- 1:
- direction: 'kOut'
- transfer_type: 'kBulk'
- synchronization: 'kNoSynchronization'
- usage: 'kData'
- max_packet_size_fs: 'k64'
- polling_interval_fs: '0'
- max_packet_size_hs: 'k512'
- polling_interval_hs: '0'
- bRefresh: '0'
- bSynchAddress: 'NoSynchronization'
- quick_selection: 'QS_INTERFACE_DIC_VCOM'
* BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS **********/
/* clang-format on */

View File

@ -1,392 +0,0 @@
/***********************************************************************************************************************
* This file was generated by the MCUXpresso Config Tools. Any manual edits made to this file
* will be overwritten if the respective MCUXpresso Config Tools is used to update this file.
**********************************************************************************************************************/
/* clang-format off */
/* TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************
!!GlobalInfo
product: Peripherals v9.0
processor: MIMXRT1052xxxxB
package_id: MIMXRT1052DVL6B
mcu_data: ksdk2_0
processor_version: 9.0.1
board: IMXRT1050-EVKB
functionalGroups:
- name: BOARD_InitPeripherals
UUID: f1fa4e90-59a0-4ebb-b5c6-285f38e255e8
called_from_default_init: true
selectedCore: core0
* BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS **********/
/* TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************
component:
- type: 'system'
- type_id: 'system_54b53072540eeeb8f8e9343e71f28176'
- global_system_definitions:
- user_definitions: ''
- user_includes: ''
* BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS **********/
/* clang-format on */
/***********************************************************************************************************************
* Included files
**********************************************************************************************************************/
#include "peripherals.h"
/***********************************************************************************************************************
* BOARD_InitPeripherals functional group
**********************************************************************************************************************/
/***********************************************************************************************************************
* NVIC initialization code
**********************************************************************************************************************/
/* clang-format off */
/* TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************
instance:
- name: 'NVIC'
- type: 'nvic'
- mode: 'general'
- custom_name_enabled: 'false'
- type_id: 'nvic_57b5eef3774cc60acaede6f5b8bddc67'
- functional_group: 'BOARD_InitPeripherals'
- peripheral: 'NVIC'
- config_sets:
- nvic:
- interrupt_table: []
- interrupts: []
* BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS **********/
/* clang-format on */
/* Empty initialization function (commented out)
static void NVIC_init(void) {
} */
/***********************************************************************************************************************
* LPUART1 initialization code
**********************************************************************************************************************/
/* clang-format off */
/* TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************
instance:
- name: 'LPUART1'
- type: 'lpuart'
- mode: 'polling'
- custom_name_enabled: 'false'
- type_id: 'lpuart_54a65a580e3462acdbacefd5299e0cac'
- functional_group: 'BOARD_InitPeripherals'
- peripheral: 'LPUART1'
- config_sets:
- lpuartConfig_t:
- lpuartConfig:
- clockSource: 'LpuartClock'
- lpuartSrcClkFreq: 'BOARD_BootClockRUN'
- baudRate_Bps: '115200'
- parityMode: 'kLPUART_ParityDisabled'
- dataBitsCount: 'kLPUART_EightDataBits'
- isMsb: 'false'
- stopBitCount: 'kLPUART_OneStopBit'
- txFifoWatermark: '0'
- rxFifoWatermark: '1'
- enableRxRTS: 'false'
- enableTxCTS: 'false'
- txCtsSource: 'kLPUART_CtsSourcePin'
- txCtsConfig: 'kLPUART_CtsSampleAtStart'
- rxIdleType: 'kLPUART_IdleTypeStartBit'
- rxIdleConfig: 'kLPUART_IdleCharacter1'
- enableTx: 'true'
- enableRx: 'true'
- quick_selection: 'QuickSelection1'
* BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS **********/
/* clang-format on */
const lpuart_config_t LPUART1_config = {
.baudRate_Bps = 115200UL,
.parityMode = kLPUART_ParityDisabled,
.dataBitsCount = kLPUART_EightDataBits,
.isMsb = false,
.stopBitCount = kLPUART_OneStopBit,
.txFifoWatermark = 0U,
.rxFifoWatermark = 1U,
.enableRxRTS = false,
.enableTxCTS = false,
.txCtsSource = kLPUART_CtsSourcePin,
.txCtsConfig = kLPUART_CtsSampleAtStart,
.rxIdleType = kLPUART_IdleTypeStartBit,
.rxIdleConfig = kLPUART_IdleCharacter1,
.enableTx = true,
.enableRx = true
};
static void LPUART1_init(void) {
LPUART_Init(LPUART1_PERIPHERAL, &LPUART1_config, LPUART1_CLOCK_SOURCE);
}
/***********************************************************************************************************************
* USB1 initialization code
**********************************************************************************************************************/
/* clang-format off */
/* TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************
instance:
- name: 'USB1'
- type: 'usb'
- mode: 'device'
- custom_name_enabled: 'false'
- type_id: 'usb_49b3e4c7d25fbcd298641994d1b911e9'
- functional_group: 'BOARD_InitPeripherals'
- peripheral: 'USB1'
- config_sets:
- deviceSetting:
- vendor_id: '0x1FC9'
- product_id: '0x0094'
- manufacturer_string: 'NXP'
- product_string: 'VCOM'
- self_powered: 'true'
- max_power: '500'
- interfaces:
- 0:
- interface_class: 'kClassCic'
- setting_cic:
- interface_name: 'CIC VCOM'
- subclass: 'kSubclassAcm'
- protocol: 'kProtocolNone'
- implementation: 'kImplementationCicVcom'
- endpoints_settings:
- 0:
- setting_name: 'Default'
- endpoints:
- 0:
- direction: 'kIn'
- transfer_type: 'kInterrupt'
- synchronization: 'kNoSynchronization'
- usage: 'kData'
- max_packet_size_fs: 'k16'
- polling_interval_fs: '8'
- max_packet_size_hs: 'k16'
- polling_interval_hs: '7'
- bRefresh: '0'
- bSynchAddress: 'NoSynchronization'
- data_interface_count: '1'
- quick_selection: 'QS_INTERFACE_CIC_VCOM'
- 1:
- interface_class: 'kClassDic'
- setting_dic:
- interface_name: 'DIC VCOM'
- subclass: 'kSubclassNone'
- protocol: 'kProtocolNone'
- implementation: 'kImplementationDicVcom'
- endpoints_settings:
- 0:
- setting_name: 'Default'
- endpoints:
- 0:
- direction: 'kIn'
- transfer_type: 'kBulk'
- synchronization: 'kNoSynchronization'
- usage: 'kData'
- max_packet_size_fs: 'k64'
- polling_interval_fs: '0'
- max_packet_size_hs: 'k512'
- polling_interval_hs: '0'
- bRefresh: '0'
- bSynchAddress: 'NoSynchronization'
- 1:
- direction: 'kOut'
- transfer_type: 'kBulk'
- synchronization: 'kNoSynchronization'
- usage: 'kData'
- max_packet_size_fs: 'k64'
- polling_interval_fs: '0'
- max_packet_size_hs: 'k512'
- polling_interval_hs: '0'
- bRefresh: '0'
- bSynchAddress: 'NoSynchronization'
- quick_selection: 'QS_INTERFACE_DIC_VCOM'
- 2:
- interface_class: 'kClassAudio_2_0'
- setting_audio_2_0:
- interface_name: 'Audio control'
- subclass: 'kSubclassAudioControl'
- protocol: 'kProtocolIPV20'
- implementation: 'kImplementationAudioSpeaker'
- endpoints_settings:
- 0:
- setting_name: 'Default'
- endpoints: []
- acHeader_descriptor_audio_2_0:
- bCategory: 'kDesktopSpeaker'
- bmControls: 'kNone'
- units_audio_2_0:
- 0:
- audio_unit: 'kClockSource'
- clock_source:
- bClockID: '1'
- bmAttributesLow: 'kInternalFixedClock'
- bmAttributesHigh: 'kFreeRunning'
- bmControlsLow: 'kHostProgrammable'
- bmControlsHigh: 'kReadOnly'
- 1:
- audio_unit: 'kInputTerminal'
- input_terminal:
- bTerminalID: '2'
- wTerminalType: 'kStreaming'
- bCSourceID: 'bClockID_1'
- bNrChannels: '2'
- bmChannelConfig: 'USB_INTERFACE_AUDIO_CONTROL_INPUT_TERMINAL_CHANNEL_CONFIG_FL USB_INTERFACE_AUDIO_CONTROL_INPUT_TERMINAL_CHANNEL_CONFIG_FR'
- bmControls_0_1bit: 'kNone'
- bmControls_2_3bit: 'kNone'
- bmControls_4_5bit: 'kNone'
- bmControls_6_7bit: 'kNone'
- bmControls_8_9bit: 'kNone'
- bmControls_10_11bit: 'kNone'
- 2:
- audio_unit: 'kFeatureUnit'
- feature_unit:
- bUnitID: '3'
- bSourceID: 'bTerminalID_2'
- bmaControls:
- 0:
- bmControls_0_1bit: 'kHostProgrammable'
- bmControls_2_3bit: 'kHostProgrammable'
- bmControls_4_5bit: 'kNone'
- bmControls_6_7bit: 'kNone'
- bmControls_8_9bit: 'kNone'
- bmControls_10_11bit: 'kNone'
- bmControls_12_13bit: 'kNone'
- bmControls_14_15bit: 'kNone'
- bmControls_16_17bit: 'kNone'
- bmControls_18_19bit: 'kNone'
- bmControls_20_21bit: 'kNone'
- bmControls_22_23bit: 'kNone'
- bmControls_24_25bit: 'kNone'
- bmControls_26_27bit: 'kNone'
- bmControls_28_29bit: 'kNone'
- 1:
- bmControls_0_1bit: 'kNone'
- bmControls_2_3bit: 'kNone'
- bmControls_4_5bit: 'kNone'
- bmControls_6_7bit: 'kNone'
- bmControls_8_9bit: 'kNone'
- bmControls_10_11bit: 'kNone'
- bmControls_12_13bit: 'kNone'
- bmControls_14_15bit: 'kNone'
- bmControls_16_17bit: 'kNone'
- bmControls_18_19bit: 'kNone'
- bmControls_20_21bit: 'kNone'
- bmControls_22_23bit: 'kNone'
- bmControls_24_25bit: 'kNone'
- bmControls_26_27bit: 'kNone'
- bmControls_28_29bit: 'kNone'
- 2:
- bmControls_0_1bit: 'kNone'
- bmControls_2_3bit: 'kNone'
- bmControls_4_5bit: 'kNone'
- bmControls_6_7bit: 'kNone'
- bmControls_8_9bit: 'kNone'
- bmControls_10_11bit: 'kNone'
- bmControls_12_13bit: 'kNone'
- bmControls_14_15bit: 'kNone'
- bmControls_16_17bit: 'kNone'
- bmControls_18_19bit: 'kNone'
- bmControls_20_21bit: 'kNone'
- bmControls_22_23bit: 'kNone'
- bmControls_24_25bit: 'kNone'
- bmControls_26_27bit: 'kNone'
- bmControls_28_29bit: 'kNone'
- 3:
- audio_unit: 'kOutputTerminal'
- output_terminal:
- bTerminalID: '4'
- wTerminalType: 'kSpeaker'
- bSourceID: 'bTerminalID_3'
- bCSourceID: 'bClockID_1'
- bmControls_0_1bit: 'kNone'
- bmControls_2_3bit: 'kNone'
- bmControls_4_5bit: 'kNone'
- bmControls_6_7bit: 'kNone'
- bmControls_8_9bit: 'kNone'
- 3:
- interface_class: 'kClassAudio_2_0'
- setting_audio_2_0:
- interface_name: 'Audio 20'
- subclass: 'kSubclassAudioStream'
- protocol: 'kProtocolIPV20'
- implementation: 'kImplementationNone'
- endpoints_settings:
- 0:
- setting_name: 'Default'
- endpoints: []
- asInterface_descriptor_audio_2_0:
- bTerminalLink: 'bTerminalID_2'
- bmControlsLow: 'kNone'
- bmControlsHigh: 'kNone'
- bFormatType: 'kFormatI'
- bmFormats: 'kUndefined'
- bNrChannels: '2'
- bmChannelConfig: ''
- typeIFormat_descriptor_audio_2_0:
- bSubslotSize: 'kOne'
- bBitResolution: '0'
- 1:
- setting_name: 'Default2'
- endpoints:
- 0:
- direction: 'kOut'
- transfer_type: 'kIsochronous'
- synchronization: 'kAdaptive'
- usage: 'kData'
- max_packet_size_fs: 'k8'
- polling_interval_fs: '1'
- max_packet_size_hs: 'k8'
- polling_interval_hs: '1'
- bRefresh: '0'
- bSynchAddress: 'NoSynchronization'
- cs_as_data_2_0:
- bmControls_0_1bit: 'kNone'
- bmControls_2_3bit: 'kNone'
- bmControls_4_5bit: 'kNone'
- bLockDelayUnits: 'undefined'
- wLockDelay: '0'
- 1:
- direction: 'kIn'
- transfer_type: 'kIsochronous'
- synchronization: 'kNoSynchronization'
- usage: 'kFeedback'
- max_packet_size_fs: 'k8'
- polling_interval_fs: '1'
- max_packet_size_hs: 'k8'
- polling_interval_hs: '1'
- bRefresh: '0'
- bSynchAddress: 'NoSynchronization'
- asInterface_descriptor_audio_2_0:
- bTerminalLink: 'bTerminalID_2'
- bmControlsLow: 'kNone'
- bmControlsHigh: 'kNone'
- bFormatType: 'kFormatI'
- bmFormats: 'kPCM'
- bNrChannels: '2'
- bmChannelConfig: 'USB_INTERFACE_AUDIO_CONTROL_INPUT_TERMINAL_CHANNEL_CONFIG_FL USB_INTERFACE_AUDIO_CONTROL_INPUT_TERMINAL_CHANNEL_CONFIG_FR'
- typeIFormat_descriptor_audio_2_0:
- bSubslotSize: 'kOne'
- bBitResolution: '0'
* BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS **********/
/* clang-format on */
static void USB1_init(void) {
USB_DeviceApplicationInit();
}
/***********************************************************************************************************************
* Initialization functions
**********************************************************************************************************************/
void BOARD_InitPeripherals(void)
{
/* Initialize components */
LPUART1_init();
USB1_init();
}
/***********************************************************************************************************************
* BOARD_InitBootPeripherals function
**********************************************************************************************************************/
void BOARD_InitBootPeripherals(void)
{
BOARD_InitPeripherals();
}

View File

@ -1,49 +0,0 @@
/***********************************************************************************************************************
* This file was generated by the MCUXpresso Config Tools. Any manual edits made to this file
* will be overwritten if the respective MCUXpresso Config Tools is used to update this file.
**********************************************************************************************************************/
#ifndef _PERIPHERALS_H_
#define _PERIPHERALS_H_
/***********************************************************************************************************************
* Included files
**********************************************************************************************************************/
#include "fsl_common.h"
#include "fsl_lpuart.h"
#include "fsl_clock.h"
#if defined(__cplusplus)
extern "C" {
#endif /* __cplusplus */
/***********************************************************************************************************************
* Definitions
**********************************************************************************************************************/
/* Definitions for BOARD_InitPeripherals functional group */
/* Definition of peripheral ID */
#define LPUART1_PERIPHERAL LPUART1
/* Definition of the clock source frequency */
#define LPUART1_CLOCK_SOURCE 80000000UL
/***********************************************************************************************************************
* Global variables
**********************************************************************************************************************/
extern const lpuart_config_t LPUART1_config;
/***********************************************************************************************************************
* Initialization functions
**********************************************************************************************************************/
void BOARD_InitPeripherals(void);
/***********************************************************************************************************************
* BOARD_InitBootPeripherals function
**********************************************************************************************************************/
void BOARD_InitBootPeripherals(void);
#if defined(__cplusplus)
}
#endif
#endif /* _PERIPHERALS_H_ */

View File

@ -1,73 +0,0 @@
/***********************************************************************************************************************
* This file was generated by the MCUXpresso Config Tools. Any manual edits made to this file
* will be overwritten if the respective MCUXpresso Config Tools is used to update this file.
**********************************************************************************************************************/
/*
* TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************
!!GlobalInfo
product: Pins v9.0
processor: MIMXRT1052xxxxB
package_id: MIMXRT1052DVL6B
mcu_data: ksdk2_0
processor_version: 9.0.1
board: IMXRT1050-EVKB
* BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS ***********
*/
#include "fsl_common.h"
#include "fsl_iomuxc.h"
#include "fsl_gpio.h"
#include "pin_mux.h"
/* FUNCTION ************************************************************************************************************
*
* Function Name : BOARD_InitBootPins
* Description : Calls initialization functions.
*
* END ****************************************************************************************************************/
void BOARD_InitBootPins(void) {
BOARD_InitPins();
}
/*
* TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************
BOARD_InitPins:
- options: {callFromInitBoot: 'true', coreID: core0, enableClock: 'true'}
- pin_list:
- {pin_num: L14, peripheral: LPUART1, signal: RX, pin_signal: GPIO_AD_B0_13, software_input_on: Disable, hysteresis_enable: Disable, pull_up_down_config: Pull_Down_100K_Ohm,
pull_keeper_select: Keeper, pull_keeper_enable: Enable, open_drain: Disable, speed: MHZ_100, drive_strength: R0_6, slew_rate: Slow}
- {pin_num: K14, peripheral: LPUART1, signal: TX, pin_signal: GPIO_AD_B0_12, software_input_on: Disable, hysteresis_enable: Disable, pull_up_down_config: Pull_Down_100K_Ohm,
pull_keeper_select: Keeper, pull_keeper_enable: Enable, open_drain: Disable, speed: MHZ_100, drive_strength: R0_6, slew_rate: Slow}
- {pin_num: G13, peripheral: GPIO1, signal: 'gpio_io, 10', pin_signal: GPIO_AD_B0_10, direction: OUTPUT, gpio_init_state: 'true'}
* BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS ***********
*/
/* FUNCTION ************************************************************************************************************
*
* Function Name : BOARD_InitPins
* Description : Configures pin routing and optionally pin electrical features.
*
* END ****************************************************************************************************************/
void BOARD_InitPins(void) {
CLOCK_EnableClock(kCLOCK_Iomuxc);
/* GPIO configuration of INT1_COMBO on GPIO_AD_B0_10 (pin G13) */
gpio_pin_config_t INT1_COMBO_config = {
.direction = kGPIO_DigitalOutput,
.outputLogic = 1U,
.interruptMode = kGPIO_NoIntmode
};
/* Initialize GPIO functionality on GPIO_AD_B0_10 (pin G13) */
GPIO_PinInit(GPIO1, 10U, &INT1_COMBO_config);
IOMUXC_SetPinMux(IOMUXC_GPIO_AD_B0_10_GPIO1_IO10, 0U);
IOMUXC_SetPinMux(IOMUXC_GPIO_AD_B0_12_LPUART1_TX, 0U);
IOMUXC_SetPinMux(IOMUXC_GPIO_AD_B0_13_LPUART1_RX, 0U);
IOMUXC_SetPinConfig(IOMUXC_GPIO_AD_B0_12_LPUART1_TX, 0x10B0U);
IOMUXC_SetPinConfig(IOMUXC_GPIO_AD_B0_13_LPUART1_RX, 0x10B0U);
}
/***********************************************************************************************************************
* EOF
**********************************************************************************************************************/

View File

@ -1,82 +0,0 @@
/***********************************************************************************************************************
* This file was generated by the MCUXpresso Config Tools. Any manual edits made to this file
* will be overwritten if the respective MCUXpresso Config Tools is used to update this file.
**********************************************************************************************************************/
#ifndef _PIN_MUX_H_
#define _PIN_MUX_H_
/***********************************************************************************************************************
* Definitions
**********************************************************************************************************************/
/*! @brief Direction type */
typedef enum _pin_mux_direction
{
kPIN_MUX_DirectionInput = 0U, /* Input direction */
kPIN_MUX_DirectionOutput = 1U, /* Output direction */
kPIN_MUX_DirectionInputOrOutput = 2U /* Input or output direction */
} pin_mux_direction_t;
/*!
* @addtogroup pin_mux
* @{
*/
/***********************************************************************************************************************
* API
**********************************************************************************************************************/
#if defined(__cplusplus)
extern "C" {
#endif
/*!
* @brief Calls initialization functions.
*
*/
void BOARD_InitBootPins(void);
/* GPIO_AD_B0_13 (coord L14), UART1_RXD */
/* Routed pin properties */
#define BOARD_INITPINS_UART1_RXD_PERIPHERAL LPUART1 /*!< Peripheral name */
#define BOARD_INITPINS_UART1_RXD_SIGNAL RX /*!< Signal name */
/* GPIO_AD_B0_12 (coord K14), UART1_TXD */
/* Routed pin properties */
#define BOARD_INITPINS_UART1_TXD_PERIPHERAL LPUART1 /*!< Peripheral name */
#define BOARD_INITPINS_UART1_TXD_SIGNAL TX /*!< Signal name */
/* GPIO_AD_B0_10 (coord G13), JTAG_TDO/J21[13]/INT1_COMBO/ENET_INT/J22[6]/U32[11] */
/* Routed pin properties */
#define BOARD_INITPINS_INT1_COMBO_PERIPHERAL GPIO1 /*!< Peripheral name */
#define BOARD_INITPINS_INT1_COMBO_SIGNAL gpio_io /*!< Signal name */
#define BOARD_INITPINS_INT1_COMBO_CHANNEL 10U /*!< Signal channel */
/* Symbols to be used with GPIO driver */
#define BOARD_INITPINS_INT1_COMBO_GPIO GPIO1 /*!< GPIO peripheral base pointer */
#define BOARD_INITPINS_INT1_COMBO_GPIO_PIN 10U /*!< GPIO pin number */
#define BOARD_INITPINS_INT1_COMBO_GPIO_PIN_MASK (1U << 10U) /*!< GPIO pin mask */
#define BOARD_INITPINS_INT1_COMBO_PORT GPIO1 /*!< PORT peripheral base pointer */
#define BOARD_INITPINS_INT1_COMBO_PIN 10U /*!< PORT pin number */
#define BOARD_INITPINS_INT1_COMBO_PIN_MASK (1U << 10U) /*!< PORT pin mask */
/*!
* @brief Configures pin routing and optionally pin electrical features.
*
*/
void BOARD_InitPins(void);
#if defined(__cplusplus)
}
#endif
/*!
* @}
*/
#endif /* _PIN_MUX_H_ */
/***********************************************************************************************************************
* EOF
**********************************************************************************************************************/

View File

@ -504,6 +504,10 @@
<file path="source/generated/usb_device_descriptor.h" update_enabled="true"/>
<file path="source/usb_device_interface_0_cic_vcom.c" update_enabled="true"/>
<file path="source/usb_device_interface_0_cic_vcom.h" update_enabled="true"/>
<file path="source/usb_device_interface_2_cic_vcom.c" update_enabled="true"/>
<file path="source/usb_device_interface_2_cic_vcom.h" update_enabled="true"/>
<file path="source/usb_device_interface_4_cic_vcom.c" update_enabled="true"/>
<file path="source/usb_device_interface_4_cic_vcom.h" update_enabled="true"/>
</generated_project_files>
<peripherals_profile>
<processor_version>9.0.1</processor_version>
@ -588,8 +592,8 @@
<config_set name="deviceSetting">
<setting name="vendor_id" value="0x1FC9"/>
<setting name="product_id" value="0x0094"/>
<setting name="manufacturer_string" value="NXP"/>
<setting name="product_string" value="VCOM"/>
<setting name="manufacturer_string" value="NXP Semiconductors"/>
<setting name="product_string" value="CDC Virtual COM"/>
<setting name="self_powered" value="true"/>
<setting name="max_power" value="500"/>
<array name="interfaces">
@ -662,6 +666,144 @@
</array>
</struct>
</struct>
<struct name="2">
<setting name="interface_class" value="kClassCic"/>
<struct name="setting_cic" quick_selection="QS_INTERFACE_CIC_VCOM">
<setting name="interface_name" value="CIC VCOM"/>
<setting name="subclass" value="kSubclassAcm"/>
<setting name="protocol" value="kProtocolNone"/>
<setting name="implementation" value="kImplementationCicVcom"/>
<array name="endpoints_settings">
<struct name="0">
<setting name="setting_name" value="Default"/>
<array name="endpoints">
<struct name="0">
<setting name="direction" value="kIn"/>
<setting name="transfer_type" value="kInterrupt"/>
<setting name="synchronization" value="kNoSynchronization"/>
<setting name="usage" value="kData"/>
<setting name="max_packet_size_fs" value="k16"/>
<setting name="polling_interval_fs" value="8"/>
<setting name="max_packet_size_hs" value="k16"/>
<setting name="polling_interval_hs" value="7"/>
<setting name="bRefresh" value="0"/>
<setting name="bSynchAddress" value="NoSynchronization"/>
</struct>
</array>
</struct>
</array>
<setting name="data_interface_count" value="1"/>
</struct>
</struct>
<struct name="3">
<setting name="interface_class" value="kClassDic"/>
<struct name="setting_dic" quick_selection="QS_INTERFACE_DIC_VCOM">
<setting name="interface_name" value="DIC VCOM"/>
<setting name="subclass" value="kSubclassNone"/>
<setting name="protocol" value="kProtocolNone"/>
<setting name="implementation" value="kImplementationDicVcom"/>
<array name="endpoints_settings">
<struct name="0">
<setting name="setting_name" value="Default"/>
<array name="endpoints">
<struct name="0">
<setting name="direction" value="kIn"/>
<setting name="transfer_type" value="kBulk"/>
<setting name="synchronization" value="kNoSynchronization"/>
<setting name="usage" value="kData"/>
<setting name="max_packet_size_fs" value="k64"/>
<setting name="polling_interval_fs" value="0"/>
<setting name="max_packet_size_hs" value="k512"/>
<setting name="polling_interval_hs" value="0"/>
<setting name="bRefresh" value="0"/>
<setting name="bSynchAddress" value="NoSynchronization"/>
</struct>
<struct name="1">
<setting name="direction" value="kOut"/>
<setting name="transfer_type" value="kBulk"/>
<setting name="synchronization" value="kNoSynchronization"/>
<setting name="usage" value="kData"/>
<setting name="max_packet_size_fs" value="k64"/>
<setting name="polling_interval_fs" value="0"/>
<setting name="max_packet_size_hs" value="k512"/>
<setting name="polling_interval_hs" value="0"/>
<setting name="bRefresh" value="0"/>
<setting name="bSynchAddress" value="NoSynchronization"/>
</struct>
</array>
</struct>
</array>
</struct>
</struct>
<struct name="4">
<setting name="interface_class" value="kClassCic"/>
<struct name="setting_cic" quick_selection="QS_INTERFACE_CIC_VCOM">
<setting name="interface_name" value="CIC VCOM"/>
<setting name="subclass" value="kSubclassAcm"/>
<setting name="protocol" value="kProtocolNone"/>
<setting name="implementation" value="kImplementationCicVcom"/>
<array name="endpoints_settings">
<struct name="0">
<setting name="setting_name" value="Default"/>
<array name="endpoints">
<struct name="0">
<setting name="direction" value="kIn"/>
<setting name="transfer_type" value="kInterrupt"/>
<setting name="synchronization" value="kNoSynchronization"/>
<setting name="usage" value="kData"/>
<setting name="max_packet_size_fs" value="k16"/>
<setting name="polling_interval_fs" value="8"/>
<setting name="max_packet_size_hs" value="k16"/>
<setting name="polling_interval_hs" value="7"/>
<setting name="bRefresh" value="0"/>
<setting name="bSynchAddress" value="NoSynchronization"/>
</struct>
</array>
</struct>
</array>
<setting name="data_interface_count" value="1"/>
</struct>
</struct>
<struct name="5">
<setting name="interface_class" value="kClassDic"/>
<struct name="setting_dic" quick_selection="QS_INTERFACE_DIC_VCOM">
<setting name="interface_name" value="DIC VCOM"/>
<setting name="subclass" value="kSubclassNone"/>
<setting name="protocol" value="kProtocolNone"/>
<setting name="implementation" value="kImplementationDicVcom"/>
<array name="endpoints_settings">
<struct name="0">
<setting name="setting_name" value="Default"/>
<array name="endpoints">
<struct name="0">
<setting name="direction" value="kIn"/>
<setting name="transfer_type" value="kBulk"/>
<setting name="synchronization" value="kNoSynchronization"/>
<setting name="usage" value="kData"/>
<setting name="max_packet_size_fs" value="k64"/>
<setting name="polling_interval_fs" value="0"/>
<setting name="max_packet_size_hs" value="k512"/>
<setting name="polling_interval_hs" value="0"/>
<setting name="bRefresh" value="0"/>
<setting name="bSynchAddress" value="NoSynchronization"/>
</struct>
<struct name="1">
<setting name="direction" value="kOut"/>
<setting name="transfer_type" value="kBulk"/>
<setting name="synchronization" value="kNoSynchronization"/>
<setting name="usage" value="kData"/>
<setting name="max_packet_size_fs" value="k64"/>
<setting name="polling_interval_fs" value="0"/>
<setting name="max_packet_size_hs" value="k512"/>
<setting name="polling_interval_hs" value="0"/>
<setting name="bRefresh" value="0"/>
<setting name="bSynchAddress" value="NoSynchronization"/>
</struct>
</array>
</struct>
</array>
</struct>
</struct>
</array>
</config_set>
</instance>

View File

@ -82,6 +82,6 @@ static void hello_task(void *pvParameters)
static void usb_task(void *pvParameters) {
for(;;) {
USB_DeviceTasks();
vTaskDelay(pdMS_TO_TICKS(10));
vTaskDelay(pdMS_TO_TICKS(1));
}
}

View File

@ -47,6 +47,10 @@
#include "usb_device_composite.h"
#include "usb_device_interface_0_cic_vcom.h"
#include "usb_device_interface_2_cic_vcom.h"
#include "usb_device_interface_4_cic_vcom.h"
#if (defined(FSL_FEATURE_SOC_SYSMPU_COUNT) && (FSL_FEATURE_SOC_SYSMPU_COUNT > 0U))
#include "fsl_sysmpu.h"
@ -131,6 +135,20 @@ extern usb_status_t USB_DeviceInterface0CicVcomSetInterface(class_handle_t handl
extern usb_status_t USB_DeviceInterface1DicVcomSetInterface(class_handle_t handle, uint8_t alternateSetting);
extern usb_status_t USB_DeviceInterface2CicVcomInit(usb_device_composite_struct_t *deviceComposite);
extern usb_status_t USB_DeviceInterface2CicVcomCallback(class_handle_t handle, uint32_t event, void *param);
extern usb_status_t USB_DeviceInterface2CicVcomSetConfiguration(class_handle_t handle, uint8_t configuration_index);
extern usb_status_t USB_DeviceInterface2CicVcomSetInterface(class_handle_t handle, uint8_t alternateSetting);
extern usb_status_t USB_DeviceInterface3DicVcomSetInterface(class_handle_t handle, uint8_t alternateSetting);
extern usb_status_t USB_DeviceInterface4CicVcomInit(usb_device_composite_struct_t *deviceComposite);
extern usb_status_t USB_DeviceInterface4CicVcomCallback(class_handle_t handle, uint32_t event, void *param);
extern usb_status_t USB_DeviceInterface4CicVcomSetConfiguration(class_handle_t handle, uint8_t configuration_index);
extern usb_status_t USB_DeviceInterface4CicVcomSetInterface(class_handle_t handle, uint8_t alternateSetting);
extern usb_status_t USB_DeviceInterface5DicVcomSetInterface(class_handle_t handle, uint8_t alternateSetting);
/*******************************************************************************
* Variables
******************************************************************************/
@ -149,6 +167,8 @@ uint32_t isConnectedToHsHost = 0U;
usb_device_composite_struct_t g_UsbDeviceComposite;
extern usb_device_class_struct_t g_UsbDeviceInterface0CicVcomConfig;
extern usb_device_class_struct_t g_UsbDeviceInterface2CicVcomConfig;
extern usb_device_class_struct_t g_UsbDeviceInterface4CicVcomConfig;
/* Set class configurations. */
usb_device_class_config_struct_t g_CompositeClassConfig[USB_COMPOSITE_INTERFACE_COUNT] = {
@ -158,6 +178,18 @@ usb_device_class_config_struct_t g_CompositeClassConfig[USB_COMPOSITE_INTERFACE_
{
(usb_device_class_callback_t)NULL, (class_handle_t)NULL, NULL,
},
{
USB_DeviceInterface2CicVcomCallback, (class_handle_t)NULL, &g_UsbDeviceInterface2CicVcomConfig,
},
{
(usb_device_class_callback_t)NULL, (class_handle_t)NULL, NULL,
},
{
USB_DeviceInterface4CicVcomCallback, (class_handle_t)NULL, &g_UsbDeviceInterface4CicVcomConfig,
},
{
(usb_device_class_callback_t)NULL, (class_handle_t)NULL, NULL,
},
};
/* Set class configuration list. */
@ -690,6 +722,10 @@ static usb_status_t USB_DeviceCallback(usb_device_handle handle, uint32_t event,
g_UsbDeviceComposite.currentConfiguration = 0U;
/* The device is detached - the zero configuration is set. */
USB_DeviceInterface0CicVcomSetConfiguration(g_UsbDeviceComposite.interface0CicVcomHandle, *temp8);
/* The device is detached - the zero configuration is set. */
USB_DeviceInterface2CicVcomSetConfiguration(g_UsbDeviceComposite.interface2CicVcomHandle, *temp8);
/* The device is detached - the zero configuration is set. */
USB_DeviceInterface4CicVcomSetConfiguration(g_UsbDeviceComposite.interface4CicVcomHandle, *temp8);
}
else if (USB_COMPOSITE_CONFIGURATION_INDEX == (*temp8))
{
@ -697,6 +733,8 @@ static usb_status_t USB_DeviceCallback(usb_device_handle handle, uint32_t event,
g_UsbDeviceComposite.attach = 1U;
g_UsbDeviceComposite.currentConfiguration = *temp8;
USB_DeviceInterface0CicVcomSetConfiguration(g_UsbDeviceComposite.interface0CicVcomHandle, *temp8);
USB_DeviceInterface2CicVcomSetConfiguration(g_UsbDeviceComposite.interface2CicVcomHandle, *temp8);
USB_DeviceInterface4CicVcomSetConfiguration(g_UsbDeviceComposite.interface4CicVcomHandle, *temp8);
error = kStatus_USB_Success;
}
else
@ -858,6 +896,20 @@ usb_status_t USB_UpdateInterfaceSetting(uint8_t interface, uint8_t alternateSett
case USB_INTERFACE_1_DIC_VCOM_INDEX:
ret = USB_DeviceInterface1DicVcomSetInterface(g_UsbDeviceComposite.interface0CicVcomHandle, alternateSetting);
break;
case USB_INTERFACE_2_CIC_VCOM_INDEX:
ret = USB_DeviceInterface2CicVcomSetInterface(g_UsbDeviceComposite.interface2CicVcomHandle, alternateSetting);
break;
case USB_INTERFACE_3_DIC_VCOM_INDEX:
ret = USB_DeviceInterface3DicVcomSetInterface(g_UsbDeviceComposite.interface2CicVcomHandle, alternateSetting);
break;
case USB_INTERFACE_4_CIC_VCOM_INDEX:
ret = USB_DeviceInterface4CicVcomSetInterface(g_UsbDeviceComposite.interface4CicVcomHandle, alternateSetting);
break;
case USB_INTERFACE_5_DIC_VCOM_INDEX:
ret = USB_DeviceInterface5DicVcomSetInterface(g_UsbDeviceComposite.interface4CicVcomHandle, alternateSetting);
break;
}
if (ret == kStatus_USB_Success)
@ -888,6 +940,8 @@ usb_status_t USB_DeviceApplicationInit(void)
g_UsbDeviceComposite.speed = USB_SPEED_FULL;
g_UsbDeviceComposite.attach = 0U;
g_UsbDeviceComposite.interface0CicVcomHandle = (class_handle_t)NULL;
g_UsbDeviceComposite.interface2CicVcomHandle = (class_handle_t)NULL;
g_UsbDeviceComposite.interface4CicVcomHandle = (class_handle_t)NULL;
g_UsbDeviceComposite.deviceHandle = NULL;
/* Initialize the usb stack and class drivers. */
@ -901,6 +955,10 @@ usb_status_t USB_DeviceApplicationInit(void)
/* Get the class handle. */
g_UsbDeviceComposite.interface0CicVcomHandle = g_UsbDeviceCompositeConfigList.config[0].classHandle;
USB_DeviceInterface0CicVcomInit(&g_UsbDeviceComposite);
g_UsbDeviceComposite.interface2CicVcomHandle = g_UsbDeviceCompositeConfigList.config[2].classHandle;
USB_DeviceInterface2CicVcomInit(&g_UsbDeviceComposite);
g_UsbDeviceComposite.interface4CicVcomHandle = g_UsbDeviceCompositeConfigList.config[4].classHandle;
USB_DeviceInterface4CicVcomInit(&g_UsbDeviceComposite);
#if (defined(USB_DEVICE_CONFIG_CHARGER_DETECT) && (USB_DEVICE_CONFIG_CHARGER_DETECT > 0U)) && \
@ -1035,7 +1093,11 @@ void USB_DeviceChargerTask(usb_device_composite_struct_t *usbDeviceCompositeDcd)
void USB_DeviceTasks(void)
{
USB_DeviceInterface0CicVcomTask();
USB_DeviceInterface0CicVcomTask();
USB_DeviceInterface2CicVcomTask();
USB_DeviceInterface4CicVcomTask();
#if USB_DEVICE_CONFIG_USE_TASK
USB_DeviceTaskFn(g_UsbDeviceComposite.deviceHandle);
#endif

View File

@ -93,6 +93,8 @@ typedef struct _usb_device_composite_struct
{
usb_device_handle deviceHandle;
class_handle_t interface0CicVcomHandle;
class_handle_t interface2CicVcomHandle;
class_handle_t interface4CicVcomHandle;
uint8_t currentConfiguration; /*Current configuration number*/
uint8_t currentInterfaceAlternateSetting[USB_COMPOSITE_INTERFACE_COUNT]; /*alternate setting number*/
uint8_t speed; /*USB speed code, one of the following: USB_SPEED_FULL(0x00U),USB_SPEED_LOW(0x01U),USB_SPEED_HIGH(0x02U)*/

View File

@ -70,7 +70,7 @@
/*! @brief CDC ACM instance count. */
#ifndef USB_DEVICE_CONFIG_CDC_ACM
#define USB_DEVICE_CONFIG_CDC_ACM (1U)
#define USB_DEVICE_CONFIG_CDC_ACM (3U)
#endif /*USB_DEVICE_CONFIG_CDC_ACM*/
/*! @brief MSC instance count. */
@ -99,7 +99,7 @@
#define USB_DEVICE_CONFIG_SELF_POWER (1U)
/*! @brief How many endpoints are supported in the stack. */
#define USB_DEVICE_CONFIG_ENDPOINTS (3U)
#define USB_DEVICE_CONFIG_ENDPOINTS (7U)
/*! @brief Whether the device task is enabled. */
#define USB_DEVICE_CONFIG_USE_TASK (0U)

View File

@ -109,6 +109,98 @@ usb_device_interface_struct_t g_UsbDeviceInterface1DicVcomInterface[] = {
},
};
usb_device_endpoint_struct_t g_UsbDeviceInterface2CicVcomSetting0DefaultEndpoints[USB_INTERFACE_2_CIC_VCOM_SETTING_0_DEFAULT_ENDPOINT_COUNT] = {
{
USB_INTERFACE_2_CIC_VCOM_SETTING_0_EP_3_INTERRUPT_IN | (USB_IN << USB_DESCRIPTOR_ENDPOINT_ADDRESS_DIRECTION_SHIFT),
USB_ENDPOINT_INTERRUPT,
FS_INTERFACE_2_CIC_VCOM_SETTING_0_EP_3_INTERRUPT_IN_PACKET_SIZE,
FS_INTERFACE_2_CIC_VCOM_SETTING_0_EP_3_INTERRUPT_IN_INTERVAL,
},
};
usb_device_interface_struct_t g_UsbDeviceInterface2CicVcomInterface[] = {
{
USB_INTERFACE_2_CIC_VCOM_SETTING_0_DEFAULT_INDEX, /* The alternate setting of the interface */
{
USB_INTERFACE_2_CIC_VCOM_SETTING_0_DEFAULT_ENDPOINT_COUNT, /* Endpoints count */
g_UsbDeviceInterface2CicVcomSetting0DefaultEndpoints, /* Endpoints handle */
},
NULL,
},
};
usb_device_endpoint_struct_t g_UsbDeviceInterface3DicVcomSetting0DefaultEndpoints[USB_INTERFACE_3_DIC_VCOM_SETTING_0_DEFAULT_ENDPOINT_COUNT] = {
{
USB_INTERFACE_3_DIC_VCOM_SETTING_0_EP_4_BULK_IN | (USB_IN << USB_DESCRIPTOR_ENDPOINT_ADDRESS_DIRECTION_SHIFT),
USB_ENDPOINT_BULK,
FS_INTERFACE_3_DIC_VCOM_SETTING_0_EP_4_BULK_IN_PACKET_SIZE,
FS_INTERFACE_3_DIC_VCOM_SETTING_0_EP_4_BULK_IN_INTERVAL,
},
{
USB_INTERFACE_3_DIC_VCOM_SETTING_0_EP_2_BULK_OUT | (USB_OUT << USB_DESCRIPTOR_ENDPOINT_ADDRESS_DIRECTION_SHIFT),
USB_ENDPOINT_BULK,
FS_INTERFACE_3_DIC_VCOM_SETTING_0_EP_2_BULK_OUT_PACKET_SIZE,
FS_INTERFACE_3_DIC_VCOM_SETTING_0_EP_2_BULK_OUT_INTERVAL,
},
};
usb_device_interface_struct_t g_UsbDeviceInterface3DicVcomInterface[] = {
{
USB_INTERFACE_3_DIC_VCOM_SETTING_0_DEFAULT_INDEX, /* The alternate setting of the interface */
{
USB_INTERFACE_3_DIC_VCOM_SETTING_0_DEFAULT_ENDPOINT_COUNT, /* Endpoints count */
g_UsbDeviceInterface3DicVcomSetting0DefaultEndpoints, /* Endpoints handle */
},
NULL,
},
};
usb_device_endpoint_struct_t g_UsbDeviceInterface4CicVcomSetting0DefaultEndpoints[USB_INTERFACE_4_CIC_VCOM_SETTING_0_DEFAULT_ENDPOINT_COUNT] = {
{
USB_INTERFACE_4_CIC_VCOM_SETTING_0_EP_5_INTERRUPT_IN | (USB_IN << USB_DESCRIPTOR_ENDPOINT_ADDRESS_DIRECTION_SHIFT),
USB_ENDPOINT_INTERRUPT,
FS_INTERFACE_4_CIC_VCOM_SETTING_0_EP_5_INTERRUPT_IN_PACKET_SIZE,
FS_INTERFACE_4_CIC_VCOM_SETTING_0_EP_5_INTERRUPT_IN_INTERVAL,
},
};
usb_device_interface_struct_t g_UsbDeviceInterface4CicVcomInterface[] = {
{
USB_INTERFACE_4_CIC_VCOM_SETTING_0_DEFAULT_INDEX, /* The alternate setting of the interface */
{
USB_INTERFACE_4_CIC_VCOM_SETTING_0_DEFAULT_ENDPOINT_COUNT, /* Endpoints count */
g_UsbDeviceInterface4CicVcomSetting0DefaultEndpoints, /* Endpoints handle */
},
NULL,
},
};
usb_device_endpoint_struct_t g_UsbDeviceInterface5DicVcomSetting0DefaultEndpoints[USB_INTERFACE_5_DIC_VCOM_SETTING_0_DEFAULT_ENDPOINT_COUNT] = {
{
USB_INTERFACE_5_DIC_VCOM_SETTING_0_EP_6_BULK_IN | (USB_IN << USB_DESCRIPTOR_ENDPOINT_ADDRESS_DIRECTION_SHIFT),
USB_ENDPOINT_BULK,
FS_INTERFACE_5_DIC_VCOM_SETTING_0_EP_6_BULK_IN_PACKET_SIZE,
FS_INTERFACE_5_DIC_VCOM_SETTING_0_EP_6_BULK_IN_INTERVAL,
},
{
USB_INTERFACE_5_DIC_VCOM_SETTING_0_EP_3_BULK_OUT | (USB_OUT << USB_DESCRIPTOR_ENDPOINT_ADDRESS_DIRECTION_SHIFT),
USB_ENDPOINT_BULK,
FS_INTERFACE_5_DIC_VCOM_SETTING_0_EP_3_BULK_OUT_PACKET_SIZE,
FS_INTERFACE_5_DIC_VCOM_SETTING_0_EP_3_BULK_OUT_INTERVAL,
},
};
usb_device_interface_struct_t g_UsbDeviceInterface5DicVcomInterface[] = {
{
USB_INTERFACE_5_DIC_VCOM_SETTING_0_DEFAULT_INDEX, /* The alternate setting of the interface */
{
USB_INTERFACE_5_DIC_VCOM_SETTING_0_DEFAULT_ENDPOINT_COUNT, /* Endpoints count */
g_UsbDeviceInterface5DicVcomSetting0DefaultEndpoints, /* Endpoints handle */
},
NULL,
},
};
usb_device_interfaces_struct_t g_UsbDeviceInterface0CicVcomInterfaces[USB_INTERFACE_0_CIC_VCOM_INTERFACE_COUNT] = {
{
USB_INTERFACE_0_CIC_VCOM_CLASS,
@ -141,6 +233,70 @@ usb_device_class_struct_t g_UsbDeviceInterface0CicVcomConfig = {
USB_DEVICE_CONFIGURATION_COUNT,
};
usb_device_interfaces_struct_t g_UsbDeviceInterface2CicVcomInterfaces[USB_INTERFACE_2_CIC_VCOM_INTERFACE_COUNT] = {
{
USB_INTERFACE_2_CIC_VCOM_CLASS,
USB_INTERFACE_2_CIC_VCOM_SUBCLASS,
USB_INTERFACE_2_CIC_VCOM_PROTOCOL,
USB_INTERFACE_2_CIC_VCOM_INDEX,
g_UsbDeviceInterface2CicVcomInterface, /* Interfaces handle */
sizeof(g_UsbDeviceInterface2CicVcomInterface) / sizeof(usb_device_interface_struct_t),
},
{
USB_INTERFACE_3_DIC_VCOM_CLASS,
USB_INTERFACE_3_DIC_VCOM_SUBCLASS,
USB_INTERFACE_3_DIC_VCOM_PROTOCOL,
USB_INTERFACE_3_DIC_VCOM_INDEX,
g_UsbDeviceInterface3DicVcomInterface, /* Interfaces handle */
sizeof(g_UsbDeviceInterface3DicVcomInterface) / sizeof(usb_device_interface_struct_t),
},
};
usb_device_interface_list_t g_UsbDeviceInterface2CicVcomInterfaceList[USB_DEVICE_CONFIGURATION_COUNT] = {
{
USB_INTERFACE_2_CIC_VCOM_INTERFACE_COUNT,
g_UsbDeviceInterface2CicVcomInterfaces, /* The interfaces handle */
},
};
usb_device_class_struct_t g_UsbDeviceInterface2CicVcomConfig = {
g_UsbDeviceInterface2CicVcomInterfaceList,
kUSB_DeviceClassTypeCdc,
USB_DEVICE_CONFIGURATION_COUNT,
};
usb_device_interfaces_struct_t g_UsbDeviceInterface4CicVcomInterfaces[USB_INTERFACE_4_CIC_VCOM_INTERFACE_COUNT] = {
{
USB_INTERFACE_4_CIC_VCOM_CLASS,
USB_INTERFACE_4_CIC_VCOM_SUBCLASS,
USB_INTERFACE_4_CIC_VCOM_PROTOCOL,
USB_INTERFACE_4_CIC_VCOM_INDEX,
g_UsbDeviceInterface4CicVcomInterface, /* Interfaces handle */
sizeof(g_UsbDeviceInterface4CicVcomInterface) / sizeof(usb_device_interface_struct_t),
},
{
USB_INTERFACE_5_DIC_VCOM_CLASS,
USB_INTERFACE_5_DIC_VCOM_SUBCLASS,
USB_INTERFACE_5_DIC_VCOM_PROTOCOL,
USB_INTERFACE_5_DIC_VCOM_INDEX,
g_UsbDeviceInterface5DicVcomInterface, /* Interfaces handle */
sizeof(g_UsbDeviceInterface5DicVcomInterface) / sizeof(usb_device_interface_struct_t),
},
};
usb_device_interface_list_t g_UsbDeviceInterface4CicVcomInterfaceList[USB_DEVICE_CONFIGURATION_COUNT] = {
{
USB_INTERFACE_4_CIC_VCOM_INTERFACE_COUNT,
g_UsbDeviceInterface4CicVcomInterfaces, /* The interfaces handle */
},
};
usb_device_class_struct_t g_UsbDeviceInterface4CicVcomConfig = {
g_UsbDeviceInterface4CicVcomInterfaceList,
kUSB_DeviceClassTypeCdc,
USB_DEVICE_CONFIGURATION_COUNT,
};
USB_DMA_INIT_DATA_ALIGN(USB_DATA_ALIGN_SIZE)
uint8_t g_UsbDeviceDescriptor[] = {
USB_DESCRIPTOR_LENGTH_DEVICE, /* Size of this descriptor in bytes */
@ -188,8 +344,8 @@ USB_DMA_INIT_DATA_ALIGN(USB_DATA_ALIGN_SIZE)
uint8_t g_UsbDeviceConfigurationDescriptor[] = {
USB_DESCRIPTOR_LENGTH_CONFIGURE, /* Size of this descriptor in bytes */
USB_DESCRIPTOR_TYPE_CONFIGURE, /* CONFIGURATION Descriptor Type */
USB_SHORT_GET_LOW(USB_DESCRIPTOR_LENGTH_CONFIGURE + USB_IAD_DESC_SIZE + USB_DESCRIPTOR_LENGTH_INTERFACE + USB_DESCRIPTOR_LENGTH_ENDPOINT + USB_DESCRIPTOR_LENGTH_CDC_HEADER_FUNC + USB_DESCRIPTOR_LENGTH_CDC_CALL_MANAG + USB_DESCRIPTOR_LENGTH_CDC_ABSTRACT + USB_DESCRIPTOR_LENGTH_INTERFACE_0_CIC_VCOM_UNION_FUNC + USB_DESCRIPTOR_LENGTH_INTERFACE + USB_DESCRIPTOR_LENGTH_ENDPOINT + USB_DESCRIPTOR_LENGTH_ENDPOINT),
USB_SHORT_GET_HIGH(USB_DESCRIPTOR_LENGTH_CONFIGURE + USB_IAD_DESC_SIZE + USB_DESCRIPTOR_LENGTH_INTERFACE + USB_DESCRIPTOR_LENGTH_ENDPOINT + USB_DESCRIPTOR_LENGTH_CDC_HEADER_FUNC + USB_DESCRIPTOR_LENGTH_CDC_CALL_MANAG + USB_DESCRIPTOR_LENGTH_CDC_ABSTRACT + USB_DESCRIPTOR_LENGTH_INTERFACE_0_CIC_VCOM_UNION_FUNC + USB_DESCRIPTOR_LENGTH_INTERFACE + USB_DESCRIPTOR_LENGTH_ENDPOINT + USB_DESCRIPTOR_LENGTH_ENDPOINT), /* Total length of data returned for this configuration. */
USB_SHORT_GET_LOW(USB_DESCRIPTOR_LENGTH_CONFIGURE + USB_IAD_DESC_SIZE + USB_DESCRIPTOR_LENGTH_INTERFACE + USB_DESCRIPTOR_LENGTH_ENDPOINT + USB_DESCRIPTOR_LENGTH_CDC_HEADER_FUNC + USB_DESCRIPTOR_LENGTH_CDC_CALL_MANAG + USB_DESCRIPTOR_LENGTH_CDC_ABSTRACT + USB_DESCRIPTOR_LENGTH_INTERFACE_0_CIC_VCOM_UNION_FUNC + USB_DESCRIPTOR_LENGTH_INTERFACE + USB_DESCRIPTOR_LENGTH_ENDPOINT + USB_DESCRIPTOR_LENGTH_ENDPOINT + USB_IAD_DESC_SIZE + USB_DESCRIPTOR_LENGTH_INTERFACE + USB_DESCRIPTOR_LENGTH_ENDPOINT + USB_DESCRIPTOR_LENGTH_CDC_HEADER_FUNC + USB_DESCRIPTOR_LENGTH_CDC_CALL_MANAG + USB_DESCRIPTOR_LENGTH_CDC_ABSTRACT + USB_DESCRIPTOR_LENGTH_INTERFACE_2_CIC_VCOM_UNION_FUNC + USB_DESCRIPTOR_LENGTH_INTERFACE + USB_DESCRIPTOR_LENGTH_ENDPOINT + USB_DESCRIPTOR_LENGTH_ENDPOINT + USB_IAD_DESC_SIZE + USB_DESCRIPTOR_LENGTH_INTERFACE + USB_DESCRIPTOR_LENGTH_ENDPOINT + USB_DESCRIPTOR_LENGTH_CDC_HEADER_FUNC + USB_DESCRIPTOR_LENGTH_CDC_CALL_MANAG + USB_DESCRIPTOR_LENGTH_CDC_ABSTRACT + USB_DESCRIPTOR_LENGTH_INTERFACE_4_CIC_VCOM_UNION_FUNC + USB_DESCRIPTOR_LENGTH_INTERFACE + USB_DESCRIPTOR_LENGTH_ENDPOINT + USB_DESCRIPTOR_LENGTH_ENDPOINT),
USB_SHORT_GET_HIGH(USB_DESCRIPTOR_LENGTH_CONFIGURE + USB_IAD_DESC_SIZE + USB_DESCRIPTOR_LENGTH_INTERFACE + USB_DESCRIPTOR_LENGTH_ENDPOINT + USB_DESCRIPTOR_LENGTH_CDC_HEADER_FUNC + USB_DESCRIPTOR_LENGTH_CDC_CALL_MANAG + USB_DESCRIPTOR_LENGTH_CDC_ABSTRACT + USB_DESCRIPTOR_LENGTH_INTERFACE_0_CIC_VCOM_UNION_FUNC + USB_DESCRIPTOR_LENGTH_INTERFACE + USB_DESCRIPTOR_LENGTH_ENDPOINT + USB_DESCRIPTOR_LENGTH_ENDPOINT + USB_IAD_DESC_SIZE + USB_DESCRIPTOR_LENGTH_INTERFACE + USB_DESCRIPTOR_LENGTH_ENDPOINT + USB_DESCRIPTOR_LENGTH_CDC_HEADER_FUNC + USB_DESCRIPTOR_LENGTH_CDC_CALL_MANAG + USB_DESCRIPTOR_LENGTH_CDC_ABSTRACT + USB_DESCRIPTOR_LENGTH_INTERFACE_2_CIC_VCOM_UNION_FUNC + USB_DESCRIPTOR_LENGTH_INTERFACE + USB_DESCRIPTOR_LENGTH_ENDPOINT + USB_DESCRIPTOR_LENGTH_ENDPOINT + USB_IAD_DESC_SIZE + USB_DESCRIPTOR_LENGTH_INTERFACE + USB_DESCRIPTOR_LENGTH_ENDPOINT + USB_DESCRIPTOR_LENGTH_CDC_HEADER_FUNC + USB_DESCRIPTOR_LENGTH_CDC_CALL_MANAG + USB_DESCRIPTOR_LENGTH_CDC_ABSTRACT + USB_DESCRIPTOR_LENGTH_INTERFACE_4_CIC_VCOM_UNION_FUNC + USB_DESCRIPTOR_LENGTH_INTERFACE + USB_DESCRIPTOR_LENGTH_ENDPOINT + USB_DESCRIPTOR_LENGTH_ENDPOINT), /* Total length of data returned for this configuration. */
USB_COMPOSITE_INTERFACE_COUNT, /* Number of interfaces supported by this configuration */
USB_COMPOSITE_CONFIGURATION_INDEX, /* Value to use as an argument to the
SetConfiguration() request to select this configuration */
@ -296,6 +452,178 @@ uint8_t g_UsbDeviceConfigurationDescriptor[] = {
USB_SHORT_GET_LOW(FS_INTERFACE_1_DIC_VCOM_SETTING_0_EP_1_BULK_OUT_PACKET_SIZE),
USB_SHORT_GET_HIGH(FS_INTERFACE_1_DIC_VCOM_SETTING_0_EP_1_BULK_OUT_PACKET_SIZE),
FS_INTERFACE_1_DIC_VCOM_SETTING_0_EP_1_BULK_OUT_INTERVAL, /* Interval for polling endpoint for data transfers. */
USB_IAD_DESC_SIZE, /* Size of this descriptor in bytes */
USB_DESCRIPTOR_TYPE_INTERFACE_ASSOCIATION, /* INTERFACE_ASSOCIATION Descriptor Type */
USB_INTERFACE_2_CIC_VCOM_INDEX, /* The first interface number associated with this function */
2U, /* The number of contiguous interfaces associated with this function */
USB_INTERFACE_2_CIC_VCOM_CLASS, /* Class code (assigned by the USB-IF). */
USB_INTERFACE_2_CIC_VCOM_SUBCLASS, /* Subclass code (assigned by the USB-IF). */
USB_INTERFACE_2_CIC_VCOM_PROTOCOL, /* Protocol code (assigned by the USB). */
2U, /* Function string descriptor index */
USB_DESCRIPTOR_LENGTH_INTERFACE, /* Size of this descriptor in bytes */
USB_DESCRIPTOR_TYPE_INTERFACE, /* INTERFACE Descriptor Type */
USB_INTERFACE_2_CIC_VCOM_INDEX, /* Number of this interface. */
USB_INTERFACE_2_CIC_VCOM_SETTING_0_DEFAULT_INDEX, /* Value used to select this alternate setting
for the interface identified in the prior field */
USB_INTERFACE_2_CIC_VCOM_SETTING_0_DEFAULT_ENDPOINT_COUNT, /* Number of endpoints used by this
interface setting (excluding endpoint zero). */
USB_INTERFACE_2_CIC_VCOM_CLASS, /* Class code (assigned by the USB-IF). */
USB_INTERFACE_2_CIC_VCOM_SUBCLASS, /* Subclass code (assigned by the USB-IF). */
USB_INTERFACE_2_CIC_VCOM_PROTOCOL, /* Protocol code (assigned by the USB). */
0U, /* Index of string descriptor describing this interface */
USB_DESCRIPTOR_LENGTH_CDC_HEADER_FUNC, /* Size of this descriptor in bytes */
USB_DESCRIPTOR_TYPE_CDC_CS_INTERFACE, /* CS_INTERFACE Descriptor Type */
USB_CDC_HEADER_FUNC_DESC,
0x10U,
0x01U, /* USB Class Definitions for Communications the Communication specification version 1.10 */
USB_DESCRIPTOR_LENGTH_CDC_CALL_MANAG, /* Size of this descriptor in bytes */
USB_DESCRIPTOR_TYPE_CDC_CS_INTERFACE, /* CS_INTERFACE Descriptor Type */
USB_CDC_CALL_MANAGEMENT_FUNC_DESC,
0x01U, /*Bit 0: Whether device handle call management itself 1, Bit 1: Whether device can send/receive call
management information over a Data Class Interface 0 */
USB_INTERFACE_3_DIC_VCOM_INDEX, /* Indicates multiplexed commands are handled via data interface */
USB_DESCRIPTOR_LENGTH_CDC_ABSTRACT, /* Size of this descriptor in bytes */
USB_DESCRIPTOR_TYPE_CDC_CS_INTERFACE, /* CS_INTERFACE Descriptor Type */
USB_CDC_ABSTRACT_CONTROL_FUNC_DESC,
0x06U, /* Bit 0: Whether device supports the request combination of Set_Comm_Feature, Clear_Comm_Feature, and
Get_Comm_Feature 0, Bit 1: Whether device supports the request combination of Set_Line_Coding,
Set_Control_Line_State, Get_Line_Coding, and the notification Serial_State 1, Bit 2: Whether device
supports the request Send_Break, Bit 3: Whether device supports the notification Network_Connection */
USB_DESCRIPTOR_LENGTH_INTERFACE_2_CIC_VCOM_UNION_FUNC, /* Size of this descriptor in bytes */
USB_DESCRIPTOR_TYPE_CDC_CS_INTERFACE, /* CS_INTERFACE Descriptor Type */
USB_CDC_UNION_FUNC_DESC,
USB_INTERFACE_2_CIC_VCOM_INDEX, /* The interface number of the Communications or Data Class interface */
USB_INTERFACE_3_DIC_VCOM_INDEX, /* Interface number of subordinate interface in the Union */
USB_DESCRIPTOR_LENGTH_ENDPOINT, /* Size of this descriptor in bytes */
USB_DESCRIPTOR_TYPE_ENDPOINT, /* ENDPOINT Descriptor Type */
USB_INTERFACE_2_CIC_VCOM_SETTING_0_EP_3_INTERRUPT_IN | (USB_IN << USB_DESCRIPTOR_ENDPOINT_ADDRESS_DIRECTION_SHIFT),
/* The number of the endpoint on the USB device described by this descriptor. */
USB_ENDPOINT_INTERRUPT, /* This field describes the endpoint's attributes */
USB_SHORT_GET_LOW(FS_INTERFACE_2_CIC_VCOM_SETTING_0_EP_3_INTERRUPT_IN_PACKET_SIZE),
USB_SHORT_GET_HIGH(FS_INTERFACE_2_CIC_VCOM_SETTING_0_EP_3_INTERRUPT_IN_PACKET_SIZE),
FS_INTERFACE_2_CIC_VCOM_SETTING_0_EP_3_INTERRUPT_IN_INTERVAL, /* Interval for polling endpoint for data transfers. */
USB_DESCRIPTOR_LENGTH_INTERFACE, /* Size of this descriptor in bytes */
USB_DESCRIPTOR_TYPE_INTERFACE, /* INTERFACE Descriptor Type */
USB_INTERFACE_3_DIC_VCOM_INDEX, /* Number of this interface. */
USB_INTERFACE_3_DIC_VCOM_SETTING_0_DEFAULT_INDEX, /* Value used to select this alternate setting
for the interface identified in the prior field */
USB_INTERFACE_3_DIC_VCOM_SETTING_0_DEFAULT_ENDPOINT_COUNT, /* Number of endpoints used by this
interface setting (excluding endpoint zero). */
USB_INTERFACE_3_DIC_VCOM_CLASS, /* Class code (assigned by the USB-IF). */
USB_INTERFACE_3_DIC_VCOM_SUBCLASS, /* Subclass code (assigned by the USB-IF). */
USB_INTERFACE_3_DIC_VCOM_PROTOCOL, /* Protocol code (assigned by the USB). */
0U, /* Index of string descriptor describing this interface */
USB_DESCRIPTOR_LENGTH_ENDPOINT, /* Size of this descriptor in bytes */
USB_DESCRIPTOR_TYPE_ENDPOINT, /* ENDPOINT Descriptor Type */
USB_INTERFACE_3_DIC_VCOM_SETTING_0_EP_4_BULK_IN | (USB_IN << USB_DESCRIPTOR_ENDPOINT_ADDRESS_DIRECTION_SHIFT),
/* The number of the endpoint on the USB device described by this descriptor. */
USB_ENDPOINT_BULK, /* This field describes the endpoint's attributes */
USB_SHORT_GET_LOW(FS_INTERFACE_3_DIC_VCOM_SETTING_0_EP_4_BULK_IN_PACKET_SIZE),
USB_SHORT_GET_HIGH(FS_INTERFACE_3_DIC_VCOM_SETTING_0_EP_4_BULK_IN_PACKET_SIZE),
FS_INTERFACE_3_DIC_VCOM_SETTING_0_EP_4_BULK_IN_INTERVAL, /* Interval for polling endpoint for data transfers. */
USB_DESCRIPTOR_LENGTH_ENDPOINT, /* Size of this descriptor in bytes */
USB_DESCRIPTOR_TYPE_ENDPOINT, /* ENDPOINT Descriptor Type */
USB_INTERFACE_3_DIC_VCOM_SETTING_0_EP_2_BULK_OUT | (USB_OUT << USB_DESCRIPTOR_ENDPOINT_ADDRESS_DIRECTION_SHIFT),
/* The number of the endpoint on the USB device described by this descriptor. */
USB_ENDPOINT_BULK, /* This field describes the endpoint's attributes */
USB_SHORT_GET_LOW(FS_INTERFACE_3_DIC_VCOM_SETTING_0_EP_2_BULK_OUT_PACKET_SIZE),
USB_SHORT_GET_HIGH(FS_INTERFACE_3_DIC_VCOM_SETTING_0_EP_2_BULK_OUT_PACKET_SIZE),
FS_INTERFACE_3_DIC_VCOM_SETTING_0_EP_2_BULK_OUT_INTERVAL, /* Interval for polling endpoint for data transfers. */
USB_IAD_DESC_SIZE, /* Size of this descriptor in bytes */
USB_DESCRIPTOR_TYPE_INTERFACE_ASSOCIATION, /* INTERFACE_ASSOCIATION Descriptor Type */
USB_INTERFACE_4_CIC_VCOM_INDEX, /* The first interface number associated with this function */
2U, /* The number of contiguous interfaces associated with this function */
USB_INTERFACE_4_CIC_VCOM_CLASS, /* Class code (assigned by the USB-IF). */
USB_INTERFACE_4_CIC_VCOM_SUBCLASS, /* Subclass code (assigned by the USB-IF). */
USB_INTERFACE_4_CIC_VCOM_PROTOCOL, /* Protocol code (assigned by the USB). */
2U, /* Function string descriptor index */
USB_DESCRIPTOR_LENGTH_INTERFACE, /* Size of this descriptor in bytes */
USB_DESCRIPTOR_TYPE_INTERFACE, /* INTERFACE Descriptor Type */
USB_INTERFACE_4_CIC_VCOM_INDEX, /* Number of this interface. */
USB_INTERFACE_4_CIC_VCOM_SETTING_0_DEFAULT_INDEX, /* Value used to select this alternate setting
for the interface identified in the prior field */
USB_INTERFACE_4_CIC_VCOM_SETTING_0_DEFAULT_ENDPOINT_COUNT, /* Number of endpoints used by this
interface setting (excluding endpoint zero). */
USB_INTERFACE_4_CIC_VCOM_CLASS, /* Class code (assigned by the USB-IF). */
USB_INTERFACE_4_CIC_VCOM_SUBCLASS, /* Subclass code (assigned by the USB-IF). */
USB_INTERFACE_4_CIC_VCOM_PROTOCOL, /* Protocol code (assigned by the USB). */
0U, /* Index of string descriptor describing this interface */
USB_DESCRIPTOR_LENGTH_CDC_HEADER_FUNC, /* Size of this descriptor in bytes */
USB_DESCRIPTOR_TYPE_CDC_CS_INTERFACE, /* CS_INTERFACE Descriptor Type */
USB_CDC_HEADER_FUNC_DESC,
0x10U,
0x01U, /* USB Class Definitions for Communications the Communication specification version 1.10 */
USB_DESCRIPTOR_LENGTH_CDC_CALL_MANAG, /* Size of this descriptor in bytes */
USB_DESCRIPTOR_TYPE_CDC_CS_INTERFACE, /* CS_INTERFACE Descriptor Type */
USB_CDC_CALL_MANAGEMENT_FUNC_DESC,
0x01U, /*Bit 0: Whether device handle call management itself 1, Bit 1: Whether device can send/receive call
management information over a Data Class Interface 0 */
USB_INTERFACE_5_DIC_VCOM_INDEX, /* Indicates multiplexed commands are handled via data interface */
USB_DESCRIPTOR_LENGTH_CDC_ABSTRACT, /* Size of this descriptor in bytes */
USB_DESCRIPTOR_TYPE_CDC_CS_INTERFACE, /* CS_INTERFACE Descriptor Type */
USB_CDC_ABSTRACT_CONTROL_FUNC_DESC,
0x06U, /* Bit 0: Whether device supports the request combination of Set_Comm_Feature, Clear_Comm_Feature, and
Get_Comm_Feature 0, Bit 1: Whether device supports the request combination of Set_Line_Coding,
Set_Control_Line_State, Get_Line_Coding, and the notification Serial_State 1, Bit 2: Whether device
supports the request Send_Break, Bit 3: Whether device supports the notification Network_Connection */
USB_DESCRIPTOR_LENGTH_INTERFACE_4_CIC_VCOM_UNION_FUNC, /* Size of this descriptor in bytes */
USB_DESCRIPTOR_TYPE_CDC_CS_INTERFACE, /* CS_INTERFACE Descriptor Type */
USB_CDC_UNION_FUNC_DESC,
USB_INTERFACE_4_CIC_VCOM_INDEX, /* The interface number of the Communications or Data Class interface */
USB_INTERFACE_5_DIC_VCOM_INDEX, /* Interface number of subordinate interface in the Union */
USB_DESCRIPTOR_LENGTH_ENDPOINT, /* Size of this descriptor in bytes */
USB_DESCRIPTOR_TYPE_ENDPOINT, /* ENDPOINT Descriptor Type */
USB_INTERFACE_4_CIC_VCOM_SETTING_0_EP_5_INTERRUPT_IN | (USB_IN << USB_DESCRIPTOR_ENDPOINT_ADDRESS_DIRECTION_SHIFT),
/* The number of the endpoint on the USB device described by this descriptor. */
USB_ENDPOINT_INTERRUPT, /* This field describes the endpoint's attributes */
USB_SHORT_GET_LOW(FS_INTERFACE_4_CIC_VCOM_SETTING_0_EP_5_INTERRUPT_IN_PACKET_SIZE),
USB_SHORT_GET_HIGH(FS_INTERFACE_4_CIC_VCOM_SETTING_0_EP_5_INTERRUPT_IN_PACKET_SIZE),
FS_INTERFACE_4_CIC_VCOM_SETTING_0_EP_5_INTERRUPT_IN_INTERVAL, /* Interval for polling endpoint for data transfers. */
USB_DESCRIPTOR_LENGTH_INTERFACE, /* Size of this descriptor in bytes */
USB_DESCRIPTOR_TYPE_INTERFACE, /* INTERFACE Descriptor Type */
USB_INTERFACE_5_DIC_VCOM_INDEX, /* Number of this interface. */
USB_INTERFACE_5_DIC_VCOM_SETTING_0_DEFAULT_INDEX, /* Value used to select this alternate setting
for the interface identified in the prior field */
USB_INTERFACE_5_DIC_VCOM_SETTING_0_DEFAULT_ENDPOINT_COUNT, /* Number of endpoints used by this
interface setting (excluding endpoint zero). */
USB_INTERFACE_5_DIC_VCOM_CLASS, /* Class code (assigned by the USB-IF). */
USB_INTERFACE_5_DIC_VCOM_SUBCLASS, /* Subclass code (assigned by the USB-IF). */
USB_INTERFACE_5_DIC_VCOM_PROTOCOL, /* Protocol code (assigned by the USB). */
0U, /* Index of string descriptor describing this interface */
USB_DESCRIPTOR_LENGTH_ENDPOINT, /* Size of this descriptor in bytes */
USB_DESCRIPTOR_TYPE_ENDPOINT, /* ENDPOINT Descriptor Type */
USB_INTERFACE_5_DIC_VCOM_SETTING_0_EP_6_BULK_IN | (USB_IN << USB_DESCRIPTOR_ENDPOINT_ADDRESS_DIRECTION_SHIFT),
/* The number of the endpoint on the USB device described by this descriptor. */
USB_ENDPOINT_BULK, /* This field describes the endpoint's attributes */
USB_SHORT_GET_LOW(FS_INTERFACE_5_DIC_VCOM_SETTING_0_EP_6_BULK_IN_PACKET_SIZE),
USB_SHORT_GET_HIGH(FS_INTERFACE_5_DIC_VCOM_SETTING_0_EP_6_BULK_IN_PACKET_SIZE),
FS_INTERFACE_5_DIC_VCOM_SETTING_0_EP_6_BULK_IN_INTERVAL, /* Interval for polling endpoint for data transfers. */
USB_DESCRIPTOR_LENGTH_ENDPOINT, /* Size of this descriptor in bytes */
USB_DESCRIPTOR_TYPE_ENDPOINT, /* ENDPOINT Descriptor Type */
USB_INTERFACE_5_DIC_VCOM_SETTING_0_EP_3_BULK_OUT | (USB_OUT << USB_DESCRIPTOR_ENDPOINT_ADDRESS_DIRECTION_SHIFT),
/* The number of the endpoint on the USB device described by this descriptor. */
USB_ENDPOINT_BULK, /* This field describes the endpoint's attributes */
USB_SHORT_GET_LOW(FS_INTERFACE_5_DIC_VCOM_SETTING_0_EP_3_BULK_OUT_PACKET_SIZE),
USB_SHORT_GET_HIGH(FS_INTERFACE_5_DIC_VCOM_SETTING_0_EP_3_BULK_OUT_PACKET_SIZE),
FS_INTERFACE_5_DIC_VCOM_SETTING_0_EP_3_BULK_OUT_INTERVAL, /* Interval for polling endpoint for data transfers. */
};
USB_DMA_INIT_DATA_ALIGN(USB_DATA_ALIGN_SIZE)
@ -308,7 +636,7 @@ uint8_t g_UsbDeviceString0[] = {
USB_DMA_INIT_DATA_ALIGN(USB_DATA_ALIGN_SIZE)
uint8_t g_UsbDeviceString1[] = {
2U + 2U * 3U,
2U + 2U * 18U,
USB_DESCRIPTOR_TYPE_STRING,
'N',
0x00U,
@ -316,14 +644,66 @@ uint8_t g_UsbDeviceString1[] = {
0x00U,
'P',
0x00U,
' ',
0x00U,
'S',
0x00U,
'e',
0x00U,
'm',
0x00U,
'i',
0x00U,
'c',
0x00U,
'o',
0x00U,
'n',
0x00U,
'd',
0x00U,
'u',
0x00U,
'c',
0x00U,
't',
0x00U,
'o',
0x00U,
'r',
0x00U,
's',
0x00U,
};
USB_DMA_INIT_DATA_ALIGN(USB_DATA_ALIGN_SIZE)
uint8_t g_UsbDeviceString2[] = {
2U + 2U * 4U,
2U + 2U * 15U,
USB_DESCRIPTOR_TYPE_STRING,
'C',
0x00U,
'D',
0x00U,
'C',
0x00U,
' ',
0x00U,
'V',
0x00U,
'i',
0x00U,
'r',
0x00U,
't',
0x00U,
'u',
0x00U,
'a',
0x00U,
'l',
0x00U,
' ',
0x00U,
'C',
0x00U,
'O',
@ -451,6 +831,30 @@ static usb_endpoint_setting_t getEndpointSetting (uint8_t speed, uint8_t alterna
setting.interval = HS_INTERFACE_1_DIC_VCOM_SETTING_0_EP_1_BULK_OUT_INTERVAL;
setting.size = HS_INTERFACE_1_DIC_VCOM_SETTING_0_EP_1_BULK_OUT_PACKET_SIZE;
break;
case USB_INTERFACE_2_CIC_VCOM_SETTING_0_EP_3_INTERRUPT_IN | USB_INTERFACE_2_CIC_VCOM_SETTING_0_EP_3_INTERRUPT_IN_DIRECTION:
setting.interval = HS_INTERFACE_2_CIC_VCOM_SETTING_0_EP_3_INTERRUPT_IN_INTERVAL;
setting.size = HS_INTERFACE_2_CIC_VCOM_SETTING_0_EP_3_INTERRUPT_IN_PACKET_SIZE;
break;
case USB_INTERFACE_3_DIC_VCOM_SETTING_0_EP_4_BULK_IN | USB_INTERFACE_3_DIC_VCOM_SETTING_0_EP_4_BULK_IN_DIRECTION:
setting.interval = HS_INTERFACE_3_DIC_VCOM_SETTING_0_EP_4_BULK_IN_INTERVAL;
setting.size = HS_INTERFACE_3_DIC_VCOM_SETTING_0_EP_4_BULK_IN_PACKET_SIZE;
break;
case USB_INTERFACE_3_DIC_VCOM_SETTING_0_EP_2_BULK_OUT | USB_INTERFACE_3_DIC_VCOM_SETTING_0_EP_2_BULK_OUT_DIRECTION:
setting.interval = HS_INTERFACE_3_DIC_VCOM_SETTING_0_EP_2_BULK_OUT_INTERVAL;
setting.size = HS_INTERFACE_3_DIC_VCOM_SETTING_0_EP_2_BULK_OUT_PACKET_SIZE;
break;
case USB_INTERFACE_4_CIC_VCOM_SETTING_0_EP_5_INTERRUPT_IN | USB_INTERFACE_4_CIC_VCOM_SETTING_0_EP_5_INTERRUPT_IN_DIRECTION:
setting.interval = HS_INTERFACE_4_CIC_VCOM_SETTING_0_EP_5_INTERRUPT_IN_INTERVAL;
setting.size = HS_INTERFACE_4_CIC_VCOM_SETTING_0_EP_5_INTERRUPT_IN_PACKET_SIZE;
break;
case USB_INTERFACE_5_DIC_VCOM_SETTING_0_EP_6_BULK_IN | USB_INTERFACE_5_DIC_VCOM_SETTING_0_EP_6_BULK_IN_DIRECTION:
setting.interval = HS_INTERFACE_5_DIC_VCOM_SETTING_0_EP_6_BULK_IN_INTERVAL;
setting.size = HS_INTERFACE_5_DIC_VCOM_SETTING_0_EP_6_BULK_IN_PACKET_SIZE;
break;
case USB_INTERFACE_5_DIC_VCOM_SETTING_0_EP_3_BULK_OUT | USB_INTERFACE_5_DIC_VCOM_SETTING_0_EP_3_BULK_OUT_DIRECTION:
setting.interval = HS_INTERFACE_5_DIC_VCOM_SETTING_0_EP_3_BULK_OUT_INTERVAL;
setting.size = HS_INTERFACE_5_DIC_VCOM_SETTING_0_EP_3_BULK_OUT_PACKET_SIZE;
break;
}
break;
}
@ -474,6 +878,30 @@ static usb_endpoint_setting_t getEndpointSetting (uint8_t speed, uint8_t alterna
setting.interval = FS_INTERFACE_1_DIC_VCOM_SETTING_0_EP_1_BULK_OUT_INTERVAL;
setting.size = FS_INTERFACE_1_DIC_VCOM_SETTING_0_EP_1_BULK_OUT_PACKET_SIZE;
break;
case USB_INTERFACE_2_CIC_VCOM_SETTING_0_EP_3_INTERRUPT_IN | USB_INTERFACE_2_CIC_VCOM_SETTING_0_EP_3_INTERRUPT_IN_DIRECTION:
setting.interval = FS_INTERFACE_2_CIC_VCOM_SETTING_0_EP_3_INTERRUPT_IN_INTERVAL;
setting.size = FS_INTERFACE_2_CIC_VCOM_SETTING_0_EP_3_INTERRUPT_IN_PACKET_SIZE;
break;
case USB_INTERFACE_3_DIC_VCOM_SETTING_0_EP_4_BULK_IN | USB_INTERFACE_3_DIC_VCOM_SETTING_0_EP_4_BULK_IN_DIRECTION:
setting.interval = FS_INTERFACE_3_DIC_VCOM_SETTING_0_EP_4_BULK_IN_INTERVAL;
setting.size = FS_INTERFACE_3_DIC_VCOM_SETTING_0_EP_4_BULK_IN_PACKET_SIZE;
break;
case USB_INTERFACE_3_DIC_VCOM_SETTING_0_EP_2_BULK_OUT | USB_INTERFACE_3_DIC_VCOM_SETTING_0_EP_2_BULK_OUT_DIRECTION:
setting.interval = FS_INTERFACE_3_DIC_VCOM_SETTING_0_EP_2_BULK_OUT_INTERVAL;
setting.size = FS_INTERFACE_3_DIC_VCOM_SETTING_0_EP_2_BULK_OUT_PACKET_SIZE;
break;
case USB_INTERFACE_4_CIC_VCOM_SETTING_0_EP_5_INTERRUPT_IN | USB_INTERFACE_4_CIC_VCOM_SETTING_0_EP_5_INTERRUPT_IN_DIRECTION:
setting.interval = FS_INTERFACE_4_CIC_VCOM_SETTING_0_EP_5_INTERRUPT_IN_INTERVAL;
setting.size = FS_INTERFACE_4_CIC_VCOM_SETTING_0_EP_5_INTERRUPT_IN_PACKET_SIZE;
break;
case USB_INTERFACE_5_DIC_VCOM_SETTING_0_EP_6_BULK_IN | USB_INTERFACE_5_DIC_VCOM_SETTING_0_EP_6_BULK_IN_DIRECTION:
setting.interval = FS_INTERFACE_5_DIC_VCOM_SETTING_0_EP_6_BULK_IN_INTERVAL;
setting.size = FS_INTERFACE_5_DIC_VCOM_SETTING_0_EP_6_BULK_IN_PACKET_SIZE;
break;
case USB_INTERFACE_5_DIC_VCOM_SETTING_0_EP_3_BULK_OUT | USB_INTERFACE_5_DIC_VCOM_SETTING_0_EP_3_BULK_OUT_DIRECTION:
setting.interval = FS_INTERFACE_5_DIC_VCOM_SETTING_0_EP_3_BULK_OUT_INTERVAL;
setting.size = FS_INTERFACE_5_DIC_VCOM_SETTING_0_EP_3_BULK_OUT_PACKET_SIZE;
break;
}
break;
}
@ -522,12 +950,24 @@ usb_status_t USB_DeviceSetSpeed(usb_device_handle handle, uint8_t speed)
g_UsbDeviceInterface0CicVcomSetting0DefaultEndpoints[0].maxPacketSize = HS_INTERFACE_0_CIC_VCOM_SETTING_0_EP_1_INTERRUPT_IN_PACKET_SIZE;
g_UsbDeviceInterface1DicVcomSetting0DefaultEndpoints[0].maxPacketSize = HS_INTERFACE_1_DIC_VCOM_SETTING_0_EP_2_BULK_IN_PACKET_SIZE;
g_UsbDeviceInterface1DicVcomSetting0DefaultEndpoints[1].maxPacketSize = HS_INTERFACE_1_DIC_VCOM_SETTING_0_EP_1_BULK_OUT_PACKET_SIZE;
g_UsbDeviceInterface2CicVcomSetting0DefaultEndpoints[0].maxPacketSize = HS_INTERFACE_2_CIC_VCOM_SETTING_0_EP_3_INTERRUPT_IN_PACKET_SIZE;
g_UsbDeviceInterface3DicVcomSetting0DefaultEndpoints[0].maxPacketSize = HS_INTERFACE_3_DIC_VCOM_SETTING_0_EP_4_BULK_IN_PACKET_SIZE;
g_UsbDeviceInterface3DicVcomSetting0DefaultEndpoints[1].maxPacketSize = HS_INTERFACE_3_DIC_VCOM_SETTING_0_EP_2_BULK_OUT_PACKET_SIZE;
g_UsbDeviceInterface4CicVcomSetting0DefaultEndpoints[0].maxPacketSize = HS_INTERFACE_4_CIC_VCOM_SETTING_0_EP_5_INTERRUPT_IN_PACKET_SIZE;
g_UsbDeviceInterface5DicVcomSetting0DefaultEndpoints[0].maxPacketSize = HS_INTERFACE_5_DIC_VCOM_SETTING_0_EP_6_BULK_IN_PACKET_SIZE;
g_UsbDeviceInterface5DicVcomSetting0DefaultEndpoints[1].maxPacketSize = HS_INTERFACE_5_DIC_VCOM_SETTING_0_EP_3_BULK_OUT_PACKET_SIZE;
}
else
{
g_UsbDeviceInterface0CicVcomSetting0DefaultEndpoints[0].maxPacketSize = FS_INTERFACE_0_CIC_VCOM_SETTING_0_EP_1_INTERRUPT_IN_PACKET_SIZE;
g_UsbDeviceInterface1DicVcomSetting0DefaultEndpoints[0].maxPacketSize = FS_INTERFACE_1_DIC_VCOM_SETTING_0_EP_2_BULK_IN_PACKET_SIZE;
g_UsbDeviceInterface1DicVcomSetting0DefaultEndpoints[1].maxPacketSize = FS_INTERFACE_1_DIC_VCOM_SETTING_0_EP_1_BULK_OUT_PACKET_SIZE;
g_UsbDeviceInterface2CicVcomSetting0DefaultEndpoints[0].maxPacketSize = FS_INTERFACE_2_CIC_VCOM_SETTING_0_EP_3_INTERRUPT_IN_PACKET_SIZE;
g_UsbDeviceInterface3DicVcomSetting0DefaultEndpoints[0].maxPacketSize = FS_INTERFACE_3_DIC_VCOM_SETTING_0_EP_4_BULK_IN_PACKET_SIZE;
g_UsbDeviceInterface3DicVcomSetting0DefaultEndpoints[1].maxPacketSize = FS_INTERFACE_3_DIC_VCOM_SETTING_0_EP_2_BULK_OUT_PACKET_SIZE;
g_UsbDeviceInterface4CicVcomSetting0DefaultEndpoints[0].maxPacketSize = FS_INTERFACE_4_CIC_VCOM_SETTING_0_EP_5_INTERRUPT_IN_PACKET_SIZE;
g_UsbDeviceInterface5DicVcomSetting0DefaultEndpoints[0].maxPacketSize = FS_INTERFACE_5_DIC_VCOM_SETTING_0_EP_6_BULK_IN_PACKET_SIZE;
g_UsbDeviceInterface5DicVcomSetting0DefaultEndpoints[1].maxPacketSize = FS_INTERFACE_5_DIC_VCOM_SETTING_0_EP_3_BULK_OUT_PACKET_SIZE;
}
return kStatus_USB_Success;

View File

@ -115,6 +115,8 @@
/* Length of Abstract Control Management Functional Descriptor in bytes */
#define USB_DESCRIPTOR_LENGTH_CDC_ABSTRACT (4U)
#define USB_DESCRIPTOR_LENGTH_INTERFACE_0_CIC_VCOM_UNION_FUNC (5U)
#define USB_DESCRIPTOR_LENGTH_INTERFACE_2_CIC_VCOM_UNION_FUNC (5U)
#define USB_DESCRIPTOR_LENGTH_INTERFACE_4_CIC_VCOM_UNION_FUNC (5U)
#define USB_DESCRIPTOR_TYPE_CDC_CS_INTERFACE (0x24U)
#define USB_DESCRIPTOR_TYPE_CDC_CS_ENDPOINT (0x25U)
@ -155,6 +157,74 @@
#define FS_INTERFACE_1_DIC_VCOM_SETTING_0_EP_1_BULK_OUT_INTERVAL (0U)
#define HS_INTERFACE_1_DIC_VCOM_SETTING_0_EP_1_BULK_OUT_INTERVAL (0U)
#define USB_INTERFACE_2_CIC_VCOM_CLASS (0x02U)
#define USB_INTERFACE_2_CIC_VCOM_SUBCLASS (0x02U)
#define USB_INTERFACE_2_CIC_VCOM_PROTOCOL (0x00U)
#define USB_INTERFACE_2_CIC_VCOM_INTERFACE_COUNT (2U)
#define USB_INTERFACE_2_CIC_VCOM_INDEX (2U)
#define USB_INTERFACE_2_CIC_VCOM_SETTING_0_DEFAULT_ENDPOINT_COUNT (1U)
#define USB_INTERFACE_2_CIC_VCOM_SETTING_0_DEFAULT_INDEX USB_ALTERNATE_SETTING_0
#define USB_INTERFACE_2_CIC_VCOM_SETTING_0_EP_3_INTERRUPT_IN (3U)
#define USB_INTERFACE_2_CIC_VCOM_SETTING_0_EP_3_INTERRUPT_IN_DIRECTION USB_DESCRIPTOR_ENDPOINT_ADDRESS_DIRECTION_IN
#define FS_INTERFACE_2_CIC_VCOM_SETTING_0_EP_3_INTERRUPT_IN_PACKET_SIZE (16U)
#define HS_INTERFACE_2_CIC_VCOM_SETTING_0_EP_3_INTERRUPT_IN_PACKET_SIZE (16U)
#define FS_INTERFACE_2_CIC_VCOM_SETTING_0_EP_3_INTERRUPT_IN_INTERVAL (8U)
#define HS_INTERFACE_2_CIC_VCOM_SETTING_0_EP_3_INTERRUPT_IN_INTERVAL (7U)
#define USB_INTERFACE_3_DIC_VCOM_CLASS (0x0AU)
#define USB_INTERFACE_3_DIC_VCOM_SUBCLASS (0x00U)
#define USB_INTERFACE_3_DIC_VCOM_PROTOCOL (0x00U)
#define USB_INTERFACE_3_DIC_VCOM_INTERFACE_COUNT (1U)
#define USB_INTERFACE_3_DIC_VCOM_INDEX (3U)
#define USB_INTERFACE_3_DIC_VCOM_SETTING_0_DEFAULT_ENDPOINT_COUNT (2U)
#define USB_INTERFACE_3_DIC_VCOM_SETTING_0_DEFAULT_INDEX USB_ALTERNATE_SETTING_0
#define USB_INTERFACE_3_DIC_VCOM_SETTING_0_EP_4_BULK_IN (4U)
#define USB_INTERFACE_3_DIC_VCOM_SETTING_0_EP_4_BULK_IN_DIRECTION USB_DESCRIPTOR_ENDPOINT_ADDRESS_DIRECTION_IN
#define FS_INTERFACE_3_DIC_VCOM_SETTING_0_EP_4_BULK_IN_PACKET_SIZE (64U)
#define HS_INTERFACE_3_DIC_VCOM_SETTING_0_EP_4_BULK_IN_PACKET_SIZE (512U)
#define FS_INTERFACE_3_DIC_VCOM_SETTING_0_EP_4_BULK_IN_INTERVAL (0U)
#define HS_INTERFACE_3_DIC_VCOM_SETTING_0_EP_4_BULK_IN_INTERVAL (0U)
#define USB_INTERFACE_3_DIC_VCOM_SETTING_0_EP_2_BULK_OUT (2U)
#define USB_INTERFACE_3_DIC_VCOM_SETTING_0_EP_2_BULK_OUT_DIRECTION USB_DESCRIPTOR_ENDPOINT_ADDRESS_DIRECTION_OUT
#define FS_INTERFACE_3_DIC_VCOM_SETTING_0_EP_2_BULK_OUT_PACKET_SIZE (64U)
#define HS_INTERFACE_3_DIC_VCOM_SETTING_0_EP_2_BULK_OUT_PACKET_SIZE (512U)
#define FS_INTERFACE_3_DIC_VCOM_SETTING_0_EP_2_BULK_OUT_INTERVAL (0U)
#define HS_INTERFACE_3_DIC_VCOM_SETTING_0_EP_2_BULK_OUT_INTERVAL (0U)
#define USB_INTERFACE_4_CIC_VCOM_CLASS (0x02U)
#define USB_INTERFACE_4_CIC_VCOM_SUBCLASS (0x02U)
#define USB_INTERFACE_4_CIC_VCOM_PROTOCOL (0x00U)
#define USB_INTERFACE_4_CIC_VCOM_INTERFACE_COUNT (2U)
#define USB_INTERFACE_4_CIC_VCOM_INDEX (4U)
#define USB_INTERFACE_4_CIC_VCOM_SETTING_0_DEFAULT_ENDPOINT_COUNT (1U)
#define USB_INTERFACE_4_CIC_VCOM_SETTING_0_DEFAULT_INDEX USB_ALTERNATE_SETTING_0
#define USB_INTERFACE_4_CIC_VCOM_SETTING_0_EP_5_INTERRUPT_IN (5U)
#define USB_INTERFACE_4_CIC_VCOM_SETTING_0_EP_5_INTERRUPT_IN_DIRECTION USB_DESCRIPTOR_ENDPOINT_ADDRESS_DIRECTION_IN
#define FS_INTERFACE_4_CIC_VCOM_SETTING_0_EP_5_INTERRUPT_IN_PACKET_SIZE (16U)
#define HS_INTERFACE_4_CIC_VCOM_SETTING_0_EP_5_INTERRUPT_IN_PACKET_SIZE (16U)
#define FS_INTERFACE_4_CIC_VCOM_SETTING_0_EP_5_INTERRUPT_IN_INTERVAL (8U)
#define HS_INTERFACE_4_CIC_VCOM_SETTING_0_EP_5_INTERRUPT_IN_INTERVAL (7U)
#define USB_INTERFACE_5_DIC_VCOM_CLASS (0x0AU)
#define USB_INTERFACE_5_DIC_VCOM_SUBCLASS (0x00U)
#define USB_INTERFACE_5_DIC_VCOM_PROTOCOL (0x00U)
#define USB_INTERFACE_5_DIC_VCOM_INTERFACE_COUNT (1U)
#define USB_INTERFACE_5_DIC_VCOM_INDEX (5U)
#define USB_INTERFACE_5_DIC_VCOM_SETTING_0_DEFAULT_ENDPOINT_COUNT (2U)
#define USB_INTERFACE_5_DIC_VCOM_SETTING_0_DEFAULT_INDEX USB_ALTERNATE_SETTING_0
#define USB_INTERFACE_5_DIC_VCOM_SETTING_0_EP_6_BULK_IN (6U)
#define USB_INTERFACE_5_DIC_VCOM_SETTING_0_EP_6_BULK_IN_DIRECTION USB_DESCRIPTOR_ENDPOINT_ADDRESS_DIRECTION_IN
#define FS_INTERFACE_5_DIC_VCOM_SETTING_0_EP_6_BULK_IN_PACKET_SIZE (64U)
#define HS_INTERFACE_5_DIC_VCOM_SETTING_0_EP_6_BULK_IN_PACKET_SIZE (512U)
#define FS_INTERFACE_5_DIC_VCOM_SETTING_0_EP_6_BULK_IN_INTERVAL (0U)
#define HS_INTERFACE_5_DIC_VCOM_SETTING_0_EP_6_BULK_IN_INTERVAL (0U)
#define USB_INTERFACE_5_DIC_VCOM_SETTING_0_EP_3_BULK_OUT (3U)
#define USB_INTERFACE_5_DIC_VCOM_SETTING_0_EP_3_BULK_OUT_DIRECTION USB_DESCRIPTOR_ENDPOINT_ADDRESS_DIRECTION_OUT
#define FS_INTERFACE_5_DIC_VCOM_SETTING_0_EP_3_BULK_OUT_PACKET_SIZE (64U)
#define HS_INTERFACE_5_DIC_VCOM_SETTING_0_EP_3_BULK_OUT_PACKET_SIZE (512U)
#define FS_INTERFACE_5_DIC_VCOM_SETTING_0_EP_3_BULK_OUT_INTERVAL (0U)
#define HS_INTERFACE_5_DIC_VCOM_SETTING_0_EP_3_BULK_OUT_INTERVAL (0U)
#define USB_DESCRIPTOR_LENGTH_CONFIGURATION_ALL (sizeof(g_UsbDeviceConfigurationDescriptor))
@ -163,7 +233,7 @@
#define USB_DESCRIPTOR_LENGTH_STRING1 (sizeof(g_UsbDeviceString1))
#define USB_DESCRIPTOR_LENGTH_STRING2 (sizeof(g_UsbDeviceString2))
#define USB_COMPOSITE_INTERFACE_COUNT (USB_INTERFACE_0_CIC_VCOM_INTERFACE_COUNT)
#define USB_COMPOSITE_INTERFACE_COUNT (USB_INTERFACE_0_CIC_VCOM_INTERFACE_COUNT + USB_INTERFACE_2_CIC_VCOM_INTERFACE_COUNT + USB_INTERFACE_4_CIC_VCOM_INTERFACE_COUNT)
/*******************************************************************************
* API

View File

@ -0,0 +1,540 @@
/*
* Copyright 2015-2016, Freescale Semiconductor, Inc.
* Copyright 2016-2021 NXP
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list
* of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this
* list of conditions and the following disclaimer in the documentation and/or
* other materials provided with the distribution.
*
* 3. Neither the name of copyright holder nor the names of its
* contributors may be used to endorse or promote products derived from this
* software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "usb_device_config.h"
#include "usb.h"
#include "usb_device.h"
#include "usb_device_class.h"
#include "usb_device_cdc_acm.h"
#include "usb_device_ch9.h"
#include "usb_device_descriptor.h"
#include "usb_device_composite.h"
/*******************************************************************************
* Definitions
******************************************************************************/
/* Outgoing notification buffer number */
#define USB_CIC_VCOM_IN_ENDPOINT (3)
/* Outgoing data buffer number */
#define USB_DIC_VCOM_IN_ENDPOINT (4)
/* Outgoing data buffer index */
#define USB_DIC_VCOM_IN_ENDPOINT_INDEX (0)
/* Incoming data buffer number */
#define USB_DIC_VCOM_OUT_ENDPOINT (2)
/* Incoming data buffer index */
#define USB_DIC_VCOM_OUT_ENDPOINT_INDEX (1)
/* Data packet size for High Speed */
#define HS_DIC_VCOM_OUT_PACKET_SIZE (512)
/* Data packet size for Full Speed */
#define FS_DIC_VCOM_OUT_PACKET_SIZE (64)
#if defined(USB_DEVICE_CONFIG_EHCI) && (USB_DEVICE_CONFIG_EHCI > 0)
#define DATA_BUFF_SIZE HS_DIC_VCOM_OUT_PACKET_SIZE
#endif
#if defined(USB_DEVICE_CONFIG_KHCI) && (USB_DEVICE_CONFIG_KHCI > 0)
#define DATA_BUFF_SIZE FS_DIC_VCOM_OUT_PACKET_SIZE
#endif
#if defined(USB_DEVICE_CONFIG_LPCIP3511FS) && (USB_DEVICE_CONFIG_LPCIP3511FS > 0U)
#define DATA_BUFF_SIZE FS_DIC_VCOM_OUT_PACKET_SIZE
#endif
#if defined(USB_DEVICE_CONFIG_LPCIP3511HS) && (USB_DEVICE_CONFIG_LPCIP3511HS > 0U)
#define DATA_BUFF_SIZE HS_DIC_VCOM_OUT_PACKET_SIZE
#endif
/* Currently configured line coding */
#define LINE_CODING_SIZE (0x07U)
#define LINE_CODING_DTERATE (115200U)
#define LINE_CODING_CHARFORMAT (0x00U)
#define LINE_CODING_PARITYTYPE (0x00U)
#define LINE_CODING_DATABITS (0x08U)
/* Communications feature */
#define COMM_FEATURE_DATA_SIZE (0x02U)
#define STATUS_ABSTRACT_STATE (0x0000U)
#define COUNTRY_SETTING (0x0000U)
/* Notification of serial state */
#define NOTIF_PACKET_SIZE (0x08U)
#define UART_BITMAP_SIZE (0x02U)
#define NOTIF_REQUEST_TYPE (0xA1U)
/* Define the types for application */
typedef struct _usb_cdc_vcom_struct
{
class_handle_t cdcAcmHandle; /* USB CDC ACM class handle. */
volatile uint8_t startTransactions; /* A flag to indicate whether a CDC device is ready to transmit and receive data. */
} usb_cdc_vcom_struct_t;
/* Define the information relates to abstract control model */
typedef struct _usb_cdc_acm_info
{
uint8_t serialStateBuf[NOTIF_PACKET_SIZE + UART_BITMAP_SIZE]; /* Serial state buffer of the CDC device to notify the
serial state to host. */
bool dtePresent; /* A flag to indicate whether DTE is present. */
uint16_t breakDuration; /* Length of time in milliseconds of the break signal */
uint8_t dteStatus; /* Status of data terminal equipment */
uint8_t currentInterface; /* Current interface index. */
uint16_t uartState; /* UART state of the CDC device. */
} usb_cdc_acm_info_t;
/*******************************************************************************
* Prototypes
******************************************************************************/
usb_status_t USB_DeviceInterface2CicVcomCallback(class_handle_t handle, uint32_t event, void *param);
usb_status_t USB_DeviceInterface2CicVcomSetConfiguration(class_handle_t handle, uint8_t configuration_idx);
usb_status_t USB_DeviceInterface2CicVcomSetInterface(class_handle_t handle, uint8_t alternateSetting);
usb_status_t USB_DeviceInterface3DicVcomSetInterface(class_handle_t handle, uint8_t alternateSetting);
usb_status_t USB_DeviceInterface2CicVcomInit(usb_device_composite_struct_t *deviceComposite);
/*******************************************************************************
* Variables
******************************************************************************/
extern usb_device_endpoint_struct_t g_UsbDeviceInterface3DicVcomSetting0DefaultEndpoints[];
/* Line coding of cdc device */
USB_DMA_INIT_DATA_ALIGN(USB_DATA_ALIGN_SIZE) static uint8_t s_lineCoding[LINE_CODING_SIZE] = {
/* E.g. 0x00,0xC2,0x01,0x00 : 0x0001C200 is 115200 bits per second */
(LINE_CODING_DTERATE >> 0U) & 0x000000FFU,
(LINE_CODING_DTERATE >> 8U) & 0x000000FFU,
(LINE_CODING_DTERATE >> 16U) & 0x000000FFU,
(LINE_CODING_DTERATE >> 24U) & 0x000000FFU,
LINE_CODING_CHARFORMAT,
LINE_CODING_PARITYTYPE,
LINE_CODING_DATABITS};
/* Abstract state of cdc device */
USB_DMA_INIT_DATA_ALIGN(USB_DATA_ALIGN_SIZE) static uint8_t s_abstractState[COMM_FEATURE_DATA_SIZE] = {(STATUS_ABSTRACT_STATE >> 0U) & 0x00FFU,
(STATUS_ABSTRACT_STATE >> 8U) & 0x00FFU};
/* Country code of cdc device */
USB_DMA_INIT_DATA_ALIGN(USB_DATA_ALIGN_SIZE) static uint8_t s_countryCode[COMM_FEATURE_DATA_SIZE] = {(COUNTRY_SETTING >> 0U) & 0x00FFU,
(COUNTRY_SETTING >> 8U) & 0x00FFU};
/* CDC ACM information */
USB_DMA_NONINIT_DATA_ALIGN(USB_DATA_ALIGN_SIZE) static usb_cdc_acm_info_t s_usbCdcAcmInfo;
/* Data buffer for receiving and sending*/
USB_DMA_NONINIT_DATA_ALIGN(USB_DATA_ALIGN_SIZE) static uint8_t s_currRecvBuf[DATA_BUFF_SIZE];
USB_DMA_NONINIT_DATA_ALIGN(USB_DATA_ALIGN_SIZE) static uint8_t s_currSendBuf[DATA_BUFF_SIZE];
USB_DMA_INIT_DATA_ALIGN(USB_DATA_ALIGN_SIZE) volatile static uint32_t s_recvSize = 0;
USB_DMA_INIT_DATA_ALIGN(USB_DATA_ALIGN_SIZE) volatile static uint32_t s_sendSize = 0;
#if defined(FSL_FEATURE_USB_KHCI_KEEP_ALIVE_ENABLED) && (FSL_FEATURE_USB_KHCI_KEEP_ALIVE_ENABLED > 0U) && \
defined(USB_DEVICE_CONFIG_KEEP_ALIVE_MODE) && (USB_DEVICE_CONFIG_KEEP_ALIVE_MODE > 0U) && \
defined(FSL_FEATURE_USB_KHCI_USB_RAM) && (FSL_FEATURE_USB_KHCI_USB_RAM > 0U)
USB_DMA_INIT_DATA_ALIGN(USB_DATA_ALIGN_SIZE) volatile static uint8_t s_waitForDataReceive = 0;
USB_DMA_INIT_DATA_ALIGN(USB_DATA_ALIGN_SIZE) volatile static uint8_t s_comOpen = 0;
#endif
USB_DMA_NONINIT_DATA_ALIGN(USB_DATA_ALIGN_SIZE) static usb_device_composite_struct_t *s_UsbDeviceComposite;
USB_DMA_NONINIT_DATA_ALIGN(USB_DATA_ALIGN_SIZE) static usb_cdc_vcom_struct_t s_UsbInterface2CicVcom;
/*******************************************************************************
* Code
******************************************************************************/
/*!
* @brief Interface task function.
*/
void USB_DeviceInterface2CicVcomTask(void)
{
usb_status_t error = kStatus_USB_Error;
if ((1 == s_UsbDeviceComposite->attach) && (1 == s_UsbInterface2CicVcom.startTransactions))
{
/* User Code */
if ((0 != s_recvSize) && (0xFFFFFFFFU != s_recvSize))
{
int32_t i;
/* Copy Buffer to Send Buff */
for (i = 0; i < s_recvSize; i++)
{
s_currSendBuf[s_sendSize++] = s_currRecvBuf[i];
}
s_recvSize = 0;
}
if (s_sendSize)
{
uint32_t size = s_sendSize;
s_sendSize = 0;
error = USB_DeviceCdcAcmSend(s_UsbInterface2CicVcom.cdcAcmHandle, USB_DIC_VCOM_IN_ENDPOINT, s_currSendBuf, size);
if (error != kStatus_USB_Success)
{
/* Failure to send Data Handling code here */
}
}
#if defined(FSL_FEATURE_USB_KHCI_KEEP_ALIVE_ENABLED) && (FSL_FEATURE_USB_KHCI_KEEP_ALIVE_ENABLED > 0U) && \
defined(USB_DEVICE_CONFIG_KEEP_ALIVE_MODE) && (USB_DEVICE_CONFIG_KEEP_ALIVE_MODE > 0U) && \
defined(FSL_FEATURE_USB_KHCI_USB_RAM) && (FSL_FEATURE_USB_KHCI_USB_RAM > 0U)
if ((s_waitForDataReceive))
{
if (s_comOpen == 1)
{
/* Wait for all the packets been sent during opening the com port. Otherwise these packets may
* wake up the system.
*/
usb_echo("Waiting to enter lowpower ...\r\n");
for (uint32_t i = 0U; i < 16000000U; ++i)
{
__ASM("NOP"); /* delay */
}
s_comOpen = 0;
}
usb_echo("Enter lowpower\r\n");
BOARD_DbgConsole_Deinit();
USB0->INTEN &= ~USB_INTEN_TOKDNEEN_MASK;
USB_EnterLowpowerMode();
s_waitForDataReceive = 0;
USB0->INTEN |= USB_INTEN_TOKDNEEN_MASK;
BOARD_DbgConsole_Init();
usb_echo("Exit lowpower\r\n");
}
#endif
}
}
/*!
* @brief Function that processes class specific events.
*
* @param handle Handle to USB device class.
* @param event Class event code.
* @param param The parameter of the class specific event.
* @return usb_status_t Status of USB transaction.
*/
usb_status_t USB_DeviceInterface2CicVcomCallback(class_handle_t handle, uint32_t event, void *param)
{
uint32_t len;
uint8_t *uartBitmap;
usb_device_cdc_acm_request_param_struct_t *acmReqParam;
usb_device_endpoint_callback_message_struct_t *epCbParam;
usb_status_t error = kStatus_USB_Error;
usb_cdc_acm_info_t *acmInfo = &s_usbCdcAcmInfo;
acmReqParam = (usb_device_cdc_acm_request_param_struct_t *)param;
epCbParam = (usb_device_endpoint_callback_message_struct_t *)param;
switch (event)
{
case kUSB_DeviceCdcEventSendResponse:
{
if ((epCbParam->length != 0) && (!(epCbParam->length % g_UsbDeviceInterface3DicVcomSetting0DefaultEndpoints[USB_DIC_VCOM_IN_ENDPOINT_INDEX].maxPacketSize)))
{
/* If the last packet is the size of endpoint, then send also zero-ended packet,
** meaning that we want to inform the host that we do not have any additional
** data, so it can flush the output.
*/
error = USB_DeviceCdcAcmSend(handle, USB_DIC_VCOM_IN_ENDPOINT, NULL, 0);
}
else if ((1 == s_UsbDeviceComposite->attach) && (1 == s_UsbInterface2CicVcom.startTransactions))
{
if ((epCbParam->buffer != NULL) || ((epCbParam->buffer == NULL) && (epCbParam->length == 0)))
{
/* User: add your own code for send complete event */
/* Schedule buffer for next receive event */
error = USB_DeviceCdcAcmRecv(handle, USB_DIC_VCOM_OUT_ENDPOINT, s_currRecvBuf,
g_UsbDeviceInterface3DicVcomSetting0DefaultEndpoints[USB_DIC_VCOM_OUT_ENDPOINT_INDEX].maxPacketSize);
#if defined(FSL_FEATURE_USB_KHCI_KEEP_ALIVE_ENABLED) && (FSL_FEATURE_USB_KHCI_KEEP_ALIVE_ENABLED > 0U) && \
defined(USB_DEVICE_CONFIG_KEEP_ALIVE_MODE) && (USB_DEVICE_CONFIG_KEEP_ALIVE_MODE > 0U) && \
defined(FSL_FEATURE_USB_KHCI_USB_RAM) && (FSL_FEATURE_USB_KHCI_USB_RAM > 0U)
s_waitForDataReceive = 1;
USB0->INTEN &= ~USB_INTEN_SOFTOKEN_MASK;
#endif
}
}
else
{
}
}
break;
case kUSB_DeviceCdcEventRecvResponse:
{
if ((1 == s_UsbDeviceComposite->attach) && (1 == s_UsbInterface2CicVcom.startTransactions))
{
s_recvSize = epCbParam->length;
#if defined(FSL_FEATURE_USB_KHCI_KEEP_ALIVE_ENABLED) && (FSL_FEATURE_USB_KHCI_KEEP_ALIVE_ENABLED > 0U) && \
defined(USB_DEVICE_CONFIG_KEEP_ALIVE_MODE) && (USB_DEVICE_CONFIG_KEEP_ALIVE_MODE > 0U) && \
defined(FSL_FEATURE_USB_KHCI_USB_RAM) && (FSL_FEATURE_USB_KHCI_USB_RAM > 0U)
s_waitForDataReceive = 0;
USB0->INTEN |= USB_INTEN_SOFTOKEN_MASK;
#endif
if (!s_recvSize)
{
/* Schedule buffer for next receive event */
error = USB_DeviceCdcAcmRecv(handle, USB_DIC_VCOM_OUT_ENDPOINT, s_currRecvBuf,
g_UsbDeviceInterface3DicVcomSetting0DefaultEndpoints[USB_DIC_VCOM_OUT_ENDPOINT_INDEX].maxPacketSize);
#if defined(FSL_FEATURE_USB_KHCI_KEEP_ALIVE_ENABLED) && (FSL_FEATURE_USB_KHCI_KEEP_ALIVE_ENABLED > 0U) && \
defined(USB_DEVICE_CONFIG_KEEP_ALIVE_MODE) && (USB_DEVICE_CONFIG_KEEP_ALIVE_MODE > 0U) && \
defined(FSL_FEATURE_USB_KHCI_USB_RAM) && (FSL_FEATURE_USB_KHCI_USB_RAM > 0U)
s_waitForDataReceive = 1;
USB0->INTEN &= ~USB_INTEN_SOFTOKEN_MASK;
#endif
}
}
}
break;
case kUSB_DeviceCdcEventSerialStateNotif:
((usb_device_cdc_acm_struct_t *)handle)->hasSentState = 0;
error = kStatus_USB_Success;
break;
case kUSB_DeviceCdcEventSendEncapsulatedCommand:
break;
case kUSB_DeviceCdcEventGetEncapsulatedResponse:
break;
case kUSB_DeviceCdcEventSetCommFeature:
if (USB_DEVICE_CDC_FEATURE_ABSTRACT_STATE == acmReqParam->setupValue)
{
if (1 == acmReqParam->isSetup)
{
*(acmReqParam->buffer) = s_abstractState;
}
else
{
*(acmReqParam->length) = 0;
}
}
else if (USB_DEVICE_CDC_FEATURE_COUNTRY_SETTING == acmReqParam->setupValue)
{
if (1 == acmReqParam->isSetup)
{
*(acmReqParam->buffer) = s_countryCode;
}
else
{
*(acmReqParam->length) = 0;
}
}
else
{
}
error = kStatus_USB_Success;
break;
case kUSB_DeviceCdcEventGetCommFeature:
if (USB_DEVICE_CDC_FEATURE_ABSTRACT_STATE == acmReqParam->setupValue)
{
*(acmReqParam->buffer) = s_abstractState;
*(acmReqParam->length) = COMM_FEATURE_DATA_SIZE;
}
else if (USB_DEVICE_CDC_FEATURE_COUNTRY_SETTING == acmReqParam->setupValue)
{
*(acmReqParam->buffer) = s_countryCode;
*(acmReqParam->length) = COMM_FEATURE_DATA_SIZE;
}
else
{
}
error = kStatus_USB_Success;
break;
case kUSB_DeviceCdcEventClearCommFeature:
break;
case kUSB_DeviceCdcEventGetLineCoding:
*(acmReqParam->buffer) = s_lineCoding;
*(acmReqParam->length) = LINE_CODING_SIZE;
error = kStatus_USB_Success;
break;
case kUSB_DeviceCdcEventSetLineCoding:
if (1 == acmReqParam->isSetup)
{
*(acmReqParam->buffer) = s_lineCoding;
}
else
{
*(acmReqParam->length) = 0;
}
error = kStatus_USB_Success;
break;
case kUSB_DeviceCdcEventSetControlLineState:
{
s_usbCdcAcmInfo.dteStatus = acmReqParam->setupValue;
/* activate/deactivate Tx carrier */
if (acmInfo->dteStatus & USB_DEVICE_CDC_CONTROL_SIG_BITMAP_CARRIER_ACTIVATION)
{
acmInfo->uartState |= USB_DEVICE_CDC_UART_STATE_TX_CARRIER;
}
else
{
acmInfo->uartState &= (uint16_t)~USB_DEVICE_CDC_UART_STATE_TX_CARRIER;
}
/* activate carrier and DTE. Com port of terminal tool running on PC is open now */
if (acmInfo->dteStatus & USB_DEVICE_CDC_CONTROL_SIG_BITMAP_DTE_PRESENCE)
{
acmInfo->uartState |= USB_DEVICE_CDC_UART_STATE_RX_CARRIER;
}
/* Com port of terminal tool running on PC is closed now */
else
{
acmInfo->uartState &= (uint16_t)~USB_DEVICE_CDC_UART_STATE_RX_CARRIER;
}
/* Indicates to DCE if DTE is present or not */
acmInfo->dtePresent = (acmInfo->dteStatus & USB_DEVICE_CDC_CONTROL_SIG_BITMAP_DTE_PRESENCE) ? true : false;
/* Initialize the serial state buffer */
acmInfo->serialStateBuf[0] = NOTIF_REQUEST_TYPE; /* bmRequestType */
acmInfo->serialStateBuf[1] = USB_DEVICE_CDC_NOTIF_SERIAL_STATE; /* bNotification */
acmInfo->serialStateBuf[2] = 0x00; /* wValue */
acmInfo->serialStateBuf[3] = 0x00;
acmInfo->serialStateBuf[4] = 0x00; /* wIndex */
acmInfo->serialStateBuf[5] = 0x00;
acmInfo->serialStateBuf[6] = UART_BITMAP_SIZE; /* wLength */
acmInfo->serialStateBuf[7] = 0x00;
/* Notify to host the line state */
acmInfo->serialStateBuf[4] = acmReqParam->interfaceIndex;
/* Lower byte of UART BITMAP */
uartBitmap = (uint8_t *)&acmInfo->serialStateBuf[NOTIF_PACKET_SIZE + UART_BITMAP_SIZE - 2];
uartBitmap[0] = acmInfo->uartState & 0xFFu;
uartBitmap[1] = (acmInfo->uartState >> 8) & 0xFFu;
len = (uint32_t)(NOTIF_PACKET_SIZE + UART_BITMAP_SIZE);
if (0 == ((usb_device_cdc_acm_struct_t *)handle)->hasSentState)
{
error = USB_DeviceCdcAcmSend(handle, USB_CIC_VCOM_IN_ENDPOINT, acmInfo->serialStateBuf, len);
if (kStatus_USB_Success != error)
{
usb_echo("kUSB_DeviceCdcEventSetControlLineState error!");
}
((usb_device_cdc_acm_struct_t *)handle)->hasSentState = 1;
}
/* Update status */
if (acmInfo->dteStatus & USB_DEVICE_CDC_CONTROL_SIG_BITMAP_CARRIER_ACTIVATION)
{
/* To do: CARRIER_ACTIVATED */
}
else
{
/* To do: CARRIER_DEACTIVATED */
}
if (acmInfo->dteStatus & USB_DEVICE_CDC_CONTROL_SIG_BITMAP_DTE_PRESENCE)
{
/* DTE_ACTIVATED */
if (1 == s_UsbDeviceComposite->attach)
{
s_UsbInterface2CicVcom.startTransactions = 1;
#if defined(FSL_FEATURE_USB_KHCI_KEEP_ALIVE_ENABLED) && (FSL_FEATURE_USB_KHCI_KEEP_ALIVE_ENABLED > 0U) && \
defined(USB_DEVICE_CONFIG_KEEP_ALIVE_MODE) && (USB_DEVICE_CONFIG_KEEP_ALIVE_MODE > 0U) && \
defined(FSL_FEATURE_USB_KHCI_USB_RAM) && (FSL_FEATURE_USB_KHCI_USB_RAM > 0U)
s_waitForDataReceive = 1;
USB0->INTEN &= ~USB_INTEN_SOFTOKEN_MASK;
s_comOpen = 1;
usb_echo("USB_APP_CDC_DTE_ACTIVATED\r\n");
#endif
}
}
else
{
/* DTE_DEACTIVATED */
if (1 == s_UsbDeviceComposite->attach)
{
s_UsbInterface2CicVcom.startTransactions = 0;
}
}
}
break;
case kUSB_DeviceCdcEventSendBreak:
break;
default:
break;
}
return error;
}
/*!
* @brief Notifies application layer about set configuration event.
*
* @param handle Handle to USB device class.
* @param configuration_idx Id of device configuration.
* @return usb_status_t Always return kStatus_USB_Success value.
*/
usb_status_t USB_DeviceInterface2CicVcomSetConfiguration(class_handle_t handle, uint8_t configuration_idx)
{
/* Schedule buffer for receive */
USB_DeviceCdcAcmRecv(s_UsbInterface2CicVcom.cdcAcmHandle, USB_DIC_VCOM_OUT_ENDPOINT, s_currRecvBuf,
g_UsbDeviceInterface3DicVcomSetting0DefaultEndpoints[USB_DIC_VCOM_OUT_ENDPOINT_INDEX].maxPacketSize);
return kStatus_USB_Success;
}
/*!
* @brief Notifies application layer about set configuration event.
*
* @param class_handle_t Handle to USB device class.
* @param alternateSetting Id of device alternative setting.
* @return usb_status_t Always return kStatus_USB_Success value.
*/
usb_status_t USB_DeviceInterface2CicVcomSetInterface(class_handle_t handle, uint8_t alternateSetting)
{
return kStatus_USB_Success;
}
/*!
* @brief Notifies application layer about set configuration event.
*
* @param class_handle_t Handle to USB device class.
* @param alternateSetting Id of device alternative setting.
* @return usb_status_t Always return kStatus_USB_Success value.
*/
usb_status_t USB_DeviceInterface3DicVcomSetInterface(class_handle_t handle, uint8_t alternateSetting)
{
return kStatus_USB_Success;
}
/*!
* @brief Initializes device structure and buffer pointers.
*
* @param *device Pointer to structure to initialize to.
* @return usb_status_t Always return kStatus_USB_Success value.
*/
usb_status_t USB_DeviceInterface2CicVcomInit(usb_device_composite_struct_t *deviceComposite)
{
s_UsbDeviceComposite = deviceComposite;
s_UsbInterface2CicVcom.cdcAcmHandle = s_UsbDeviceComposite->interface2CicVcomHandle;
return kStatus_USB_Success;
}

View File

@ -0,0 +1,44 @@
/*
* Copyright 2015-2016, Freescale Semiconductor, Inc.
* Copyright 2016-2021 NXP
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list
* of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this
* list of conditions and the following disclaimer in the documentation and/or
* other materials provided with the distribution.
*
* 3. Neither the name of copyright holder nor the names of its
* contributors may be used to endorse or promote products derived from this
* software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef __USB_DEVICE_INTERFACE_2_CIC_VCOM_H__
#define __USB_DEVICE_INTERFACE_2_CIC_VCOM_H__
/*******************************************************************************
* Definitions
******************************************************************************/
/*!
* @brief Interface task function.
*/
void USB_DeviceInterface2CicVcomTask(void);
#endif /* __USB_DEVICE_INTERFACE_2_CIC_VCOM_H__ */

View File

@ -0,0 +1,540 @@
/*
* Copyright 2015-2016, Freescale Semiconductor, Inc.
* Copyright 2016-2021 NXP
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list
* of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this
* list of conditions and the following disclaimer in the documentation and/or
* other materials provided with the distribution.
*
* 3. Neither the name of copyright holder nor the names of its
* contributors may be used to endorse or promote products derived from this
* software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "usb_device_config.h"
#include "usb.h"
#include "usb_device.h"
#include "usb_device_class.h"
#include "usb_device_cdc_acm.h"
#include "usb_device_ch9.h"
#include "usb_device_descriptor.h"
#include "usb_device_composite.h"
/*******************************************************************************
* Definitions
******************************************************************************/
/* Outgoing notification buffer number */
#define USB_CIC_VCOM_IN_ENDPOINT (5)
/* Outgoing data buffer number */
#define USB_DIC_VCOM_IN_ENDPOINT (6)
/* Outgoing data buffer index */
#define USB_DIC_VCOM_IN_ENDPOINT_INDEX (0)
/* Incoming data buffer number */
#define USB_DIC_VCOM_OUT_ENDPOINT (3)
/* Incoming data buffer index */
#define USB_DIC_VCOM_OUT_ENDPOINT_INDEX (1)
/* Data packet size for High Speed */
#define HS_DIC_VCOM_OUT_PACKET_SIZE (512)
/* Data packet size for Full Speed */
#define FS_DIC_VCOM_OUT_PACKET_SIZE (64)
#if defined(USB_DEVICE_CONFIG_EHCI) && (USB_DEVICE_CONFIG_EHCI > 0)
#define DATA_BUFF_SIZE HS_DIC_VCOM_OUT_PACKET_SIZE
#endif
#if defined(USB_DEVICE_CONFIG_KHCI) && (USB_DEVICE_CONFIG_KHCI > 0)
#define DATA_BUFF_SIZE FS_DIC_VCOM_OUT_PACKET_SIZE
#endif
#if defined(USB_DEVICE_CONFIG_LPCIP3511FS) && (USB_DEVICE_CONFIG_LPCIP3511FS > 0U)
#define DATA_BUFF_SIZE FS_DIC_VCOM_OUT_PACKET_SIZE
#endif
#if defined(USB_DEVICE_CONFIG_LPCIP3511HS) && (USB_DEVICE_CONFIG_LPCIP3511HS > 0U)
#define DATA_BUFF_SIZE HS_DIC_VCOM_OUT_PACKET_SIZE
#endif
/* Currently configured line coding */
#define LINE_CODING_SIZE (0x07U)
#define LINE_CODING_DTERATE (115200U)
#define LINE_CODING_CHARFORMAT (0x00U)
#define LINE_CODING_PARITYTYPE (0x00U)
#define LINE_CODING_DATABITS (0x08U)
/* Communications feature */
#define COMM_FEATURE_DATA_SIZE (0x02U)
#define STATUS_ABSTRACT_STATE (0x0000U)
#define COUNTRY_SETTING (0x0000U)
/* Notification of serial state */
#define NOTIF_PACKET_SIZE (0x08U)
#define UART_BITMAP_SIZE (0x02U)
#define NOTIF_REQUEST_TYPE (0xA1U)
/* Define the types for application */
typedef struct _usb_cdc_vcom_struct
{
class_handle_t cdcAcmHandle; /* USB CDC ACM class handle. */
volatile uint8_t startTransactions; /* A flag to indicate whether a CDC device is ready to transmit and receive data. */
} usb_cdc_vcom_struct_t;
/* Define the information relates to abstract control model */
typedef struct _usb_cdc_acm_info
{
uint8_t serialStateBuf[NOTIF_PACKET_SIZE + UART_BITMAP_SIZE]; /* Serial state buffer of the CDC device to notify the
serial state to host. */
bool dtePresent; /* A flag to indicate whether DTE is present. */
uint16_t breakDuration; /* Length of time in milliseconds of the break signal */
uint8_t dteStatus; /* Status of data terminal equipment */
uint8_t currentInterface; /* Current interface index. */
uint16_t uartState; /* UART state of the CDC device. */
} usb_cdc_acm_info_t;
/*******************************************************************************
* Prototypes
******************************************************************************/
usb_status_t USB_DeviceInterface4CicVcomCallback(class_handle_t handle, uint32_t event, void *param);
usb_status_t USB_DeviceInterface4CicVcomSetConfiguration(class_handle_t handle, uint8_t configuration_idx);
usb_status_t USB_DeviceInterface4CicVcomSetInterface(class_handle_t handle, uint8_t alternateSetting);
usb_status_t USB_DeviceInterface5DicVcomSetInterface(class_handle_t handle, uint8_t alternateSetting);
usb_status_t USB_DeviceInterface4CicVcomInit(usb_device_composite_struct_t *deviceComposite);
/*******************************************************************************
* Variables
******************************************************************************/
extern usb_device_endpoint_struct_t g_UsbDeviceInterface5DicVcomSetting0DefaultEndpoints[];
/* Line coding of cdc device */
USB_DMA_INIT_DATA_ALIGN(USB_DATA_ALIGN_SIZE) static uint8_t s_lineCoding[LINE_CODING_SIZE] = {
/* E.g. 0x00,0xC2,0x01,0x00 : 0x0001C200 is 115200 bits per second */
(LINE_CODING_DTERATE >> 0U) & 0x000000FFU,
(LINE_CODING_DTERATE >> 8U) & 0x000000FFU,
(LINE_CODING_DTERATE >> 16U) & 0x000000FFU,
(LINE_CODING_DTERATE >> 24U) & 0x000000FFU,
LINE_CODING_CHARFORMAT,
LINE_CODING_PARITYTYPE,
LINE_CODING_DATABITS};
/* Abstract state of cdc device */
USB_DMA_INIT_DATA_ALIGN(USB_DATA_ALIGN_SIZE) static uint8_t s_abstractState[COMM_FEATURE_DATA_SIZE] = {(STATUS_ABSTRACT_STATE >> 0U) & 0x00FFU,
(STATUS_ABSTRACT_STATE >> 8U) & 0x00FFU};
/* Country code of cdc device */
USB_DMA_INIT_DATA_ALIGN(USB_DATA_ALIGN_SIZE) static uint8_t s_countryCode[COMM_FEATURE_DATA_SIZE] = {(COUNTRY_SETTING >> 0U) & 0x00FFU,
(COUNTRY_SETTING >> 8U) & 0x00FFU};
/* CDC ACM information */
USB_DMA_NONINIT_DATA_ALIGN(USB_DATA_ALIGN_SIZE) static usb_cdc_acm_info_t s_usbCdcAcmInfo;
/* Data buffer for receiving and sending*/
USB_DMA_NONINIT_DATA_ALIGN(USB_DATA_ALIGN_SIZE) static uint8_t s_currRecvBuf[DATA_BUFF_SIZE];
USB_DMA_NONINIT_DATA_ALIGN(USB_DATA_ALIGN_SIZE) static uint8_t s_currSendBuf[DATA_BUFF_SIZE];
USB_DMA_INIT_DATA_ALIGN(USB_DATA_ALIGN_SIZE) volatile static uint32_t s_recvSize = 0;
USB_DMA_INIT_DATA_ALIGN(USB_DATA_ALIGN_SIZE) volatile static uint32_t s_sendSize = 0;
#if defined(FSL_FEATURE_USB_KHCI_KEEP_ALIVE_ENABLED) && (FSL_FEATURE_USB_KHCI_KEEP_ALIVE_ENABLED > 0U) && \
defined(USB_DEVICE_CONFIG_KEEP_ALIVE_MODE) && (USB_DEVICE_CONFIG_KEEP_ALIVE_MODE > 0U) && \
defined(FSL_FEATURE_USB_KHCI_USB_RAM) && (FSL_FEATURE_USB_KHCI_USB_RAM > 0U)
USB_DMA_INIT_DATA_ALIGN(USB_DATA_ALIGN_SIZE) volatile static uint8_t s_waitForDataReceive = 0;
USB_DMA_INIT_DATA_ALIGN(USB_DATA_ALIGN_SIZE) volatile static uint8_t s_comOpen = 0;
#endif
USB_DMA_NONINIT_DATA_ALIGN(USB_DATA_ALIGN_SIZE) static usb_device_composite_struct_t *s_UsbDeviceComposite;
USB_DMA_NONINIT_DATA_ALIGN(USB_DATA_ALIGN_SIZE) static usb_cdc_vcom_struct_t s_UsbInterface4CicVcom;
/*******************************************************************************
* Code
******************************************************************************/
/*!
* @brief Interface task function.
*/
void USB_DeviceInterface4CicVcomTask(void)
{
usb_status_t error = kStatus_USB_Error;
if ((1 == s_UsbDeviceComposite->attach) && (1 == s_UsbInterface4CicVcom.startTransactions))
{
/* User Code */
if ((0 != s_recvSize) && (0xFFFFFFFFU != s_recvSize))
{
int32_t i;
/* Copy Buffer to Send Buff */
for (i = 0; i < s_recvSize; i++)
{
s_currSendBuf[s_sendSize++] = s_currRecvBuf[i];
}
s_recvSize = 0;
}
if (s_sendSize)
{
uint32_t size = s_sendSize;
s_sendSize = 0;
error = USB_DeviceCdcAcmSend(s_UsbInterface4CicVcom.cdcAcmHandle, USB_DIC_VCOM_IN_ENDPOINT, s_currSendBuf, size);
if (error != kStatus_USB_Success)
{
/* Failure to send Data Handling code here */
}
}
#if defined(FSL_FEATURE_USB_KHCI_KEEP_ALIVE_ENABLED) && (FSL_FEATURE_USB_KHCI_KEEP_ALIVE_ENABLED > 0U) && \
defined(USB_DEVICE_CONFIG_KEEP_ALIVE_MODE) && (USB_DEVICE_CONFIG_KEEP_ALIVE_MODE > 0U) && \
defined(FSL_FEATURE_USB_KHCI_USB_RAM) && (FSL_FEATURE_USB_KHCI_USB_RAM > 0U)
if ((s_waitForDataReceive))
{
if (s_comOpen == 1)
{
/* Wait for all the packets been sent during opening the com port. Otherwise these packets may
* wake up the system.
*/
usb_echo("Waiting to enter lowpower ...\r\n");
for (uint32_t i = 0U; i < 16000000U; ++i)
{
__ASM("NOP"); /* delay */
}
s_comOpen = 0;
}
usb_echo("Enter lowpower\r\n");
BOARD_DbgConsole_Deinit();
USB0->INTEN &= ~USB_INTEN_TOKDNEEN_MASK;
USB_EnterLowpowerMode();
s_waitForDataReceive = 0;
USB0->INTEN |= USB_INTEN_TOKDNEEN_MASK;
BOARD_DbgConsole_Init();
usb_echo("Exit lowpower\r\n");
}
#endif
}
}
/*!
* @brief Function that processes class specific events.
*
* @param handle Handle to USB device class.
* @param event Class event code.
* @param param The parameter of the class specific event.
* @return usb_status_t Status of USB transaction.
*/
usb_status_t USB_DeviceInterface4CicVcomCallback(class_handle_t handle, uint32_t event, void *param)
{
uint32_t len;
uint8_t *uartBitmap;
usb_device_cdc_acm_request_param_struct_t *acmReqParam;
usb_device_endpoint_callback_message_struct_t *epCbParam;
usb_status_t error = kStatus_USB_Error;
usb_cdc_acm_info_t *acmInfo = &s_usbCdcAcmInfo;
acmReqParam = (usb_device_cdc_acm_request_param_struct_t *)param;
epCbParam = (usb_device_endpoint_callback_message_struct_t *)param;
switch (event)
{
case kUSB_DeviceCdcEventSendResponse:
{
if ((epCbParam->length != 0) && (!(epCbParam->length % g_UsbDeviceInterface5DicVcomSetting0DefaultEndpoints[USB_DIC_VCOM_IN_ENDPOINT_INDEX].maxPacketSize)))
{
/* If the last packet is the size of endpoint, then send also zero-ended packet,
** meaning that we want to inform the host that we do not have any additional
** data, so it can flush the output.
*/
error = USB_DeviceCdcAcmSend(handle, USB_DIC_VCOM_IN_ENDPOINT, NULL, 0);
}
else if ((1 == s_UsbDeviceComposite->attach) && (1 == s_UsbInterface4CicVcom.startTransactions))
{
if ((epCbParam->buffer != NULL) || ((epCbParam->buffer == NULL) && (epCbParam->length == 0)))
{
/* User: add your own code for send complete event */
/* Schedule buffer for next receive event */
error = USB_DeviceCdcAcmRecv(handle, USB_DIC_VCOM_OUT_ENDPOINT, s_currRecvBuf,
g_UsbDeviceInterface5DicVcomSetting0DefaultEndpoints[USB_DIC_VCOM_OUT_ENDPOINT_INDEX].maxPacketSize);
#if defined(FSL_FEATURE_USB_KHCI_KEEP_ALIVE_ENABLED) && (FSL_FEATURE_USB_KHCI_KEEP_ALIVE_ENABLED > 0U) && \
defined(USB_DEVICE_CONFIG_KEEP_ALIVE_MODE) && (USB_DEVICE_CONFIG_KEEP_ALIVE_MODE > 0U) && \
defined(FSL_FEATURE_USB_KHCI_USB_RAM) && (FSL_FEATURE_USB_KHCI_USB_RAM > 0U)
s_waitForDataReceive = 1;
USB0->INTEN &= ~USB_INTEN_SOFTOKEN_MASK;
#endif
}
}
else
{
}
}
break;
case kUSB_DeviceCdcEventRecvResponse:
{
if ((1 == s_UsbDeviceComposite->attach) && (1 == s_UsbInterface4CicVcom.startTransactions))
{
s_recvSize = epCbParam->length;
#if defined(FSL_FEATURE_USB_KHCI_KEEP_ALIVE_ENABLED) && (FSL_FEATURE_USB_KHCI_KEEP_ALIVE_ENABLED > 0U) && \
defined(USB_DEVICE_CONFIG_KEEP_ALIVE_MODE) && (USB_DEVICE_CONFIG_KEEP_ALIVE_MODE > 0U) && \
defined(FSL_FEATURE_USB_KHCI_USB_RAM) && (FSL_FEATURE_USB_KHCI_USB_RAM > 0U)
s_waitForDataReceive = 0;
USB0->INTEN |= USB_INTEN_SOFTOKEN_MASK;
#endif
if (!s_recvSize)
{
/* Schedule buffer for next receive event */
error = USB_DeviceCdcAcmRecv(handle, USB_DIC_VCOM_OUT_ENDPOINT, s_currRecvBuf,
g_UsbDeviceInterface5DicVcomSetting0DefaultEndpoints[USB_DIC_VCOM_OUT_ENDPOINT_INDEX].maxPacketSize);
#if defined(FSL_FEATURE_USB_KHCI_KEEP_ALIVE_ENABLED) && (FSL_FEATURE_USB_KHCI_KEEP_ALIVE_ENABLED > 0U) && \
defined(USB_DEVICE_CONFIG_KEEP_ALIVE_MODE) && (USB_DEVICE_CONFIG_KEEP_ALIVE_MODE > 0U) && \
defined(FSL_FEATURE_USB_KHCI_USB_RAM) && (FSL_FEATURE_USB_KHCI_USB_RAM > 0U)
s_waitForDataReceive = 1;
USB0->INTEN &= ~USB_INTEN_SOFTOKEN_MASK;
#endif
}
}
}
break;
case kUSB_DeviceCdcEventSerialStateNotif:
((usb_device_cdc_acm_struct_t *)handle)->hasSentState = 0;
error = kStatus_USB_Success;
break;
case kUSB_DeviceCdcEventSendEncapsulatedCommand:
break;
case kUSB_DeviceCdcEventGetEncapsulatedResponse:
break;
case kUSB_DeviceCdcEventSetCommFeature:
if (USB_DEVICE_CDC_FEATURE_ABSTRACT_STATE == acmReqParam->setupValue)
{
if (1 == acmReqParam->isSetup)
{
*(acmReqParam->buffer) = s_abstractState;
}
else
{
*(acmReqParam->length) = 0;
}
}
else if (USB_DEVICE_CDC_FEATURE_COUNTRY_SETTING == acmReqParam->setupValue)
{
if (1 == acmReqParam->isSetup)
{
*(acmReqParam->buffer) = s_countryCode;
}
else
{
*(acmReqParam->length) = 0;
}
}
else
{
}
error = kStatus_USB_Success;
break;
case kUSB_DeviceCdcEventGetCommFeature:
if (USB_DEVICE_CDC_FEATURE_ABSTRACT_STATE == acmReqParam->setupValue)
{
*(acmReqParam->buffer) = s_abstractState;
*(acmReqParam->length) = COMM_FEATURE_DATA_SIZE;
}
else if (USB_DEVICE_CDC_FEATURE_COUNTRY_SETTING == acmReqParam->setupValue)
{
*(acmReqParam->buffer) = s_countryCode;
*(acmReqParam->length) = COMM_FEATURE_DATA_SIZE;
}
else
{
}
error = kStatus_USB_Success;
break;
case kUSB_DeviceCdcEventClearCommFeature:
break;
case kUSB_DeviceCdcEventGetLineCoding:
*(acmReqParam->buffer) = s_lineCoding;
*(acmReqParam->length) = LINE_CODING_SIZE;
error = kStatus_USB_Success;
break;
case kUSB_DeviceCdcEventSetLineCoding:
if (1 == acmReqParam->isSetup)
{
*(acmReqParam->buffer) = s_lineCoding;
}
else
{
*(acmReqParam->length) = 0;
}
error = kStatus_USB_Success;
break;
case kUSB_DeviceCdcEventSetControlLineState:
{
s_usbCdcAcmInfo.dteStatus = acmReqParam->setupValue;
/* activate/deactivate Tx carrier */
if (acmInfo->dteStatus & USB_DEVICE_CDC_CONTROL_SIG_BITMAP_CARRIER_ACTIVATION)
{
acmInfo->uartState |= USB_DEVICE_CDC_UART_STATE_TX_CARRIER;
}
else
{
acmInfo->uartState &= (uint16_t)~USB_DEVICE_CDC_UART_STATE_TX_CARRIER;
}
/* activate carrier and DTE. Com port of terminal tool running on PC is open now */
if (acmInfo->dteStatus & USB_DEVICE_CDC_CONTROL_SIG_BITMAP_DTE_PRESENCE)
{
acmInfo->uartState |= USB_DEVICE_CDC_UART_STATE_RX_CARRIER;
}
/* Com port of terminal tool running on PC is closed now */
else
{
acmInfo->uartState &= (uint16_t)~USB_DEVICE_CDC_UART_STATE_RX_CARRIER;
}
/* Indicates to DCE if DTE is present or not */
acmInfo->dtePresent = (acmInfo->dteStatus & USB_DEVICE_CDC_CONTROL_SIG_BITMAP_DTE_PRESENCE) ? true : false;
/* Initialize the serial state buffer */
acmInfo->serialStateBuf[0] = NOTIF_REQUEST_TYPE; /* bmRequestType */
acmInfo->serialStateBuf[1] = USB_DEVICE_CDC_NOTIF_SERIAL_STATE; /* bNotification */
acmInfo->serialStateBuf[2] = 0x00; /* wValue */
acmInfo->serialStateBuf[3] = 0x00;
acmInfo->serialStateBuf[4] = 0x00; /* wIndex */
acmInfo->serialStateBuf[5] = 0x00;
acmInfo->serialStateBuf[6] = UART_BITMAP_SIZE; /* wLength */
acmInfo->serialStateBuf[7] = 0x00;
/* Notify to host the line state */
acmInfo->serialStateBuf[4] = acmReqParam->interfaceIndex;
/* Lower byte of UART BITMAP */
uartBitmap = (uint8_t *)&acmInfo->serialStateBuf[NOTIF_PACKET_SIZE + UART_BITMAP_SIZE - 2];
uartBitmap[0] = acmInfo->uartState & 0xFFu;
uartBitmap[1] = (acmInfo->uartState >> 8) & 0xFFu;
len = (uint32_t)(NOTIF_PACKET_SIZE + UART_BITMAP_SIZE);
if (0 == ((usb_device_cdc_acm_struct_t *)handle)->hasSentState)
{
error = USB_DeviceCdcAcmSend(handle, USB_CIC_VCOM_IN_ENDPOINT, acmInfo->serialStateBuf, len);
if (kStatus_USB_Success != error)
{
usb_echo("kUSB_DeviceCdcEventSetControlLineState error!");
}
((usb_device_cdc_acm_struct_t *)handle)->hasSentState = 1;
}
/* Update status */
if (acmInfo->dteStatus & USB_DEVICE_CDC_CONTROL_SIG_BITMAP_CARRIER_ACTIVATION)
{
/* To do: CARRIER_ACTIVATED */
}
else
{
/* To do: CARRIER_DEACTIVATED */
}
if (acmInfo->dteStatus & USB_DEVICE_CDC_CONTROL_SIG_BITMAP_DTE_PRESENCE)
{
/* DTE_ACTIVATED */
if (1 == s_UsbDeviceComposite->attach)
{
s_UsbInterface4CicVcom.startTransactions = 1;
#if defined(FSL_FEATURE_USB_KHCI_KEEP_ALIVE_ENABLED) && (FSL_FEATURE_USB_KHCI_KEEP_ALIVE_ENABLED > 0U) && \
defined(USB_DEVICE_CONFIG_KEEP_ALIVE_MODE) && (USB_DEVICE_CONFIG_KEEP_ALIVE_MODE > 0U) && \
defined(FSL_FEATURE_USB_KHCI_USB_RAM) && (FSL_FEATURE_USB_KHCI_USB_RAM > 0U)
s_waitForDataReceive = 1;
USB0->INTEN &= ~USB_INTEN_SOFTOKEN_MASK;
s_comOpen = 1;
usb_echo("USB_APP_CDC_DTE_ACTIVATED\r\n");
#endif
}
}
else
{
/* DTE_DEACTIVATED */
if (1 == s_UsbDeviceComposite->attach)
{
s_UsbInterface4CicVcom.startTransactions = 0;
}
}
}
break;
case kUSB_DeviceCdcEventSendBreak:
break;
default:
break;
}
return error;
}
/*!
* @brief Notifies application layer about set configuration event.
*
* @param handle Handle to USB device class.
* @param configuration_idx Id of device configuration.
* @return usb_status_t Always return kStatus_USB_Success value.
*/
usb_status_t USB_DeviceInterface4CicVcomSetConfiguration(class_handle_t handle, uint8_t configuration_idx)
{
/* Schedule buffer for receive */
USB_DeviceCdcAcmRecv(s_UsbInterface4CicVcom.cdcAcmHandle, USB_DIC_VCOM_OUT_ENDPOINT, s_currRecvBuf,
g_UsbDeviceInterface5DicVcomSetting0DefaultEndpoints[USB_DIC_VCOM_OUT_ENDPOINT_INDEX].maxPacketSize);
return kStatus_USB_Success;
}
/*!
* @brief Notifies application layer about set configuration event.
*
* @param class_handle_t Handle to USB device class.
* @param alternateSetting Id of device alternative setting.
* @return usb_status_t Always return kStatus_USB_Success value.
*/
usb_status_t USB_DeviceInterface4CicVcomSetInterface(class_handle_t handle, uint8_t alternateSetting)
{
return kStatus_USB_Success;
}
/*!
* @brief Notifies application layer about set configuration event.
*
* @param class_handle_t Handle to USB device class.
* @param alternateSetting Id of device alternative setting.
* @return usb_status_t Always return kStatus_USB_Success value.
*/
usb_status_t USB_DeviceInterface5DicVcomSetInterface(class_handle_t handle, uint8_t alternateSetting)
{
return kStatus_USB_Success;
}
/*!
* @brief Initializes device structure and buffer pointers.
*
* @param *device Pointer to structure to initialize to.
* @return usb_status_t Always return kStatus_USB_Success value.
*/
usb_status_t USB_DeviceInterface4CicVcomInit(usb_device_composite_struct_t *deviceComposite)
{
s_UsbDeviceComposite = deviceComposite;
s_UsbInterface4CicVcom.cdcAcmHandle = s_UsbDeviceComposite->interface4CicVcomHandle;
return kStatus_USB_Success;
}

View File

@ -0,0 +1,44 @@
/*
* Copyright 2015-2016, Freescale Semiconductor, Inc.
* Copyright 2016-2021 NXP
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list
* of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this
* list of conditions and the following disclaimer in the documentation and/or
* other materials provided with the distribution.
*
* 3. Neither the name of copyright holder nor the names of its
* contributors may be used to endorse or promote products derived from this
* software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef __USB_DEVICE_INTERFACE_4_CIC_VCOM_H__
#define __USB_DEVICE_INTERFACE_4_CIC_VCOM_H__
/*******************************************************************************
* Definitions
******************************************************************************/
/*!
* @brief Interface task function.
*/
void USB_DeviceInterface4CicVcomTask(void);
#endif /* __USB_DEVICE_INTERFACE_4_CIC_VCOM_H__ */