mirror of
https://github.com/apache/nuttx.git
synced 2026-06-04 23:03:27 +08:00
Merged in petekol/nuttxnsm (pull request #168)
stm32f7 important usb fixes
This commit is contained in:
@@ -0,0 +1,52 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<?fileVersion 4.0.0?><cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
|
||||||
|
<storageModule moduleId="org.eclipse.cdt.core.settings">
|
||||||
|
<cconfiguration id="0.1611600322">
|
||||||
|
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="0.1611600322" moduleId="org.eclipse.cdt.core.settings" name="Default">
|
||||||
|
<externalSettings/>
|
||||||
|
<extensions>
|
||||||
|
<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||||
|
<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||||
|
<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||||
|
<extension id="org.eclipse.cdt.core.VCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||||
|
<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||||
|
<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||||
|
</extensions>
|
||||||
|
</storageModule>
|
||||||
|
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
|
||||||
|
<configuration buildProperties="" description="" id="0.1611600322" name="Default" parent="org.eclipse.cdt.build.core.prefbase.cfg">
|
||||||
|
<folderInfo id="0.1611600322." name="/" resourcePath="">
|
||||||
|
<toolChain id="org.eclipse.cdt.build.core.prefbase.toolchain.1056213755" name="No ToolChain" resourceTypeBasedDiscovery="false" superClass="org.eclipse.cdt.build.core.prefbase.toolchain">
|
||||||
|
<targetPlatform id="org.eclipse.cdt.build.core.prefbase.toolchain.1056213755.1436886392" name=""/>
|
||||||
|
<builder id="org.eclipse.cdt.build.core.settings.default.builder.1575371269" keepEnvironmentInBuildfile="false" managedBuildOn="false" name="Gnu Make Builder" superClass="org.eclipse.cdt.build.core.settings.default.builder"/>
|
||||||
|
<tool id="org.eclipse.cdt.build.core.settings.holder.libs.1023601919" name="holder for library settings" superClass="org.eclipse.cdt.build.core.settings.holder.libs"/>
|
||||||
|
<tool id="org.eclipse.cdt.build.core.settings.holder.760672595" name="Assembly" superClass="org.eclipse.cdt.build.core.settings.holder">
|
||||||
|
<inputType id="org.eclipse.cdt.build.core.settings.holder.inType.1114163004" languageId="org.eclipse.cdt.core.assembly" languageName="Assembly" sourceContentType="org.eclipse.cdt.core.asmSource" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
|
||||||
|
</tool>
|
||||||
|
<tool id="org.eclipse.cdt.build.core.settings.holder.821470729" name="GNU C++" superClass="org.eclipse.cdt.build.core.settings.holder">
|
||||||
|
<inputType id="org.eclipse.cdt.build.core.settings.holder.inType.279522091" languageId="org.eclipse.cdt.core.g++" languageName="GNU C++" sourceContentType="org.eclipse.cdt.core.cxxSource,org.eclipse.cdt.core.cxxHeader" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
|
||||||
|
</tool>
|
||||||
|
<tool id="org.eclipse.cdt.build.core.settings.holder.29565109" name="GNU C" superClass="org.eclipse.cdt.build.core.settings.holder">
|
||||||
|
<inputType id="org.eclipse.cdt.build.core.settings.holder.inType.1514003304" languageId="org.eclipse.cdt.core.gcc" languageName="GNU C" sourceContentType="org.eclipse.cdt.core.cSource,org.eclipse.cdt.core.cHeader" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
|
||||||
|
</tool>
|
||||||
|
</toolChain>
|
||||||
|
</folderInfo>
|
||||||
|
</configuration>
|
||||||
|
</storageModule>
|
||||||
|
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
|
||||||
|
</cconfiguration>
|
||||||
|
</storageModule>
|
||||||
|
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
|
||||||
|
<project id="nuttx.null.290727712" name="nuttx"/>
|
||||||
|
</storageModule>
|
||||||
|
<storageModule moduleId="scannerConfiguration">
|
||||||
|
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
|
||||||
|
<scannerConfigBuildInfo instanceId="0.1611600322">
|
||||||
|
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
|
||||||
|
</scannerConfigBuildInfo>
|
||||||
|
<scannerConfigBuildInfo instanceId="0.186444846">
|
||||||
|
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
|
||||||
|
</scannerConfigBuildInfo>
|
||||||
|
</storageModule>
|
||||||
|
<storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
|
||||||
|
</cproject>
|
||||||
@@ -28,3 +28,5 @@ cscope.out
|
|||||||
/*.hex
|
/*.hex
|
||||||
/pcode
|
/pcode
|
||||||
/tags
|
/tags
|
||||||
|
.cproject
|
||||||
|
.project
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<projectDescription>
|
||||||
|
<name>nuttx</name>
|
||||||
|
<comment></comment>
|
||||||
|
<projects>
|
||||||
|
</projects>
|
||||||
|
<buildSpec>
|
||||||
|
<buildCommand>
|
||||||
|
<name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
|
||||||
|
<triggers>clean,full,incremental,</triggers>
|
||||||
|
<arguments>
|
||||||
|
</arguments>
|
||||||
|
</buildCommand>
|
||||||
|
<buildCommand>
|
||||||
|
<name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
|
||||||
|
<triggers>full,incremental,</triggers>
|
||||||
|
<arguments>
|
||||||
|
</arguments>
|
||||||
|
</buildCommand>
|
||||||
|
</buildSpec>
|
||||||
|
<natures>
|
||||||
|
<nature>org.eclipse.cdt.core.cnature</nature>
|
||||||
|
<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
|
||||||
|
<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
|
||||||
|
</natures>
|
||||||
|
</projectDescription>
|
||||||
@@ -77,7 +77,7 @@
|
|||||||
#define STM32_OTG_CID_OFFSET 0x003c /* Core ID register */
|
#define STM32_OTG_CID_OFFSET 0x003c /* Core ID register */
|
||||||
#define STM32_OTG_HPTXFSIZ_OFFSET 0x0100 /* Host periodic transmit FIFO size register */
|
#define STM32_OTG_HPTXFSIZ_OFFSET 0x0100 /* Host periodic transmit FIFO size register */
|
||||||
|
|
||||||
#define STM32_OTG_DIEPTXF_OFFSET(n) (104+(((n)-1) << 2))
|
#define STM32_OTG_DIEPTXF_OFFSET(n) (0x0104+(((n)-1) << 2))
|
||||||
|
|
||||||
/* Host-mode control and status registers */
|
/* Host-mode control and status registers */
|
||||||
|
|
||||||
|
|||||||
@@ -580,7 +580,7 @@
|
|||||||
# define RCC_PLLI2SCFGR_PLLI2SQ(n) ((uint32_t)(n) << RCC_PLLI2SCFGR_PLLI2SQ_SHIFT)
|
# define RCC_PLLI2SCFGR_PLLI2SQ(n) ((uint32_t)(n) << RCC_PLLI2SCFGR_PLLI2SQ_SHIFT)
|
||||||
#define RCC_PLLI2SCFGR_PLLI2SR_SHIFT (28) /* Bits 28-30: PLLI2S division factor for I2S clocks */
|
#define RCC_PLLI2SCFGR_PLLI2SR_SHIFT (28) /* Bits 28-30: PLLI2S division factor for I2S clocks */
|
||||||
#define RCC_PLLI2SCFGR_PLLI2SR_MASK (7 << RCC_PLLI2SCFGR_PLLI2SR_SHIFT)
|
#define RCC_PLLI2SCFGR_PLLI2SR_MASK (7 << RCC_PLLI2SCFGR_PLLI2SR_SHIFT)
|
||||||
# define RCC_PLLI2SCFGR_PLLI2SR(n) (uint32_t)(n) << RCC_PLLI2SCFGR_PLLI2SR_SHIFT)
|
# define RCC_PLLI2SCFGR_PLLI2SR(n) ((uint32_t)(n) << RCC_PLLI2SCFGR_PLLI2SR_SHIFT)
|
||||||
|
|
||||||
/* PLLSAI configuration register */
|
/* PLLSAI configuration register */
|
||||||
|
|
||||||
|
|||||||
@@ -601,7 +601,7 @@
|
|||||||
# define RCC_PLLI2SCFGR_PLLI2SQ(n) ((uint32_t)(n) << RCC_PLLI2SCFGR_PLLI2SQ_SHIFT)
|
# define RCC_PLLI2SCFGR_PLLI2SQ(n) ((uint32_t)(n) << RCC_PLLI2SCFGR_PLLI2SQ_SHIFT)
|
||||||
#define RCC_PLLI2SCFGR_PLLI2SR_SHIFT (28) /* Bits 28-30: PLLI2S division factor for I2S clocks */
|
#define RCC_PLLI2SCFGR_PLLI2SR_SHIFT (28) /* Bits 28-30: PLLI2S division factor for I2S clocks */
|
||||||
#define RCC_PLLI2SCFGR_PLLI2SR_MASK (7 << RCC_PLLI2SCFGR_PLLI2SR_SHIFT)
|
#define RCC_PLLI2SCFGR_PLLI2SR_MASK (7 << RCC_PLLI2SCFGR_PLLI2SR_SHIFT)
|
||||||
# define RCC_PLLI2SCFGR_PLLI2SR(n) (uint32_t)(n) << RCC_PLLI2SCFGR_PLLI2SR_SHIFT)
|
# define RCC_PLLI2SCFGR_PLLI2SR(n) ((uint32_t)(n) << RCC_PLLI2SCFGR_PLLI2SR_SHIFT)
|
||||||
|
|
||||||
/* PLLSAI configuration register */
|
/* PLLSAI configuration register */
|
||||||
|
|
||||||
|
|||||||
@@ -1313,17 +1313,17 @@ static void stm32_i2c_setclock(FAR struct stm32_i2c_priv_s *priv, uint32_t frequ
|
|||||||
if (frequency == 100000)
|
if (frequency == 100000)
|
||||||
{
|
{
|
||||||
presc = 0;
|
presc = 0;
|
||||||
scl_delay = 3;
|
scl_delay = 5;
|
||||||
sda_delay = 0;
|
sda_delay = 0;
|
||||||
scl_h_period = 30;
|
scl_h_period = 61;
|
||||||
scl_l_period = 120;
|
scl_l_period = 89;
|
||||||
|
|
||||||
}
|
}
|
||||||
else if (frequency == 400000)
|
else if (frequency == 400000)
|
||||||
{
|
{
|
||||||
presc = 0;
|
presc = 0;
|
||||||
scl_delay = 3;
|
scl_delay = 3;
|
||||||
sda_delay = 9;
|
sda_delay = 0;
|
||||||
scl_h_period = 6;
|
scl_h_period = 6;
|
||||||
scl_l_period = 24;
|
scl_l_period = 24;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4230,7 +4230,10 @@ static void stm32_epin_disable(FAR struct stm32_ep_s *privep)
|
|||||||
|
|
||||||
/* Clear the EPDISD interrupt indication */
|
/* Clear the EPDISD interrupt indication */
|
||||||
|
|
||||||
stm32_putreg(OTG_DIEPINT_EPDISD, stm32_getreg(regaddr));
|
regval = stm32_getreg(regaddr);
|
||||||
|
regval |= OTG_DIEPINT_EPDISD;
|
||||||
|
stm32_putreg(regval, regaddr);
|
||||||
|
|
||||||
|
|
||||||
/* Flush any data remaining in the TxFIFO */
|
/* Flush any data remaining in the TxFIFO */
|
||||||
|
|
||||||
|
|||||||
@@ -114,7 +114,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_STM32F7_SDMMC1
|
#ifdef CONFIG_STM32F7_SDMMC1
|
||||||
# ifndef CONFIG_SDMMC1_PRI
|
# if defined(CONFIG_ARCH_IRQPRIO) && !defined(CONFIG_SDMMC1_PRI)
|
||||||
# define CONFIG_SDMMC1_PRI NVIC_SYSH_PRIORITY_DEFAULT
|
# define CONFIG_SDMMC1_PRI NVIC_SYSH_PRIORITY_DEFAULT
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
@@ -131,7 +131,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_STM32F7_SDMMC2
|
#ifdef CONFIG_STM32F7_SDMMC2
|
||||||
# ifndef CONFIG_SDMMC2_PRI
|
# if defined(CONFIG_ARCH_IRQPRIO) && !defined(CONFIG_SDMMC2_PRI)
|
||||||
# define CONFIG_SDMMC2_PRI NVIC_SYSH_PRIORITY_DEFAULT
|
# define CONFIG_SDMMC2_PRI NVIC_SYSH_PRIORITY_DEFAULT
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
|
|||||||
@@ -882,10 +882,10 @@ static void stm32_stdclockconfig(void)
|
|||||||
| RCC_PLLI2SCFGR_PLLI2SP_MASK
|
| RCC_PLLI2SCFGR_PLLI2SP_MASK
|
||||||
| RCC_PLLI2SCFGR_PLLI2SQ_MASK
|
| RCC_PLLI2SCFGR_PLLI2SQ_MASK
|
||||||
| RCC_PLLI2SCFGR_PLLI2SR_MASK);
|
| RCC_PLLI2SCFGR_PLLI2SR_MASK);
|
||||||
regval |= (STM32_RCC_PLLSAICFGR_PLLSAIN
|
regval |= (STM32_RCC_PLLI2SCFGR_PLLI2SN
|
||||||
| STM32_RCC_PLLSAICFGR_PLLSAIP
|
| STM32_RCC_PLLI2SCFGR_PLLI2SP
|
||||||
| STM32_RCC_PLLSAICFGR_PLLSAIQ
|
| STM32_RCC_PLLI2SCFGR_PLLI2SQ
|
||||||
| STM32_RCC_PLLSAICFGR_PLLSAIR);
|
| STM32_RCC_PLLI2SCFGR_PLLI2SR);
|
||||||
putreg32(regval, STM32_RCC_PLLI2SCFGR);
|
putreg32(regval, STM32_RCC_PLLI2SCFGR);
|
||||||
|
|
||||||
regval = getreg32(STM32_RCC_DCKCFGR2);
|
regval = getreg32(STM32_RCC_DCKCFGR2);
|
||||||
|
|||||||
@@ -124,7 +124,7 @@
|
|||||||
|
|
||||||
/* Configure factors for PLLSAI clock */
|
/* Configure factors for PLLSAI clock */
|
||||||
|
|
||||||
|
#define CONFIG_STM32F7_PLLSAI 1
|
||||||
#define STM32_RCC_PLLSAICFGR_PLLSAIN RCC_PLLSAICFGR_PLLSAIN(192)
|
#define STM32_RCC_PLLSAICFGR_PLLSAIN RCC_PLLSAICFGR_PLLSAIN(192)
|
||||||
#define STM32_RCC_PLLSAICFGR_PLLSAIP RCC_PLLSAICFGR_PLLSAIP(2)
|
#define STM32_RCC_PLLSAICFGR_PLLSAIP RCC_PLLSAICFGR_PLLSAIP(2)
|
||||||
#define STM32_RCC_PLLSAICFGR_PLLSAIQ RCC_PLLSAICFGR_PLLSAIQ(2)
|
#define STM32_RCC_PLLSAICFGR_PLLSAIQ RCC_PLLSAICFGR_PLLSAIQ(2)
|
||||||
@@ -144,7 +144,7 @@
|
|||||||
|
|
||||||
|
|
||||||
/* Configure factors for PLLI2S clock */
|
/* Configure factors for PLLI2S clock */
|
||||||
|
#define CONFIG_STM32F7_PLLI2S 1
|
||||||
#define STM32_RCC_PLLI2SCFGR_PLLI2SN RCC_PLLI2SCFGR_PLLI2SN(192)
|
#define STM32_RCC_PLLI2SCFGR_PLLI2SN RCC_PLLI2SCFGR_PLLI2SN(192)
|
||||||
#define STM32_RCC_PLLI2SCFGR_PLLI2SP RCC_PLLI2SCFGR_PLLI2SP(2)
|
#define STM32_RCC_PLLI2SCFGR_PLLI2SP RCC_PLLI2SCFGR_PLLI2SP(2)
|
||||||
#define STM32_RCC_PLLI2SCFGR_PLLI2SQ RCC_PLLI2SCFGR_PLLI2SQ(2)
|
#define STM32_RCC_PLLI2SCFGR_PLLI2SQ RCC_PLLI2SCFGR_PLLI2SQ(2)
|
||||||
@@ -254,6 +254,48 @@
|
|||||||
#define GPIO_I2C1_SCL GPIO_I2C1_SCL_1
|
#define GPIO_I2C1_SCL GPIO_I2C1_SCL_1
|
||||||
#define GPIO_I2C1_SDA GPIO_I2C1_SDA_1
|
#define GPIO_I2C1_SDA GPIO_I2C1_SDA_1
|
||||||
|
|
||||||
|
/* SDMMC */
|
||||||
|
|
||||||
|
/* Stream selections are arbitrary for now but might become important in the future
|
||||||
|
* if we set aside more DMA channels/streams.
|
||||||
|
*
|
||||||
|
* SDIO DMA
|
||||||
|
* DMAMAP_SDMMC1_1 = Channel 4, Stream 3
|
||||||
|
* DMAMAP_SDMMC1_2 = Channel 4, Stream 6
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define DMAMAP_SDMMC1 DMAMAP_SDMMC1_1
|
||||||
|
|
||||||
|
/* SDIO dividers. Note that slower clocking is required when DMA is disabled
|
||||||
|
* in order to avoid RX overrun/TX underrun errors due to delayed responses
|
||||||
|
* to service FIFOs in interrupt driven mode. These values have not been
|
||||||
|
* tuned!!!
|
||||||
|
*
|
||||||
|
* SDIOCLK=48MHz, SDIO_CK=SDIOCLK/(118+2)=400 KHz
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define STM32_SDMMC_INIT_CLKDIV (118 << STM32_SDMMC_CLKCR_CLKDIV_SHIFT)
|
||||||
|
|
||||||
|
/* DMA ON: SDIOCLK=48MHz, SDIO_CK=SDIOCLK/(1+2)=16 MHz
|
||||||
|
* DMA OFF: SDIOCLK=48MHz, SDIO_CK=SDIOCLK/(2+2)=12 MHz
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef CONFIG_SDIO_DMA
|
||||||
|
# define STM32_SDMMC_MMCXFR_CLKDIV (1 << STM32_SDMMC_CLKCR_CLKDIV_SHIFT)
|
||||||
|
#else
|
||||||
|
# define STM32_SDMMC_MMCXFR_CLKDIV (2 << STM32_SDMMC_CLKCR_CLKDIV_SHIFT)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* DMA ON: SDIOCLK=48MHz, SDIO_CK=SDIOCLK/(1+2)=16 MHz
|
||||||
|
* DMA OFF: SDIOCLK=48MHz, SDIO_CK=SDIOCLK/(2+2)=12 MHz
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef CONFIG_SDIO_DMA
|
||||||
|
# define STM32_SDMMC_SDXFR_CLKDIV (1 << STM32_SDMMC_CLKCR_CLKDIV_SHIFT)
|
||||||
|
#else
|
||||||
|
# define STM32_SDMMC_SDXFR_CLKDIV (2 << STM32_SDMMC_CLKCR_CLKDIV_SHIFT)
|
||||||
|
#endif
|
||||||
|
|
||||||
/************************************************************************************
|
/************************************************************************************
|
||||||
* Public Data
|
* Public Data
|
||||||
************************************************************************************/
|
************************************************************************************/
|
||||||
|
|||||||
@@ -53,6 +53,12 @@ CONFIG_ARCH_HAVE_CUSTOMOPT=y
|
|||||||
CONFIG_DEBUG_NOOPT=y
|
CONFIG_DEBUG_NOOPT=y
|
||||||
# CONFIG_DEBUG_CUSTOMOPT is not set
|
# CONFIG_DEBUG_CUSTOMOPT is not set
|
||||||
# CONFIG_DEBUG_FULLOPT is not set
|
# CONFIG_DEBUG_FULLOPT is not set
|
||||||
|
CONFIG_DEBUG_ERROR=y
|
||||||
|
CONFIG_DEBUG_INFO=y
|
||||||
|
CONFIG_DEBUG_WARN=y
|
||||||
|
CONFIG_DEBUG_FS_INFO=y
|
||||||
|
CONFIG_DEBUG_FS_ERROR=y
|
||||||
|
CONFIG_DEBUG_FS_WARN=y
|
||||||
|
|
||||||
#
|
#
|
||||||
# System Type
|
# System Type
|
||||||
@@ -121,7 +127,7 @@ CONFIG_ARCH_FAMILY="armv7-m"
|
|||||||
CONFIG_ARCH_CHIP="stm32f7"
|
CONFIG_ARCH_CHIP="stm32f7"
|
||||||
# CONFIG_ARM_TOOLCHAIN_IAR is not set
|
# CONFIG_ARM_TOOLCHAIN_IAR is not set
|
||||||
CONFIG_ARM_TOOLCHAIN_GNU=y
|
CONFIG_ARM_TOOLCHAIN_GNU=y
|
||||||
# CONFIG_ARMV7M_USEBASEPRI is not set
|
CONFIG_ARMV7M_USEBASEPRI=y
|
||||||
CONFIG_ARCH_HAVE_CMNVECTOR=y
|
CONFIG_ARCH_HAVE_CMNVECTOR=y
|
||||||
CONFIG_ARMV7M_CMNVECTOR=y
|
CONFIG_ARMV7M_CMNVECTOR=y
|
||||||
# CONFIG_ARMV7M_LAZYFPU is not set
|
# CONFIG_ARMV7M_LAZYFPU is not set
|
||||||
@@ -271,7 +277,7 @@ CONFIG_STM32F7_HAVE_DMA2D=y
|
|||||||
CONFIG_STM32F7_ADC=y
|
CONFIG_STM32F7_ADC=y
|
||||||
# CONFIG_STM32F7_CAN is not set
|
# CONFIG_STM32F7_CAN is not set
|
||||||
# CONFIG_STM32F7_DAC is not set
|
# CONFIG_STM32F7_DAC is not set
|
||||||
# CONFIG_STM32F7_DMA is not set
|
CONFIG_STM32F7_DMA=y
|
||||||
CONFIG_STM32F7_I2C=y
|
CONFIG_STM32F7_I2C=y
|
||||||
# CONFIG_STM32F7_SAI is not set
|
# CONFIG_STM32F7_SAI is not set
|
||||||
CONFIG_STM32F7_SPI=y
|
CONFIG_STM32F7_SPI=y
|
||||||
@@ -286,7 +292,7 @@ CONFIG_STM32F7_ADC1=y
|
|||||||
# CONFIG_STM32F7_CEC is not set
|
# CONFIG_STM32F7_CEC is not set
|
||||||
# CONFIG_STM32F7_CRC is not set
|
# CONFIG_STM32F7_CRC is not set
|
||||||
# CONFIG_STM32F7_DMA1 is not set
|
# CONFIG_STM32F7_DMA1 is not set
|
||||||
# CONFIG_STM32F7_DMA2 is not set
|
CONFIG_STM32F7_DMA2=y
|
||||||
# CONFIG_STM32F7_DAC1 is not set
|
# CONFIG_STM32F7_DAC1 is not set
|
||||||
# CONFIG_STM32F7_DAC2 is not set
|
# CONFIG_STM32F7_DAC2 is not set
|
||||||
# CONFIG_STM32F7_DCMI is not set
|
# CONFIG_STM32F7_DCMI is not set
|
||||||
@@ -299,14 +305,14 @@ CONFIG_STM32F7_I2C1=y
|
|||||||
# CONFIG_STM32F7_I2C4 is not set
|
# CONFIG_STM32F7_I2C4 is not set
|
||||||
# CONFIG_STM32F7_LPTIM1 is not set
|
# CONFIG_STM32F7_LPTIM1 is not set
|
||||||
# CONFIG_STM32F7_LTDC is not set
|
# CONFIG_STM32F7_LTDC is not set
|
||||||
# CONFIG_STM32F7_OTGFS is not set
|
CONFIG_STM32F7_OTGFS=y
|
||||||
# CONFIG_STM32F7_OTGHS is not set
|
# CONFIG_STM32F7_OTGHS is not set
|
||||||
# CONFIG_STM32F7_QUADSPI is not set
|
# CONFIG_STM32F7_QUADSPI is not set
|
||||||
# CONFIG_STM32F7_PWR is not set
|
# CONFIG_STM32F7_PWR is not set
|
||||||
# CONFIG_STM32F7_RNG is not set
|
# CONFIG_STM32F7_RNG is not set
|
||||||
# CONFIG_STM32F7_SAI1 is not set
|
# CONFIG_STM32F7_SAI1 is not set
|
||||||
# CONFIG_STM32F7_SAI2 is not set
|
# CONFIG_STM32F7_SAI2 is not set
|
||||||
# CONFIG_STM32F7_SDMMC1 is not set
|
CONFIG_STM32F7_SDMMC1=y
|
||||||
# CONFIG_STM32F7_SPDIFRX is not set
|
# CONFIG_STM32F7_SPDIFRX is not set
|
||||||
CONFIG_STM32F7_SPI1=y
|
CONFIG_STM32F7_SPI1=y
|
||||||
# CONFIG_STM32F7_SPI2 is not set
|
# CONFIG_STM32F7_SPI2 is not set
|
||||||
@@ -377,7 +383,7 @@ CONFIG_STM32F7_I2CTIMEOTICKS=500
|
|||||||
#
|
#
|
||||||
# CONFIG_ARCH_NOINTC is not set
|
# CONFIG_ARCH_NOINTC is not set
|
||||||
# CONFIG_ARCH_VECNOTIRQ is not set
|
# CONFIG_ARCH_VECNOTIRQ is not set
|
||||||
# CONFIG_ARCH_DMA is not set
|
CONFIG_ARCH_DMA=y
|
||||||
CONFIG_ARCH_HAVE_IRQPRIO=y
|
CONFIG_ARCH_HAVE_IRQPRIO=y
|
||||||
# CONFIG_ARCH_L2CACHE is not set
|
# CONFIG_ARCH_L2CACHE is not set
|
||||||
# CONFIG_ARCH_HAVE_COHERENT_DCACHE is not set
|
# CONFIG_ARCH_HAVE_COHERENT_DCACHE is not set
|
||||||
@@ -410,7 +416,7 @@ CONFIG_BOARD_LOOPSPERMSEC=43103
|
|||||||
# Interrupt options
|
# Interrupt options
|
||||||
#
|
#
|
||||||
CONFIG_ARCH_HAVE_INTERRUPTSTACK=y
|
CONFIG_ARCH_HAVE_INTERRUPTSTACK=y
|
||||||
CONFIG_ARCH_INTERRUPTSTACK=600
|
CONFIG_ARCH_INTERRUPTSTACK=2600
|
||||||
CONFIG_ARCH_HAVE_HIPRI_INTERRUPT=y
|
CONFIG_ARCH_HAVE_HIPRI_INTERRUPT=y
|
||||||
# CONFIG_ARCH_HIPRI_INTERRUPT is not set
|
# CONFIG_ARCH_HIPRI_INTERRUPT is not set
|
||||||
|
|
||||||
@@ -440,6 +446,8 @@ CONFIG_ARCH_BOARD="stm32f746-ws"
|
|||||||
#
|
#
|
||||||
# Common Board Options
|
# Common Board Options
|
||||||
#
|
#
|
||||||
|
CONFIG_NSH_MMCSDMINOR=0
|
||||||
|
CONFIG_NSH_MMCSDSLOTNO=0
|
||||||
|
|
||||||
#
|
#
|
||||||
# Board-Specific Options
|
# Board-Specific Options
|
||||||
@@ -452,6 +460,7 @@ CONFIG_LIB_BOARDCTL=y
|
|||||||
# CONFIG_BOARDCTL_PWMTEST is not set
|
# CONFIG_BOARDCTL_PWMTEST is not set
|
||||||
# CONFIG_BOARDCTL_GRAPHICS is not set
|
# CONFIG_BOARDCTL_GRAPHICS is not set
|
||||||
# CONFIG_BOARDCTL_IOCTL is not set
|
# CONFIG_BOARDCTL_IOCTL is not set
|
||||||
|
CONFIG_BOARDCTL_USBDEVCTRL=y
|
||||||
|
|
||||||
#
|
#
|
||||||
# RTOS Features
|
# RTOS Features
|
||||||
@@ -562,7 +571,7 @@ CONFIG_SCHED_LPWORKSTACKSIZE=1800
|
|||||||
#
|
#
|
||||||
# Stack and heap information
|
# Stack and heap information
|
||||||
#
|
#
|
||||||
CONFIG_IDLETHREAD_STACKSIZE=500
|
CONFIG_IDLETHREAD_STACKSIZE=2500
|
||||||
CONFIG_USERMAIN_STACKSIZE=2500
|
CONFIG_USERMAIN_STACKSIZE=2500
|
||||||
CONFIG_PTHREAD_STACK_MIN=512
|
CONFIG_PTHREAD_STACK_MIN=512
|
||||||
CONFIG_PTHREAD_STACK_DEFAULT=2048
|
CONFIG_PTHREAD_STACK_DEFAULT=2048
|
||||||
@@ -577,6 +586,17 @@ CONFIG_DEV_NULL=y
|
|||||||
# CONFIG_DEV_URANDOM is not set
|
# CONFIG_DEV_URANDOM is not set
|
||||||
# CONFIG_DEV_LOOP is not set
|
# CONFIG_DEV_LOOP is not set
|
||||||
|
|
||||||
|
CONFIG_MMCSD=y
|
||||||
|
CONFIG_MMCSD_NSLOTS=1
|
||||||
|
# CONFIG_MMCSD_READONLY is not set
|
||||||
|
CONFIG_MMCSD_MULTIBLOCK_DISABLE=y
|
||||||
|
# CONFIG_MMCSD_MMCSUPPORT is not set
|
||||||
|
CONFIG_MMCSD_HAVECARDDETECT=y
|
||||||
|
# CONFIG_MMCSD_SPI is not set
|
||||||
|
CONFIG_ARCH_HAVE_SDIO=y
|
||||||
|
CONFIG_ARCH_HAVE_SDIOWAIT_WRCOMPLETE=y
|
||||||
|
CONFIG_MMCSD_SDIO=y
|
||||||
|
|
||||||
#
|
#
|
||||||
# Buffering
|
# Buffering
|
||||||
#
|
#
|
||||||
@@ -609,6 +629,8 @@ CONFIG_ARCH_HAVE_SPI_BITORDER=y
|
|||||||
# CONFIG_SPI_BITBANG is not set
|
# CONFIG_SPI_BITBANG is not set
|
||||||
# CONFIG_I2S is not set
|
# CONFIG_I2S is not set
|
||||||
|
|
||||||
|
CONFIG_SDIO_DMA=y
|
||||||
|
|
||||||
#
|
#
|
||||||
# Timer Driver Support
|
# Timer Driver Support
|
||||||
#
|
#
|
||||||
@@ -709,6 +731,49 @@ CONFIG_USART6_2STOP=0
|
|||||||
# CONFIG_USART6_IFLOWCONTROL is not set
|
# CONFIG_USART6_IFLOWCONTROL is not set
|
||||||
# CONFIG_USART6_OFLOWCONTROL is not set
|
# CONFIG_USART6_OFLOWCONTROL is not set
|
||||||
# CONFIG_USART6_DMA is not set
|
# CONFIG_USART6_DMA is not set
|
||||||
|
CONFIG_USBDEV=y
|
||||||
|
# CONFIG_USBHOST is not set
|
||||||
|
# CONFIG_DRIVERS_WIRELESS is not set
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# USB Device Controller Driver Options
|
||||||
|
#
|
||||||
|
# CONFIG_USBDEV_ISOCHRONOUS is not set
|
||||||
|
# CONFIG_USBDEV_DUALSPEED is not set
|
||||||
|
CONFIG_USBDEV_SELFPOWERED=y
|
||||||
|
# CONFIG_USBDEV_BUSPOWERED is not set
|
||||||
|
CONFIG_USBDEV_MAXPOWER=100
|
||||||
|
# CONFIG_USBDEV_DMA is not set
|
||||||
|
# CONFIG_ARCH_USBDEV_STALLQUEUE is not set
|
||||||
|
# CONFIG_USBDEV_TRACE is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# USB Device Class Driver Options
|
||||||
|
#
|
||||||
|
# CONFIG_USBDEV_COMPOSITE is not set
|
||||||
|
# CONFIG_PL2303 is not set
|
||||||
|
CONFIG_CDCACM=y
|
||||||
|
CONFIG_CDCACM_EP0MAXPACKET=64
|
||||||
|
CONFIG_CDCACM_EPINTIN=1
|
||||||
|
CONFIG_CDCACM_EPINTIN_FSSIZE=64
|
||||||
|
CONFIG_CDCACM_EPINTIN_HSSIZE=64
|
||||||
|
CONFIG_CDCACM_EPBULKOUT=2
|
||||||
|
CONFIG_CDCACM_EPBULKOUT_FSSIZE=64
|
||||||
|
CONFIG_CDCACM_EPBULKOUT_HSSIZE=512
|
||||||
|
CONFIG_CDCACM_EPBULKIN=2
|
||||||
|
CONFIG_CDCACM_EPBULKIN_FSSIZE=64
|
||||||
|
CONFIG_CDCACM_EPBULKIN_HSSIZE=512
|
||||||
|
CONFIG_CDCACM_NRDREQS=4
|
||||||
|
CONFIG_CDCACM_NWRREQS=4
|
||||||
|
CONFIG_CDCACM_BULKIN_REQLEN=96
|
||||||
|
CONFIG_CDCACM_RXBUFSIZE=256
|
||||||
|
CONFIG_CDCACM_TXBUFSIZE=256
|
||||||
|
CONFIG_CDCACM_VENDORID=0x03EB
|
||||||
|
CONFIG_CDCACM_PRODUCTID=0x2044
|
||||||
|
CONFIG_CDCACM_VENDORSTR="NuttX"
|
||||||
|
CONFIG_CDCACM_PRODUCTSTR="CDC/ACM Serial"
|
||||||
|
# CONFIG_USBMSC is not set
|
||||||
# CONFIG_PSEUDOTERM is not set
|
# CONFIG_PSEUDOTERM is not set
|
||||||
# CONFIG_USBDEV is not set
|
# CONFIG_USBDEV is not set
|
||||||
# CONFIG_USBHOST is not set
|
# CONFIG_USBHOST is not set
|
||||||
@@ -752,13 +817,17 @@ CONFIG_SYSLOG_CONSOLE=y
|
|||||||
# CONFIG_DISABLE_MOUNTPOINT is not set
|
# CONFIG_DISABLE_MOUNTPOINT is not set
|
||||||
# CONFIG_FS_AUTOMOUNTER is not set
|
# CONFIG_FS_AUTOMOUNTER is not set
|
||||||
# CONFIG_DISABLE_PSEUDOFS_OPERATIONS is not set
|
# CONFIG_DISABLE_PSEUDOFS_OPERATIONS is not set
|
||||||
# CONFIG_FS_READABLE is not set
|
CONFIG_FS_READABLE=y
|
||||||
# CONFIG_FS_WRITABLE is not set
|
CONFIG_FS_WRITABLE=y
|
||||||
# CONFIG_FS_AIO is not set
|
# CONFIG_FS_AIO is not set
|
||||||
# CONFIG_FS_NAMED_SEMAPHORES is not set
|
# CONFIG_FS_NAMED_SEMAPHORES is not set
|
||||||
CONFIG_FS_MQUEUE_MPATH="/var/mqueue"
|
CONFIG_FS_MQUEUE_MPATH="/var/mqueue"
|
||||||
# CONFIG_FS_RAMMAP is not set
|
# CONFIG_FS_RAMMAP is not set
|
||||||
# CONFIG_FS_FAT is not set
|
CONFIG_FS_FAT=y
|
||||||
|
CONFIG_FAT_LCNAMES=y
|
||||||
|
CONFIG_FAT_LFN=y
|
||||||
|
CONFIG_FAT_MAXFNAME=32
|
||||||
|
CONFIG_FAT_DMAMEMORY=y
|
||||||
# CONFIG_FS_NXFFS is not set
|
# CONFIG_FS_NXFFS is not set
|
||||||
# CONFIG_FS_ROMFS is not set
|
# CONFIG_FS_ROMFS is not set
|
||||||
# CONFIG_FS_TMPFS is not set
|
# CONFIG_FS_TMPFS is not set
|
||||||
@@ -1104,3 +1173,6 @@ CONFIG_READLINE_ECHO=y
|
|||||||
# CONFIG_SYSTEM_UBLOXMODEM is not set
|
# CONFIG_SYSTEM_UBLOXMODEM is not set
|
||||||
# CONFIG_SYSTEM_VI is not set
|
# CONFIG_SYSTEM_VI is not set
|
||||||
# CONFIG_SYSTEM_ZMODEM is not set
|
# CONFIG_SYSTEM_ZMODEM is not set
|
||||||
|
|
||||||
|
CONFIG_SYSTEM_CDCACM=y
|
||||||
|
CONFIG_SYSTEM_CDCACM_DEVMINOR=0
|
||||||
|
|||||||
@@ -36,10 +36,18 @@
|
|||||||
-include $(TOPDIR)/Make.defs
|
-include $(TOPDIR)/Make.defs
|
||||||
|
|
||||||
ASRCS =
|
ASRCS =
|
||||||
CSRCS = stm32_boot.c stm32_spi.c
|
CSRCS = stm32_boot.c stm32_spi.c stm32_dma_alloc.c
|
||||||
|
|
||||||
ifeq ($(CONFIG_LIB_BOARDCTL),y)
|
ifeq ($(CONFIG_LIB_BOARDCTL),y)
|
||||||
CSRCS += stm32_appinitialize.c
|
CSRCS += stm32_appinitialize.c
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
ifeq ($(CONFIG_STM32F7_OTGFS),y)
|
||||||
|
CSRCS += stm32_usb.c
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(CONFIG_STM32F7_SDMMC1),y)
|
||||||
|
CSRCS += stm32_sdmmc.c
|
||||||
|
endif
|
||||||
|
|
||||||
include $(TOPDIR)/configs/Board.mk
|
include $(TOPDIR)/configs/Board.mk
|
||||||
|
|||||||
@@ -93,5 +93,25 @@ int board_app_initialize(void)
|
|||||||
|
|
||||||
stm32_i2ctool();
|
stm32_i2ctool();
|
||||||
|
|
||||||
|
#if defined(CONFIG_FAT_DMAMEMORY)
|
||||||
|
if (stm32_dma_alloc_init() < 0)
|
||||||
|
{
|
||||||
|
syslog(LOG_ERR, "DMA alloc FAILED");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_STM32F7_SDMMC1
|
||||||
|
/* Initialize the SDIO block driver */
|
||||||
|
|
||||||
|
int ret = OK;
|
||||||
|
|
||||||
|
ret = stm32_sdio_initialize();
|
||||||
|
if (ret != OK)
|
||||||
|
{
|
||||||
|
ferr("ERROR: Failed to initialize MMC/SD driver: %d\n", ret);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,117 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
* configs/nucleo-144/stc/stm32_dma_alloc.c
|
||||||
|
*
|
||||||
|
* Copyright (C) 2016 PX4 Development Team. 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 PX4 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 OWNER 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.
|
||||||
|
*
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
/************************************************************************************
|
||||||
|
* Included Files
|
||||||
|
************************************************************************************/
|
||||||
|
|
||||||
|
#include <nuttx/config.h>
|
||||||
|
#include <syslog.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <nuttx/mm/gran.h>
|
||||||
|
|
||||||
|
#include "stm32f746-ws.h"
|
||||||
|
|
||||||
|
#if defined(CONFIG_FAT_DMAMEMORY)
|
||||||
|
|
||||||
|
/************************************************************************************
|
||||||
|
* Pre-processor Definitions
|
||||||
|
************************************************************************************/
|
||||||
|
|
||||||
|
#if !defined(CONFIG_GRAN)
|
||||||
|
# error microSD DMA support requires CONFIG_GRAN
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define BOARD_DMA_ALLOC_POOL_SIZE (8*512)
|
||||||
|
|
||||||
|
/************************************************************************************
|
||||||
|
* Private Data
|
||||||
|
************************************************************************************/
|
||||||
|
|
||||||
|
static GRAN_HANDLE dma_allocator;
|
||||||
|
|
||||||
|
/* The DMA heap size constrains the total number of things that can be
|
||||||
|
* ready to do DMA at a time.
|
||||||
|
*
|
||||||
|
* For example, FAT DMA depends on one sector-sized buffer per filesystem plus
|
||||||
|
* one sector-sized buffer per file.
|
||||||
|
*
|
||||||
|
* We use a fundamental alignment / granule size of 64B; this is sufficient
|
||||||
|
* to guarantee alignment for the largest STM32 DMA burst (16 beats x 32bits).
|
||||||
|
*/
|
||||||
|
|
||||||
|
static uint8_t g_dma_heap[BOARD_DMA_ALLOC_POOL_SIZE] __attribute__((aligned(64)));
|
||||||
|
|
||||||
|
/************************************************************************************
|
||||||
|
* Public Functions
|
||||||
|
************************************************************************************/
|
||||||
|
|
||||||
|
/************************************************************************************
|
||||||
|
* Name: stm32_dma_alloc_init
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* All boards may optionally provide this API to instantiate a pool of
|
||||||
|
* memory for uses with FAST FS DMA operations.
|
||||||
|
*
|
||||||
|
************************************************************************************/
|
||||||
|
|
||||||
|
int stm32_dma_alloc_init(void)
|
||||||
|
{
|
||||||
|
dma_allocator = gran_initialize(g_dma_heap,
|
||||||
|
sizeof(g_dma_heap),
|
||||||
|
7, /* 128B granule - must be > alignment (XXX bug?) */
|
||||||
|
6); /* 64B alignment */
|
||||||
|
|
||||||
|
if (dma_allocator == NULL)
|
||||||
|
{
|
||||||
|
return -ENOMEM;
|
||||||
|
}
|
||||||
|
|
||||||
|
return OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* DMA-aware allocator stubs for the FAT filesystem. */
|
||||||
|
|
||||||
|
void *fat_dma_alloc(size_t size)
|
||||||
|
{
|
||||||
|
return gran_alloc(dma_allocator, size);
|
||||||
|
}
|
||||||
|
|
||||||
|
void fat_dma_free(FAR void *memory, size_t size)
|
||||||
|
{
|
||||||
|
gran_free(dma_allocator, memory, size);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* CONFIG_FAT_DMAMEMORY */
|
||||||
@@ -0,0 +1,171 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
* config/stm32f746-ws/src/stm32_sdmmc.c
|
||||||
|
*
|
||||||
|
* Copyright (C) 2014 Gregory Nutt. All rights reserved.
|
||||||
|
* Author: Gregory Nutt <gnutt@nuttx.org>
|
||||||
|
*
|
||||||
|
* 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 NuttX 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 OWNER 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.
|
||||||
|
*
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Included Files
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#include <nuttx/config.h>
|
||||||
|
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <debug.h>
|
||||||
|
#include <errno.h>
|
||||||
|
|
||||||
|
#include <nuttx/sdio.h>
|
||||||
|
#include <nuttx/mmcsd.h>
|
||||||
|
|
||||||
|
#include "stm32_sdmmc.h"
|
||||||
|
#include "stm32f746-ws.h"
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Pre-processor Definitions
|
||||||
|
****************************************************************************/
|
||||||
|
/* Configuration ************************************************************/
|
||||||
|
|
||||||
|
/* Card detections requires card support and a card detection GPIO */
|
||||||
|
|
||||||
|
#define HAVE_NCD 1
|
||||||
|
#if !defined(HAVE_SDIO) || !defined(GPIO_SDIO_NCD)
|
||||||
|
# undef HAVE_NCD
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Private Data
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
static FAR struct sdio_dev_s *g_sdio_dev;
|
||||||
|
#ifdef HAVE_NCD
|
||||||
|
static bool g_sd_inserted = 0xff; /* Impossible value */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Private Functions
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: stm32_ncd_interrupt
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Card detect interrupt handler.
|
||||||
|
*
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#ifdef HAVE_NCD
|
||||||
|
static int stm32_ncd_interrupt(int irq, FAR void *context)
|
||||||
|
{
|
||||||
|
bool present;
|
||||||
|
|
||||||
|
present = !stm32_gpioread(GPIO_SDIO_NCD);
|
||||||
|
if (present != g_sd_inserted)
|
||||||
|
{
|
||||||
|
sdio_mediachange(g_sdio_dev, present);
|
||||||
|
g_sd_inserted = present;
|
||||||
|
}
|
||||||
|
|
||||||
|
return OK;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Public Functions
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: stm32_sdio_initialize
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Initialize SDIO-based MMC/SD card support
|
||||||
|
*
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
int stm32_sdio_initialize(void)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
#ifdef HAVE_NCD
|
||||||
|
/* Card detect */
|
||||||
|
|
||||||
|
bool cd_status;
|
||||||
|
|
||||||
|
/* Configure the card detect GPIO */
|
||||||
|
|
||||||
|
stm32_configgpio(GPIO_SDIO_NCD);
|
||||||
|
|
||||||
|
/* Register an interrupt handler for the card detect pin */
|
||||||
|
|
||||||
|
stm32_gpiosetevent(GPIO_SDIO_NCD, true, true, true, stm32_ncd_interrupt);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Mount the SDIO-based MMC/SD block driver */
|
||||||
|
/* First, get an instance of the SDIO interface */
|
||||||
|
|
||||||
|
finfo("Initializing SDIO slot %d\n", SDIO_SLOTNO);
|
||||||
|
|
||||||
|
g_sdio_dev = sdio_initialize(SDIO_SLOTNO);
|
||||||
|
if (!g_sdio_dev)
|
||||||
|
{
|
||||||
|
ferr("ERROR: Failed to initialize SDIO slot %d\n", SDIO_SLOTNO);
|
||||||
|
return -ENODEV;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Now bind the SDIO interface to the MMC/SD driver */
|
||||||
|
|
||||||
|
finfo("Bind SDIO to the MMC/SD driver, minor=%d\n", SDIO_MINOR);
|
||||||
|
|
||||||
|
ret = mmcsd_slotinitialize(SDIO_MINOR, g_sdio_dev);
|
||||||
|
if (ret != OK)
|
||||||
|
{
|
||||||
|
ferr("ERROR: Failed to bind SDIO to the MMC/SD driver: %d\n", ret);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
finfo("Successfully bound SDIO to the MMC/SD driver\n");
|
||||||
|
|
||||||
|
#ifdef HAVE_NCD
|
||||||
|
/* Use SD card detect pin to check if a card is g_sd_inserted */
|
||||||
|
|
||||||
|
cd_status = !stm32_gpioread(GPIO_SDIO_NCD);
|
||||||
|
finfo("Card detect : %d\n", cd_status);
|
||||||
|
|
||||||
|
sdio_mediachange(g_sdio_dev, cd_status);
|
||||||
|
#else
|
||||||
|
/* Assume that the SD card is inserted. What choice do we have? */
|
||||||
|
|
||||||
|
sdio_mediachange(g_sdio_dev, true);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return OK;
|
||||||
|
}
|
||||||
@@ -0,0 +1,340 @@
|
|||||||
|
/************************************************************************************
|
||||||
|
* configs/stm32f4discovery/src/stm32_usb.c
|
||||||
|
*
|
||||||
|
* Copyright (C) 2012-2013, 2015 Gregory Nutt. All rights reserved.
|
||||||
|
* Author: Gregory Nutt <gnutt@nuttx.org>
|
||||||
|
*
|
||||||
|
* 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 NuttX 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 OWNER 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.
|
||||||
|
*
|
||||||
|
************************************************************************************/
|
||||||
|
|
||||||
|
/************************************************************************************
|
||||||
|
* Included Files
|
||||||
|
************************************************************************************/
|
||||||
|
|
||||||
|
#include <nuttx/config.h>
|
||||||
|
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include <sched.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <assert.h>
|
||||||
|
#include <debug.h>
|
||||||
|
|
||||||
|
#include <nuttx/usb/usbdev.h>
|
||||||
|
#include <nuttx/usb/usbhost.h>
|
||||||
|
#include <nuttx/usb/usbdev_trace.h>
|
||||||
|
|
||||||
|
#include "up_arch.h"
|
||||||
|
#include "stm32_otg.h"
|
||||||
|
#include "stm32_gpio.h"
|
||||||
|
#include "stm32f746-ws.h"
|
||||||
|
|
||||||
|
#ifdef CONFIG_STM32F7_OTGFS
|
||||||
|
|
||||||
|
/************************************************************************************
|
||||||
|
* Pre-processor Definitions
|
||||||
|
************************************************************************************/
|
||||||
|
|
||||||
|
#if defined(CONFIG_USBDEV) || defined(CONFIG_USBHOST)
|
||||||
|
# define HAVE_USB 1
|
||||||
|
#else
|
||||||
|
# warning "CONFIG_STM32F7_OTGFS is enabled but neither CONFIG_USBDEV nor CONFIG_USBHOST"
|
||||||
|
# undef HAVE_USB
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef CONFIG_STM32F7F4DISCO_USBHOST_PRIO
|
||||||
|
# define CONFIG_STM32F7F4DISCO_USBHOST_PRIO 100
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef CONFIG_STM32F7F4DISCO_USBHOST_STACKSIZE
|
||||||
|
# define CONFIG_STM32F7F4DISCO_USBHOST_STACKSIZE 1024
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/************************************************************************************
|
||||||
|
* Private Data
|
||||||
|
************************************************************************************/
|
||||||
|
|
||||||
|
#ifdef CONFIG_USBHOST
|
||||||
|
static struct usbhost_connection_s *g_usbconn;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/************************************************************************************
|
||||||
|
* Private Functions
|
||||||
|
************************************************************************************/
|
||||||
|
|
||||||
|
/************************************************************************************
|
||||||
|
* Name: usbhost_waiter
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Wait for USB devices to be connected.
|
||||||
|
*
|
||||||
|
************************************************************************************/
|
||||||
|
|
||||||
|
#ifdef CONFIG_USBHOST
|
||||||
|
static int usbhost_waiter(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
struct usbhost_hubport_s *hport;
|
||||||
|
|
||||||
|
uinfo("Running\n");
|
||||||
|
for (;;)
|
||||||
|
{
|
||||||
|
/* Wait for the device to change state */
|
||||||
|
|
||||||
|
DEBUGVERIFY(CONN_WAIT(g_usbconn, &hport));
|
||||||
|
uinfo("%s\n", hport->connected ? "connected" : "disconnected");
|
||||||
|
|
||||||
|
/* Did we just become connected? */
|
||||||
|
|
||||||
|
if (hport->connected)
|
||||||
|
{
|
||||||
|
/* Yes.. enumerate the newly connected device */
|
||||||
|
|
||||||
|
(void)CONN_ENUMERATE(g_usbconn, hport);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Keep the compiler from complaining */
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/************************************************************************************
|
||||||
|
* Public Functions
|
||||||
|
************************************************************************************/
|
||||||
|
|
||||||
|
/************************************************************************************
|
||||||
|
* Name: stm32_usbinitialize
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Called from stm32_usbinitialize very early in inialization to setup USB-related
|
||||||
|
* GPIO pins for the STM32F4Discovery board.
|
||||||
|
*
|
||||||
|
************************************************************************************/
|
||||||
|
|
||||||
|
void stm32_usbinitialize(void)
|
||||||
|
{
|
||||||
|
/* The OTG FS has an internal soft pull-up. No GPIO configuration is required */
|
||||||
|
|
||||||
|
/* Configure the OTG FS VBUS sensing GPIO, Power On, and Overcurrent GPIOs */
|
||||||
|
|
||||||
|
#ifdef CONFIG_STM32F7_OTGFS
|
||||||
|
stm32_configgpio(GPIO_OTGFS_VBUS);
|
||||||
|
|
||||||
|
#ifdef CONFIG_USBHOST
|
||||||
|
stm32_configgpio(GPIO_OTGFS_PWRON);
|
||||||
|
stm32_configgpio(GPIO_OTGFS_OVER);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
/***********************************************************************************
|
||||||
|
* Name: stm32_usbhost_initialize
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Called at application startup time to initialize the USB host functionality.
|
||||||
|
* This function will start a thread that will monitor for device
|
||||||
|
* connection/disconnection events.
|
||||||
|
*
|
||||||
|
***********************************************************************************/
|
||||||
|
|
||||||
|
#ifdef CONFIG_USBHOST
|
||||||
|
int stm32_usbhost_initialize(void)
|
||||||
|
{
|
||||||
|
int pid;
|
||||||
|
#if defined(CONFIG_USBHOST_HUB) || defined(CONFIG_USBHOST_MSC) || \
|
||||||
|
defined(CONFIG_USBHOST_HIDKBD) || defined(CONFIG_USBHOST_HIDMOUSE)
|
||||||
|
int ret;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* First, register all of the class drivers needed to support the drivers
|
||||||
|
* that we care about:
|
||||||
|
*/
|
||||||
|
|
||||||
|
uinfo("Register class drivers\n");
|
||||||
|
|
||||||
|
#ifdef CONFIG_USBHOST_HUB
|
||||||
|
/* Initialize USB hub class support */
|
||||||
|
|
||||||
|
ret = usbhost_hub_initialize();
|
||||||
|
if (ret < 0)
|
||||||
|
{
|
||||||
|
uerr("ERROR: usbhost_hub_initialize failed: %d\n", ret);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_USBHOST_MSC
|
||||||
|
/* Register the USB mass storage class class */
|
||||||
|
|
||||||
|
ret = usbhost_msc_initialize();
|
||||||
|
if (ret != OK)
|
||||||
|
{
|
||||||
|
uerr("ERROR: Failed to register the mass storage class: %d\n", ret);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_USBHOST_CDCACM
|
||||||
|
/* Register the CDC/ACM serial class */
|
||||||
|
|
||||||
|
ret = usbhost_cdcacm_initialize();
|
||||||
|
if (ret != OK)
|
||||||
|
{
|
||||||
|
uerr("ERROR: Failed to register the CDC/ACM serial class: %d\n", ret);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_USBHOST_HIDKBD
|
||||||
|
/* Initialize the HID keyboard class */
|
||||||
|
|
||||||
|
ret = usbhost_kbdinit();
|
||||||
|
if (ret != OK)
|
||||||
|
{
|
||||||
|
uerr("ERROR: Failed to register the HID keyboard class\n");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_USBHOST_HIDMOUSE
|
||||||
|
/* Initialize the HID mouse class */
|
||||||
|
|
||||||
|
ret = usbhost_mouse_init();
|
||||||
|
if (ret != OK)
|
||||||
|
{
|
||||||
|
uerr("ERROR: Failed to register the HID mouse class\n");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Then get an instance of the USB host interface */
|
||||||
|
|
||||||
|
uinfo("Initialize USB host\n");
|
||||||
|
g_usbconn = stm32_otgfshost_initialize(0);
|
||||||
|
if (g_usbconn)
|
||||||
|
{
|
||||||
|
/* Start a thread to handle device connection. */
|
||||||
|
|
||||||
|
uinfo("Start usbhost_waiter\n");
|
||||||
|
|
||||||
|
pid = task_create("usbhost", CONFIG_STM32F7F4DISCO_USBHOST_PRIO,
|
||||||
|
CONFIG_STM32F7F4DISCO_USBHOST_STACKSIZE,
|
||||||
|
(main_t)usbhost_waiter, (FAR char * const *)NULL);
|
||||||
|
return pid < 0 ? -ENOEXEC : OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
return -ENODEV;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/***********************************************************************************
|
||||||
|
* Name: stm32_usbhost_vbusdrive
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Enable/disable driving of VBUS 5V output. This function must be provided be
|
||||||
|
* each platform that implements the STM32 OTG FS host interface
|
||||||
|
*
|
||||||
|
* "On-chip 5 V VBUS generation is not supported. For this reason, a charge pump
|
||||||
|
* or, if 5 V are available on the application board, a basic power switch, must
|
||||||
|
* be added externally to drive the 5 V VBUS line. The external charge pump can
|
||||||
|
* be driven by any GPIO output. When the application decides to power on VBUS
|
||||||
|
* using the chosen GPIO, it must also set the port power bit in the host port
|
||||||
|
* control and status register (PPWR bit in OTG_FS_HPRT).
|
||||||
|
*
|
||||||
|
* "The application uses this field to control power to this port, and the core
|
||||||
|
* clears this bit on an overcurrent condition."
|
||||||
|
*
|
||||||
|
* Input Parameters:
|
||||||
|
* iface - For future growth to handle multiple USB host interface. Should be zero.
|
||||||
|
* enable - true: enable VBUS power; false: disable VBUS power
|
||||||
|
*
|
||||||
|
* Returned Value:
|
||||||
|
* None
|
||||||
|
*
|
||||||
|
***********************************************************************************/
|
||||||
|
|
||||||
|
#ifdef CONFIG_USBHOST
|
||||||
|
void stm32_usbhost_vbusdrive(int iface, bool enable)
|
||||||
|
{
|
||||||
|
DEBUGASSERT(iface == 0);
|
||||||
|
|
||||||
|
if (enable)
|
||||||
|
{
|
||||||
|
/* Enable the Power Switch by driving the enable pin low */
|
||||||
|
|
||||||
|
stm32_gpiowrite(GPIO_OTGFS_PWRON, false);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Disable the Power Switch by driving the enable pin high */
|
||||||
|
|
||||||
|
stm32_gpiowrite(GPIO_OTGFS_PWRON, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/************************************************************************************
|
||||||
|
* Name: stm32_setup_overcurrent
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Setup to receive an interrupt-level callback if an overcurrent condition is
|
||||||
|
* detected.
|
||||||
|
*
|
||||||
|
* Input Parameter:
|
||||||
|
* handler - New overcurrent interrupt handler
|
||||||
|
*
|
||||||
|
* Returned value:
|
||||||
|
* Old overcurrent interrupt handler
|
||||||
|
*
|
||||||
|
************************************************************************************/
|
||||||
|
|
||||||
|
#ifdef CONFIG_USBHOST
|
||||||
|
xcpt_t stm32_setup_overcurrent(xcpt_t handler)
|
||||||
|
{
|
||||||
|
return stm32_gpiosetevent(GPIO_OTGFS_OVER, true, true, true, handler);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/************************************************************************************
|
||||||
|
* Name: stm32_usbsuspend
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Board logic must provide the stm32_usbsuspend logic if the USBDEV driver is
|
||||||
|
* used. This function is called whenever the USB enters or leaves suspend mode.
|
||||||
|
* This is an opportunity for the board logic to shutdown clocks, power, etc.
|
||||||
|
* while the USB is suspended.
|
||||||
|
*
|
||||||
|
************************************************************************************/
|
||||||
|
|
||||||
|
#ifdef CONFIG_USBDEV
|
||||||
|
void stm32_usbsuspend(FAR struct usbdev_s *dev, bool resume)
|
||||||
|
{
|
||||||
|
uinfo("resume: %d\n", resume);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* CONFIG_STM32F7_OTGFS */
|
||||||
@@ -82,6 +82,12 @@
|
|||||||
|
|
||||||
#define GPIO_BTN_USER (GPIO_INPUT | GPIO_FLOAT | GPIO_EXTI | GPIO_PORTC | GPIO_PIN13)
|
#define GPIO_BTN_USER (GPIO_INPUT | GPIO_FLOAT | GPIO_EXTI | GPIO_PORTC | GPIO_PIN13)
|
||||||
|
|
||||||
|
#define GPIO_OTGFS_VBUS (GPIO_INPUT|GPIO_FLOAT|GPIO_SPEED_100MHz|\
|
||||||
|
GPIO_OPENDRAIN|GPIO_PORTA|GPIO_PIN9)
|
||||||
|
|
||||||
|
#define SDIO_SLOTNO 0
|
||||||
|
#define SDIO_MINOR 0
|
||||||
|
|
||||||
/****************************************************************************************************
|
/****************************************************************************************************
|
||||||
* Public data
|
* Public data
|
||||||
****************************************************************************************************/
|
****************************************************************************************************/
|
||||||
@@ -102,5 +108,32 @@
|
|||||||
|
|
||||||
void weak_function stm32_spidev_initialize(void);
|
void weak_function stm32_spidev_initialize(void);
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: stm32_sdio_initialize
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Initialize SDIO-based MMC/SD card support
|
||||||
|
*
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#if !defined(CONFIG_DISABLE_MOUNTPOINT) && defined(CONFIG_STM32F7_SDMMC1)
|
||||||
|
int stm32_sdio_initialize(void);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/************************************************************************************
|
||||||
|
* Name: stm32_dma_alloc_init
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Called to create a FAT DMA allocator
|
||||||
|
*
|
||||||
|
* Returned Value:
|
||||||
|
* 0 on success or -ENOMEM
|
||||||
|
*
|
||||||
|
************************************************************************************/
|
||||||
|
|
||||||
|
#if defined (CONFIG_FAT_DMAMEMORY)
|
||||||
|
int stm32_dma_alloc_init(void);
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif /* __ASSEMBLY__ */
|
#endif /* __ASSEMBLY__ */
|
||||||
#endif /* __CONFIGS_STM32F746_WS_SRC_STM32F746_WS_H */
|
#endif /* __CONFIGS_STM32F746_WS_SRC_STM32F746_WS_H */
|
||||||
|
|||||||
Reference in New Issue
Block a user