Martin Vladic
2 years ago
commit
7cdb441af6
304 changed files with 415647 additions and 0 deletions
@ -0,0 +1,272 @@
|
||||
<?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="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.460065682"> |
||||
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.460065682" moduleId="org.eclipse.cdt.core.settings" name="Debug"> |
||||
<externalSettings/> |
||||
<extensions> |
||||
<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/> |
||||
<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.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 artifactExtension="elf" artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe,org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug" cleanCommand="rm -rf" description="" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.460065682" name="Debug" parent="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug"> |
||||
<folderInfo id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.460065682." name="/" resourcePath=""> |
||||
<toolChain id="com.st.stm32cube.ide.mcu.gnu.managedbuild.toolchain.exe.debug.1828784752" name="MCU ARM GCC" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.toolchain.exe.debug"> |
||||
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_mcu.1527339935" name="MCU" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_mcu" useByScannerDiscovery="true" value="STM32F469NIHx" valueType="string"/> |
||||
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_cpuid.48540806" name="CPU" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_cpuid" useByScannerDiscovery="false" value="0" valueType="string"/> |
||||
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_coreid.25256515" name="Core" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_coreid" useByScannerDiscovery="false" value="0" valueType="string"/> |
||||
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.fpu.540523005" name="Floating-point unit" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.fpu" useByScannerDiscovery="true" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.fpu.value.fpv4-sp-d16" valueType="enumerated"/> |
||||
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.floatabi.1004578780" name="Floating-point ABI" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.floatabi" useByScannerDiscovery="true" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.floatabi.value.hard" valueType="enumerated"/> |
||||
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_board.1428482885" name="Board" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_board" useByScannerDiscovery="false" value="STM32F469I-DISCO" valueType="string"/> |
||||
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.defaults.992922296" name="Defaults" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.defaults" useByScannerDiscovery="false" value="com.st.stm32cube.ide.common.services.build.inputs.revA.1.0.5 || Debug || true || Executable || com.st.stm32cube.ide.mcu.gnu.managedbuild.option.toolchain.value.workspace || STM32F469I-DISCO || 0 || 0 || arm-none-eabi- || ${gnu_tools_for_stm32_compiler_path} || ../FATFS/App | ../USB_HOST/App | ../Middlewares/Third_Party/FreeRTOS/Source/include | ../Drivers/STM32F4xx_HAL_Driver/Inc | ../Drivers/CMSIS/Device/ST/STM32F4xx/Include | ../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 | ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy | ../Middlewares/ST/STM32_USB_Host_Library/Core/Inc | ../Middlewares/ST/STM32_USB_Host_Library/Class/CDC/Inc | ../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM4F | ../Drivers/CMSIS/Include | ../Core/Inc | ../FATFS/Target | ../USB_HOST/Target | ../Middlewares/Third_Party/FatFs/src || || || USE_HAL_DRIVER | STM32F469xx || || Drivers | USB_HOST | Core/Startup | Middlewares | Core | FATFS || || || ${workspace_loc:/${ProjName}/STM32F469NIHX_FLASH.ld} || true || NonSecure || || secure_nsclib.o || || None || " valueType="string"/> |
||||
<targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.targetplatform.940103679" isAbstract="false" osList="all" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.targetplatform"/> |
||||
<builder buildPath="${workspace_loc:/eez-flow-template-stm32f469i-disco}/Debug" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.builder.1381519550" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.builder"/> |
||||
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.1508774904" name="MCU GCC Assembler" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler"> |
||||
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.option.debuglevel.420577669" name="Debug level" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.option.debuglevel" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.option.debuglevel.value.g3" valueType="enumerated"/> |
||||
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.option.definedsymbols.2090615990" name="Define symbols (-D)" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.option.definedsymbols" valueType="definedSymbols"> |
||||
<listOptionValue builtIn="false" value="DEBUG"/> |
||||
</option> |
||||
<inputType id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.input.1062565987" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.input"/> |
||||
</tool> |
||||
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.312266454" name="MCU GCC Compiler" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler"> |
||||
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.debuglevel.1695697071" name="Debug level" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.debuglevel" useByScannerDiscovery="false" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.debuglevel.value.g3" valueType="enumerated"/> |
||||
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.optimization.level.693135146" name="Optimization level" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.optimization.level" useByScannerDiscovery="false"/> |
||||
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.definedsymbols.2052235859" name="Define symbols (-D)" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.definedsymbols" useByScannerDiscovery="false" valueType="definedSymbols"> |
||||
<listOptionValue builtIn="false" value="DEBUG"/> |
||||
<listOptionValue builtIn="false" value="USE_HAL_DRIVER"/> |
||||
<listOptionValue builtIn="false" value="STM32F469xx"/> |
||||
<listOptionValue builtIn="false" value="USE_STM32469I_DISCO_REVB"/> |
||||
<listOptionValue builtIn="false" value="EEZ_PLATFORM_STM32"/> |
||||
<listOptionValue builtIn="false" value="LZ4_FORCE_MEMORY_ACCESS=0"/> |
||||
</option> |
||||
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.includepaths.123567366" name="Include paths (-I)" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.includepaths" useByScannerDiscovery="false" valueType="includePath"> |
||||
<listOptionValue builtIn="false" value="../Core/Inc"/> |
||||
<listOptionValue builtIn="false" value="../FATFS/Target"/> |
||||
<listOptionValue builtIn="false" value="../FATFS/App"/> |
||||
<listOptionValue builtIn="false" value="../USB_HOST/App"/> |
||||
<listOptionValue builtIn="false" value="../USB_HOST/Target"/> |
||||
<listOptionValue builtIn="false" value="../Drivers/STM32F4xx_HAL_Driver/Inc"/> |
||||
<listOptionValue builtIn="false" value="../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy"/> |
||||
<listOptionValue builtIn="false" value="../Middlewares/Third_Party/FreeRTOS/Source/include"/> |
||||
<listOptionValue builtIn="false" value="../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM4F"/> |
||||
<listOptionValue builtIn="false" value="../Middlewares/Third_Party/FatFs/src"/> |
||||
<listOptionValue builtIn="false" value="../Middlewares/ST/STM32_USB_Host_Library/Core/Inc"/> |
||||
<listOptionValue builtIn="false" value="../Middlewares/ST/STM32_USB_Host_Library/Class/CDC/Inc"/> |
||||
<listOptionValue builtIn="false" value="../Drivers/CMSIS/Device/ST/STM32F4xx/Include"/> |
||||
<listOptionValue builtIn="false" value="../Drivers/CMSIS/Include"/> |
||||
<listOptionValue builtIn="false" value="../Drivers/BSP/STM32469I-Discovery"/> |
||||
<listOptionValue builtIn="false" value="../Drivers/BSP/Components/Common"/> |
||||
<listOptionValue builtIn="false" value="../Utilities/CPU"/> |
||||
<listOptionValue builtIn="false" value="../Utilities/Log"/> |
||||
<listOptionValue builtIn="false" value="../Src/conf"/> |
||||
<listOptionValue builtIn="false" value="../Middlewares"/> |
||||
<listOptionValue builtIn="false" value="../Middlewares/eez/libs/agg"/> |
||||
<listOptionValue builtIn="false" value="../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2"/> |
||||
</option> |
||||
<inputType id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.input.c.801324572" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.input.c"/> |
||||
</tool> |
||||
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.1825023861" name="MCU G++ Compiler" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler"> |
||||
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.debuglevel.340047260" name="Debug level" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.debuglevel" useByScannerDiscovery="false" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.debuglevel.value.g3" valueType="enumerated"/> |
||||
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.optimization.level.1337055648" name="Optimization level" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.optimization.level" useByScannerDiscovery="false"/> |
||||
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.definedsymbols.1035648377" name="Define symbols (-D)" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.definedsymbols" useByScannerDiscovery="false" valueType="definedSymbols"> |
||||
<listOptionValue builtIn="false" value="DEBUG"/> |
||||
<listOptionValue builtIn="false" value="USE_HAL_DRIVER"/> |
||||
<listOptionValue builtIn="false" value="STM32F469xx"/> |
||||
<listOptionValue builtIn="false" value="USE_STM32469I_DISCO_REVB"/> |
||||
<listOptionValue builtIn="false" value="EEZ_PLATFORM_STM32"/> |
||||
<listOptionValue builtIn="false" value="LZ4_FORCE_MEMORY_ACCESS=0"/> |
||||
</option> |
||||
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.includepaths.1521980530" name="Include paths (-I)" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.includepaths" useByScannerDiscovery="false" valueType="includePath"> |
||||
<listOptionValue builtIn="false" value="../Core/Inc"/> |
||||
<listOptionValue builtIn="false" value="../FATFS/Target"/> |
||||
<listOptionValue builtIn="false" value="../FATFS/App"/> |
||||
<listOptionValue builtIn="false" value="../USB_HOST/App"/> |
||||
<listOptionValue builtIn="false" value="../USB_HOST/Target"/> |
||||
<listOptionValue builtIn="false" value="../Drivers/STM32F4xx_HAL_Driver/Inc"/> |
||||
<listOptionValue builtIn="false" value="../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy"/> |
||||
<listOptionValue builtIn="false" value="../Middlewares/Third_Party/FreeRTOS/Source/include"/> |
||||
<listOptionValue builtIn="false" value="../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM4F"/> |
||||
<listOptionValue builtIn="false" value="../Middlewares/Third_Party/FatFs/src"/> |
||||
<listOptionValue builtIn="false" value="../Middlewares/ST/STM32_USB_Host_Library/Core/Inc"/> |
||||
<listOptionValue builtIn="false" value="../Middlewares/ST/STM32_USB_Host_Library/Class/CDC/Inc"/> |
||||
<listOptionValue builtIn="false" value="../Drivers/CMSIS/Device/ST/STM32F4xx/Include"/> |
||||
<listOptionValue builtIn="false" value="../Drivers/CMSIS/Include"/> |
||||
<listOptionValue builtIn="false" value="../Drivers/BSP/STM32469I-Discovery"/> |
||||
<listOptionValue builtIn="false" value="../Drivers/BSP/Components/Common"/> |
||||
<listOptionValue builtIn="false" value="../Utilities/CPU"/> |
||||
<listOptionValue builtIn="false" value="../Utilities/Log"/> |
||||
<listOptionValue builtIn="false" value="../Src/conf"/> |
||||
<listOptionValue builtIn="false" value="../Middlewares"/> |
||||
<listOptionValue builtIn="false" value="../Middlewares/eez/libs/agg"/> |
||||
<listOptionValue builtIn="false" value="../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2"/> |
||||
</option> |
||||
<inputType id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.input.cpp.1771274810" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.input.cpp"/> |
||||
</tool> |
||||
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker.1885412948" name="MCU GCC Linker" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker"/> |
||||
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.linker.1261659320" name="MCU G++ Linker" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.linker"> |
||||
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.linker.option.script.54722534" name="Linker Script (-T)" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.linker.option.script" value="${workspace_loc:/${ProjName}/STM32F469NIHX_FLASH.ld}" valueType="string"/> |
||||
<inputType id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.linker.input.67527135" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.linker.input"> |
||||
<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/> |
||||
<additionalInput kind="additionalinput" paths="$(LIBS)"/> |
||||
</inputType> |
||||
</tool> |
||||
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.archiver.435637738" name="MCU GCC Archiver" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.archiver"/> |
||||
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.size.307560726" name="MCU Size" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.size"/> |
||||
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objdump.listfile.552578781" name="MCU Output Converter list file" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objdump.listfile"/> |
||||
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.hex.723982269" name="MCU Output Converter Hex" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.hex"/> |
||||
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.binary.1744086731" name="MCU Output Converter Binary" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.binary"/> |
||||
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.verilog.199907884" name="MCU Output Converter Verilog" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.verilog"/> |
||||
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.srec.1615684565" name="MCU Output Converter Motorola S-rec" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.srec"/> |
||||
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.symbolsrec.913675658" name="MCU Output Converter Motorola S-rec with symbols" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.symbolsrec"/> |
||||
</toolChain> |
||||
</folderInfo> |
||||
<sourceEntries> |
||||
<entry excluding="eez/libs/libscpi|eez/fs/simulator|eez/platform/simulator" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="Middlewares"/> |
||||
<entry excluding="Fonts|Log|CPU" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="Utilities"/> |
||||
<entry excluding="Src/my_system_stm32f4xx.c|Src/my_stm32f4xx_it.c|Src/my_stm32f4xx_hal_msp.c" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="Core"/> |
||||
<entry excluding="BSP/STM32469I-Discovery/stm32469i_discovery_sd.c|BSP/STM32469I-Discovery/stm32469i_discovery_audio.c" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="Drivers"/> |
||||
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="USB_HOST"/> |
||||
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="FATFS"/> |
||||
</sourceEntries> |
||||
</configuration> |
||||
</storageModule> |
||||
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/> |
||||
</cconfiguration> |
||||
<cconfiguration id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.release.22838031"> |
||||
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.release.22838031" moduleId="org.eclipse.cdt.core.settings" name="Release"> |
||||
<externalSettings/> |
||||
<extensions> |
||||
<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/> |
||||
<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.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 artifactExtension="elf" artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe,org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.release" cleanCommand="rm -rf" description="" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.release.22838031" name="Release" parent="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.release"> |
||||
<folderInfo id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.release.22838031." name="/" resourcePath=""> |
||||
<toolChain id="com.st.stm32cube.ide.mcu.gnu.managedbuild.toolchain.exe.release.1823191174" name="MCU ARM GCC" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.toolchain.exe.release"> |
||||
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_mcu.699869768" name="MCU" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_mcu" useByScannerDiscovery="true" value="STM32F469NIHx" valueType="string"/> |
||||
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_cpuid.1461406888" name="CPU" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_cpuid" useByScannerDiscovery="false" value="0" valueType="string"/> |
||||
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_coreid.2077453065" name="Core" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_coreid" useByScannerDiscovery="false" value="0" valueType="string"/> |
||||
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.fpu.1667934266" name="Floating-point unit" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.fpu" useByScannerDiscovery="true" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.fpu.value.fpv4-sp-d16" valueType="enumerated"/> |
||||
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.floatabi.660557340" name="Floating-point ABI" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.floatabi" useByScannerDiscovery="true" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.floatabi.value.hard" valueType="enumerated"/> |
||||
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_board.1017528934" name="Board" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_board" useByScannerDiscovery="false" value="STM32F469I-DISCO" valueType="string"/> |
||||
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.defaults.632082707" name="Defaults" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.defaults" useByScannerDiscovery="false" value="com.st.stm32cube.ide.common.services.build.inputs.revA.1.0.5 || Release || false || Executable || com.st.stm32cube.ide.mcu.gnu.managedbuild.option.toolchain.value.workspace || STM32F469I-DISCO || 0 || 0 || arm-none-eabi- || ${gnu_tools_for_stm32_compiler_path} || ../FATFS/App | ../USB_HOST/App | ../Middlewares/Third_Party/FreeRTOS/Source/include | ../Drivers/STM32F4xx_HAL_Driver/Inc | ../Drivers/CMSIS/Device/ST/STM32F4xx/Include | ../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 | ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy | ../Middlewares/ST/STM32_USB_Host_Library/Core/Inc | ../Middlewares/ST/STM32_USB_Host_Library/Class/CDC/Inc | ../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM4F | ../Drivers/CMSIS/Include | ../Core/Inc | ../FATFS/Target | ../USB_HOST/Target | ../Middlewares/Third_Party/FatFs/src || || || USE_HAL_DRIVER | STM32F469xx || || Drivers | USB_HOST | Core/Startup | Middlewares | Core | FATFS || || || ${workspace_loc:/${ProjName}/STM32F469NIHX_FLASH.ld} || true || NonSecure || || secure_nsclib.o || || None || " valueType="string"/> |
||||
<targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.targetplatform.1663973541" isAbstract="false" osList="all" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.targetplatform"/> |
||||
<builder buildPath="${workspace_loc:/eez-flow-template-stm32f469i-disco}/Release" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.builder.1906799016" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.builder"/> |
||||
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.1798704718" name="MCU GCC Assembler" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler"> |
||||
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.option.debuglevel.1965537707" name="Debug level" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.option.debuglevel" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.option.debuglevel.value.g0" valueType="enumerated"/> |
||||
<inputType id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.input.1929343366" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.input"/> |
||||
</tool> |
||||
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.1986339965" name="MCU GCC Compiler" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler"> |
||||
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.debuglevel.1136736331" name="Debug level" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.debuglevel" useByScannerDiscovery="false" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.debuglevel.value.g0" valueType="enumerated"/> |
||||
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.optimization.level.1725200503" name="Optimization level" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.optimization.level" useByScannerDiscovery="false" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.optimization.level.value.os" valueType="enumerated"/> |
||||
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.definedsymbols.27956814" name="Define symbols (-D)" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.definedsymbols" useByScannerDiscovery="false" valueType="definedSymbols"> |
||||
<listOptionValue builtIn="false" value="USE_HAL_DRIVER"/> |
||||
<listOptionValue builtIn="false" value="STM32F469xx"/> |
||||
</option> |
||||
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.includepaths.249851950" name="Include paths (-I)" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.includepaths" useByScannerDiscovery="false" valueType="includePath"> |
||||
<listOptionValue builtIn="false" value="../Core/Inc"/> |
||||
<listOptionValue builtIn="false" value="../FATFS/Target"/> |
||||
<listOptionValue builtIn="false" value="../FATFS/App"/> |
||||
<listOptionValue builtIn="false" value="../USB_HOST/App"/> |
||||
<listOptionValue builtIn="false" value="../USB_HOST/Target"/> |
||||
<listOptionValue builtIn="false" value="../Drivers/STM32F4xx_HAL_Driver/Inc"/> |
||||
<listOptionValue builtIn="false" value="../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy"/> |
||||
<listOptionValue builtIn="false" value="../Middlewares/Third_Party/FreeRTOS/Source/include"/> |
||||
<listOptionValue builtIn="false" value="../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM4F"/> |
||||
<listOptionValue builtIn="false" value="../Middlewares/Third_Party/FatFs/src"/> |
||||
<listOptionValue builtIn="false" value="../Middlewares/ST/STM32_USB_Host_Library/Core/Inc"/> |
||||
<listOptionValue builtIn="false" value="../Middlewares/ST/STM32_USB_Host_Library/Class/CDC/Inc"/> |
||||
<listOptionValue builtIn="false" value="../Drivers/CMSIS/Device/ST/STM32F4xx/Include"/> |
||||
<listOptionValue builtIn="false" value="../Drivers/CMSIS/Include"/> |
||||
<listOptionValue builtIn="false" value="../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2"/> |
||||
</option> |
||||
<inputType id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.input.c.634427817" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.input.c"/> |
||||
</tool> |
||||
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.454175356" name="MCU G++ Compiler" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler"> |
||||
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.debuglevel.1060330445" name="Debug level" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.debuglevel" useByScannerDiscovery="false" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.debuglevel.value.g0" valueType="enumerated"/> |
||||
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.optimization.level.1201803955" name="Optimization level" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.optimization.level" useByScannerDiscovery="false" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.optimization.level.value.os" valueType="enumerated"/> |
||||
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.definedsymbols.360428959" name="Define symbols (-D)" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.definedsymbols" useByScannerDiscovery="false" valueType="definedSymbols"> |
||||
<listOptionValue builtIn="false" value="USE_HAL_DRIVER"/> |
||||
<listOptionValue builtIn="false" value="STM32F469xx"/> |
||||
</option> |
||||
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.includepaths.1005896393" name="Include paths (-I)" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.includepaths" useByScannerDiscovery="false" valueType="includePath"> |
||||
<listOptionValue builtIn="false" value="../Core/Inc"/> |
||||
<listOptionValue builtIn="false" value="../FATFS/Target"/> |
||||
<listOptionValue builtIn="false" value="../FATFS/App"/> |
||||
<listOptionValue builtIn="false" value="../USB_HOST/App"/> |
||||
<listOptionValue builtIn="false" value="../USB_HOST/Target"/> |
||||
<listOptionValue builtIn="false" value="../Drivers/STM32F4xx_HAL_Driver/Inc"/> |
||||
<listOptionValue builtIn="false" value="../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy"/> |
||||
<listOptionValue builtIn="false" value="../Middlewares/Third_Party/FreeRTOS/Source/include"/> |
||||
<listOptionValue builtIn="false" value="../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM4F"/> |
||||
<listOptionValue builtIn="false" value="../Middlewares/Third_Party/FatFs/src"/> |
||||
<listOptionValue builtIn="false" value="../Middlewares/ST/STM32_USB_Host_Library/Core/Inc"/> |
||||
<listOptionValue builtIn="false" value="../Middlewares/ST/STM32_USB_Host_Library/Class/CDC/Inc"/> |
||||
<listOptionValue builtIn="false" value="../Drivers/CMSIS/Device/ST/STM32F4xx/Include"/> |
||||
<listOptionValue builtIn="false" value="../Drivers/CMSIS/Include"/> |
||||
<listOptionValue builtIn="false" value="../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2"/> |
||||
</option> |
||||
<inputType id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.input.cpp.135319302" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.input.cpp"/> |
||||
</tool> |
||||
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker.728531574" name="MCU GCC Linker" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker"/> |
||||
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.linker.1378427683" name="MCU G++ Linker" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.linker"> |
||||
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.linker.option.script.811658304" name="Linker Script (-T)" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.linker.option.script" value="${workspace_loc:/${ProjName}/STM32F469NIHX_FLASH.ld}" valueType="string"/> |
||||
<inputType id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.linker.input.1312553728" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.linker.input"> |
||||
<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/> |
||||
<additionalInput kind="additionalinput" paths="$(LIBS)"/> |
||||
</inputType> |
||||
</tool> |
||||
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.archiver.221472056" name="MCU GCC Archiver" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.archiver"/> |
||||
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.size.430461177" name="MCU Size" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.size"/> |
||||
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objdump.listfile.1061010777" name="MCU Output Converter list file" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objdump.listfile"/> |
||||
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.hex.306385884" name="MCU Output Converter Hex" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.hex"/> |
||||
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.binary.1715292840" name="MCU Output Converter Binary" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.binary"/> |
||||
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.verilog.1577549252" name="MCU Output Converter Verilog" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.verilog"/> |
||||
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.srec.1364354635" name="MCU Output Converter Motorola S-rec" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.srec"/> |
||||
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.symbolsrec.817959020" name="MCU Output Converter Motorola S-rec with symbols" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.symbolsrec"/> |
||||
</toolChain> |
||||
</folderInfo> |
||||
<sourceEntries> |
||||
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="USB_HOST"/> |
||||
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="Core"/> |
||||
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="FATFS"/> |
||||
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="Middlewares"/> |
||||
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="Drivers"/> |
||||
</sourceEntries> |
||||
</configuration> |
||||
</storageModule> |
||||
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/> |
||||
</cconfiguration> |
||||
</storageModule> |
||||
<storageModule moduleId="org.eclipse.cdt.make.core.buildtargets"/> |
||||
<storageModule moduleId="org.eclipse.cdt.core.pathentry"/> |
||||
<storageModule moduleId="cdtBuildSystem" version="4.0.0"> |
||||
<project id="eez-flow-template-stm32f469i-disco.null.560981908" name="eez-flow-template-stm32f469i-disco"/> |
||||
</storageModule> |
||||
<storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/> |
||||
<storageModule moduleId="scannerConfiguration"> |
||||
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/> |
||||
<scannerConfigBuildInfo instanceId="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.460065682;com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.460065682.;com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.1825023861;com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.input.cpp.1771274810"> |
||||
<autodiscovery enabled="false" problemReportingEnabled="true" selectedProfileId=""/> |
||||
</scannerConfigBuildInfo> |
||||
<scannerConfigBuildInfo instanceId="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.release.22838031;com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.release.22838031.;com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.1986339965;com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.input.c.634427817"> |
||||
<autodiscovery enabled="false" problemReportingEnabled="true" selectedProfileId=""/> |
||||
</scannerConfigBuildInfo> |
||||
<scannerConfigBuildInfo instanceId="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.release.22838031;com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.release.22838031.;com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.454175356;com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.input.cpp.135319302"> |
||||
<autodiscovery enabled="false" problemReportingEnabled="true" selectedProfileId=""/> |
||||
</scannerConfigBuildInfo> |
||||
<scannerConfigBuildInfo instanceId="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.460065682;com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.460065682.;com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.312266454;com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.input.c.801324572"> |
||||
<autodiscovery enabled="false" problemReportingEnabled="true" selectedProfileId=""/> |
||||
</scannerConfigBuildInfo> |
||||
</storageModule> |
||||
</cproject> |
@ -0,0 +1,16 @@
|
||||
build |
||||
.vscode/launch.json |
||||
.vscode/.vscode/c_cpp_properties.json |
||||
.vscode/launch.json |
||||
|
||||
.vscode/*.log |
||||
nul.d |
||||
|
||||
Debug |
||||
Release |
||||
|
||||
*.eez-project-ui-state |
||||
|
||||
org.eclipse.cdt.core.prefs |
||||
|
||||
sync.ffs_db |
@ -0,0 +1,3 @@
|
||||
[submodule "Middlewares/eez"] |
||||
path = Middlewares/eez |
||||
url = https://github.com/eez-open/eez-framework |
File diff suppressed because one or more lines are too long
@ -0,0 +1,33 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<projectDescription> |
||||
<name>eez-flow-template-stm32f469i-disco</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>com.st.stm32cube.ide.mcu.MCUProjectNature</nature> |
||||
<nature>com.st.stm32cube.ide.mcu.MCUCubeProjectNature</nature> |
||||
<nature>org.eclipse.cdt.core.cnature</nature> |
||||
<nature>org.eclipse.cdt.core.ccnature</nature> |
||||
<nature>com.st.stm32cube.ide.mcu.MCUCubeIdeServicesRevAev2ProjectNature</nature> |
||||
<nature>com.st.stm32cube.ide.mcu.MCUAdvancedStructureProjectNature</nature> |
||||
<nature>com.st.stm32cube.ide.mcu.MCUSingleCpuProjectNature</nature> |
||||
<nature>com.st.stm32cube.ide.mcu.MCURootProjectNature</nature> |
||||
<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature> |
||||
<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature> |
||||
</natures> |
||||
</projectDescription> |
@ -0,0 +1,25 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?> |
||||
<project> |
||||
<configuration id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.460065682" name="Debug"> |
||||
<extension point="org.eclipse.cdt.core.LanguageSettingsProvider"> |
||||
<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/> |
||||
<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/> |
||||
<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/> |
||||
<provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="-404192909888548527" id="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="MCU ARM GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD "${INPUTS}"" prefer-non-shared="true"> |
||||
<language-scope id="org.eclipse.cdt.core.gcc"/> |
||||
<language-scope id="org.eclipse.cdt.core.g++"/> |
||||
</provider> |
||||
</extension> |
||||
</configuration> |
||||
<configuration id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.release.22838031" name="Release"> |
||||
<extension point="org.eclipse.cdt.core.LanguageSettingsProvider"> |
||||
<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/> |
||||
<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/> |
||||
<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/> |
||||
<provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="-404192909888548527" id="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="MCU ARM GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD "${INPUTS}"" prefer-non-shared="true"> |
||||
<language-scope id="org.eclipse.cdt.core.gcc"/> |
||||
<language-scope id="org.eclipse.cdt.core.g++"/> |
||||
</provider> |
||||
</extension> |
||||
</configuration> |
||||
</project> |
@ -0,0 +1,5 @@
|
||||
635E684B79701B039C64EA45C3F84D30=BF3467EB2F6A6B48939123F7923F5F8B |
||||
66BE74F758C12D739921AEA421D593D3=1 |
||||
8DF89ED150041C4CBC7CB9A9CAA90856=A1FFDF8FD2CA4383961428405A05528F |
||||
DC22A860405A8BF2F2C095E5B6529F12=A1FFDF8FD2CA4383961428405A05528F |
||||
eclipse.preferences.version=1 |
@ -0,0 +1,3 @@
|
||||
{ |
||||
"makefile.extensionOutputFolder": "./.vscode" |
||||
} |
@ -0,0 +1,176 @@
|
||||
/* USER CODE BEGIN Header */ |
||||
/*
|
||||
* FreeRTOS Kernel V10.3.1 |
||||
* Portion Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved. |
||||
* Portion Copyright (C) 2019 StMicroelectronics, Inc. All Rights Reserved. |
||||
* |
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of |
||||
* this software and associated documentation files (the "Software"), to deal in |
||||
* the Software without restriction, including without limitation the rights to |
||||
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of |
||||
* the Software, and to permit persons to whom the Software is furnished to do so, |
||||
* subject to the following conditions: |
||||
* |
||||
* The above copyright notice and this permission notice shall be included in all |
||||
* copies or substantial portions of the Software. |
||||
* |
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS |
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR |
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER |
||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN |
||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
||||
* |
||||
* http://www.FreeRTOS.org
|
||||
* http://aws.amazon.com/freertos
|
||||
* |
||||
* 1 tab == 4 spaces! |
||||
*/ |
||||
/* USER CODE END Header */ |
||||
|
||||
#ifndef FREERTOS_CONFIG_H |
||||
#define FREERTOS_CONFIG_H |
||||
|
||||
/*-----------------------------------------------------------
|
||||
* Application specific definitions. |
||||
* |
||||
* These definitions should be adjusted for your particular hardware and |
||||
* application requirements. |
||||
* |
||||
* These parameters and more are described within the 'configuration' section of the |
||||
* FreeRTOS API documentation available on the FreeRTOS.org web site. |
||||
* |
||||
* See http://www.freertos.org/a00110.html
|
||||
*----------------------------------------------------------*/ |
||||
|
||||
/* USER CODE BEGIN Includes */ |
||||
/* Section where include file can be added */ |
||||
/* USER CODE END Includes */ |
||||
|
||||
/* Ensure definitions are only used by the compiler, and not by the assembler. */ |
||||
#if defined(__ICCARM__) || defined(__CC_ARM) || defined(__GNUC__) |
||||
#include <stdint.h> |
||||
extern uint32_t SystemCoreClock; |
||||
#endif |
||||
#ifndef CMSIS_device_header |
||||
#define CMSIS_device_header "stm32f4xx.h" |
||||
#endif /* CMSIS_device_header */ |
||||
|
||||
#define configENABLE_FPU 0 |
||||
#define configENABLE_MPU 0 |
||||
|
||||
#define configUSE_PREEMPTION 1 |
||||
#define configSUPPORT_STATIC_ALLOCATION 1 |
||||
#define configSUPPORT_DYNAMIC_ALLOCATION 1 |
||||
#define configUSE_IDLE_HOOK 1 |
||||
#define configUSE_TICK_HOOK 0 |
||||
#define configCPU_CLOCK_HZ ( SystemCoreClock ) |
||||
#define configTICK_RATE_HZ ((TickType_t)1000) |
||||
#define configMAX_PRIORITIES ( 56 ) |
||||
#define configMINIMAL_STACK_SIZE ((uint16_t)128) |
||||
#define configTOTAL_HEAP_SIZE ((size_t)32768) |
||||
#define configMAX_TASK_NAME_LEN ( 16 ) |
||||
#define configUSE_TRACE_FACILITY 1 |
||||
#define configUSE_16_BIT_TICKS 0 |
||||
#define configUSE_MUTEXES 1 |
||||
#define configQUEUE_REGISTRY_SIZE 8 |
||||
#define configCHECK_FOR_STACK_OVERFLOW 2 |
||||
#define configUSE_RECURSIVE_MUTEXES 1 |
||||
#define configUSE_MALLOC_FAILED_HOOK 1 |
||||
#define configUSE_APPLICATION_TASK_TAG 1 |
||||
#define configUSE_COUNTING_SEMAPHORES 1 |
||||
#define configUSE_PORT_OPTIMISED_TASK_SELECTION 0 |
||||
/* USER CODE BEGIN MESSAGE_BUFFER_LENGTH_TYPE */ |
||||
/* Defaults to size_t for backward compatibility, but can be changed
|
||||
if lengths will always be less than the number of bytes in a size_t. */ |
||||
#define configMESSAGE_BUFFER_LENGTH_TYPE size_t |
||||
/* USER CODE END MESSAGE_BUFFER_LENGTH_TYPE */ |
||||
|
||||
/* Co-routine definitions. */ |
||||
#define configUSE_CO_ROUTINES 0 |
||||
#define configMAX_CO_ROUTINE_PRIORITIES ( 2 ) |
||||
|
||||
/* Software timer definitions. */ |
||||
#define configUSE_TIMERS 1 |
||||
#define configTIMER_TASK_PRIORITY ( 2 ) |
||||
#define configTIMER_QUEUE_LENGTH 10 |
||||
#define configTIMER_TASK_STACK_DEPTH 256 |
||||
|
||||
/* The following flag must be enabled only when using newlib */ |
||||
#define configUSE_NEWLIB_REENTRANT 1 |
||||
|
||||
/* CMSIS-RTOS V2 flags */ |
||||
#define configUSE_OS2_THREAD_SUSPEND_RESUME 1 |
||||
#define configUSE_OS2_THREAD_ENUMERATE 1 |
||||
#define configUSE_OS2_EVENTFLAGS_FROM_ISR 1 |
||||
#define configUSE_OS2_THREAD_FLAGS 1 |
||||
#define configUSE_OS2_TIMER 1 |
||||
#define configUSE_OS2_MUTEX 1 |
||||
|
||||
/* Set the following definitions to 1 to include the API function, or zero
|
||||
to exclude the API function. */ |
||||
#define INCLUDE_vTaskPrioritySet 1 |
||||
#define INCLUDE_uxTaskPriorityGet 1 |
||||
#define INCLUDE_vTaskDelete 1 |
||||
#define INCLUDE_vTaskCleanUpResources 0 |
||||
#define INCLUDE_vTaskSuspend 1 |
||||
#define INCLUDE_vTaskDelayUntil 1 |
||||
#define INCLUDE_vTaskDelay 1 |
||||
#define INCLUDE_xTaskGetSchedulerState 1 |
||||
#define INCLUDE_xTimerPendFunctionCall 1 |
||||
#define INCLUDE_xQueueGetMutexHolder 1 |
||||
#define INCLUDE_uxTaskGetStackHighWaterMark 1 |
||||
#define INCLUDE_xTaskGetCurrentTaskHandle 1 |
||||
#define INCLUDE_eTaskGetState 1 |
||||
|
||||
/*
|
||||
* The CMSIS-RTOS V2 FreeRTOS wrapper is dependent on the heap implementation used |
||||
* by the application thus the correct define need to be enabled below |
||||
*/ |
||||
#define USE_FreeRTOS_HEAP_4 |
||||
|
||||
/* Cortex-M specific definitions. */ |
||||
#ifdef __NVIC_PRIO_BITS |
||||
/* __BVIC_PRIO_BITS will be specified when CMSIS is being used. */ |
||||
#define configPRIO_BITS __NVIC_PRIO_BITS |
||||
#else |
||||
#define configPRIO_BITS 4 |
||||
#endif |
||||
|
||||
/* The lowest interrupt priority that can be used in a call to a "set priority"
|
||||
function. */ |
||||
#define configLIBRARY_LOWEST_INTERRUPT_PRIORITY 15 |
||||
|
||||
/* The highest interrupt priority that can be used by any interrupt service
|
||||
routine that makes calls to interrupt safe FreeRTOS API functions. DO NOT CALL |
||||
INTERRUPT SAFE FREERTOS API FUNCTIONS FROM ANY INTERRUPT THAT HAS A HIGHER |
||||
PRIORITY THAN THIS! (higher priorities are lower numeric values. */ |
||||
#define configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY 5 |
||||
|
||||
/* Interrupt priorities used by the kernel port layer itself. These are generic
|
||||
to all Cortex-M ports, and do not rely on any particular library functions. */ |
||||
#define configKERNEL_INTERRUPT_PRIORITY ( configLIBRARY_LOWEST_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) ) |
||||
/* !!!! configMAX_SYSCALL_INTERRUPT_PRIORITY must not be set to zero !!!!
|
||||
See http://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html. */
|
||||
#define configMAX_SYSCALL_INTERRUPT_PRIORITY ( configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) ) |
||||
|
||||
/* Normal assert() semantics without relying on the provision of an assert.h
|
||||
header file. */ |
||||
/* USER CODE BEGIN 1 */ |
||||
#define configASSERT( x ) if ((x) == 0) {taskDISABLE_INTERRUPTS(); for( ;; );} |
||||
/* USER CODE END 1 */ |
||||
|
||||
/* Definitions that map the FreeRTOS port interrupt handlers to their CMSIS
|
||||
standard names. */ |
||||
#define vPortSVCHandler SVC_Handler |
||||
#define xPortPendSVHandler PendSV_Handler |
||||
|
||||
/* IMPORTANT: After 10.3.1 update, Systick_Handler comes from NVIC (if SYS timebase = systick), otherwise from cmsis_os2.c */ |
||||
|
||||
#define USE_CUSTOM_SYSTICK_HANDLER_IMPLEMENTATION 0 |
||||
|
||||
/* USER CODE BEGIN Defines */ |
||||
/* Section where parameter definitions can be added (for instance, to override default ones in FreeRTOS.h) */ |
||||
/* USER CODE END Defines */ |
||||
|
||||
#endif /* FREERTOS_CONFIG_H */ |
@ -0,0 +1,52 @@
|
||||
/* USER CODE BEGIN Header */ |
||||
/**
|
||||
****************************************************************************** |
||||
* @file crc.h |
||||
* @brief This file contains all the function prototypes for |
||||
* the crc.c file |
||||
****************************************************************************** |
||||
* @attention |
||||
* |
||||
* Copyright (c) 2022 STMicroelectronics. |
||||
* All rights reserved. |
||||
* |
||||
* This software is licensed under terms that can be found in the LICENSE file |
||||
* in the root directory of this software component. |
||||
* If no LICENSE file comes with this software, it is provided AS-IS. |
||||
* |
||||
****************************************************************************** |
||||
*/ |
||||
/* USER CODE END Header */ |
||||
/* Define to prevent recursive inclusion -------------------------------------*/ |
||||
#ifndef __CRC_H__ |
||||
#define __CRC_H__ |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include "main.h" |
||||
|
||||
/* USER CODE BEGIN Includes */ |
||||
|
||||
/* USER CODE END Includes */ |
||||
|
||||
extern CRC_HandleTypeDef hcrc; |
||||
|
||||
/* USER CODE BEGIN Private defines */ |
||||
|
||||
/* USER CODE END Private defines */ |
||||
|
||||
void MX_CRC_Init(void); |
||||
|
||||
/* USER CODE BEGIN Prototypes */ |
||||
|
||||
/* USER CODE END Prototypes */ |
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
#endif /* __CRC_H__ */ |
||||
|
@ -0,0 +1,52 @@
|
||||
/* USER CODE BEGIN Header */ |
||||
/**
|
||||
****************************************************************************** |
||||
* @file dma2d.h |
||||
* @brief This file contains all the function prototypes for |
||||
* the dma2d.c file |
||||
****************************************************************************** |
||||
* @attention |
||||
* |
||||
* Copyright (c) 2022 STMicroelectronics. |
||||
* All rights reserved. |
||||
* |
||||
* This software is licensed under terms that can be found in the LICENSE file |
||||
* in the root directory of this software component. |
||||
* If no LICENSE file comes with this software, it is provided AS-IS. |
||||
* |
||||
****************************************************************************** |
||||
*/ |
||||
/* USER CODE END Header */ |
||||
/* Define to prevent recursive inclusion -------------------------------------*/ |
||||
#ifndef __DMA2D_H__ |
||||
#define __DMA2D_H__ |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include "main.h" |
||||
|
||||
/* USER CODE BEGIN Includes */ |
||||
|
||||
/* USER CODE END Includes */ |
||||
|
||||
extern DMA2D_HandleTypeDef hdma2d; |
||||
|
||||
/* USER CODE BEGIN Private defines */ |
||||
|
||||
/* USER CODE END Private defines */ |
||||
|
||||
void MX_DMA2D_Init(void); |
||||
|
||||
/* USER CODE BEGIN Prototypes */ |
||||
|
||||
/* USER CODE END Prototypes */ |
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
#endif /* __DMA2D_H__ */ |
||||
|
@ -0,0 +1,52 @@
|
||||
/* USER CODE BEGIN Header */ |
||||
/**
|
||||
****************************************************************************** |
||||
* @file dsihost.h |
||||
* @brief This file contains all the function prototypes for |
||||
* the dsihost.c file |
||||
****************************************************************************** |
||||
* @attention |
||||
* |
||||
* Copyright (c) 2022 STMicroelectronics. |
||||
* All rights reserved. |
||||
* |
||||
* This software is licensed under terms that can be found in the LICENSE file |
||||
* in the root directory of this software component. |
||||
* If no LICENSE file comes with this software, it is provided AS-IS. |
||||
* |
||||
****************************************************************************** |
||||
*/ |
||||
/* USER CODE END Header */ |
||||
/* Define to prevent recursive inclusion -------------------------------------*/ |
||||
#ifndef __DSIHOST_H__ |
||||
#define __DSIHOST_H__ |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include "main.h" |
||||
|
||||
/* USER CODE BEGIN Includes */ |
||||
|
||||
/* USER CODE END Includes */ |
||||
|
||||
extern DSI_HandleTypeDef hdsi; |
||||
|
||||
/* USER CODE BEGIN Private defines */ |
||||
|
||||
/* USER CODE END Private defines */ |
||||
|
||||
void MX_DSIHOST_DSI_Init(void); |
||||
|
||||
/* USER CODE BEGIN Prototypes */ |
||||
|
||||
/* USER CODE END Prototypes */ |
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
#endif /* __DSIHOST_H__ */ |
||||
|
@ -0,0 +1,59 @@
|
||||
/* USER CODE BEGIN Header */ |
||||
/**
|
||||
****************************************************************************** |
||||
* File Name : FMC.h |
||||
* Description : This file provides code for the configuration |
||||
* of the FMC peripheral. |
||||
****************************************************************************** |
||||
* @attention |
||||
* |
||||
* Copyright (c) 2022 STMicroelectronics. |
||||
* All rights reserved. |
||||
* |
||||
* This software is licensed under terms that can be found in the LICENSE file |
||||
* in the root directory of this software component. |
||||
* If no LICENSE file comes with this software, it is provided AS-IS. |
||||
* |
||||
****************************************************************************** |
||||
*/ |
||||
/* USER CODE END Header */ |
||||
/* Define to prevent recursive inclusion -------------------------------------*/ |
||||
#ifndef __FMC_H |
||||
#define __FMC_H |
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include "main.h" |
||||
|
||||
/* USER CODE BEGIN Includes */ |
||||
|
||||
/* USER CODE END Includes */ |
||||
|
||||
extern SDRAM_HandleTypeDef hsdram1; |
||||
|
||||
/* USER CODE BEGIN Private defines */ |
||||
|
||||
/* USER CODE END Private defines */ |
||||
|
||||
void MX_FMC_Init(void); |
||||
void HAL_SDRAM_MspInit(SDRAM_HandleTypeDef* hsdram); |
||||
void HAL_SDRAM_MspDeInit(SDRAM_HandleTypeDef* hsdram); |
||||
|
||||
/* USER CODE BEGIN Prototypes */ |
||||
|
||||
/* USER CODE END Prototypes */ |
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
#endif /*__FMC_H */ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
@ -0,0 +1,49 @@
|
||||
/* USER CODE BEGIN Header */ |
||||
/**
|
||||
****************************************************************************** |
||||
* @file gpio.h |
||||
* @brief This file contains all the function prototypes for |
||||
* the gpio.c file |
||||
****************************************************************************** |
||||
* @attention |
||||
* |
||||
* Copyright (c) 2022 STMicroelectronics. |
||||
* All rights reserved. |
||||
* |
||||
* This software is licensed under terms that can be found in the LICENSE file |
||||
* in the root directory of this software component. |
||||
* If no LICENSE file comes with this software, it is provided AS-IS. |
||||
* |
||||
****************************************************************************** |
||||
*/ |
||||
/* USER CODE END Header */ |
||||
/* Define to prevent recursive inclusion -------------------------------------*/ |
||||
#ifndef __GPIO_H__ |
||||
#define __GPIO_H__ |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include "main.h" |
||||
|
||||
/* USER CODE BEGIN Includes */ |
||||
|
||||
/* USER CODE END Includes */ |
||||
|
||||
/* USER CODE BEGIN Private defines */ |
||||
|
||||
/* USER CODE END Private defines */ |
||||
|
||||
void MX_GPIO_Init(void); |
||||
|
||||
/* USER CODE BEGIN Prototypes */ |
||||
|
||||
/* USER CODE END Prototypes */ |
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
#endif /*__ GPIO_H__ */ |
||||
|
@ -0,0 +1,55 @@
|
||||
/* USER CODE BEGIN Header */ |
||||
/**
|
||||
****************************************************************************** |
||||
* @file i2c.h |
||||
* @brief This file contains all the function prototypes for |
||||
* the i2c.c file |
||||
****************************************************************************** |
||||
* @attention |
||||
* |
||||
* Copyright (c) 2022 STMicroelectronics. |
||||
* All rights reserved. |
||||
* |
||||
* This software is licensed under terms that can be found in the LICENSE file |
||||
* in the root directory of this software component. |
||||
* If no LICENSE file comes with this software, it is provided AS-IS. |
||||
* |
||||
****************************************************************************** |
||||
*/ |
||||
/* USER CODE END Header */ |
||||
/* Define to prevent recursive inclusion -------------------------------------*/ |
||||
#ifndef __I2C_H__ |
||||
#define __I2C_H__ |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include "main.h" |
||||
|
||||
/* USER CODE BEGIN Includes */ |
||||
|
||||
/* USER CODE END Includes */ |
||||
|
||||
extern I2C_HandleTypeDef hi2c1; |
||||
|
||||
extern I2C_HandleTypeDef hi2c2; |
||||
|
||||
/* USER CODE BEGIN Private defines */ |
||||
|
||||
/* USER CODE END Private defines */ |
||||
|
||||
void MX_I2C1_Init(void); |
||||
void MX_I2C2_Init(void); |
||||
|
||||
/* USER CODE BEGIN Prototypes */ |
||||
|
||||
/* USER CODE END Prototypes */ |
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
#endif /* __I2C_H__ */ |
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,52 @@
|
||||
/* USER CODE BEGIN Header */ |
||||
/**
|
||||
****************************************************************************** |
||||
* @file ltdc.h |
||||
* @brief This file contains all the function prototypes for |
||||
* the ltdc.c file |
||||
****************************************************************************** |
||||
* @attention |
||||
* |
||||
* Copyright (c) 2022 STMicroelectronics. |
||||
* All rights reserved. |
||||
* |
||||
* This software is licensed under terms that can be found in the LICENSE file |
||||
* in the root directory of this software component. |
||||
* If no LICENSE file comes with this software, it is provided AS-IS. |
||||
* |
||||
****************************************************************************** |
||||
*/ |
||||
/* USER CODE END Header */ |
||||
/* Define to prevent recursive inclusion -------------------------------------*/ |
||||
#ifndef __LTDC_H__ |
||||
#define __LTDC_H__ |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include "main.h" |
||||
|
||||
/* USER CODE BEGIN Includes */ |
||||
|
||||
/* USER CODE END Includes */ |
||||
|
||||
extern LTDC_HandleTypeDef hltdc; |
||||
|
||||
/* USER CODE BEGIN Private defines */ |
||||
|
||||
/* USER CODE END Private defines */ |
||||
|
||||
void MX_LTDC_Init(void); |
||||
|
||||
/* USER CODE BEGIN Prototypes */ |
||||
|
||||
/* USER CODE END Prototypes */ |
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
#endif /* __LTDC_H__ */ |
||||
|
@ -0,0 +1,268 @@
|
||||
/* USER CODE BEGIN Header */ |
||||
/**
|
||||
****************************************************************************** |
||||
* @file : main.h |
||||
* @brief : Header for main.c file. |
||||
* This file contains the common defines of the application. |
||||
****************************************************************************** |
||||
* @attention |
||||
* |
||||
* Copyright (c) 2022 STMicroelectronics. |
||||
* All rights reserved. |
||||
* |
||||
* This software is licensed under terms that can be found in the LICENSE file |
||||
* in the root directory of this software component. |
||||
* If no LICENSE file comes with this software, it is provided AS-IS. |
||||
* |
||||
****************************************************************************** |
||||
*/ |
||||
/* USER CODE END Header */ |
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/ |
||||
#ifndef __MAIN_H |
||||
#define __MAIN_H |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include "stm32f4xx_hal.h" |
||||
|
||||
/* Private includes ----------------------------------------------------------*/ |
||||
/* USER CODE BEGIN Includes */ |
||||
|
||||
/* USER CODE END Includes */ |
||||
|
||||
/* Exported types ------------------------------------------------------------*/ |
||||
/* USER CODE BEGIN ET */ |
||||
|
||||
/* USER CODE END ET */ |
||||
|
||||
/* Exported constants --------------------------------------------------------*/ |
||||
/* USER CODE BEGIN EC */ |
||||
|
||||
/* USER CODE END EC */ |
||||
|
||||
/* Exported macro ------------------------------------------------------------*/ |
||||
/* USER CODE BEGIN EM */ |
||||
|
||||
/* USER CODE END EM */ |
||||
|
||||
/* Exported functions prototypes ---------------------------------------------*/ |
||||
void Error_Handler(void); |
||||
|
||||
/* USER CODE BEGIN EFP */ |
||||
|
||||
/* USER CODE END EFP */ |
||||
|
||||
/* Private defines -----------------------------------------------------------*/ |
||||
#define SAI1_FSA_Pin GPIO_PIN_4 |
||||
#define SAI1_FSA_GPIO_Port GPIOE |
||||
#define SPKR_HP_Pin GPIO_PIN_3 |
||||
#define SPKR_HP_GPIO_Port GPIOE |
||||
#define AUDIO_RST_Pin GPIO_PIN_2 |
||||
#define AUDIO_RST_GPIO_Port GPIOE |
||||
#define ARDUINO_USART6_TX_Pin GPIO_PIN_14 |
||||
#define ARDUINO_USART6_TX_GPIO_Port GPIOG |
||||
#define FMC_NBL1_Pin GPIO_PIN_1 |
||||
#define FMC_NBL1_GPIO_Port GPIOE |
||||
#define FMC_NBL0_Pin GPIO_PIN_0 |
||||
#define FMC_NBL0_GPIO_Port GPIOE |
||||
#define I2C1_SCL_Pin GPIO_PIN_8 |
||||
#define I2C1_SCL_GPIO_Port GPIOB |
||||
#define I2S3_CK_Pin GPIO_PIN_3 |
||||
#define I2S3_CK_GPIO_Port GPIOB |
||||
#define uSD_CLK_Pin GPIO_PIN_12 |
||||
#define uSD_CLK_GPIO_Port GPIOC |
||||
#define SWCLK_Pin GPIO_PIN_14 |
||||
#define SWCLK_GPIO_Port GPIOA |
||||
#define SWDIO_Pin GPIO_PIN_13 |
||||
#define SWDIO_GPIO_Port GPIOA |
||||
#define SAI1_SCKA_Pin GPIO_PIN_5 |
||||
#define SAI1_SCKA_GPIO_Port GPIOE |
||||
#define I2C1_SDA_Pin GPIO_PIN_9 |
||||
#define I2C1_SDA_GPIO_Port GPIOB |
||||
#define OTG_FS1_OverCurrent_Pin GPIO_PIN_7 |
||||
#define OTG_FS1_OverCurrent_GPIO_Port GPIOB |
||||
#define QSPI_BK1_NCS_Pin GPIO_PIN_6 |
||||
#define QSPI_BK1_NCS_GPIO_Port GPIOB |
||||
#define SDNCAS_Pin GPIO_PIN_15 |
||||
#define SDNCAS_GPIO_Port GPIOG |
||||
#define MIC_DATA_Pin GPIO_PIN_6 |
||||
#define MIC_DATA_GPIO_Port GPIOD |
||||
#define D2_Pin GPIO_PIN_0 |
||||
#define D2_GPIO_Port GPIOD |
||||
#define uSD_D3_Pin GPIO_PIN_11 |
||||
#define uSD_D3_GPIO_Port GPIOC |
||||
#define uSD_D2_Pin GPIO_PIN_10 |
||||
#define uSD_D2_GPIO_Port GPIOC |
||||
#define USB_FS1_P_Pin GPIO_PIN_12 |
||||
#define USB_FS1_P_GPIO_Port GPIOA |
||||
#define FMC_NBL2_Pin GPIO_PIN_4 |
||||
#define FMC_NBL2_GPIO_Port GPIOI |
||||
#define LED3_Pin GPIO_PIN_5 |
||||
#define LED3_GPIO_Port GPIOD |
||||
#define D3_Pin GPIO_PIN_1 |
||||
#define D3_GPIO_Port GPIOD |
||||
#define D27_Pin GPIO_PIN_3 |
||||
#define D27_GPIO_Port GPIOI |
||||
#define D26_Pin GPIO_PIN_2 |
||||
#define D26_GPIO_Port GPIOI |
||||
#define USB_FS1_N_Pin GPIO_PIN_11 |
||||
#define USB_FS1_N_GPIO_Port GPIOA |
||||
#define A0_Pin GPIO_PIN_0 |
||||
#define A0_GPIO_Port GPIOF |
||||
#define FMC_NBL3_Pin GPIO_PIN_5 |
||||
#define FMC_NBL3_GPIO_Port GPIOI |
||||
#define D29_Pin GPIO_PIN_7 |
||||
#define D29_GPIO_Port GPIOI |
||||
#define D31_Pin GPIO_PIN_10 |
||||
#define D31_GPIO_Port GPIOI |
||||
#define D28_Pin GPIO_PIN_6 |
||||
#define D28_GPIO_Port GPIOI |
||||
#define LED4_Pin GPIO_PIN_3 |
||||
#define LED4_GPIO_Port GPIOK |
||||
#define USART6_RX_Pin GPIO_PIN_9 |
||||
#define USART6_RX_GPIO_Port GPIOG |
||||
#define LED2_Pin GPIO_PIN_4 |
||||
#define LED2_GPIO_Port GPIOD |
||||
#define uSD_CMD_Pin GPIO_PIN_2 |
||||
#define uSD_CMD_GPIO_Port GPIOD |
||||
#define D23_Pin GPIO_PIN_15 |
||||
#define D23_GPIO_Port GPIOH |
||||
#define D25_Pin GPIO_PIN_1 |
||||
#define D25_GPIO_Port GPIOI |
||||
#define USB_FS1_ID_Pin GPIO_PIN_10 |
||||
#define USB_FS1_ID_GPIO_Port GPIOA |
||||
#define A1_Pin GPIO_PIN_1 |
||||
#define A1_GPIO_Port GPIOF |
||||
#define D30_Pin GPIO_PIN_9 |
||||
#define D30_GPIO_Port GPIOI |
||||
#define D21_Pin GPIO_PIN_13 |
||||
#define D21_GPIO_Port GPIOH |
||||
#define D22_Pin GPIO_PIN_14 |
||||
#define D22_GPIO_Port GPIOH |
||||
#define D24_Pin GPIO_PIN_0 |
||||
#define D24_GPIO_Port GPIOI |
||||
#define VBUS_FS1_Pin GPIO_PIN_9 |
||||
#define VBUS_FS1_GPIO_Port GPIOA |
||||
#define uSD_D1_Pin GPIO_PIN_9 |
||||
#define uSD_D1_GPIO_Port GPIOC |
||||
#define A2_Pin GPIO_PIN_2 |
||||
#define A2_GPIO_Port GPIOF |
||||
#define uSD_D0_Pin GPIO_PIN_8 |
||||
#define uSD_D0_GPIO_Port GPIOC |
||||
#define A3_Pin GPIO_PIN_3 |
||||
#define A3_GPIO_Port GPIOF |
||||
#define I2C2_SCL_Pin GPIO_PIN_4 |
||||
#define I2C2_SCL_GPIO_Port GPIOH |
||||
#define SDCLK_Pin GPIO_PIN_8 |
||||
#define SDCLK_GPIO_Port GPIOG |
||||
#define A4_Pin GPIO_PIN_4 |
||||
#define A4_GPIO_Port GPIOF |
||||
#define I2C2_SDA_Pin GPIO_PIN_5 |
||||
#define I2C2_SDA_GPIO_Port GPIOH |
||||
#define SDNE0_Pin GPIO_PIN_3 |
||||
#define SDNE0_GPIO_Port GPIOH |
||||
#define SAI1_MCLKA_Pin GPIO_PIN_7 |
||||
#define SAI1_MCLKA_GPIO_Port GPIOG |
||||
#define LED1_Pin GPIO_PIN_6 |
||||
#define LED1_GPIO_Port GPIOG |
||||
#define QSPI_BK1_IO2_Pin GPIO_PIN_7 |
||||
#define QSPI_BK1_IO2_GPIO_Port GPIOF |
||||
#define QSPI_BK1_IO3_Pin GPIO_PIN_6 |
||||
#define QSPI_BK1_IO3_GPIO_Port GPIOF |
||||
#define A5_Pin GPIO_PIN_5 |
||||
#define A5_GPIO_Port GPIOF |
||||
#define SDCKE0_Pin GPIO_PIN_2 |
||||
#define SDCKE0_GPIO_Port GPIOH |
||||
#define D1_Pin GPIO_PIN_15 |
||||
#define D1_GPIO_Port GPIOD |
||||
#define D15_Pin GPIO_PIN_10 |
||||
#define D15_GPIO_Port GPIOD |
||||
#define QSPI_CLK_Pin GPIO_PIN_10 |
||||
#define QSPI_CLK_GPIO_Port GPIOF |
||||
#define QSPI_BK1_IO1_Pin GPIO_PIN_9 |
||||
#define QSPI_BK1_IO1_GPIO_Port GPIOF |
||||
#define QSPI_BK1_IO0_Pin GPIO_PIN_8 |
||||
#define QSPI_BK1_IO0_GPIO_Port GPIOF |
||||
#define D0_Pin GPIO_PIN_14 |
||||
#define D0_GPIO_Port GPIOD |
||||
#define D14_Pin GPIO_PIN_9 |
||||
#define D14_GPIO_Port GPIOD |
||||
#define D13_Pin GPIO_PIN_8 |
||||
#define D13_GPIO_Port GPIOD |
||||
#define SDNWE_Pin GPIO_PIN_0 |
||||
#define SDNWE_GPIO_Port GPIOC |
||||
#define OTG_FS1_PowerSwitchOn_Pin GPIO_PIN_2 |
||||
#define OTG_FS1_PowerSwitchOn_GPIO_Port GPIOB |
||||
#define A6_Pin GPIO_PIN_12 |
||||
#define A6_GPIO_Port GPIOF |
||||
#define A11_Pin GPIO_PIN_1 |
||||
#define A11_GPIO_Port GPIOG |
||||
#define A9_Pin GPIO_PIN_15 |
||||
#define A9_GPIO_Port GPIOF |
||||
#define MIC_CK_Pin GPIO_PIN_13 |
||||
#define MIC_CK_GPIO_Port GPIOD |
||||
#define uSD_Detect_Pin GPIO_PIN_2 |
||||
#define uSD_Detect_GPIO_Port GPIOG |
||||
#define LCD_INT_Pin GPIO_PIN_5 |
||||
#define LCD_INT_GPIO_Port GPIOJ |
||||
#define D20_Pin GPIO_PIN_12 |
||||
#define D20_GPIO_Port GPIOH |
||||
#define WAKEUP_Pin GPIO_PIN_0 |
||||
#define WAKEUP_GPIO_Port GPIOA |
||||
#define A7_Pin GPIO_PIN_13 |
||||
#define A7_GPIO_Port GPIOF |
||||
#define A10_Pin GPIO_PIN_0 |
||||
#define A10_GPIO_Port GPIOG |
||||
#define D5_Pin GPIO_PIN_8 |
||||
#define D5_GPIO_Port GPIOE |
||||
#define D17_Pin GPIO_PIN_9 |
||||
#define D17_GPIO_Port GPIOH |
||||
#define D19_Pin GPIO_PIN_11 |
||||
#define D19_GPIO_Port GPIOH |
||||
#define A8_Pin GPIO_PIN_14 |
||||
#define A8_GPIO_Port GPIOF |
||||
#define DSI_TE_Pin GPIO_PIN_2 |
||||
#define DSI_TE_GPIO_Port GPIOJ |
||||
#define SDNMT48LC4M32B2B5_6A_RAS_RAS___Pin GPIO_PIN_11 |
||||
#define SDNMT48LC4M32B2B5_6A_RAS_RAS___GPIO_Port GPIOF |
||||
#define D6_Pin GPIO_PIN_9 |
||||
#define D6_GPIO_Port GPIOE |
||||
#define D8_Pin GPIO_PIN_11 |
||||
#define D8_GPIO_Port GPIOE |
||||
#define D11_Pin GPIO_PIN_14 |
||||
#define D11_GPIO_Port GPIOE |
||||
#define STLK_RX_Pin GPIO_PIN_10 |
||||
#define STLK_RX_GPIO_Port GPIOB |
||||
#define D16_Pin GPIO_PIN_8 |
||||
#define D16_GPIO_Port GPIOH |
||||
#define D18_Pin GPIO_PIN_10 |
||||
#define D18_GPIO_Port GPIOH |
||||
#define LCD_BL_CTRL_Pin GPIO_PIN_3 |
||||
#define LCD_BL_CTRL_GPIO_Port GPIOA |
||||
#define EXT_RESET_Pin GPIO_PIN_0 |
||||
#define EXT_RESET_GPIO_Port GPIOB |
||||
#define D4_Pin GPIO_PIN_7 |
||||
#define D4_GPIO_Port GPIOE |
||||
#define D7_Pin GPIO_PIN_10 |
||||
#define D7_GPIO_Port GPIOE |
||||
#define D9_Pin GPIO_PIN_12 |
||||
#define D9_GPIO_Port GPIOE |
||||
#define D12_Pin GPIO_PIN_15 |
||||
#define D12_GPIO_Port GPIOE |
||||
#define D10_Pin GPIO_PIN_13 |
||||
#define D10_GPIO_Port GPIOE |
||||
#define STLK_TX_Pin GPIO_PIN_11 |
||||
#define STLK_TX_GPIO_Port GPIOB |
||||
/* USER CODE BEGIN Private defines */ |
||||
|
||||
/* USER CODE END Private defines */ |
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
#endif /* __MAIN_H */ |
@ -0,0 +1,4 @@
|
||||
void My_SystemClock_Config(void); |
||||
|
||||
void MY_LCD_Init(); |
||||
void MY_LCD_Tick(); |
@ -0,0 +1,52 @@
|
||||
/* USER CODE BEGIN Header */ |
||||
/**
|
||||
****************************************************************************** |
||||
* @file quadspi.h |
||||
* @brief This file contains all the function prototypes for |
||||
* the quadspi.c file |
||||
****************************************************************************** |
||||
* @attention |
||||
* |
||||
* Copyright (c) 2022 STMicroelectronics. |
||||
* All rights reserved. |
||||
* |
||||
* This software is licensed under terms that can be found in the LICENSE file |
||||
* in the root directory of this software component. |
||||
* If no LICENSE file comes with this software, it is provided AS-IS. |
||||
* |
||||
****************************************************************************** |
||||
*/ |
||||
/* USER CODE END Header */ |
||||
/* Define to prevent recursive inclusion -------------------------------------*/ |
||||
#ifndef __QUADSPI_H__ |
||||
#define __QUADSPI_H__ |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include "main.h" |
||||
|
||||
/* USER CODE BEGIN Includes */ |
||||
|
||||
/* USER CODE END Includes */ |
||||
|
||||
extern QSPI_HandleTypeDef hqspi; |
||||
|
||||
/* USER CODE BEGIN Private defines */ |
||||
|
||||
/* USER CODE END Private defines */ |
||||
|
||||
void MX_QUADSPI_Init(void); |
||||
|
||||
/* USER CODE BEGIN Prototypes */ |
||||
|
||||
/* USER CODE END Prototypes */ |
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
#endif /* __QUADSPI_H__ */ |
||||
|
@ -0,0 +1,52 @@
|
||||
/* USER CODE BEGIN Header */ |
||||
/**
|
||||
****************************************************************************** |
||||
* @file sai.h |
||||
* @brief This file contains all the function prototypes for |
||||
* the sai.c file |
||||
****************************************************************************** |
||||
* @attention |
||||
* |
||||
* Copyright (c) 2022 STMicroelectronics. |
||||
* All rights reserved. |
||||
* |
||||
* This software is licensed under terms that can be found in the LICENSE file |
||||
* in the root directory of this software component. |
||||
* If no LICENSE file comes with this software, it is provided AS-IS. |
||||
* |
||||
****************************************************************************** |
||||
*/ |
||||
/* USER CODE END Header */ |
||||
/* Define to prevent recursive inclusion -------------------------------------*/ |
||||
#ifndef __SAI_H__ |
||||
#define __SAI_H__ |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include "main.h" |
||||
|
||||
/* USER CODE BEGIN Includes */ |
||||
|
||||
/* USER CODE END Includes */ |
||||
|
||||
extern SAI_HandleTypeDef hsai_BlockA1; |
||||
|
||||
/* USER CODE BEGIN Private defines */ |
||||
|
||||
/* USER CODE END Private defines */ |
||||
|
||||
void MX_SAI1_Init(void); |
||||
|
||||
/* USER CODE BEGIN Prototypes */ |
||||
|
||||
/* USER CODE END Prototypes */ |
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
#endif /* __SAI_H__ */ |
||||
|
@ -0,0 +1,52 @@
|
||||
/* USER CODE BEGIN Header */ |
||||
/**
|
||||
****************************************************************************** |
||||
* @file sdio.h |
||||
* @brief This file contains all the function prototypes for |
||||
* the sdio.c file |
||||
****************************************************************************** |
||||
* @attention |
||||
* |
||||
* Copyright (c) 2022 STMicroelectronics. |
||||
* All rights reserved. |
||||
* |
||||
* This software is licensed under terms that can be found in the LICENSE file |
||||
* in the root directory of this software component. |
||||
* If no LICENSE file comes with this software, it is provided AS-IS. |
||||
* |
||||
****************************************************************************** |
||||
*/ |
||||
/* USER CODE END Header */ |
||||
/* Define to prevent recursive inclusion -------------------------------------*/ |
||||
#ifndef __SDIO_H__ |
||||
#define __SDIO_H__ |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include "main.h" |
||||
|
||||
/* USER CODE BEGIN Includes */ |
||||
|
||||
/* USER CODE END Includes */ |
||||
|
||||
extern SD_HandleTypeDef hsd; |
||||
|
||||
/* USER CODE BEGIN Private defines */ |
||||
|
||||
/* USER CODE END Private defines */ |
||||
|
||||
void MX_SDIO_SD_Init(void); |
||||
|
||||
/* USER CODE BEGIN Prototypes */ |
||||
|
||||
/* USER CODE END Prototypes */ |
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
#endif /* __SDIO_H__ */ |
||||
|
@ -0,0 +1,491 @@
|
||||
/* USER CODE BEGIN Header */ |
||||
/**
|
||||
****************************************************************************** |
||||
* @file stm32f4xx_hal_conf_template.h |
||||
* @author MCD Application Team |
||||
* @brief HAL configuration template file. |
||||
* This file should be copied to the application folder and renamed |
||||
* to stm32f4xx_hal_conf.h. |
||||
****************************************************************************** |
||||
* @attention |
||||
* |
||||
* Copyright (c) 2017 STMicroelectronics. |
||||
* All rights reserved. |
||||
* |
||||
* This software is licensed under terms that can be found in the LICENSE file |
||||
* in the root directory of this software component. |
||||
* If no LICENSE file comes with this software, it is provided AS-IS. |
||||
* |
||||
****************************************************************************** |
||||
*/ |
||||
/* USER CODE END Header */ |
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/ |
||||
#ifndef __STM32F4xx_HAL_CONF_H |
||||
#define __STM32F4xx_HAL_CONF_H |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
/* Exported types ------------------------------------------------------------*/ |
||||
/* Exported constants --------------------------------------------------------*/ |
||||
|
||||
/* ########################## Module Selection ############################## */ |
||||
/**
|
||||
* @brief This is the list of modules to be used in the HAL driver |
||||
*/ |
||||
#define HAL_MODULE_ENABLED |
||||
|
||||
/* #define HAL_ADC_MODULE_ENABLED */ |
||||
/* #define HAL_CRYP_MODULE_ENABLED */ |
||||
/* #define HAL_CAN_MODULE_ENABLED */ |
||||
#define HAL_CRC_MODULE_ENABLED |
||||
/* #define HAL_CAN_LEGACY_MODULE_ENABLED */ |
||||
/* #define HAL_CRYP_MODULE_ENABLED */ |
||||
/* #define HAL_DAC_MODULE_ENABLED */ |
||||
/* #define HAL_DCMI_MODULE_ENABLED */ |
||||
#define HAL_DMA2D_MODULE_ENABLED |
||||
/* #define HAL_ETH_MODULE_ENABLED */ |
||||
/* #define HAL_NAND_MODULE_ENABLED */ |
||||
/* #define HAL_NOR_MODULE_ENABLED */ |
||||
/* #define HAL_PCCARD_MODULE_ENABLED */ |
||||
/* #define HAL_SRAM_MODULE_ENABLED */ |
||||
#define HAL_SDRAM_MODULE_ENABLED |
||||
/* #define HAL_HASH_MODULE_ENABLED */ |
||||
#define HAL_I2C_MODULE_ENABLED |
||||
/* #define HAL_I2S_MODULE_ENABLED */ |
||||
/* #define HAL_IWDG_MODULE_ENABLED */ |
||||
#define HAL_LTDC_MODULE_ENABLED |
||||
/* #define HAL_RNG_MODULE_ENABLED */ |
||||
/* #define HAL_RTC_MODULE_ENABLED */ |
||||
#define HAL_SAI_MODULE_ENABLED |
||||
#define HAL_SD_MODULE_ENABLED |
||||
/* #define HAL_MMC_MODULE_ENABLED */ |
||||
/* #define HAL_SPI_MODULE_ENABLED */ |
||||
#define HAL_TIM_MODULE_ENABLED |
||||
#define HAL_UART_MODULE_ENABLED |
||||
/* #define HAL_USART_MODULE_ENABLED */ |
||||
/* #define HAL_IRDA_MODULE_ENABLED */ |
||||
/* #define HAL_SMARTCARD_MODULE_ENABLED */ |
||||
/* #define HAL_SMBUS_MODULE_ENABLED */ |
||||
/* #define HAL_WWDG_MODULE_ENABLED */ |
||||
/* #define HAL_PCD_MODULE_ENABLED */ |
||||
#define HAL_HCD_MODULE_ENABLED |
||||
#define HAL_DSI_MODULE_ENABLED |
||||
/* #define HAL_QSPI_MODULE_ENABLED */ |
||||
#define HAL_QSPI_MODULE_ENABLED |
||||
/* #define HAL_CEC_MODULE_ENABLED */ |
||||
/* #define HAL_FMPI2C_MODULE_ENABLED */ |
||||
/* #define HAL_FMPSMBUS_MODULE_ENABLED */ |
||||
/* #define HAL_SPDIFRX_MODULE_ENABLED */ |
||||
/* #define HAL_DFSDM_MODULE_ENABLED */ |
||||
/* #define HAL_LPTIM_MODULE_ENABLED */ |
||||
#define HAL_GPIO_MODULE_ENABLED |
||||
#define HAL_EXTI_MODULE_ENABLED |
||||
#define HAL_DMA_MODULE_ENABLED |
||||
#define HAL_RCC_MODULE_ENABLED |
||||
#define HAL_FLASH_MODULE_ENABLED |
||||
#define HAL_PWR_MODULE_ENABLED |
||||
#define HAL_CORTEX_MODULE_ENABLED |
||||
|
||||
/* ########################## HSE/HSI Values adaptation ##################### */ |
||||
/**
|
||||
* @brief Adjust the value of External High Speed oscillator (HSE) used in your application. |
||||
* This value is used by the RCC HAL module to compute the system frequency |
||||
* (when HSE is used as system clock source, directly or through the PLL). |
||||
*/ |
||||
#if !defined (HSE_VALUE) |
||||
#define HSE_VALUE 8000000U /*!< Value of the External oscillator in Hz */ |
||||
#endif /* HSE_VALUE */ |
||||
|
||||
#if !defined (HSE_STARTUP_TIMEOUT) |
||||
#define HSE_STARTUP_TIMEOUT 100U /*!< Time out for HSE start up, in ms */ |
||||
#endif /* HSE_STARTUP_TIMEOUT */ |
||||
|
||||
/**
|
||||
* @brief Internal High Speed oscillator (HSI) value. |
||||
* This value is used by the RCC HAL module to compute the system frequency |
||||
* (when HSI is used as system clock source, directly or through the PLL). |
||||
*/ |
||||
#if !defined (HSI_VALUE) |
||||
#define HSI_VALUE ((uint32_t)16000000U) /*!< Value of the Internal oscillator in Hz*/ |
||||
#endif /* HSI_VALUE */ |
||||
|
||||
/**
|
||||
* @brief Internal Low Speed oscillator (LSI) value. |
||||
*/ |
||||
#if !defined (LSI_VALUE) |
||||
#define LSI_VALUE 32000U /*!< LSI Typical Value in Hz*/ |
||||
#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz |
||||
The real value may vary depending on the variations |
||||
in voltage and temperature.*/ |
||||
/**
|
||||
* @brief External Low Speed oscillator (LSE) value. |
||||
*/ |
||||
#if !defined (LSE_VALUE) |
||||
#define LSE_VALUE 32768U /*!< Value of the External Low Speed oscillator in Hz */ |
||||
#endif /* LSE_VALUE */ |
||||
|
||||
#if !defined (LSE_STARTUP_TIMEOUT) |
||||
#define LSE_STARTUP_TIMEOUT 5000U /*!< Time out for LSE start up, in ms */ |
||||
#endif /* LSE_STARTUP_TIMEOUT */ |
||||
|
||||
/**
|
||||
* @brief External clock source for I2S peripheral |
||||
* This value is used by the I2S HAL module to compute the I2S clock source |
||||
* frequency, this source is inserted directly through I2S_CKIN pad. |
||||
*/ |
||||
#if !defined (EXTERNAL_CLOCK_VALUE) |
||||
#define EXTERNAL_CLOCK_VALUE 12288000U /*!< Value of the External audio frequency in Hz*/ |
||||
#endif /* EXTERNAL_CLOCK_VALUE */ |
||||
|
||||
/* Tip: To avoid modifying this file each time you need to use different HSE,
|
||||
=== you can define the HSE value in your toolchain compiler preprocessor. */ |
||||
|
||||
/* ########################### System Configuration ######################### */ |
||||
/**
|
||||
* @brief This is the HAL system configuration section |
||||
*/ |
||||
#define VDD_VALUE 3300U /*!< Value of VDD in mv */ |
||||
#define TICK_INT_PRIORITY 0U /*!< tick interrupt priority */ |
||||
#define USE_RTOS 0U |
||||
#define PREFETCH_ENABLE 1U |
||||
#define INSTRUCTION_CACHE_ENABLE 1U |
||||
#define DATA_CACHE_ENABLE 1U |
||||
|
||||
#define USE_HAL_ADC_REGISTER_CALLBACKS 0U /* ADC register callback disabled */ |
||||
#define USE_HAL_CAN_REGISTER_CALLBACKS 0U /* CAN register callback disabled */ |
||||
#define USE_HAL_CEC_REGISTER_CALLBACKS 0U /* CEC register callback disabled */ |
||||
#define USE_HAL_CRYP_REGISTER_CALLBACKS 0U /* CRYP register callback disabled */ |
||||
#define USE_HAL_DAC_REGISTER_CALLBACKS 0U /* DAC register callback disabled */ |
||||
#define USE_HAL_DCMI_REGISTER_CALLBACKS 0U /* DCMI register callback disabled */ |
||||
#define USE_HAL_DFSDM_REGISTER_CALLBACKS 0U /* DFSDM register callback disabled */ |
||||
#define USE_HAL_DMA2D_REGISTER_CALLBACKS 0U /* DMA2D register callback disabled */ |
||||
#define USE_HAL_DSI_REGISTER_CALLBACKS 0U /* DSI register callback disabled */ |
||||
#define USE_HAL_ETH_REGISTER_CALLBACKS 0U /* ETH register callback disabled */ |
||||
#define USE_HAL_HASH_REGISTER_CALLBACKS 0U /* HASH register callback disabled */ |
||||
#define USE_HAL_HCD_REGISTER_CALLBACKS 0U /* HCD register callback disabled */ |
||||
#define USE_HAL_I2C_REGISTER_CALLBACKS 0U /* I2C register callback disabled */ |
||||
#define USE_HAL_FMPI2C_REGISTER_CALLBACKS 0U /* FMPI2C register callback disabled */ |
||||
#define USE_HAL_FMPSMBUS_REGISTER_CALLBACKS 0U /* FMPSMBUS register callback disabled */ |
||||
#define USE_HAL_I2S_REGISTER_CALLBACKS 0U /* I2S register callback disabled */ |
||||
#define USE_HAL_IRDA_REGISTER_CALLBACKS 0U /* IRDA register callback disabled */ |
||||
#define USE_HAL_LPTIM_REGISTER_CALLBACKS 0U /* LPTIM register callback disabled */ |
||||
#define USE_HAL_LTDC_REGISTER_CALLBACKS 0U /* LTDC register callback disabled */ |
||||
#define USE_HAL_MMC_REGISTER_CALLBACKS 0U /* MMC register callback disabled */ |
||||
#define USE_HAL_NAND_REGISTER_CALLBACKS 0U /* NAND register callback disabled */ |
||||
#define USE_HAL_NOR_REGISTER_CALLBACKS 0U /* NOR register callback disabled */ |
||||
#define USE_HAL_PCCARD_REGISTER_CALLBACKS 0U /* PCCARD register callback disabled */ |
||||
#define USE_HAL_PCD_REGISTER_CALLBACKS 0U /* PCD register callback disabled */ |
||||
#define USE_HAL_QSPI_REGISTER_CALLBACKS 0U /* QSPI register callback disabled */ |
||||
#define USE_HAL_RNG_REGISTER_CALLBACKS 0U /* RNG register callback disabled */ |
||||
#define USE_HAL_RTC_REGISTER_CALLBACKS 0U /* RTC register callback disabled */ |
||||
#define USE_HAL_SAI_REGISTER_CALLBACKS 0U /* SAI register callback disabled */ |
||||
#define USE_HAL_SD_REGISTER_CALLBACKS 0U /* SD register callback disabled */ |
||||
#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0U /* SMARTCARD register callback disabled */ |
||||
#define USE_HAL_SDRAM_REGISTER_CALLBACKS 0U /* SDRAM register callback disabled */ |
||||
#define USE_HAL_SRAM_REGISTER_CALLBACKS 0U /* SRAM register callback disabled */ |
||||
#define USE_HAL_SPDIFRX_REGISTER_CALLBACKS 0U /* SPDIFRX register callback disabled */ |
||||
#define USE_HAL_SMBUS_REGISTER_CALLBACKS 0U /* SMBUS register callback disabled */ |
||||
#define USE_HAL_SPI_REGISTER_CALLBACKS 0U /* SPI register callback disabled */ |
||||
#define USE_HAL_TIM_REGISTER_CALLBACKS 0U /* TIM register callback disabled */ |
||||
#define USE_HAL_UART_REGISTER_CALLBACKS 0U /* UART register callback disabled */ |
||||
#define USE_HAL_USART_REGISTER_CALLBACKS 0U /* USART register callback disabled */ |
||||
#define USE_HAL_WWDG_REGISTER_CALLBACKS 0U /* WWDG register callback disabled */ |
||||
|
||||
/* ########################## Assert Selection ############################## */ |
||||
/**
|
||||
* @brief Uncomment the line below to expanse the "assert_param" macro in the |
||||
* HAL drivers code |
||||
*/ |
||||
/* #define USE_FULL_ASSERT 1U */ |
||||
|
||||
/* ################## Ethernet peripheral configuration ##################### */ |
||||
|
||||
/* Section 1 : Ethernet peripheral configuration */ |
||||
|
||||
/* MAC ADDRESS: MAC_ADDR0:MAC_ADDR1:MAC_ADDR2:MAC_ADDR3:MAC_ADDR4:MAC_ADDR5 */ |
||||
#define MAC_ADDR0 2U |
||||
#define MAC_ADDR1 0U |
||||
#define MAC_ADDR2 0U |
||||
#define MAC_ADDR3 0U |
||||
#define MAC_ADDR4 0U |
||||
#define MAC_ADDR5 0U |
||||
|
||||
/* Definition of the Ethernet driver buffers size and count */ |
||||
#define ETH_RX_BUF_SIZE ETH_MAX_PACKET_SIZE /* buffer size for receive */ |
||||
#define ETH_TX_BUF_SIZE ETH_MAX_PACKET_SIZE /* buffer size for transmit */ |
||||
#define ETH_RXBUFNB 4U /* 4 Rx buffers of size ETH_RX_BUF_SIZE */ |
||||
#define ETH_TXBUFNB 4U /* 4 Tx buffers of size ETH_TX_BUF_SIZE */ |
||||
|
||||
/* Section 2: PHY configuration section */ |
||||
|
||||
/* DP83848_PHY_ADDRESS Address*/ |
||||
#define DP83848_PHY_ADDRESS 0x01U |
||||
/* PHY Reset delay these values are based on a 1 ms Systick interrupt*/ |
||||
#define PHY_RESET_DELAY 0x000000FFU |
||||
/* PHY Configuration delay */ |
||||
#define PHY_CONFIG_DELAY 0x00000FFFU |
||||
|
||||
#define PHY_READ_TO 0x0000FFFFU |
||||
#define PHY_WRITE_TO 0x0000FFFFU |
||||
|
||||
/* Section 3: Common PHY Registers */ |
||||
|
||||
#define PHY_BCR ((uint16_t)0x0000U) /*!< Transceiver Basic Control Register */ |
||||
#define PHY_BSR ((uint16_t)0x0001U) /*!< Transceiver Basic Status Register */ |
||||
|
||||
#define PHY_RESET ((uint16_t)0x8000U) /*!< PHY Reset */ |
||||
#define PHY_LOOPBACK ((uint16_t)0x4000U) /*!< Select loop-back mode */ |
||||
#define PHY_FULLDUPLEX_100M ((uint16_t)0x2100U) /*!< Set the full-duplex mode at 100 Mb/s */ |
||||
#define PHY_HALFDUPLEX_100M ((uint16_t)0x2000U) /*!< Set the half-duplex mode at 100 Mb/s */ |
||||
#define PHY_FULLDUPLEX_10M ((uint16_t)0x0100U) /*!< Set the full-duplex mode at 10 Mb/s */ |
||||
#define PHY_HALFDUPLEX_10M ((uint16_t)0x0000U) /*!< Set the half-duplex mode at 10 Mb/s */ |
||||
#define PHY_AUTONEGOTIATION ((uint16_t)0x1000U) /*!< Enable auto-negotiation function */ |
||||
#define PHY_RESTART_AUTONEGOTIATION ((uint16_t)0x0200U) /*!< Restart auto-negotiation function */ |
||||
#define PHY_POWERDOWN ((uint16_t)0x0800U) /*!< Select the power down mode */ |
||||
#define PHY_ISOLATE ((uint16_t)0x0400U) /*!< Isolate PHY from MII */ |
||||
|
||||
#define PHY_AUTONEGO_COMPLETE ((uint16_t)0x0020U) /*!< Auto-Negotiation process completed */ |
||||
#define PHY_LINKED_STATUS ((uint16_t)0x0004U) /*!< Valid link established */ |
||||
#define PHY_JABBER_DETECTION ((uint16_t)0x0002U) /*!< Jabber condition detected */ |
||||
|
||||
/* Section 4: Extended PHY Registers */ |
||||
#define PHY_SR ((uint16_t)0x10U) /*!< PHY status register Offset */ |
||||
|
||||
#define PHY_SPEED_STATUS ((uint16_t)0x0002U) /*!< PHY Speed mask */ |
||||
#define PHY_DUPLEX_STATUS ((uint16_t)0x0004U) /*!< PHY Duplex mask */ |
||||
|
||||
/* ################## SPI peripheral configuration ########################## */ |
||||
|
||||
/* CRC FEATURE: Use to activate CRC feature inside HAL SPI Driver
|
||||
* Activated: CRC code is present inside driver |
||||
* Deactivated: CRC code cleaned from driver |
||||
*/ |
||||
|
||||
#define USE_SPI_CRC 0U |
||||
|
||||
/* Includes ------------------------------------------------------------------*/ |
||||
/**
|
||||
* @brief Include module's header file |
||||
*/ |
||||
|
||||
#ifdef HAL_RCC_MODULE_ENABLED |
||||
#include "stm32f4xx_hal_rcc.h" |
||||
#endif /* HAL_RCC_MODULE_ENABLED */ |
||||
|
||||
#ifdef HAL_GPIO_MODULE_ENABLED |
||||
#include "stm32f4xx_hal_gpio.h" |
||||
#endif /* HAL_GPIO_MODULE_ENABLED */ |
||||
|
||||
#ifdef HAL_EXTI_MODULE_ENABLED |
||||
#include "stm32f4xx_hal_exti.h" |
||||
#endif /* HAL_EXTI_MODULE_ENABLED */ |
||||
|
||||
#ifdef HAL_DMA_MODULE_ENABLED |
||||
#include "stm32f4xx_hal_dma.h" |
||||
#endif /* HAL_DMA_MODULE_ENABLED */ |
||||
|
||||
#ifdef HAL_CORTEX_MODULE_ENABLED |
||||
#include "stm32f4xx_hal_cortex.h" |
||||
#endif /* HAL_CORTEX_MODULE_ENABLED */ |
||||
|
||||
#ifdef HAL_ADC_MODULE_ENABLED |
||||
#include "stm32f4xx_hal_adc.h" |
||||
#endif /* HAL_ADC_MODULE_ENABLED */ |
||||
|
||||
#ifdef HAL_CAN_MODULE_ENABLED |
||||
#include "stm32f4xx_hal_can.h" |
||||
#endif /* HAL_CAN_MODULE_ENABLED */ |
||||
|
||||
#ifdef HAL_CAN_LEGACY_MODULE_ENABLED |
||||
#include "stm32f4xx_hal_can_legacy.h" |
||||
#endif /* HAL_CAN_LEGACY_MODULE_ENABLED */ |
||||
|
||||
#ifdef HAL_CRC_MODULE_ENABLED |
||||
#include "stm32f4xx_hal_crc.h" |
||||
#endif /* HAL_CRC_MODULE_ENABLED */ |
||||
|
||||
#ifdef HAL_CRYP_MODULE_ENABLED |
||||
#include "stm32f4xx_hal_cryp.h" |
||||
#endif /* HAL_CRYP_MODULE_ENABLED */ |
||||
|
||||
#ifdef HAL_DMA2D_MODULE_ENABLED |
||||
#include "stm32f4xx_hal_dma2d.h" |
||||
#endif /* HAL_DMA2D_MODULE_ENABLED */ |
||||
|
||||
#ifdef HAL_DAC_MODULE_ENABLED |
||||
#include "stm32f4xx_hal_dac.h" |
||||
#endif /* HAL_DAC_MODULE_ENABLED */ |
||||
|
||||
#ifdef HAL_DCMI_MODULE_ENABLED |
||||
#include "stm32f4xx_hal_dcmi.h" |
||||
#endif /* HAL_DCMI_MODULE_ENABLED */ |
||||
|
||||
#ifdef HAL_ETH_MODULE_ENABLED |
||||
#include "stm32f4xx_hal_eth.h" |
||||
#endif /* HAL_ETH_MODULE_ENABLED */ |
||||
|
||||
#ifdef HAL_FLASH_MODULE_ENABLED |
||||
#include "stm32f4xx_hal_flash.h" |
||||
#endif /* HAL_FLASH_MODULE_ENABLED */ |
||||
|
||||
#ifdef HAL_SRAM_MODULE_ENABLED |
||||
#include "stm32f4xx_hal_sram.h" |
||||
#endif /* HAL_SRAM_MODULE_ENABLED */ |
||||
|
||||
#ifdef HAL_NOR_MODULE_ENABLED |
||||
#include "stm32f4xx_hal_nor.h" |
||||
#endif /* HAL_NOR_MODULE_ENABLED */ |
||||
|
||||
#ifdef HAL_NAND_MODULE_ENABLED |
||||
#include "stm32f4xx_hal_nand.h" |
||||
#endif /* HAL_NAND_MODULE_ENABLED */ |
||||
|
||||
#ifdef HAL_PCCARD_MODULE_ENABLED |
||||
#include "stm32f4xx_hal_pccard.h" |
||||
#endif /* HAL_PCCARD_MODULE_ENABLED */ |
||||
|
||||
#ifdef HAL_SDRAM_MODULE_ENABLED |
||||
#include "stm32f4xx_hal_sdram.h" |
||||
#endif /* HAL_SDRAM_MODULE_ENABLED */ |
||||
|
||||
#ifdef HAL_HASH_MODULE_ENABLED |
||||
#include "stm32f4xx_hal_hash.h" |
||||
#endif /* HAL_HASH_MODULE_ENABLED */ |
||||
|
||||
#ifdef HAL_I2C_MODULE_ENABLED |
||||
#include "stm32f4xx_hal_i2c.h" |
||||
#endif /* HAL_I2C_MODULE_ENABLED */ |
||||
|
||||
#ifdef HAL_SMBUS_MODULE_ENABLED |
||||
#include "stm32f4xx_hal_smbus.h" |
||||
#endif /* HAL_SMBUS_MODULE_ENABLED */ |
||||
|
||||
#ifdef HAL_I2S_MODULE_ENABLED |
||||
#include "stm32f4xx_hal_i2s.h" |
||||
#endif /* HAL_I2S_MODULE_ENABLED */ |
||||
|
||||
#ifdef HAL_IWDG_MODULE_ENABLED |
||||
#include "stm32f4xx_hal_iwdg.h" |
||||
#endif /* HAL_IWDG_MODULE_ENABLED */ |
||||
|
||||
#ifdef HAL_LTDC_MODULE_ENABLED |
||||
#include "stm32f4xx_hal_ltdc.h" |
||||
#endif /* HAL_LTDC_MODULE_ENABLED */ |
||||
|
||||
#ifdef HAL_PWR_MODULE_ENABLED |
||||
#include "stm32f4xx_hal_pwr.h" |
||||
#endif /* HAL_PWR_MODULE_ENABLED */ |
||||
|
||||
#ifdef HAL_RNG_MODULE_ENABLED |
||||
#include "stm32f4xx_hal_rng.h" |
||||
#endif /* HAL_RNG_MODULE_ENABLED */ |
||||
|
||||
#ifdef HAL_RTC_MODULE_ENABLED |
||||
#include "stm32f4xx_hal_rtc.h" |
||||
#endif /* HAL_RTC_MODULE_ENABLED */ |
||||
|
||||
#ifdef HAL_SAI_MODULE_ENABLED |
||||
#include "stm32f4xx_hal_sai.h" |
||||
#endif /* HAL_SAI_MODULE_ENABLED */ |
||||
|
||||
#ifdef HAL_SD_MODULE_ENABLED |
||||
#include "stm32f4xx_hal_sd.h" |
||||
#endif /* HAL_SD_MODULE_ENABLED */ |
||||
|
||||
#ifdef HAL_SPI_MODULE_ENABLED |
||||
#include "stm32f4xx_hal_spi.h" |
||||
#endif /* HAL_SPI_MODULE_ENABLED */ |
||||
|
||||
#ifdef HAL_TIM_MODULE_ENABLED |
||||
#include "stm32f4xx_hal_tim.h" |
||||
#endif /* HAL_TIM_MODULE_ENABLED */ |
||||
|
||||
#ifdef HAL_UART_MODULE_ENABLED |
||||
#include "stm32f4xx_hal_uart.h" |
||||
#endif /* HAL_UART_MODULE_ENABLED */ |
||||
|
||||
#ifdef HAL_USART_MODULE_ENABLED |
||||
#include "stm32f4xx_hal_usart.h" |
||||
#endif /* HAL_USART_MODULE_ENABLED */ |
||||
|
||||
#ifdef HAL_IRDA_MODULE_ENABLED |
||||
#include "stm32f4xx_hal_irda.h" |
||||
#endif /* HAL_IRDA_MODULE_ENABLED */ |
||||
|
||||
#ifdef HAL_SMARTCARD_MODULE_ENABLED |
||||
#include "stm32f4xx_hal_smartcard.h" |
||||
#endif /* HAL_SMARTCARD_MODULE_ENABLED */ |
||||
|
||||
#ifdef HAL_WWDG_MODULE_ENABLED |
||||
#include "stm32f4xx_hal_wwdg.h" |
||||
#endif /* HAL_WWDG_MODULE_ENABLED */ |
||||
|
||||
#ifdef HAL_PCD_MODULE_ENABLED |
||||
#include "stm32f4xx_hal_pcd.h" |
||||
#endif /* HAL_PCD_MODULE_ENABLED */ |
||||
|
||||
#ifdef HAL_HCD_MODULE_ENABLED |
||||
#include "stm32f4xx_hal_hcd.h" |
||||
#endif /* HAL_HCD_MODULE_ENABLED */ |
||||
|
||||
#ifdef HAL_DSI_MODULE_ENABLED |
||||
#include "stm32f4xx_hal_dsi.h" |
||||
#endif /* HAL_DSI_MODULE_ENABLED */ |
||||
|
||||
#ifdef HAL_QSPI_MODULE_ENABLED |
||||
#include "stm32f4xx_hal_qspi.h" |
||||
#endif /* HAL_QSPI_MODULE_ENABLED */ |
||||
|
||||
#ifdef HAL_CEC_MODULE_ENABLED |
||||
#include "stm32f4xx_hal_cec.h" |
||||
#endif /* HAL_CEC_MODULE_ENABLED */ |
||||
|
||||
#ifdef HAL_FMPI2C_MODULE_ENABLED |
||||
#include "stm32f4xx_hal_fmpi2c.h" |
||||
#endif /* HAL_FMPI2C_MODULE_ENABLED */ |
||||
|
||||
#ifdef HAL_FMPSMBUS_MODULE_ENABLED |
||||
#include "stm32f4xx_hal_fmpsmbus.h" |
||||
#endif /* HAL_FMPSMBUS_MODULE_ENABLED */ |
||||
|
||||
#ifdef HAL_SPDIFRX_MODULE_ENABLED |
||||
#include "stm32f4xx_hal_spdifrx.h" |
||||
#endif /* HAL_SPDIFRX_MODULE_ENABLED */ |
||||
|
||||
#ifdef HAL_DFSDM_MODULE_ENABLED |
||||
#include "stm32f4xx_hal_dfsdm.h" |
||||
#endif /* HAL_DFSDM_MODULE_ENABLED */ |
||||
|
||||
#ifdef HAL_LPTIM_MODULE_ENABLED |
||||
#include "stm32f4xx_hal_lptim.h" |
||||
#endif /* HAL_LPTIM_MODULE_ENABLED */ |
||||
|
||||
#ifdef HAL_MMC_MODULE_ENABLED |
||||
#include "stm32f4xx_hal_mmc.h" |
||||
#endif /* HAL_MMC_MODULE_ENABLED */ |
||||
|
||||
/* Exported macro ------------------------------------------------------------*/ |
||||
#ifdef USE_FULL_ASSERT |
||||
/**
|
||||
* @brief The assert_param macro is used for function's parameters check. |
||||
* @param expr If expr is false, it calls assert_failed function |
||||
* which reports the name of the source file and the source |
||||
* line number of the call that failed. |
||||
* If expr is true, it returns no value. |
||||
* @retval None |
||||
*/ |
||||
#define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) |
||||
/* Exported functions ------------------------------------------------------- */ |
||||
void assert_failed(uint8_t* file, uint32_t line); |
||||
#else |
||||
#define assert_param(expr) ((void)0U) |
||||
#endif /* USE_FULL_ASSERT */ |
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
#endif /* __STM32F4xx_HAL_CONF_H */ |
@ -0,0 +1,68 @@
|
||||
/* USER CODE BEGIN Header */ |
||||
/**
|
||||
****************************************************************************** |
||||
* @file stm32f4xx_it.h |
||||
* @brief This file contains the headers of the interrupt handlers. |
||||
****************************************************************************** |
||||
* @attention |
||||
* |
||||
* Copyright (c) 2022 STMicroelectronics. |
||||
* All rights reserved. |
||||
* |
||||
* This software is licensed under terms that can be found in the LICENSE file |
||||
* in the root directory of this software component. |
||||
* If no LICENSE file comes with this software, it is provided AS-IS. |
||||
* |
||||
****************************************************************************** |
||||
*/ |
||||
/* USER CODE END Header */ |
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/ |
||||
#ifndef __STM32F4xx_IT_H |
||||
#define __STM32F4xx_IT_H |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
/* Private includes ----------------------------------------------------------*/ |
||||
/* USER CODE BEGIN Includes */ |
||||
|
||||
/* USER CODE END Includes */ |
||||
|
||||
/* Exported types ------------------------------------------------------------*/ |
||||
/* USER CODE BEGIN ET */ |
||||
|
||||
/* USER CODE END ET */ |
||||
|
||||
/* Exported constants --------------------------------------------------------*/ |
||||
/* USER CODE BEGIN EC */ |
||||
|
||||
/* USER CODE END EC */ |
||||
|
||||
/* Exported macro ------------------------------------------------------------*/ |
||||
/* USER CODE BEGIN EM */ |
||||
|
||||
/* USER CODE END EM */ |
||||
|
||||
/* Exported functions prototypes ---------------------------------------------*/ |
||||
void NMI_Handler(void); |
||||
void HardFault_Handler(void); |
||||
void MemManage_Handler(void); |
||||
void BusFault_Handler(void); |
||||
void UsageFault_Handler(void); |
||||
void DebugMon_Handler(void); |
||||
void TIM6_DAC_IRQHandler(void); |
||||
void OTG_FS_IRQHandler(void); |
||||
void LTDC_IRQHandler(void); |
||||
void DMA2D_IRQHandler(void); |
||||
void DSI_IRQHandler(void); |
||||
/* USER CODE BEGIN EFP */ |
||||
|
||||
/* USER CODE END EFP */ |
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
#endif /* __STM32F4xx_IT_H */ |
@ -0,0 +1,52 @@
|
||||
/* USER CODE BEGIN Header */ |
||||
/**
|
||||
****************************************************************************** |
||||
* @file tim.h |
||||
* @brief This file contains all the function prototypes for |
||||
* the tim.c file |
||||
****************************************************************************** |
||||
* @attention |
||||
* |
||||
* Copyright (c) 2022 STMicroelectronics. |
||||
* All rights reserved. |
||||
* |
||||
* This software is licensed under terms that can be found in the LICENSE file |
||||
* in the root directory of this software component. |
||||
* If no LICENSE file comes with this software, it is provided AS-IS. |
||||
* |
||||
****************************************************************************** |
||||
*/ |
||||
/* USER CODE END Header */ |
||||
/* Define to prevent recursive inclusion -------------------------------------*/ |
||||
#ifndef __TIM_H__ |
||||
#define __TIM_H__ |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include "main.h" |
||||
|
||||
/* USER CODE BEGIN Includes */ |
||||
|
||||
/* USER CODE END Includes */ |
||||
|
||||
extern TIM_HandleTypeDef htim1; |
||||
|
||||
/* USER CODE BEGIN Private defines */ |
||||
|
||||
/* USER CODE END Private defines */ |
||||
|
||||
void MX_TIM1_Init(void); |
||||
|
||||
/* USER CODE BEGIN Prototypes */ |
||||
|
||||
/* USER CODE END Prototypes */ |
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
#endif /* __TIM_H__ */ |
||||
|
@ -0,0 +1,55 @@
|
||||
/* USER CODE BEGIN Header */ |
||||
/**
|
||||
****************************************************************************** |
||||
* @file usart.h |
||||
* @brief This file contains all the function prototypes for |
||||
* the usart.c file |
||||
****************************************************************************** |
||||
* @attention |
||||
* |
||||
* Copyright (c) 2022 STMicroelectronics. |
||||
* All rights reserved. |
||||
* |
||||
* This software is licensed under terms that can be found in the LICENSE file |
||||
* in the root directory of this software component. |
||||
* If no LICENSE file comes with this software, it is provided AS-IS. |
||||
* |
||||
****************************************************************************** |
||||
*/ |
||||
/* USER CODE END Header */ |
||||
/* Define to prevent recursive inclusion -------------------------------------*/ |
||||
#ifndef __USART_H__ |
||||
#define __USART_H__ |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include "main.h" |
||||
|
||||
/* USER CODE BEGIN Includes */ |
||||
|
||||
/* USER CODE END Includes */ |
||||
|
||||
extern UART_HandleTypeDef huart3; |
||||
|
||||
extern UART_HandleTypeDef huart6; |
||||
|
||||
/* USER CODE BEGIN Private defines */ |
||||
|
||||
/* USER CODE END Private defines */ |
||||
|
||||
void MX_USART3_UART_Init(void); |
||||
void MX_USART6_UART_Init(void); |
||||
|
||||
/* USER CODE BEGIN Prototypes */ |
||||
|
||||
/* USER CODE END Prototypes */ |
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
#endif /* __USART_H__ */ |
||||
|
@ -0,0 +1,85 @@
|
||||
/* USER CODE BEGIN Header */ |
||||
/**
|
||||
****************************************************************************** |
||||
* @file crc.c |
||||
* @brief This file provides code for the configuration |
||||
* of the CRC instances. |
||||
****************************************************************************** |
||||
* @attention |
||||
* |
||||
* Copyright (c) 2022 STMicroelectronics. |
||||
* All rights reserved. |
||||
* |
||||
* This software is licensed under terms that can be found in the LICENSE file |
||||
* in the root directory of this software component. |
||||
* If no LICENSE file comes with this software, it is provided AS-IS. |
||||
* |
||||
****************************************************************************** |
||||
*/ |
||||
/* USER CODE END Header */ |
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include "crc.h" |
||||
|
||||
/* USER CODE BEGIN 0 */ |
||||
|
||||
/* USER CODE END 0 */ |
||||
|
||||
CRC_HandleTypeDef hcrc; |
||||
|
||||
/* CRC init function */ |
||||
void MX_CRC_Init(void) |
||||
{ |
||||
|
||||
/* USER CODE BEGIN CRC_Init 0 */ |
||||
|
||||
/* USER CODE END CRC_Init 0 */ |
||||
|
||||
/* USER CODE BEGIN CRC_Init 1 */ |
||||
|
||||
/* USER CODE END CRC_Init 1 */ |
||||
hcrc.Instance = CRC; |
||||
if (HAL_CRC_Init(&hcrc) != HAL_OK) |
||||
{ |
||||
Error_Handler(); |
||||
} |
||||
/* USER CODE BEGIN CRC_Init 2 */ |
||||
|
||||
/* USER CODE END CRC_Init 2 */ |
||||
|
||||
} |
||||
|
||||
void HAL_CRC_MspInit(CRC_HandleTypeDef* crcHandle) |
||||
{ |
||||
|
||||
if(crcHandle->Instance==CRC) |
||||
{ |
||||
/* USER CODE BEGIN CRC_MspInit 0 */ |
||||
|
||||
/* USER CODE END CRC_MspInit 0 */ |
||||
/* CRC clock enable */ |
||||
__HAL_RCC_CRC_CLK_ENABLE(); |
||||
/* USER CODE BEGIN CRC_MspInit 1 */ |
||||
|
||||
/* USER CODE END CRC_MspInit 1 */ |
||||
} |
||||
} |
||||
|
||||
void HAL_CRC_MspDeInit(CRC_HandleTypeDef* crcHandle) |
||||
{ |
||||
|
||||
if(crcHandle->Instance==CRC) |
||||
{ |
||||
/* USER CODE BEGIN CRC_MspDeInit 0 */ |
||||
|
||||
/* USER CODE END CRC_MspDeInit 0 */ |
||||
/* Peripheral clock disable */ |
||||
__HAL_RCC_CRC_CLK_DISABLE(); |
||||
/* USER CODE BEGIN CRC_MspDeInit 1 */ |
||||
|
||||
/* USER CODE END CRC_MspDeInit 1 */ |
||||
} |
||||
} |
||||
|
||||
/* USER CODE BEGIN 1 */ |
||||
|
||||
/* USER CODE END 1 */ |
@ -0,0 +1,103 @@
|
||||
/* USER CODE BEGIN Header */ |
||||
/**
|
||||
****************************************************************************** |
||||
* @file dma2d.c |
||||
* @brief This file provides code for the configuration |
||||
* of the DMA2D instances. |
||||
****************************************************************************** |
||||
* @attention |
||||
* |
||||
* Copyright (c) 2022 STMicroelectronics. |
||||
* All rights reserved. |
||||
* |
||||
* This software is licensed under terms that can be found in the LICENSE file |
||||
* in the root directory of this software component. |
||||
* If no LICENSE file comes with this software, it is provided AS-IS. |
||||
* |
||||
****************************************************************************** |
||||
*/ |
||||
/* USER CODE END Header */ |
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include "dma2d.h" |
||||
|
||||
/* USER CODE BEGIN 0 */ |
||||
|
||||
/* USER CODE END 0 */ |
||||
|
||||
DMA2D_HandleTypeDef hdma2d; |
||||
|
||||
/* DMA2D init function */ |
||||
void MX_DMA2D_Init(void) |
||||
{ |
||||
|
||||
/* USER CODE BEGIN DMA2D_Init 0 */ |
||||
|
||||
/* USER CODE END DMA2D_Init 0 */ |
||||
|
||||
/* USER CODE BEGIN DMA2D_Init 1 */ |
||||
|
||||
/* USER CODE END DMA2D_Init 1 */ |
||||
hdma2d.Instance = DMA2D; |
||||
hdma2d.Init.Mode = DMA2D_M2M; |
||||
hdma2d.Init.ColorMode = DMA2D_OUTPUT_ARGB8888; |
||||
hdma2d.Init.OutputOffset = 0; |
||||
hdma2d.LayerCfg[1].InputOffset = 0; |
||||
hdma2d.LayerCfg[1].InputColorMode = DMA2D_INPUT_ARGB8888; |
||||
hdma2d.LayerCfg[1].AlphaMode = DMA2D_NO_MODIF_ALPHA; |
||||
hdma2d.LayerCfg[1].InputAlpha = 0; |
||||
if (HAL_DMA2D_Init(&hdma2d) != HAL_OK) |
||||
{ |
||||
Error_Handler(); |
||||
} |
||||
if (HAL_DMA2D_ConfigLayer(&hdma2d, 1) != HAL_OK) |
||||
{ |
||||
Error_Handler(); |
||||
} |
||||
/* USER CODE BEGIN DMA2D_Init 2 */ |
||||
|
||||
/* USER CODE END DMA2D_Init 2 */ |
||||
|
||||
} |
||||
|
||||
void HAL_DMA2D_MspInit(DMA2D_HandleTypeDef* dma2dHandle) |
||||
{ |
||||
|
||||
if(dma2dHandle->Instance==DMA2D) |
||||
{ |
||||
/* USER CODE BEGIN DMA2D_MspInit 0 */ |
||||
|
||||
/* USER CODE END DMA2D_MspInit 0 */ |
||||
/* DMA2D clock enable */ |
||||
__HAL_RCC_DMA2D_CLK_ENABLE(); |
||||
|
||||
/* DMA2D interrupt Init */ |
||||
HAL_NVIC_SetPriority(DMA2D_IRQn, 5, 0); |
||||
HAL_NVIC_EnableIRQ(DMA2D_IRQn); |
||||
/* USER CODE BEGIN DMA2D_MspInit 1 */ |
||||
|
||||
/* USER CODE END DMA2D_MspInit 1 */ |
||||
} |
||||
} |
||||
|
||||
void HAL_DMA2D_MspDeInit(DMA2D_HandleTypeDef* dma2dHandle) |
||||
{ |
||||
|
||||
if(dma2dHandle->Instance==DMA2D) |
||||
{ |
||||
/* USER CODE BEGIN DMA2D_MspDeInit 0 */ |
||||
|
||||
/* USER CODE END DMA2D_MspDeInit 0 */ |
||||
/* Peripheral clock disable */ |
||||
__HAL_RCC_DMA2D_CLK_DISABLE(); |
||||
|
||||
/* DMA2D interrupt Deinit */ |
||||
HAL_NVIC_DisableIRQ(DMA2D_IRQn); |
||||
/* USER CODE BEGIN DMA2D_MspDeInit 1 */ |
||||
|
||||
/* USER CODE END DMA2D_MspDeInit 1 */ |
||||
} |
||||
} |
||||
|
||||
/* USER CODE BEGIN 1 */ |
||||
|
||||
/* USER CODE END 1 */ |
@ -0,0 +1,193 @@
|
||||
/* USER CODE BEGIN Header */ |
||||
/**
|
||||
****************************************************************************** |
||||
* @file dsihost.c |
||||
* @brief This file provides code for the configuration |
||||
* of the DSIHOST instances. |
||||
****************************************************************************** |
||||
* @attention |
||||
* |
||||
* Copyright (c) 2022 STMicroelectronics. |
||||
* All rights reserved. |
||||
* |
||||
* This software is licensed under terms that can be found in the LICENSE file |
||||
* in the root directory of this software component. |
||||
* If no LICENSE file comes with this software, it is provided AS-IS. |
||||
* |
||||
****************************************************************************** |
||||
*/ |
||||
/* USER CODE END Header */ |
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include "dsihost.h" |
||||
|
||||
/* USER CODE BEGIN 0 */ |
||||
|
||||
/* USER CODE END 0 */ |
||||
|
||||
DSI_HandleTypeDef hdsi; |
||||
|
||||
/* DSIHOST init function */ |
||||
|
||||
void MX_DSIHOST_DSI_Init(void) |
||||
{ |
||||
|
||||
/* USER CODE BEGIN DSIHOST_Init 0 */ |
||||
|
||||
/* USER CODE END DSIHOST_Init 0 */ |
||||
|
||||
DSI_PLLInitTypeDef PLLInit = {0}; |
||||
DSI_HOST_TimeoutTypeDef HostTimeouts = {0}; |
||||
DSI_PHY_TimerTypeDef PhyTimings = {0}; |
||||
DSI_LPCmdTypeDef LPCmd = {0}; |
||||
DSI_CmdCfgTypeDef CmdCfg = {0}; |
||||
|
||||
/* USER CODE BEGIN DSIHOST_Init 1 */ |
||||
|
||||
/* USER CODE END DSIHOST_Init 1 */ |
||||
hdsi.Instance = DSI; |
||||
hdsi.Init.AutomaticClockLaneControl = DSI_AUTO_CLK_LANE_CTRL_DISABLE; |
||||
hdsi.Init.TXEscapeCkdiv = 4; |
||||
hdsi.Init.NumberOfLanes = DSI_TWO_DATA_LANES; |
||||
PLLInit.PLLNDIV = 125; |
||||
PLLInit.PLLIDF = DSI_PLL_IN_DIV2; |
||||
PLLInit.PLLODF = DSI_PLL_OUT_DIV1; |
||||
if (HAL_DSI_Init(&hdsi, &PLLInit) != HAL_OK) |
||||
{ |
||||
Error_Handler(); |
||||
} |
||||
HostTimeouts.TimeoutCkdiv = 1; |
||||
HostTimeouts.HighSpeedTransmissionTimeout = 0; |
||||
HostTimeouts.LowPowerReceptionTimeout = 0; |
||||
HostTimeouts.HighSpeedReadTimeout = 0; |
||||
HostTimeouts.LowPowerReadTimeout = 0; |
||||
HostTimeouts.HighSpeedWriteTimeout = 0; |
||||
HostTimeouts.HighSpeedWritePrespMode = DSI_HS_PM_DISABLE; |
||||
HostTimeouts.LowPowerWriteTimeout = 0; |
||||
HostTimeouts.BTATimeout = 0; |
||||
if (HAL_DSI_ConfigHostTimeouts(&hdsi, &HostTimeouts) != HAL_OK) |
||||
{ |
||||
Error_Handler(); |
||||
} |
||||
PhyTimings.ClockLaneHS2LPTime = 28; |
||||
PhyTimings.ClockLaneLP2HSTime = 33; |
||||
PhyTimings.DataLaneHS2LPTime = 15; |
||||
PhyTimings.DataLaneLP2HSTime = 25; |
||||
PhyTimings.DataLaneMaxReadTime = 0; |
||||
PhyTimings.StopWaitTime = 10; |
||||
if (HAL_DSI_ConfigPhyTimer(&hdsi, &PhyTimings) != HAL_OK) |
||||
{ |
||||
Error_Handler(); |
||||
} |
||||
if (HAL_DSI_ConfigFlowControl(&hdsi, DSI_FLOW_CONTROL_BTA) != HAL_OK) |
||||
{ |
||||
Error_Handler(); |
||||
} |
||||
if (HAL_DSI_SetLowPowerRXFilter(&hdsi, 10000) != HAL_OK) |
||||
{ |
||||
Error_Handler(); |
||||
} |
||||
if (HAL_DSI_ConfigErrorMonitor(&hdsi, HAL_DSI_ERROR_NONE) != HAL_OK) |
||||
{ |
||||
Error_Handler(); |
||||
} |
||||
LPCmd.LPGenShortWriteNoP = DSI_LP_GSW0P_ENABLE; |
||||
LPCmd.LPGenShortWriteOneP = DSI_LP_GSW1P_ENABLE; |
||||
LPCmd.LPGenShortWriteTwoP = DSI_LP_GSW2P_ENABLE; |
||||
LPCmd.LPGenShortReadNoP = DSI_LP_GSR0P_ENABLE; |
||||
LPCmd.LPGenShortReadOneP = DSI_LP_GSR1P_ENABLE; |
||||
LPCmd.LPGenShortReadTwoP = DSI_LP_GSR2P_ENABLE; |
||||
LPCmd.LPGenLongWrite = DSI_LP_GLW_ENABLE; |
||||
LPCmd.LPDcsShortWriteNoP = DSI_LP_DSW0P_ENABLE; |
||||
LPCmd.LPDcsShortWriteOneP = DSI_LP_DSW1P_ENABLE; |
||||
LPCmd.LPDcsShortReadNoP = DSI_LP_DSR0P_ENABLE; |
||||
LPCmd.LPDcsLongWrite = DSI_LP_DLW_ENABLE; |
||||
LPCmd.LPMaxReadPacket = DSI_LP_MRDP_ENABLE; |
||||
LPCmd.AcknowledgeRequest = DSI_ACKNOWLEDGE_DISABLE; |
||||
if (HAL_DSI_ConfigCommand(&hdsi, &LPCmd) != HAL_OK) |
||||
{ |
||||
Error_Handler(); |
||||
} |
||||
CmdCfg.VirtualChannelID = 0; |
||||
CmdCfg.ColorCoding = DSI_RGB888; |
||||
CmdCfg.CommandSize = 200; |
||||
CmdCfg.TearingEffectSource = DSI_TE_EXTERNAL; |
||||
CmdCfg.TearingEffectPolarity = DSI_TE_RISING_EDGE; |
||||
CmdCfg.HSPolarity = DSI_HSYNC_ACTIVE_LOW; |
||||
CmdCfg.VSPolarity = DSI_VSYNC_ACTIVE_LOW; |
||||
CmdCfg.DEPolarity = DSI_DATA_ENABLE_ACTIVE_HIGH; |
||||
CmdCfg.VSyncPol = DSI_VSYNC_FALLING; |
||||
CmdCfg.AutomaticRefresh = DSI_AR_ENABLE; |
||||
CmdCfg.TEAcknowledgeRequest = DSI_TE_ACKNOWLEDGE_ENABLE; |
||||
if (HAL_DSI_ConfigAdaptedCommandMode(&hdsi, &CmdCfg) != HAL_OK) |
||||
{ |
||||
Error_Handler(); |
||||
} |
||||
if (HAL_DSI_SetGenericVCID(&hdsi, 0) != HAL_OK) |
||||
{ |
||||
Error_Handler(); |
||||
} |
||||
/* USER CODE BEGIN DSIHOST_Init 2 */ |
||||
|
||||
/* USER CODE END DSIHOST_Init 2 */ |
||||
|
||||
} |
||||
|
||||
void HAL_DSI_MspInit(DSI_HandleTypeDef* dsiHandle) |
||||
{ |
||||
|
||||
GPIO_InitTypeDef GPIO_InitStruct = {0}; |
||||
if(dsiHandle->Instance==DSI) |
||||
{ |
||||
/* USER CODE BEGIN DSI_MspInit 0 */ |
||||
|
||||
/* USER CODE END DSI_MspInit 0 */ |
||||
/* DSI clock enable */ |
||||
__HAL_RCC_DSI_CLK_ENABLE(); |
||||
|
||||
__HAL_RCC_GPIOJ_CLK_ENABLE(); |
||||
/**DSIHOST GPIO Configuration
|
||||
PJ2 ------> DSIHOST_TE |
||||
*/ |
||||
GPIO_InitStruct.Pin = DSI_TE_Pin; |
||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; |
||||
GPIO_InitStruct.Pull = GPIO_NOPULL; |
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; |
||||
GPIO_InitStruct.Alternate = GPIO_AF13_DSI; |
||||
HAL_GPIO_Init(DSI_TE_GPIO_Port, &GPIO_InitStruct); |
||||
|
||||
/* DSI interrupt Init */ |
||||
HAL_NVIC_SetPriority(DSI_IRQn, 5, 0); |
||||
HAL_NVIC_EnableIRQ(DSI_IRQn); |
||||
/* USER CODE BEGIN DSI_MspInit 1 */ |
||||
|
||||
/* USER CODE END DSI_MspInit 1 */ |
||||
} |
||||
} |
||||
|
||||
void HAL_DSI_MspDeInit(DSI_HandleTypeDef* dsiHandle) |
||||
{ |
||||
|
||||
if(dsiHandle->Instance==DSI) |
||||
{ |
||||
/* USER CODE BEGIN DSI_MspDeInit 0 */ |
||||
|
||||
/* USER CODE END DSI_MspDeInit 0 */ |
||||
/* Peripheral clock disable */ |
||||
__HAL_RCC_DSI_CLK_DISABLE(); |
||||
|
||||
/**DSIHOST GPIO Configuration
|
||||
PJ2 ------> DSIHOST_TE |
||||
*/ |
||||
HAL_GPIO_DeInit(DSI_TE_GPIO_Port, DSI_TE_Pin); |
||||
|
||||
/* DSI interrupt Deinit */ |
||||
HAL_NVIC_DisableIRQ(DSI_IRQn); |
||||
/* USER CODE BEGIN DSI_MspDeInit 1 */ |
||||
|
||||
/* USER CODE END DSI_MspDeInit 1 */ |
||||
} |
||||
} |
||||
|
||||
/* USER CODE BEGIN 1 */ |
||||
|
||||
/* USER CODE END 1 */ |
@ -0,0 +1,353 @@
|
||||
/* USER CODE BEGIN Header */ |
||||
/**
|
||||
****************************************************************************** |
||||
* File Name : FMC.c |
||||
* Description : This file provides code for the configuration |
||||
* of the FMC peripheral. |
||||
****************************************************************************** |
||||
* @attention |
||||
* |
||||
* Copyright (c) 2022 STMicroelectronics. |
||||
* All rights reserved. |
||||
* |
||||
* This software is licensed under terms that can be found in the LICENSE file |
||||
* in the root directory of this software component. |
||||
* If no LICENSE file comes with this software, it is provided AS-IS. |
||||
* |
||||
****************************************************************************** |
||||
*/ |
||||
/* USER CODE END Header */ |
||||
|
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include "fmc.h" |
||||
|
||||
/* USER CODE BEGIN 0 */ |
||||
|
||||
/* USER CODE END 0 */ |
||||
|
||||
SDRAM_HandleTypeDef hsdram1; |
||||
|
||||
/* FMC initialization function */ |
||||
void MX_FMC_Init(void) |
||||
{ |
||||
/* USER CODE BEGIN FMC_Init 0 */ |
||||
|
||||
/* USER CODE END FMC_Init 0 */ |
||||
|
||||
FMC_SDRAM_TimingTypeDef SdramTiming = {0}; |
||||
|
||||
/* USER CODE BEGIN FMC_Init 1 */ |
||||
|
||||
/* USER CODE END FMC_Init 1 */ |
||||
|
||||
/** Perform the SDRAM1 memory initialization sequence
|
||||
*/ |
||||
hsdram1.Instance = FMC_SDRAM_DEVICE; |
||||
/* hsdram1.Init */ |
||||
hsdram1.Init.SDBank = FMC_SDRAM_BANK1; |
||||
hsdram1.Init.ColumnBitsNumber = FMC_SDRAM_COLUMN_BITS_NUM_8; |
||||
hsdram1.Init.RowBitsNumber = FMC_SDRAM_ROW_BITS_NUM_12; |
||||
hsdram1.Init.MemoryDataWidth = FMC_SDRAM_MEM_BUS_WIDTH_32; |
||||
hsdram1.Init.InternalBankNumber = FMC_SDRAM_INTERN_BANKS_NUM_4; |
||||
hsdram1.Init.CASLatency = FMC_SDRAM_CAS_LATENCY_3; |
||||
hsdram1.Init.WriteProtection = FMC_SDRAM_WRITE_PROTECTION_DISABLE; |
||||
hsdram1.Init.SDClockPeriod = FMC_SDRAM_CLOCK_PERIOD_2; |
||||
hsdram1.Init.ReadBurst = FMC_SDRAM_RBURST_ENABLE; |
||||
hsdram1.Init.ReadPipeDelay = FMC_SDRAM_RPIPE_DELAY_0; |
||||
/* SdramTiming */ |
||||
SdramTiming.LoadToActiveDelay = 2; |
||||
SdramTiming.ExitSelfRefreshDelay = 7; |
||||
SdramTiming.SelfRefreshTime = 4; |
||||
SdramTiming.RowCycleDelay = 7; |
||||
SdramTiming.WriteRecoveryTime = 3; |
||||
SdramTiming.RPDelay = 2; |
||||
SdramTiming.RCDDelay = 2; |
||||
|
||||
if (HAL_SDRAM_Init(&hsdram1, &SdramTiming) != HAL_OK) |
||||
{ |
||||
Error_Handler( ); |
||||
} |
||||
|
||||
/* USER CODE BEGIN FMC_Init 2 */ |
||||
|
||||
/* USER CODE END FMC_Init 2 */ |
||||
} |
||||
|
||||
static uint32_t FMC_Initialized = 0; |
||||
|
||||
static void HAL_FMC_MspInit(void){ |
||||
/* USER CODE BEGIN FMC_MspInit 0 */ |
||||
|
||||
/* USER CODE END FMC_MspInit 0 */ |
||||
GPIO_InitTypeDef GPIO_InitStruct = {0}; |
||||
if (FMC_Initialized) { |
||||
return; |
||||
} |
||||
FMC_Initialized = 1; |
||||
|
||||
/* Peripheral clock enable */ |
||||
__HAL_RCC_FMC_CLK_ENABLE(); |
||||
|
||||
/** FMC GPIO Configuration
|
||||
PE1 ------> FMC_NBL1 |
||||
PE0 ------> FMC_NBL0 |
||||
PG15 ------> FMC_SDNCAS |
||||
PD0 ------> FMC_D2 |
||||
PI4 ------> FMC_NBL2 |
||||
PD1 ------> FMC_D3 |
||||
PI3 ------> FMC_D27 |
||||
PI2 ------> FMC_D26 |
||||
PF0 ------> FMC_A0 |
||||
PI5 ------> FMC_NBL3 |
||||
PI7 ------> FMC_D29 |
||||
PI10 ------> FMC_D31 |
||||
PI6 ------> FMC_D28 |
||||
PH15 ------> FMC_D23 |
||||
PI1 ------> FMC_D25 |
||||
PF1 ------> FMC_A1 |
||||
PI9 ------> FMC_D30 |
||||
PH13 ------> FMC_D21 |
||||
PH14 ------> FMC_D22 |
||||
PI0 ------> FMC_D24 |
||||
PF2 ------> FMC_A2 |
||||
PF3 ------> FMC_A3 |
||||
PG8 ------> FMC_SDCLK |
||||
PF4 ------> FMC_A4 |
||||
PH3 ------> FMC_SDNE0 |
||||
PF5 ------> FMC_A5 |
||||
PH2 ------> FMC_SDCKE0 |
||||
PD15 ------> FMC_D1 |
||||
PD10 ------> FMC_D15 |
||||
PD14 ------> FMC_D0 |
||||
PD9 ------> FMC_D14 |
||||
PD8 ------> FMC_D13 |
||||
PC0 ------> FMC_SDNWE |
||||
PF12 ------> FMC_A6 |
||||
PG1 ------> FMC_A11 |
||||
PF15 ------> FMC_A9 |
||||
PH12 ------> FMC_D20 |
||||
PF13 ------> FMC_A7 |
||||
PG0 ------> FMC_A10 |
||||
PE8 ------> FMC_D5 |
||||
PG5 ------> FMC_BA1 |
||||
PG4 ------> FMC_BA0 |
||||
PH9 ------> FMC_D17 |
||||
PH11 ------> FMC_D19 |
||||
PF14 ------> FMC_A8 |
||||
PF11 ------> FMC_SDNRAS |
||||
PE9 ------> FMC_D6 |
||||
PE11 ------> FMC_D8 |
||||
PE14 ------> FMC_D11 |
||||
PH8 ------> FMC_D16 |
||||
PH10 ------> FMC_D18 |
||||
PE7 ------> FMC_D4 |
||||
PE10 ------> FMC_D7 |
||||
PE12 ------> FMC_D9 |
||||
PE15 ------> FMC_D12 |
||||
PE13 ------> FMC_D10 |
||||
*/ |
||||
/* GPIO_InitStruct */ |
||||
GPIO_InitStruct.Pin = FMC_NBL1_Pin|FMC_NBL0_Pin|D5_Pin|D6_Pin |
||||
|D8_Pin|D11_Pin|D4_Pin|D7_Pin |
||||
|D9_Pin|D12_Pin|D10_Pin; |
||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; |
||||
GPIO_InitStruct.Pull = GPIO_NOPULL; |
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; |
||||
GPIO_InitStruct.Alternate = GPIO_AF12_FMC; |
||||
|
||||
HAL_GPIO_Init(GPIOE, &GPIO_InitStruct); |
||||
|
||||
/* GPIO_InitStruct */ |
||||
GPIO_InitStruct.Pin = SDNCAS_Pin|SDCLK_Pin|A11_Pin|A10_Pin |
||||
|GPIO_PIN_5|GPIO_PIN_4; |
||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; |
||||
GPIO_InitStruct.Pull = GPIO_NOPULL; |
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; |
||||
GPIO_InitStruct.Alternate = GPIO_AF12_FMC; |
||||
|
||||
HAL_GPIO_Init(GPIOG, &GPIO_InitStruct); |
||||
|
||||
/* GPIO_InitStruct */ |
||||
GPIO_InitStruct.Pin = D2_Pin|D3_Pin|D1_Pin|D15_Pin |
||||
|D0_Pin|D14_Pin|D13_Pin; |
||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; |
||||
GPIO_InitStruct.Pull = GPIO_NOPULL; |
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; |
||||
GPIO_InitStruct.Alternate = GPIO_AF12_FMC; |
||||
|
||||
HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); |
||||
|
||||
/* GPIO_InitStruct */ |
||||
GPIO_InitStruct.Pin = FMC_NBL2_Pin|D27_Pin|D26_Pin|FMC_NBL3_Pin |
||||
|D29_Pin|D31_Pin|D28_Pin|D25_Pin |
||||
|D30_Pin|D24_Pin; |
||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; |
||||
GPIO_InitStruct.Pull = GPIO_NOPULL; |
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; |
||||
GPIO_InitStruct.Alternate = GPIO_AF12_FMC; |
||||
|
||||
HAL_GPIO_Init(GPIOI, &GPIO_InitStruct); |
||||
|
||||
/* GPIO_InitStruct */ |
||||
GPIO_InitStruct.Pin = A0_Pin|A1_Pin|A2_Pin|A3_Pin |
||||
|A4_Pin|A5_Pin|A6_Pin|A9_Pin |
||||
|A7_Pin|A8_Pin|SDNMT48LC4M32B2B5_6A_RAS_RAS___Pin; |
||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; |
||||
GPIO_InitStruct.Pull = GPIO_NOPULL; |
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; |
||||
GPIO_InitStruct.Alternate = GPIO_AF12_FMC; |
||||
|
||||
HAL_GPIO_Init(GPIOF, &GPIO_InitStruct); |
||||
|
||||
/* GPIO_InitStruct */ |
||||
GPIO_InitStruct.Pin = D23_Pin|D21_Pin|D22_Pin|SDNE0_Pin |
||||
|SDCKE0_Pin|D20_Pin|D17_Pin|D19_Pin |
||||
|D16_Pin|D18_Pin; |
||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; |
||||
GPIO_InitStruct.Pull = GPIO_NOPULL; |
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; |
||||
GPIO_InitStruct.Alternate = GPIO_AF12_FMC; |
||||
|
||||
HAL_GPIO_Init(GPIOH, &GPIO_InitStruct); |
||||
|
||||
/* GPIO_InitStruct */ |
||||
GPIO_InitStruct.Pin = SDNWE_Pin; |
||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; |
||||
GPIO_InitStruct.Pull = GPIO_NOPULL; |
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; |
||||
GPIO_InitStruct.Alternate = GPIO_AF12_FMC; |
||||
|
||||
HAL_GPIO_Init(SDNWE_GPIO_Port, &GPIO_InitStruct); |
||||
|
||||
/* USER CODE BEGIN FMC_MspInit 1 */ |
||||
|
||||
/* USER CODE END FMC_MspInit 1 */ |
||||
} |
||||
|
||||
void HAL_SDRAM_MspInit(SDRAM_HandleTypeDef* sdramHandle){ |
||||
/* USER CODE BEGIN SDRAM_MspInit 0 */ |
||||
|
||||
/* USER CODE END SDRAM_MspInit 0 */ |
||||
HAL_FMC_MspInit(); |
||||
/* USER CODE BEGIN SDRAM_MspInit 1 */ |
||||
|
||||
/* USER CODE END SDRAM_MspInit 1 */ |
||||
} |
||||
|
||||
static uint32_t FMC_DeInitialized = 0; |
||||
|
||||
static void HAL_FMC_MspDeInit(void){ |
||||
/* USER CODE BEGIN FMC_MspDeInit 0 */ |
||||
|
||||
/* USER CODE END FMC_MspDeInit 0 */ |
||||
if (FMC_DeInitialized) { |
||||
return; |
||||
} |
||||
FMC_DeInitialized = 1; |
||||
/* Peripheral clock enable */ |
||||
__HAL_RCC_FMC_CLK_DISABLE(); |
||||
|
||||
/** FMC GPIO Configuration
|
||||
PE1 ------> FMC_NBL1 |
||||
PE0 ------> FMC_NBL0 |
||||
PG15 ------> FMC_SDNCAS |
||||
PD0 ------> FMC_D2 |
||||
PI4 ------> FMC_NBL2 |
||||
PD1 ------> FMC_D3 |
||||
PI3 ------> FMC_D27 |
||||
PI2 ------> FMC_D26 |
||||
PF0 ------> FMC_A0 |
||||
PI5 ------> FMC_NBL3 |
||||
PI7 ------> FMC_D29 |
||||
PI10 ------> FMC_D31 |
||||
PI6 ------> FMC_D28 |
||||
PH15 ------> FMC_D23 |
||||
PI1 ------> FMC_D25 |
||||
PF1 ------> FMC_A1 |
||||
PI9 ------> FMC_D30 |
||||
PH13 ------> FMC_D21 |
||||
PH14 ------> FMC_D22 |
||||
PI0 ------> FMC_D24 |
||||
PF2 ------> FMC_A2 |
||||
PF3 ------> FMC_A3 |
||||
PG8 ------> FMC_SDCLK |
||||
PF4 ------> FMC_A4 |
||||
PH3 ------> FMC_SDNE0 |
||||
PF5 ------> FMC_A5 |
||||
PH2 ------> FMC_SDCKE0 |
||||
PD15 ------> FMC_D1 |
||||
PD10 ------> FMC_D15 |
||||
PD14 ------> FMC_D0 |
||||
PD9 ------> FMC_D14 |
||||
PD8 ------> FMC_D13 |
||||
PC0 ------> FMC_SDNWE |
||||
PF12 ------> FMC_A6 |
||||
PG1 ------> FMC_A11 |
||||
PF15 ------> FMC_A9 |
||||
PH12 ------> FMC_D20 |
||||
PF13 ------> FMC_A7 |
||||
PG0 ------> FMC_A10 |
||||
PE8 ------> FMC_D5 |
||||
PG5 ------> FMC_BA1 |
||||
PG4 ------> FMC_BA0 |
||||
PH9 ------> FMC_D17 |
||||
PH11 ------> FMC_D19 |
||||
PF14 ------> FMC_A8 |
||||
PF11 ------> FMC_SDNRAS |
||||
PE9 ------> FMC_D6 |
||||
PE11 ------> FMC_D8 |
||||
PE14 ------> FMC_D11 |
||||
PH8 ------> FMC_D16 |
||||
PH10 ------> FMC_D18 |
||||
PE7 ------> FMC_D4 |
||||
PE10 ------> FMC_D7 |
||||
PE12 ------> FMC_D9 |
||||
PE15 ------> FMC_D12 |
||||
PE13 ------> FMC_D10 |
||||
*/ |
||||
|
||||
HAL_GPIO_DeInit(GPIOE, FMC_NBL1_Pin|FMC_NBL0_Pin|D5_Pin|D6_Pin |
||||
|D8_Pin|D11_Pin|D4_Pin|D7_Pin |
||||
|D9_Pin|D12_Pin|D10_Pin); |
||||
|
||||
HAL_GPIO_DeInit(GPIOG, SDNCAS_Pin|SDCLK_Pin|A11_Pin|A10_Pin |
||||
|GPIO_PIN_5|GPIO_PIN_4); |
||||
|
||||
HAL_GPIO_DeInit(GPIOD, D2_Pin|D3_Pin|D1_Pin|D15_Pin |
||||
|D0_Pin|D14_Pin|D13_Pin); |
||||
|
||||
HAL_GPIO_DeInit(GPIOI, FMC_NBL2_Pin|D27_Pin|D26_Pin|FMC_NBL3_Pin |
||||
|D29_Pin|D31_Pin|D28_Pin|D25_Pin |
||||
|D30_Pin|D24_Pin); |
||||
|
||||
HAL_GPIO_DeInit(GPIOF, A0_Pin|A1_Pin|A2_Pin|A3_Pin |
||||
|A4_Pin|A5_Pin|A6_Pin|A9_Pin |
||||
|A7_Pin|A8_Pin|SDNMT48LC4M32B2B5_6A_RAS_RAS___Pin); |
||||
|
||||
HAL_GPIO_DeInit(GPIOH, D23_Pin|D21_Pin|D22_Pin|SDNE0_Pin |
||||
|SDCKE0_Pin|D20_Pin|D17_Pin|D19_Pin |
||||
|D16_Pin|D18_Pin); |
||||
|
||||
HAL_GPIO_DeInit(SDNWE_GPIO_Port, SDNWE_Pin); |
||||
|
||||
/* USER CODE BEGIN FMC_MspDeInit 1 */ |
||||
|
||||
/* USER CODE END FMC_MspDeInit 1 */ |
||||
} |
||||
|
||||
void HAL_SDRAM_MspDeInit(SDRAM_HandleTypeDef* sdramHandle){ |
||||
/* USER CODE BEGIN SDRAM_MspDeInit 0 */ |
||||
|
||||
/* USER CODE END SDRAM_MspDeInit 0 */ |
||||
HAL_FMC_MspDeInit(); |
||||
/* USER CODE BEGIN SDRAM_MspDeInit 1 */ |
||||
|
||||
/* USER CODE END SDRAM_MspDeInit 1 */ |
||||
} |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
@ -0,0 +1,176 @@
|
||||
/* USER CODE BEGIN Header */ |
||||
/**
|
||||
****************************************************************************** |
||||
* File Name : freertos.c |
||||
* Description : Code for freertos applications |
||||
****************************************************************************** |
||||
* @attention |
||||
* |
||||
* Copyright (c) 2022 STMicroelectronics. |
||||
* All rights reserved. |
||||
* |
||||
* This software is licensed under terms that can be found in the LICENSE file |
||||
* in the root directory of this software component. |
||||
* If no LICENSE file comes with this software, it is provided AS-IS. |
||||
* |
||||
****************************************************************************** |
||||
*/ |
||||
/* USER CODE END Header */ |
||||
|
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include "FreeRTOS.h" |
||||
#include "task.h" |
||||
#include "main.h" |
||||
#include "cmsis_os.h" |
||||
|
||||
/* Private includes ----------------------------------------------------------*/ |
||||
/* USER CODE BEGIN Includes */ |
||||
#include "my_lcd.h" |
||||
/* USER CODE END Includes */ |
||||
|
||||
/* Private typedef -----------------------------------------------------------*/ |
||||
/* USER CODE BEGIN PTD */ |
||||
|
||||
/* USER CODE END PTD */ |
||||
|
||||
/* Private define ------------------------------------------------------------*/ |
||||
/* USER CODE BEGIN PD */ |
||||
/* USER CODE END PD */ |
||||
|
||||
/* Private macro -------------------------------------------------------------*/ |
||||
/* USER CODE BEGIN PM */ |
||||
|
||||
/* USER CODE END PM */ |
||||
|
||||
/* Private variables ---------------------------------------------------------*/ |
||||
/* USER CODE BEGIN Variables */ |
||||
|
||||
/* USER CODE END Variables */ |
||||
/* Definitions for defaultTask */ |
||||
osThreadId_t defaultTaskHandle; |
||||
const osThreadAttr_t defaultTask_attributes = { |
||||
.name = "defaultTask", |
||||
.stack_size = 4096 * 4, |
||||
.priority = (osPriority_t) osPriorityNormal, |
||||
}; |
||||
|
||||
/* Private function prototypes -----------------------------------------------*/ |
||||
/* USER CODE BEGIN FunctionPrototypes */ |
||||
|
||||
/* USER CODE END FunctionPrototypes */ |
||||
|
||||
void StartDefaultTask(void *argument); |
||||
|
||||
extern void MX_USB_HOST_Init(void); |
||||
void MX_FREERTOS_Init(void); /* (MISRA C 2004 rule 8.1) */ |
||||
|
||||
/* Hook prototypes */ |
||||
void vApplicationIdleHook(void); |
||||
void vApplicationStackOverflowHook(xTaskHandle xTask, signed char *pcTaskName); |
||||
void vApplicationMallocFailedHook(void); |
||||
|
||||
/* USER CODE BEGIN 2 */ |
||||
__weak void vApplicationIdleHook( void ) |
||||
{ |
||||
/* vApplicationIdleHook() will only be called if configUSE_IDLE_HOOK is set
|
||||
to 1 in FreeRTOSConfig.h. It will be called on each iteration of the idle |
||||
task. It is essential that code added to this hook function never attempts |
||||
to block in any way (for example, call xQueueReceive() with a block time |
||||
specified, or call vTaskDelay()). If the application makes use of the |
||||
vTaskDelete() API function (as this demo application does) then it is also |
||||
important that vApplicationIdleHook() is permitted to return to its calling |
||||
function, because it is the responsibility of the idle task to clean up |
||||
memory allocated by the kernel to any task that has since been deleted. */ |
||||
} |
||||
/* USER CODE END 2 */ |
||||
|
||||
/* USER CODE BEGIN 4 */ |
||||
__weak void vApplicationStackOverflowHook(xTaskHandle xTask, signed char *pcTaskName) |
||||
{ |
||||
/* Run time stack overflow checking is performed if
|
||||
configCHECK_FOR_STACK_OVERFLOW is defined to 1 or 2. This hook function is |
||||
called if a stack overflow is detected. */ |
||||
} |
||||
/* USER CODE END 4 */ |
||||
|
||||
/* USER CODE BEGIN 5 */ |
||||
__weak void vApplicationMallocFailedHook(void) |
||||
{ |
||||
/* vApplicationMallocFailedHook() will only be called if
|
||||
configUSE_MALLOC_FAILED_HOOK is set to 1 in FreeRTOSConfig.h. It is a hook |
||||
function that will get called if a call to pvPortMalloc() fails. |
||||
pvPortMalloc() is called internally by the kernel whenever a task, queue, |
||||
timer or semaphore is created. It is also called by various parts of the |
||||
demo application. If heap_1.c or heap_2.c are used, then the size of the |
||||
heap available to pvPortMalloc() is defined by configTOTAL_HEAP_SIZE in |
||||
FreeRTOSConfig.h, and the xPortGetFreeHeapSize() API function can be used |
||||
to query the size of free heap space that remains (although it does not |
||||
provide information on how the remaining heap might be fragmented). */ |
||||
} |
||||
/* USER CODE END 5 */ |
||||
|
||||
/**
|
||||
* @brief FreeRTOS initialization |
||||
* @param None |
||||
* @retval None |
||||
*/ |
||||
void MX_FREERTOS_Init(void) { |
||||
/* USER CODE BEGIN Init */ |
||||
|
||||
/* USER CODE END Init */ |
||||
|
||||
/* USER CODE BEGIN RTOS_MUTEX */ |
||||
/* add mutexes, ... */ |
||||
/* USER CODE END RTOS_MUTEX */ |
||||
|
||||
/* USER CODE BEGIN RTOS_SEMAPHORES */ |
||||
/* add semaphores, ... */ |
||||
/* USER CODE END RTOS_SEMAPHORES */ |
||||
|
||||
/* USER CODE BEGIN RTOS_TIMERS */ |
||||
/* start timers, add new ones, ... */ |
||||
/* USER CODE END RTOS_TIMERS */ |
||||
|
||||
/* USER CODE BEGIN RTOS_QUEUES */ |
||||
/* add queues, ... */ |
||||
/* USER CODE END RTOS_QUEUES */ |
||||
|
||||
/* Create the thread(s) */ |
||||
/* creation of defaultTask */ |
||||
defaultTaskHandle = osThreadNew(StartDefaultTask, NULL, &defaultTask_attributes); |
||||
|
||||
/* USER CODE BEGIN RTOS_THREADS */ |
||||
/* add threads, ... */ |
||||
/* USER CODE END RTOS_THREADS */ |
||||
|
||||
/* USER CODE BEGIN RTOS_EVENTS */ |
||||
/* add events, ... */ |
||||
/* USER CODE END RTOS_EVENTS */ |
||||
|
||||
} |
||||
|
||||
/* USER CODE BEGIN Header_StartDefaultTask */ |
||||
/**
|
||||
* @brief Function implementing the defaultTask thread. |
||||
* @param argument: Not used |
||||
* @retval None |
||||
*/ |
||||
/* USER CODE END Header_StartDefaultTask */ |
||||
void StartDefaultTask(void *argument) |
||||
{ |
||||
/* init code for USB_HOST */ |
||||
MX_USB_HOST_Init(); |
||||
/* USER CODE BEGIN StartDefaultTask */ |
||||
/* Infinite loop */ |
||||
for(;;) |
||||
{ |
||||
MY_LCD_Tick(); |
||||
} |
||||
/* USER CODE END StartDefaultTask */ |
||||
} |
||||
|
||||
/* Private application code --------------------------------------------------*/ |
||||
/* USER CODE BEGIN Application */ |
||||
|
||||
/* USER CODE END Application */ |
||||
|
@ -0,0 +1,165 @@
|
||||
/* USER CODE BEGIN Header */ |
||||
/**
|
||||
****************************************************************************** |
||||
* @file gpio.c |
||||
* @brief This file provides code for the configuration |
||||
* of all used GPIO pins. |
||||
****************************************************************************** |
||||
* @attention |
||||
* |
||||
* Copyright (c) 2022 STMicroelectronics. |
||||
* All rights reserved. |
||||
* |
||||
* This software is licensed under terms that can be found in the LICENSE file |
||||
* in the root directory of this software component. |
||||
* If no LICENSE file comes with this software, it is provided AS-IS. |
||||
* |
||||
****************************************************************************** |
||||
*/ |
||||
/* USER CODE END Header */ |
||||
|
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include "gpio.h" |
||||
|
||||
/* USER CODE BEGIN 0 */ |
||||
|
||||
/* USER CODE END 0 */ |
||||
|
||||
/*----------------------------------------------------------------------------*/ |
||||
/* Configure GPIO */ |
||||
/*----------------------------------------------------------------------------*/ |
||||
/* USER CODE BEGIN 1 */ |
||||
|
||||
/* USER CODE END 1 */ |
||||
|
||||
/** Configure pins
|
||||
PB3 ------> I2S3_CK |
||||
PD13 ------> S_TIM4_CH2 |
||||
*/ |
||||
void MX_GPIO_Init(void) |
||||
{ |
||||
|
||||
GPIO_InitTypeDef GPIO_InitStruct = {0}; |
||||
|
||||
/* GPIO Ports Clock Enable */ |
||||
__HAL_RCC_GPIOE_CLK_ENABLE(); |
||||
__HAL_RCC_GPIOG_CLK_ENABLE(); |
||||
__HAL_RCC_GPIOB_CLK_ENABLE(); |
||||
__HAL_RCC_GPIOC_CLK_ENABLE(); |
||||
__HAL_RCC_GPIOA_CLK_ENABLE(); |
||||
__HAL_RCC_GPIOD_CLK_ENABLE(); |
||||
__HAL_RCC_GPIOI_CLK_ENABLE(); |
||||
__HAL_RCC_GPIOF_CLK_ENABLE(); |
||||
__HAL_RCC_GPIOK_CLK_ENABLE(); |
||||
__HAL_RCC_GPIOH_CLK_ENABLE(); |
||||
__HAL_RCC_GPIOJ_CLK_ENABLE(); |
||||
|
||||
/*Configure GPIO pin Output Level */ |
||||
HAL_GPIO_WritePin(GPIOE, SPKR_HP_Pin|AUDIO_RST_Pin, GPIO_PIN_RESET); |
||||
|
||||
/*Configure GPIO pin Output Level */ |
||||
HAL_GPIO_WritePin(GPIOD, LED3_Pin|LED2_Pin, GPIO_PIN_RESET); |
||||
|
||||
/*Configure GPIO pin Output Level */ |
||||
HAL_GPIO_WritePin(LED4_GPIO_Port, LED4_Pin, GPIO_PIN_RESET); |
||||
|
||||
/*Configure GPIO pin Output Level */ |
||||
HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_RESET); |
||||
|
||||
/*Configure GPIO pin Output Level */ |
||||
HAL_GPIO_WritePin(GPIOB, OTG_FS1_PowerSwitchOn_Pin|EXT_RESET_Pin, GPIO_PIN_RESET); |
||||
|
||||
/*Configure GPIO pin Output Level */ |
||||
HAL_GPIO_WritePin(GPIOH, GPIO_PIN_7, GPIO_PIN_RESET); |
||||
|
||||
/*Configure GPIO pin Output Level */ |
||||
HAL_GPIO_WritePin(LCD_BL_CTRL_GPIO_Port, LCD_BL_CTRL_Pin, GPIO_PIN_RESET); |
||||
|
||||
/*Configure GPIO pins : PEPin PEPin */ |
||||
GPIO_InitStruct.Pin = SPKR_HP_Pin|AUDIO_RST_Pin; |
||||
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; |
||||
GPIO_InitStruct.Pull = GPIO_NOPULL; |
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; |
||||
HAL_GPIO_Init(GPIOE, &GPIO_InitStruct); |
||||
|
||||
/*Configure GPIO pin : PtPin */ |
||||
GPIO_InitStruct.Pin = I2S3_CK_Pin; |
||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; |
||||
GPIO_InitStruct.Pull = GPIO_NOPULL; |
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; |
||||
GPIO_InitStruct.Alternate = GPIO_AF6_SPI3; |
||||
HAL_GPIO_Init(I2S3_CK_GPIO_Port, &GPIO_InitStruct); |
||||
|
||||
/*Configure GPIO pin : PtPin */ |
||||
GPIO_InitStruct.Pin = OTG_FS1_OverCurrent_Pin; |
||||
GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING; |
||||
GPIO_InitStruct.Pull = GPIO_NOPULL; |
||||
HAL_GPIO_Init(OTG_FS1_OverCurrent_GPIO_Port, &GPIO_InitStruct); |
||||
|
||||
/*Configure GPIO pins : PDPin PDPin */ |
||||
GPIO_InitStruct.Pin = LED3_Pin|LED2_Pin; |
||||
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD; |
||||
GPIO_InitStruct.Pull = GPIO_NOPULL; |
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; |
||||
HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); |
||||
|
||||
/*Configure GPIO pin : PtPin */ |
||||
GPIO_InitStruct.Pin = LED4_Pin; |
||||
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD; |
||||
GPIO_InitStruct.Pull = GPIO_NOPULL; |
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; |
||||
HAL_GPIO_Init(LED4_GPIO_Port, &GPIO_InitStruct); |
||||
|
||||
/*Configure GPIO pin : PtPin */ |
||||
GPIO_InitStruct.Pin = LED1_Pin; |
||||
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD; |
||||
GPIO_InitStruct.Pull = GPIO_NOPULL; |
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; |
||||
HAL_GPIO_Init(LED1_GPIO_Port, &GPIO_InitStruct); |
||||
|
||||
/*Configure GPIO pins : PBPin PBPin */ |
||||
GPIO_InitStruct.Pin = OTG_FS1_PowerSwitchOn_Pin|EXT_RESET_Pin; |
||||
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; |
||||
GPIO_InitStruct.Pull = GPIO_NOPULL; |
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; |
||||
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); |
||||
|
||||
/*Configure GPIO pin : PtPin */ |
||||
GPIO_InitStruct.Pin = MIC_CK_Pin; |
||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; |
||||
GPIO_InitStruct.Pull = GPIO_NOPULL; |
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; |
||||
GPIO_InitStruct.Alternate = GPIO_AF2_TIM4; |
||||
HAL_GPIO_Init(MIC_CK_GPIO_Port, &GPIO_InitStruct); |
||||
|
||||
/*Configure GPIO pin : PtPin */ |
||||
GPIO_InitStruct.Pin = uSD_Detect_Pin; |
||||
GPIO_InitStruct.Mode = GPIO_MODE_INPUT; |
||||
GPIO_InitStruct.Pull = GPIO_NOPULL; |
||||
HAL_GPIO_Init(uSD_Detect_GPIO_Port, &GPIO_InitStruct); |
||||
|
||||
/*Configure GPIO pin : PtPin */ |
||||
GPIO_InitStruct.Pin = LCD_INT_Pin; |
||||
GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING; |
||||
GPIO_InitStruct.Pull = GPIO_NOPULL; |
||||
HAL_GPIO_Init(LCD_INT_GPIO_Port, &GPIO_InitStruct); |
||||
|
||||
/*Configure GPIO pin : PH7 */ |
||||
GPIO_InitStruct.Pin = GPIO_PIN_7; |
||||
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; |
||||
GPIO_InitStruct.Pull = GPIO_NOPULL; |
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; |
||||
HAL_GPIO_Init(GPIOH, &GPIO_InitStruct); |
||||
|
||||
/*Configure GPIO pin : PtPin */ |
||||
GPIO_InitStruct.Pin = LCD_BL_CTRL_Pin; |
||||
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; |
||||
GPIO_InitStruct.Pull = GPIO_NOPULL; |
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; |
||||
HAL_GPIO_Init(LCD_BL_CTRL_GPIO_Port, &GPIO_InitStruct); |
||||
|
||||
} |
||||
|
||||
/* USER CODE BEGIN 2 */ |
||||
|
||||
/* USER CODE END 2 */ |
@ -0,0 +1,190 @@
|
||||
/* USER CODE BEGIN Header */ |
||||
/**
|
||||
****************************************************************************** |
||||
* @file i2c.c |
||||
* @brief This file provides code for the configuration |
||||
* of the I2C instances. |
||||
****************************************************************************** |
||||
* @attention |
||||
* |
||||
* Copyright (c) 2022 STMicroelectronics. |
||||
* All rights reserved. |
||||
* |
||||
* This software is licensed under terms that can be found in the LICENSE file |
||||
* in the root directory of this software component. |
||||
* If no LICENSE file comes with this software, it is provided AS-IS. |
||||
* |
||||
****************************************************************************** |
||||
*/ |
||||
/* USER CODE END Header */ |
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include "i2c.h" |
||||
|
||||
/* USER CODE BEGIN 0 */ |
||||
|
||||
/* USER CODE END 0 */ |
||||
|
||||
I2C_HandleTypeDef hi2c1; |
||||
I2C_HandleTypeDef hi2c2; |
||||
|
||||
/* I2C1 init function */ |
||||
void MX_I2C1_Init(void) |
||||
{ |
||||
|
||||
/* USER CODE BEGIN I2C1_Init 0 */ |
||||
|
||||
/* USER CODE END I2C1_Init 0 */ |
||||
|
||||
/* USER CODE BEGIN I2C1_Init 1 */ |
||||
|
||||
/* USER CODE END I2C1_Init 1 */ |
||||
hi2c1.Instance = I2C1; |
||||
hi2c1.Init.ClockSpeed = 100000; |
||||
hi2c1.Init.DutyCycle = I2C_DUTYCYCLE_2; |
||||
hi2c1.Init.OwnAddress1 = 0; |
||||
hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT; |
||||
hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE; |
||||
hi2c1.Init.OwnAddress2 = 0; |
||||
hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE; |
||||
hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE; |
||||
if (HAL_I2C_Init(&hi2c1) != HAL_OK) |
||||
{ |
||||
Error_Handler(); |
||||
} |
||||
/* USER CODE BEGIN I2C1_Init 2 */ |
||||
|
||||
/* USER CODE END I2C1_Init 2 */ |
||||
|
||||
} |
||||
/* I2C2 init function */ |
||||
void MX_I2C2_Init(void) |
||||
{ |
||||
|
||||
/* USER CODE BEGIN I2C2_Init 0 */ |
||||
|
||||
/* USER CODE END I2C2_Init 0 */ |
||||
|
||||
/* USER CODE BEGIN I2C2_Init 1 */ |
||||
|
||||
/* USER CODE END I2C2_Init 1 */ |
||||
hi2c2.Instance = I2C2; |
||||
hi2c2.Init.ClockSpeed = 100000; |
||||
hi2c2.Init.DutyCycle = I2C_DUTYCYCLE_2; |
||||
hi2c2.Init.OwnAddress1 = 0; |
||||
hi2c2.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT; |
||||
hi2c2.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE; |
||||
hi2c2.Init.OwnAddress2 = 0; |
||||
hi2c2.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE; |
||||
hi2c2.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE; |
||||
if (HAL_I2C_Init(&hi2c2) != HAL_OK) |
||||
{ |
||||
Error_Handler(); |
||||
} |
||||
/* USER CODE BEGIN I2C2_Init 2 */ |
||||
|
||||
/* USER CODE END I2C2_Init 2 */ |
||||
|
||||
} |
||||
|
||||
void HAL_I2C_MspInit(I2C_HandleTypeDef* i2cHandle) |
||||
{ |
||||
|
||||
GPIO_InitTypeDef GPIO_InitStruct = {0}; |
||||
if(i2cHandle->Instance==I2C1) |
||||
{ |
||||
/* USER CODE BEGIN I2C1_MspInit 0 */ |
||||
|
||||
/* USER CODE END I2C1_MspInit 0 */ |
||||
|
||||
__HAL_RCC_GPIOB_CLK_ENABLE(); |
||||
/**I2C1 GPIO Configuration
|
||||
PB8 ------> I2C1_SCL |
||||
PB9 ------> I2C1_SDA |
||||
*/ |
||||
GPIO_InitStruct.Pin = I2C1_SCL_Pin|I2C1_SDA_Pin; |
||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_OD; |
||||
GPIO_InitStruct.Pull = GPIO_PULLUP; |
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; |
||||
GPIO_InitStruct.Alternate = GPIO_AF4_I2C1; |
||||
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); |
||||
|
||||
/* I2C1 clock enable */ |
||||
__HAL_RCC_I2C1_CLK_ENABLE(); |
||||
/* USER CODE BEGIN I2C1_MspInit 1 */ |
||||
|
||||
/* USER CODE END I2C1_MspInit 1 */ |
||||
} |
||||
else if(i2cHandle->Instance==I2C2) |
||||
{ |
||||
/* USER CODE BEGIN I2C2_MspInit 0 */ |
||||
|
||||
/* USER CODE END I2C2_MspInit 0 */ |
||||
|
||||
__HAL_RCC_GPIOH_CLK_ENABLE(); |
||||
/**I2C2 GPIO Configuration
|
||||
PH4 ------> I2C2_SCL |
||||
PH5 ------> I2C2_SDA |
||||
*/ |
||||
GPIO_InitStruct.Pin = I2C2_SCL_Pin|I2C2_SDA_Pin; |
||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_OD; |
||||
GPIO_InitStruct.Pull = GPIO_PULLUP; |
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; |
||||
GPIO_InitStruct.Alternate = GPIO_AF4_I2C2; |
||||
HAL_GPIO_Init(GPIOH, &GPIO_InitStruct); |
||||
|
||||
/* I2C2 clock enable */ |
||||
__HAL_RCC_I2C2_CLK_ENABLE(); |
||||
/* USER CODE BEGIN I2C2_MspInit 1 */ |
||||
|
||||
/* USER CODE END I2C2_MspInit 1 */ |
||||
} |
||||
} |
||||
|
||||
void HAL_I2C_MspDeInit(I2C_HandleTypeDef* i2cHandle) |
||||
{ |
||||
|
||||
if(i2cHandle->Instance==I2C1) |
||||
{ |
||||
/* USER CODE BEGIN I2C1_MspDeInit 0 */ |
||||
|
||||
/* USER CODE END I2C1_MspDeInit 0 */ |
||||
/* Peripheral clock disable */ |
||||
__HAL_RCC_I2C1_CLK_DISABLE(); |
||||
|
||||
/**I2C1 GPIO Configuration
|
||||
PB8 ------> I2C1_SCL |
||||
PB9 ------> I2C1_SDA |
||||
*/ |
||||
HAL_GPIO_DeInit(I2C1_SCL_GPIO_Port, I2C1_SCL_Pin); |
||||
|
||||
HAL_GPIO_DeInit(I2C1_SDA_GPIO_Port, I2C1_SDA_Pin); |
||||
|
||||
/* USER CODE BEGIN I2C1_MspDeInit 1 */ |
||||
|
||||
/* USER CODE END I2C1_MspDeInit 1 */ |
||||
} |
||||
else if(i2cHandle->Instance==I2C2) |
||||
{ |
||||
/* USER CODE BEGIN I2C2_MspDeInit 0 */ |
||||
|
||||
/* USER CODE END I2C2_MspDeInit 0 */ |
||||
/* Peripheral clock disable */ |
||||
__HAL_RCC_I2C2_CLK_DISABLE(); |
||||
|
||||
/**I2C2 GPIO Configuration
|
||||
PH4 ------> I2C2_SCL |
||||
PH5 ------> I2C2_SDA |
||||
*/ |
||||
HAL_GPIO_DeInit(I2C2_SCL_GPIO_Port, I2C2_SCL_Pin); |
||||
|
||||
HAL_GPIO_DeInit(I2C2_SDA_GPIO_Port, I2C2_SDA_Pin); |
||||
|
||||
/* USER CODE BEGIN I2C2_MspDeInit 1 */ |
||||
|
||||
/* USER CODE END I2C2_MspDeInit 1 */ |
||||
} |
||||
} |
||||
|
||||
/* USER CODE BEGIN 1 */ |
||||
|
||||
/* USER CODE END 1 */ |
@ -0,0 +1,128 @@
|
||||
/* USER CODE BEGIN Header */ |
||||
/**
|
||||
****************************************************************************** |
||||
* @file ltdc.c |
||||
* @brief This file provides code for the configuration |
||||
* of the LTDC instances. |
||||
****************************************************************************** |
||||
* @attention |
||||
* |
||||
* Copyright (c) 2022 STMicroelectronics. |
||||
* All rights reserved. |
||||
* |
||||
* This software is licensed under terms that can be found in the LICENSE file |
||||
* in the root directory of this software component. |
||||
* If no LICENSE file comes with this software, it is provided AS-IS. |
||||
* |
||||
****************************************************************************** |
||||
*/ |
||||
/* USER CODE END Header */ |
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include "ltdc.h" |
||||
|
||||
/* USER CODE BEGIN 0 */ |
||||
|
||||
/* USER CODE END 0 */ |
||||
|
||||
LTDC_HandleTypeDef hltdc; |
||||
|
||||
/* LTDC init function */ |
||||
void MX_LTDC_Init(void) |
||||
{ |
||||
|
||||
/* USER CODE BEGIN LTDC_Init 0 */ |
||||
|
||||
/* USER CODE END LTDC_Init 0 */ |
||||
|
||||
LTDC_LayerCfgTypeDef pLayerCfg = {0}; |
||||
|
||||
/* USER CODE BEGIN LTDC_Init 1 */ |
||||
|
||||
/* USER CODE END LTDC_Init 1 */ |
||||
hltdc.Instance = LTDC; |
||||
hltdc.Init.HSPolarity = LTDC_HSPOLARITY_AL; |
||||
hltdc.Init.VSPolarity = LTDC_VSPOLARITY_AL; |
||||
hltdc.Init.DEPolarity = LTDC_DEPOLARITY_AL; |
||||
hltdc.Init.PCPolarity = LTDC_PCPOLARITY_IPC; |
||||
hltdc.Init.HorizontalSync = 0; |
||||
hltdc.Init.VerticalSync = 0; |
||||
hltdc.Init.AccumulatedHBP = 1; |
||||
hltdc.Init.AccumulatedVBP = 1; |
||||
hltdc.Init.AccumulatedActiveW = 201; |
||||
hltdc.Init.AccumulatedActiveH = 481; |
||||
hltdc.Init.TotalWidth = 202; |
||||
hltdc.Init.TotalHeigh = 482; |
||||
hltdc.Init.Backcolor.Blue = 0; |
||||
hltdc.Init.Backcolor.Green = 0; |
||||
hltdc.Init.Backcolor.Red = 0; |
||||
if (HAL_LTDC_Init(&hltdc) != HAL_OK) |
||||
{ |
||||
Error_Handler(); |
||||
} |
||||
pLayerCfg.WindowX0 = 0; |
||||
pLayerCfg.WindowX1 = 200; |
||||
pLayerCfg.WindowY0 = 0; |
||||
pLayerCfg.WindowY1 = 480; |
||||
pLayerCfg.PixelFormat = LTDC_PIXEL_FORMAT_RGB565; |
||||
pLayerCfg.Alpha = 255; |
||||
pLayerCfg.Alpha0 = 0; |
||||
pLayerCfg.BlendingFactor1 = LTDC_BLENDING_FACTOR1_PAxCA; |
||||
pLayerCfg.BlendingFactor2 = LTDC_BLENDING_FACTOR2_PAxCA; |
||||
pLayerCfg.FBStartAdress = 0xC0000000; |
||||
pLayerCfg.ImageWidth = 200; |
||||
pLayerCfg.ImageHeight = 480; |
||||
pLayerCfg.Backcolor.Blue = 0; |
||||
pLayerCfg.Backcolor.Green = 0; |
||||
pLayerCfg.Backcolor.Red = 0; |
||||
if (HAL_LTDC_ConfigLayer(&hltdc, &pLayerCfg, 0) != HAL_OK) |
||||
{ |
||||
Error_Handler(); |
||||
} |
||||
/* USER CODE BEGIN LTDC_Init 2 */ |
||||
|
||||
/* USER CODE END LTDC_Init 2 */ |
||||
|
||||
} |
||||
|
||||
void HAL_LTDC_MspInit(LTDC_HandleTypeDef* ltdcHandle) |
||||
{ |
||||
|
||||
if(ltdcHandle->Instance==LTDC) |
||||
{ |
||||
/* USER CODE BEGIN LTDC_MspInit 0 */ |
||||
|
||||
/* USER CODE END LTDC_MspInit 0 */ |
||||
/* LTDC clock enable */ |
||||
__HAL_RCC_LTDC_CLK_ENABLE(); |
||||
|
||||
/* LTDC interrupt Init */ |
||||
HAL_NVIC_SetPriority(LTDC_IRQn, 5, 0); |
||||
HAL_NVIC_EnableIRQ(LTDC_IRQn); |
||||
/* USER CODE BEGIN LTDC_MspInit 1 */ |
||||
|
||||
/* USER CODE END LTDC_MspInit 1 */ |
||||
} |
||||
} |
||||
|
||||
void HAL_LTDC_MspDeInit(LTDC_HandleTypeDef* ltdcHandle) |
||||
{ |
||||
|
||||
if(ltdcHandle->Instance==LTDC) |
||||
{ |
||||
/* USER CODE BEGIN LTDC_MspDeInit 0 */ |
||||
|
||||
/* USER CODE END LTDC_MspDeInit 0 */ |
||||
/* Peripheral clock disable */ |
||||
__HAL_RCC_LTDC_CLK_DISABLE(); |
||||
|
||||
/* LTDC interrupt Deinit */ |
||||
HAL_NVIC_DisableIRQ(LTDC_IRQn); |
||||
/* USER CODE BEGIN LTDC_MspDeInit 1 */ |
||||
|
||||
/* USER CODE END LTDC_MspDeInit 1 */ |
||||
} |
||||
} |
||||
|
||||
/* USER CODE BEGIN 1 */ |
||||
|
||||
/* USER CODE END 1 */ |
@ -0,0 +1,276 @@
|
||||
/* USER CODE BEGIN Header */ |
||||
/**
|
||||
****************************************************************************** |
||||
* @file : main.c |
||||
* @brief : Main program body |
||||
****************************************************************************** |
||||
* @attention |
||||
* |
||||
* Copyright (c) 2022 STMicroelectronics. |
||||
* All rights reserved. |
||||
* |
||||
* This software is licensed under terms that can be found in the LICENSE file |
||||
* in the root directory of this software component. |
||||
* If no LICENSE file comes with this software, it is provided AS-IS. |
||||
* |
||||
****************************************************************************** |
||||
*/ |
||||
/* USER CODE END Header */ |
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include "main.h" |
||||
#include "cmsis_os.h" |
||||
#include "crc.h" |
||||
#include "dma2d.h" |
||||
#include "dsihost.h" |
||||
#include "fatfs.h" |
||||
#include "i2c.h" |
||||
#include "ltdc.h" |
||||
#include "quadspi.h" |
||||
#include "sai.h" |
||||
#include "sdio.h" |
||||
#include "tim.h" |
||||
#include "usart.h" |
||||
#include "usb_host.h" |
||||
#include "gpio.h" |
||||
#include "fmc.h" |
||||
|
||||
/* Private includes ----------------------------------------------------------*/ |
||||
/* USER CODE BEGIN Includes */ |
||||
#include "my_lcd.h" |
||||
/* USER CODE END Includes */ |
||||
|
||||
/* Private typedef -----------------------------------------------------------*/ |
||||
/* USER CODE BEGIN PTD */ |
||||
/* USER CODE END PTD */ |
||||
|
||||
/* Private define ------------------------------------------------------------*/ |
||||
/* USER CODE BEGIN PD */ |
||||
/* USER CODE END PD */ |
||||
|
||||
/* Private macro -------------------------------------------------------------*/ |
||||
/* USER CODE BEGIN PM */ |
||||
/* USER CODE END PM */ |
||||
|
||||
/* Private variables ---------------------------------------------------------*/ |
||||
|
||||
/* USER CODE BEGIN PV */ |
||||
/* USER CODE END PV */ |
||||
|
||||
/* Private function prototypes -----------------------------------------------*/ |
||||
void SystemClock_Config(void); |
||||
void PeriphCommonClock_Config(void); |
||||
void MX_FREERTOS_Init(void); |
||||
/* USER CODE BEGIN PFP */ |
||||
|
||||
/* USER CODE END PFP */ |
||||
|
||||
/* Private user code ---------------------------------------------------------*/ |
||||
/* USER CODE BEGIN 0 */ |
||||
/* USER CODE END 0 */ |
||||
|
||||
/**
|
||||
* @brief The application entry point. |
||||
* @retval int |
||||
*/ |
||||
int main(void) |
||||
{ |
||||
/* USER CODE BEGIN 1 */ |
||||
#if 1 |
||||
HAL_Init(); |
||||
SystemClock_Config(); |
||||
MY_LCD_Init(); |
||||
#else |
||||
/* USER CODE END 1 */ |
||||
|
||||
/* MCU Configuration--------------------------------------------------------*/ |
||||
|
||||
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */ |
||||
HAL_Init(); |
||||
|
||||
/* USER CODE BEGIN Init */ |
||||
|
||||
/* USER CODE END Init */ |
||||
|
||||
/* Configure the system clock */ |
||||
SystemClock_Config(); |
||||
|
||||
/* Configure the peripherals common clocks */ |
||||
PeriphCommonClock_Config(); |
||||
|
||||
/* USER CODE BEGIN SysInit */ |
||||
/* USER CODE END SysInit */ |
||||
|
||||
/* Initialize all configured peripherals */ |
||||
MX_GPIO_Init(); |
||||
MX_CRC_Init(); |
||||
MX_DMA2D_Init(); |
||||
MX_DSIHOST_DSI_Init(); |
||||
MX_FMC_Init(); |
||||
MX_I2C1_Init(); |
||||
MX_I2C2_Init(); |
||||
MX_LTDC_Init(); |
||||
MX_QUADSPI_Init(); |
||||
MX_SAI1_Init(); |
||||
MX_SDIO_SD_Init(); |
||||
MX_TIM1_Init(); |
||||
MX_USART3_UART_Init(); |
||||
MX_USART6_UART_Init(); |
||||
MX_FATFS_Init(); |
||||
/* USER CODE BEGIN 2 */ |
||||
#endif |
||||
/* USER CODE END 2 */ |
||||
|
||||
/* Init scheduler */ |
||||
osKernelInitialize(); /* Call init function for freertos objects (in freertos.c) */ |
||||
MX_FREERTOS_Init(); |
||||
|
||||
/* Start scheduler */ |
||||
osKernelStart(); |
||||
|
||||
/* We should never get here as control is now taken by the scheduler */ |
||||
/* Infinite loop */ |
||||
/* USER CODE BEGIN WHILE */ |
||||
while (1) |
||||
{ |
||||
/* USER CODE END WHILE */ |
||||
|
||||
/* USER CODE BEGIN 3 */ |
||||
} |
||||
/* USER CODE END 3 */ |
||||
} |
||||
|
||||
/**
|
||||
* @brief System Clock Configuration |
||||
* @retval None |
||||
*/ |
||||
void SystemClock_Config(void) |
||||
{ |
||||
RCC_OscInitTypeDef RCC_OscInitStruct = {0}; |
||||
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; |
||||
|
||||
/** Configure the main internal regulator output voltage
|
||||
*/ |
||||
__HAL_RCC_PWR_CLK_ENABLE(); |
||||
__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1); |
||||
|
||||
/** Initializes the RCC Oscillators according to the specified parameters
|
||||
* in the RCC_OscInitTypeDef structure. |
||||
*/ |
||||
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; |
||||
RCC_OscInitStruct.HSEState = RCC_HSE_ON; |
||||
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; |
||||
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; |
||||
RCC_OscInitStruct.PLL.PLLM = 8; |
||||
RCC_OscInitStruct.PLL.PLLN = 360; |
||||
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; |
||||
RCC_OscInitStruct.PLL.PLLQ = 7; |
||||
RCC_OscInitStruct.PLL.PLLR = 6; |
||||
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) |
||||
{ |
||||
Error_Handler(); |
||||
} |
||||
|
||||
/** Activate the Over-Drive mode
|
||||
*/ |
||||
if (HAL_PWREx_EnableOverDrive() != HAL_OK) |
||||
{ |
||||
Error_Handler(); |
||||
} |
||||
|
||||
/** Initializes the CPU, AHB and APB buses clocks
|
||||
*/ |
||||
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK |
||||
|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; |
||||
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; |
||||
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; |
||||
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4; |
||||
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2; |
||||
|
||||
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK) |
||||
{ |
||||
Error_Handler(); |
||||
} |
||||
} |
||||
|
||||
/**
|
||||
* @brief Peripherals Common Clock Configuration |
||||
* @retval None |
||||
*/ |
||||
void PeriphCommonClock_Config(void) |
||||
{ |
||||
RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0}; |
||||
|
||||
/** Initializes the peripherals clock
|
||||
*/ |
||||
PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_SAI_PLLSAI|RCC_PERIPHCLK_SDIO |
||||
|RCC_PERIPHCLK_CLK48|RCC_PERIPHCLK_LTDC; |
||||
PeriphClkInitStruct.PLLSAI.PLLSAIN = 192; |
||||
PeriphClkInitStruct.PLLSAI.PLLSAIR = 2; |
||||
PeriphClkInitStruct.PLLSAI.PLLSAIQ = 2; |
||||
PeriphClkInitStruct.PLLSAI.PLLSAIP = RCC_PLLSAIP_DIV4; |
||||
PeriphClkInitStruct.PLLSAIDivQ = 1; |
||||
PeriphClkInitStruct.PLLSAIDivR = RCC_PLLSAIDIVR_4; |
||||
PeriphClkInitStruct.Clk48ClockSelection = RCC_CLK48CLKSOURCE_PLLSAIP; |
||||
PeriphClkInitStruct.SdioClockSelection = RCC_SDIOCLKSOURCE_CLK48; |
||||
if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) |
||||
{ |
||||
Error_Handler(); |
||||
} |
||||
} |
||||
|
||||
/* USER CODE BEGIN 4 */ |
||||
|
||||
/* USER CODE END 4 */ |
||||
|
||||
/**
|
||||
* @brief Period elapsed callback in non blocking mode |
||||
* @note This function is called when TIM6 interrupt took place, inside |
||||
* HAL_TIM_IRQHandler(). It makes a direct call to HAL_IncTick() to increment |
||||
* a global variable "uwTick" used as application time base. |
||||
* @param htim : TIM handle |
||||
* @retval None |
||||
*/ |
||||
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) |
||||
{ |
||||
/* USER CODE BEGIN Callback 0 */ |
||||
|
||||
/* USER CODE END Callback 0 */ |
||||
if (htim->Instance == TIM6) { |
||||
HAL_IncTick(); |
||||
} |
||||
/* USER CODE BEGIN Callback 1 */ |
||||
|
||||
/* USER CODE END Callback 1 */ |
||||
} |
||||
|
||||
/**
|
||||
* @brief This function is executed in case of error occurrence. |
||||
* @retval None |
||||
*/ |
||||
void Error_Handler(void) |
||||
{ |
||||
/* USER CODE BEGIN Error_Handler_Debug */ |
||||
/* User can add his own implementation to report the HAL error return state */ |
||||
__disable_irq(); |
||||
while (1) |
||||
{ |
||||
} |
||||
/* USER CODE END Error_Handler_Debug */ |
||||
} |
||||
|
||||
#ifdef USE_FULL_ASSERT |
||||
/**
|
||||
* @brief Reports the name of the source file and the source line number |
||||
* where the assert_param error has occurred. |
||||
* @param file: pointer to the source file name |
||||
* @param line: assert_param error line source number |
||||
* @retval None |
||||
*/ |
||||
void assert_failed(uint8_t *file, uint32_t line) |
||||
{ |
||||
/* USER CODE BEGIN 6 */ |
||||
/* User can add his own implementation to report the file name and line number,
|
||||
ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ |
||||
/* USER CODE END 6 */ |
||||
} |
||||
#endif /* USE_FULL_ASSERT */ |
@ -0,0 +1,222 @@
|
||||
#include "my_lcd.h" |
||||
|
||||
#include "stm32469i_discovery_lcd.h" |
||||
#include "stm32469i_discovery_sdram.h" |
||||
|
||||
#include "image_320x240_argb8888.h" |
||||
#include "life_augmented_argb8888.h" |
||||
|
||||
extern LTDC_HandleTypeDef hltdc_eval; |
||||
extern DMA2D_HandleTypeDef hdma2d_eval; |
||||
|
||||
#define LAYER0_ADDRESS (LCD_FB_START_ADDRESS) |
||||
|
||||
static int32_t front_buffer = 0; |
||||
static int32_t pend_buffer = -1; |
||||
static uint32_t ImageIndex = 0; |
||||
|
||||
static const uint32_t * Images[] = |
||||
{ |
||||
image_320x240_argb8888, |
||||
life_augmented_argb8888, |
||||
}; |
||||
|
||||
static const uint32_t Buffers[] = |
||||
{ |
||||
LAYER0_ADDRESS, |
||||
LAYER0_ADDRESS + (800*480*4), |
||||
}; |
||||
|
||||
static void OnError_Handler(uint32_t condition); |
||||
static void LCD_BriefDisplay(void); |
||||
static void CopyBuffer(uint32_t *pSrc, uint32_t *pDst, uint16_t x, uint16_t y, uint16_t xsize, uint16_t ysize); |
||||
|
||||
void MY_LCD_Init() { |
||||
uint8_t lcd_status = LCD_OK; |
||||
|
||||
lcd_status = BSP_LCD_Init(); |
||||
OnError_Handler(lcd_status != LCD_OK); |
||||
|
||||
BSP_LCD_LayerDefaultInit(0, LAYER0_ADDRESS); |
||||
BSP_LCD_SelectLayer(0); |
||||
|
||||
/* Set LTDC Line Event */ |
||||
HAL_LTDC_ProgramLineEvent(&hltdc_eval, 0); |
||||
|
||||
/* Display example brief */ |
||||
LCD_BriefDisplay(); |
||||
|
||||
/* Copy Buffer 0 into buffer 1, so only image area to be redrawn later */ |
||||
CopyBuffer((uint32_t *)Buffers[0], (uint32_t *)Buffers[1], 0, 0, 800, 480); |
||||
} |
||||
|
||||
void MY_LCD_Tick() { |
||||
if(pend_buffer < 0) |
||||
{ |
||||
/* Prepare back buffer */ |
||||
CopyBuffer((uint32_t *)Images[ImageIndex++], (uint32_t *)Buffers[1- front_buffer], 240, 160, 320, 240); |
||||
pend_buffer = 1- front_buffer; |
||||
|
||||
if(ImageIndex >= 2) |
||||
{ |
||||
ImageIndex = 0; |
||||
} |
||||
|
||||
/* Wait some time before switching to next stage */ |
||||
HAL_Delay(2000); |
||||
} |
||||
} |
||||
|
||||
void My_SystemClock_Config(void) |
||||
{ |
||||
RCC_ClkInitTypeDef RCC_ClkInitStruct; |
||||
RCC_OscInitTypeDef RCC_OscInitStruct; |
||||
HAL_StatusTypeDef ret = HAL_OK; |
||||
|
||||
/* Enable Power Control clock */ |
||||
__HAL_RCC_PWR_CLK_ENABLE(); |
||||
|
||||
/* The voltage scaling allows optimizing the power consumption when the device is
|
||||
clocked below the maximum system frequency, to update the voltage scaling value |
||||
regarding system frequency refer to product datasheet. */ |
||||
__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1); |
||||
|
||||
/* Enable HSE Oscillator and activate PLL with HSE as source */ |
||||
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; |
||||
RCC_OscInitStruct.HSEState = RCC_HSE_ON; |
||||
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; |
||||
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; |
||||
#if defined(USE_STM32469I_DISCO_REVA) |
||||
RCC_OscInitStruct.PLL.PLLM = 25; |
||||
#else |
||||
RCC_OscInitStruct.PLL.PLLM = 8; |
||||
#endif /* USE_STM32469I_DISCO_REVA */ |
||||
RCC_OscInitStruct.PLL.PLLN = 360; |
||||
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; |
||||
RCC_OscInitStruct.PLL.PLLQ = 7; |
||||
RCC_OscInitStruct.PLL.PLLR = 6; |
||||
|
||||
ret = HAL_RCC_OscConfig(&RCC_OscInitStruct); |
||||
if(ret != HAL_OK) |
||||
{ |
||||
while(1) { ; } |
||||
} |
||||
|
||||
/* Activate the OverDrive to reach the 180 MHz Frequency */ |
||||
ret = HAL_PWREx_EnableOverDrive(); |
||||
if(ret != HAL_OK) |
||||
{ |
||||
while(1) { ; } |
||||
} |
||||
|
||||
/* Select PLL as system clock source and configure the HCLK, PCLK1 and PCLK2 clocks dividers */ |
||||
RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2); |
||||
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; |
||||
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; |
||||
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4; |
||||
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2; |
||||
|
||||
ret = HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5); |
||||
if(ret != HAL_OK) |
||||
{ |
||||
while(1) { ; } |
||||
} |
||||
} |
||||
|
||||
|
||||
/**
|
||||
* @brief On Error Handler on condition TRUE. |
||||
* @param condition : Can be TRUE or FALSE |
||||
* @retval None |
||||
*/ |
||||
static void OnError_Handler(uint32_t condition) |
||||
{ |
||||
if(condition) |
||||
{ |
||||
BSP_LED_On(LED3); |
||||
while(1) { ; } /* Blocking on error */ |
||||
} |
||||
} |
||||
|
||||
/**
|
||||
* @brief Line Event callback. |
||||
* @param hltdc: pointer to a LTDC_HandleTypeDef structure that contains |
||||
* the configuration information for the LTDC. |
||||
* @retval None |
||||
*/ |
||||
void HAL_LTDC_LineEventCallback(LTDC_HandleTypeDef *hltdc) |
||||
{ |
||||
if(pend_buffer >= 0) |
||||
{ |
||||
LTDC_LAYER(hltdc, 0)->CFBAR = ((uint32_t)Buffers[pend_buffer]); |
||||
__HAL_LTDC_RELOAD_IMMEDIATE_CONFIG(hltdc); |
||||
|
||||
front_buffer = pend_buffer; |
||||
pend_buffer = -1; |
||||
} |
||||
|
||||
HAL_LTDC_ProgramLineEvent(hltdc, 0); |
||||
} |
||||
|
||||
/**
|
||||
* @brief Display Example description. |
||||
* @param None |
||||
* @retval None |
||||
*/ |
||||
static void LCD_BriefDisplay(void) |
||||
{ |
||||
BSP_LCD_Clear(LCD_COLOR_WHITE); |
||||
BSP_LCD_SetBackColor(LCD_COLOR_BLUE); |
||||
BSP_LCD_SetTextColor(LCD_COLOR_BLUE); |
||||
BSP_LCD_FillRect(0, 0, 800, 112); |
||||
BSP_LCD_SetTextColor(LCD_COLOR_WHITE); |
||||
BSP_LCD_DisplayStringAtLine(1, (uint8_t *)" LCD_DSI_VideoMode_DoubleBuffering"); |
||||
BSP_LCD_SetFont(&Font16); |
||||
BSP_LCD_DisplayStringAtLine(4, (uint8_t *)"This example shows how to display images on LCD DSI using two buffers"); |
||||
BSP_LCD_DisplayStringAtLine(5, (uint8_t *)"one for display and the other for draw "); |
||||
|
||||
} |
||||
|
||||
/**
|
||||
* @brief Converts a line to an ARGB8888 pixel format. |
||||
* @param pSrc: Pointer to source buffer |
||||
* @param pDst: Output color |
||||
* @param xSize: Buffer width |
||||
* @param ColorMode: Input color mode |
||||
* @retval None |
||||
*/ |
||||
static void CopyBuffer(uint32_t *pSrc, uint32_t *pDst, uint16_t x, uint16_t y, uint16_t xsize, uint16_t ysize) |
||||
{ |
||||
|
||||
uint32_t destination = (uint32_t)pDst + (y * 800 + x) * 4; |
||||
uint32_t source = (uint32_t)pSrc; |
||||
|
||||
/*##-1- Configure the DMA2D Mode, Color Mode and output offset #############*/ |
||||
hdma2d_eval.Init.Mode = DMA2D_M2M; |
||||
hdma2d_eval.Init.ColorMode = DMA2D_ARGB8888; |
||||
hdma2d_eval.Init.OutputOffset = 800 - xsize; |
||||
|
||||
/*##-2- DMA2D Callbacks Configuration ######################################*/ |
||||
hdma2d_eval.XferCpltCallback = NULL; |
||||
|
||||
/*##-3- Foreground Configuration ###########################################*/ |
||||
hdma2d_eval.LayerCfg[1].AlphaMode = DMA2D_NO_MODIF_ALPHA; |
||||
hdma2d_eval.LayerCfg[1].InputAlpha = 0xFF; |
||||
hdma2d_eval.LayerCfg[1].InputColorMode = DMA2D_INPUT_ARGB8888; |
||||
hdma2d_eval.LayerCfg[1].InputOffset = 0; |
||||
|
||||
hdma2d_eval.Instance = DMA2D; |
||||
|
||||
/* DMA2D Initialization */ |
||||
if(HAL_DMA2D_Init(&hdma2d_eval) == HAL_OK) |
||||
{ |
||||
if(HAL_DMA2D_ConfigLayer(&hdma2d_eval, 1) == HAL_OK) |
||||
{ |
||||
if (HAL_DMA2D_Start(&hdma2d_eval, source, destination, xsize, ysize) == HAL_OK) |
||||
{ |
||||
/* Polling For DMA transfer */ |
||||
HAL_DMA2D_PollForTransfer(&hdma2d_eval, 100); |
||||
} |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,53 @@
|
||||
/**
|
||||
****************************************************************************** |
||||
* @file LCD_DSI/LCD_DSI_VideoMode_DoubleBuffering/Src/stm32f4xx_hal_msp.c |
||||
* @author MCD Application Team |
||||
* @brief HAL MSP module. |
||||
****************************************************************************** |
||||
* @attention |
||||
* |
||||
* Copyright (c) 2017 STMicroelectronics. |
||||
* All rights reserved. |
||||
* |
||||
* This software is licensed under terms that can be found in the LICENSE file |
||||
* in the root directory of this software component. |
||||
* If no LICENSE file comes with this software, it is provided AS-IS. |
||||
* |
||||
****************************************************************************** |
||||
*/ |
||||
|
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include "main.h" |
||||
|
||||
/** @addtogroup STM32F4xx_HAL_Examples
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @defgroup HAL_MSP
|
||||
* @brief HAL MSP module. |
||||
* @{ |
||||
*/ |
||||
|
||||
/* Private typedef -----------------------------------------------------------*/ |
||||
/* Private define ------------------------------------------------------------*/ |
||||
/* Private macro -------------------------------------------------------------*/ |
||||
/* Private variables ---------------------------------------------------------*/ |
||||
/* Private function prototypes -----------------------------------------------*/ |
||||
/* Private functions ---------------------------------------------------------*/ |
||||
|
||||
/** @defgroup HAL_MSP_Private_Functions
|
||||
* @{ |
||||
*/ |
||||
|
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
@ -0,0 +1,166 @@
|
||||
/**
|
||||
****************************************************************************** |
||||
* @file LCD_DSI/LCD_DSI_VideoMode_DoubleBuffering/Src/stm32f4xx_it.c
|
||||
* @author MCD Application Team |
||||
* @brief Main Interrupt Service Routines. |
||||
* This file provides template for all exceptions handler and |
||||
* peripherals interrupt service routine. |
||||
****************************************************************************** |
||||
* @attention |
||||
* |
||||
* Copyright (c) 2017 STMicroelectronics. |
||||
* All rights reserved. |
||||
* |
||||
* This software is licensed under terms that can be found in the LICENSE file |
||||
* in the root directory of this software component. |
||||
* If no LICENSE file comes with this software, it is provided AS-IS. |
||||
* |
||||
****************************************************************************** |
||||
*/ |
||||
|
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include "main.h" |
||||
#include "stm32f4xx_it.h" |
||||
|
||||
/** @addtogroup STM32F4xx_HAL_Examples
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @addtogroup LCD_DSI_Video_OneLayer
|
||||
* @{ |
||||
*/ |
||||
|
||||
/* Private typedef -----------------------------------------------------------*/ |
||||
extern LTDC_HandleTypeDef hltdc_eval;
|
||||
/* Private define ------------------------------------------------------------*/ |
||||
/* Private macro -------------------------------------------------------------*/ |
||||
/* Private variables ---------------------------------------------------------*/ |
||||
/* Private function prototypes -----------------------------------------------*/ |
||||
/* Private functions ---------------------------------------------------------*/ |
||||
|
||||
/******************************************************************************/ |
||||
/* Cortex-M4 Processor Exceptions Handlers */ |
||||
/******************************************************************************/ |
||||
|
||||
/**
|
||||
* @brief This function handles NMI exception. |
||||
* @param None |
||||
* @retval None |
||||
*/ |
||||
void NMI_Handler(void) |
||||
{ |
||||
} |
||||
|
||||
/**
|
||||
* @brief This function handles Hard Fault exception. |
||||
* @param None |
||||
* @retval None |
||||
*/ |
||||
void HardFault_Handler(void) |
||||
{ |
||||
/* Go to infinite loop when Hard Fault exception occurs */ |
||||
while (1) |
||||
{ |
||||
} |
||||
} |
||||
|
||||
/**
|
||||
* @brief This function handles Memory Manage exception. |
||||
* @param None |
||||
* @retval None |
||||
*/ |
||||
void MemManage_Handler(void) |
||||
{ |
||||
/* Go to infinite loop when Memory Manage exception occurs */ |
||||
while (1) |
||||
{ |
||||
} |
||||
} |
||||
|
||||
/**
|
||||
* @brief This function handles Bus Fault exception. |
||||
* @param None |
||||
* @retval None |
||||
*/ |
||||
void BusFault_Handler(void) |
||||
{ |
||||
/* Go to infinite loop when Bus Fault exception occurs */ |
||||
while (1) |
||||
{ |
||||
} |
||||
} |
||||
|
||||
/**
|
||||
* @brief This function handles Usage Fault exception. |
||||
* @param None |
||||
* @retval None |
||||
*/ |
||||
void UsageFault_Handler(void) |
||||
{ |
||||
/* Go to infinite loop when Usage Fault exception occurs */ |
||||
while (1) |
||||
{ |
||||
} |
||||
} |
||||
|
||||
/**
|
||||
* @brief This function handles SVCall exception. |
||||
* @param None |
||||
* @retval None |
||||
*/ |
||||
void SVC_Handler(void) |
||||
{ |
||||
} |
||||
|
||||
/**
|
||||
* @brief This function handles Debug Monitor exception. |
||||
* @param None |
||||
* @retval None |
||||
*/ |
||||
void DebugMon_Handler(void) |
||||
{ |
||||
} |
||||
|
||||
/**
|
||||
* @brief This function handles PendSVC exception. |
||||
* @param None |
||||
* @retval None |
||||
*/ |
||||
void PendSV_Handler(void) |
||||
{ |
||||
} |
||||
|
||||
/**
|
||||
* @brief This function handles SysTick Handler. |
||||
* @param None |
||||
* @retval None |
||||
*/ |
||||
void SysTick_Handler(void) |
||||
{ |
||||
HAL_IncTick(); |
||||
} |
||||
|
||||
/******************************************************************************/ |
||||
/* STM32F4xx Peripherals Interrupt Handlers */ |
||||
/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ |
||||
/* available peripheral interrupt handler's name please refer to the startup */ |
||||
/* file (startup_stm32f4xx.s). */ |
||||
/******************************************************************************/ |
||||
|
||||
/**
|
||||
* @brief This function handles LTDC interrupt request. |
||||
* @param None |
||||
* @retval None |
||||
*/ |
||||
void LTDC_IRQHandler(void) |
||||
{ |
||||
HAL_LTDC_IRQHandler(&hltdc_eval); |
||||
} |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
@ -0,0 +1,433 @@
|
||||
/**
|
||||
****************************************************************************** |
||||
* @file system_stm32f4xx.c |
||||
* @author MCD Application Team |
||||
* @brief CMSIS Cortex-M4 Device Peripheral Access Layer System Source File. |
||||
* |
||||
* This file provides two functions and one global variable to be called from
|
||||
* user application: |
||||
* - SystemInit(): This function is called at startup just after reset and
|
||||
* before branch to main program. This call is made inside |
||||
* the "startup_stm32f4xx.s" file. |
||||
* |
||||
* - SystemCoreClock variable: Contains the core clock (HCLK), it can be used |
||||
* by the user application to setup the SysTick
|
||||
* timer or configure other parameters. |
||||
*
|
||||
* - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must |
||||
* be called whenever the core clock is changed |
||||
* during program execution. |
||||
* |
||||
* |
||||
****************************************************************************** |
||||
* @attention |
||||
* |
||||
* Copyright (c) 2017 STMicroelectronics. |
||||
* All rights reserved. |
||||
* |
||||
* This software is licensed under terms that can be found in the LICENSE file |
||||
* in the root directory of this software component. |
||||
* If no LICENSE file comes with this software, it is provided AS-IS. |
||||
* |
||||
****************************************************************************** |
||||
*/ |
||||
|
||||
/** @addtogroup CMSIS
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @addtogroup stm32f4xx_system
|
||||
* @{ |
||||
*/
|
||||
|
||||
/** @addtogroup STM32F4xx_System_Private_Includes
|
||||
* @{ |
||||
*/ |
||||
|
||||
|
||||
#include "stm32f4xx.h" |
||||
|
||||
#if !defined (HSE_VALUE) |
||||
#if defined(USE_STM32469I_DISCO_REVA) |
||||
#define HSE_VALUE ((uint32_t)25000000) /*!< Default value of the External oscillator in Hz */ |
||||
#else |
||||
#define HSE_VALUE ((uint32_t)8000000) /*!< Default value of the External oscillator in Hz */ |
||||
#endif /* USE_STM32469I_DISCO_REVA */ |
||||
#endif /* HSE_VALUE */ |
||||
|
||||
#if !defined (HSI_VALUE) |
||||
#define HSI_VALUE ((uint32_t)16000000) /*!< Value of the Internal oscillator in Hz*/ |
||||
#endif /* HSI_VALUE */ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @addtogroup STM32F4xx_System_Private_TypesDefinitions
|
||||
* @{ |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @addtogroup STM32F4xx_System_Private_Defines
|
||||
* @{ |
||||
*/ |
||||
|
||||
/************************* Miscellaneous Configuration ************************/ |
||||
/*!< Uncomment the following line if you need to use external SDRAM mounted
|
||||
on DK as data memory */ |
||||
/* #define DATA_IN_ExtSDRAM */ |
||||
|
||||
/*!< Uncomment the following line if you need to relocate your vector Table in
|
||||
Internal SRAM. */ |
||||
/* #define VECT_TAB_SRAM */ |
||||
#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. |
||||
This value must be a multiple of 0x200. */ |
||||
/******************************************************************************/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @addtogroup STM32F4xx_System_Private_Macros
|
||||
* @{ |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @addtogroup STM32F4xx_System_Private_Variables
|
||||
* @{ |
||||
*/ |
||||
/* This variable is updated in three ways:
|
||||
1) by calling CMSIS function SystemCoreClockUpdate() |
||||
2) by calling HAL API function HAL_RCC_GetHCLKFreq() |
||||
3) each time HAL_RCC_ClockConfig() is called to configure the system clock frequency
|
||||
Note: If you use this function to configure the system clock; then there |
||||
is no need to call the 2 first functions listed above, since SystemCoreClock |
||||
variable is updated automatically. |
||||
*/ |
||||
uint32_t SystemCoreClock = 16000000; |
||||
const uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; |
||||
const uint8_t APBPrescTable[8] = {0, 0, 0, 0, 1, 2, 3, 4}; |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @addtogroup STM32F4xx_System_Private_FunctionPrototypes
|
||||
* @{ |
||||
*/ |
||||
|
||||
#if defined (DATA_IN_ExtSDRAM) |
||||
static void SystemInit_ExtMemCtl(void);
|
||||
#endif /* DATA_IN_ExtSDRAM */ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @addtogroup STM32F4xx_System_Private_Functions
|
||||
* @{ |
||||
*/ |
||||
|
||||
/**
|
||||
* @brief Setup the microcontroller system |
||||
* Initialize the FPU setting, vector table location and External memory
|
||||
* configuration. |
||||
* @param None |
||||
* @retval None |
||||
*/ |
||||
void SystemInit(void) |
||||
{ |
||||
/* FPU settings ------------------------------------------------------------*/ |
||||
#if (__FPU_PRESENT == 1) && (__FPU_USED == 1) |
||||
SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2)); /* set CP10 and CP11 Full Access */ |
||||
#endif |
||||
/* Reset the RCC clock configuration to the default reset state ------------*/ |
||||
/* Set HSION bit */ |
||||
RCC->CR |= (uint32_t)0x00000001; |
||||
|
||||
/* Reset CFGR register */ |
||||
RCC->CFGR = 0x00000000; |
||||
|
||||
/* Reset HSEON, CSSON and PLLON bits */ |
||||
RCC->CR &= (uint32_t)0xFEF6FFFF; |
||||
|
||||
/* Reset PLLCFGR register */ |
||||
RCC->PLLCFGR = 0x24003010; |
||||
|
||||
/* Reset HSEBYP bit */ |
||||
RCC->CR &= (uint32_t)0xFFFBFFFF; |
||||
|
||||
/* Disable all interrupts */ |
||||
RCC->CIR = 0x00000000; |
||||
|
||||
#if defined (DATA_IN_ExtSDRAM) |
||||
SystemInit_ExtMemCtl();
|
||||
#endif /* DATA_IN_ExtSDRAM */ |
||||
|
||||
/* Configure the Vector Table location add offset address ------------------*/ |
||||
#ifdef VECT_TAB_SRAM |
||||
SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ |
||||
#else |
||||
SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ |
||||
#endif |
||||
} |
||||
|
||||
/**
|
||||
* @brief Update SystemCoreClock variable according to Clock Register Values. |
||||
* The SystemCoreClock variable contains the core clock (HCLK), it can |
||||
* be used by the user application to setup the SysTick timer or configure |
||||
* other parameters. |
||||
*
|
||||
* @note Each time the core clock (HCLK) changes, this function must be called |
||||
* to update SystemCoreClock variable value. Otherwise, any configuration |
||||
* based on this variable will be incorrect.
|
||||
*
|
||||
* @note - The system frequency computed by this function is not the real
|
||||
* frequency in the chip. It is calculated based on the predefined
|
||||
* constant and the selected clock source: |
||||
*
|
||||
* - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) |
||||
*
|
||||
* - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) |
||||
*
|
||||
* - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**)
|
||||
* or HSI_VALUE(*) multiplied/divided by the PLL factors. |
||||
*
|
||||
* (*) HSI_VALUE is a constant defined in stm32f4xx_hal_conf.h file (default value |
||||
* 16 MHz) but the real value may vary depending on the variations |
||||
* in voltage and temperature.
|
||||
*
|
||||
* (**) HSE_VALUE is a constant defined in stm32f4xx_hal_conf.h file (its value |
||||
* depends on the application requirements), user has to ensure that HSE_VALUE |
||||
* is same as the real frequency of the crystal used. Otherwise, this function |
||||
* may have wrong result. |
||||
*
|
||||
* - The result of this function could be not correct when using fractional |
||||
* value for HSE crystal. |
||||
*
|
||||
* @param None |
||||
* @retval None |
||||
*/ |
||||
void SystemCoreClockUpdate(void) |
||||
{ |
||||
uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; |
||||
|
||||
/* Get SYSCLK source -------------------------------------------------------*/ |
||||
tmp = RCC->CFGR & RCC_CFGR_SWS; |
||||
|
||||
switch (tmp) |
||||
{ |
||||
case 0x00: /* HSI used as system clock source */ |
||||
SystemCoreClock = HSI_VALUE; |
||||
break; |
||||
case 0x04: /* HSE used as system clock source */ |
||||
SystemCoreClock = HSE_VALUE; |
||||
break; |
||||
case 0x08: /* PLL used as system clock source */ |
||||
|
||||
/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N
|
||||
SYSCLK = PLL_VCO / PLL_P |
||||
*/
|
||||
pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; |
||||
pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; |
||||
|
||||
if (pllsource != 0) |
||||
{ |
||||
/* HSE used as PLL clock source */ |
||||
pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); |
||||
} |
||||
else |
||||
{ |
||||
/* HSI used as PLL clock source */ |
||||
pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); |
||||
} |
||||
|
||||
pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; |
||||
SystemCoreClock = pllvco/pllp; |
||||
break; |
||||
default: |
||||
SystemCoreClock = HSI_VALUE; |
||||
break; |
||||
} |
||||
/* Compute HCLK frequency --------------------------------------------------*/ |
||||
/* Get HCLK prescaler */ |
||||
tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; |
||||
/* HCLK frequency */ |
||||
SystemCoreClock >>= tmp; |
||||
} |
||||
|
||||
#if defined (DATA_IN_ExtSDRAM) |
||||
/**
|
||||
* @brief Setup the external memory controller. |
||||
* Called in startup_stm32f4xx.s before jump to main. |
||||
* This function configures the external memories (SRAM/SDRAM) |
||||
* This SRAM/SDRAM will be used as program data memory (including heap and stack). |
||||
* @param None |
||||
* @retval None |
||||
*/ |
||||
void SystemInit_ExtMemCtl(void) |
||||
{ |
||||
register uint32_t tmpreg = 0, timeout = 0xFFFF; |
||||
register __IO uint32_t index; |
||||
|
||||
/* Enable GPIOC, GPIOD, GPIOE, GPIOF, GPIOG, GPIOH, and GPIOI interface
|
||||
clock */ |
||||
RCC->AHB1ENR |= 0x000001FC; |
||||
|
||||
/* Connect PCx pins to FMC Alternate function */ |
||||
GPIOC->AFR[0] = 0x0000000C; |
||||
GPIOC->AFR[1] = 0x00000000; |
||||
/* Configure PCx pins in Alternate function mode */
|
||||
GPIOC->MODER = 0x00000002; |
||||
/* Configure PCx pins speed to 100 MHz */ |
||||
GPIOC->OSPEEDR = 0x00000003; |
||||
/* Configure PCx pins Output type to push-pull */ |
||||
GPIOC->OTYPER = 0x00000000; |
||||
/* No pull-up, pull-down for PCx pins */
|
||||
GPIOC->PUPDR = 0x00000000; |
||||
|
||||
/* Connect PDx pins to FMC Alternate function */ |
||||
GPIOD->AFR[0] = 0x000000CC; |
||||
GPIOD->AFR[1] = 0xCC000CCC; |
||||
/* Configure PDx pins in Alternate function mode */
|
||||
GPIOD->MODER = 0xA02A000A; |
||||
/* Configure PDx pins speed to 100 MHz */ |
||||
GPIOD->OSPEEDR = 0xF03F000F; |
||||
/* Configure PDx pins Output type to push-pull */ |
||||
GPIOD->OTYPER = 0x00000000; |
||||
/* No pull-up, pull-down for PDx pins */
|
||||
GPIOD->PUPDR = 0x00000000; |
||||
|
||||
/* Connect PEx pins to FMC Alternate function */ |
||||
GPIOE->AFR[0] = 0xC00000CC; |
||||
GPIOE->AFR[1] = 0xCCCCCCCC; |
||||
/* Configure PEx pins in Alternate function mode */
|
||||
GPIOE->MODER = 0xAAAA800A; |
||||
/* Configure PEx pins speed to 100 MHz */ |
||||
GPIOE->OSPEEDR = 0xFFFFC00F; |
||||
/* Configure PEx pins Output type to push-pull */ |
||||
GPIOE->OTYPER = 0x00000000; |
||||
/* No pull-up, pull-down for PEx pins */
|
||||
GPIOE->PUPDR = 0x00000000; |
||||
|
||||
/* Connect PFx pins to FMC Alternate function */ |
||||
GPIOF->AFR[0] = 0x00CCCCCC; |
||||
GPIOF->AFR[1] = 0xCCCCC000; |
||||
/* Configure PFx pins in Alternate function mode */
|
||||
GPIOF->MODER = 0xAA800AAA; |
||||
/* Configure PFx pins speed to 100 MHz */ |
||||
GPIOF->OSPEEDR = 0xFFC00FFF; |
||||
/* Configure PFx pins Output type to push-pull */ |
||||
GPIOF->OTYPER = 0x00000000; |
||||
/* No pull-up, pull-down for PFx pins */
|
||||
GPIOF->PUPDR = 0x00000000; |
||||
|
||||
/* Connect PGx pins to FMC Alternate function */ |
||||
GPIOG->AFR[0] = 0x00CC00CC; |
||||
GPIOG->AFR[1] = 0xC000000C; |
||||
/* Configure PGx pins in Alternate function mode */
|
||||
GPIOG->MODER = 0x80020A0A; |
||||
/* Configure PGx pins speed to 100 MHz */ |
||||
GPIOG->OSPEEDR = 0xC0030F0F; |
||||
/* Configure PGx pins Output type to push-pull */ |
||||
GPIOG->OTYPER = 0x00000000; |
||||
/* No pull-up, pull-down for PGx pins */
|
||||
GPIOG->PUPDR = 0x00000000; |
||||
|
||||
/* Connect PHx pins to FMC Alternate function */ |
||||
GPIOH->AFR[0] = 0x0000CC00; |
||||
GPIOH->AFR[1] = 0xCCCCCCCC; |
||||
/* Configure PHx pins in Alternate function mode */
|
||||
GPIOH->MODER = 0xAAAA00A0; |
||||
/* Configure PHx pins speed to 100 MHz */ |
||||
GPIOH->OSPEEDR = 0xFFFF00F0; |
||||
/* Configure PHx pins Output type to push-pull */ |
||||
GPIOH->OTYPER = 0x00000000; |
||||
/* No pull-up, pull-down for PHx pins */
|
||||
GPIOH->PUPDR = 0x00000000; |
||||
|
||||
/* Connect PIx pins to FMC Alternate function */ |
||||
GPIOI->AFR[0] = 0xCCCCCCCC; |
||||
GPIOI->AFR[1] = 0x00000CC0; |
||||
/* Configure PIx pins in Alternate function mode */
|
||||
GPIOI->MODER = 0x0028AAAA; |
||||
/* Configure PIx pins speed to 100 MHz */ |
||||
GPIOI->OSPEEDR = 0x003CFFFF; |
||||
/* Configure PIx pins Output type to push-pull */ |
||||
GPIOI->OTYPER = 0x00000000; |
||||
/* No pull-up, pull-down for PIx pins */
|
||||
GPIOI->PUPDR = 0x00000000; |
||||
|
||||
/* FMC Configuration */ |
||||
/* Enable the FMC interface clock */ |
||||
RCC->AHB3ENR |= 0x00000001; |
||||
|
||||
/* Configure and enable SDRAM bank2 */ |
||||
FMC_Bank5_6->SDCR[0] = 0x000019E4; |
||||
FMC_Bank5_6->SDTR[0] = 0x01115351; |
||||
|
||||
/* SDRAM initialization sequence */ |
||||
/* Clock enable command */ |
||||
FMC_Bank5_6->SDCMR = 0x00000011;
|
||||
tmpreg = FMC_Bank5_6->SDSR & 0x00000020;
|
||||
while((tmpreg != 0) && (timeout-- > 0)) |
||||
{ |
||||
tmpreg = FMC_Bank5_6->SDSR & 0x00000020;
|
||||
} |
||||
|
||||
/* Delay */ |
||||
for (index = 0; index<1000; index++); |
||||
|
||||
/* PALL command */ |
||||
FMC_Bank5_6->SDCMR = 0x00000012;
|
||||
tmpreg = FMC_Bank5_6->SDSR & 0x00000020; |
||||
timeout = 0xFFFF; |
||||
while((tmpreg != 0) && (timeout-- > 0)) |
||||
{ |
||||
tmpreg = FMC_Bank5_6->SDSR & 0x00000020;
|
||||
} |
||||
|
||||
/* Auto refresh command */ |
||||
FMC_Bank5_6->SDCMR = 0x000000F3; |
||||
tmpreg = FMC_Bank5_6->SDSR & 0x00000020; |
||||
timeout = 0xFFFF; |
||||
while((tmpreg != 0) && (timeout-- > 0)) |
||||
{ |
||||
tmpreg = FMC_Bank5_6->SDSR & 0x00000020;
|
||||
} |
||||
|
||||
/* MRD register program */ |
||||
FMC_Bank5_6->SDCMR = 0x00046014; |
||||
tmpreg = FMC_Bank5_6->SDSR & 0x00000020; |
||||
timeout = 0xFFFF; |
||||
while((tmpreg != 0) && (timeout-- > 0)) |
||||
{ |
||||
tmpreg = FMC_Bank5_6->SDSR & 0x00000020;
|
||||
}
|
||||
|
||||
/* Set refresh count */ |
||||
tmpreg = FMC_Bank5_6->SDRTR; |
||||
FMC_Bank5_6->SDRTR = (tmpreg | (0x0000056A<<1)); |
||||
|
||||
/* Disable write protection */ |
||||
tmpreg = FMC_Bank5_6->SDCR[0];
|
||||
FMC_Bank5_6->SDCR[0] = (tmpreg & 0xFFFFFDFF); |
||||
} |
||||
#endif /* DATA_IN_ExtSDRAM */ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
@ -0,0 +1,140 @@
|
||||
/* USER CODE BEGIN Header */ |
||||
/**
|
||||
****************************************************************************** |
||||
* @file quadspi.c |
||||
* @brief This file provides code for the configuration |
||||
* of the QUADSPI instances. |
||||
****************************************************************************** |
||||
* @attention |
||||
* |
||||
* Copyright (c) 2022 STMicroelectronics. |
||||
* All rights reserved. |
||||
* |
||||
* This software is licensed under terms that can be found in the LICENSE file |
||||
* in the root directory of this software component. |
||||
* If no LICENSE file comes with this software, it is provided AS-IS. |
||||
* |
||||
****************************************************************************** |
||||
*/ |
||||
/* USER CODE END Header */ |
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include "quadspi.h" |
||||
|
||||
/* USER CODE BEGIN 0 */ |
||||
|
||||
/* USER CODE END 0 */ |
||||
|
||||
QSPI_HandleTypeDef hqspi; |
||||
|
||||
/* QUADSPI init function */ |
||||
void MX_QUADSPI_Init(void) |
||||
{ |
||||
|
||||
/* USER CODE BEGIN QUADSPI_Init 0 */ |
||||
|
||||
/* USER CODE END QUADSPI_Init 0 */ |
||||
|
||||
/* USER CODE BEGIN QUADSPI_Init 1 */ |
||||
|
||||
/* USER CODE END QUADSPI_Init 1 */ |
||||
hqspi.Instance = QUADSPI; |
||||
hqspi.Init.ClockPrescaler = 1; |
||||
hqspi.Init.FifoThreshold = 1; |
||||
hqspi.Init.SampleShifting = QSPI_SAMPLE_SHIFTING_HALFCYCLE; |
||||
hqspi.Init.FlashSize = 24; |
||||
hqspi.Init.ChipSelectHighTime = QSPI_CS_HIGH_TIME_5_CYCLE; |
||||
hqspi.Init.ClockMode = QSPI_CLOCK_MODE_0; |
||||
hqspi.Init.FlashID = QSPI_FLASH_ID_1; |
||||
hqspi.Init.DualFlash = QSPI_DUALFLASH_DISABLE; |
||||
if (HAL_QSPI_Init(&hqspi) != HAL_OK) |
||||
{ |
||||
Error_Handler(); |
||||
} |
||||
/* USER CODE BEGIN QUADSPI_Init 2 */ |
||||
|
||||
/* USER CODE END QUADSPI_Init 2 */ |
||||
|
||||
} |
||||
|
||||
void HAL_QSPI_MspInit(QSPI_HandleTypeDef* qspiHandle) |
||||
{ |
||||
|
||||
GPIO_InitTypeDef GPIO_InitStruct = {0}; |
||||
if(qspiHandle->Instance==QUADSPI) |
||||
{ |
||||
/* USER CODE BEGIN QUADSPI_MspInit 0 */ |
||||
|
||||
/* USER CODE END QUADSPI_MspInit 0 */ |
||||
/* QUADSPI clock enable */ |
||||
__HAL_RCC_QSPI_CLK_ENABLE(); |
||||
|
||||
__HAL_RCC_GPIOB_CLK_ENABLE(); |
||||
__HAL_RCC_GPIOF_CLK_ENABLE(); |
||||
/**QUADSPI GPIO Configuration
|
||||
PB6 ------> QUADSPI_BK1_NCS |
||||
PF7 ------> QUADSPI_BK1_IO2 |
||||
PF6 ------> QUADSPI_BK1_IO3 |
||||
PF10 ------> QUADSPI_CLK |
||||
PF9 ------> QUADSPI_BK1_IO1 |
||||
PF8 ------> QUADSPI_BK1_IO0 |
||||
*/ |
||||
GPIO_InitStruct.Pin = QSPI_BK1_NCS_Pin; |
||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; |
||||
GPIO_InitStruct.Pull = GPIO_NOPULL; |
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; |
||||
GPIO_InitStruct.Alternate = GPIO_AF10_QSPI; |
||||
HAL_GPIO_Init(QSPI_BK1_NCS_GPIO_Port, &GPIO_InitStruct); |
||||
|
||||
GPIO_InitStruct.Pin = QSPI_BK1_IO2_Pin|QSPI_BK1_IO3_Pin|QSPI_CLK_Pin; |
||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; |
||||
GPIO_InitStruct.Pull = GPIO_NOPULL; |
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; |
||||
GPIO_InitStruct.Alternate = GPIO_AF9_QSPI; |
||||
HAL_GPIO_Init(GPIOF, &GPIO_InitStruct); |
||||
|
||||
GPIO_InitStruct.Pin = QSPI_BK1_IO1_Pin|QSPI_BK1_IO0_Pin; |
||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; |
||||
GPIO_InitStruct.Pull = GPIO_NOPULL; |
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; |
||||
GPIO_InitStruct.Alternate = GPIO_AF10_QSPI; |
||||
HAL_GPIO_Init(GPIOF, &GPIO_InitStruct); |
||||
|
||||
/* USER CODE BEGIN QUADSPI_MspInit 1 */ |
||||
|
||||
/* USER CODE END QUADSPI_MspInit 1 */ |
||||
} |
||||
} |
||||
|
||||
void HAL_QSPI_MspDeInit(QSPI_HandleTypeDef* qspiHandle) |
||||
{ |
||||
|
||||
if(qspiHandle->Instance==QUADSPI) |
||||
{ |
||||
/* USER CODE BEGIN QUADSPI_MspDeInit 0 */ |
||||
|
||||
/* USER CODE END QUADSPI_MspDeInit 0 */ |
||||
/* Peripheral clock disable */ |
||||
__HAL_RCC_QSPI_CLK_DISABLE(); |
||||
|
||||
/**QUADSPI GPIO Configuration
|
||||
PB6 ------> QUADSPI_BK1_NCS |
||||
PF7 ------> QUADSPI_BK1_IO2 |
||||
PF6 ------> QUADSPI_BK1_IO3 |
||||
PF10 ------> QUADSPI_CLK |
||||
PF9 ------> QUADSPI_BK1_IO1 |
||||
PF8 ------> QUADSPI_BK1_IO0 |
||||
*/ |
||||
HAL_GPIO_DeInit(QSPI_BK1_NCS_GPIO_Port, QSPI_BK1_NCS_Pin); |
||||
|
||||
HAL_GPIO_DeInit(GPIOF, QSPI_BK1_IO2_Pin|QSPI_BK1_IO3_Pin|QSPI_CLK_Pin|QSPI_BK1_IO1_Pin |
||||
|QSPI_BK1_IO0_Pin); |
||||
|
||||
/* USER CODE BEGIN QUADSPI_MspDeInit 1 */ |
||||
|
||||
/* USER CODE END QUADSPI_MspDeInit 1 */ |
||||
} |
||||
} |
||||
|
||||
/* USER CODE BEGIN 1 */ |
||||
|
||||
/* USER CODE END 1 */ |
@ -0,0 +1,157 @@
|
||||
/* USER CODE BEGIN Header */ |
||||
/**
|
||||
****************************************************************************** |
||||
* File Name : SAI.c |
||||
* Description : This file provides code for the configuration |
||||
* of the SAI instances. |
||||
****************************************************************************** |
||||
* @attention |
||||
* |
||||
* Copyright (c) 2022 STMicroelectronics. |
||||
* All rights reserved. |
||||
* |
||||
* This software is licensed under terms that can be found in the LICENSE file |
||||
* in the root directory of this software component. |
||||
* If no LICENSE file comes with this software, it is provided AS-IS. |
||||
* |
||||
****************************************************************************** |
||||
*/ |
||||
/* USER CODE END Header */ |
||||
|
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include "sai.h" |
||||
|
||||
/* USER CODE BEGIN 0 */ |
||||
|
||||
/* USER CODE END 0 */ |
||||
|
||||
SAI_HandleTypeDef hsai_BlockA1; |
||||
|
||||
/* SAI1 init function */ |
||||
void MX_SAI1_Init(void) |
||||
{ |
||||
|
||||
/* USER CODE BEGIN SAI1_Init 0 */ |
||||
|
||||
/* USER CODE END SAI1_Init 0 */ |
||||
|
||||
/* USER CODE BEGIN SAI1_Init 1 */ |
||||
|
||||
/* USER CODE END SAI1_Init 1 */ |
||||
|
||||
hsai_BlockA1.Instance = SAI1_Block_A; |
||||
hsai_BlockA1.Init.Protocol = SAI_FREE_PROTOCOL; |
||||
hsai_BlockA1.Init.AudioMode = SAI_MODEMASTER_TX; |
||||
hsai_BlockA1.Init.DataSize = SAI_DATASIZE_8; |
||||
hsai_BlockA1.Init.FirstBit = SAI_FIRSTBIT_MSB; |
||||
hsai_BlockA1.Init.ClockStrobing = SAI_CLOCKSTROBING_FALLINGEDGE; |
||||
hsai_BlockA1.Init.Synchro = SAI_ASYNCHRONOUS; |
||||
hsai_BlockA1.Init.OutputDrive = SAI_OUTPUTDRIVE_DISABLE; |
||||
hsai_BlockA1.Init.NoDivider = SAI_MASTERDIVIDER_ENABLE; |
||||
hsai_BlockA1.Init.FIFOThreshold = SAI_FIFOTHRESHOLD_EMPTY; |
||||
hsai_BlockA1.Init.ClockSource = SAI_CLKSOURCE_PLLSAI; |
||||
hsai_BlockA1.Init.AudioFrequency = SAI_AUDIO_FREQUENCY_192K; |
||||
hsai_BlockA1.Init.SynchroExt = SAI_SYNCEXT_DISABLE; |
||||
hsai_BlockA1.Init.MonoStereoMode = SAI_STEREOMODE; |
||||
hsai_BlockA1.Init.CompandingMode = SAI_NOCOMPANDING; |
||||
hsai_BlockA1.Init.TriState = SAI_OUTPUT_NOTRELEASED; |
||||
hsai_BlockA1.FrameInit.FrameLength = 8; |
||||
hsai_BlockA1.FrameInit.ActiveFrameLength = 1; |
||||
hsai_BlockA1.FrameInit.FSDefinition = SAI_FS_STARTFRAME; |
||||
hsai_BlockA1.FrameInit.FSPolarity = SAI_FS_ACTIVE_LOW; |
||||
hsai_BlockA1.FrameInit.FSOffset = SAI_FS_FIRSTBIT; |
||||
hsai_BlockA1.SlotInit.FirstBitOffset = 0; |
||||
hsai_BlockA1.SlotInit.SlotSize = SAI_SLOTSIZE_DATASIZE; |
||||
hsai_BlockA1.SlotInit.SlotNumber = 1; |
||||
hsai_BlockA1.SlotInit.SlotActive = 0x00000000; |
||||
if (HAL_SAI_Init(&hsai_BlockA1) != HAL_OK) |
||||
{ |
||||
Error_Handler(); |
||||
} |
||||
|
||||
/* USER CODE BEGIN SAI1_Init 2 */ |
||||
|
||||
/* USER CODE END SAI1_Init 2 */ |
||||
|
||||
} |
||||
static uint32_t SAI1_client =0; |
||||
|
||||
void HAL_SAI_MspInit(SAI_HandleTypeDef* saiHandle) |
||||
{ |
||||
|
||||
GPIO_InitTypeDef GPIO_InitStruct; |
||||
/* SAI1 */ |
||||
if(saiHandle->Instance==SAI1_Block_A) |
||||
{ |
||||
/* SAI1 clock enable */ |
||||
if (SAI1_client == 0) |
||||
{ |
||||
__HAL_RCC_SAI1_CLK_ENABLE(); |
||||
} |
||||
SAI1_client ++; |
||||
|
||||
/**SAI1_A_Block_A GPIO Configuration
|
||||
PE4 ------> SAI1_FS_A |
||||
PE5 ------> SAI1_SCK_A |
||||
PD6 ------> SAI1_SD_A |
||||
PG7 ------> SAI1_MCLK_A |
||||
*/ |
||||
GPIO_InitStruct.Pin = SAI1_FSA_Pin|SAI1_SCKA_Pin; |
||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; |
||||
GPIO_InitStruct.Pull = GPIO_NOPULL; |
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; |
||||
GPIO_InitStruct.Alternate = GPIO_AF6_SAI1; |
||||
HAL_GPIO_Init(GPIOE, &GPIO_InitStruct); |
||||
|
||||
GPIO_InitStruct.Pin = MIC_DATA_Pin; |
||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; |
||||
GPIO_InitStruct.Pull = GPIO_NOPULL; |
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; |
||||
GPIO_InitStruct.Alternate = GPIO_AF6_SAI1; |
||||
HAL_GPIO_Init(MIC_DATA_GPIO_Port, &GPIO_InitStruct); |
||||
|
||||
GPIO_InitStruct.Pin = SAI1_MCLKA_Pin; |
||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; |
||||
GPIO_InitStruct.Pull = GPIO_NOPULL; |
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; |
||||
GPIO_InitStruct.Alternate = GPIO_AF6_SAI1; |
||||
HAL_GPIO_Init(SAI1_MCLKA_GPIO_Port, &GPIO_InitStruct); |
||||
|
||||
} |
||||
} |
||||
|
||||
void HAL_SAI_MspDeInit(SAI_HandleTypeDef* saiHandle) |
||||
{ |
||||
|
||||
/* SAI1 */ |
||||
if(saiHandle->Instance==SAI1_Block_A) |
||||
{ |
||||
SAI1_client --; |
||||
if (SAI1_client == 0) |
||||
{ |
||||
/* Peripheral clock disable */ |
||||
__HAL_RCC_SAI1_CLK_DISABLE(); |
||||
} |
||||
|
||||
/**SAI1_A_Block_A GPIO Configuration
|
||||
PE4 ------> SAI1_FS_A |
||||
PE5 ------> SAI1_SCK_A |
||||
PD6 ------> SAI1_SD_A |
||||
PG7 ------> SAI1_MCLK_A |
||||
*/ |
||||
HAL_GPIO_DeInit(GPIOE, SAI1_FSA_Pin|SAI1_SCKA_Pin); |
||||
|
||||
HAL_GPIO_DeInit(MIC_DATA_GPIO_Port, MIC_DATA_Pin); |
||||
|
||||
HAL_GPIO_DeInit(SAI1_MCLKA_GPIO_Port, SAI1_MCLKA_Pin); |
||||
|
||||
} |
||||
} |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
@ -0,0 +1,129 @@
|
||||
/* USER CODE BEGIN Header */ |
||||
/**
|
||||
****************************************************************************** |
||||
* @file sdio.c |
||||
* @brief This file provides code for the configuration |
||||
* of the SDIO instances. |
||||
****************************************************************************** |
||||
* @attention |
||||
* |
||||
* Copyright (c) 2022 STMicroelectronics. |
||||
* All rights reserved. |
||||
* |
||||
* This software is licensed under terms that can be found in the LICENSE file |
||||
* in the root directory of this software component. |
||||
* If no LICENSE file comes with this software, it is provided AS-IS. |
||||
* |
||||
****************************************************************************** |
||||
*/ |
||||
/* USER CODE END Header */ |
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include "sdio.h" |
||||
|
||||
/* USER CODE BEGIN 0 */ |
||||
|
||||
/* USER CODE END 0 */ |
||||
|
||||
SD_HandleTypeDef hsd; |
||||
|
||||
/* SDIO init function */ |
||||
|
||||
void MX_SDIO_SD_Init(void) |
||||
{ |
||||
|
||||
/* USER CODE BEGIN SDIO_Init 0 */ |
||||
|
||||
/* USER CODE END SDIO_Init 0 */ |
||||
|
||||
/* USER CODE BEGIN SDIO_Init 1 */ |
||||
|
||||
/* USER CODE END SDIO_Init 1 */ |
||||
hsd.Instance = SDIO; |
||||
hsd.Init.ClockEdge = SDIO_CLOCK_EDGE_RISING; |
||||
hsd.Init.ClockBypass = SDIO_CLOCK_BYPASS_DISABLE; |
||||
hsd.Init.ClockPowerSave = SDIO_CLOCK_POWER_SAVE_DISABLE; |
||||
hsd.Init.BusWide = SDIO_BUS_WIDE_1B; |
||||
hsd.Init.HardwareFlowControl = SDIO_HARDWARE_FLOW_CONTROL_DISABLE; |
||||
hsd.Init.ClockDiv = 0; |
||||
/* USER CODE BEGIN SDIO_Init 2 */ |
||||
|
||||
/* USER CODE END SDIO_Init 2 */ |
||||
|
||||
} |
||||
|
||||
void HAL_SD_MspInit(SD_HandleTypeDef* sdHandle) |
||||
{ |
||||
|
||||
GPIO_InitTypeDef GPIO_InitStruct = {0}; |
||||
if(sdHandle->Instance==SDIO) |
||||
{ |
||||
/* USER CODE BEGIN SDIO_MspInit 0 */ |
||||
|
||||
/* USER CODE END SDIO_MspInit 0 */ |
||||
/* SDIO clock enable */ |
||||
__HAL_RCC_SDIO_CLK_ENABLE(); |
||||
|
||||
__HAL_RCC_GPIOC_CLK_ENABLE(); |
||||
__HAL_RCC_GPIOD_CLK_ENABLE(); |
||||
/**SDIO GPIO Configuration
|
||||
PC12 ------> SDIO_CK |
||||
PC11 ------> SDIO_D3 |
||||
PC10 ------> SDIO_D2 |
||||
PD2 ------> SDIO_CMD |
||||
PC9 ------> SDIO_D1 |
||||
PC8 ------> SDIO_D0 |
||||
*/ |
||||
GPIO_InitStruct.Pin = uSD_CLK_Pin|uSD_D3_Pin|uSD_D2_Pin|uSD_D1_Pin |
||||
|uSD_D0_Pin; |
||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; |
||||
GPIO_InitStruct.Pull = GPIO_NOPULL; |
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; |
||||
GPIO_InitStruct.Alternate = GPIO_AF12_SDIO; |
||||
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); |
||||
|
||||
GPIO_InitStruct.Pin = uSD_CMD_Pin; |
||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; |
||||
GPIO_InitStruct.Pull = GPIO_NOPULL; |
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; |
||||
GPIO_InitStruct.Alternate = GPIO_AF12_SDIO; |
||||
HAL_GPIO_Init(uSD_CMD_GPIO_Port, &GPIO_InitStruct); |
||||
|
||||
/* USER CODE BEGIN SDIO_MspInit 1 */ |
||||
|
||||
/* USER CODE END SDIO_MspInit 1 */ |
||||
} |
||||
} |
||||
|
||||
void HAL_SD_MspDeInit(SD_HandleTypeDef* sdHandle) |
||||
{ |
||||
|
||||
if(sdHandle->Instance==SDIO) |
||||
{ |
||||
/* USER CODE BEGIN SDIO_MspDeInit 0 */ |
||||
|
||||
/* USER CODE END SDIO_MspDeInit 0 */ |
||||
/* Peripheral clock disable */ |
||||
__HAL_RCC_SDIO_CLK_DISABLE(); |
||||
|
||||
/**SDIO GPIO Configuration
|
||||
PC12 ------> SDIO_CK |
||||
PC11 ------> SDIO_D3 |
||||
PC10 ------> SDIO_D2 |
||||
PD2 ------> SDIO_CMD |
||||
PC9 ------> SDIO_D1 |
||||
PC8 ------> SDIO_D0 |
||||
*/ |
||||
HAL_GPIO_DeInit(GPIOC, uSD_CLK_Pin|uSD_D3_Pin|uSD_D2_Pin|uSD_D1_Pin |
||||
|uSD_D0_Pin); |
||||
|
||||
HAL_GPIO_DeInit(uSD_CMD_GPIO_Port, uSD_CMD_Pin); |
||||
|
||||
/* USER CODE BEGIN SDIO_MspDeInit 1 */ |
||||
|
||||
/* USER CODE END SDIO_MspDeInit 1 */ |
||||
} |
||||
} |
||||
|
||||
/* USER CODE BEGIN 1 */ |
||||
|
||||
/* USER CODE END 1 */ |
@ -0,0 +1,83 @@
|
||||
/* USER CODE BEGIN Header */ |
||||
/**
|
||||
****************************************************************************** |
||||
* @file stm32f4xx_hal_msp.c |
||||
* @brief This file provides code for the MSP Initialization |
||||
* and de-Initialization codes. |
||||
****************************************************************************** |
||||
* @attention |
||||
* |
||||
* Copyright (c) 2022 STMicroelectronics. |
||||
* All rights reserved. |
||||
* |
||||
* This software is licensed under terms that can be found in the LICENSE file |
||||
* in the root directory of this software component. |
||||
* If no LICENSE file comes with this software, it is provided AS-IS. |
||||
* |
||||
****************************************************************************** |
||||
*/ |
||||
/* USER CODE END Header */ |
||||
|
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include "main.h" |
||||
/* USER CODE BEGIN Includes */ |
||||
|
||||
/* USER CODE END Includes */ |
||||
|
||||
/* Private typedef -----------------------------------------------------------*/ |
||||
/* USER CODE BEGIN TD */ |
||||
|
||||
/* USER CODE END TD */ |
||||
|
||||
/* Private define ------------------------------------------------------------*/ |
||||
/* USER CODE BEGIN Define */ |
||||
|
||||
/* USER CODE END Define */ |
||||
|
||||
/* Private macro -------------------------------------------------------------*/ |
||||
/* USER CODE BEGIN Macro */ |
||||
|
||||
/* USER CODE END Macro */ |
||||
|
||||
/* Private variables ---------------------------------------------------------*/ |
||||
/* USER CODE BEGIN PV */ |
||||
|
||||
/* USER CODE END PV */ |
||||
|
||||
/* Private function prototypes -----------------------------------------------*/ |
||||
/* USER CODE BEGIN PFP */ |
||||
|
||||
/* USER CODE END PFP */ |
||||
|
||||
/* External functions --------------------------------------------------------*/ |
||||
/* USER CODE BEGIN ExternalFunctions */ |
||||
|
||||
/* USER CODE END ExternalFunctions */ |
||||
|
||||
/* USER CODE BEGIN 0 */ |
||||
|
||||
/* USER CODE END 0 */ |
||||
/**
|
||||
* Initializes the Global MSP. |
||||
*/ |
||||
void HAL_MspInit(void) |
||||
{ |
||||
/* USER CODE BEGIN MspInit 0 */ |
||||
|
||||
/* USER CODE END MspInit 0 */ |
||||
|
||||
__HAL_RCC_SYSCFG_CLK_ENABLE(); |
||||
__HAL_RCC_PWR_CLK_ENABLE(); |
||||
|
||||
/* System interrupt init*/ |
||||
/* PendSV_IRQn interrupt configuration */ |
||||
HAL_NVIC_SetPriority(PendSV_IRQn, 15, 0); |
||||
|
||||
/* USER CODE BEGIN MspInit 1 */ |
||||
|
||||
/* USER CODE END MspInit 1 */ |
||||
} |
||||
|
||||
/* USER CODE BEGIN 1 */ |
||||
|
||||
/* USER CODE END 1 */ |
@ -0,0 +1,136 @@
|
||||
/* USER CODE BEGIN Header */ |
||||
/**
|
||||
****************************************************************************** |
||||
* @file stm32f4xx_hal_timebase_TIM.c |
||||
* @brief HAL time base based on the hardware TIM. |
||||
****************************************************************************** |
||||
* @attention |
||||
* |
||||
* Copyright (c) 2022 STMicroelectronics. |
||||
* All rights reserved. |
||||
* |
||||
* This software is licensed under terms that can be found in the LICENSE file |
||||
* in the root directory of this software component. |
||||
* If no LICENSE file comes with this software, it is provided AS-IS. |
||||
* |
||||
****************************************************************************** |
||||
*/ |
||||
/* USER CODE END Header */ |
||||
|
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include "stm32f4xx_hal.h" |
||||
#include "stm32f4xx_hal_tim.h" |
||||
|
||||
/* Private typedef -----------------------------------------------------------*/ |
||||
/* Private define ------------------------------------------------------------*/ |
||||
/* Private macro -------------------------------------------------------------*/ |
||||
/* Private variables ---------------------------------------------------------*/ |
||||
TIM_HandleTypeDef htim6; |
||||
/* Private function prototypes -----------------------------------------------*/ |
||||
/* Private functions ---------------------------------------------------------*/ |
||||
|
||||
/**
|
||||
* @brief This function configures the TIM6 as a time base source. |
||||
* The time source is configured to have 1ms time base with a dedicated |
||||
* Tick interrupt priority. |
||||
* @note This function is called automatically at the beginning of program after |
||||
* reset by HAL_Init() or at any time when clock is configured, by HAL_RCC_ClockConfig(). |
||||
* @param TickPriority: Tick interrupt priority. |
||||
* @retval HAL status |
||||
*/ |
||||
HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority) |
||||
{ |
||||
RCC_ClkInitTypeDef clkconfig; |
||||
uint32_t uwTimclock, uwAPB1Prescaler = 0U; |
||||
|
||||
uint32_t uwPrescalerValue = 0U; |
||||
uint32_t pFLatency; |
||||
HAL_StatusTypeDef status; |
||||
|
||||
/* Enable TIM6 clock */ |
||||
__HAL_RCC_TIM6_CLK_ENABLE(); |
||||
|
||||
/* Get clock configuration */ |
||||
HAL_RCC_GetClockConfig(&clkconfig, &pFLatency); |
||||
|
||||
/* Get APB1 prescaler */ |
||||
uwAPB1Prescaler = clkconfig.APB1CLKDivider; |
||||
/* Compute TIM6 clock */ |
||||
if (uwAPB1Prescaler == RCC_HCLK_DIV1) |
||||
{ |
||||
uwTimclock = HAL_RCC_GetPCLK1Freq(); |
||||
} |
||||
else |
||||
{ |
||||
uwTimclock = 2UL * HAL_RCC_GetPCLK1Freq(); |
||||
} |
||||
|
||||
/* Compute the prescaler value to have TIM6 counter clock equal to 1MHz */ |
||||
uwPrescalerValue = (uint32_t) ((uwTimclock / 1000000U) - 1U); |
||||
|
||||
/* Initialize TIM6 */ |
||||
htim6.Instance = TIM6; |
||||
|
||||
/* Initialize TIMx peripheral as follow:
|
||||
+ Period = [(TIM6CLK/1000) - 1]. to have a (1/1000) s time base. |
||||
+ Prescaler = (uwTimclock/1000000 - 1) to have a 1MHz counter clock. |
||||
+ ClockDivision = 0 |
||||
+ Counter direction = Up |
||||
*/ |
||||
htim6.Init.Period = (1000000U / 1000U) - 1U; |
||||
htim6.Init.Prescaler = uwPrescalerValue; |
||||
htim6.Init.ClockDivision = 0; |
||||
htim6.Init.CounterMode = TIM_COUNTERMODE_UP; |
||||
htim6.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; |
||||
|
||||
status = HAL_TIM_Base_Init(&htim6); |
||||
if (status == HAL_OK) |
||||
{ |
||||
/* Start the TIM time Base generation in interrupt mode */ |
||||
status = HAL_TIM_Base_Start_IT(&htim6); |
||||
if (status == HAL_OK) |
||||
{ |
||||
/* Enable the TIM6 global Interrupt */ |
||||
HAL_NVIC_EnableIRQ(TIM6_DAC_IRQn); |
||||
/* Configure the SysTick IRQ priority */ |
||||
if (TickPriority < (1UL << __NVIC_PRIO_BITS)) |
||||
{ |
||||
/* Configure the TIM IRQ priority */ |
||||
HAL_NVIC_SetPriority(TIM6_DAC_IRQn, TickPriority, 0U); |
||||
uwTickPrio = TickPriority; |
||||
} |
||||
else |
||||
{ |
||||
status = HAL_ERROR; |
||||
} |
||||
} |
||||
} |
||||
|
||||
/* Return function status */ |
||||
return status; |
||||
} |
||||
|
||||
/**
|
||||
* @brief Suspend Tick increment. |
||||
* @note Disable the tick increment by disabling TIM6 update interrupt. |
||||
* @param None |
||||
* @retval None |
||||
*/ |
||||
void HAL_SuspendTick(void) |
||||
{ |
||||
/* Disable TIM6 update Interrupt */ |
||||
__HAL_TIM_DISABLE_IT(&htim6, TIM_IT_UPDATE); |
||||
} |
||||
|
||||
/**
|
||||
* @brief Resume Tick increment. |
||||
* @note Enable the tick increment by Enabling TIM6 update interrupt. |
||||
* @param None |
||||
* @retval None |
||||
*/ |
||||
void HAL_ResumeTick(void) |
||||
{ |
||||
/* Enable TIM6 Update interrupt */ |
||||
__HAL_TIM_ENABLE_IT(&htim6, TIM_IT_UPDATE); |
||||
} |
||||
|
@ -0,0 +1,242 @@
|
||||
/* USER CODE BEGIN Header */ |
||||
/**
|
||||
****************************************************************************** |
||||
* @file stm32f4xx_it.c |
||||
* @brief Interrupt Service Routines. |
||||
****************************************************************************** |
||||
* @attention |
||||
* |
||||
* Copyright (c) 2022 STMicroelectronics. |
||||
* All rights reserved. |
||||
* |
||||
* This software is licensed under terms that can be found in the LICENSE file |
||||
* in the root directory of this software component. |
||||
* If no LICENSE file comes with this software, it is provided AS-IS. |
||||
* |
||||
****************************************************************************** |
||||
*/ |
||||
/* USER CODE END Header */ |
||||
|
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include "main.h" |
||||
#include "stm32f4xx_it.h" |
||||
/* Private includes ----------------------------------------------------------*/ |
||||
/* USER CODE BEGIN Includes */ |
||||
/* USER CODE END Includes */ |
||||
|
||||
/* Private typedef -----------------------------------------------------------*/ |
||||
/* USER CODE BEGIN TD */ |
||||
|
||||
/* USER CODE END TD */ |
||||
|
||||
/* Private define ------------------------------------------------------------*/ |
||||
/* USER CODE BEGIN PD */ |
||||
|
||||
/* USER CODE END PD */ |
||||
|
||||
/* Private macro -------------------------------------------------------------*/ |
||||
/* USER CODE BEGIN PM */ |
||||
|
||||
/* USER CODE END PM */ |
||||
|
||||
/* Private variables ---------------------------------------------------------*/ |
||||
/* USER CODE BEGIN PV */ |
||||
extern LTDC_HandleTypeDef hltdc_eval; |
||||
extern DMA2D_HandleTypeDef hdma2d_eval; |
||||
/* USER CODE END PV */ |
||||
|
||||
/* Private function prototypes -----------------------------------------------*/ |
||||
/* USER CODE BEGIN PFP */ |
||||
|
||||
/* USER CODE END PFP */ |
||||
|
||||
/* Private user code ---------------------------------------------------------*/ |
||||
/* USER CODE BEGIN 0 */ |
||||
|
||||
/* USER CODE END 0 */ |
||||
|
||||
/* External variables --------------------------------------------------------*/ |
||||
extern HCD_HandleTypeDef hhcd_USB_OTG_FS; |
||||
extern DMA2D_HandleTypeDef hdma2d; |
||||
extern DSI_HandleTypeDef hdsi; |
||||
extern LTDC_HandleTypeDef hltdc; |
||||
extern TIM_HandleTypeDef htim6; |
||||
|
||||
/* USER CODE BEGIN EV */ |
||||
|
||||
/* USER CODE END EV */ |
||||
|
||||
/******************************************************************************/ |
||||
/* Cortex-M4 Processor Interruption and Exception Handlers */ |
||||
/******************************************************************************/ |
||||
/**
|
||||
* @brief This function handles Non maskable interrupt. |
||||
*/ |
||||
void NMI_Handler(void) |
||||
{ |
||||
/* USER CODE BEGIN NonMaskableInt_IRQn 0 */ |
||||
|
||||
/* USER CODE END NonMaskableInt_IRQn 0 */ |
||||
/* USER CODE BEGIN NonMaskableInt_IRQn 1 */ |
||||
while (1) |
||||
{ |
||||
} |
||||
/* USER CODE END NonMaskableInt_IRQn 1 */ |
||||
} |
||||
|
||||
/**
|
||||
* @brief This function handles Hard fault interrupt. |
||||
*/ |
||||
void HardFault_Handler(void) |
||||
{ |
||||
/* USER CODE BEGIN HardFault_IRQn 0 */ |
||||
|
||||
/* USER CODE END HardFault_IRQn 0 */ |
||||
while (1) |
||||
{ |
||||
/* USER CODE BEGIN W1_HardFault_IRQn 0 */ |
||||
/* USER CODE END W1_HardFault_IRQn 0 */ |
||||
} |
||||
} |
||||
|
||||
/**
|
||||
* @brief This function handles Memory management fault. |
||||
*/ |
||||
void MemManage_Handler(void) |
||||
{ |
||||
/* USER CODE BEGIN MemoryManagement_IRQn 0 */ |
||||
|
||||
/* USER CODE END MemoryManagement_IRQn 0 */ |
||||
while (1) |
||||
{ |
||||
/* USER CODE BEGIN W1_MemoryManagement_IRQn 0 */ |
||||
/* USER CODE END W1_MemoryManagement_IRQn 0 */ |
||||
} |
||||
} |
||||
|
||||
/**
|
||||
* @brief This function handles Pre-fetch fault, memory access fault. |
||||
*/ |
||||
void BusFault_Handler(void) |
||||
{ |
||||
/* USER CODE BEGIN BusFault_IRQn 0 */ |
||||
|
||||
/* USER CODE END BusFault_IRQn 0 */ |
||||
while (1) |
||||
{ |
||||
/* USER CODE BEGIN W1_BusFault_IRQn 0 */ |
||||
/* USER CODE END W1_BusFault_IRQn 0 */ |
||||
} |
||||
} |
||||
|
||||
/**
|
||||
* @brief This function handles Undefined instruction or illegal state. |
||||
*/ |
||||
void UsageFault_Handler(void) |
||||
{ |
||||
/* USER CODE BEGIN UsageFault_IRQn 0 */ |
||||
|
||||
/* USER CODE END UsageFault_IRQn 0 */ |
||||
while (1) |
||||
{ |
||||
/* USER CODE BEGIN W1_UsageFault_IRQn 0 */ |
||||
/* USER CODE END W1_UsageFault_IRQn 0 */ |
||||
} |
||||
} |
||||
|
||||
/**
|
||||
* @brief This function handles Debug monitor. |
||||
*/ |
||||
void DebugMon_Handler(void) |
||||
{ |
||||
/* USER CODE BEGIN DebugMonitor_IRQn 0 */ |
||||
|
||||
/* USER CODE END DebugMonitor_IRQn 0 */ |
||||
/* USER CODE BEGIN DebugMonitor_IRQn 1 */ |
||||
|
||||
/* USER CODE END DebugMonitor_IRQn 1 */ |
||||
} |
||||
|
||||
/******************************************************************************/ |
||||
/* STM32F4xx Peripheral Interrupt Handlers */ |
||||
/* Add here the Interrupt Handlers for the used peripherals. */ |
||||
/* For the available peripheral interrupt handler names, */ |
||||
/* please refer to the startup file (startup_stm32f4xx.s). */ |
||||
/******************************************************************************/ |
||||
|
||||
/**
|
||||
* @brief This function handles TIM6 global interrupt, DAC1 and DAC2 underrun error interrupts. |
||||
*/ |
||||
void TIM6_DAC_IRQHandler(void) |
||||
{ |
||||
/* USER CODE BEGIN TIM6_DAC_IRQn 0 */ |
||||
|
||||
/* USER CODE END TIM6_DAC_IRQn 0 */ |
||||
/* USER CODE BEGIN TIM6_DAC_IRQn 1 */ |
||||
|
||||
/* USER CODE END TIM6_DAC_IRQn 1 */ |
||||
} |
||||
|
||||
/**
|
||||
* @brief This function handles USB On The Go FS global interrupt. |
||||
*/ |
||||
void OTG_FS_IRQHandler(void) |
||||
{ |
||||
/* USER CODE BEGIN OTG_FS_IRQn 0 */ |
||||
|
||||
/* USER CODE END OTG_FS_IRQn 0 */ |
||||
HAL_HCD_IRQHandler(&hhcd_USB_OTG_FS); |
||||
/* USER CODE BEGIN OTG_FS_IRQn 1 */ |
||||
|
||||
/* USER CODE END OTG_FS_IRQn 1 */ |
||||
} |
||||
|
||||
/**
|
||||
* @brief This function handles LTDC global interrupt. |
||||
*/ |
||||
void LTDC_IRQHandler(void) |
||||
{ |
||||
/* USER CODE BEGIN LTDC_IRQn 0 */ |
||||
#if 1 |
||||
HAL_LTDC_IRQHandler(&hltdc_eval); |
||||
#else |
||||
/* USER CODE END LTDC_IRQn 0 */ |
||||
HAL_LTDC_IRQHandler(&hltdc); |
||||
/* USER CODE BEGIN LTDC_IRQn 1 */ |
||||
#endif |
||||
/* USER CODE END LTDC_IRQn 1 */ |
||||
} |
||||
|
||||
/**
|
||||
* @brief This function handles DMA2D global interrupt. |
||||
*/ |
||||
void DMA2D_IRQHandler(void) |
||||
{ |
||||
/* USER CODE BEGIN DMA2D_IRQn 0 */ |
||||
#if 1 |
||||
HAL_DMA2D_IRQHandler(&hdma2d_eval); |
||||
#else |
||||
/* USER CODE END DMA2D_IRQn 0 */ |
||||
HAL_DMA2D_IRQHandler(&hdma2d); |
||||
/* USER CODE BEGIN DMA2D_IRQn 1 */ |
||||
#endif |
||||
/* USER CODE END DMA2D_IRQn 1 */ |
||||
} |
||||
|
||||
/**
|
||||
* @brief This function handles DSI global interrupt. |
||||
*/ |
||||
void DSI_IRQHandler(void) |
||||
{ |
||||
/* USER CODE BEGIN DSI_IRQn 0 */ |
||||
|
||||
/* USER CODE END DSI_IRQn 0 */ |
||||
HAL_DSI_IRQHandler(&hdsi); |
||||
/* USER CODE BEGIN DSI_IRQn 1 */ |
||||
|
||||
/* USER CODE END DSI_IRQn 1 */ |
||||
} |
||||
|
||||
/* USER CODE BEGIN 1 */ |
||||
|
||||
/* USER CODE END 1 */ |
@ -0,0 +1,155 @@
|
||||
/**
|
||||
****************************************************************************** |
||||
* @file syscalls.c |
||||
* @author Auto-generated by STM32CubeIDE |
||||
* @brief STM32CubeIDE Minimal System calls file |
||||
* |
||||
* For more information about which c-functions |
||||
* need which of these lowlevel functions |
||||
* please consult the Newlib libc-manual |
||||
****************************************************************************** |
||||
* @attention |
||||
* |
||||
* Copyright (c) 2022 STMicroelectronics. |
||||
* All rights reserved. |
||||
* |
||||
* This software is licensed under terms that can be found in the LICENSE file |
||||
* in the root directory of this software component. |
||||
* If no LICENSE file comes with this software, it is provided AS-IS. |
||||
* |
||||
****************************************************************************** |
||||
*/ |
||||
|
||||
/* Includes */ |
||||
#include <sys/stat.h> |
||||
#include <stdlib.h> |
||||
#include <errno.h> |
||||
#include <stdio.h> |
||||
#include <signal.h> |
||||
#include <time.h> |
||||
#include <sys/time.h> |
||||
#include <sys/times.h> |
||||
|
||||
|
||||
/* Variables */ |
||||
extern int __io_putchar(int ch) __attribute__((weak)); |
||||
extern int __io_getchar(void) __attribute__((weak)); |
||||
|
||||
|
||||
char *__env[1] = { 0 }; |
||||
char **environ = __env; |
||||
|
||||
|
||||
/* Functions */ |
||||
void initialise_monitor_handles() |
||||
{ |
||||
} |
||||
|
||||
int _getpid(void) |
||||
{ |
||||
return 1; |
||||
} |
||||
|
||||
int _kill(int pid, int sig) |
||||
{ |
||||
errno = EINVAL; |
||||
return -1; |
||||
} |
||||
|
||||
void _exit (int status) |
||||
{ |
||||
_kill(status, -1); |
||||
while (1) {} /* Make sure we hang here */ |
||||
} |
||||
|
||||
__attribute__((weak)) int _read(int file, char *ptr, int len) |
||||
{ |
||||
int DataIdx; |
||||
|
||||
for (DataIdx = 0; DataIdx < len; DataIdx++) |
||||
{ |
||||
*ptr++ = __io_getchar(); |
||||
} |
||||
|
||||
return len; |
||||
} |
||||
|
||||
__attribute__((weak)) int _write(int file, char *ptr, int len) |
||||
{ |
||||
int DataIdx; |
||||
|
||||
for (DataIdx = 0; DataIdx < len; DataIdx++) |
||||
{ |
||||
__io_putchar(*ptr++); |
||||
} |
||||
return len; |
||||
} |
||||
|
||||
int _close(int file) |
||||
{ |
||||
return -1; |
||||
} |
||||
|
||||
|
||||
int _fstat(int file, struct stat *st) |
||||
{ |
||||
st->st_mode = S_IFCHR; |
||||
return 0; |
||||
} |
||||
|
||||
int _isatty(int file) |
||||
{ |
||||
return 1; |
||||
} |
||||
|
||||
int _lseek(int file, int ptr, int dir) |
||||
{ |
||||
return 0; |
||||
} |
||||
|
||||
int _open(char *path, int flags, ...) |
||||
{ |
||||
/* Pretend like we always fail */ |
||||
return -1; |
||||
} |
||||
|
||||
int _wait(int *status) |
||||
{ |
||||
errno = ECHILD; |
||||
return -1; |
||||
} |
||||
|
||||
int _unlink(char *name) |
||||
{ |
||||
errno = ENOENT; |
||||
return -1; |
||||
} |
||||
|
||||
int _times(struct tms *buf) |
||||
{ |
||||
return -1; |
||||
} |
||||
|
||||
int _stat(char *file, struct stat *st) |
||||
{ |
||||
st->st_mode = S_IFCHR; |
||||
return 0; |
||||
} |
||||
|
||||
int _link(char *old, char *new) |
||||
{ |
||||
errno = EMLINK; |
||||
return -1; |
||||
} |
||||
|
||||
int _fork(void) |
||||
{ |
||||
errno = EAGAIN; |
||||
return -1; |
||||
} |
||||
|
||||
int _execve(char *name, char **argv, char **env) |
||||
{ |
||||
errno = ENOMEM; |
||||
return -1; |
||||
} |
@ -0,0 +1,79 @@
|
||||
/**
|
||||
****************************************************************************** |
||||
* @file sysmem.c |
||||
* @author Generated by STM32CubeIDE |
||||
* @brief STM32CubeIDE System Memory calls file |
||||
* |
||||
* For more information about which C functions |
||||
* need which of these lowlevel functions |
||||
* please consult the newlib libc manual |
||||
****************************************************************************** |
||||
* @attention |
||||
* |
||||
* Copyright (c) 2022 STMicroelectronics. |
||||
* All rights reserved. |
||||
* |
||||
* This software is licensed under terms that can be found in the LICENSE file |
||||
* in the root directory of this software component. |
||||
* If no LICENSE file comes with this software, it is provided AS-IS. |
||||
* |
||||
****************************************************************************** |
||||
*/ |
||||
|
||||
/* Includes */ |
||||
#include <errno.h> |
||||
#include <stdint.h> |
||||
|
||||
/**
|
||||
* Pointer to the current high watermark of the heap usage |
||||
*/ |
||||
static uint8_t *__sbrk_heap_end = NULL; |
||||
|
||||
/**
|
||||
* @brief _sbrk() allocates memory to the newlib heap and is used by malloc |
||||
* and others from the C library |
||||
* |
||||
* @verbatim |
||||
* ############################################################################ |
||||
* # .data # .bss # newlib heap # MSP stack # |
||||
* # # # # Reserved by _Min_Stack_Size # |
||||
* ############################################################################ |
||||
* ^-- RAM start ^-- _end _estack, RAM end --^ |
||||
* @endverbatim |
||||
* |
||||
* This implementation starts allocating at the '_end' linker symbol |
||||
* The '_Min_Stack_Size' linker symbol reserves a memory for the MSP stack |
||||
* The implementation considers '_estack' linker symbol to be RAM end |
||||
* NOTE: If the MSP stack, at any point during execution, grows larger than the |
||||
* reserved size, please increase the '_Min_Stack_Size'. |
||||
* |
||||
* @param incr Memory size |
||||
* @return Pointer to allocated memory |
||||
*/ |
||||
void *_sbrk(ptrdiff_t incr) |
||||
{ |
||||
extern uint8_t _end; /* Symbol defined in the linker script */ |
||||
extern uint8_t _estack; /* Symbol defined in the linker script */ |
||||
extern uint32_t _Min_Stack_Size; /* Symbol defined in the linker script */ |
||||
const uint32_t stack_limit = (uint32_t)&_estack - (uint32_t)&_Min_Stack_Size; |
||||
const uint8_t *max_heap = (uint8_t *)stack_limit; |
||||
uint8_t *prev_heap_end; |
||||
|
||||
/* Initialize heap end at first call */ |
||||
if (NULL == __sbrk_heap_end) |
||||
{ |
||||
__sbrk_heap_end = &_end; |
||||
} |
||||
|
||||
/* Protect heap from growing into the reserved MSP stack */ |
||||
if (__sbrk_heap_end + incr > max_heap) |
||||
{ |
||||
errno = ENOMEM; |
||||
return (void *)-1; |
||||
} |
||||
|
||||
prev_heap_end = __sbrk_heap_end; |
||||
__sbrk_heap_end += incr; |
||||
|
||||
return (void *)prev_heap_end; |
||||
} |
@ -0,0 +1,747 @@
|
||||
/**
|
||||
****************************************************************************** |
||||
* @file system_stm32f4xx.c |
||||
* @author MCD Application Team |
||||
* @brief CMSIS Cortex-M4 Device Peripheral Access Layer System Source File. |
||||
* |
||||
* This file provides two functions and one global variable to be called from
|
||||
* user application: |
||||
* - SystemInit(): This function is called at startup just after reset and
|
||||
* before branch to main program. This call is made inside |
||||
* the "startup_stm32f4xx.s" file. |
||||
* |
||||
* - SystemCoreClock variable: Contains the core clock (HCLK), it can be used |
||||
* by the user application to setup the SysTick
|
||||
* timer or configure other parameters. |
||||
*
|
||||
* - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must |
||||
* be called whenever the core clock is changed |
||||
* during program execution. |
||||
* |
||||
* |
||||
****************************************************************************** |
||||
* @attention |
||||
* |
||||
* Copyright (c) 2017 STMicroelectronics. |
||||
* All rights reserved. |
||||
* |
||||
* This software is licensed under terms that can be found in the LICENSE file |
||||
* in the root directory of this software component. |
||||
* If no LICENSE file comes with this software, it is provided AS-IS. |
||||
* |
||||
****************************************************************************** |
||||
*/ |
||||
|
||||
/** @addtogroup CMSIS
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @addtogroup stm32f4xx_system
|
||||
* @{ |
||||
*/
|
||||
|
||||
/** @addtogroup STM32F4xx_System_Private_Includes
|
||||
* @{ |
||||
*/ |
||||
|
||||
|
||||
#include "stm32f4xx.h" |
||||
|
||||
#if !defined (HSE_VALUE) |
||||
#define HSE_VALUE ((uint32_t)25000000) /*!< Default value of the External oscillator in Hz */ |
||||
#endif /* HSE_VALUE */ |
||||
|
||||
#if !defined (HSI_VALUE) |
||||
#define HSI_VALUE ((uint32_t)16000000) /*!< Value of the Internal oscillator in Hz*/ |
||||
#endif /* HSI_VALUE */ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @addtogroup STM32F4xx_System_Private_TypesDefinitions
|
||||
* @{ |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @addtogroup STM32F4xx_System_Private_Defines
|
||||
* @{ |
||||
*/ |
||||
|
||||
/************************* Miscellaneous Configuration ************************/ |
||||
/*!< Uncomment the following line if you need to use external SRAM or SDRAM as data memory */ |
||||
#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx)\ |
||||
|| defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)\
|
||||
|| defined(STM32F469xx) || defined(STM32F479xx) || defined(STM32F412Zx) || defined(STM32F412Vx) |
||||
/* #define DATA_IN_ExtSRAM */ |
||||
#endif /* STM32F40xxx || STM32F41xxx || STM32F42xxx || STM32F43xxx || STM32F469xx || STM32F479xx ||\ |
||||
STM32F412Zx || STM32F412Vx */ |
||||
|
||||
#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)\ |
||||
|| defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx) |
||||
/* #define DATA_IN_ExtSDRAM */ |
||||
#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F446xx || STM32F469xx ||\ |
||||
STM32F479xx */ |
||||
|
||||
/* Note: Following vector table addresses must be defined in line with linker
|
||||
configuration. */ |
||||
/*!< Uncomment the following line if you need to relocate the vector table
|
||||
anywhere in Flash or Sram, else the vector table is kept at the automatic |
||||
remap of boot address selected */ |
||||
/* #define USER_VECT_TAB_ADDRESS */ |
||||
|
||||
#if defined(USER_VECT_TAB_ADDRESS) |
||||
/*!< Uncomment the following line if you need to relocate your vector Table
|
||||
in Sram else user remap will be done in Flash. */ |
||||
/* #define VECT_TAB_SRAM */ |
||||
#if defined(VECT_TAB_SRAM) |
||||
#define VECT_TAB_BASE_ADDRESS SRAM_BASE /*!< Vector Table base address field. |
||||
This value must be a multiple of 0x200. */ |
||||
#define VECT_TAB_OFFSET 0x00000000U /*!< Vector Table base offset field. |
||||
This value must be a multiple of 0x200. */ |
||||
#else |
||||
#define VECT_TAB_BASE_ADDRESS FLASH_BASE /*!< Vector Table base address field. |
||||
This value must be a multiple of 0x200. */ |
||||
#define VECT_TAB_OFFSET 0x00000000U /*!< Vector Table base offset field. |
||||
This value must be a multiple of 0x200. */ |
||||
#endif /* VECT_TAB_SRAM */ |
||||
#endif /* USER_VECT_TAB_ADDRESS */ |
||||
/******************************************************************************/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @addtogroup STM32F4xx_System_Private_Macros
|
||||
* @{ |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @addtogroup STM32F4xx_System_Private_Variables
|
||||
* @{ |
||||
*/ |
||||
/* This variable is updated in three ways:
|
||||
1) by calling CMSIS function SystemCoreClockUpdate() |
||||
2) by calling HAL API function HAL_RCC_GetHCLKFreq() |
||||
3) each time HAL_RCC_ClockConfig() is called to configure the system clock frequency
|
||||
Note: If you use this function to configure the system clock; then there |
||||
is no need to call the 2 first functions listed above, since SystemCoreClock |
||||
variable is updated automatically. |
||||
*/ |
||||
uint32_t SystemCoreClock = 16000000; |
||||
const uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; |
||||
const uint8_t APBPrescTable[8] = {0, 0, 0, 0, 1, 2, 3, 4}; |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @addtogroup STM32F4xx_System_Private_FunctionPrototypes
|
||||
* @{ |
||||
*/ |
||||
|
||||
#if defined (DATA_IN_ExtSRAM) || defined (DATA_IN_ExtSDRAM) |
||||
static void SystemInit_ExtMemCtl(void);
|
||||
#endif /* DATA_IN_ExtSRAM || DATA_IN_ExtSDRAM */ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @addtogroup STM32F4xx_System_Private_Functions
|
||||
* @{ |
||||
*/ |
||||
|
||||
/**
|
||||
* @brief Setup the microcontroller system |
||||
* Initialize the FPU setting, vector table location and External memory
|
||||
* configuration. |
||||
* @param None |
||||
* @retval None |
||||
*/ |
||||
void SystemInit(void) |
||||
{ |
||||
/* FPU settings ------------------------------------------------------------*/ |
||||
#if (__FPU_PRESENT == 1) && (__FPU_USED == 1) |
||||
SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2)); /* set CP10 and CP11 Full Access */ |
||||
#endif |
||||
|
||||
#if defined (DATA_IN_ExtSRAM) || defined (DATA_IN_ExtSDRAM) |
||||
SystemInit_ExtMemCtl();
|
||||
#endif /* DATA_IN_ExtSRAM || DATA_IN_ExtSDRAM */ |
||||
|
||||
/* Configure the Vector Table location -------------------------------------*/ |
||||
#if defined(USER_VECT_TAB_ADDRESS) |
||||
SCB->VTOR = VECT_TAB_BASE_ADDRESS | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ |
||||
#endif /* USER_VECT_TAB_ADDRESS */ |
||||
} |
||||
|
||||
/**
|
||||
* @brief Update SystemCoreClock variable according to Clock Register Values. |
||||
* The SystemCoreClock variable contains the core clock (HCLK), it can |
||||
* be used by the user application to setup the SysTick timer or configure |
||||
* other parameters. |
||||
*
|
||||
* @note Each time the core clock (HCLK) changes, this function must be called |
||||
* to update SystemCoreClock variable value. Otherwise, any configuration |
||||
* based on this variable will be incorrect.
|
||||
*
|
||||
* @note - The system frequency computed by this function is not the real
|
||||
* frequency in the chip. It is calculated based on the predefined
|
||||
* constant and the selected clock source: |
||||
*
|
||||
* - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) |
||||
*
|
||||
* - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) |
||||
*
|
||||
* - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**)
|
||||
* or HSI_VALUE(*) multiplied/divided by the PLL factors. |
||||
*
|
||||
* (*) HSI_VALUE is a constant defined in stm32f4xx_hal_conf.h file (default value |
||||
* 16 MHz) but the real value may vary depending on the variations |
||||
* in voltage and temperature.
|
||||
*
|
||||
* (**) HSE_VALUE is a constant defined in stm32f4xx_hal_conf.h file (its value |
||||
* depends on the application requirements), user has to ensure that HSE_VALUE |
||||
* is same as the real frequency of the crystal used. Otherwise, this function |
||||
* may have wrong result. |
||||
*
|
||||
* - The result of this function could be not correct when using fractional |
||||
* value for HSE crystal. |
||||
*
|
||||
* @param None |
||||
* @retval None |
||||
*/ |
||||
void SystemCoreClockUpdate(void) |
||||
{ |
||||
uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; |
||||
|
||||
/* Get SYSCLK source -------------------------------------------------------*/ |
||||
tmp = RCC->CFGR & RCC_CFGR_SWS; |
||||
|
||||
switch (tmp) |
||||
{ |
||||
case 0x00: /* HSI used as system clock source */ |
||||
SystemCoreClock = HSI_VALUE; |
||||
break; |
||||
case 0x04: /* HSE used as system clock source */ |
||||
SystemCoreClock = HSE_VALUE; |
||||
break; |
||||
case 0x08: /* PLL used as system clock source */ |
||||
|
||||
/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N
|
||||
SYSCLK = PLL_VCO / PLL_P |
||||
*/
|
||||
pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; |
||||
pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; |
||||
|
||||
if (pllsource != 0) |
||||
{ |
||||
/* HSE used as PLL clock source */ |
||||
pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); |
||||
} |
||||
else |
||||
{ |
||||
/* HSI used as PLL clock source */ |
||||
pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); |
||||
} |
||||
|
||||
pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; |
||||
SystemCoreClock = pllvco/pllp; |
||||
break; |
||||
default: |
||||
SystemCoreClock = HSI_VALUE; |
||||
break; |
||||
} |
||||
/* Compute HCLK frequency --------------------------------------------------*/ |
||||
/* Get HCLK prescaler */ |
||||
tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; |
||||
/* HCLK frequency */ |
||||
SystemCoreClock >>= tmp; |
||||
} |
||||
|
||||
#if defined (DATA_IN_ExtSRAM) && defined (DATA_IN_ExtSDRAM) |
||||
#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)\ |
||||
|| defined(STM32F469xx) || defined(STM32F479xx) |
||||
/**
|
||||
* @brief Setup the external memory controller. |
||||
* Called in startup_stm32f4xx.s before jump to main. |
||||
* This function configures the external memories (SRAM/SDRAM) |
||||
* This SRAM/SDRAM will be used as program data memory (including heap and stack). |
||||
* @param None |
||||
* @retval None |
||||
*/ |
||||
void SystemInit_ExtMemCtl(void) |
||||
{ |
||||
__IO uint32_t tmp = 0x00; |
||||
|
||||
register uint32_t tmpreg = 0, timeout = 0xFFFF; |
||||
register __IO uint32_t index; |
||||
|
||||
/* Enable GPIOC, GPIOD, GPIOE, GPIOF, GPIOG, GPIOH and GPIOI interface clock */ |
||||
RCC->AHB1ENR |= 0x000001F8; |
||||
|
||||
/* Delay after an RCC peripheral clock enabling */ |
||||
tmp = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOCEN); |
||||
|
||||
/* Connect PDx pins to FMC Alternate function */ |
||||
GPIOD->AFR[0] = 0x00CCC0CC; |
||||
GPIOD->AFR[1] = 0xCCCCCCCC; |
||||
/* Configure PDx pins in Alternate function mode */
|
||||
GPIOD->MODER = 0xAAAA0A8A; |
||||
/* Configure PDx pins speed to 100 MHz */
|
||||
GPIOD->OSPEEDR = 0xFFFF0FCF; |
||||
/* Configure PDx pins Output type to push-pull */
|
||||
GPIOD->OTYPER = 0x00000000; |
||||
/* No pull-up, pull-down for PDx pins */
|
||||
GPIOD->PUPDR = 0x00000000; |
||||
|
||||
/* Connect PEx pins to FMC Alternate function */ |
||||
GPIOE->AFR[0] = 0xC00CC0CC; |
||||
GPIOE->AFR[1] = 0xCCCCCCCC; |
||||
/* Configure PEx pins in Alternate function mode */
|
||||
GPIOE->MODER = 0xAAAA828A; |
||||
/* Configure PEx pins speed to 100 MHz */
|
||||
GPIOE->OSPEEDR = 0xFFFFC3CF; |
||||
/* Configure PEx pins Output type to push-pull */
|
||||
GPIOE->OTYPER = 0x00000000; |
||||
/* No pull-up, pull-down for PEx pins */
|
||||
GPIOE->PUPDR = 0x00000000; |
||||
|
||||
/* Connect PFx pins to FMC Alternate function */ |
||||
GPIOF->AFR[0] = 0xCCCCCCCC; |
||||
GPIOF->AFR[1] = 0xCCCCCCCC; |
||||
/* Configure PFx pins in Alternate function mode */
|
||||
GPIOF->MODER = 0xAA800AAA; |
||||
/* Configure PFx pins speed to 50 MHz */
|
||||
GPIOF->OSPEEDR = 0xAA800AAA; |
||||
/* Configure PFx pins Output type to push-pull */
|
||||
GPIOF->OTYPER = 0x00000000; |
||||
/* No pull-up, pull-down for PFx pins */
|
||||
GPIOF->PUPDR = 0x00000000; |
||||
|
||||
/* Connect PGx pins to FMC Alternate function */ |
||||
GPIOG->AFR[0] = 0xCCCCCCCC; |
||||
GPIOG->AFR[1] = 0xCCCCCCCC; |
||||
/* Configure PGx pins in Alternate function mode */
|
||||
GPIOG->MODER = 0xAAAAAAAA; |
||||
/* Configure PGx pins speed to 50 MHz */
|
||||
GPIOG->OSPEEDR = 0xAAAAAAAA; |
||||
/* Configure PGx pins Output type to push-pull */
|
||||
GPIOG->OTYPER = 0x00000000; |
||||
/* No pull-up, pull-down for PGx pins */
|
||||
GPIOG->PUPDR = 0x00000000; |
||||
|
||||
/* Connect PHx pins to FMC Alternate function */ |
||||
GPIOH->AFR[0] = 0x00C0CC00; |
||||
GPIOH->AFR[1] = 0xCCCCCCCC; |
||||
/* Configure PHx pins in Alternate function mode */
|
||||
GPIOH->MODER = 0xAAAA08A0; |
||||
/* Configure PHx pins speed to 50 MHz */
|
||||
GPIOH->OSPEEDR = 0xAAAA08A0; |
||||
/* Configure PHx pins Output type to push-pull */
|
||||
GPIOH->OTYPER = 0x00000000; |
||||
/* No pull-up, pull-down for PHx pins */
|
||||
GPIOH->PUPDR = 0x00000000; |
||||
|
||||
/* Connect PIx pins to FMC Alternate function */ |
||||
GPIOI->AFR[0] = 0xCCCCCCCC; |
||||
GPIOI->AFR[1] = 0x00000CC0; |
||||
/* Configure PIx pins in Alternate function mode */
|
||||
GPIOI->MODER = 0x0028AAAA; |
||||
/* Configure PIx pins speed to 50 MHz */
|
||||
GPIOI->OSPEEDR = 0x0028AAAA; |
||||
/* Configure PIx pins Output type to push-pull */
|
||||
GPIOI->OTYPER = 0x00000000; |
||||
/* No pull-up, pull-down for PIx pins */
|
||||
GPIOI->PUPDR = 0x00000000; |
||||
|
||||
/*-- FMC Configuration -------------------------------------------------------*/ |
||||
/* Enable the FMC interface clock */ |
||||
RCC->AHB3ENR |= 0x00000001; |
||||
/* Delay after an RCC peripheral clock enabling */ |
||||
tmp = READ_BIT(RCC->AHB3ENR, RCC_AHB3ENR_FMCEN); |
||||
|
||||
FMC_Bank5_6->SDCR[0] = 0x000019E4; |
||||
FMC_Bank5_6->SDTR[0] = 0x01115351;
|
||||
|
||||
/* SDRAM initialization sequence */ |
||||
/* Clock enable command */ |
||||
FMC_Bank5_6->SDCMR = 0x00000011;
|
||||
tmpreg = FMC_Bank5_6->SDSR & 0x00000020;
|
||||
while((tmpreg != 0) && (timeout-- > 0)) |
||||
{ |
||||
tmpreg = FMC_Bank5_6->SDSR & 0x00000020;
|
||||
} |
||||
|
||||
/* Delay */ |
||||
for (index = 0; index<1000; index++); |
||||
|
||||
/* PALL command */ |
||||
FMC_Bank5_6->SDCMR = 0x00000012;
|
||||
tmpreg = FMC_Bank5_6->SDSR & 0x00000020; |
||||
timeout = 0xFFFF; |
||||
while((tmpreg != 0) && (timeout-- > 0)) |
||||
{ |
||||
tmpreg = FMC_Bank5_6->SDSR & 0x00000020;
|
||||
} |
||||
|
||||
/* Auto refresh command */ |
||||
FMC_Bank5_6->SDCMR = 0x00000073; |
||||
tmpreg = FMC_Bank5_6->SDSR & 0x00000020; |
||||
timeout = 0xFFFF; |
||||
while((tmpreg != 0) && (timeout-- > 0)) |
||||
{ |
||||
tmpreg = FMC_Bank5_6->SDSR & 0x00000020;
|
||||
} |
||||
|
||||
/* MRD register program */ |
||||
FMC_Bank5_6->SDCMR = 0x00046014; |
||||
tmpreg = FMC_Bank5_6->SDSR & 0x00000020; |
||||
timeout = 0xFFFF; |
||||
while((tmpreg != 0) && (timeout-- > 0)) |
||||
{ |
||||
tmpreg = FMC_Bank5_6->SDSR & 0x00000020;
|
||||
}
|
||||
|
||||
/* Set refresh count */ |
||||
tmpreg = FMC_Bank5_6->SDRTR; |
||||
FMC_Bank5_6->SDRTR = (tmpreg | (0x0000027C<<1)); |
||||
|
||||
/* Disable write protection */ |
||||
tmpreg = FMC_Bank5_6->SDCR[0];
|
||||
FMC_Bank5_6->SDCR[0] = (tmpreg & 0xFFFFFDFF); |
||||
|
||||
#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) |
||||
/* Configure and enable Bank1_SRAM2 */ |
||||
FMC_Bank1->BTCR[2] = 0x00001011; |
||||
FMC_Bank1->BTCR[3] = 0x00000201; |
||||
FMC_Bank1E->BWTR[2] = 0x0fffffff; |
||||
#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx */ |
||||
#if defined(STM32F469xx) || defined(STM32F479xx) |
||||
/* Configure and enable Bank1_SRAM2 */ |
||||
FMC_Bank1->BTCR[2] = 0x00001091; |
||||
FMC_Bank1->BTCR[3] = 0x00110212; |
||||
FMC_Bank1E->BWTR[2] = 0x0fffffff; |
||||
#endif /* STM32F469xx || STM32F479xx */ |
||||
|
||||
(void)(tmp);
|
||||
} |
||||
#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx */ |
||||
#elif defined (DATA_IN_ExtSRAM) || defined (DATA_IN_ExtSDRAM) |
||||
/**
|
||||
* @brief Setup the external memory controller. |
||||
* Called in startup_stm32f4xx.s before jump to main. |
||||
* This function configures the external memories (SRAM/SDRAM) |
||||
* This SRAM/SDRAM will be used as program data memory (including heap and stack). |
||||
* @param None |
||||
* @retval None |
||||
*/ |
||||
void SystemInit_ExtMemCtl(void) |
||||
{ |
||||
__IO uint32_t tmp = 0x00; |
||||
#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)\ |
||||
|| defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx) |
||||
#if defined (DATA_IN_ExtSDRAM) |
||||
register uint32_t tmpreg = 0, timeout = 0xFFFF; |
||||
register __IO uint32_t index; |
||||
|
||||
#if defined(STM32F446xx) |
||||
/* Enable GPIOA, GPIOC, GPIOD, GPIOE, GPIOF, GPIOG interface
|
||||
clock */ |
||||
RCC->AHB1ENR |= 0x0000007D; |
||||
#else |
||||
/* Enable GPIOC, GPIOD, GPIOE, GPIOF, GPIOG, GPIOH and GPIOI interface
|
||||
clock */ |
||||
RCC->AHB1ENR |= 0x000001F8; |
||||
#endif /* STM32F446xx */ |
||||
/* Delay after an RCC peripheral clock enabling */ |
||||
tmp = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOCEN); |
||||
|
||||
#if defined(STM32F446xx) |
||||
/* Connect PAx pins to FMC Alternate function */ |
||||
GPIOA->AFR[0] |= 0xC0000000; |
||||
GPIOA->AFR[1] |= 0x00000000; |
||||
/* Configure PDx pins in Alternate function mode */ |
||||
GPIOA->MODER |= 0x00008000; |
||||
/* Configure PDx pins speed to 50 MHz */ |
||||
GPIOA->OSPEEDR |= 0x00008000; |
||||
/* Configure PDx pins Output type to push-pull */ |
||||
GPIOA->OTYPER |= 0x00000000; |
||||
/* No pull-up, pull-down for PDx pins */ |
||||
GPIOA->PUPDR |= 0x00000000; |
||||
|
||||
/* Connect PCx pins to FMC Alternate function */ |
||||
GPIOC->AFR[0] |= 0x00CC0000; |
||||
GPIOC->AFR[1] |= 0x00000000; |
||||
/* Configure PDx pins in Alternate function mode */ |
||||
GPIOC->MODER |= 0x00000A00; |
||||
/* Configure PDx pins speed to 50 MHz */ |
||||
GPIOC->OSPEEDR |= 0x00000A00; |
||||
/* Configure PDx pins Output type to push-pull */ |
||||
GPIOC->OTYPER |= 0x00000000; |
||||
/* No pull-up, pull-down for PDx pins */ |
||||
GPIOC->PUPDR |= 0x00000000; |
||||
#endif /* STM32F446xx */ |
||||
|
||||
/* Connect PDx pins to FMC Alternate function */ |
||||
GPIOD->AFR[0] = 0x000000CC; |
||||
GPIOD->AFR[1] = 0xCC000CCC; |
||||
/* Configure PDx pins in Alternate function mode */
|
||||
GPIOD->MODER = 0xA02A000A; |
||||
/* Configure PDx pins speed to 50 MHz */
|
||||
GPIOD->OSPEEDR = 0xA02A000A; |
||||
/* Configure PDx pins Output type to push-pull */
|
||||
GPIOD->OTYPER = 0x00000000; |
||||
/* No pull-up, pull-down for PDx pins */
|
||||
GPIOD->PUPDR = 0x00000000; |
||||
|
||||
/* Connect PEx pins to FMC Alternate function */ |
||||
GPIOE->AFR[0] = 0xC00000CC; |
||||
GPIOE->AFR[1] = 0xCCCCCCCC; |
||||
/* Configure PEx pins in Alternate function mode */
|
||||
GPIOE->MODER = 0xAAAA800A; |
||||
/* Configure PEx pins speed to 50 MHz */
|
||||
GPIOE->OSPEEDR = 0xAAAA800A; |
||||
/* Configure PEx pins Output type to push-pull */
|
||||
GPIOE->OTYPER = 0x00000000; |
||||
/* No pull-up, pull-down for PEx pins */
|
||||
GPIOE->PUPDR = 0x00000000; |
||||
|
||||
/* Connect PFx pins to FMC Alternate function */ |
||||
GPIOF->AFR[0] = 0xCCCCCCCC; |
||||
GPIOF->AFR[1] = 0xCCCCCCCC; |
||||
/* Configure PFx pins in Alternate function mode */
|
||||
GPIOF->MODER = 0xAA800AAA; |
||||
/* Configure PFx pins speed to 50 MHz */
|
||||
GPIOF->OSPEEDR = 0xAA800AAA; |
||||
/* Configure PFx pins Output type to push-pull */
|
||||
GPIOF->OTYPER = 0x00000000; |
||||
/* No pull-up, pull-down for PFx pins */
|
||||
GPIOF->PUPDR = 0x00000000; |
||||
|
||||
/* Connect PGx pins to FMC Alternate function */ |
||||
GPIOG->AFR[0] = 0xCCCCCCCC; |
||||
GPIOG->AFR[1] = 0xCCCCCCCC; |
||||
/* Configure PGx pins in Alternate function mode */
|
||||
GPIOG->MODER = 0xAAAAAAAA; |
||||
/* Configure PGx pins speed to 50 MHz */
|
||||
GPIOG->OSPEEDR = 0xAAAAAAAA; |
||||
/* Configure PGx pins Output type to push-pull */
|
||||
GPIOG->OTYPER = 0x00000000; |
||||
/* No pull-up, pull-down for PGx pins */
|
||||
GPIOG->PUPDR = 0x00000000; |
||||
|
||||
#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)\ |
||||
|| defined(STM32F469xx) || defined(STM32F479xx)
|
||||
/* Connect PHx pins to FMC Alternate function */ |
||||
GPIOH->AFR[0] = 0x00C0CC00; |
||||
GPIOH->AFR[1] = 0xCCCCCCCC; |
||||
/* Configure PHx pins in Alternate function mode */
|
||||
GPIOH->MODER = 0xAAAA08A0; |
||||
/* Configure PHx pins speed to 50 MHz */
|
||||
GPIOH->OSPEEDR = 0xAAAA08A0; |
||||
/* Configure PHx pins Output type to push-pull */
|
||||
GPIOH->OTYPER = 0x00000000; |
||||
/* No pull-up, pull-down for PHx pins */
|
||||
GPIOH->PUPDR = 0x00000000; |
||||
|
||||
/* Connect PIx pins to FMC Alternate function */ |
||||
GPIOI->AFR[0] = 0xCCCCCCCC; |
||||
GPIOI->AFR[1] = 0x00000CC0; |
||||
/* Configure PIx pins in Alternate function mode */
|
||||
GPIOI->MODER = 0x0028AAAA; |
||||
/* Configure PIx pins speed to 50 MHz */
|
||||
GPIOI->OSPEEDR = 0x0028AAAA; |
||||
/* Configure PIx pins Output type to push-pull */
|
||||
GPIOI->OTYPER = 0x00000000; |
||||
/* No pull-up, pull-down for PIx pins */
|
||||
GPIOI->PUPDR = 0x00000000; |
||||
#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx */ |
||||
|
||||
/*-- FMC Configuration -------------------------------------------------------*/ |
||||
/* Enable the FMC interface clock */ |
||||
RCC->AHB3ENR |= 0x00000001; |
||||
/* Delay after an RCC peripheral clock enabling */ |
||||
tmp = READ_BIT(RCC->AHB3ENR, RCC_AHB3ENR_FMCEN); |
||||
|
||||
/* Configure and enable SDRAM bank1 */ |
||||
#if defined(STM32F446xx) |
||||
FMC_Bank5_6->SDCR[0] = 0x00001954; |
||||
#else |
||||
FMC_Bank5_6->SDCR[0] = 0x000019E4; |
||||
#endif /* STM32F446xx */ |
||||
FMC_Bank5_6->SDTR[0] = 0x01115351;
|
||||
|
||||
/* SDRAM initialization sequence */ |
||||
/* Clock enable command */ |
||||
FMC_Bank5_6->SDCMR = 0x00000011;
|
||||
tmpreg = FMC_Bank5_6->SDSR & 0x00000020;
|
||||
while((tmpreg != 0) && (timeout-- > 0)) |
||||
{ |
||||
tmpreg = FMC_Bank5_6->SDSR & 0x00000020;
|
||||
} |
||||
|
||||
/* Delay */ |
||||
for (index = 0; index<1000; index++); |
||||
|
||||
/* PALL command */ |
||||
FMC_Bank5_6->SDCMR = 0x00000012;
|
||||
tmpreg = FMC_Bank5_6->SDSR & 0x00000020; |
||||
timeout = 0xFFFF; |
||||
while((tmpreg != 0) && (timeout-- > 0)) |
||||
{ |
||||
tmpreg = FMC_Bank5_6->SDSR & 0x00000020;
|
||||
} |
||||
|
||||
/* Auto refresh command */ |
||||
#if defined(STM32F446xx) |
||||
FMC_Bank5_6->SDCMR = 0x000000F3; |
||||
#else |
||||
FMC_Bank5_6->SDCMR = 0x00000073; |
||||
#endif /* STM32F446xx */ |
||||
tmpreg = FMC_Bank5_6->SDSR & 0x00000020; |
||||
timeout = 0xFFFF; |
||||
while((tmpreg != 0) && (timeout-- > 0)) |
||||
{ |
||||
tmpreg = FMC_Bank5_6->SDSR & 0x00000020;
|
||||
} |
||||
|
||||
/* MRD register program */ |
||||
#if defined(STM32F446xx) |
||||
FMC_Bank5_6->SDCMR = 0x00044014; |
||||
#else |
||||
FMC_Bank5_6->SDCMR = 0x00046014; |
||||
#endif /* STM32F446xx */ |
||||
tmpreg = FMC_Bank5_6->SDSR & 0x00000020; |
||||
timeout = 0xFFFF; |
||||
while((tmpreg != 0) && (timeout-- > 0)) |
||||
{ |
||||
tmpreg = FMC_Bank5_6->SDSR & 0x00000020;
|
||||
}
|
||||
|
||||
/* Set refresh count */ |
||||
tmpreg = FMC_Bank5_6->SDRTR; |
||||
#if defined(STM32F446xx) |
||||
FMC_Bank5_6->SDRTR = (tmpreg | (0x0000050C<<1)); |
||||
#else |
||||
FMC_Bank5_6->SDRTR = (tmpreg | (0x0000027C<<1)); |
||||
#endif /* STM32F446xx */ |
||||
|
||||
/* Disable write protection */ |
||||
tmpreg = FMC_Bank5_6->SDCR[0];
|
||||
FMC_Bank5_6->SDCR[0] = (tmpreg & 0xFFFFFDFF); |
||||
#endif /* DATA_IN_ExtSDRAM */ |
||||
#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F446xx || STM32F469xx || STM32F479xx */ |
||||
|
||||
#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx)\ |
||||
|| defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)\
|
||||
|| defined(STM32F469xx) || defined(STM32F479xx) || defined(STM32F412Zx) || defined(STM32F412Vx) |
||||
|
||||
#if defined(DATA_IN_ExtSRAM) |
||||
/*-- GPIOs Configuration -----------------------------------------------------*/ |
||||
/* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ |
||||
RCC->AHB1ENR |= 0x00000078; |
||||
/* Delay after an RCC peripheral clock enabling */ |
||||
tmp = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIODEN); |
||||
|
||||
/* Connect PDx pins to FMC Alternate function */ |
||||
GPIOD->AFR[0] = 0x00CCC0CC; |
||||
GPIOD->AFR[1] = 0xCCCCCCCC; |
||||
/* Configure PDx pins in Alternate function mode */
|
||||
GPIOD->MODER = 0xAAAA0A8A; |
||||
/* Configure PDx pins speed to 100 MHz */
|
||||
GPIOD->OSPEEDR = 0xFFFF0FCF; |
||||
/* Configure PDx pins Output type to push-pull */
|
||||
GPIOD->OTYPER = 0x00000000; |
||||
/* No pull-up, pull-down for PDx pins */
|
||||
GPIOD->PUPDR = 0x00000000; |
||||
|
||||
/* Connect PEx pins to FMC Alternate function */ |
||||
GPIOE->AFR[0] = 0xC00CC0CC; |
||||
GPIOE->AFR[1] = 0xCCCCCCCC; |
||||
/* Configure PEx pins in Alternate function mode */
|
||||
GPIOE->MODER = 0xAAAA828A; |
||||
/* Configure PEx pins speed to 100 MHz */
|
||||
GPIOE->OSPEEDR = 0xFFFFC3CF; |
||||
/* Configure PEx pins Output type to push-pull */
|
||||
GPIOE->OTYPER = 0x00000000; |
||||
/* No pull-up, pull-down for PEx pins */
|
||||
GPIOE->PUPDR = 0x00000000; |
||||
|
||||
/* Connect PFx pins to FMC Alternate function */ |
||||
GPIOF->AFR[0] = 0x00CCCCCC; |
||||
GPIOF->AFR[1] = 0xCCCC0000; |
||||
/* Configure PFx pins in Alternate function mode */
|
||||
GPIOF->MODER = 0xAA000AAA; |
||||
/* Configure PFx pins speed to 100 MHz */
|
||||
GPIOF->OSPEEDR = 0xFF000FFF; |
||||
/* Configure PFx pins Output type to push-pull */
|
||||
GPIOF->OTYPER = 0x00000000; |
||||
/* No pull-up, pull-down for PFx pins */
|
||||
GPIOF->PUPDR = 0x00000000; |
||||
|
||||
/* Connect PGx pins to FMC Alternate function */ |
||||
GPIOG->AFR[0] = 0x00CCCCCC; |
||||
GPIOG->AFR[1] = 0x000000C0; |
||||
/* Configure PGx pins in Alternate function mode */
|
||||
GPIOG->MODER = 0x00085AAA; |
||||
/* Configure PGx pins speed to 100 MHz */
|
||||
GPIOG->OSPEEDR = 0x000CAFFF; |
||||
/* Configure PGx pins Output type to push-pull */
|
||||
GPIOG->OTYPER = 0x00000000; |
||||
/* No pull-up, pull-down for PGx pins */
|
||||
GPIOG->PUPDR = 0x00000000; |
||||
|
||||
/*-- FMC/FSMC Configuration --------------------------------------------------*/ |
||||
/* Enable the FMC/FSMC interface clock */ |
||||
RCC->AHB3ENR |= 0x00000001; |
||||
|
||||
#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) |
||||
/* Delay after an RCC peripheral clock enabling */ |
||||
tmp = READ_BIT(RCC->AHB3ENR, RCC_AHB3ENR_FMCEN); |
||||
/* Configure and enable Bank1_SRAM2 */ |
||||
FMC_Bank1->BTCR[2] = 0x00001011; |
||||
FMC_Bank1->BTCR[3] = 0x00000201; |
||||
FMC_Bank1E->BWTR[2] = 0x0fffffff; |
||||
#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx */ |
||||
#if defined(STM32F469xx) || defined(STM32F479xx) |
||||
/* Delay after an RCC peripheral clock enabling */ |
||||
tmp = READ_BIT(RCC->AHB3ENR, RCC_AHB3ENR_FMCEN); |
||||
/* Configure and enable Bank1_SRAM2 */ |
||||
FMC_Bank1->BTCR[2] = 0x00001091; |
||||
FMC_Bank1->BTCR[3] = 0x00110212; |
||||
FMC_Bank1E->BWTR[2] = 0x0fffffff; |
||||
#endif /* STM32F469xx || STM32F479xx */ |
||||
#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx)|| defined(STM32F417xx)\ |
||||
|| defined(STM32F412Zx) || defined(STM32F412Vx) |
||||
/* Delay after an RCC peripheral clock enabling */ |
||||
tmp = READ_BIT(RCC->AHB3ENR, RCC_AHB3ENR_FSMCEN); |
||||
/* Configure and enable Bank1_SRAM2 */ |
||||
FSMC_Bank1->BTCR[2] = 0x00001011; |
||||
FSMC_Bank1->BTCR[3] = 0x00000201; |
||||
FSMC_Bank1E->BWTR[2] = 0x0FFFFFFF; |
||||
#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F412Zx || STM32F412Vx */ |
||||
|
||||
#endif /* DATA_IN_ExtSRAM */ |
||||
#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F427xx || STM32F437xx ||\ |
||||
STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx || STM32F412Zx || STM32F412Vx */
|
||||
(void)(tmp);
|
||||
} |
||||
#endif /* DATA_IN_ExtSRAM && DATA_IN_ExtSDRAM */ |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
@ -0,0 +1,105 @@
|
||||
/* USER CODE BEGIN Header */ |
||||
/**
|
||||
****************************************************************************** |
||||
* @file tim.c |
||||
* @brief This file provides code for the configuration |
||||
* of the TIM instances. |
||||
****************************************************************************** |
||||
* @attention |
||||
* |
||||
* Copyright (c) 2022 STMicroelectronics. |
||||
* All rights reserved. |
||||
* |
||||
* This software is licensed under terms that can be found in the LICENSE file |
||||
* in the root directory of this software component. |
||||
* If no LICENSE file comes with this software, it is provided AS-IS. |
||||
* |
||||
****************************************************************************** |
||||
*/ |
||||
/* USER CODE END Header */ |
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include "tim.h" |
||||
|
||||
/* USER CODE BEGIN 0 */ |
||||
|
||||
/* USER CODE END 0 */ |
||||
|
||||
TIM_HandleTypeDef htim1; |
||||
|
||||
/* TIM1 init function */ |
||||
void MX_TIM1_Init(void) |
||||
{ |
||||
|
||||
/* USER CODE BEGIN TIM1_Init 0 */ |
||||
|
||||
/* USER CODE END TIM1_Init 0 */ |
||||
|
||||
TIM_ClockConfigTypeDef sClockSourceConfig = {0}; |
||||
TIM_MasterConfigTypeDef sMasterConfig = {0}; |
||||
|
||||
/* USER CODE BEGIN TIM1_Init 1 */ |
||||
|
||||
/* USER CODE END TIM1_Init 1 */ |
||||
htim1.Instance = TIM1; |
||||
htim1.Init.Prescaler = 0; |
||||
htim1.Init.CounterMode = TIM_COUNTERMODE_UP; |
||||
htim1.Init.Period = 65535; |
||||
htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; |
||||
htim1.Init.RepetitionCounter = 0; |
||||
htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; |
||||
if (HAL_TIM_Base_Init(&htim1) != HAL_OK) |
||||
{ |
||||
Error_Handler(); |
||||
} |
||||
sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; |
||||
if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK) |
||||
{ |
||||
Error_Handler(); |
||||
} |
||||
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; |
||||
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; |
||||
if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK) |
||||
{ |
||||
Error_Handler(); |
||||
} |
||||
/* USER CODE BEGIN TIM1_Init 2 */ |
||||
|
||||
/* USER CODE END TIM1_Init 2 */ |
||||
|
||||
} |
||||
|
||||
void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle) |
||||
{ |
||||
|
||||
if(tim_baseHandle->Instance==TIM1) |
||||
{ |
||||
/* USER CODE BEGIN TIM1_MspInit 0 */ |
||||
|
||||
/* USER CODE END TIM1_MspInit 0 */ |
||||
/* TIM1 clock enable */ |
||||
__HAL_RCC_TIM1_CLK_ENABLE(); |
||||
/* USER CODE BEGIN TIM1_MspInit 1 */ |
||||
|
||||
/* USER CODE END TIM1_MspInit 1 */ |
||||
} |
||||
} |
||||
|
||||
void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* tim_baseHandle) |
||||
{ |
||||
|
||||
if(tim_baseHandle->Instance==TIM1) |
||||
{ |
||||
/* USER CODE BEGIN TIM1_MspDeInit 0 */ |
||||
|
||||
/* USER CODE END TIM1_MspDeInit 0 */ |
||||
/* Peripheral clock disable */ |
||||
__HAL_RCC_TIM1_CLK_DISABLE(); |
||||
/* USER CODE BEGIN TIM1_MspDeInit 1 */ |
||||
|
||||
/* USER CODE END TIM1_MspDeInit 1 */ |
||||
} |
||||
} |
||||
|
||||
/* USER CODE BEGIN 1 */ |
||||
|
||||
/* USER CODE END 1 */ |
@ -0,0 +1,186 @@
|
||||
/* USER CODE BEGIN Header */ |
||||
/**
|
||||
****************************************************************************** |
||||
* @file usart.c |
||||
* @brief This file provides code for the configuration |
||||
* of the USART instances. |
||||
****************************************************************************** |
||||
* @attention |
||||
* |
||||
* Copyright (c) 2022 STMicroelectronics. |
||||
* All rights reserved. |
||||
* |
||||
* This software is licensed under terms that can be found in the LICENSE file |
||||
* in the root directory of this software component. |
||||
* If no LICENSE file comes with this software, it is provided AS-IS. |
||||
* |
||||
****************************************************************************** |
||||
*/ |
||||
/* USER CODE END Header */ |
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include "usart.h" |
||||
|
||||
/* USER CODE BEGIN 0 */ |
||||
|
||||
/* USER CODE END 0 */ |
||||
|
||||
UART_HandleTypeDef huart3; |
||||
UART_HandleTypeDef huart6; |
||||
|
||||
/* USART3 init function */ |
||||
|
||||
void MX_USART3_UART_Init(void) |
||||
{ |
||||
|
||||
/* USER CODE BEGIN USART3_Init 0 */ |
||||
|
||||
/* USER CODE END USART3_Init 0 */ |
||||
|
||||
/* USER CODE BEGIN USART3_Init 1 */ |
||||
|
||||
/* USER CODE END USART3_Init 1 */ |
||||
huart3.Instance = USART3; |
||||
huart3.Init.BaudRate = 115200; |
||||
huart3.Init.WordLength = UART_WORDLENGTH_8B; |
||||
huart3.Init.StopBits = UART_STOPBITS_1; |
||||
huart3.Init.Parity = UART_PARITY_NONE; |
||||
huart3.Init.Mode = UART_MODE_TX_RX; |
||||
huart3.Init.HwFlowCtl = UART_HWCONTROL_NONE; |
||||
huart3.Init.OverSampling = UART_OVERSAMPLING_16; |
||||
if (HAL_UART_Init(&huart3) != HAL_OK) |
||||
{ |
||||
Error_Handler(); |
||||
} |
||||
/* USER CODE BEGIN USART3_Init 2 */ |
||||
|
||||
/* USER CODE END USART3_Init 2 */ |
||||
|
||||
} |
||||
/* USART6 init function */ |
||||
|
||||
void MX_USART6_UART_Init(void) |
||||
{ |
||||
|
||||
/* USER CODE BEGIN USART6_Init 0 */ |
||||
|
||||
/* USER CODE END USART6_Init 0 */ |
||||
|
||||
/* USER CODE BEGIN USART6_Init 1 */ |
||||
|
||||
/* USER CODE END USART6_Init 1 */ |
||||
huart6.Instance = USART6; |
||||
huart6.Init.BaudRate = 115200; |
||||
huart6.Init.WordLength = UART_WORDLENGTH_8B; |
||||
huart6.Init.StopBits = UART_STOPBITS_1; |
||||
huart6.Init.Parity = UART_PARITY_NONE; |
||||
huart6.Init.Mode = UART_MODE_TX_RX; |
||||
huart6.Init.HwFlowCtl = UART_HWCONTROL_NONE; |
||||
huart6.Init.OverSampling = UART_OVERSAMPLING_16; |
||||
if (HAL_UART_Init(&huart6) != HAL_OK) |
||||
{ |
||||
Error_Handler(); |
||||
} |
||||
/* USER CODE BEGIN USART6_Init 2 */ |
||||
|
||||
/* USER CODE END USART6_Init 2 */ |
||||
|
||||
} |
||||
|
||||
void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle) |
||||
{ |
||||
|
||||
GPIO_InitTypeDef GPIO_InitStruct = {0}; |
||||
if(uartHandle->Instance==USART3) |
||||
{ |
||||
/* USER CODE BEGIN USART3_MspInit 0 */ |
||||
|
||||
/* USER CODE END USART3_MspInit 0 */ |
||||
/* USART3 clock enable */ |
||||
__HAL_RCC_USART3_CLK_ENABLE(); |
||||
|
||||
__HAL_RCC_GPIOB_CLK_ENABLE(); |
||||
/**USART3 GPIO Configuration
|
||||
PB10 ------> USART3_TX |
||||
PB11 ------> USART3_RX |
||||
*/ |
||||
GPIO_InitStruct.Pin = STLK_RX_Pin|STLK_TX_Pin; |
||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; |
||||
GPIO_InitStruct.Pull = GPIO_PULLUP; |
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; |
||||
GPIO_InitStruct.Alternate = GPIO_AF7_USART3; |
||||
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); |
||||
|
||||
/* USER CODE BEGIN USART3_MspInit 1 */ |
||||
|
||||
/* USER CODE END USART3_MspInit 1 */ |
||||
} |
||||
else if(uartHandle->Instance==USART6) |
||||
{ |
||||
/* USER CODE BEGIN USART6_MspInit 0 */ |
||||
|
||||
/* USER CODE END USART6_MspInit 0 */ |
||||
/* USART6 clock enable */ |
||||
__HAL_RCC_USART6_CLK_ENABLE(); |
||||
|
||||
__HAL_RCC_GPIOG_CLK_ENABLE(); |
||||
/**USART6 GPIO Configuration
|
||||
PG14 ------> USART6_TX |
||||
PG9 ------> USART6_RX |
||||
*/ |
||||
GPIO_InitStruct.Pin = ARDUINO_USART6_TX_Pin|USART6_RX_Pin; |
||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; |
||||
GPIO_InitStruct.Pull = GPIO_NOPULL; |
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; |
||||
GPIO_InitStruct.Alternate = GPIO_AF8_USART6; |
||||
HAL_GPIO_Init(GPIOG, &GPIO_InitStruct); |
||||
|
||||
/* USER CODE BEGIN USART6_MspInit 1 */ |
||||
|
||||
/* USER CODE END USART6_MspInit 1 */ |
||||
} |
||||
} |
||||
|
||||
void HAL_UART_MspDeInit(UART_HandleTypeDef* uartHandle) |
||||
{ |
||||
|
||||
if(uartHandle->Instance==USART3) |
||||
{ |
||||
/* USER CODE BEGIN USART3_MspDeInit 0 */ |
||||
|
||||
/* USER CODE END USART3_MspDeInit 0 */ |
||||
/* Peripheral clock disable */ |
||||
__HAL_RCC_USART3_CLK_DISABLE(); |
||||
|
||||
/**USART3 GPIO Configuration
|
||||
PB10 ------> USART3_TX |
||||
PB11 ------> USART3_RX |
||||
*/ |
||||
HAL_GPIO_DeInit(GPIOB, STLK_RX_Pin|STLK_TX_Pin); |
||||
|
||||
/* USER CODE BEGIN USART3_MspDeInit 1 */ |
||||
|
||||
/* USER CODE END USART3_MspDeInit 1 */ |
||||
} |
||||
else if(uartHandle->Instance==USART6) |
||||
{ |
||||
/* USER CODE BEGIN USART6_MspDeInit 0 */ |
||||
|
||||
/* USER CODE END USART6_MspDeInit 0 */ |
||||
/* Peripheral clock disable */ |
||||
__HAL_RCC_USART6_CLK_DISABLE(); |
||||
|
||||
/**USART6 GPIO Configuration
|
||||
PG14 ------> USART6_TX |
||||
PG9 ------> USART6_RX |
||||
*/ |
||||
HAL_GPIO_DeInit(GPIOG, ARDUINO_USART6_TX_Pin|USART6_RX_Pin); |
||||
|
||||
/* USER CODE BEGIN USART6_MspDeInit 1 */ |
||||
|
||||
/* USER CODE END USART6_MspDeInit 1 */ |
||||
} |
||||
} |
||||
|
||||
/* USER CODE BEGIN 1 */ |
||||
|
||||
/* USER CODE END 1 */ |
@ -0,0 +1,549 @@
|
||||
/** |
||||
****************************************************************************** |
||||
* @file startup_stm32f469xx.s
|
||||
* @author MCD Application Team
|
||||
* @brief STM32F469xx Devices vector table for GCC based toolchains.
|
||||
* This module performs: |
||||
* - Set the initial SP |
||||
* - Set the initial PC == Reset_Handler, |
||||
* - Set the vector table entries with the exceptions ISR address |
||||
* - Branches to main in the C library (which eventually |
||||
* calls main()). |
||||
* After Reset the Cortex-M4 processor is in Thread mode, |
||||
* priority is Privileged, and the Stack is set to Main. |
||||
****************************************************************************** |
||||
* @attention
|
||||
* |
||||
* Copyright (c) 2017 STMicroelectronics. |
||||
* All rights reserved. |
||||
* |
||||
* This software is licensed under terms that can be found in the LICENSE file |
||||
* in the root directory of this software component. |
||||
* If no LICENSE file comes with this software, it is provided AS-IS. |
||||
* |
||||
****************************************************************************** |
||||
*/ |
||||
|
||||
.syntax unified
|
||||
.cpu cortex-m4 |
||||
.fpu softvfp
|
||||
.thumb |
||||
|
||||
.global g_pfnVectors
|
||||
.global Default_Handler
|
||||
|
||||
/* start address for the initialization values of the .data section.
|
||||
defined in linker script */ |
||||
.word _sidata
|
||||
/* start address for the .data section. defined in linker script */
|
||||
.word _sdata
|
||||
/* end address for the .data section. defined in linker script */ |
||||
.word _edata
|
||||
/* start address for the .bss section. defined in linker script */ |
||||
.word _sbss
|
||||
/* end address for the .bss section. defined in linker script */ |
||||
.word _ebss
|
||||
/* stack used for SystemInit_ExtMemCtl; always internal RAM used */ |
||||
|
||||
/** |
||||
* @brief This is the code that gets called when the processor first
|
||||
* starts execution following a reset event. Only the absolutely |
||||
* necessary set is performed, after which the application |
||||
* supplied main() routine is called.
|
||||
* @param None
|
||||
* @retval : None
|
||||
*/ |
||||
|
||||
.section .text.Reset_Handler |
||||
.weak Reset_Handler
|
||||
.type Reset_Handler, %function |
||||
Reset_Handler:
|
||||
ldr sp, =_estack /* set stack pointer */ |
||||
|
||||
/* Copy the data segment initializers from flash to SRAM */
|
||||
ldr r0, =_sdata |
||||
ldr r1, =_edata |
||||
ldr r2, =_sidata |
||||
movs r3, #0 |
||||
b LoopCopyDataInit |
||||
|
||||
CopyDataInit: |
||||
ldr r4, [r2, r3] |
||||
str r4, [r0, r3] |
||||
adds r3, r3, #4 |
||||
|
||||
LoopCopyDataInit: |
||||
adds r4, r0, r3 |
||||
cmp r4, r1 |
||||
bcc CopyDataInit |
||||
|
||||
/* Zero fill the bss segment. */ |
||||
ldr r2, =_sbss |
||||
ldr r4, =_ebss |
||||
movs r3, #0 |
||||
b LoopFillZerobss |
||||
|
||||
FillZerobss: |
||||
str r3, [r2] |
||||
adds r2, r2, #4 |
||||
|
||||
LoopFillZerobss: |
||||
cmp r2, r4 |
||||
bcc FillZerobss |
||||
|
||||
/* Call the clock system initialization function.*/ |
||||
bl SystemInit
|
||||
/* Call static constructors */ |
||||
bl __libc_init_array |
||||
/* Call the application's entry point.*/ |
||||
bl main |
||||
bx lr
|
||||
.size Reset_Handler, .-Reset_Handler |
||||
|
||||
/** |
||||
* @brief This is the code that gets called when the processor receives an
|
||||
* unexpected interrupt. This simply enters an infinite loop, preserving |
||||
* the system state for examination by a debugger. |
||||
* @param None
|
||||
* @retval None
|
||||
*/ |
||||
.section .text.Default_Handler,"ax",%progbits |
||||
Default_Handler: |
||||
Infinite_Loop: |
||||
b Infinite_Loop |
||||
.size Default_Handler, .-Default_Handler |
||||
/****************************************************************************** |
||||
* |
||||
* The minimal vector table for a Cortex M3. Note that the proper constructs |
||||
* must be placed on this to ensure that it ends up at physical address |
||||
* 0x0000.0000. |
||||
*
|
||||
*******************************************************************************/ |
||||
.section .isr_vector,"a",%progbits |
||||
.type g_pfnVectors, %object |
||||
.size g_pfnVectors, .-g_pfnVectors
|
||||
|
||||
g_pfnVectors: |
||||
.word _estack
|
||||
.word Reset_Handler
|
||||
|
||||
.word NMI_Handler
|
||||
.word HardFault_Handler
|
||||
.word MemManage_Handler
|
||||
.word BusFault_Handler
|
||||
.word UsageFault_Handler
|
||||
.word 0
|
||||
.word 0
|
||||
.word 0
|
||||
.word 0
|
||||
.word SVC_Handler
|
||||
.word DebugMon_Handler
|
||||
.word 0
|
||||
.word PendSV_Handler
|
||||
.word SysTick_Handler
|
||||
|
||||
/* External Interrupts */ |
||||
.word WWDG_IRQHandler /* Window WatchDog */
|
||||
.word PVD_IRQHandler /* PVD through EXTI Line detection */
|
||||
.word TAMP_STAMP_IRQHandler /* Tamper and TimeStamps through the EXTI line */
|
||||
.word RTC_WKUP_IRQHandler /* RTC Wakeup through the EXTI line */
|
||||
.word FLASH_IRQHandler /* FLASH */
|
||||
.word RCC_IRQHandler /* RCC */
|
||||
.word EXTI0_IRQHandler /* EXTI Line0 */
|
||||
.word EXTI1_IRQHandler /* EXTI Line1 */
|
||||
.word EXTI2_IRQHandler /* EXTI Line2 */
|
||||
.word EXTI3_IRQHandler /* EXTI Line3 */
|
||||
.word EXTI4_IRQHandler /* EXTI Line4 */
|
||||
.word DMA1_Stream0_IRQHandler /* DMA1 Stream 0 */
|
||||
.word DMA1_Stream1_IRQHandler /* DMA1 Stream 1 */
|
||||
.word DMA1_Stream2_IRQHandler /* DMA1 Stream 2 */
|
||||
.word DMA1_Stream3_IRQHandler /* DMA1 Stream 3 */
|
||||
.word DMA1_Stream4_IRQHandler /* DMA1 Stream 4 */
|
||||
.word DMA1_Stream5_IRQHandler /* DMA1 Stream 5 */
|
||||
.word DMA1_Stream6_IRQHandler /* DMA1 Stream 6 */
|
||||
.word ADC_IRQHandler /* ADC1, ADC2 and ADC3s */
|
||||
.word CAN1_TX_IRQHandler /* CAN1 TX */
|
||||
.word CAN1_RX0_IRQHandler /* CAN1 RX0 */
|
||||
.word CAN1_RX1_IRQHandler /* CAN1 RX1 */
|
||||
.word CAN1_SCE_IRQHandler /* CAN1 SCE */
|
||||
.word EXTI9_5_IRQHandler /* External Line[9:5]s */
|
||||
.word TIM1_BRK_TIM9_IRQHandler /* TIM1 Break and TIM9 */
|
||||
.word TIM1_UP_TIM10_IRQHandler /* TIM1 Update and TIM10 */
|
||||
.word TIM1_TRG_COM_TIM11_IRQHandler /* TIM1 Trigger and Commutation and TIM11 */ |
||||
.word TIM1_CC_IRQHandler /* TIM1 Capture Compare */
|
||||
.word TIM2_IRQHandler /* TIM2 */
|
||||
.word TIM3_IRQHandler /* TIM3 */
|
||||
.word TIM4_IRQHandler /* TIM4 */
|
||||
.word I2C1_EV_IRQHandler /* I2C1 Event */
|
||||
.word I2C1_ER_IRQHandler /* I2C1 Error */
|
||||
.word I2C2_EV_IRQHandler /* I2C2 Event */
|
||||
.word I2C2_ER_IRQHandler /* I2C2 Error */
|
||||
.word SPI1_IRQHandler /* SPI1 */
|
||||
.word SPI2_IRQHandler /* SPI2 */
|
||||
.word USART1_IRQHandler /* USART1 */
|
||||
.word USART2_IRQHandler /* USART2 */
|
||||
.word USART3_IRQHandler /* USART3 */
|
||||
.word EXTI15_10_IRQHandler /* External Line[15:10]s */
|
||||
.word RTC_Alarm_IRQHandler /* RTC Alarm (A and B) through EXTI Line */
|
||||
.word OTG_FS_WKUP_IRQHandler /* USB OTG FS Wakeup through EXTI line */
|
||||
.word TIM8_BRK_TIM12_IRQHandler /* TIM8 Break and TIM12 */
|
||||
.word TIM8_UP_TIM13_IRQHandler /* TIM8 Update and TIM13 */
|
||||
.word TIM8_TRG_COM_TIM14_IRQHandler /* TIM8 Trigger and Commutation and TIM14 */ |
||||
.word TIM8_CC_IRQHandler /* TIM8 Capture Compare */
|
||||
.word DMA1_Stream7_IRQHandler /* DMA1 Stream7 */
|
||||
.word FMC_IRQHandler /* FMC */
|
||||
.word SDIO_IRQHandler /* SDIO */
|
||||
.word TIM5_IRQHandler /* TIM5 */
|
||||
.word SPI3_IRQHandler /* SPI3 */
|
||||
.word UART4_IRQHandler /* UART4 */
|
||||
.word UART5_IRQHandler /* UART5 */
|
||||
.word TIM6_DAC_IRQHandler /* TIM6 and DAC1&2 underrun errors */
|
||||
.word TIM7_IRQHandler /* TIM7 */ |
||||
.word DMA2_Stream0_IRQHandler /* DMA2 Stream 0 */
|
||||
.word DMA2_Stream1_IRQHandler /* DMA2 Stream 1 */
|
||||
.word DMA2_Stream2_IRQHandler /* DMA2 Stream 2 */
|
||||
.word DMA2_Stream3_IRQHandler /* DMA2 Stream 3 */
|
||||
.word DMA2_Stream4_IRQHandler /* DMA2 Stream 4 */
|
||||
.word ETH_IRQHandler /* Ethernet */
|
||||
.word ETH_WKUP_IRQHandler /* Ethernet Wakeup through EXTI line */
|
||||
.word CAN2_TX_IRQHandler /* CAN2 TX */
|
||||
.word CAN2_RX0_IRQHandler /* CAN2 RX0 */
|
||||
.word CAN2_RX1_IRQHandler /* CAN2 RX1 */
|
||||
.word CAN2_SCE_IRQHandler /* CAN2 SCE */
|
||||
.word OTG_FS_IRQHandler /* USB OTG FS */
|
||||
.word DMA2_Stream5_IRQHandler /* DMA2 Stream 5 */
|
||||
.word DMA2_Stream6_IRQHandler /* DMA2 Stream 6 */
|
||||
.word DMA2_Stream7_IRQHandler /* DMA2 Stream 7 */
|
||||
.word USART6_IRQHandler /* USART6 */
|
||||
.word I2C3_EV_IRQHandler /* I2C3 event */
|
||||
.word I2C3_ER_IRQHandler /* I2C3 error */
|
||||
.word OTG_HS_EP1_OUT_IRQHandler /* USB OTG HS End Point 1 Out */
|
||||
.word OTG_HS_EP1_IN_IRQHandler /* USB OTG HS End Point 1 In */
|
||||
.word OTG_HS_WKUP_IRQHandler /* USB OTG HS Wakeup through EXTI */
|
||||
.word OTG_HS_IRQHandler /* USB OTG HS */
|
||||
.word DCMI_IRQHandler /* DCMI */
|
||||
.word 0 /* Reserved */
|
||||
.word HASH_RNG_IRQHandler /* Hash and Rng */ |
||||
.word FPU_IRQHandler /* FPU */ |
||||
.word UART7_IRQHandler /* UART7 */
|
||||
.word UART8_IRQHandler /* UART8 */ |
||||
.word SPI4_IRQHandler /* SPI4 */ |
||||
.word SPI5_IRQHandler /* SPI5 */ |
||||
.word SPI6_IRQHandler /* SPI6 */ |
||||
.word SAI1_IRQHandler /* SAI1 */ |
||||
.word LTDC_IRQHandler /* LTDC */ |
||||
.word LTDC_ER_IRQHandler /* LTDC error */ |
||||
.word DMA2D_IRQHandler /* DMA2D */ |
||||
.word QUADSPI_IRQHandler /* QUADSPI */ |
||||
.word DSI_IRQHandler /* DSI */
|
||||
|
||||
|
||||
/******************************************************************************* |
||||
* |
||||
* Provide weak aliases for each Exception handler to the Default_Handler.
|
||||
* As they are weak aliases, any function with the same name will override
|
||||
* this definition. |
||||
*
|
||||
*******************************************************************************/ |
||||
.weak NMI_Handler
|
||||
.thumb_set NMI_Handler,Default_Handler |
||||
|
||||
.weak HardFault_Handler
|
||||
.thumb_set HardFault_Handler,Default_Handler |
||||
|
||||
.weak MemManage_Handler
|
||||
.thumb_set MemManage_Handler,Default_Handler |
||||
|
||||
.weak BusFault_Handler
|
||||
.thumb_set BusFault_Handler,Default_Handler |
||||
|
||||
.weak UsageFault_Handler
|
||||
.thumb_set UsageFault_Handler,Default_Handler |
||||
|
||||
.weak SVC_Handler
|
||||
.thumb_set SVC_Handler,Default_Handler |
||||
|
||||
.weak DebugMon_Handler
|
||||
.thumb_set DebugMon_Handler,Default_Handler |
||||
|
||||
.weak PendSV_Handler
|
||||
.thumb_set PendSV_Handler,Default_Handler |
||||
|
||||
.weak SysTick_Handler
|
||||
.thumb_set SysTick_Handler,Default_Handler
|
||||
|
||||
.weak WWDG_IRQHandler
|
||||
.thumb_set WWDG_IRQHandler,Default_Handler
|
||||
|
||||
.weak PVD_IRQHandler
|
||||
.thumb_set PVD_IRQHandler,Default_Handler |
||||
|
||||
.weak TAMP_STAMP_IRQHandler
|
||||
.thumb_set TAMP_STAMP_IRQHandler,Default_Handler |
||||
|
||||
.weak RTC_WKUP_IRQHandler
|
||||
.thumb_set RTC_WKUP_IRQHandler,Default_Handler |
||||
|
||||
.weak FLASH_IRQHandler
|
||||
.thumb_set FLASH_IRQHandler,Default_Handler |
||||
|
||||
.weak RCC_IRQHandler
|
||||
.thumb_set RCC_IRQHandler,Default_Handler |
||||
|
||||
.weak EXTI0_IRQHandler
|
||||
.thumb_set EXTI0_IRQHandler,Default_Handler |
||||
|
||||
.weak EXTI1_IRQHandler
|
||||
.thumb_set EXTI1_IRQHandler,Default_Handler |
||||
|
||||
.weak EXTI2_IRQHandler
|
||||
.thumb_set EXTI2_IRQHandler,Default_Handler
|
||||
|
||||
.weak EXTI3_IRQHandler
|
||||
.thumb_set EXTI3_IRQHandler,Default_Handler |
||||
|
||||
.weak EXTI4_IRQHandler
|
||||
.thumb_set EXTI4_IRQHandler,Default_Handler |
||||
|
||||
.weak DMA1_Stream0_IRQHandler
|
||||
.thumb_set DMA1_Stream0_IRQHandler,Default_Handler |
||||
|
||||
.weak DMA1_Stream1_IRQHandler
|
||||
.thumb_set DMA1_Stream1_IRQHandler,Default_Handler |
||||
|
||||
.weak DMA1_Stream2_IRQHandler
|
||||
.thumb_set DMA1_Stream2_IRQHandler,Default_Handler |
||||
|
||||
.weak DMA1_Stream3_IRQHandler
|
||||
.thumb_set DMA1_Stream3_IRQHandler,Default_Handler
|
||||
|
||||
.weak DMA1_Stream4_IRQHandler
|
||||
.thumb_set DMA1_Stream4_IRQHandler,Default_Handler |
||||
|
||||
.weak DMA1_Stream5_IRQHandler
|
||||
.thumb_set DMA1_Stream5_IRQHandler,Default_Handler |
||||
|
||||
.weak DMA1_Stream6_IRQHandler
|
||||
.thumb_set DMA1_Stream6_IRQHandler,Default_Handler |
||||
|
||||
.weak ADC_IRQHandler
|
||||
.thumb_set ADC_IRQHandler,Default_Handler |
||||
|
||||
.weak CAN1_TX_IRQHandler
|
||||
.thumb_set CAN1_TX_IRQHandler,Default_Handler |
||||
|
||||
.weak CAN1_RX0_IRQHandler
|
||||
.thumb_set CAN1_RX0_IRQHandler,Default_Handler |
||||
|
||||
.weak CAN1_RX1_IRQHandler
|
||||
.thumb_set CAN1_RX1_IRQHandler,Default_Handler |
||||
|
||||
.weak CAN1_SCE_IRQHandler
|
||||
.thumb_set CAN1_SCE_IRQHandler,Default_Handler |
||||
|
||||
.weak EXTI9_5_IRQHandler
|
||||
.thumb_set EXTI9_5_IRQHandler,Default_Handler |
||||
|
||||
.weak TIM1_BRK_TIM9_IRQHandler
|
||||
.thumb_set TIM1_BRK_TIM9_IRQHandler,Default_Handler |
||||
|
||||
.weak TIM1_UP_TIM10_IRQHandler
|
||||
.thumb_set TIM1_UP_TIM10_IRQHandler,Default_Handler |
||||
|
||||
.weak TIM1_TRG_COM_TIM11_IRQHandler
|
||||
.thumb_set TIM1_TRG_COM_TIM11_IRQHandler,Default_Handler |
||||
|
||||
.weak TIM1_CC_IRQHandler
|
||||
.thumb_set TIM1_CC_IRQHandler,Default_Handler |
||||
|
||||
.weak TIM2_IRQHandler
|
||||
.thumb_set TIM2_IRQHandler,Default_Handler |
||||
|
||||
.weak TIM3_IRQHandler
|
||||
.thumb_set TIM3_IRQHandler,Default_Handler |
||||
|
||||
.weak TIM4_IRQHandler
|
||||
.thumb_set TIM4_IRQHandler,Default_Handler |
||||
|
||||
.weak I2C1_EV_IRQHandler
|
||||
.thumb_set I2C1_EV_IRQHandler,Default_Handler |
||||
|
||||
.weak I2C1_ER_IRQHandler
|
||||
.thumb_set I2C1_ER_IRQHandler,Default_Handler |
||||
|
||||
.weak I2C2_EV_IRQHandler
|
||||
.thumb_set I2C2_EV_IRQHandler,Default_Handler |
||||
|
||||
.weak I2C2_ER_IRQHandler
|
||||
.thumb_set I2C2_ER_IRQHandler,Default_Handler |
||||
|
||||
.weak SPI1_IRQHandler
|
||||
.thumb_set SPI1_IRQHandler,Default_Handler |
||||
|
||||
.weak SPI2_IRQHandler
|
||||
.thumb_set SPI2_IRQHandler,Default_Handler |
||||
|
||||
.weak USART1_IRQHandler
|
||||
.thumb_set USART1_IRQHandler,Default_Handler |
||||
|
||||
.weak USART2_IRQHandler
|
||||
.thumb_set USART2_IRQHandler,Default_Handler |
||||
|
||||
.weak USART3_IRQHandler
|
||||
.thumb_set USART3_IRQHandler,Default_Handler |
||||
|
||||
.weak EXTI15_10_IRQHandler
|
||||
.thumb_set EXTI15_10_IRQHandler,Default_Handler |
||||
|
||||
.weak RTC_Alarm_IRQHandler
|
||||
.thumb_set RTC_Alarm_IRQHandler,Default_Handler |
||||
|
||||
.weak OTG_FS_WKUP_IRQHandler
|
||||
.thumb_set OTG_FS_WKUP_IRQHandler,Default_Handler |
||||
|
||||
.weak TIM8_BRK_TIM12_IRQHandler
|
||||
.thumb_set TIM8_BRK_TIM12_IRQHandler,Default_Handler |
||||
|
||||
.weak TIM8_UP_TIM13_IRQHandler
|
||||
.thumb_set TIM8_UP_TIM13_IRQHandler,Default_Handler |
||||
|
||||
.weak TIM8_TRG_COM_TIM14_IRQHandler
|
||||
.thumb_set TIM8_TRG_COM_TIM14_IRQHandler,Default_Handler |
||||
|
||||
.weak TIM8_CC_IRQHandler
|
||||
.thumb_set TIM8_CC_IRQHandler,Default_Handler |
||||
|
||||
.weak DMA1_Stream7_IRQHandler
|
||||
.thumb_set DMA1_Stream7_IRQHandler,Default_Handler |
||||
|
||||
.weak FMC_IRQHandler
|
||||
.thumb_set FMC_IRQHandler,Default_Handler |
||||
|
||||
.weak SDIO_IRQHandler
|
||||
.thumb_set SDIO_IRQHandler,Default_Handler |
||||
|
||||
.weak TIM5_IRQHandler
|
||||
.thumb_set TIM5_IRQHandler,Default_Handler |
||||
|
||||
.weak SPI3_IRQHandler
|
||||
.thumb_set SPI3_IRQHandler,Default_Handler |
||||
|
||||
.weak UART4_IRQHandler
|
||||
.thumb_set UART4_IRQHandler,Default_Handler |
||||
|
||||
.weak UART5_IRQHandler
|
||||
.thumb_set UART5_IRQHandler,Default_Handler |
||||
|
||||
.weak TIM6_DAC_IRQHandler
|
||||
.thumb_set TIM6_DAC_IRQHandler,Default_Handler |
||||
|
||||
.weak TIM7_IRQHandler
|
||||
.thumb_set TIM7_IRQHandler,Default_Handler |
||||
|
||||
.weak DMA2_Stream0_IRQHandler
|
||||
.thumb_set DMA2_Stream0_IRQHandler,Default_Handler |
||||
|
||||
.weak DMA2_Stream1_IRQHandler
|
||||
.thumb_set DMA2_Stream1_IRQHandler,Default_Handler |
||||
|
||||
.weak DMA2_Stream2_IRQHandler
|
||||
.thumb_set DMA2_Stream2_IRQHandler,Default_Handler |
||||
|
||||
.weak DMA2_Stream3_IRQHandler
|
||||
.thumb_set DMA2_Stream3_IRQHandler,Default_Handler |
||||
|
||||
.weak DMA2_Stream4_IRQHandler
|
||||
.thumb_set DMA2_Stream4_IRQHandler,Default_Handler |
||||
|
||||
.weak ETH_IRQHandler
|
||||
.thumb_set ETH_IRQHandler,Default_Handler |
||||
|
||||
.weak ETH_WKUP_IRQHandler
|
||||
.thumb_set ETH_WKUP_IRQHandler,Default_Handler |
||||
|
||||
.weak CAN2_TX_IRQHandler
|
||||
.thumb_set CAN2_TX_IRQHandler,Default_Handler |
||||
|
||||
.weak CAN2_RX0_IRQHandler
|
||||
.thumb_set CAN2_RX0_IRQHandler,Default_Handler |
||||
|
||||
.weak CAN2_RX1_IRQHandler
|
||||
.thumb_set CAN2_RX1_IRQHandler,Default_Handler |
||||
|
||||
.weak CAN2_SCE_IRQHandler
|
||||
.thumb_set CAN2_SCE_IRQHandler,Default_Handler |
||||
|
||||
.weak OTG_FS_IRQHandler
|
||||
.thumb_set OTG_FS_IRQHandler,Default_Handler |
||||
|
||||
.weak DMA2_Stream5_IRQHandler
|
||||
.thumb_set DMA2_Stream5_IRQHandler,Default_Handler |
||||
|
||||
.weak DMA2_Stream6_IRQHandler
|
||||
.thumb_set DMA2_Stream6_IRQHandler,Default_Handler |
||||
|
||||
.weak DMA2_Stream7_IRQHandler
|
||||
.thumb_set DMA2_Stream7_IRQHandler,Default_Handler |
||||
|
||||
.weak USART6_IRQHandler
|
||||
.thumb_set USART6_IRQHandler,Default_Handler |
||||
|
||||
.weak I2C3_EV_IRQHandler
|
||||
.thumb_set I2C3_EV_IRQHandler,Default_Handler |
||||
|
||||
.weak I2C3_ER_IRQHandler
|
||||
.thumb_set I2C3_ER_IRQHandler,Default_Handler |
||||
|
||||
.weak OTG_HS_EP1_OUT_IRQHandler
|
||||
.thumb_set OTG_HS_EP1_OUT_IRQHandler,Default_Handler |
||||
|
||||
.weak OTG_HS_EP1_IN_IRQHandler
|
||||
.thumb_set OTG_HS_EP1_IN_IRQHandler,Default_Handler |
||||
|
||||
.weak OTG_HS_WKUP_IRQHandler
|
||||
.thumb_set OTG_HS_WKUP_IRQHandler,Default_Handler |
||||
|
||||
.weak OTG_HS_IRQHandler
|
||||
.thumb_set OTG_HS_IRQHandler,Default_Handler |
||||
|
||||
.weak DCMI_IRQHandler
|
||||
.thumb_set DCMI_IRQHandler,Default_Handler |
||||
|
||||
.weak HASH_RNG_IRQHandler
|
||||
.thumb_set HASH_RNG_IRQHandler,Default_Handler
|
||||
|
||||
.weak FPU_IRQHandler
|
||||
.thumb_set FPU_IRQHandler,Default_Handler
|
||||
|
||||
.weak UART7_IRQHandler
|
||||
.thumb_set UART7_IRQHandler,Default_Handler |
||||
|
||||
.weak UART8_IRQHandler
|
||||
.thumb_set UART8_IRQHandler,Default_Handler |
||||
|
||||
.weak SPI4_IRQHandler
|
||||
.thumb_set SPI4_IRQHandler,Default_Handler |
||||
|
||||
.weak SPI5_IRQHandler
|
||||
.thumb_set SPI5_IRQHandler,Default_Handler |
||||
|
||||
.weak SPI6_IRQHandler
|
||||
.thumb_set SPI6_IRQHandler,Default_Handler |
||||
|
||||
.weak SAI1_IRQHandler
|
||||
.thumb_set SAI1_IRQHandler,Default_Handler |
||||
|
||||
.weak LTDC_IRQHandler
|
||||
.thumb_set LTDC_IRQHandler,Default_Handler |
||||
|
||||
.weak LTDC_ER_IRQHandler
|
||||
.thumb_set LTDC_ER_IRQHandler,Default_Handler |
||||
|
||||
.weak DMA2D_IRQHandler
|
||||
.thumb_set DMA2D_IRQHandler,Default_Handler |
||||
|
||||
.weak QUADSPI_IRQHandler
|
||||
.thumb_set QUADSPI_IRQHandler,Default_Handler |
||||
|
||||
.weak DSI_IRQHandler
|
||||
.thumb_set DSI_IRQHandler,Default_Handler |
@ -0,0 +1,759 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> |
||||
<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns="http://www.w3.org/TR/REC-html40"><head> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> |
||||
|
||||
|
||||
<link rel="File-List" href="Library_files/filelist.xml"> |
||||
|
||||
|
||||
<link rel="Edit-Time-Data" href="Library_files/editdata.mso"><!--[if !mso]> <style> v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VML);} .shape {behavior:url(#default#VML);} </style> <![endif]--><title>Release Notes for BSP Components Common Drivers</title><!--[if gte mso 9]><xml> <o:DocumentProperties> <o:Author>STMicroelectronics</o:Author> <o:LastAuthor>STMicroelectronics</o:LastAuthor> <o:Revision>37</o:Revision> <o:TotalTime>136</o:TotalTime> <o:Created>2009-02-27T19:26:00Z</o:Created> <o:LastSaved>2009-03-01T17:56:00Z</o:LastSaved> <o:Pages>1</o:Pages> <o:Words>522</o:Words> <o:Characters>2977</o:Characters> <o:Company>STMicroelectronics</o:Company> <o:Lines>24</o:Lines> <o:Paragraphs>6</o:Paragraphs> <o:CharactersWithSpaces>3493</o:CharactersWithSpaces> <o:Version>11.6568</o:Version> </o:DocumentProperties> </xml><![endif]--><!--[if gte mso 9]><xml> <w:WordDocument> <w:Zoom>110</w:Zoom> <w:ValidateAgainstSchemas/> <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid> <w:IgnoreMixedContent>false</w:IgnoreMixedContent> <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText> <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel> </w:WordDocument> </xml><![endif]--><!--[if gte mso 9]><xml> <w:LatentStyles DefLockedState="false" LatentStyleCount="156"> </w:LatentStyles> </xml><![endif]--> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<style> |
||||
<!-- |
||||
/* Style Definitions */ |
||||
p.MsoNormal, li.MsoNormal, div.MsoNormal |
||||
{mso-style-parent:""; |
||||
margin:0in; |
||||
margin-bottom:.0001pt; |
||||
mso-pagination:widow-orphan; |
||||
font-size:12.0pt; |
||||
font-family:"Times New Roman"; |
||||
mso-fareast-font-family:"Times New Roman";} |
||||
h2 |
||||
{mso-style-next:Normal; |
||||
margin-top:12.0pt; |
||||
margin-right:0in; |
||||
margin-bottom:3.0pt; |
||||
margin-left:0in; |
||||
mso-pagination:widow-orphan; |
||||
page-break-after:avoid; |
||||
mso-outline-level:2; |
||||
font-size:14.0pt; |
||||
font-family:Arial; |
||||
font-weight:bold; |
||||
font-style:italic;} |
||||
a:link, span.MsoHyperlink |
||||
{color:blue; |
||||
text-decoration:underline; |
||||
text-underline:single;} |
||||
a:visited, span.MsoHyperlinkFollowed |
||||
{color:blue; |
||||
text-decoration:underline; |
||||
text-underline:single;} |
||||
p |
||||
{mso-margin-top-alt:auto; |
||||
margin-right:0in; |
||||
mso-margin-bottom-alt:auto; |
||||
margin-left:0in; |
||||
mso-pagination:widow-orphan; |
||||
font-size:12.0pt; |
||||
font-family:"Times New Roman"; |
||||
mso-fareast-font-family:"Times New Roman";} |
||||
@page Section1 |
||||
{size:8.5in 11.0in; |
||||
margin:1.0in 1.25in 1.0in 1.25in; |
||||
mso-header-margin:.5in; |
||||
mso-footer-margin:.5in; |
||||
mso-paper-source:0;} |
||||
div.Section1 |
||||
{page:Section1;} |
||||
--> |
||||
</style><!--[if gte mso 10]> <style> /* Style Definitions */ table.MsoNormalTable {mso-style-name:"Table Normal"; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-parent:""; mso-padding-alt:0in 5.4pt 0in 5.4pt; mso-para-margin:0in; mso-para-margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:10.0pt; font-family:"Times New Roman"; mso-ansi-language:#0400; mso-fareast-language:#0400; mso-bidi-language:#0400;} </style> <![endif]--><!--[if gte mso 9]><xml> <o:shapedefaults v:ext="edit" spidmax="5122"/> </xml><![endif]--><!--[if gte mso 9]><xml> <o:shapelayout v:ext="edit"> <o:idmap v:ext="edit" data="1"/> </o:shapelayout></xml><![endif]--> |
||||
<meta content="MCD Application Team" name="author"></head> |
||||
<body link="blue" vlink="blue"> |
||||
<div class="Section1"> |
||||
<p class="MsoNormal"><span style="font-family: Arial;"><o:p><br> |
||||
</o:p></span></p> |
||||
<div align="center"> |
||||
<table class="MsoNormalTable" style="width: 675pt;" border="0" cellpadding="0" cellspacing="0" width="900"> |
||||
<tbody> |
||||
<tr> |
||||
<td style="padding: 0cm;" valign="top"> |
||||
<table class="MsoNormalTable" style="width: 675pt;" border="0" cellpadding="0" cellspacing="0" width="900"> |
||||
<tbody> |
||||
<tr> |
||||
<td style="vertical-align: top;"> |
||||
<p class="MsoNormal"><span style="font-size: 8pt; font-family: Arial; color: blue;"><a href="../../../../Release_Notes.html">Back to Release page</a><o:p></o:p></span></p> |
||||
</td> |
||||
</tr> |
||||
<tr style=""> |
||||
<td style="padding: 1.5pt;"> |
||||
|
||||
<h1 style="margin-bottom: 18pt; text-align: center;" align="center"><span style="font-size: 20pt; font-family: Verdana; color: rgb(51, 102, 255);">Release |
||||
Notes for BSP Components Common Drivers</span><span style="font-size: 20pt; font-family: Verdana;"><o:p></o:p></span></h1> |
||||
|
||||
<p class="MsoNormal" style="text-align: center;" align="center"><span style="font-size: 10pt; font-family: Arial; color: black;">Copyright |
||||
2015 STMicroelectronics</span><span style="color: black;"><u1:p></u1:p><o:p></o:p></span></p> |
||||
<p class="MsoNormal" style="text-align: center;" align="center"><span style="font-size: 10pt; font-family: Arial; color: black;"><img alt="" id="_x0000_i1025" src="../../../../_htmresc/st_logo.png" style="border: 0px solid ; width: 86px; height: 65px;"></span><span style="font-size: 10pt;"><o:p></o:p></span></p> |
||||
</td> |
||||
</tr> |
||||
</tbody> |
||||
</table> |
||||
<p class="MsoNormal"><span style="font-family: Arial; display: none;"><o:p> </o:p></span></p> |
||||
<table class="MsoNormalTable" style="width: 675pt;" border="0" cellpadding="0" width="900"> |
||||
<tbody> |
||||
<tr style=""> |
||||
<td style="padding: 0cm;" valign="top"> |
||||
<span style="font-family: "Times New Roman";"> |
||||
</span> |
||||
<h2 style="background: rgb(51, 102, 255) none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial;"><a name="History"></a><span style="font-size: 12pt; color: white;">Update History</span></h2> |
||||
<h3 style="background: rgb(51, 102, 255) none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial; margin-right: 500pt; width: 210px;"><span style="font-size: 10pt; font-family: Arial; color: white;">V4.0.1 / 21-July-2015 <o:p></o:p></span></h3><p class="MsoNormal" style="margin: 4.5pt 0cm 4.5pt 18pt;"><b style=""><u><span style="font-size: 10pt; font-family: Verdana; color: black;">Main |
||||
Changes<o:p></o:p></span></u></b></p> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span><span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span><ul style="list-style-type: square;"><li><span style="font-size: 10pt; font-family: Verdana;"></span><span style="font-family: Verdana;"></span><span style="font-size: 10pt; font-family: Verdana;"></span><span style="font-size: 10pt; font-family: Verdana;">tsensor.h: Fix compilation issue on TSENSOR_InitTypeDef</span></li></ul><h3 style="background: rgb(51, 102, 255) none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial; margin-right: 500pt; width: 210px;"><span style="font-size: 10pt; font-family: Arial; color: white;">V4.0.0 / 22-June-2015 <o:p></o:p></span></h3><p class="MsoNormal" style="margin: 4.5pt 0cm 4.5pt 18pt;"><b style=""><u><span style="font-size: 10pt; font-family: Verdana; color: black;">Main |
||||
Changes<o:p></o:p></span></u></b></p> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span><span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span><ul style="list-style-type: square;"><li><span style="font-size: 10pt; font-family: Verdana;">accelero.h: add <span style="font-style: italic;">*DeInit</span> field in <span style="font-style: italic;">ACCELERO_DrvTypeDef</span> structure</span></li><li><span style="font-size: 10pt; font-family: Verdana;"></span><span style="font-size: 10pt; font-family: Verdana;">audio.h: add <span style="font-style: italic;">*DeInit</span> field in <span style="font-style: italic;">AUDIO_DrvTypeDef</span> structure</span></li><li><span style="font-size: 10pt; font-family: Verdana;">idd.h: </span></li><ul><li><span style="font-size: 10pt; font-family: Verdana;">add <span style="font-style: italic;">Shunt0StabDelay, Shunt1StabDelay, Shunt2StabDelay, Shunt3StabDelay, Shunt4StabDelay and ShuntNbOnBoard </span></span><span style="font-size: 10pt; font-family: Verdana;">fields in <span style="font-style: italic;">IDD_ConfigTypeDef</span> </span><span style="font-size: 10pt; font-family: Verdana;">structure</span></li><li><span style="font-size: 10pt; font-family: Verdana;">rename <span style="font-style: italic;">ShuntNumber</span> field to <span style="font-style: italic;">ShuntNbUsed</span> in </span><span style="font-size: 10pt; font-family: Verdana;"><span style="font-style: italic;">IDD_ConfigTypeDef</span> structure</span></li></ul><li><span style="font-size: 10pt; font-family: Verdana;">magneto.h: add <span style="font-style: italic;">*DeInit</span> field in <span style="font-style: italic;">MAGNETO_DrvTypeDef</span> structure</span></li><li><span style="font-size: 10pt; font-family: Verdana;"><span style="font-weight: bold;">Important Note:</span> this release V4.0.0 is not backward compatible with V3.0.0</span></li></ul><h3 style="background: rgb(51, 102, 255) none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial; margin-right: 500pt; width: 210px;"><span style="font-size: 10pt; font-family: Arial; color: white;">V3.0.0 / 28-April-2015 <o:p></o:p></span></h3><p class="MsoNormal" style="margin: 4.5pt 0cm 4.5pt 18pt;"><b style=""><u><span style="font-size: 10pt; font-family: Verdana; color: black;">Main |
||||
Changes<o:p></o:p></span></u></b></p> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span><span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span><ul style="list-style-type: square;"><li><span style="font-size: 10pt; font-family: Verdana;"></span><span style="font-family: Verdana;"></span><span style="font-size: 10pt; font-family: Verdana;">accelero.h: </span><span style="font-size: 10pt; font-family: Verdana;">add <span style="font-style: italic;">*LowPower</span> field in <span style="font-style: italic;">ACCELERO_DrvTypeDef</span> structure</span><span style="font-size: 10pt; font-family: Verdana;"></span></li><li><span style="font-size: 10pt; font-family: Verdana;">magneto.h: </span><span style="font-size: 10pt; font-family: Verdana;">add <span style="font-style: italic;">*LowPower</span> field in <span style="font-style: italic;">MAGNETO_DrvTypeDef</span> structure</span></li><li><span style="font-size: 10pt; font-family: Verdana;">gyro.h: add <span style="font-style: italic;">*DeInit</span> and <span style="font-style: italic;">*LowPower</span> fields in <span style="font-style: italic;">GYRO_DrvTypeDef</span> structure<br></span></li><li><span style="font-size: 10pt; font-family: Verdana;">camera.h: add <span style="font-style: italic;">CAMERA_COLOR_EFFECT_NONE</span> define</span></li><li><span style="font-size: 10pt; font-family: Verdana;">idd.h: </span></li><ul><li><span style="font-size: 10pt; font-family: Verdana;">add <span style="font-style: italic;">MeasureNb</span>, <span style="font-style: italic;">DeltaDelayUnit</span> and <span style="font-style: italic;">DeltaDelayValue</span> fields in <span style="font-style: italic;">IDD_ConfigTypeDef</span> structure</span></li><li><span style="font-size: 10pt; font-family: Verdana;">rename <span style="font-style: italic;">PreDelay</span> field to <span style="font-style: italic;">PreDelayUnit</span> in </span><span style="font-size: 10pt; font-family: Verdana;"><span style="font-style: italic;">IDD_ConfigTypeDef</span> structure</span></li></ul> |
||||
<li><span style="font-size: 10pt; font-family: Verdana;"><span style="font-weight: bold;">Important Note:</span> this release V3.0.0 is not backward compatible with V2.2.0<br> |
||||
</span></li> |
||||
</ul><h3 style="background: rgb(51, 102, 255) none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial; margin-right: 500pt; width: 210px;"><span style="font-size: 10pt; font-family: Arial; color: white;">V2.2.0 / 09-February-2015 <o:p></o:p></span></h3><p class="MsoNormal" style="margin: 4.5pt 0cm 4.5pt 18pt;"><b style=""><u><span style="font-size: 10pt; font-family: Verdana; color: black;">Main |
||||
Changes<o:p></o:p></span></u></b></p> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span><span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span><ul style="list-style-type: square;"><li><span style="font-size: 10pt; font-family: Verdana;"></span><span style="font-family: Verdana;"></span><span style="font-size: 10pt; font-family: Verdana;">Magnetometer </span><span style="font-size: 10pt; font-family: Verdana;">driver function prototypes added (magneto.h file)</span></li><li><span style="font-size: 10pt; font-family: Verdana;">Update "idd.h" file to provide DeInit() and WakeUp() services in IDD current measurement driver</span></li></ul><h3 style="background: rgb(51, 102, 255) none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial; margin-right: 500pt; width: 210px;"><span style="font-size: 10pt; font-family: Arial; color: white;">V2.1.0 / 06-February-2015 <o:p></o:p></span></h3><p class="MsoNormal" style="margin: 4.5pt 0cm 4.5pt 18pt;"><b style=""><u><span style="font-size: 10pt; font-family: Verdana; color: black;">Main |
||||
Changes<o:p></o:p></span></u></b></p> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span><span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span><ul style="list-style-type: square;"><li><span style="font-size: 10pt; font-family: Verdana;"></span><span style="font-family: Verdana;"></span><span style="font-size: 10pt; font-family: Verdana;">IDD current measurement </span><span style="font-size: 10pt; font-family: Verdana;">driver function prototypes added (idd.h file)</span></li><li><span style="font-size: 10pt; font-family: Verdana;">io.h: add new typedef enum IO_PinState with IO_PIN_RESET and IO_PIN_SET values<br></span></li></ul><h3 style="background: rgb(51, 102, 255) none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial; margin-right: 500pt; width: 210px;"><span style="font-size: 10pt; font-family: Arial; color: white;">V2.0.0 / 15-December-2014 <o:p></o:p></span></h3><p class="MsoNormal" style="margin: 4.5pt 0cm 4.5pt 18pt;"><b style=""><u><span style="font-size: 10pt; font-family: Verdana; color: black;">Main |
||||
Changes<o:p></o:p></span></u></b></p> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span><span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span><ul style="list-style-type: square;"><li><span style="font-size: 10pt; font-family: Verdana;">Update "io.h" file to support MFX (Multi Function eXpander) device available on some STM32 boards</span></li><ul><li><span style="font-size: 10pt; font-family: Verdana;">add new entries for IO_ModeTypedef enumeration structure</span><span style="font-size: 10pt; font-family: Verdana;"></span></li><li><span style="font-size: 10pt; font-family: Verdana;">update the IO_DrvTypeDef structure</span></li><ul><li><span style="font-size: 10pt; font-family: Verdana;">Update all return values and function parameters to uint32_t</span></li><li><span style="font-size: 10pt; font-family: Verdana;">Add a return value for Config field</span></li></ul></ul><li style="font-family: Verdana;"><small><span style="font-weight: bold;">Important Note</span>: this version V2.0.0 is not backward compatible with V1.2.1</small></li></ul><h3 style="background: rgb(51, 102, 255) none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial; margin-right: 500pt; width: 180px;"><span style="font-size: 10pt; font-family: Arial; color: white;">V1.2.1 / 02-December-2014 <o:p></o:p></span></h3> |
||||
<p class="MsoNormal" style="margin: 4.5pt 0cm 4.5pt 18pt;"><b style=""><u><span style="font-size: 10pt; font-family: Verdana; color: black;">Main |
||||
Changes<o:p></o:p></span></u></b></p> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<ul style="list-style-type: square;"><li><span style="font-size: 10pt; font-family: Verdana;">gyro.h: change “__GIRO_H” by “__GYRO_H” to fix compilation issue under Mac OS</span><span style="font-size: 10pt; font-family: Verdana;"></span></li></ul><h3 style="background: rgb(51, 102, 255) none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial; margin-right: 500pt; width: 180px;"><span style="font-size: 10pt; font-family: Arial; color: white;">V1.2.0 / 18-June-2014 <o:p></o:p></span></h3><p class="MsoNormal" style="margin: 4.5pt 0cm 4.5pt 18pt;"><b style=""><u><span style="font-size: 10pt; font-family: Verdana; color: black;">Main |
||||
Changes<o:p></o:p></span></u></b></p> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span><span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span><ul style="list-style-type: square;"><li><span style="font-size: 10pt; font-family: Verdana;"></span><span style="font-family: Verdana;"></span><span style="font-size: 10pt; font-family: Verdana;">EPD (</span><span style="font-size: 10pt; font-family: Verdana;">E Paper Display) driver function prototype added (epd.h file)<br> |
||||
</span></li></ul><h3 style="background: rgb(51, 102, 255) none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial; margin-right: 500pt; width: 180px;"><span style="font-size: 10pt; font-family: Arial; color: white;">V1.1.0 / 21-March-2014 <o:p></o:p></span></h3><p class="MsoNormal" style="margin: 4.5pt 0cm 4.5pt 18pt;"><b style=""><u><span style="font-size: 10pt; font-family: Verdana; color: black;">Main |
||||
Changes<o:p></o:p></span></u></b></p> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span><span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span><ul style="list-style-type: square;"><li><span style="font-size: 10pt; font-family: Verdana;"></span><span style="font-family: Verdana;"></span><span style="font-size: 10pt; font-family: Verdana;">Temperature Sensor driver function prototype added</span></li></ul><span style="font-size: 10pt; font-family: Verdana;"></span><h3 style="background: rgb(51, 102, 255) none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial; margin-right: 500pt; width: 180px;"><span style="font-size: 10pt; font-family: Arial; color: white;">V1.0.0 / 18-February-2014 <o:p></o:p></span></h3> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<p class="MsoNormal" style="margin: 4.5pt 0cm 4.5pt 18pt;"><b style=""><u><span style="font-size: 10pt; font-family: Verdana; color: black;">Main |
||||
Changes<o:p></o:p></span></u></b></p> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span><span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span><ul style="list-style-type: square;"><li><span style="font-size: 10pt; font-family: Verdana;">First official release with </span><span style="font-size: 10pt; font-family: Verdana;">Accelerometer, </span><span style="font-size: 10pt; font-family: Verdana;">Audio, Camera, Gyroscope, IO, LCD and Touch Screen drivers function prototypes </span><span style="font-size: 10pt; font-family: Verdana;"></span></li></ul><span style="font-size: 10pt; font-family: Verdana;"><span style="font-style: italic; font-weight: bold;"></span></span><span style="font-size: 10pt; font-family: Verdana;"><span style="font-style: italic; font-weight: bold;"></span></span><span style="font-size: 10pt; font-family: Verdana;"><span style="font-style: italic; font-weight: bold;"></span></span><span style="font-size: 10pt; font-family: Verdana;"><span style="font-style: italic; font-weight: bold;"></span></span><span style="font-size: 10pt; font-family: Verdana;"><span style="font-style: italic; font-weight: bold;"></span></span><span style="font-size: 10pt; font-family: Verdana;"></span><h2 style="background: rgb(51, 102, 255) none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial;"><a name="License"></a><span style="font-size: 12pt; color: white;">License<o:p></o:p></span><br></h2> |
||||
<div style="text-align: justify;"><font size="-1"><span style="font-family: "Verdana","sans-serif";"> |
||||
Redistribution and use in source and binary forms, with or without |
||||
modification, are permitted provided that the following conditions are |
||||
met:</span><br> |
||||
</font> |
||||
<ol><li><font size="-1"><span style="font-family: "Verdana","sans-serif";">Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.</span><span style="font-family: "Verdana","sans-serif";"></span></font></li><li><font size="-1"><span style="font-family: "Verdana","sans-serif";">Redistributions |
||||
in binary form must reproduce the above copyright notice, this list of |
||||
conditions and the following disclaimer in </span><span style="font-family: "Verdana","sans-serif";">the documentation and/or other materials provided with the distribution.</span><span style="font-family: "Verdana","sans-serif";"></span></font></li><li><font size="-1"><span style="font-family: "Verdana","sans-serif";">Neither the name of STMicroelectronics nor the names of its contributors may be used to endorse or promote products derived </span><br> |
||||
</font> |
||||
</li></ol> |
||||
<font size="-1"><span style="font-family: "Verdana","sans-serif";"> from this software without specific prior written permission.</span><br> |
||||
<span style="font-family: "Verdana","sans-serif";"></span><br> |
||||
<span style="font-family: "Verdana","sans-serif";">THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED</span><span style="font-family: "Verdana","sans-serif";"> WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A </span><span style="font-family: "Verdana","sans-serif";">PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY </span><span style="font-family: "Verdana","sans-serif";">DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, </span><span style="font-family: "Verdana","sans-serif";">PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER</span><span style="font-family: "Verdana","sans-serif";"> CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR </span><span style="font-family: "Verdana","sans-serif";">OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</span></font> |
||||
|
||||
</div> |
||||
<p class="MsoNormal"><span style="font-size: 10pt; font-family: "Verdana","sans-serif"; color: black;"><font size="-1"></font><o:p></o:p></span></p> |
||||
<b><span style="font-size: 10pt; font-family: Verdana; color: black;"></span></b> |
||||
|
||||
<div class="MsoNormal" style="text-align: center;" align="center"><span style="color: black;"> |
||||
<hr align="center" size="2" width="100%"></span></div> |
||||
<p class="MsoNormal" style="margin: 4.5pt 0cm 4.5pt 18pt; text-align: center;" align="center"><span style="font-size: 10pt; font-family: Verdana; color: black;">For |
||||
complete documentation on </span><span style="font-size: 10pt; font-family: Verdana;">STM32<span style="color: black;"> Microcontrollers |
||||
visit </span><u><span style="color: blue;"><a href="http://www.st.com/internet/mcu/class/1734.jsp" target="_blank">www.st.com/STM32</a></span></u></span><span style="font-size: 10pt; font-family: Verdana;"><a target="_blank" href="http://www.st.com/internet/mcu/family/141.jsp"><u><span style="color: blue;"></span></u></a></span><span style="font-size: 10pt; font-family: Verdana;"><u><span style="color: blue;"></span></u></span><span style="color: black;"><o:p></o:p></span></p> |
||||
</td> |
||||
</tr> |
||||
</tbody> |
||||
</table> |
||||
<p class="MsoNormal"><span style="font-size: 10pt;"><o:p></o:p></span></p> |
||||
</td> |
||||
</tr> |
||||
</tbody> |
||||
</table> |
||||
</div> |
||||
<p class="MsoNormal"><o:p> </o:p></p> |
||||
</div> |
||||
|
||||
</body></html> |
@ -0,0 +1,143 @@
|
||||
/**
|
||||
****************************************************************************** |
||||
* @file accelero.h |
||||
* @author MCD Application Team |
||||
* @version V4.0.1 |
||||
* @date 21-July-2015 |
||||
* @brief This header file contains the functions prototypes for the Accelerometer driver. |
||||
****************************************************************************** |
||||
* @attention |
||||
* |
||||
* <h2><center>© COPYRIGHT(c) 2015 STMicroelectronics</center></h2> |
||||
* |
||||
* 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 STMicroelectronics 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. |
||||
* |
||||
****************************************************************************** |
||||
*/ |
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/ |
||||
#ifndef __ACCELERO_H |
||||
#define __ACCELERO_H |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include <stdint.h> |
||||
|
||||
/** @addtogroup BSP
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @addtogroup Components
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @addtogroup ACCELERO
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @defgroup ACCELERO_Exported_Types
|
||||
* @{ |
||||
*/
|
||||
|
||||
/** @defgroup ACCELERO_Driver_structure Accelerometer Driver structure
|
||||
* @{ |
||||
*/ |
||||
typedef struct |
||||
{
|
||||
void (*Init)(uint16_t); |
||||
void (*DeInit)(void);
|
||||
uint8_t (*ReadID)(void); |
||||
void (*Reset)(void); |
||||
void (*LowPower)(void); |
||||
void (*ConfigIT)(void); |
||||
void (*EnableIT)(uint8_t); |
||||
void (*DisableIT)(uint8_t); |
||||
uint8_t (*ITStatus)(uint16_t); |
||||
void (*ClearIT)(void); |
||||
void (*FilterConfig)(uint8_t); |
||||
void (*FilterCmd)(uint8_t); |
||||
void (*GetXYZ)(int16_t *); |
||||
}ACCELERO_DrvTypeDef; |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup ACCELERO_Configuration_structure Accelerometer Configuration structure
|
||||
* @{ |
||||
*/ |
||||
|
||||
/* ACCELERO struct */ |
||||
typedef struct |
||||
{ |
||||
uint8_t Power_Mode; /* Power-down/Normal Mode */ |
||||
uint8_t AccOutput_DataRate; /* OUT data rate */ |
||||
uint8_t Axes_Enable; /* Axes enable */ |
||||
uint8_t High_Resolution; /* High Resolution enabling/disabling */ |
||||
uint8_t BlockData_Update; /* Block Data Update */ |
||||
uint8_t Endianness; /* Endian Data selection */ |
||||
uint8_t AccFull_Scale; /* Full Scale selection */ |
||||
uint8_t Communication_Mode; |
||||
}ACCELERO_InitTypeDef; |
||||
|
||||
/* ACCELERO High Pass Filter struct */ |
||||
typedef struct |
||||
{ |
||||
uint8_t HighPassFilter_Mode_Selection; /* Internal filter mode */ |
||||
uint8_t HighPassFilter_CutOff_Frequency; /* High pass filter cut-off frequency */ |
||||
uint8_t HighPassFilter_AOI1; /* HPF_enabling/disabling for AOI function on interrupt 1 */ |
||||
uint8_t HighPassFilter_AOI2; /* HPF_enabling/disabling for AOI function on interrupt 2 */ |
||||
uint8_t HighPassFilter_Data_Sel; |
||||
uint8_t HighPassFilter_Stat; |
||||
}ACCELERO_FilterConfigTypeDef; |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
#endif /* __ACCELERO_H */ |
||||
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@ -0,0 +1,122 @@
|
||||
/**
|
||||
****************************************************************************** |
||||
* @file audio.h |
||||
* @author MCD Application Team |
||||
* @version V4.0.1 |
||||
* @date 21-July-2015 |
||||
* @brief This header file contains the common defines and functions prototypes |
||||
* for the Audio driver.
|
||||
****************************************************************************** |
||||
* @attention |
||||
* |
||||
* <h2><center>© COPYRIGHT(c) 2015 STMicroelectronics</center></h2> |
||||
* |
||||
* 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 STMicroelectronics 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. |
||||
* |
||||
****************************************************************************** |
||||
*/ |
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/ |
||||
#ifndef __AUDIO_H |
||||
#define __AUDIO_H |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include <stdint.h> |
||||
|
||||
/** @addtogroup BSP
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @addtogroup Components
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @addtogroup AUDIO
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @defgroup AUDIO_Exported_Constants
|
||||
* @{ |
||||
*/ |
||||
|
||||
/* Codec audio Standards */ |
||||
#define CODEC_STANDARD 0x04 |
||||
#define I2S_STANDARD I2S_STANDARD_PHILIPS |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup AUDIO_Exported_Types
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @defgroup AUDIO_Driver_structure Audio Driver structure
|
||||
* @{ |
||||
*/ |
||||
typedef struct |
||||
{ |
||||
uint32_t (*Init)(uint16_t, uint16_t, uint8_t, uint32_t); |
||||
void (*DeInit)(void); |
||||
uint32_t (*ReadID)(uint16_t); |
||||
uint32_t (*Play)(uint16_t, uint16_t*, uint16_t); |
||||
uint32_t (*Pause)(uint16_t); |
||||
uint32_t (*Resume)(uint16_t); |
||||
uint32_t (*Stop)(uint16_t, uint32_t); |
||||
uint32_t (*SetFrequency)(uint16_t, uint32_t); |
||||
uint32_t (*SetVolume)(uint16_t, uint8_t); |
||||
uint32_t (*SetMute)(uint16_t, uint32_t); |
||||
uint32_t (*SetOutputMode)(uint16_t, uint8_t); |
||||
uint32_t (*Reset)(uint16_t); |
||||
}AUDIO_DrvTypeDef; |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
#endif /* __AUDIO_H */ |
||||
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@ -0,0 +1,141 @@
|
||||
/**
|
||||
****************************************************************************** |
||||
* @file camera.h |
||||
* @author MCD Application Team |
||||
* @version V4.0.1 |
||||
* @date 21-July-2015 |
||||
* @brief This header file contains the common defines and functions prototypes |
||||
* for the camera driver.
|
||||
****************************************************************************** |
||||
* @attention |
||||
* |
||||
* <h2><center>© COPYRIGHT(c) 2015 STMicroelectronics</center></h2> |
||||
* |
||||
* 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 STMicroelectronics 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. |
||||
* |
||||
****************************************************************************** |
||||
*/
|
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/ |
||||
#ifndef __CAMERA_H |
||||
#define __CAMERA_H |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include <stdint.h> |
||||
|
||||
/** @addtogroup BSP
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @addtogroup Components
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @addtogroup CAMERA
|
||||
* @{ |
||||
*/ |
||||
|
||||
|
||||
/** @defgroup CAMERA_Exported_Types
|
||||
* @{ |
||||
*/
|
||||
|
||||
/** @defgroup CAMERA_Driver_structure Camera Driver structure
|
||||
* @{ |
||||
*/ |
||||
typedef struct |
||||
{ |
||||
void (*Init)(uint16_t, uint32_t); |
||||
uint16_t (*ReadID)(uint16_t);
|
||||
void (*Config)(uint16_t, uint32_t, uint32_t, uint32_t); |
||||
}CAMERA_DrvTypeDef; |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup CAMERA_Exported_Constants
|
||||
* @{ |
||||
*/ |
||||
#define CAMERA_R160x120 0x00 /* QQVGA Resolution */ |
||||
#define CAMERA_R320x240 0x01 /* QVGA Resolution */ |
||||
#define CAMERA_R480x272 0x02 /* 480x272 Resolution */ |
||||
#define CAMERA_R640x480 0x03 /* VGA Resolution */ |
||||
|
||||
#define CAMERA_CONTRAST_BRIGHTNESS 0x00 /* Camera contrast brightness features */ |
||||
#define CAMERA_BLACK_WHITE 0x01 /* Camera black white feature */ |
||||
#define CAMERA_COLOR_EFFECT 0x03 /* Camera color effect feature */ |
||||
|
||||
#define CAMERA_BRIGHTNESS_LEVEL0 0x00 /* Brightness level -2 */ |
||||
#define CAMERA_BRIGHTNESS_LEVEL1 0x01 /* Brightness level -1 */ |
||||
#define CAMERA_BRIGHTNESS_LEVEL2 0x02 /* Brightness level 0 */ |
||||
#define CAMERA_BRIGHTNESS_LEVEL3 0x03 /* Brightness level +1 */ |
||||
#define CAMERA_BRIGHTNESS_LEVEL4 0x04 /* Brightness level +2 */ |
||||
|
||||
#define CAMERA_CONTRAST_LEVEL0 0x05 /* Contrast level -2 */ |
||||
#define CAMERA_CONTRAST_LEVEL1 0x06 /* Contrast level -1 */ |
||||
#define CAMERA_CONTRAST_LEVEL2 0x07 /* Contrast level 0 */ |
||||
#define CAMERA_CONTRAST_LEVEL3 0x08 /* Contrast level +1 */ |
||||
#define CAMERA_CONTRAST_LEVEL4 0x09 /* Contrast level +2 */ |
||||
|
||||
#define CAMERA_BLACK_WHITE_BW 0x00 /* Black and white effect */ |
||||
#define CAMERA_BLACK_WHITE_NEGATIVE 0x01 /* Negative effect */ |
||||
#define CAMERA_BLACK_WHITE_BW_NEGATIVE 0x02 /* BW and Negative effect */ |
||||
#define CAMERA_BLACK_WHITE_NORMAL 0x03 /* Normal effect */ |
||||
|
||||
#define CAMERA_COLOR_EFFECT_NONE 0x00 /* No effects */ |
||||
#define CAMERA_COLOR_EFFECT_BLUE 0x01 /* Blue effect */ |
||||
#define CAMERA_COLOR_EFFECT_GREEN 0x02 /* Green effect */ |
||||
#define CAMERA_COLOR_EFFECT_RED 0x03 /* Red effect */ |
||||
#define CAMERA_COLOR_EFFECT_ANTIQUE 0x04 /* Antique effect */ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
#endif /* __CAMERA_H */ |
||||
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@ -0,0 +1,115 @@
|
||||
/**
|
||||
****************************************************************************** |
||||
* @file epd.h |
||||
* @author MCD Application Team |
||||
* @version V4.0.1 |
||||
* @date 21-July-2015 |
||||
* @brief This file contains all the functions prototypes for the
|
||||
* EPD (E Paper Display) driver.
|
||||
****************************************************************************** |
||||
* @attention |
||||
* |
||||
* <h2><center>© COPYRIGHT(c) 2015 STMicroelectronics</center></h2> |
||||
* |
||||
* 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 STMicroelectronics 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. |
||||
* |
||||
****************************************************************************** |
||||
*/
|
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/ |
||||
#ifndef __EPD_H |
||||
#define __EPD_H |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include <stdint.h> |
||||
|
||||
/** @addtogroup BSP
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @addtogroup Components
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @addtogroup Common
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @addtogroup EPD
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @defgroup EPD_Exported_Types
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @defgroup EPD_Driver_structure E Paper Display Driver structure
|
||||
* @{ |
||||
*/ |
||||
typedef struct |
||||
{ |
||||
void (*Init)(void); |
||||
void (*WritePixel)(uint8_t); |
||||
|
||||
/* Optimized operation */ |
||||
void (*SetDisplayWindow)(uint16_t, uint16_t, uint16_t, uint16_t); |
||||
void (*RefreshDisplay)(void); |
||||
void (*CloseChargePump)(void); |
||||
|
||||
uint16_t (*GetEpdPixelWidth)(void); |
||||
uint16_t (*GetEpdPixelHeight)(void); |
||||
void (*DrawImage)(uint16_t, uint16_t, uint16_t, uint16_t, uint8_t*); |
||||
} |
||||
EPD_DrvTypeDef; |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
#endif /* EPD_H */ |
||||
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@ -0,0 +1,145 @@
|
||||
/**
|
||||
****************************************************************************** |
||||
* @file gyro.h |
||||
* @author MCD Application Team |
||||
* @version V4.0.1 |
||||
* @date 21-July-2015 |
||||
* @brief This header file contains the functions prototypes for the gyroscope driver. |
||||
****************************************************************************** |
||||
* @attention |
||||
* |
||||
* <h2><center>© COPYRIGHT(c) 2015 STMicroelectronics</center></h2> |
||||
* |
||||
* 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 STMicroelectronics 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. |
||||
* |
||||
****************************************************************************** |
||||
*/ |
||||
|
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/ |
||||
#ifndef __GYRO_H |
||||
#define __GYRO_H |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include <stdint.h> |
||||
|
||||
/** @addtogroup BSP
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @addtogroup Components
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @addtogroup GYRO
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @defgroup GYRO_Exported_Types
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @defgroup GYRO_Driver_structure Gyroscope Driver structure
|
||||
* @{ |
||||
*/ |
||||
typedef struct |
||||
{
|
||||
void (*Init)(uint16_t); |
||||
void (*DeInit)(void);
|
||||
uint8_t (*ReadID)(void); |
||||
void (*Reset)(void); |
||||
void (*LowPower)(uint16_t);
|
||||
void (*ConfigIT)(uint16_t);
|
||||
void (*EnableIT)(uint8_t); |
||||
void (*DisableIT)(uint8_t);
|
||||
uint8_t (*ITStatus)(uint16_t, uint16_t);
|
||||
void (*ClearIT)(uint16_t, uint16_t);
|
||||
void (*FilterConfig)(uint8_t);
|
||||
void (*FilterCmd)(uint8_t);
|
||||
void (*GetXYZ)(float *); |
||||
}GYRO_DrvTypeDef; |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup GYRO_Config_structure Gyroscope Configuration structure
|
||||
* @{ |
||||
*/ |
||||
|
||||
typedef struct |
||||
{ |
||||
uint8_t Power_Mode; /* Power-down/Sleep/Normal Mode */ |
||||
uint8_t Output_DataRate; /* OUT data rate */ |
||||
uint8_t Axes_Enable; /* Axes enable */ |
||||
uint8_t Band_Width; /* Bandwidth selection */ |
||||
uint8_t BlockData_Update; /* Block Data Update */ |
||||
uint8_t Endianness; /* Endian Data selection */ |
||||
uint8_t Full_Scale; /* Full Scale selection */ |
||||
}GYRO_InitTypeDef; |
||||
|
||||
/* GYRO High Pass Filter struct */ |
||||
typedef struct |
||||
{ |
||||
uint8_t HighPassFilter_Mode_Selection; /* Internal filter mode */ |
||||
uint8_t HighPassFilter_CutOff_Frequency; /* High pass filter cut-off frequency */ |
||||
}GYRO_FilterConfigTypeDef; |
||||
|
||||
/*GYRO Interrupt struct */ |
||||
typedef struct |
||||
{ |
||||
uint8_t Latch_Request; /* Latch interrupt request into CLICK_SRC register */ |
||||
uint8_t Interrupt_Axes; /* X, Y, Z Axes Interrupts */
|
||||
uint8_t Interrupt_ActiveEdge; /* Interrupt Active edge */ |
||||
}GYRO_InterruptConfigTypeDef;
|
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
#endif /* __GYRO_H */ |
||||
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@ -0,0 +1,168 @@
|
||||
/**
|
||||
****************************************************************************** |
||||
* @file idd.h |
||||
* @author MCD Application Team |
||||
* @version V4.0.1 |
||||
* @date 21-July-2015 |
||||
* @brief This file contains all the functions prototypes for the IDD driver. |
||||
****************************************************************************** |
||||
* @attention |
||||
* |
||||
* <h2><center>© COPYRIGHT(c) 2015 STMicroelectronics</center></h2> |
||||
* |
||||
* 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 STMicroelectronics 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. |
||||
* |
||||
****************************************************************************** |
||||
*/
|
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/ |
||||
#ifndef __IDD_H |
||||
#define __IDD_H |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include <stdint.h> |
||||
|
||||
/** @addtogroup BSP
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @addtogroup Components
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @addtogroup IDD
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @defgroup IDD_Exported_Types IDD Exported Types
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @defgroup IDD_Config_structure IDD Configuration structure
|
||||
* @{ |
||||
*/ |
||||
typedef struct |
||||
{ |
||||
uint16_t AmpliGain; /*!< Specifies ampli gain value
|
||||
*/ |
||||
uint16_t VddMin; /*!< Specifies minimum MCU VDD can reach to protect MCU from reset
|
||||
*/ |
||||
uint16_t Shunt0Value; /*!< Specifies value of Shunt 0 if existing
|
||||
*/ |
||||
uint16_t Shunt1Value; /*!< Specifies value of Shunt 1 if existing
|
||||
*/ |
||||
uint16_t Shunt2Value; /*!< Specifies value of Shunt 2 if existing
|
||||
*/ |
||||
uint16_t Shunt3Value; /*!< Specifies value of Shunt 3 if existing
|
||||
*/ |
||||
uint16_t Shunt4Value; /*!< Specifies value of Shunt 4 if existing
|
||||
*/ |
||||
uint16_t Shunt0StabDelay; /*!< Specifies delay of Shunt 0 stabilization if existing
|
||||
*/ |
||||
uint16_t Shunt1StabDelay; /*!< Specifies delay of Shunt 1 stabilization if existing
|
||||
*/ |
||||
uint16_t Shunt2StabDelay; /*!< Specifies delay of Shunt 2 stabilization if existing
|
||||
*/ |
||||
uint16_t Shunt3StabDelay; /*!< Specifies delay of Shunt 3 stabilization if existing
|
||||
*/ |
||||
uint16_t Shunt4StabDelay; /*!< Specifies delay of Shunt 4 stabilization if existing
|
||||
*/ |
||||
uint8_t ShuntNbOnBoard; /*!< Specifies number of shunts that are present on board
|
||||
This parameter can be a value of @ref IDD_shunt_number */ |
||||
uint8_t ShuntNbUsed; /*!< Specifies number of shunts used for measurement
|
||||
This parameter can be a value of @ref IDD_shunt_number */ |
||||
uint8_t VrefMeasurement; /*!< Specifies if Vref is automatically measured before each Idd measurement
|
||||
This parameter can be a value of @ref IDD_Vref_Measurement */ |
||||
uint8_t Calibration; /*!< Specifies if calibration is done before each Idd measurement
|
||||
*/ |
||||
uint8_t PreDelayUnit; /*!< Specifies Pre delay unit
|
||||
This parameter can be a value of @ref IDD_PreDelay */ |
||||
uint8_t PreDelayValue; /*!< Specifies Pre delay value in selected unit
|
||||
*/ |
||||
uint8_t MeasureNb; /*!< Specifies number of Measure to be performed
|
||||
This parameter can be a value between 1 and 256 */ |
||||
uint8_t DeltaDelayUnit; /*!< Specifies Delta delay unit
|
||||
This parameter can be a value of @ref IDD_DeltaDelay */ |
||||
uint8_t DeltaDelayValue; /*!< Specifies Delta delay between 2 measures
|
||||
value can be between 1 and 128 */ |
||||
}IDD_ConfigTypeDef; |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup IDD_Driver_structure IDD Driver structure
|
||||
* @{ |
||||
*/ |
||||
typedef struct |
||||
{ |
||||
void (*Init)(uint16_t); |
||||
void (*DeInit)(uint16_t); |
||||
uint16_t (*ReadID)(uint16_t); |
||||
void (*Reset)(uint16_t); |
||||
void (*LowPower)(uint16_t); |
||||
void (*WakeUp)(uint16_t); |
||||
void (*Start)(uint16_t); |
||||
void (*Config)(uint16_t,IDD_ConfigTypeDef); |
||||
void (*GetValue)(uint16_t, uint32_t *); |
||||
void (*EnableIT)(uint16_t); |
||||
void (*ClearIT)(uint16_t); |
||||
uint8_t (*GetITStatus)(uint16_t); |
||||
void (*DisableIT)(uint16_t); |
||||
void (*ErrorEnableIT)(uint16_t); |
||||
void (*ErrorClearIT)(uint16_t); |
||||
uint8_t (*ErrorGetITStatus)(uint16_t); |
||||
void (*ErrorDisableIT)(uint16_t); |
||||
uint8_t (*ErrorGetSrc)(uint16_t); |
||||
uint8_t (*ErrorGetCode)(uint16_t); |
||||
}IDD_DrvTypeDef; |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
#endif /* __IDD_H */ |
||||
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@ -0,0 +1,150 @@
|
||||
/**
|
||||
****************************************************************************** |
||||
* @file io.h |
||||
* @author MCD Application Team |
||||
* @version V4.0.1 |
||||
* @date 21-July-2015 |
||||
* @brief This file contains all the functions prototypes for the IO driver. |
||||
****************************************************************************** |
||||
* @attention |
||||
* |
||||
* <h2><center>© COPYRIGHT(c) 2015 STMicroelectronics</center></h2> |
||||
* |
||||
* 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 STMicroelectronics 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. |
||||
* |
||||
****************************************************************************** |
||||
*/
|
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/ |
||||
#ifndef __IO_H |
||||
#define __IO_H |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include <stdint.h> |
||||
|
||||
/** @addtogroup BSP
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @addtogroup Components
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @addtogroup IO
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @defgroup IO_Exported_Types
|
||||
* @{ |
||||
*/ |
||||
|
||||
/**
|
||||
* @brief IO Bit SET and Bit RESET enumeration |
||||
*/ |
||||
typedef enum |
||||
{ |
||||
IO_PIN_RESET = 0, |
||||
IO_PIN_SET |
||||
}IO_PinState; |
||||
|
||||
typedef enum |
||||
{ |
||||
IO_MODE_INPUT = 0, /* input floating */ |
||||
IO_MODE_OUTPUT, /* output Push Pull */ |
||||
IO_MODE_IT_RISING_EDGE, /* float input - irq detect on rising edge */ |
||||
IO_MODE_IT_FALLING_EDGE, /* float input - irq detect on falling edge */ |
||||
IO_MODE_IT_LOW_LEVEL, /* float input - irq detect on low level */ |
||||
IO_MODE_IT_HIGH_LEVEL, /* float input - irq detect on high level */ |
||||
/* following modes only available on MFX*/ |
||||
IO_MODE_ANALOG, /* analog mode */ |
||||
IO_MODE_OFF, /* when pin isn't used*/ |
||||
IO_MODE_INPUT_PU, /* input with internal pull up resistor */ |
||||
IO_MODE_INPUT_PD, /* input with internal pull down resistor */ |
||||
IO_MODE_OUTPUT_OD, /* Open Drain output without internal resistor */ |
||||
IO_MODE_OUTPUT_OD_PU, /* Open Drain output with internal pullup resistor */ |
||||
IO_MODE_OUTPUT_OD_PD, /* Open Drain output with internal pulldown resistor */ |
||||
IO_MODE_OUTPUT_PP, /* PushPull output without internal resistor */ |
||||
IO_MODE_OUTPUT_PP_PU, /* PushPull output with internal pullup resistor */ |
||||
IO_MODE_OUTPUT_PP_PD, /* PushPull output with internal pulldown resistor */ |
||||
IO_MODE_IT_RISING_EDGE_PU, /* push up resistor input - irq on rising edge */ |
||||
IO_MODE_IT_RISING_EDGE_PD, /* push dw resistor input - irq on rising edge */ |
||||
IO_MODE_IT_FALLING_EDGE_PU, /* push up resistor input - irq on falling edge */ |
||||
IO_MODE_IT_FALLING_EDGE_PD, /* push dw resistor input - irq on falling edge */ |
||||
IO_MODE_IT_LOW_LEVEL_PU, /* push up resistor input - irq detect on low level */ |
||||
IO_MODE_IT_LOW_LEVEL_PD, /* push dw resistor input - irq detect on low level */ |
||||
IO_MODE_IT_HIGH_LEVEL_PU, /* push up resistor input - irq detect on high level */ |
||||
IO_MODE_IT_HIGH_LEVEL_PD, /* push dw resistor input - irq detect on high level */ |
||||
|
||||
}IO_ModeTypedef; |
||||
|
||||
/** @defgroup IO_Driver_structure IO Driver structure
|
||||
* @{ |
||||
*/ |
||||
typedef struct |
||||
{
|
||||
void (*Init)(uint16_t); |
||||
uint16_t (*ReadID)(uint16_t); |
||||
void (*Reset)(uint16_t); |
||||
|
||||
void (*Start)(uint16_t, uint32_t); |
||||
uint8_t (*Config)(uint16_t, uint32_t, IO_ModeTypedef); |
||||
void (*WritePin)(uint16_t, uint32_t, uint8_t); |
||||
uint32_t (*ReadPin)(uint16_t, uint32_t); |
||||
|
||||
void (*EnableIT)(uint16_t); |
||||
void (*DisableIT)(uint16_t); |
||||
uint32_t (*ITStatus)(uint16_t, uint32_t); |
||||
void (*ClearIT)(uint16_t, uint32_t); |
||||
|
||||
}IO_DrvTypeDef; |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
#endif /* __IO_H */ |
||||
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@ -0,0 +1,114 @@
|
||||
/**
|
||||
****************************************************************************** |
||||
* @file lcd.h |
||||
* @author MCD Application Team |
||||
* @version V4.0.1 |
||||
* @date 21-July-2015 |
||||
* @brief This file contains all the functions prototypes for the LCD driver.
|
||||
****************************************************************************** |
||||
* @attention |
||||
* |
||||
* <h2><center>© COPYRIGHT(c) 2015 STMicroelectronics</center></h2> |
||||
* |
||||
* 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 STMicroelectronics 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. |
||||
* |
||||
****************************************************************************** |
||||
*/
|
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/ |
||||
#ifndef __LCD_H |
||||
#define __LCD_H |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include <stdint.h> |
||||
|
||||
/** @addtogroup BSP
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @addtogroup Components
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @addtogroup LCD
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @defgroup LCD_Exported_Types
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @defgroup LCD_Driver_structure LCD Driver structure
|
||||
* @{ |
||||
*/ |
||||
typedef struct |
||||
{ |
||||
void (*Init)(void); |
||||
uint16_t (*ReadID)(void); |
||||
void (*DisplayOn)(void); |
||||
void (*DisplayOff)(void); |
||||
void (*SetCursor)(uint16_t, uint16_t); |
||||
void (*WritePixel)(uint16_t, uint16_t, uint16_t); |
||||
uint16_t (*ReadPixel)(uint16_t, uint16_t); |
||||
|
||||
/* Optimized operation */ |
||||
void (*SetDisplayWindow)(uint16_t, uint16_t, uint16_t, uint16_t); |
||||
void (*DrawHLine)(uint16_t, uint16_t, uint16_t, uint16_t); |
||||
void (*DrawVLine)(uint16_t, uint16_t, uint16_t, uint16_t); |
||||
|
||||
uint16_t (*GetLcdPixelWidth)(void); |
||||
uint16_t (*GetLcdPixelHeight)(void); |
||||
void (*DrawBitmap)(uint16_t, uint16_t, uint8_t*); |
||||
void (*DrawRGBImage)(uint16_t, uint16_t, uint16_t, uint16_t, uint8_t*); |
||||
}LCD_DrvTypeDef;
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
#endif /* __LCD_H */ |
||||
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@ -0,0 +1,125 @@
|
||||
/**
|
||||
****************************************************************************** |
||||
* @file magneto.h |
||||
* @author MCD Application Team |
||||
* @version V4.0.1 |
||||
* @date 21-July-2015 |
||||
* @brief This header file contains the functions prototypes for the MAGNETO driver. |
||||
****************************************************************************** |
||||
* @attention |
||||
* |
||||
* <h2><center>© COPYRIGHT(c) 2015 STMicroelectronics</center></h2> |
||||
* |
||||
* 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 STMicroelectronics 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. |
||||
* |
||||
****************************************************************************** |
||||
*/ |
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/ |
||||
#ifndef __MAGNETO_H |
||||
#define __MAGNETO_H |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include <stdint.h> |
||||
|
||||
/** @addtogroup BSP
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @addtogroup Components
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @addtogroup MAGNETO
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @defgroup MAGNETO_Exported_Types
|
||||
* @{ |
||||
*/
|
||||
|
||||
/** @defgroup MAGNETO_Config_structure Magnetometer Configuration structure
|
||||
* @{ |
||||
*/ |
||||
typedef struct |
||||
{ |
||||
uint8_t Register1; |
||||
uint8_t Register2; |
||||
uint8_t Register3; |
||||
uint8_t Register4; |
||||
uint8_t Register5; |
||||
}MAGNETO_InitTypeDef; |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup MAGNETO_Driver_structure Magnetometer Driver structure
|
||||
* @{ |
||||
*/ |
||||
typedef struct |
||||
{
|
||||
void (*Init)(MAGNETO_InitTypeDef); |
||||
void (*DeInit)(void);
|
||||
uint8_t (*ReadID)(void); |
||||
void (*Reset)(void); |
||||
void (*LowPower)(void); |
||||
void (*ConfigIT)(void); |
||||
void (*EnableIT)(uint8_t); |
||||
void (*DisableIT)(uint8_t); |
||||
uint8_t (*ITStatus)(uint16_t); |
||||
void (*ClearIT)(void); |
||||
void (*FilterConfig)(uint8_t); |
||||
void (*FilterCmd)(uint8_t); |
||||
void (*GetXYZ)(int16_t *); |
||||
}MAGNETO_DrvTypeDef; |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
#endif /* __MAGNETO_H */ |
||||
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@ -0,0 +1,107 @@
|
||||
/**
|
||||
****************************************************************************** |
||||
* @file ts.h |
||||
* @author MCD Application Team |
||||
* @version V4.0.1 |
||||
* @date 21-July-2015 |
||||
* @brief This file contains all the functions prototypes for the Touch Screen driver. |
||||
****************************************************************************** |
||||
* @attention |
||||
* |
||||
* <h2><center>© COPYRIGHT(c) 2015 STMicroelectronics</center></h2> |
||||
* |
||||
* 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 STMicroelectronics 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. |
||||
* |
||||
****************************************************************************** |
||||
*/ |
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/ |
||||
#ifndef __TS_H |
||||
#define __TS_H |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include <stdint.h> |
||||
|
||||
/** @addtogroup BSP
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @addtogroup Components
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @addtogroup TS
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @defgroup TS_Exported_Types
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @defgroup TS_Driver_structure Touch Sensor Driver structure
|
||||
* @{ |
||||
*/ |
||||
typedef struct |
||||
{
|
||||
void (*Init)(uint16_t); |
||||
uint16_t (*ReadID)(uint16_t); |
||||
void (*Reset)(uint16_t); |
||||
void (*Start)(uint16_t); |
||||
uint8_t (*DetectTouch)(uint16_t); |
||||
void (*GetXY)(uint16_t, uint16_t*, uint16_t*); |
||||
void (*EnableIT)(uint16_t); |
||||
void (*ClearIT)(uint16_t); |
||||
uint8_t (*GetITStatus)(uint16_t); |
||||
void (*DisableIT)(uint16_t); |
||||
}TS_DrvTypeDef; |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
#endif /* __TS_H */ |
||||
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@ -0,0 +1,118 @@
|
||||
/**
|
||||
****************************************************************************** |
||||
* @file tsensor.h |
||||
* @author MCD Application Team |
||||
* @version V4.0.1 |
||||
* @date 21-July-2015 |
||||
* @brief This header file contains the functions prototypes for the |
||||
* Temperature Sensor driver.
|
||||
****************************************************************************** |
||||
* @attention |
||||
* |
||||
* <h2><center>© COPYRIGHT(c) 2015 STMicroelectronics</center></h2> |
||||
* |
||||
* 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 STMicroelectronics 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. |
||||
* |
||||
****************************************************************************** |
||||
*/ |
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/ |
||||
#ifndef __TSENSOR_H |
||||
#define __TSENSOR_H |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include <stdint.h> |
||||
|
||||
/** @addtogroup BSP
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @addtogroup Components
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @addtogroup TSENSOR
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @defgroup TSENSOR_Exported_Types
|
||||
* @{ |
||||
*/
|
||||
|
||||
/** @defgroup TSENSOR_Config_structure Temperature Sensor Configuration structure
|
||||
* @{ |
||||
*/ |
||||
typedef struct |
||||
{ |
||||
uint8_t AlertMode; /* Alert Mode Temperature out of range*/ |
||||
uint8_t ConversionMode; /* Continuous/One Shot Mode */ |
||||
uint8_t ConversionResolution; /* Temperature Resolution */ |
||||
uint8_t ConversionRate; /* Number of measure per second */ |
||||
uint8_t TemperatureLimitHigh; /* High Temperature Limit Range */ |
||||
uint8_t TemperatureLimitLow; /* Low Temperature Limit Range */ |
||||
}TSENSOR_InitTypeDef; |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup TSENSOR_Driver_structure Temperature Sensor Driver structure
|
||||
* @{ |
||||
*/ |
||||
typedef struct |
||||
{
|
||||
void (*Init)(uint16_t, TSENSOR_InitTypeDef *); |
||||
uint8_t (*IsReady)(uint16_t, uint32_t); |
||||
uint8_t (*ReadStatus)(uint16_t); |
||||
uint16_t (*ReadTemp)(uint16_t);
|
||||
}TSENSOR_DrvTypeDef; |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
#endif /* __TSENSOR_H */ |
||||
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@ -0,0 +1,743 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> |
||||
<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns="http://www.w3.org/TR/REC-html40"><head> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> |
||||
|
||||
|
||||
<link rel="File-List" href="Library_files/filelist.xml"> |
||||
|
||||
|
||||
<link rel="Edit-Time-Data" href="Library_files/editdata.mso"><!--[if !mso]> <style> v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VML);} .shape {behavior:url(#default#VML);} </style> <![endif]--><title>Release Notes for CS43L22 Component Driver</title><!--[if gte mso 9]><xml> <o:DocumentProperties> <o:Author>STMicroelectronics</o:Author> <o:LastAuthor>STMicroelectronics</o:LastAuthor> <o:Revision>37</o:Revision> <o:TotalTime>136</o:TotalTime> <o:Created>2009-02-27T19:26:00Z</o:Created> <o:LastSaved>2009-03-01T17:56:00Z</o:LastSaved> <o:Pages>1</o:Pages> <o:Words>522</o:Words> <o:Characters>2977</o:Characters> <o:Company>STMicroelectronics</o:Company> <o:Lines>24</o:Lines> <o:Paragraphs>6</o:Paragraphs> <o:CharactersWithSpaces>3493</o:CharactersWithSpaces> <o:Version>11.6568</o:Version> </o:DocumentProperties> </xml><![endif]--><!--[if gte mso 9]><xml> <w:WordDocument> <w:Zoom>110</w:Zoom> <w:ValidateAgainstSchemas/> <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid> <w:IgnoreMixedContent>false</w:IgnoreMixedContent> <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText> <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel> </w:WordDocument> </xml><![endif]--><!--[if gte mso 9]><xml> <w:LatentStyles DefLockedState="false" LatentStyleCount="156"> </w:LatentStyles> </xml><![endif]--> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<style> |
||||
<!-- |
||||
/* Style Definitions */ |
||||
p.MsoNormal, li.MsoNormal, div.MsoNormal |
||||
{mso-style-parent:""; |
||||
margin:0in; |
||||
margin-bottom:.0001pt; |
||||
mso-pagination:widow-orphan; |
||||
font-size:12.0pt; |
||||
font-family:"Times New Roman"; |
||||
mso-fareast-font-family:"Times New Roman";} |
||||
h2 |
||||
{mso-style-next:Normal; |
||||
margin-top:12.0pt; |
||||
margin-right:0in; |
||||
margin-bottom:3.0pt; |
||||
margin-left:0in; |
||||
mso-pagination:widow-orphan; |
||||
page-break-after:avoid; |
||||
mso-outline-level:2; |
||||
font-size:14.0pt; |
||||
font-family:Arial; |
||||
font-weight:bold; |
||||
font-style:italic;} |
||||
a:link, span.MsoHyperlink |
||||
{color:blue; |
||||
text-decoration:underline; |
||||
text-underline:single;} |
||||
a:visited, span.MsoHyperlinkFollowed |
||||
{color:blue; |
||||
text-decoration:underline; |
||||
text-underline:single;} |
||||
p |
||||
{mso-margin-top-alt:auto; |
||||
margin-right:0in; |
||||
mso-margin-bottom-alt:auto; |
||||
margin-left:0in; |
||||
mso-pagination:widow-orphan; |
||||
font-size:12.0pt; |
||||
font-family:"Times New Roman"; |
||||
mso-fareast-font-family:"Times New Roman";} |
||||
@page Section1 |
||||
{size:8.5in 11.0in; |
||||
margin:1.0in 1.25in 1.0in 1.25in; |
||||
mso-header-margin:.5in; |
||||
mso-footer-margin:.5in; |
||||
mso-paper-source:0;} |
||||
div.Section1 |
||||
{page:Section1;} |
||||
--> |
||||
</style><!--[if gte mso 10]> <style> /* Style Definitions */ table.MsoNormalTable {mso-style-name:"Table Normal"; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-parent:""; mso-padding-alt:0in 5.4pt 0in 5.4pt; mso-para-margin:0in; mso-para-margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:10.0pt; font-family:"Times New Roman"; mso-ansi-language:#0400; mso-fareast-language:#0400; mso-bidi-language:#0400;} </style> <![endif]--><!--[if gte mso 9]><xml> <o:shapedefaults v:ext="edit" spidmax="5122"/> </xml><![endif]--><!--[if gte mso 9]><xml> <o:shapelayout v:ext="edit"> <o:idmap v:ext="edit" data="1"/> </o:shapelayout></xml><![endif]--> |
||||
<meta content="MCD Application Team" name="author"></head> |
||||
<body link="blue" vlink="blue"> |
||||
<div class="Section1"> |
||||
<p class="MsoNormal"><span style="font-family: Arial;"><o:p><br> |
||||
</o:p></span></p> |
||||
<div align="center"> |
||||
<table class="MsoNormalTable" style="width: 675pt;" border="0" cellpadding="0" cellspacing="0" width="900"> |
||||
<tbody> |
||||
<tr> |
||||
<td style="padding: 0cm;" valign="top"> |
||||
<table class="MsoNormalTable" style="width: 675pt;" border="0" cellpadding="0" cellspacing="0" width="900"> |
||||
<tbody> |
||||
<tr> |
||||
<td style="vertical-align: top;"> |
||||
<p class="MsoNormal"><span style="font-size: 8pt; font-family: Arial; color: blue;"><a href="../../../../Release_Notes.html">Back to Release page</a><o:p></o:p></span></p> |
||||
</td> |
||||
</tr> |
||||
<tr style=""> |
||||
<td style="padding: 1.5pt;"> |
||||
<h1 style="margin-bottom: 18pt; text-align: center;" align="center"><span style="font-size: 20pt; font-family: Verdana; color: rgb(51, 102, 255);">Release |
||||
Notes for CS43L22 Component Driver</span><span style="font-size: 20pt; font-family: Verdana;"><o:p></o:p></span></h1> |
||||
<p class="MsoNormal" style="text-align: center;" align="center"><span style="font-size: 10pt; font-family: Arial; color: black;">Copyright |
||||
2014 STMicroelectronics</span><span style="color: black;"><u1:p></u1:p><o:p></o:p></span></p> |
||||
<p class="MsoNormal" style="text-align: center;" align="center"><span style="font-size: 10pt; font-family: Arial; color: black;"><img alt="" id="_x0000_i1025" src="../../../../_htmresc/st_logo.png" style="border: 0px solid ; width: 86px; height: 65px;"></span><span style="font-size: 10pt;"><o:p></o:p></span></p> |
||||
</td> |
||||
</tr> |
||||
</tbody> |
||||
</table> |
||||
<p class="MsoNormal"><span style="font-family: Arial; display: none;"><o:p> </o:p></span></p> |
||||
<table class="MsoNormalTable" style="width: 675pt;" border="0" cellpadding="0" width="900"> |
||||
<tbody> |
||||
<tr style=""> |
||||
<td style="padding: 0cm;" valign="top"> |
||||
<span style="font-family: "Times New Roman";"> |
||||
</span> |
||||
<h2 style="background: rgb(51, 102, 255) none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial;"><a name="History"></a><span style="font-size: 12pt; color: white;">Update History</span></h2> |
||||
<h3 style="background: rgb(51, 102, 255) none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial; margin-right: 500pt; width: 206px;"><span style="font-size: 10pt; font-family: Arial; color: white;">V2.0.3 / 05-October-2017 <o:p></o:p></span></h3> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<p class="MsoNormal" style="margin: 4.5pt 0cm 4.5pt 18pt;"><b style=""><u><span style="font-size: 10pt; font-family: Verdana; color: black;">Main |
||||
Changes<o:p></o:p></span></u></b></p> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span><span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<ul style="list-style-type: square;"><li><span style="font-size: 10pt; font-family: Verdana;">cs43l22.c/.h: </span></li><ul><li><span style="font-size: 10pt; font-family: Verdana;">Update VOLUME_CONVERT macro to return 255 if the input volume is greater than 100.</span></li><li><span style="font-size: 10pt; font-family: Verdana;">Update cs43l22_SetVolume API to check on convertedvol instead of Volume</span></li></ul></ul><h3 style="background: rgb(51, 102, 255) none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial; margin-right: 500pt; width: 206px;"><span style="font-size: 10pt; font-family: Arial; color: white;">V2.0.2 / 02-October-2015 <o:p></o:p></span></h3> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<p class="MsoNormal" style="margin: 4.5pt 0cm 4.5pt 18pt;"><b style=""><u><span style="font-size: 10pt; font-family: Verdana; color: black;">Main |
||||
Changes<o:p></o:p></span></u></b></p> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span><span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<ul style="list-style-type: square;"><li><span style="font-size: 10pt; font-family: Verdana;">cs43l22.c/.h: </span></li><ul><li><span style="font-size: 10pt; font-family: Verdana;">Move VOLUME_CONVERT macro from cs43l22.h to cs43l22.c as internally used to convert volume.</span></li><li><span style="font-size: 10pt; font-family: Verdana;">Add literals instead of magic number for cs34l22 registers.</span></li></ul></ul><h3 style="background: rgb(51, 102, 255) none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial; margin-right: 500pt; width: 220px;"><span style="font-size: 10pt; font-family: Arial; color: white;">V2.0.1 / 16-September-2015 <o:p></o:p></span></h3> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<p class="MsoNormal" style="margin: 4.5pt 0cm 4.5pt 18pt;"><b style=""><u><span style="font-size: 10pt; font-family: Verdana; color: black;">Main |
||||
Changes<o:p></o:p></span></u></b></p> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span><span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<ul style="list-style-type: square;"><li><span style="font-size: 10pt; font-family: Verdana;">cs43l22.c: </span></li><ul><li><span style="font-size: 10pt; font-family: Verdana;">Enable the digital soft ramp to avoid clac noise.</span></li><li><span style="font-size: 10pt; font-family: Verdana;">Improve mute/unmute by muting/unmuting also the DAC inputs. </span></li></ul></ul><h3 style="background: rgb(51, 102, 255) none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial; margin-right: 500pt; width: 210px;"><span style="font-size: 10pt; font-family: Arial; color: white;">V2.0.0 / 24-June-2015 <o:p></o:p></span></h3> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<p class="MsoNormal" style="margin: 4.5pt 0cm 4.5pt 18pt;"><b style=""><u><span style="font-size: 10pt; font-family: Verdana; color: black;">Main |
||||
Changes<o:p></o:p></span></u></b></p> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span><span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<ul style="list-style-type: square;"><li><span style="font-size: 10pt; font-family: Verdana;">cs43l22.h/.c: </span></li><ul><li><span style="font-size: 10pt; font-family: Verdana;">Add codec de-initialization function: cs43l22_DeInit()</span></li><li><span style="font-size: 10pt; font-family: Verdana;">Add Audio IO </span><span style="font-size: 10pt; font-family: Verdana;">de-initialization function prototype: AUDIO_IO_DeInit()</span></li><li><span style="font-family: Verdana; font-size: 10pt;"><span style="font-weight: bold;">NOTE:</span> This release must be used with BSP Common |
||||
driver V4.0.0 or later</span></li></ul></ul><h3 style="background: rgb(51, 102, 255) none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial; margin-right: 500pt; width: 210px;"><span style="font-size: 10pt; font-family: Arial; color: white;">V1.1.0 / 10-February-2015 <o:p></o:p></span></h3> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<p class="MsoNormal" style="margin: 4.5pt 0cm 4.5pt 18pt;"><b style=""><u><span style="font-size: 10pt; font-family: Verdana; color: black;">Main |
||||
Changes<o:p></o:p></span></u></b></p> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span><span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<ul style="list-style-type: square;"><li><span style="font-size: 10pt; font-family: Verdana;">cs43l22.h/.c: </span></li><ul><li><span style="font-size: 10pt; font-family: Verdana;">Add AUDIO_FREQUENCY_xxx defines for frequencies capabilities (8K to 192K)</span></li><li><span style="font-size: 10pt; font-family: Verdana;">Add codec reset function: cs43l22_Reset()<br></span></li></ul></ul><h3 style="background: rgb(51, 102, 255) none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial; margin-right: 500pt; width: 210px;"><span style="font-size: 10pt; font-family: Arial; color: white;">V1.0.1 / 02-December-2014 <o:p></o:p></span></h3> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<p class="MsoNormal" style="margin: 4.5pt 0cm 4.5pt 18pt;"><b style=""><u><span style="font-size: 10pt; font-family: Verdana; color: black;">Main |
||||
Changes<o:p></o:p></span></u></b></p> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span><span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<ul style="list-style-type: square;"> |
||||
<li><span style="font-size: 10pt; font-family: Verdana;">cs43l22.h: change "\" by "/" in the include path to fix compilation issue under Linux</span></li> |
||||
</ul> |
||||
|
||||
<h3 style="background: rgb(51, 102, 255) none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial; margin-right: 500pt; width: 210px;"><span style="font-size: 10pt; font-family: Arial; color: white;">V1.0.0 / 18-February-2014 <o:p></o:p></span></h3> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<p class="MsoNormal" style="margin: 4.5pt 0cm 4.5pt 18pt;"><b style=""><u><span style="font-size: 10pt; font-family: Verdana; color: black;">Main |
||||
Changes<o:p></o:p></span></u></b></p> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span><span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<ul style="list-style-type: square;"> |
||||
<li><span style="font-size: 10pt; font-family: Verdana;">First official release of CS43L22 audio codec </span><span style="font-size: 10pt; font-family: Verdana;"></span></li> |
||||
</ul><span style="font-size: 10pt; font-family: Verdana;"><span style="font-style: italic; font-weight: bold;"></span></span><span style="font-size: 10pt; font-family: Verdana;"><span style="font-style: italic; font-weight: bold;"></span></span><span style="font-size: 10pt; font-family: Verdana;"><span style="font-style: italic; font-weight: bold;"></span></span><span style="font-size: 10pt; font-family: Verdana;"><span style="font-style: italic; font-weight: bold;"></span></span><span style="font-size: 10pt; font-family: Verdana;"><span style="font-style: italic; font-weight: bold;"></span></span><span style="font-size: 10pt; font-family: Verdana;"></span><h2 style="background: rgb(51, 102, 255) none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial;"><a name="License"></a><span style="font-size: 12pt; color: white;">License<o:p></o:p></span><br></h2> |
||||
<div style="text-align: justify;"><font size="-1"><span style="font-family: "Verdana","sans-serif";"> |
||||
Redistribution and use in source and binary forms, with or without |
||||
modification, are permitted provided that the following conditions are |
||||
met:</span><br> |
||||
</font> |
||||
<ol><li><font size="-1"><span style="font-family: "Verdana","sans-serif";">Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.</span><span style="font-family: "Verdana","sans-serif";"></span></font></li><li><font size="-1"><span style="font-family: "Verdana","sans-serif";">Redistributions |
||||
in binary form must reproduce the above copyright notice, this list of |
||||
conditions and the following disclaimer in </span><span style="font-family: "Verdana","sans-serif";">the documentation and/or other materials provided with the distribution.</span><span style="font-family: "Verdana","sans-serif";"></span></font></li><li><font size="-1"><span style="font-family: "Verdana","sans-serif";">Neither the name of STMicroelectronics nor the names of its contributors may be used to endorse or promote products derived </span><br> |
||||
</font> |
||||
</li></ol> |
||||
<font size="-1"><span style="font-family: "Verdana","sans-serif";"> from this software without specific prior written permission.</span><br> |
||||
<span style="font-family: "Verdana","sans-serif";"></span><br> |
||||
<span style="font-family: "Verdana","sans-serif";">THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED</span><span style="font-family: "Verdana","sans-serif";"> WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A </span><span style="font-family: "Verdana","sans-serif";">PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY </span><span style="font-family: "Verdana","sans-serif";">DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, </span><span style="font-family: "Verdana","sans-serif";">PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER</span><span style="font-family: "Verdana","sans-serif";"> CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR </span><span style="font-family: "Verdana","sans-serif";">OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</span></font> |
||||
|
||||
</div> |
||||
<p class="MsoNormal"><span style="font-size: 10pt; font-family: "Verdana","sans-serif"; color: black;"><font size="-1"></font><o:p></o:p></span></p> |
||||
<b><span style="font-size: 10pt; font-family: Verdana; color: black;"></span></b> |
||||
|
||||
<div class="MsoNormal" style="text-align: center;" align="center"><span style="color: black;"> |
||||
<hr align="center" size="2" width="100%"></span></div> |
||||
<p class="MsoNormal" style="margin: 4.5pt 0cm 4.5pt 18pt; text-align: center;" align="center"><span style="font-size: 10pt; font-family: Verdana; color: black;">For |
||||
complete documentation on </span><span style="font-size: 10pt; font-family: Verdana;">STM32<span style="color: black;"> Microcontrollers |
||||
visit </span><u><span style="color: blue;"><a href="http://www.st.com/internet/mcu/class/1734.jsp" target="_blank">www.st.com/STM32</a></span></u></span><span style="font-size: 10pt; font-family: Verdana;"><a target="_blank" href="http://www.st.com/internet/mcu/family/141.jsp"><u><span style="color: blue;"></span></u></a></span><span style="font-size: 10pt; font-family: Verdana;"><u><span style="color: blue;"></span></u></span><span style="color: black;"><o:p></o:p></span></p> |
||||
</td> |
||||
</tr> |
||||
</tbody> |
||||
</table> |
||||
<p class="MsoNormal"><span style="font-size: 10pt;"><o:p></o:p></span></p> |
||||
</td> |
||||
</tr> |
||||
</tbody> |
||||
</table> |
||||
</div> |
||||
<p class="MsoNormal"><o:p> </o:p></p> |
||||
</div> |
||||
|
||||
</body></html> |
@ -0,0 +1,493 @@
|
||||
/**
|
||||
****************************************************************************** |
||||
* @file cs43l22.c |
||||
* @author MCD Application Team |
||||
* @brief This file provides the CS43L22 Audio Codec driver.
|
||||
****************************************************************************** |
||||
* @attention |
||||
* |
||||
* <h2><center>© COPYRIGHT(c) 2015 STMicroelectronics</center></h2> |
||||
* |
||||
* 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 STMicroelectronics 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. |
||||
* |
||||
****************************************************************************** |
||||
*/ |
||||
|
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include "cs43l22.h" |
||||
|
||||
/** @addtogroup BSP
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @addtogroup Components
|
||||
* @{ |
||||
*/
|
||||
|
||||
/** @addtogroup CS43L22
|
||||
* @brief This file provides a set of functions needed to drive the
|
||||
* CS43L22 audio codec. |
||||
* @{ |
||||
*/ |
||||
|
||||
/** @defgroup CS43L22_Private_Types
|
||||
* @{ |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
/** @defgroup CS43L22_Private_Defines
|
||||
* @{ |
||||
*/ |
||||
#define VOLUME_CONVERT(Volume) (((Volume) > 100)? 255:((uint8_t)(((Volume) * 255) / 100))) |
||||
/* Uncomment this line to enable verifying data sent to codec after each write
|
||||
operation (for debug purpose) */ |
||||
#if !defined (VERIFY_WRITTENDATA) |
||||
/* #define VERIFY_WRITTENDATA */ |
||||
#endif /* VERIFY_WRITTENDATA */ |
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
/** @defgroup CS43L22_Private_Macros
|
||||
* @{ |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
/** @defgroup CS43L22_Private_Variables
|
||||
* @{ |
||||
*/ |
||||
|
||||
/* Audio codec driver structure initialization */
|
||||
AUDIO_DrvTypeDef cs43l22_drv =
|
||||
{ |
||||
cs43l22_Init, |
||||
cs43l22_DeInit, |
||||
cs43l22_ReadID, |
||||
|
||||
cs43l22_Play, |
||||
cs43l22_Pause, |
||||
cs43l22_Resume, |
||||
cs43l22_Stop,
|
||||
|
||||
cs43l22_SetFrequency,
|
||||
cs43l22_SetVolume, |
||||
cs43l22_SetMute,
|
||||
cs43l22_SetOutputMode, |
||||
cs43l22_Reset, |
||||
}; |
||||
|
||||
static uint8_t Is_cs43l22_Stop = 1; |
||||
|
||||
volatile uint8_t OutputDev = 0; |
||||
|
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
/** @defgroup CS43L22_Function_Prototypes
|
||||
* @{ |
||||
*/ |
||||
static uint8_t CODEC_IO_Write(uint8_t Addr, uint8_t Reg, uint8_t Value); |
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
/** @defgroup CS43L22_Private_Functions
|
||||
* @{ |
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Initializes the audio codec and the control interface. |
||||
* @param DeviceAddr: Device address on communication Bus.
|
||||
* @param OutputDevice: can be OUTPUT_DEVICE_SPEAKER, OUTPUT_DEVICE_HEADPHONE, |
||||
* OUTPUT_DEVICE_BOTH or OUTPUT_DEVICE_AUTO . |
||||
* @param Volume: Initial volume level (from 0 (Mute) to 100 (Max)) |
||||
* @retval 0 if correct communication, else wrong communication |
||||
*/ |
||||
uint32_t cs43l22_Init(uint16_t DeviceAddr, uint16_t OutputDevice, uint8_t Volume, uint32_t AudioFreq) |
||||
{ |
||||
uint32_t counter = 0; |
||||
|
||||
/* Initialize the Control interface of the Audio Codec */ |
||||
AUDIO_IO_Init();
|
||||
|
||||
/* Keep Codec powered OFF */ |
||||
counter += CODEC_IO_Write(DeviceAddr, CS43L22_REG_POWER_CTL1, 0x01);
|
||||
|
||||
/*Save Output device for mute ON/OFF procedure*/ |
||||
switch (OutputDevice) |
||||
{ |
||||
case OUTPUT_DEVICE_SPEAKER: |
||||
OutputDev = 0xFA; |
||||
break; |
||||
|
||||
case OUTPUT_DEVICE_HEADPHONE: |
||||
OutputDev = 0xAF; |
||||
break; |
||||
|
||||
case OUTPUT_DEVICE_BOTH: |
||||
OutputDev = 0xAA; |
||||
break; |
||||
|
||||
case OUTPUT_DEVICE_AUTO: |
||||
OutputDev = 0x05; |
||||
break;
|
||||
|
||||
default: |
||||
OutputDev = 0x05; |
||||
break;
|
||||
} |
||||
|
||||
counter += CODEC_IO_Write(DeviceAddr, CS43L22_REG_POWER_CTL2, OutputDev); |
||||
|
||||
/* Clock configuration: Auto detection */
|
||||
counter += CODEC_IO_Write(DeviceAddr, CS43L22_REG_CLOCKING_CTL, 0x81); |
||||
|
||||
/* Set the Slave Mode and the audio Standard */
|
||||
counter += CODEC_IO_Write(DeviceAddr, CS43L22_REG_INTERFACE_CTL1, CODEC_STANDARD); |
||||
|
||||
/* Set the Master volume */ |
||||
counter += cs43l22_SetVolume(DeviceAddr, Volume); |
||||
|
||||
/* If the Speaker is enabled, set the Mono mode and volume attenuation level */ |
||||
if(OutputDevice != OUTPUT_DEVICE_HEADPHONE) |
||||
{ |
||||
/* Set the Speaker Mono mode */
|
||||
counter += CODEC_IO_Write(DeviceAddr, CS43L22_REG_PLAYBACK_CTL2, 0x06); |
||||
|
||||
/* Set the Speaker attenuation level */
|
||||
counter += CODEC_IO_Write(DeviceAddr, CS43L22_REG_SPEAKER_A_VOL, 0x00); |
||||
counter += CODEC_IO_Write(DeviceAddr, CS43L22_REG_SPEAKER_B_VOL, 0x00); |
||||
} |
||||
|
||||
/* Additional configuration for the CODEC. These configurations are done to reduce
|
||||
the time needed for the Codec to power off. If these configurations are removed,
|
||||
then a long delay should be added between powering off the Codec and switching
|
||||
off the I2S peripheral MCLK clock (which is the operating clock for Codec). |
||||
If this delay is not inserted, then the codec will not shut down properly and |
||||
it results in high noise after shut down. */ |
||||
|
||||
/* Disable the analog soft ramp */ |
||||
counter += CODEC_IO_Write(DeviceAddr, CS43L22_REG_ANALOG_ZC_SR_SETT, 0x00); |
||||
/* Disable the digital soft ramp */ |
||||
counter += CODEC_IO_Write(DeviceAddr, CS43L22_REG_MISC_CTL, 0x04); |
||||
/* Disable the limiter attack level */ |
||||
counter += CODEC_IO_Write(DeviceAddr, CS43L22_REG_LIMIT_CTL1, 0x00); |
||||
/* Adjust Bass and Treble levels */ |
||||
counter += CODEC_IO_Write(DeviceAddr, CS43L22_REG_TONE_CTL, 0x0F); |
||||
/* Adjust PCM volume level */ |
||||
counter += CODEC_IO_Write(DeviceAddr, CS43L22_REG_PCMA_VOL, 0x0A); |
||||
counter += CODEC_IO_Write(DeviceAddr, CS43L22_REG_PCMB_VOL, 0x0A); |
||||
|
||||
/* Return communication control value */ |
||||
return counter;
|
||||
} |
||||
|
||||
/**
|
||||
* @brief Deinitializes the audio codec. |
||||
* @param None |
||||
* @retval None |
||||
*/ |
||||
void cs43l22_DeInit(void) |
||||
{ |
||||
/* Deinitialize Audio Codec interface */ |
||||
AUDIO_IO_DeInit(); |
||||
} |
||||
|
||||
/**
|
||||
* @brief Get the CS43L22 ID. |
||||
* @param DeviceAddr: Device address on communication Bus.
|
||||
* @retval The CS43L22 ID
|
||||
*/ |
||||
uint32_t cs43l22_ReadID(uint16_t DeviceAddr) |
||||
{ |
||||
uint8_t Value; |
||||
/* Initialize the Control interface of the Audio Codec */ |
||||
AUDIO_IO_Init();
|
||||
|
||||
Value = AUDIO_IO_Read(DeviceAddr, CS43L22_CHIPID_ADDR); |
||||
Value = (Value & CS43L22_ID_MASK); |
||||
|
||||
return((uint32_t) Value); |
||||
} |
||||
|
||||
/**
|
||||
* @brief Start the audio Codec play feature. |
||||
* @note For this codec no Play options are required. |
||||
* @param DeviceAddr: Device address on communication Bus.
|
||||
* @retval 0 if correct communication, else wrong communication |
||||
*/ |
||||
uint32_t cs43l22_Play(uint16_t DeviceAddr, uint16_t* pBuffer, uint16_t Size) |
||||
{ |
||||
uint32_t counter = 0; |
||||
|
||||
if(Is_cs43l22_Stop == 1) |
||||
{ |
||||
/* Enable the digital soft ramp */ |
||||
counter += CODEC_IO_Write(DeviceAddr, CS43L22_REG_MISC_CTL, 0x06); |
||||
|
||||
/* Enable Output device */
|
||||
counter += cs43l22_SetMute(DeviceAddr, AUDIO_MUTE_OFF); |
||||
|
||||
/* Power on the Codec */ |
||||
counter += CODEC_IO_Write(DeviceAddr, CS43L22_REG_POWER_CTL1, 0x9E);
|
||||
Is_cs43l22_Stop = 0; |
||||
} |
||||
|
||||
/* Return communication control value */ |
||||
return counter;
|
||||
} |
||||
|
||||
/**
|
||||
* @brief Pauses playing on the audio codec. |
||||
* @param DeviceAddr: Device address on communication Bus.
|
||||
* @retval 0 if correct communication, else wrong communication |
||||
*/ |
||||
uint32_t cs43l22_Pause(uint16_t DeviceAddr) |
||||
{
|
||||
uint32_t counter = 0; |
||||
|
||||
/* Pause the audio file playing */ |
||||
/* Mute the output first */ |
||||
counter += cs43l22_SetMute(DeviceAddr, AUDIO_MUTE_ON); |
||||
|
||||
/* Put the Codec in Power save mode */
|
||||
counter += CODEC_IO_Write(DeviceAddr, CS43L22_REG_POWER_CTL1, 0x01); |
||||
|
||||
return counter; |
||||
} |
||||
|
||||
/**
|
||||
* @brief Resumes playing on the audio codec. |
||||
* @param DeviceAddr: Device address on communication Bus.
|
||||
* @retval 0 if correct communication, else wrong communication |
||||
*/ |
||||
uint32_t cs43l22_Resume(uint16_t DeviceAddr) |
||||
{ |
||||
uint32_t counter = 0; |
||||
volatile uint32_t index = 0x00; |
||||
/* Resumes the audio file playing */
|
||||
/* Unmute the output first */ |
||||
counter += cs43l22_SetMute(DeviceAddr, AUDIO_MUTE_OFF); |
||||
|
||||
for(index = 0x00; index < 0xFF; index++); |
||||
|
||||
counter += CODEC_IO_Write(DeviceAddr, CS43L22_REG_POWER_CTL2, OutputDev); |
||||
|
||||
/* Exit the Power save mode */ |
||||
counter += CODEC_IO_Write(DeviceAddr, CS43L22_REG_POWER_CTL1, 0x9E);
|
||||
|
||||
return counter; |
||||
} |
||||
|
||||
/**
|
||||
* @brief Stops audio Codec playing. It powers down the codec. |
||||
* @param DeviceAddr: Device address on communication Bus.
|
||||
* @param CodecPdwnMode: selects the power down mode. |
||||
* - CODEC_PDWN_HW: Physically power down the codec. When resuming from this |
||||
* mode, the codec is set to default configuration
|
||||
* (user should re-Initialize the codec in order to
|
||||
* play again the audio stream). |
||||
* @retval 0 if correct communication, else wrong communication |
||||
*/ |
||||
uint32_t cs43l22_Stop(uint16_t DeviceAddr, uint32_t CodecPdwnMode) |
||||
{ |
||||
uint32_t counter = 0; |
||||
|
||||
/* Mute the output first */ |
||||
counter += cs43l22_SetMute(DeviceAddr, AUDIO_MUTE_ON); |
||||
|
||||
/* Disable the digital soft ramp */ |
||||
counter += CODEC_IO_Write(DeviceAddr, CS43L22_REG_MISC_CTL, 0x04); |
||||
|
||||
/* Power down the DAC and the speaker (PMDAC and PMSPK bits)*/ |
||||
counter += CODEC_IO_Write(DeviceAddr, CS43L22_REG_POWER_CTL1, 0x9F); |
||||
|
||||
Is_cs43l22_Stop = 1; |
||||
return counter;
|
||||
} |
||||
|
||||
/**
|
||||
* @brief Sets higher or lower the codec volume level. |
||||
* @param DeviceAddr: Device address on communication Bus.
|
||||
* @param Volume: a byte value from 0 to 255 (refer to codec registers
|
||||
* description for more details). |
||||
*
|
||||
* @retval 0 if correct communication, else wrong communication |
||||
*/ |
||||
uint32_t cs43l22_SetVolume(uint16_t DeviceAddr, uint8_t Volume) |
||||
{ |
||||
uint32_t counter = 0; |
||||
uint8_t convertedvol = VOLUME_CONVERT(Volume); |
||||
|
||||
if(convertedvol > 0xE6) |
||||
{ |
||||
/* Set the Master volume */ |
||||
counter += CODEC_IO_Write(DeviceAddr, CS43L22_REG_MASTER_A_VOL, convertedvol - 0xE7);
|
||||
counter += CODEC_IO_Write(DeviceAddr, CS43L22_REG_MASTER_B_VOL, convertedvol - 0xE7);
|
||||
} |
||||
else |
||||
{ |
||||
/* Set the Master volume */ |
||||
counter += CODEC_IO_Write(DeviceAddr, CS43L22_REG_MASTER_A_VOL, convertedvol + 0x19);
|
||||
counter += CODEC_IO_Write(DeviceAddr, CS43L22_REG_MASTER_B_VOL, convertedvol + 0x19);
|
||||
} |
||||
|
||||
return counter; |
||||
} |
||||
|
||||
/**
|
||||
* @brief Sets new frequency. |
||||
* @param DeviceAddr: Device address on communication Bus.
|
||||
* @param AudioFreq: Audio frequency used to play the audio stream. |
||||
* @retval 0 if correct communication, else wrong communication |
||||
*/ |
||||
uint32_t cs43l22_SetFrequency(uint16_t DeviceAddr, uint32_t AudioFreq) |
||||
{ |
||||
return 0; |
||||
} |
||||
|
||||
/**
|
||||
* @brief Enables or disables the mute feature on the audio codec. |
||||
* @param DeviceAddr: Device address on communication Bus.
|
||||
* @param Cmd: AUDIO_MUTE_ON to enable the mute or AUDIO_MUTE_OFF to disable the |
||||
* mute mode. |
||||
* @retval 0 if correct communication, else wrong communication |
||||
*/ |
||||
uint32_t cs43l22_SetMute(uint16_t DeviceAddr, uint32_t Cmd) |
||||
{ |
||||
uint32_t counter = 0; |
||||
|
||||
/* Set the Mute mode */ |
||||
if(Cmd == AUDIO_MUTE_ON) |
||||
{ |
||||
counter += CODEC_IO_Write(DeviceAddr, CS43L22_REG_POWER_CTL2, 0xFF); |
||||
counter += CODEC_IO_Write(DeviceAddr, CS43L22_REG_HEADPHONE_A_VOL, 0x01); |
||||
counter += CODEC_IO_Write(DeviceAddr, CS43L22_REG_HEADPHONE_B_VOL, 0x01); |
||||
} |
||||
else /* AUDIO_MUTE_OFF Disable the Mute */ |
||||
{ |
||||
counter += CODEC_IO_Write(DeviceAddr, CS43L22_REG_HEADPHONE_A_VOL, 0x00); |
||||
counter += CODEC_IO_Write(DeviceAddr, CS43L22_REG_HEADPHONE_B_VOL, 0x00); |
||||
counter += CODEC_IO_Write(DeviceAddr, CS43L22_REG_POWER_CTL2, OutputDev); |
||||
} |
||||
return counter; |
||||
} |
||||
|
||||
/**
|
||||
* @brief Switch dynamically (while audio file is played) the output target
|
||||
* (speaker or headphone). |
||||
* @note This function modifies a global variable of the audio codec driver: OutputDev. |
||||
* @param DeviceAddr: Device address on communication Bus. |
||||
* @param Output: specifies the audio output target: OUTPUT_DEVICE_SPEAKER, |
||||
* OUTPUT_DEVICE_HEADPHONE, OUTPUT_DEVICE_BOTH or OUTPUT_DEVICE_AUTO
|
||||
* @retval 0 if correct communication, else wrong communication |
||||
*/ |
||||
uint32_t cs43l22_SetOutputMode(uint16_t DeviceAddr, uint8_t Output) |
||||
{ |
||||
uint32_t counter = 0;
|
||||
|
||||
switch (Output)
|
||||
{ |
||||
case OUTPUT_DEVICE_SPEAKER: |
||||
counter += CODEC_IO_Write(DeviceAddr, CS43L22_REG_POWER_CTL2, 0xFA); /* SPK always ON & HP always OFF */ |
||||
OutputDev = 0xFA; |
||||
break; |
||||
|
||||
case OUTPUT_DEVICE_HEADPHONE: |
||||
counter += CODEC_IO_Write(DeviceAddr, CS43L22_REG_POWER_CTL2, 0xAF); /* SPK always OFF & HP always ON */ |
||||
OutputDev = 0xAF; |
||||
break; |
||||
|
||||
case OUTPUT_DEVICE_BOTH: |
||||
counter += CODEC_IO_Write(DeviceAddr, CS43L22_REG_POWER_CTL2, 0xAA); /* SPK always ON & HP always ON */ |
||||
OutputDev = 0xAA; |
||||
break; |
||||
|
||||
case OUTPUT_DEVICE_AUTO: |
||||
counter += CODEC_IO_Write(DeviceAddr, CS43L22_REG_POWER_CTL2, 0x05); /* Detect the HP or the SPK automatically */ |
||||
OutputDev = 0x05; |
||||
break;
|
||||
|
||||
default: |
||||
counter += CODEC_IO_Write(DeviceAddr, CS43L22_REG_POWER_CTL2, 0x05); /* Detect the HP or the SPK automatically */ |
||||
OutputDev = 0x05; |
||||
break; |
||||
}
|
||||
return counter; |
||||
} |
||||
|
||||
/**
|
||||
* @brief Resets cs43l22 registers. |
||||
* @param DeviceAddr: Device address on communication Bus.
|
||||
* @retval 0 if correct communication, else wrong communication |
||||
*/ |
||||
uint32_t cs43l22_Reset(uint16_t DeviceAddr) |
||||
{ |
||||
return 0; |
||||
} |
||||
|
||||
/**
|
||||
* @brief Writes/Read a single data. |
||||
* @param Addr: I2C address |
||||
* @param Reg: Reg address
|
||||
* @param Value: Data to be written |
||||
* @retval None |
||||
*/ |
||||
static uint8_t CODEC_IO_Write(uint8_t Addr, uint8_t Reg, uint8_t Value) |
||||
{ |
||||
uint32_t result = 0; |
||||
|
||||
AUDIO_IO_Write(Addr, Reg, Value); |
||||
|
||||
#ifdef VERIFY_WRITTENDATA |
||||
/* Verify that the data has been correctly written */
|
||||
result = (AUDIO_IO_Read(Addr, Reg) == Value)? 0:1; |
||||
#endif /* VERIFY_WRITTENDATA */ |
||||
|
||||
return result; |
||||
} |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@ -0,0 +1,226 @@
|
||||
/**
|
||||
****************************************************************************** |
||||
* @file cs43l22.h |
||||
* @author MCD Application Team |
||||
* @brief This file contains all the functions prototypes for the cs43l22.c driver. |
||||
****************************************************************************** |
||||
* @attention |
||||
* |
||||
* <h2><center>© COPYRIGHT(c) 2015 STMicroelectronics</center></h2> |
||||
* |
||||
* 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 STMicroelectronics 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. |
||||
* |
||||
****************************************************************************** |
||||
*/ |
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/ |
||||
#ifndef __CS43L22_H |
||||
#define __CS43L22_H |
||||
|
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include "../Common/audio.h" |
||||
|
||||
/** @addtogroup BSP
|
||||
* @{ |
||||
*/
|
||||
|
||||
/** @addtogroup Component
|
||||
* @{ |
||||
*/
|
||||
|
||||
/** @addtogroup CS43L22
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @defgroup CS43L22_Exported_Types
|
||||
* @{ |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup CS43L22_Exported_Constants
|
||||
* @{ |
||||
*/
|
||||
|
||||
/******************************************************************************/ |
||||
/*************************** Codec User defines ******************************/ |
||||
/******************************************************************************/ |
||||
/* Codec output DEVICE */ |
||||
#define OUTPUT_DEVICE_SPEAKER 1 |
||||
#define OUTPUT_DEVICE_HEADPHONE 2 |
||||
#define OUTPUT_DEVICE_BOTH 3 |
||||
#define OUTPUT_DEVICE_AUTO 4 |
||||
|
||||
/* Volume Levels values */ |
||||
#define DEFAULT_VOLMIN 0x00 |
||||
#define DEFAULT_VOLMAX 0xFF |
||||
#define DEFAULT_VOLSTEP 0x04 |
||||
|
||||
#define AUDIO_PAUSE 0 |
||||
#define AUDIO_RESUME 1 |
||||
|
||||
/* Codec POWER DOWN modes */ |
||||
#define CODEC_PDWN_HW 1 |
||||
#define CODEC_PDWN_SW 2 |
||||
|
||||
/* MUTE commands */ |
||||
#define AUDIO_MUTE_ON 1 |
||||
#define AUDIO_MUTE_OFF 0 |
||||
|
||||
/* AUDIO FREQUENCY */ |
||||
#define AUDIO_FREQUENCY_192K ((uint32_t)192000) |
||||
#define AUDIO_FREQUENCY_96K ((uint32_t)96000) |
||||
#define AUDIO_FREQUENCY_48K ((uint32_t)48000) |
||||
#define AUDIO_FREQUENCY_44K ((uint32_t)44100) |
||||
#define AUDIO_FREQUENCY_32K ((uint32_t)32000) |
||||
#define AUDIO_FREQUENCY_22K ((uint32_t)22050) |
||||
#define AUDIO_FREQUENCY_16K ((uint32_t)16000) |
||||
#define AUDIO_FREQUENCY_11K ((uint32_t)11025) |
||||
#define AUDIO_FREQUENCY_8K ((uint32_t)8000) |
||||
|
||||
/** CS43l22 Registers ***/ |
||||
#define CS43L22_REG_ID 0x01 |
||||
#define CS43L22_REG_POWER_CTL1 0x02 |
||||
#define CS43L22_REG_POWER_CTL2 0x04 |
||||
#define CS43L22_REG_CLOCKING_CTL 0x05 |
||||
#define CS43L22_REG_INTERFACE_CTL1 0x06 |
||||
#define CS43L22_REG_INTERFACE_CTL2 0x07 |
||||
#define CS43L22_REG_PASSTHR_A_SELECT 0x08 |
||||
#define CS43L22_REG_PASSTHR_B_SELECT 0x09 |
||||
#define CS43L22_REG_ANALOG_ZC_SR_SETT 0x0A |
||||
#define CS43L22_REG_PASSTHR_GANG_CTL 0x0C |
||||
#define CS43L22_REG_PLAYBACK_CTL1 0x0D |
||||
#define CS43L22_REG_MISC_CTL 0x0E |
||||
#define CS43L22_REG_PLAYBACK_CTL2 0x0F |
||||
#define CS43L22_REG_PASSTHR_A_VOL 0x14 |
||||
#define CS43L22_REG_PASSTHR_B_VOL 0x15 |
||||
#define CS43L22_REG_PCMA_VOL 0x1A |
||||
#define CS43L22_REG_PCMB_VOL 0x1B |
||||
#define CS43L22_REG_BEEP_FREQ_ON_TIME 0x1C |
||||
#define CS43L22_REG_BEEP_VOL_OFF_TIME 0x1D |
||||
#define CS43L22_REG_BEEP_TONE_CFG 0x1E |
||||
#define CS43L22_REG_TONE_CTL 0x1F |
||||
#define CS43L22_REG_MASTER_A_VOL 0x20 |
||||
#define CS43L22_REG_MASTER_B_VOL 0x21 |
||||
#define CS43L22_REG_HEADPHONE_A_VOL 0x22 |
||||
#define CS43L22_REG_HEADPHONE_B_VOL 0x23 |
||||
#define CS43L22_REG_SPEAKER_A_VOL 0x24 |
||||
#define CS43L22_REG_SPEAKER_B_VOL 0x25 |
||||
#define CS43L22_REG_CH_MIXER_SWAP 0x26 |
||||
#define CS43L22_REG_LIMIT_CTL1 0x27 |
||||
#define CS43L22_REG_LIMIT_CTL2 0x28 |
||||
#define CS43L22_REG_LIMIT_ATTACK_RATE 0x29 |
||||
#define CS43L22_REG_OVF_CLK_STATUS 0x2E |
||||
#define CS43L22_REG_BATT_COMPENSATION 0x2F |
||||
#define CS43L22_REG_VP_BATTERY_LEVEL 0x30 |
||||
#define CS43L22_REG_SPEAKER_STATUS 0x31 |
||||
#define CS43L22_REG_TEMPMONITOR_CTL 0x32 |
||||
#define CS43L22_REG_THERMAL_FOLDBACK 0x33 |
||||
#define CS43L22_REG_CHARGE_PUMP_FREQ 0x34 |
||||
|
||||
/******************************************************************************/ |
||||
/****************************** REGISTER MAPPING ******************************/ |
||||
/******************************************************************************/ |
||||
/**
|
||||
* @brief CS43L22 ID
|
||||
*/
|
||||
#define CS43L22_ID 0xE0 |
||||
#define CS43L22_ID_MASK 0xF8 |
||||
/**
|
||||
* @brief Chip ID Register: Chip I.D. and Revision Register |
||||
* Read only register |
||||
* Default value: 0x01 |
||||
* [7:3] CHIPID[4:0]: I.D. code for the CS43L22. |
||||
* Default value: 11100b |
||||
* [2:0] REVID[2:0]: CS43L22 revision level. |
||||
* Default value:
|
||||
* 000 - Rev A0 |
||||
* 001 - Rev A1 |
||||
* 010 - Rev B0 |
||||
* 011 - Rev B1 |
||||
*/ |
||||
#define CS43L22_CHIPID_ADDR 0x01 |
||||
|
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
/** @defgroup CS43L22_Exported_Macros
|
||||
* @{ |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
/** @defgroup CS43L22_Exported_Functions
|
||||
* @{ |
||||
*/ |
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
Audio Codec functions
|
||||
------------------------------------------------------------------------------*/ |
||||
/* High Layer codec functions */ |
||||
uint32_t cs43l22_Init(uint16_t DeviceAddr, uint16_t OutputDevice, uint8_t Volume, uint32_t AudioFreq); |
||||
void cs43l22_DeInit(void); |
||||
uint32_t cs43l22_ReadID(uint16_t DeviceAddr); |
||||
uint32_t cs43l22_Play(uint16_t DeviceAddr, uint16_t* pBuffer, uint16_t Size); |
||||
uint32_t cs43l22_Pause(uint16_t DeviceAddr); |
||||
uint32_t cs43l22_Resume(uint16_t DeviceAddr); |
||||
uint32_t cs43l22_Stop(uint16_t DeviceAddr, uint32_t Cmd); |
||||
uint32_t cs43l22_SetVolume(uint16_t DeviceAddr, uint8_t Volume); |
||||
uint32_t cs43l22_SetFrequency(uint16_t DeviceAddr, uint32_t AudioFreq); |
||||
uint32_t cs43l22_SetMute(uint16_t DeviceAddr, uint32_t Cmd); |
||||
uint32_t cs43l22_SetOutputMode(uint16_t DeviceAddr, uint8_t Output); |
||||
uint32_t cs43l22_Reset(uint16_t DeviceAddr); |
||||
|
||||
/* AUDIO IO functions */ |
||||
void AUDIO_IO_Init(void); |
||||
void AUDIO_IO_DeInit(void); |
||||
void AUDIO_IO_Write(uint8_t Addr, uint8_t Reg, uint8_t Value); |
||||
uint8_t AUDIO_IO_Read(uint8_t Addr, uint8_t Reg); |
||||
|
||||
/* Audio driver structure */ |
||||
extern AUDIO_DrvTypeDef cs43l22_drv; |
||||
|
||||
#endif /* __CS43L22_H */ |
||||
|
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@ -0,0 +1,91 @@
|
||||
<!DOCTYPE html> |
||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> |
||||
<head> |
||||
<meta charset="utf-8" /> |
||||
<meta name="generator" content="pandoc" /> |
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" /> |
||||
<title>Release Notes for FT6X06 Component Drivers</title> |
||||
<style> |
||||
code{white-space: pre-wrap;} |
||||
span.smallcaps{font-variant: small-caps;} |
||||
span.underline{text-decoration: underline;} |
||||
div.column{display: inline-block; vertical-align: top; width: 50%;} |
||||
</style> |
||||
<link rel="stylesheet" href="_htmresc/mini-st.css" /> |
||||
<!--[if lt IE 9]> |
||||
<script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script> |
||||
<![endif]--> |
||||
</head> |
||||
<body> |
||||
<div class="row"> |
||||
<div class="col-sm-12 col-lg-4"> |
||||
<div class="card fluid"> |
||||
<div class="sectione dark"> |
||||
<center> |
||||
<h1 id="release-notes-for-ft6x06-component-drivers"><small>Release Notes for</small> <mark>FT6X06 Component Drivers</mark></h1> |
||||
<p>Copyright © 2016 STMicroelectronics<br /> |
||||
</p> |
||||
<a href="https://www.st.com" class="logo"><img src="_htmresc/st_logo.png" alt="ST logo" /></a> |
||||
</center> |
||||
</div> |
||||
</div> |
||||
<h1 id="license">License</h1> |
||||
<p>Licensed by ST under BSD 3-Clause license (the "License"). You may not use this package except in compliance with the License. You may obtain a copy of the License at:</p> |
||||
<p><a href="https://opensource.org/licenses/BSD-3-Clause">https://opensource.org/licenses/BSD-3-Clause</a></p> |
||||
<h1 id="purpose">Purpose</h1> |
||||
<p>This directory contains the FT6X06 component drivers.</p> |
||||
</div> |
||||
<div class="col-sm-12 col-lg-8"> |
||||
<h1 id="update-history">Update History</h1> |
||||
<div class="collapse"> |
||||
<input type="checkbox" id="collapse-section23" checked aria-hidden="true"> <label for="collapse-section23" aria-hidden="true">V1.1.0 / 11-December-2020</label> |
||||
<div> |
||||
<h2 id="main-changes">Main Changes</h2> |
||||
<ul> |
||||
<li>Add new FT6xx6 chip ID.</li> |
||||
</ul> |
||||
</div> |
||||
</div> |
||||
<div class="collapse"> |
||||
<input type="checkbox" id="collapse-section22" aria-hidden="true"> <label for="collapse-section22" aria-hidden="true">V1.0.3 / 03-April-2019</label> |
||||
<div> |
||||
<h2 id="main-changes-1">Main Changes</h2> |
||||
<ul> |
||||
<li>Update release notes format</li> |
||||
</ul> |
||||
</div> |
||||
</div> |
||||
<div class="collapse"> |
||||
<input type="checkbox" id="collapse-section20" aria-hidden="true"> <label for="collapse-section20" aria-hidden="true">V1.0.2 / 31-August-2018</label> |
||||
<div> |
||||
<h2 id="main-changes-2">Main Changes</h2> |
||||
<ul> |
||||
<li>Reformat the BSD 3-Clause license declaration in the files header (replace license terms by a web reference to OSI website where those terms lie)</li> |
||||
</ul> |
||||
</div> |
||||
</div> |
||||
<div class="collapse"> |
||||
<input type="checkbox" id="collapse-section19" aria-hidden="true"> <label for="collapse-section19" aria-hidden="true">V1.0.1 / 03-May-2016</label> |
||||
<div> |
||||
<h2 id="main-changes-3">Main Changes</h2> |
||||
<ul> |
||||
<li>Add support of FT6x36 Touch controller</li> |
||||
</ul> |
||||
</div> |
||||
</div> |
||||
<div class="collapse"> |
||||
<input type="checkbox" id="collapse-section18" aria-hidden="true"> <label for="collapse-section18" aria-hidden="true">V1.0.0 / 03-August-2015</label> |
||||
<div> |
||||
<h2 id="main-changes-4">Main Changes</h2> |
||||
<ul> |
||||
<li>First official release</li> |
||||
</ul> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
<footer class="sticky"> |
||||
For complete documentation on <mark>STM32 Microcontrollers</mark> , visit: <a href="http://www.st.com/STM32">http://www.st.com/STM32</a> |
||||
</footer> |
||||
</body> |
||||
</html> |
File diff suppressed because it is too large
Load Diff
After Width: | Height: | Size: 18 KiB |
@ -0,0 +1,496 @@
|
||||
/**
|
||||
****************************************************************************** |
||||
* @file ft6x06.c |
||||
* @author MCD Application Team |
||||
* @brief This file provides a set of functions needed to manage the FT6X06 |
||||
* IO Expander devices. |
||||
****************************************************************************** |
||||
* @attention |
||||
* |
||||
* <h2><center>© Copyright (c) 2016 STMicroelectronics. |
||||
* All rights reserved.</center></h2> |
||||
* |
||||
* This software component is licensed by ST under BSD 3-Clause license, |
||||
* the "License"; You may not use this file except in compliance with the |
||||
* License. You may obtain a copy of the License at: |
||||
* opensource.org/licenses/BSD-3-Clause |
||||
* |
||||
****************************************************************************** |
||||
*/ |
||||
|
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include "ft6x06.h" |
||||
|
||||
/** @addtogroup BSP
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @addtogroup Component
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @defgroup FT6XX6
|
||||
* @{ |
||||
*/ |
||||
|
||||
/* Private typedef -----------------------------------------------------------*/ |
||||
|
||||
/** @defgroup FT6XX6_Private_Defines FT6XX6 Private Defines
|
||||
* @{ |
||||
*/ |
||||
#define FT6x06_MAX_INSTANCE 2 |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/* Private macro -------------------------------------------------------------*/ |
||||
|
||||
/** @defgroup FT6XX6_Private_Variables FT6XX6 Private Variables
|
||||
* @{ |
||||
*/ |
||||
|
||||
/* Touch screen driver structure initialization */ |
||||
TS_DrvTypeDef ft6x06_ts_drv = |
||||
{ |
||||
ft6x06_Init, |
||||
ft6x06_ReadID, |
||||
ft6x06_Reset, |
||||
|
||||
ft6x06_TS_Start, |
||||
ft6x06_TS_DetectTouch, |
||||
ft6x06_TS_GetXY, |
||||
|
||||
ft6x06_TS_EnableIT, |
||||
ft6x06_TS_ClearIT, |
||||
ft6x06_TS_ITStatus, |
||||
ft6x06_TS_DisableIT |
||||
}; |
||||
|
||||
/* ft6xx6 instances by address */ |
||||
uint8_t ft6x06[FT6x06_MAX_INSTANCE] = {0}; |
||||
|
||||
/* Global ft6xx6 handle */ |
||||
static ft6x06_handle_TypeDef ft6x06_handle = { FT6206_I2C_NOT_INITIALIZED, 0, 0}; |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup ft6xx6_Private_Function_Prototypes ft6xx6 Private Function Prototypes
|
||||
* @{ |
||||
*/ |
||||
static uint8_t ft6x06_GetInstance(uint16_t DeviceAddr); |
||||
/* Private functions prototypes-----------------------------------------------*/ |
||||
#if (TS_AUTO_CALIBRATION_SUPPORTED == 1) |
||||
/**
|
||||
* @brief Start TouchScreen calibration phase |
||||
* @param DeviceAddr: FT6xx6 Device address for communication on I2C Bus. |
||||
* @retval Status FT6206_STATUS_OK or FT6206_STATUS_NOT_OK. |
||||
*/ |
||||
static uint32_t ft6x06_TS_Calibration(uint16_t DeviceAddr); |
||||
#endif /* TS_AUTO_CALIBRATION_SUPPORTED == 1 */ |
||||
|
||||
/**
|
||||
* @brief Basic static configuration of TouchScreen |
||||
* @param DeviceAddr: FT6xx6 Device address for communication on I2C Bus. |
||||
* @retval Status FT6206_STATUS_OK or FT6206_STATUS_NOT_OK. |
||||
*/ |
||||
static uint32_t ft6x06_TS_Configure(uint16_t DeviceAddr); |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup ft6xx6_Private_Functions ft6xx6 Private Functions
|
||||
* @{ |
||||
*/ |
||||
|
||||
/**
|
||||
* @brief Initialize the ft6xx6 communication bus |
||||
* from MCU to FT6xx6 : ie I2C channel initialization (if required). |
||||
* @param DeviceAddr: Device address on communication Bus (I2C slave address of FT6xx6). |
||||
* @retval None |
||||
*/ |
||||
void ft6x06_Init(uint16_t DeviceAddr) |
||||
{
|
||||
uint8_t instance; |
||||
uint8_t empty; |
||||
|
||||
/* Check if device instance already exists */ |
||||
instance = ft6x06_GetInstance(DeviceAddr); |
||||
|
||||
/* To prevent double initialization */ |
||||
if(instance == 0xFF) |
||||
{ |
||||
/* Look for empty instance */ |
||||
empty = ft6x06_GetInstance(0); |
||||
|
||||
if(empty < FT6x06_MAX_INSTANCE) |
||||
{ |
||||
/* Register the current device instance */ |
||||
ft6x06[empty] = DeviceAddr; |
||||
|
||||
/* Initialize IO BUS layer */ |
||||
TS_IO_Init();
|
||||
} |
||||
} |
||||
} |
||||
|
||||
/**
|
||||
* @brief Software Reset the ft6xx6. |
||||
* @note : Not applicable to FT6xx6. |
||||
* @param DeviceAddr: Device address on communication Bus (I2C slave address of FT6xx6). |
||||
* @retval None |
||||
*/ |
||||
void ft6x06_Reset(uint16_t DeviceAddr) |
||||
{ |
||||
/* Do nothing */ |
||||
/* No software reset sequence available in FT6xx6 IC */ |
||||
} |
||||
|
||||
/**
|
||||
* @brief Read the ft6xx6 device ID, pre initialize I2C in case of need to be |
||||
* able to read the FT6xx6 device ID, and verify this is a FT6xx6. |
||||
* @param DeviceAddr: I2C FT6xx6 Slave address. |
||||
* @retval The Device ID (two bytes). |
||||
*/ |
||||
uint16_t ft6x06_ReadID(uint16_t DeviceAddr) |
||||
{ |
||||
/* Initialize I2C link if needed */ |
||||
TS_IO_Init(); |
||||
|
||||
/* Return the device ID value */ |
||||
return (TS_IO_Read(DeviceAddr, FT6206_CHIP_ID_REG)); |
||||
} |
||||
|
||||
/**
|
||||
* @brief Configures the touch Screen IC device to start detecting touches |
||||
* It goes through an internal calibration process (Hw calibration sequence of |
||||
* the touch screen). |
||||
* @param DeviceAddr: Device address on communication Bus (I2C slave address). |
||||
* @retval None. |
||||
*/ |
||||
void ft6x06_TS_Start(uint16_t DeviceAddr) |
||||
{ |
||||
#if (TS_AUTO_CALIBRATION_SUPPORTED == 1) |
||||
/* Hw Calibration sequence start : should be done once after each power up */ |
||||
/* This is called internal calibration of the touch screen */ |
||||
ft6x06_TS_Calibration(DeviceAddr); |
||||
#endif |
||||
/* Minimum static configuration of FT6xx6 */ |
||||
ft6x06_TS_Configure(DeviceAddr); |
||||
|
||||
/* By default set FT6xx6 IC in Polling mode : no INT generation on FT6xx6 for new touch available */ |
||||
/* Note TS_INT is active low */ |
||||
ft6x06_TS_DisableIT(DeviceAddr); |
||||
} |
||||
|
||||
/**
|
||||
* @brief Return if there is touches detected or not. |
||||
* Try to detect new touches and forget the old ones (reset internal global |
||||
* variables). |
||||
* @param DeviceAddr: Device address on communication Bus. |
||||
* @retval : Number of active touches detected (can be 0, 1 or 2). |
||||
*/ |
||||
uint8_t ft6x06_TS_DetectTouch(uint16_t DeviceAddr) |
||||
{ |
||||
volatile uint8_t nbTouch = 0; |
||||
|
||||
/* Read register FT6206_TD_STAT_REG to check number of touches detection */ |
||||
nbTouch = TS_IO_Read(DeviceAddr, FT6206_TD_STAT_REG); |
||||
nbTouch &= FT6206_TD_STAT_MASK; |
||||
|
||||
if(nbTouch > FT6206_MAX_DETECTABLE_TOUCH) |
||||
{ |
||||
/* If invalid number of touch detected, set it to zero */ |
||||
nbTouch = 0; |
||||
} |
||||
|
||||
/* Update ft6xx6 driver internal global : current number of active touches */ |
||||
ft6x06_handle.currActiveTouchNb = nbTouch; |
||||
|
||||
/* Reset current active touch index on which to work on */ |
||||
ft6x06_handle.currActiveTouchIdx = 0; |
||||
|
||||
return(nbTouch); |
||||
} |
||||
|
||||
/**
|
||||
* @brief Get the touch screen X and Y positions values |
||||
* Manage multi touch thanks to touch Index global |
||||
* variable 'ft6x06_handle.currActiveTouchIdx'. |
||||
* @param DeviceAddr: Device address on communication Bus. |
||||
* @param X: Pointer to X position value |
||||
* @param Y: Pointer to Y position value |
||||
* @retval None. |
||||
*/ |
||||
void ft6x06_TS_GetXY(uint16_t DeviceAddr, uint16_t *X, uint16_t *Y) |
||||
{ |
||||
uint8_t regAddress = 0; |
||||
uint8_t dataxy[4]; |
||||
|
||||
if(ft6x06_handle.currActiveTouchIdx < ft6x06_handle.currActiveTouchNb) |
||||
{ |
||||
switch(ft6x06_handle.currActiveTouchIdx) |
||||
{ |
||||
case 0 :
|
||||
regAddress = FT6206_P1_XH_REG;
|
||||
break; |
||||
case 1 : |
||||
regAddress = FT6206_P2_XH_REG;
|
||||
break; |
||||
|
||||
default : |
||||
break; |
||||
} |
||||
|
||||
/* Read X and Y positions */ |
||||
TS_IO_ReadMultiple(DeviceAddr, regAddress, dataxy, sizeof(dataxy));
|
||||
|
||||
/* Send back ready X position to caller */ |
||||
*X = ((dataxy[0] & FT6206_MSB_MASK) << 8) | (dataxy[1] & FT6206_LSB_MASK); |
||||
|
||||
/* Send back ready Y position to caller */ |
||||
*Y = ((dataxy[2] & FT6206_MSB_MASK) << 8) | (dataxy[3] & FT6206_LSB_MASK); |
||||
|
||||
ft6x06_handle.currActiveTouchIdx++; |
||||
} |
||||
} |
||||
|
||||
/**
|
||||
* @brief Configure the FT6xx6 device to generate IT on given INT pin |
||||
* connected to MCU as EXTI. |
||||
* @param DeviceAddr: Device address on communication Bus (Slave I2C address of FT6xx6). |
||||
* @retval None |
||||
*/ |
||||
void ft6x06_TS_EnableIT(uint16_t DeviceAddr) |
||||
{ |
||||
uint8_t regValue = 0; |
||||
regValue = (FT6206_G_MODE_INTERRUPT_TRIGGER & (FT6206_G_MODE_INTERRUPT_MASK >> FT6206_G_MODE_INTERRUPT_SHIFT)) << FT6206_G_MODE_INTERRUPT_SHIFT; |
||||
|
||||
/* Set interrupt trigger mode in FT6206_GMODE_REG */ |
||||
TS_IO_Write(DeviceAddr, FT6206_GMODE_REG, regValue); |
||||
} |
||||
|
||||
/**
|
||||
* @brief Configure the FT6xx6 device to stop generating IT on the given INT pin |
||||
* connected to MCU as EXTI. |
||||
* @param DeviceAddr: Device address on communication Bus (Slave I2C address of FT6xx6). |
||||
* @retval None |
||||
*/ |
||||
void ft6x06_TS_DisableIT(uint16_t DeviceAddr) |
||||
{ |
||||
uint8_t regValue = 0; |
||||
regValue = (FT6206_G_MODE_INTERRUPT_POLLING & (FT6206_G_MODE_INTERRUPT_MASK >> FT6206_G_MODE_INTERRUPT_SHIFT)) << FT6206_G_MODE_INTERRUPT_SHIFT; |
||||
|
||||
/* Set interrupt polling mode in FT6206_GMODE_REG */ |
||||
TS_IO_Write(DeviceAddr, FT6206_GMODE_REG, regValue); |
||||
} |
||||
|
||||
/**
|
||||
* @brief Get IT status from FT6xx6 interrupt status registers |
||||
* Should be called Following an EXTI coming to the MCU to know the detailed |
||||
* reason of the interrupt. |
||||
* @note : This feature is not applicable to FT6xx6. |
||||
* @param DeviceAddr: Device address on communication Bus (I2C slave address of FT6xx6). |
||||
* @retval TS interrupts status : always return 0 here |
||||
*/ |
||||
uint8_t ft6x06_TS_ITStatus(uint16_t DeviceAddr) |
||||
{ |
||||
/* Always return 0 as feature not applicable to FT6xx6 */ |
||||
return 0; |
||||
} |
||||
|
||||
/**
|
||||
* @brief Clear IT status in FT6xx6 interrupt status clear registers |
||||
* Should be called Following an EXTI coming to the MCU. |
||||
* @note : This feature is not applicable to FT6xx6. |
||||
* @param DeviceAddr: Device address on communication Bus (I2C slave address of FT6xx6). |
||||
* @retval None |
||||
*/ |
||||
void ft6x06_TS_ClearIT(uint16_t DeviceAddr) |
||||
{ |
||||
/* Nothing to be done here for FT6xx6 */ |
||||
} |
||||
|
||||
/**** NEW FEATURES enabled when Multi-touch support is enabled ****/ |
||||
|
||||
#if (TS_MULTI_TOUCH_SUPPORTED == 1) |
||||
/**
|
||||
* @brief Get the last touch gesture identification (zoom, move up/down...). |
||||
* @param DeviceAddr: Device address on communication Bus (I2C slave address of FT6xx6). |
||||
* @param pGestureId : Pointer to get last touch gesture Identification. |
||||
* @retval None. |
||||
*/ |
||||
void ft6x06_TS_GetGestureID(uint16_t DeviceAddr, uint32_t * pGestureId) |
||||
{ |
||||
volatile uint8_t ucReadData = 0; |
||||
|
||||
ucReadData = TS_IO_Read(DeviceAddr, FT6206_GEST_ID_REG); |
||||
|
||||
* pGestureId = ucReadData; |
||||
} |
||||
|
||||
/**
|
||||
* @brief Get the touch detailed informations on touch number 'touchIdx' (0..1) |
||||
* This touch detailed information contains : |
||||
* - weight that was applied to this touch |
||||
* - sub-area of the touch in the touch panel |
||||
* - event of linked to the touch (press down, lift up, ...) |
||||
* @param DeviceAddr: Device address on communication Bus (I2C slave address of FT6xx6). |
||||
* @param touchIdx : Passed index of the touch (0..1) on which we want to get the |
||||
* detailed information. |
||||
* @param pWeight : Pointer to to get the weight information of 'touchIdx'. |
||||
* @param pArea : Pointer to to get the sub-area information of 'touchIdx'. |
||||
* @param pEvent : Pointer to to get the event information of 'touchIdx'. |
||||
|
||||
* @retval None. |
||||
*/ |
||||
void ft6x06_TS_GetTouchInfo(uint16_t DeviceAddr, |
||||
uint32_t touchIdx, |
||||
uint32_t * pWeight, |
||||
uint32_t * pArea, |
||||
uint32_t * pEvent) |
||||
{ |
||||
uint8_t regAddress = 0; |
||||
uint8_t dataxy[3]; |
||||
|
||||
if(touchIdx < ft6x06_handle.currActiveTouchNb) |
||||
{ |
||||
switch(touchIdx) |
||||
{ |
||||
case 0 :
|
||||
regAddress = FT6206_P1_WEIGHT_REG; |
||||
break; |
||||
|
||||
case 1 : |
||||
regAddress = FT6206_P2_WEIGHT_REG; |
||||
break; |
||||
|
||||
default : |
||||
break; |
||||
|
||||
} /* end switch(touchIdx) */ |
||||
|
||||
/* Read weight, area and Event Id of touch index */ |
||||
TS_IO_ReadMultiple(DeviceAddr, regAddress, dataxy, sizeof(dataxy));
|
||||
|
||||
/* Return weight of touch index */ |
||||
* pWeight = (dataxy[0] & FT6206_TOUCH_WEIGHT_MASK) >> FT6206_TOUCH_WEIGHT_SHIFT; |
||||
/* Return area of touch index */ |
||||
* pArea = (dataxy[1] & FT6206_TOUCH_AREA_MASK) >> FT6206_TOUCH_AREA_SHIFT; |
||||
/* Return Event Id of touch index */ |
||||
* pEvent = (dataxy[2] & FT6206_TOUCH_EVT_FLAG_MASK) >> FT6206_TOUCH_EVT_FLAG_SHIFT; |
||||
|
||||
} /* of if(touchIdx < ft6x06_handle.currActiveTouchNb) */ |
||||
} |
||||
|
||||
#endif /* TS_MULTI_TOUCH_SUPPORTED == 1 */ |
||||
|
||||
#if (TS_AUTO_CALIBRATION_SUPPORTED == 1) |
||||
/**
|
||||
* @brief Start TouchScreen calibration phase |
||||
* @param DeviceAddr: FT6xx6 Device address for communication on I2C Bus. |
||||
* @retval Status FT6206_STATUS_OK or FT6206_STATUS_NOT_OK. |
||||
*/ |
||||
static uint32_t ft6x06_TS_Calibration(uint16_t DeviceAddr) |
||||
{ |
||||
uint32_t nbAttempt = 0; |
||||
volatile uint8_t ucReadData; |
||||
volatile uint8_t regValue; |
||||
uint32_t status = FT6206_STATUS_OK; |
||||
uint8_t bEndCalibration = 0; |
||||
|
||||
/* >> Calibration sequence start */ |
||||
|
||||
/* Switch FT6xx6 back to factory mode to calibrate */ |
||||
regValue = (FT6206_DEV_MODE_FACTORY & FT6206_DEV_MODE_MASK) << FT6206_DEV_MODE_SHIFT; |
||||
TS_IO_Write(DeviceAddr, FT6206_DEV_MODE_REG, regValue); /* 0x40 */ |
||||
|
||||
/* Read back the same register FT6206_DEV_MODE_REG */ |
||||
ucReadData = TS_IO_Read(DeviceAddr, FT6206_DEV_MODE_REG); |
||||
TS_IO_Delay(300); /* Wait 300 ms */ |
||||
|
||||
if(((ucReadData & (FT6206_DEV_MODE_MASK << FT6206_DEV_MODE_SHIFT)) >> FT6206_DEV_MODE_SHIFT) != FT6206_DEV_MODE_FACTORY ) |
||||
{ |
||||
/* Return error to caller */ |
||||
return(FT6206_STATUS_NOT_OK); |
||||
} |
||||
|
||||
/* Start calibration command */ |
||||
TS_IO_Write(DeviceAddr, FT6206_TD_STAT_REG, 0x04); |
||||
TS_IO_Delay(300); /* Wait 300 ms */ |
||||
|
||||
/* 100 attempts to wait switch from factory mode (calibration) to working mode */ |
||||
for (nbAttempt=0; ((nbAttempt < 100) && (!bEndCalibration)) ; nbAttempt++) |
||||
{ |
||||
ucReadData = TS_IO_Read(DeviceAddr, FT6206_DEV_MODE_REG); |
||||
ucReadData = (ucReadData & (FT6206_DEV_MODE_MASK << FT6206_DEV_MODE_SHIFT)) >> FT6206_DEV_MODE_SHIFT; |
||||
if(ucReadData == FT6206_DEV_MODE_WORKING) |
||||
{ |
||||
/* Auto Switch to FT6206_DEV_MODE_WORKING : means calibration have ended */ |
||||
bEndCalibration = 1; /* exit for loop */ |
||||
} |
||||
|
||||
TS_IO_Delay(200); /* Wait 200 ms */ |
||||
} |
||||
|
||||
/* Calibration sequence end << */ |
||||
|
||||
return(status); |
||||
} |
||||
#endif /* TS_AUTO_CALIBRATION_SUPPORTED == 1 */ |
||||
|
||||
/**
|
||||
* @brief Basic static configuration of TouchScreen |
||||
* @param DeviceAddr: FT6xx6 Device address for communication on I2C Bus. |
||||
* @retval Status FT6206_STATUS_OK or FT6206_STATUS_NOT_OK. |
||||
*/ |
||||
static uint32_t ft6x06_TS_Configure(uint16_t DeviceAddr) |
||||
{ |
||||
uint32_t status = FT6206_STATUS_OK; |
||||
|
||||
/* Nothing special to be done for FT6xx6 */ |
||||
|
||||
return(status); |
||||
} |
||||
|
||||
/**
|
||||
* @brief Check if the device instance of the selected address is already registered |
||||
* and return its index
|
||||
* @param DeviceAddr: Device address on communication Bus. |
||||
* @retval Index of the device instance if registered, 0xFF if not. |
||||
*/ |
||||
static uint8_t ft6x06_GetInstance(uint16_t DeviceAddr) |
||||
{ |
||||
uint8_t idx = 0; |
||||
|
||||
/* Check all the registered instances */ |
||||
for(idx = 0; idx < FT6x06_MAX_INSTANCE ; idx ++) |
||||
{ |
||||
if(ft6x06[idx] == DeviceAddr) |
||||
{ |
||||
return idx;
|
||||
} |
||||
} |
||||
|
||||
return 0xFF; |
||||
} |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@ -0,0 +1,454 @@
|
||||
/**
|
||||
****************************************************************************** |
||||
* @file ft6x06.h |
||||
* @author MCD Application Team |
||||
* @brief This file contains all the functions prototypes for the |
||||
* ft6x06.c IO expander driver. |
||||
****************************************************************************** |
||||
* @attention |
||||
* |
||||
* <h2><center>© Copyright (c) 2016 STMicroelectronics. |
||||
* All rights reserved.</center></h2> |
||||
* |
||||
* This software component is licensed by ST under BSD 3-Clause license, |
||||
* the "License"; You may not use this file except in compliance with the |
||||
* License. You may obtain a copy of the License at: |
||||
* opensource.org/licenses/BSD-3-Clause |
||||
* |
||||
****************************************************************************** |
||||
*/ |
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/ |
||||
#ifndef __FT6XX6_H |
||||
#define __FT6XX6_H |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
/* Set Multi-touch as non supported */ |
||||
#ifndef TS_MULTI_TOUCH_SUPPORTED |
||||
#define TS_MULTI_TOUCH_SUPPORTED 0 |
||||
#endif |
||||
|
||||
/* Set Auto-calibration as non supported */
|
||||
#ifndef TS_AUTO_CALIBRATION_SUPPORTED |
||||
#define TS_AUTO_CALIBRATION_SUPPORTED 0 |
||||
#endif |
||||
|
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include "../Common/ts.h" |
||||
|
||||
/* Macros --------------------------------------------------------------------*/ |
||||
|
||||
/** @typedef ft6x06_handle_TypeDef
|
||||
* ft6x06 Handle definition. |
||||
*/ |
||||
typedef struct |
||||
{ |
||||
uint8_t i2cInitialized; |
||||
|
||||
/* field holding the current number of simultaneous active touches */ |
||||
uint8_t currActiveTouchNb; |
||||
|
||||
/* field holding the touch index currently managed */ |
||||
uint8_t currActiveTouchIdx; |
||||
|
||||
} ft6x06_handle_TypeDef; |
||||
|
||||
/** @addtogroup BSP
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @addtogroup Component
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @defgroup FT6XX6
|
||||
* @{ |
||||
*/ |
||||
|
||||
/* Exported types ------------------------------------------------------------*/ |
||||
|
||||
/** @defgroup FT6XX6_Exported_Types
|
||||
* @{ |
||||
*/ |
||||
|
||||
/* Exported constants --------------------------------------------------------*/ |
||||
|
||||
/** @defgroup FT6XX6_Exported_Constants
|
||||
* @{ |
||||
*/ |
||||
|
||||
/* Maximum border values of the touchscreen pad */ |
||||
#define FT_6206_MAX_WIDTH ((uint16_t)800) /* Touchscreen pad max width */ |
||||
#define FT_6206_MAX_HEIGHT ((uint16_t)480) /* Touchscreen pad max height */ |
||||
|
||||
/* Touchscreen pad max width and height values for FT6xx6 Touch*/ |
||||
#define FT_6206_MAX_WIDTH_HEIGHT ((uint16_t)240) |
||||
|
||||
/* Possible values of driver functions return status */ |
||||
#define FT6206_STATUS_OK 0 |
||||
#define FT6206_STATUS_NOT_OK 1 |
||||
|
||||
/* Possible values of global variable 'TS_I2C_Initialized' */ |
||||
#define FT6206_I2C_NOT_INITIALIZED 0 |
||||
#define FT6206_I2C_INITIALIZED 1 |
||||
|
||||
/* Max detectable simultaneous touches */ |
||||
#define FT6206_MAX_DETECTABLE_TOUCH 2 |
||||
|
||||
/**
|
||||
* @brief : Definitions for FT6xx6 I2C register addresses on 8 bit |
||||
**/ |
||||
|
||||
/* Current mode register of the FT6xx6 (R/W) */ |
||||
#define FT6206_DEV_MODE_REG 0x00 |
||||
|
||||
/* Possible values of FT6206_DEV_MODE_REG */ |
||||
#define FT6206_DEV_MODE_WORKING 0x00 |
||||
#define FT6206_DEV_MODE_FACTORY 0x04 |
||||
|
||||
#define FT6206_DEV_MODE_MASK 0x7 |
||||
#define FT6206_DEV_MODE_SHIFT 4 |
||||
|
||||
/* Gesture ID register */ |
||||
#define FT6206_GEST_ID_REG 0x01 |
||||
|
||||
/* Possible values of FT6206_GEST_ID_REG */ |
||||
#define FT6206_GEST_ID_NO_GESTURE 0x00 |
||||
#define FT6206_GEST_ID_MOVE_UP 0x10 |
||||
#define FT6206_GEST_ID_MOVE_RIGHT 0x14 |
||||
#define FT6206_GEST_ID_MOVE_DOWN 0x18 |
||||
#define FT6206_GEST_ID_MOVE_LEFT 0x1C |
||||
#define FT6206_GEST_ID_ZOOM_IN 0x48 |
||||
#define FT6206_GEST_ID_ZOOM_OUT 0x49 |
||||
|
||||
/* Touch Data Status register : gives number of active touch points (0..2) */ |
||||
#define FT6206_TD_STAT_REG 0x02 |
||||
|
||||
/* Values related to FT6206_TD_STAT_REG */ |
||||
#define FT6206_TD_STAT_MASK 0x0F |
||||
#define FT6206_TD_STAT_SHIFT 0x00 |
||||
|
||||
/* Values Pn_XH and Pn_YH related */ |
||||
#define FT6206_TOUCH_EVT_FLAG_PRESS_DOWN 0x00 |
||||
#define FT6206_TOUCH_EVT_FLAG_LIFT_UP 0x01 |
||||
#define FT6206_TOUCH_EVT_FLAG_CONTACT 0x02 |
||||
#define FT6206_TOUCH_EVT_FLAG_NO_EVENT 0x03 |
||||
|
||||
#define FT6206_TOUCH_EVT_FLAG_SHIFT 6 |
||||
#define FT6206_TOUCH_EVT_FLAG_MASK (3 << FT6206_TOUCH_EVT_FLAG_SHIFT) |
||||
|
||||
#define FT6206_MSB_MASK 0x0F |
||||
#define FT6206_MSB_SHIFT 0 |
||||
|
||||
/* Values Pn_XL and Pn_YL related */ |
||||
#define FT6206_LSB_MASK 0xFF |
||||
#define FT6206_LSB_SHIFT 0 |
||||
|
||||
#define FT6206_P1_XH_REG 0x03 |
||||
#define FT6206_P1_XL_REG 0x04 |
||||
#define FT6206_P1_YH_REG 0x05 |
||||
#define FT6206_P1_YL_REG 0x06 |
||||
|
||||
/* Touch Pressure register value (R) */ |
||||
#define FT6206_P1_WEIGHT_REG 0x07 |
||||
|
||||
/* Values Pn_WEIGHT related */ |
||||
#define FT6206_TOUCH_WEIGHT_MASK 0xFF |
||||
#define FT6206_TOUCH_WEIGHT_SHIFT 0 |
||||
|
||||
/* Touch area register */ |
||||
#define FT6206_P1_MISC_REG 0x08 |
||||
|
||||
/* Values related to FT6206_Pn_MISC_REG */ |
||||
#define FT6206_TOUCH_AREA_MASK (0x04 << 4) |
||||
#define FT6206_TOUCH_AREA_SHIFT 0x04 |
||||
|
||||
#define FT6206_P2_XH_REG 0x09 |
||||
#define FT6206_P2_XL_REG 0x0A |
||||
#define FT6206_P2_YH_REG 0x0B |
||||
#define FT6206_P2_YL_REG 0x0C |
||||
#define FT6206_P2_WEIGHT_REG 0x0D |
||||
#define FT6206_P2_MISC_REG 0x0E |
||||
|
||||
/* Threshold for touch detection */ |
||||
#define FT6206_TH_GROUP_REG 0x80 |
||||
|
||||
/* Values FT6206_TH_GROUP_REG : threshold related */ |
||||
#define FT6206_THRESHOLD_MASK 0xFF |
||||
#define FT6206_THRESHOLD_SHIFT 0 |
||||
|
||||
/* Filter function coefficients */ |
||||
#define FT6206_TH_DIFF_REG 0x85 |
||||
|
||||
/* Control register */ |
||||
#define FT6206_CTRL_REG 0x86 |
||||
|
||||
/* Values related to FT6206_CTRL_REG */ |
||||
|
||||
/* Will keep the Active mode when there is no touching */ |
||||
#define FT6206_CTRL_KEEP_ACTIVE_MODE 0x00 |
||||
|
||||
/* Switching from Active mode to Monitor mode automatically when there is no touching */ |
||||
#define FT6206_CTRL_KEEP_AUTO_SWITCH_MONITOR_MODE 0x01 |
||||
|
||||
/* The time period of switching from Active mode to Monitor mode when there is no touching */ |
||||
#define FT6206_TIMEENTERMONITOR_REG 0x87 |
||||
|
||||
/* Report rate in Active mode */ |
||||
#define FT6206_PERIODACTIVE_REG 0x88 |
||||
|
||||
/* Report rate in Monitor mode */ |
||||
#define FT6206_PERIODMONITOR_REG 0x89 |
||||
|
||||
/* The value of the minimum allowed angle while Rotating gesture mode */ |
||||
#define FT6206_RADIAN_VALUE_REG 0x91 |
||||
|
||||
/* Maximum offset while Moving Left and Moving Right gesture */ |
||||
#define FT6206_OFFSET_LEFT_RIGHT_REG 0x92 |
||||
|
||||
/* Maximum offset while Moving Up and Moving Down gesture */ |
||||
#define FT6206_OFFSET_UP_DOWN_REG 0x93 |
||||
|
||||
/* Minimum distance while Moving Left and Moving Right gesture */ |
||||
#define FT6206_DISTANCE_LEFT_RIGHT_REG 0x94 |
||||
|
||||
/* Minimum distance while Moving Up and Moving Down gesture */ |
||||
#define FT6206_DISTANCE_UP_DOWN_REG 0x95 |
||||
|
||||
/* Maximum distance while Zoom In and Zoom Out gesture */ |
||||
#define FT6206_DISTANCE_ZOOM_REG 0x96 |
||||
|
||||
/* High 8-bit of LIB Version info */ |
||||
#define FT6206_LIB_VER_H_REG 0xA1 |
||||
|
||||
/* Low 8-bit of LIB Version info */ |
||||
#define FT6206_LIB_VER_L_REG 0xA2 |
||||
|
||||
/* Chip Selecting */ |
||||
#define FT6206_CIPHER_REG 0xA3 |
||||
|
||||
/* Interrupt mode register (used when in interrupt mode) */ |
||||
#define FT6206_GMODE_REG 0xA4 |
||||
|
||||
#define FT6206_G_MODE_INTERRUPT_MASK 0x03 |
||||
#define FT6206_G_MODE_INTERRUPT_SHIFT 0x00 |
||||
|
||||
/* Possible values of FT6206_GMODE_REG */ |
||||
#define FT6206_G_MODE_INTERRUPT_POLLING 0x00 |
||||
#define FT6206_G_MODE_INTERRUPT_TRIGGER 0x01 |
||||
|
||||
/* Current power mode the FT6xx6 system is in (R) */ |
||||
#define FT6206_PWR_MODE_REG 0xA5 |
||||
|
||||
/* FT6xx6 firmware version */ |
||||
#define FT6206_FIRMID_REG 0xA6 |
||||
|
||||
/* FT6xx6 Chip identification register */ |
||||
#define FT6206_CHIP_ID_REG 0xA8 |
||||
|
||||
/* Possible values of touchscreen controller ID */ |
||||
#define FT6206_ID_VALUE 0x11 |
||||
#define FT6x36_ID_VALUE 0xCD |
||||
#define FT6X36_ID2_VALUE 0xD8 |
||||
|
||||
/* Release code version */ |
||||
#define FT6206_RELEASE_CODE_ID_REG 0xAF |
||||
|
||||
/* Current operating mode the FT6xx6 system is in (R) */ |
||||
#define FT6206_STATE_REG 0xBC |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/* Exported macro ------------------------------------------------------------*/ |
||||
|
||||
/** @defgroup ft6xx6_Exported_Macros
|
||||
* @{ |
||||
*/ |
||||
|
||||
/* Exported functions --------------------------------------------------------*/ |
||||
|
||||
/** @defgroup ft6xx6_Exported_Functions
|
||||
* @{ |
||||
*/ |
||||
|
||||
/**
|
||||
* @brief ft6xx6 Control functions |
||||
*/ |
||||
|
||||
|
||||
/**
|
||||
* @brief Initialize the ft6xx6 communication bus |
||||
* from MCU to FT6xx6 : ie I2C channel initialization (if required). |
||||
* @param DeviceAddr: Device address on communication Bus (I2C slave address of FT6xx6). |
||||
* @retval None |
||||
*/ |
||||
void ft6x06_Init(uint16_t DeviceAddr); |
||||
|
||||
/**
|
||||
* @brief Software Reset the ft6xx6. |
||||
* @param DeviceAddr: Device address on communication Bus (I2C slave address of FT6xx6). |
||||
* @retval None |
||||
*/ |
||||
void ft6x06_Reset(uint16_t DeviceAddr); |
||||
|
||||
/**
|
||||
* @brief Read the ft6xx6 device ID, pre intitalize I2C in case of need to be |
||||
* able to read the FT6xx6 device ID, and verify this is a FT6xx6. |
||||
* @param DeviceAddr: I2C FT6xx6 Slave address. |
||||
* @retval The Device ID (two bytes). |
||||
*/ |
||||
uint16_t ft6x06_ReadID(uint16_t DeviceAddr); |
||||
|
||||
/**
|
||||
* @brief Configures the touch Screen IC device to start detecting touches |
||||
* @param DeviceAddr: Device address on communication Bus (I2C slave address). |
||||
* @retval None. |
||||
*/ |
||||
void ft6x06_TS_Start(uint16_t DeviceAddr); |
||||
|
||||
/**
|
||||
* @brief Return if there is touches detected or not. |
||||
* Try to detect new touches and forget the old ones (reset internal global |
||||
* variables). |
||||
* @param DeviceAddr: Device address on communication Bus. |
||||
* @retval : Number of active touches detected (can be 0, 1 or 2). |
||||
*/ |
||||
uint8_t ft6x06_TS_DetectTouch(uint16_t DeviceAddr); |
||||
|
||||
/**
|
||||
* @brief Get the touch screen X and Y positions values |
||||
* Manage multi touch thanks to touch Index global |
||||
* variable 'ft6x06_handle.currActiveTouchIdx'. |
||||
* @param DeviceAddr: Device address on communication Bus. |
||||
* @param X: Pointer to X position value |
||||
* @param Y: Pointer to Y position value |
||||
* @retval None. |
||||
*/ |
||||
void ft6x06_TS_GetXY(uint16_t DeviceAddr, uint16_t *X, uint16_t *Y); |
||||
|
||||
/**
|
||||
* @brief Configure the FT6xx6 device to generate IT on given INT pin |
||||
* connected to MCU as EXTI. |
||||
* @param DeviceAddr: Device address on communication Bus (Slave I2C address of FT6xx6). |
||||
* @retval None |
||||
*/ |
||||
void ft6x06_TS_EnableIT(uint16_t DeviceAddr); |
||||
|
||||
/**
|
||||
* @brief Configure the FT6xx6 device to stop generating IT on the given INT pin |
||||
* connected to MCU as EXTI. |
||||
* @param DeviceAddr: Device address on communication Bus (Slave I2C address of FT6xx6). |
||||
* @retval None |
||||
*/ |
||||
void ft6x06_TS_DisableIT(uint16_t DeviceAddr); |
||||
|
||||
/**
|
||||
* @brief Get IT status from FT6xx6 interrupt status registers |
||||
* Should be called Following an EXTI coming to the MCU to know the detailed |
||||
* reason of the interrupt. |
||||
* @param DeviceAddr: Device address on communication Bus (I2C slave address of FT6xx6). |
||||
* @retval TS interrupts status |
||||
*/ |
||||
uint8_t ft6x06_TS_ITStatus (uint16_t DeviceAddr); |
||||
|
||||
/**
|
||||
* @brief Clear IT status in FT6xx6 interrupt status clear registers |
||||
* Should be called Following an EXTI coming to the MCU. |
||||
* @param DeviceAddr: Device address on communication Bus (I2C slave address of FT6xx6). |
||||
* @retval TS interrupts status |
||||
*/ |
||||
void ft6x06_TS_ClearIT (uint16_t DeviceAddr); |
||||
|
||||
/**** NEW FEATURES enabled when Multi-touch support is enabled ****/ |
||||
|
||||
#if (TS_MULTI_TOUCH_SUPPORTED == 1) |
||||
|
||||
/**
|
||||
* @brief Get the last touch gesture identification (zoom, move up/down...). |
||||
* @param DeviceAddr: Device address on communication Bus (I2C slave address of FT6xx6). |
||||
* @param pGestureId : Pointer to get last touch gesture Identification. |
||||
* @retval None. |
||||
*/ |
||||
void ft6x06_TS_GetGestureID(uint16_t DeviceAddr, uint32_t * pGestureId); |
||||
|
||||
/**
|
||||
* @brief Get the touch detailed informations on touch number 'touchIdx' (0..1) |
||||
* This touch detailed information contains : |
||||
* - weight that was applied to this touch |
||||
* - sub-area of the touch in the touch panel |
||||
* - event of linked to the touch (press down, lift up, ...) |
||||
* @param DeviceAddr: Device address on communication Bus (I2C slave address of FT6xx6). |
||||
* @param touchIdx : Passed index of the touch (0..1) on which we want to get the |
||||
* detailed information. |
||||
* @param pWeight : Pointer to to get the weight information of 'touchIdx'. |
||||
* @param pArea : Pointer to to get the sub-area information of 'touchIdx'. |
||||
* @param pEvent : Pointer to to get the event information of 'touchIdx'. |
||||
|
||||
* @retval None. |
||||
*/ |
||||
void ft6x06_TS_GetTouchInfo(uint16_t DeviceAddr, |
||||
uint32_t touchIdx, |
||||
uint32_t * pWeight, |
||||
uint32_t * pArea, |
||||
uint32_t * pEvent); |
||||
|
||||
#endif /* TS_MULTI_TOUCH_SUPPORTED == 1 */ |
||||
|
||||
/* Imported TS IO functions --------------------------------------------------------*/ |
||||
|
||||
/** @defgroup ft6xx6_Imported_Functions
|
||||
* @{ |
||||
*/ |
||||
|
||||
/* TouchScreen (TS) external IO functions */ |
||||
extern void TS_IO_Init(void); |
||||
extern void TS_IO_Write(uint8_t Addr, uint8_t Reg, uint8_t Value); |
||||
extern uint8_t TS_IO_Read(uint8_t Addr, uint8_t Reg); |
||||
extern uint16_t TS_IO_ReadMultiple(uint8_t Addr, uint8_t Reg, uint8_t *Buffer, uint16_t Length); |
||||
extern void TS_IO_Delay(uint32_t Delay); |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/* Imported global variables --------------------------------------------------------*/ |
||||
|
||||
/** @defgroup ft6xx6_Imported_Globals
|
||||
* @{ |
||||
*/ |
||||
|
||||
|
||||
/* Touch screen driver structure */ |
||||
extern TS_DrvTypeDef ft6x06_ts_drv; |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
#endif /* __FT6XX6_H */ |
||||
|
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@ -0,0 +1,157 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> |
||||
<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns="http://www.w3.org/TR/REC-html40"><head> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> |
||||
|
||||
|
||||
<link rel="File-List" href="Library_files/filelist.xml"> |
||||
|
||||
|
||||
<link rel="Edit-Time-Data" href="Library_files/editdata.mso"><!--[if !mso]> <style> v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VML);} .shape {behavior:url(#default#VML);} </style> <![endif]--><title>Release Notes for STM32 BSP Components Drivers</title><!--[if gte mso 9]><xml> <o:DocumentProperties> <o:Author>STMicroelectronics</o:Author> <o:LastAuthor>STMicroelectronics</o:LastAuthor> <o:Revision>37</o:Revision> <o:TotalTime>136</o:TotalTime> <o:Created>2009-02-27T19:26:00Z</o:Created> <o:LastSaved>2009-03-01T17:56:00Z</o:LastSaved> <o:Pages>1</o:Pages> <o:Words>522</o:Words> <o:Characters>2977</o:Characters> <o:Company>STMicroelectronics</o:Company> <o:Lines>24</o:Lines> <o:Paragraphs>6</o:Paragraphs> <o:CharactersWithSpaces>3493</o:CharactersWithSpaces> <o:Version>11.6568</o:Version> </o:DocumentProperties> </xml><![endif]--><!--[if gte mso 9]><xml> <w:WordDocument> <w:Zoom>110</w:Zoom> <w:ValidateAgainstSchemas/> <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid> <w:IgnoreMixedContent>false</w:IgnoreMixedContent> <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText> <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel> </w:WordDocument> </xml><![endif]--><!--[if gte mso 9]><xml> <w:LatentStyles DefLockedState="false" LatentStyleCount="156"> </w:LatentStyles> </xml><![endif]--> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<style> |
||||
<!-- |
||||
/* Style Definitions */ |
||||
p.MsoNormal, li.MsoNormal, div.MsoNormal |
||||
{mso-style-parent:""; |
||||
margin:0in; |
||||
margin-bottom:.0001pt; |
||||
mso-pagination:widow-orphan; |
||||
font-size:12.0pt; |
||||
font-family:"Times New Roman"; |
||||
mso-fareast-font-family:"Times New Roman";} |
||||
h2 |
||||
{mso-style-next:Normal; |
||||
margin-top:12.0pt; |
||||
margin-right:0in; |
||||
margin-bottom:3.0pt; |
||||
margin-left:0in; |
||||
mso-pagination:widow-orphan; |
||||
page-break-after:avoid; |
||||
mso-outline-level:2; |
||||
font-size:14.0pt; |
||||
font-family:Arial; |
||||
font-weight:bold; |
||||
font-style:italic;} |
||||
a:link, span.MsoHyperlink |
||||
{color:blue; |
||||
text-decoration:underline; |
||||
text-underline:single;} |
||||
a:visited, span.MsoHyperlinkFollowed |
||||
{color:blue; |
||||
text-decoration:underline; |
||||
text-underline:single;} |
||||
p |
||||
{mso-margin-top-alt:auto; |
||||
margin-right:0in; |
||||
mso-margin-bottom-alt:auto; |
||||
margin-left:0in; |
||||
mso-pagination:widow-orphan; |
||||
font-size:12.0pt; |
||||
font-family:"Times New Roman"; |
||||
mso-fareast-font-family:"Times New Roman";} |
||||
@page Section1 |
||||
{size:8.5in 11.0in; |
||||
margin:1.0in 1.25in 1.0in 1.25in; |
||||
mso-header-margin:.5in; |
||||
mso-footer-margin:.5in; |
||||
mso-paper-source:0;} |
||||
div.Section1 |
||||
{page:Section1;} |
||||
--> |
||||
</style><!--[if gte mso 10]> <style> /* Style Definitions */ table.MsoNormalTable {mso-style-name:"Table Normal"; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-parent:""; mso-padding-alt:0in 5.4pt 0in 5.4pt; mso-para-margin:0in; mso-para-margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:10.0pt; font-family:"Times New Roman"; mso-ansi-language:#0400; mso-fareast-language:#0400; mso-bidi-language:#0400;} </style> <![endif]--><!--[if gte mso 9]><xml> <o:shapedefaults v:ext="edit" spidmax="5122"/> </xml><![endif]--><!--[if gte mso 9]><xml> <o:shapelayout v:ext="edit"> <o:idmap v:ext="edit" data="1"/> </o:shapelayout></xml><![endif]--> |
||||
<meta content="MCD Application Team" name="author"></head> |
||||
<body link="blue" vlink="blue"> |
||||
<div class="Section1"> |
||||
<p class="MsoNormal"><span style="font-family: Arial;"><o:p><br> |
||||
</o:p></span></p> |
||||
<div align="center"> |
||||
<table class="MsoNormalTable" style="width: 675pt;" border="0" cellpadding="0" cellspacing="0" width="900"> |
||||
<tbody> |
||||
<tr> |
||||
<td style="padding: 0cm;" valign="top"> |
||||
<table class="MsoNormalTable" style="width: 675pt;" border="0" cellpadding="0" cellspacing="0" width="900"> |
||||
<tbody> |
||||
<tr> |
||||
<td style="vertical-align: top;"> |
||||
<p class="MsoNormal"><span style="font-size: 8pt; font-family: Arial; color: blue;"><a href="../../../../Release_Notes.html">Back to Release page</a><o:p></o:p></span></p> |
||||
</td> |
||||
</tr> |
||||
<tr style=""> |
||||
<td style="padding: 1.5pt;"> |
||||
<h1 style="margin-bottom: 18pt; text-align: center;" align="center"><span style="font-size: 20pt; font-family: Verdana; color: rgb(51, 102, 255);">Release |
||||
Notes for N25Q128A Component Driver</span><span style="font-size: 20pt; font-family: Verdana;"><o:p></o:p></span></h1> |
||||
<p class="MsoNormal" style="text-align: center;" align="center"><span style="font-size: 10pt; font-family: Arial; color: black;">Copyright |
||||
2015 STMicroelectronics</span><span style="color: black;"><u1:p></u1:p><o:p></o:p></span></p> |
||||
<p class="MsoNormal" style="text-align: center;" align="center"><span style="font-size: 10pt; font-family: Arial; color: black;"><img alt="" id="_x0000_i1025" src="../../../../_htmresc/st_logo.png" style="border: 0px solid ; width: 86px; height: 65px;"></span><span style="font-size: 10pt;"><o:p></o:p></span></p> |
||||
</td> |
||||
</tr> |
||||
</tbody> |
||||
</table> |
||||
<p class="MsoNormal"><span style="font-family: Arial; display: none;"><o:p> </o:p></span></p> |
||||
<table style="width: 675pt;" class="MsoNormalTable" border="0" cellpadding="0" width="900"> |
||||
<tbody> |
||||
<tr style=""> |
||||
<td style="padding: 0cm;" valign="top"><span style="font-size: 10pt; font-family: Verdana;"></span><h2 style="background: rgb(51, 102, 255) none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial;"><a name="History"></a><span style="font-size: 12pt; color: white;">Update History</span></h2><br><h3 style="background: rgb(51, 102, 255) none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial; margin-right: 500pt; width: 180px;"><span style="font-size: 10pt; font-family: Arial; color: white;">V1.0.0 |
||||
/ 29-May-2015 <o:p></o:p></span></h3> |
||||
<p class="MsoNormal" style="margin: 4.5pt 0cm 4.5pt 18pt;"><b style=""><u><span style="font-size: 10pt; font-family: Verdana; color: black;">Main |
||||
Changes<o:p></o:p></span></u></b></p> |
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
<span style="font-size: 10pt; font-family: Verdana;"></span><span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
<ul style="list-style-type: square;"><li><span style="font-size: 10pt; font-family: Verdana;"></span><span style="font-family: Verdana;"></span><span style="font-family: Verdana; font-size: 10pt;">First official |
||||
release</span><span style="font-size: 10pt; font-family: Verdana;"> of </span><span style="font-size: 10pt; font-family: Verdana;">N25Q128A QuadSPI Flash Component</span><span style="font-size: 10pt; font-family: Verdana;"> driver</span></li></ul><span style="font-size: 10pt; font-family: Verdana;"></span><span style="font-size: 10pt; font-family: Verdana;"></span><span style="font-size: 10pt; font-family: Verdana;"><span style="font-style: italic; font-weight: bold;"></span></span><span style="font-size: 10pt; font-family: Verdana;"><span style="font-style: italic; font-weight: bold;"></span></span><span style="font-size: 10pt; font-family: Verdana;"><span style="font-style: italic; font-weight: bold;"></span></span><span style="font-size: 10pt; font-family: Verdana;"><span style="font-style: italic; font-weight: bold;"></span></span><span style="font-size: 10pt; font-family: Verdana;"><span style="font-style: italic; font-weight: bold;"></span></span><span style="font-size: 10pt; font-family: Verdana;"></span><h2 style="background: rgb(51, 102, 255) none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial;"><a name="License"></a><span style="font-size: 12pt; color: white;">License<o:p></o:p></span><br></h2><div style="text-align: justify;"><font size="-1"><span style="font-family: "Verdana","sans-serif";"> |
||||
Redistribution and use in source and binary forms, with or without |
||||
modification, are permitted provided that the following conditions are |
||||
met:</span><br> |
||||
</font> |
||||
<ol><li><font size="-1"><span style="font-family: "Verdana","sans-serif";">Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.</span><span style="font-family: "Verdana","sans-serif";"></span></font></li><li><font size="-1"><span style="font-family: "Verdana","sans-serif";">Redistributions |
||||
in binary form must reproduce the above copyright notice, this list of |
||||
conditions and the following disclaimer in </span><span style="font-family: "Verdana","sans-serif";">the documentation and/or other materials provided with the distribution.</span><span style="font-family: "Verdana","sans-serif";"></span></font></li><li><font size="-1"><span style="font-family: "Verdana","sans-serif";">Neither the name of STMicroelectronics nor the names of its contributors may be used to endorse or promote products derived </span><br> |
||||
</font> |
||||
</li></ol> |
||||
<font size="-1"><span style="font-family: "Verdana","sans-serif";"> from this software without specific prior written permission.</span><br> |
||||
<span style="font-family: "Verdana","sans-serif";"></span><br> |
||||
<span style="font-family: "Verdana","sans-serif";">THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED</span><span style="font-family: "Verdana","sans-serif";"> WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A </span><span style="font-family: "Verdana","sans-serif";">PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY </span><span style="font-family: "Verdana","sans-serif";">DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, </span><span style="font-family: "Verdana","sans-serif";">PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER</span><span style="font-family: "Verdana","sans-serif";"> CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR </span><span style="font-family: "Verdana","sans-serif";">OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</span></font> |
||||
|
||||
</div> |
||||
<p class="MsoNormal"><span style="font-size: 10pt; font-family: "Verdana","sans-serif"; color: black;"><o:p></o:p></span></p> |
||||
<b><span style="font-size: 10pt; font-family: Verdana; color: black;"></span></b> |
||||
|
||||
<div class="MsoNormal" style="text-align: center;" align="center"><span style="color: black;"> |
||||
<hr align="center" size="2" width="100%"></span></div> |
||||
<div style="margin-left: 120px;"><span style="font-size: 10pt; font-family: Verdana; color: black;">For |
||||
complete documentation on </span><span style="font-size: 10pt; font-family: Verdana;">STM32<span style="color: black;"> Microcontrollers |
||||
visit </span><u><span style="color: blue;"><a href="http://www.st.com/internet/mcu/class/1734.jsp" target="_blank">www.st.com/STM32</a></span></u></span></div> |
||||
</td> |
||||
</tr> |
||||
<tr><td style="padding: 0cm;" valign="top"></td></tr></tbody> |
||||
</table> |
||||
<p class="MsoNormal"><span style="font-size: 10pt;"><o:p></o:p></span></p> |
||||
</td> |
||||
</tr> |
||||
</tbody> |
||||
</table> |
||||
</div> |
||||
<p class="MsoNormal"><o:p> </o:p></p> |
||||
</div> |
||||
|
||||
</body></html> |
@ -0,0 +1,219 @@
|
||||
/**
|
||||
****************************************************************************** |
||||
* @file n25q128a.h |
||||
* @author MCD Application Team |
||||
* @version V1.0.0 |
||||
* @date 29-May-2015 |
||||
* @brief This file contains all the description of the N25Q128A QSPI memory. |
||||
****************************************************************************** |
||||
* @attention |
||||
* |
||||
* <h2><center>© COPYRIGHT(c) 2015 STMicroelectronics</center></h2> |
||||
* |
||||
* 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 STMicroelectronics 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. |
||||
* |
||||
****************************************************************************** |
||||
*/
|
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/ |
||||
#ifndef __N25Q128A_H |
||||
#define __N25Q128A_H |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
/* Includes ------------------------------------------------------------------*/ |
||||
|
||||
/** @addtogroup BSP
|
||||
* @{ |
||||
*/
|
||||
|
||||
/** @addtogroup Components
|
||||
* @{ |
||||
*/
|
||||
|
||||
/** @addtogroup n25q128a
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @defgroup N25Q128A_Exported_Types
|
||||
* @{ |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
/** @defgroup N25Q128A_Exported_Constants
|
||||
* @{ |
||||
*/ |
||||
|
||||
/**
|
||||
* @brief N25Q128A Configuration
|
||||
*/
|
||||
#define N25Q128A_FLASH_SIZE 0x1000000 /* 128 MBits => 16MBytes */ |
||||
#define N25Q128A_SECTOR_SIZE 0x10000 /* 256 sectors of 64KBytes */ |
||||
#define N25Q128A_SUBSECTOR_SIZE 0x1000 /* 4096 subsectors of 4kBytes */ |
||||
#define N25Q128A_PAGE_SIZE 0x100 /* 65536 pages of 256 bytes */ |
||||
|
||||
#define N25Q128A_DUMMY_CYCLES_READ 8 |
||||
#define N25Q128A_DUMMY_CYCLES_READ_QUAD 10 |
||||
|
||||
#define N25Q128A_BULK_ERASE_MAX_TIME 250000 |
||||
#define N25Q128A_SECTOR_ERASE_MAX_TIME 3000 |
||||
#define N25Q128A_SUBSECTOR_ERASE_MAX_TIME 800 |
||||
|
||||
/**
|
||||
* @brief N25Q128A Commands
|
||||
*/
|
||||
/* Reset Operations */ |
||||
#define RESET_ENABLE_CMD 0x66 |
||||
#define RESET_MEMORY_CMD 0x99 |
||||
|
||||
/* Identification Operations */ |
||||
#define READ_ID_CMD 0x9E |
||||
#define READ_ID_CMD2 0x9F |
||||
#define MULTIPLE_IO_READ_ID_CMD 0xAF |
||||
#define READ_SERIAL_FLASH_DISCO_PARAM_CMD 0x5A |
||||
|
||||
/* Read Operations */ |
||||
#define READ_CMD 0x03 |
||||
#define FAST_READ_CMD 0x0B |
||||
#define DUAL_OUT_FAST_READ_CMD 0x3B |
||||
#define DUAL_INOUT_FAST_READ_CMD 0xBB |
||||
#define QUAD_OUT_FAST_READ_CMD 0x6B |
||||
#define QUAD_INOUT_FAST_READ_CMD 0xEB |
||||
|
||||
/* Write Operations */ |
||||
#define WRITE_ENABLE_CMD 0x06 |
||||
#define WRITE_DISABLE_CMD 0x04 |
||||
|
||||
/* Register Operations */ |
||||
#define READ_STATUS_REG_CMD 0x05 |
||||
#define WRITE_STATUS_REG_CMD 0x01 |
||||
|
||||
#define READ_LOCK_REG_CMD 0xE8 |
||||
#define WRITE_LOCK_REG_CMD 0xE5 |
||||
|
||||
#define READ_FLAG_STATUS_REG_CMD 0x70 |
||||
#define CLEAR_FLAG_STATUS_REG_CMD 0x50 |
||||
|
||||
#define READ_NONVOL_CFG_REG_CMD 0xB5 |
||||
#define WRITE_NONVOL_CFG_REG_CMD 0xB1 |
||||
|
||||
#define READ_VOL_CFG_REG_CMD 0x85 |
||||
#define WRITE_VOL_CFG_REG_CMD 0x81 |
||||
|
||||
#define READ_ENHANCED_VOL_CFG_REG_CMD 0x65 |
||||
#define WRITE_ENHANCED_VOL_CFG_REG_CMD 0x61 |
||||
|
||||
/* Program Operations */ |
||||
#define PAGE_PROG_CMD 0x02 |
||||
#define DUAL_IN_FAST_PROG_CMD 0xA2 |
||||
#define EXT_DUAL_IN_FAST_PROG_CMD 0xD2 |
||||
#define QUAD_IN_FAST_PROG_CMD 0x32 |
||||
#define EXT_QUAD_IN_FAST_PROG_CMD 0x12 |
||||
|
||||
/* Erase Operations */ |
||||
#define SUBSECTOR_ERASE_CMD 0x20 |
||||
#define SECTOR_ERASE_CMD 0xD8 |
||||
#define BULK_ERASE_CMD 0xC7 |
||||
|
||||
#define PROG_ERASE_RESUME_CMD 0x7A |
||||
#define PROG_ERASE_SUSPEND_CMD 0x75 |
||||
|
||||
/* One-Time Programmable Operations */ |
||||
#define READ_OTP_ARRAY_CMD 0x4B |
||||
#define PROG_OTP_ARRAY_CMD 0x42 |
||||
|
||||
/**
|
||||
* @brief N25Q128A Registers
|
||||
*/
|
||||
/* Status Register */ |
||||
#define N25Q128A_SR_WIP ((uint8_t)0x01) /*!< Write in progress */ |
||||
#define N25Q128A_SR_WREN ((uint8_t)0x02) /*!< Write enable latch */ |
||||
#define N25Q128A_SR_BLOCKPR ((uint8_t)0x5C) /*!< Block protected against program and erase operations */ |
||||
#define N25Q128A_SR_PRBOTTOM ((uint8_t)0x20) /*!< Protected memory area defined by BLOCKPR starts from top or bottom */ |
||||
#define N25Q128A_SR_SRWREN ((uint8_t)0x80) /*!< Status register write enable/disable */ |
||||
|
||||
/* Nonvolatile Configuration Register */ |
||||
#define N25Q128A_NVCR_LOCK ((uint16_t)0x0001) /*!< Lock nonvolatile configuration register */ |
||||
#define N25Q128A_NVCR_DUAL ((uint16_t)0x0004) /*!< Dual I/O protocol */ |
||||
#define N25Q128A_NVCR_QUAB ((uint16_t)0x0008) /*!< Quad I/O protocol */ |
||||
#define N25Q128A_NVCR_RH ((uint16_t)0x0010) /*!< Reset/hold */ |
||||
#define N25Q128A_NVCR_ODS ((uint16_t)0x01C0) /*!< Output driver strength */ |
||||
#define N25Q128A_NVCR_XIP ((uint16_t)0x0E00) /*!< XIP mode at power-on reset */ |
||||
#define N25Q128A_NVCR_NB_DUMMY ((uint16_t)0xF000) /*!< Number of dummy clock cycles */ |
||||
|
||||
/* Volatile Configuration Register */ |
||||
#define N25Q128A_VCR_WRAP ((uint8_t)0x03) /*!< Wrap */ |
||||
#define N25Q128A_VCR_XIP ((uint8_t)0x08) /*!< XIP */ |
||||
#define N25Q128A_VCR_NB_DUMMY ((uint8_t)0xF0) /*!< Number of dummy clock cycles */ |
||||
|
||||
/* Enhanced Volatile Configuration Register */ |
||||
#define N25Q128A_EVCR_ODS ((uint8_t)0x07) /*!< Output driver strength */ |
||||
#define N25Q128A_EVCR_VPPA ((uint8_t)0x08) /*!< Vpp accelerator */ |
||||
#define N25Q128A_EVCR_RH ((uint8_t)0x10) /*!< Reset/hold */ |
||||
#define N25Q128A_EVCR_DUAL ((uint8_t)0x40) /*!< Dual I/O protocol */ |
||||
#define N25Q128A_EVCR_QUAD ((uint8_t)0x80) /*!< Quad I/O protocol */ |
||||
|
||||
/* Flag Status Register */ |
||||
#define N25Q128A_FSR_PRERR ((uint8_t)0x02) /*!< Protection error */ |
||||
#define N25Q128A_FSR_PGSUS ((uint8_t)0x04) /*!< Program operation suspended */ |
||||
#define N25Q128A_FSR_VPPERR ((uint8_t)0x08) /*!< Invalid voltage during program or erase */ |
||||
#define N25Q128A_FSR_PGERR ((uint8_t)0x10) /*!< Program error */ |
||||
#define N25Q128A_FSR_ERERR ((uint8_t)0x20) /*!< Erase error */ |
||||
#define N25Q128A_FSR_ERSUS ((uint8_t)0x40) /*!< Erase operation suspended */ |
||||
#define N25Q128A_FSR_READY ((uint8_t)0x80) /*!< Ready or command in progress */ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup N25Q128A_Exported_Functions
|
||||
* @{ |
||||
*/
|
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
#endif /* __N25Q128A_H */ |
||||
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@ -0,0 +1,55 @@
|
||||
<!DOCTYPE html> |
||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> |
||||
<head> |
||||
<meta charset="utf-8" /> |
||||
<meta name="generator" content="pandoc" /> |
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" /> |
||||
<title>Release Notes for NT35510 Component Drivers</title> |
||||
<style> |
||||
code{white-space: pre-wrap;} |
||||
span.smallcaps{font-variant: small-caps;} |
||||
span.underline{text-decoration: underline;} |
||||
div.column{display: inline-block; vertical-align: top; width: 50%;} |
||||
</style> |
||||
<link rel="stylesheet" href="_htmresc/mini-st.css" /> |
||||
<!--[if lt IE 9]> |
||||
<script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script> |
||||
<![endif]--> |
||||
</head> |
||||
<body> |
||||
<div class="row"> |
||||
<div class="col-sm-12 col-lg-4"> |
||||
<div class="card fluid"> |
||||
<div class="sectione dark"> |
||||
<center> |
||||
<h1 id="release-notes-for-nt35510-component-drivers"><small>Release Notes for</small> <mark>NT35510 Component Drivers</mark></h1> |
||||
<p>Copyright © 2020 STMicroelectronics<br /> |
||||
</p> |
||||
<a href="https://www.st.com" class="logo"><img src="_htmresc/st_logo.png" alt="ST logo" /></a> |
||||
</center> |
||||
</div> |
||||
</div> |
||||
<h1 id="license">License</h1> |
||||
<p>Licensed by ST under BSD 3-Clause license (the "License"). You may not use this package except in compliance with the License. You may obtain a copy of the License at:</p> |
||||
<p><a href="https://opensource.org/licenses/BSD-3-Clause">https://opensource.org/licenses/BSD-3-Clause</a></p> |
||||
<h1 id="purpose">Purpose</h1> |
||||
<p>This directory contains the NT35510 LCD DSI component drivers.</p> |
||||
</div> |
||||
<div class="col-sm-12 col-lg-8"> |
||||
<h1 id="update-history">Update History</h1> |
||||
<div class="collapse"> |
||||
<input type="checkbox" id="collapse-section1_0_0" checked aria-hidden="true"> <label for="collapse-section1_0_0" aria-hidden="true">V1.0.0 / 11-December-2020</label> |
||||
<div> |
||||
<h2 id="main-changes">Main Changes</h2> |
||||
<ul> |
||||
<li>First official release</li> |
||||
</ul> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
<footer class="sticky"> |
||||
For complete documentation on <mark>STM32 Microcontrollers</mark> , visit: <a href="http://www.st.com/STM32">http://www.st.com/STM32</a> |
||||
</footer> |
||||
</body> |
||||
</html> |
File diff suppressed because it is too large
Load Diff
After Width: | Height: | Size: 18 KiB |
@ -0,0 +1,252 @@
|
||||
/**
|
||||
****************************************************************************** |
||||
* @file nt35510.c |
||||
* @author MCD Application Team |
||||
* @brief This file provides the LCD Driver for Frida Techshine 3K138 (WVGA) |
||||
* DSI LCD Display NT35510. |
||||
****************************************************************************** |
||||
* @attention |
||||
* |
||||
* <h2><center>© Copyright (c) 2020 STMicroelectronics. |
||||
* All rights reserved.</center></h2> |
||||
* |
||||
* This software component is licensed by ST under BSD 3-Clause license, |
||||
* the "License"; You may not use this file except in compliance with the |
||||
* License. You may obtain a copy of the License at: |
||||
* opensource.org/licenses/BSD-3-Clause |
||||
* |
||||
****************************************************************************** |
||||
*/ |
||||
|
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include "nt35510.h" |
||||
#include <stdio.h> |
||||
#include <stdarg.h> |
||||
|
||||
|
||||
/** @addtogroup BSP
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @addtogroup Components
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @defgroup NT35510 NT35510
|
||||
* @brief This file provides a set of functions needed to drive the |
||||
* NT35510 IC display driver. |
||||
* @{ |
||||
*/ |
||||
|
||||
/* Private types -------------------------------------------------------------*/ |
||||
/* Private variables ---------------------------------------------------------*/ |
||||
/* Private constants ---------------------------------------------------------*/ |
||||
/** @defgroup NT35510_Private_Constants NT35510 Private Constants
|
||||
* @{ |
||||
*/ |
||||
|
||||
/*
|
||||
* @brief Constant tables of register settings used to transmit DSI |
||||
* command packets as power up initialization sequence of the Frida 3K138 |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/* Private macros ------------------------------------------------------------*/ |
||||
/* Private functions ---------------------------------------------------------*/ |
||||
/** @defgroup NT35510_Exported_Variables
|
||||
* @{ |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/* Exported functions ---------------------------------------------------------*/ |
||||
/** @defgroup NT35510_Exported_Functions OTM8009A Exported Functions
|
||||
* @{ |
||||
*/ |
||||
|
||||
/**
|
||||
* @brief Initializes the LCD Frida display part by communication in DSI mode in Video Mode |
||||
* with IC Display Driver NT35510 (see IC Driver specification for more information). |
||||
* @param hdsi_eval : pointer on DSI configuration structure |
||||
* @param hdsivideo_handle : pointer on DSI video mode configuration structure |
||||
* @retval Status |
||||
*/ |
||||
uint8_t NT35510_Init(uint32_t ColorCoding, uint32_t orientation) |
||||
{ |
||||
NT35510_IO_Delay(120); |
||||
|
||||
/* ************************************************************************** */ |
||||
/* Proprietary Initialization */ |
||||
/* ************************************************************************** */ |
||||
const uint8_t nt35510_reg[] = {0x55, 0xAA, 0x52, 0x08, 0x01, 0xF0}; |
||||
const uint8_t nt35510_reg1[] = {0x03, 0x03, 0x03, 0xB0}; |
||||
const uint8_t nt35510_reg2[] = {0x46, 0x46, 0x46, 0xB6}; |
||||
const uint8_t nt35510_reg3[] = {0x03, 0x03, 0x03, 0xB1}; |
||||
const uint8_t nt35510_reg4[] = {0x36, 0x36, 0x36, 0xB7}; |
||||
const uint8_t nt35510_reg5[] = {0x00, 0x00, 0x02, 0xB2}; |
||||
const uint8_t nt35510_reg6[] = {0x26, 0x26, 0x26, 0xB8}; |
||||
const uint8_t nt35510_reg7[] = {0xBF, 0x01}; |
||||
const uint8_t nt35510_reg8[] = {0x09, 0x09, 0x09, 0xB3}; |
||||
const uint8_t nt35510_reg9[] = {0x36, 0x36, 0x36, 0xB9}; |
||||
const uint8_t nt35510_reg10[] = {0x08, 0x08, 0x08, 0xB5}; |
||||
const uint8_t nt35510_reg12[] = {0x26, 0x26, 0x26, 0xBA}; |
||||
const uint8_t nt35510_reg13[] = {0x00, 0x80, 0x00, 0xBC}; |
||||
const uint8_t nt35510_reg14[] = {0x00, 0x80, 0x00, 0xBD}; |
||||
const uint8_t nt35510_reg15[] = {0x00, 0x50, 0xBE}; |
||||
const uint8_t nt35510_reg16[] = {0x55, 0xAA, 0x52, 0x08, 0x00, 0xF0}; |
||||
const uint8_t nt35510_reg17[] = {0xFC, 0x00, 0xB1}; |
||||
const uint8_t nt35510_reg18[] = {0xB6, 0x03}; |
||||
const uint8_t nt35510_reg19[] = {0xB5, 0x51}; |
||||
const uint8_t nt35510_reg20[] = {0x00, 0x00, 0xB7}; |
||||
const uint8_t nt35510_reg21[] = {0x01, 0x02, 0x02, 0x02, 0xB8}; |
||||
const uint8_t nt35510_reg22[] = {0x00, 0x00, 0x00, 0xBC}; |
||||
const uint8_t nt35510_reg23[] = {0x03, 0x00, 0x00, 0xCC}; |
||||
const uint8_t nt35510_reg24[] = {0xBA, 0x01}; |
||||
const uint8_t nt35510_madctl_portrait[] = {NT35510_CMD_MADCTL ,0x00}; |
||||
const uint8_t nt35510_caset_portrait[] = {0x00, 0x00, 0x01, 0xDF ,NT35510_CMD_CASET}; |
||||
const uint8_t nt35510_raset_portrait[] = {0x00, 0x00, 0x03, 0x1F ,NT35510_CMD_RASET}; |
||||
const uint8_t nt35510_madctl_landscape[] = {NT35510_CMD_MADCTL, 0x60}; |
||||
const uint8_t nt35510_caset_landscape[] = {0x00, 0x00, 0x03, 0x1F ,NT35510_CMD_CASET}; |
||||
const uint8_t nt35510_raset_landscape[] = {0x00, 0x00, 0x01, 0xDF ,NT35510_CMD_RASET}; |
||||
const uint8_t nt35510_reg26[] = {NT35510_CMD_TEEON, 0x00}; /* Tear on */ |
||||
const uint8_t nt35510_reg27[] = {NT35510_CMD_SLPOUT, 0x00}; /* Sleep out */ |
||||
const uint8_t nt35510_reg30[] = {NT35510_CMD_DISPON, 0x00}; |
||||
|
||||
const uint8_t nt35510_reg31[] = {NT35510_CMD_WRDISBV, 0x7F}; |
||||
const uint8_t nt35510_reg32[] = {NT35510_CMD_WRCTRLD, 0x2C}; |
||||
const uint8_t nt35510_reg33[] = {NT35510_CMD_WRCABC, 0x02}; |
||||
const uint8_t nt35510_reg34[] = {NT35510_CMD_WRCABCMB, 0xFF}; |
||||
const uint8_t nt35510_reg35[] = {NT35510_CMD_RAMWR, 0x00}; |
||||
const uint8_t nt35510_reg36[] = {NT35510_CMD_COLMOD, NT35510_COLMOD_RGB565}; |
||||
const uint8_t nt35510_reg37[] = {NT35510_CMD_COLMOD, NT35510_COLMOD_RGB888}; |
||||
|
||||
DSI_IO_WriteCmd(5, (uint8_t *)nt35510_reg); /* LV2: Page 1 enable */ |
||||
DSI_IO_WriteCmd(3, (uint8_t *)nt35510_reg1);/* AVDD: 5.2V */ |
||||
DSI_IO_WriteCmd(3, (uint8_t *)nt35510_reg2);/* AVDD: Ratio */ |
||||
DSI_IO_WriteCmd(3, (uint8_t *)nt35510_reg3);/* AVEE: -5.2V */ |
||||
DSI_IO_WriteCmd(3, (uint8_t *)nt35510_reg4);/* AVEE: Ratio */ |
||||
DSI_IO_WriteCmd(3, (uint8_t *)nt35510_reg5);/* VCL: -2.5V */ |
||||
DSI_IO_WriteCmd(3, (uint8_t *)nt35510_reg6);/* VCL: Ratio */ |
||||
DSI_IO_WriteCmd(1, (uint8_t *)nt35510_reg7);/* VGH: 15V (Free Pump) */ |
||||
DSI_IO_WriteCmd(3, (uint8_t *)nt35510_reg8); |
||||
DSI_IO_WriteCmd(3, (uint8_t *)nt35510_reg9);/* VGH: Ratio */ |
||||
DSI_IO_WriteCmd(3, (uint8_t *)nt35510_reg10);/* VGL_REG: -10V */ |
||||
DSI_IO_WriteCmd(3, (uint8_t *)nt35510_reg12);/* VGLX: Ratio */ |
||||
DSI_IO_WriteCmd(3, (uint8_t *)nt35510_reg13);/* VGMP/VGSP: 4.5V/0V */ |
||||
DSI_IO_WriteCmd(3, (uint8_t *)nt35510_reg14);/* VGMN/VGSN:-4.5V/0V */ |
||||
DSI_IO_WriteCmd(2, (uint8_t *)nt35510_reg15);/* VCOM: -1.325V */ |
||||
|
||||
/* ************************************************************************** */ |
||||
/* Proprietary DCS Initialization */ |
||||
/* ************************************************************************** */ |
||||
DSI_IO_WriteCmd(5, (uint8_t *)nt35510_reg16);/* LV2: Page 0 enable */ |
||||
DSI_IO_WriteCmd(2, (uint8_t *)nt35510_reg17);/* Display control */ |
||||
DSI_IO_WriteCmd(1, (uint8_t *)nt35510_reg18);/* Src hold time */ |
||||
DSI_IO_WriteCmd(1, (uint8_t *)nt35510_reg19); |
||||
DSI_IO_WriteCmd(2, (uint8_t *)nt35510_reg20);/* Gate EQ control */ |
||||
DSI_IO_WriteCmd(4, (uint8_t *)nt35510_reg21);/* Src EQ control(Mode2) */ |
||||
DSI_IO_WriteCmd(3, (uint8_t *)nt35510_reg22);/* Inv. mode(2-dot) */ |
||||
DSI_IO_WriteCmd(3, (uint8_t *)nt35510_reg23); |
||||
DSI_IO_WriteCmd(1, (uint8_t *)nt35510_reg24); |
||||
/* Tear on */ |
||||
DSI_IO_WriteCmd(0, (uint8_t *)nt35510_reg26); |
||||
/* Set Pixel color format to RGB888 */ |
||||
DSI_IO_WriteCmd(0, (uint8_t *)nt35510_reg37); |
||||
|
||||
/* ************************************************************************** */ |
||||
/* Standard DCS Initialization */ |
||||
/* ************************************************************************** */ |
||||
|
||||
/* Add a delay, otherwise MADCTL not taken */ |
||||
NT35510_IO_Delay(200); |
||||
|
||||
/* Configure orientation */ |
||||
if(orientation == NT35510_ORIENTATION_PORTRAIT) |
||||
{ |
||||
DSI_IO_WriteCmd(1, (uint8_t *)nt35510_madctl_portrait); |
||||
DSI_IO_WriteCmd(4, (uint8_t *)nt35510_caset_portrait); |
||||
DSI_IO_WriteCmd(4, (uint8_t *)nt35510_raset_portrait); |
||||
} |
||||
else |
||||
{ |
||||
DSI_IO_WriteCmd(1, (uint8_t *)nt35510_madctl_landscape); |
||||
DSI_IO_WriteCmd(4, (uint8_t *)nt35510_caset_landscape); |
||||
DSI_IO_WriteCmd(4, (uint8_t *)nt35510_raset_landscape); |
||||
} |
||||
|
||||
DSI_IO_WriteCmd(0, (uint8_t *)nt35510_reg27); |
||||
/* Wait for sleep out exit */ |
||||
NT35510_IO_Delay(120); |
||||
|
||||
switch(ColorCoding) |
||||
{ |
||||
case NT35510_FORMAT_RBG565 : |
||||
/* Set Pixel color format to RGB565 */ |
||||
DSI_IO_WriteCmd(1, (uint8_t *)nt35510_reg36); |
||||
break; |
||||
case NT35510_FORMAT_RGB888 : |
||||
/* Set Pixel color format to RGB888 */ |
||||
DSI_IO_WriteCmd(1, (uint8_t *)nt35510_reg37); |
||||
break; |
||||
default : |
||||
/* Set Pixel color format to RGB888 */ |
||||
DSI_IO_WriteCmd(1, (uint8_t *)nt35510_reg37); |
||||
break; |
||||
} |
||||
|
||||
/** CABC : Content Adaptive Backlight Control section start >> */ |
||||
/* Note : defaut is 0 (lowest Brightness), 0xFF is highest Brightness, try 0x7F : intermediate value */ |
||||
DSI_IO_WriteCmd(1, (uint8_t *)nt35510_reg31); |
||||
/* defaut is 0, try 0x2C - Brightness Control Block, Display Dimming & BackLight on */ |
||||
DSI_IO_WriteCmd(1, (uint8_t *)nt35510_reg32); |
||||
/* defaut is 0, try 0x02 - image Content based Adaptive Brightness [Still Picture] */ |
||||
DSI_IO_WriteCmd(1, (uint8_t *)nt35510_reg33); |
||||
/* defaut is 0 (lowest Brightness), 0xFF is highest Brightness */ |
||||
DSI_IO_WriteCmd(1, (uint8_t *)nt35510_reg34); |
||||
/** CABC : Content Adaptive Backlight Control section end << */ |
||||
|
||||
/* Display on */ |
||||
DSI_IO_WriteCmd(0, (uint8_t *)nt35510_reg30); |
||||
|
||||
/* Send Command GRAM memory write (no parameters) : this initiates frame write via other DSI commands sent by */ |
||||
/* DSI host from LTDC incoming pixels in video mode */ |
||||
DSI_IO_WriteCmd(0, (uint8_t *)nt35510_reg35); |
||||
|
||||
return 0; |
||||
} |
||||
|
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
uint8_t NT35510_DeInit(void) |
||||
{ |
||||
const uint8_t nt35510_reg30b[] = {NT35510_CMD_DISPOFF, 0x00}; |
||||
const uint8_t nt35510_reg27b[] = {NT35510_CMD_SLPIN, 0x00}; |
||||
/* Display off */ |
||||
DSI_IO_WriteCmd(0, (uint8_t *)nt35510_reg30b); |
||||
NT35510_IO_Delay(120); |
||||
/* Sleep in */ |
||||
DSI_IO_WriteCmd(0, (uint8_t *)nt35510_reg27b); |
||||
return 0; |
||||
} |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@ -0,0 +1,249 @@
|
||||
/**
|
||||
****************************************************************************** |
||||
* @file nt35510.h |
||||
* @author MCD Application Team |
||||
* @brief This file contains all the constants parameters for the NT35510 |
||||
* which is the LCD Driver for Frida Techshine 3K138 (WVGA) |
||||
* DSI LCD Display. |
||||
****************************************************************************** |
||||
* @attention |
||||
* |
||||
* <h2><center>© Copyright (c) 2020 STMicroelectronics. |
||||
* All rights reserved.</center></h2> |
||||
* |
||||
* This software component is licensed by ST under BSD 3-Clause license, |
||||
* the "License"; You may not use this file except in compliance with the |
||||
* License. You may obtain a copy of the License at: |
||||
* opensource.org/licenses/BSD-3-Clause |
||||
* |
||||
****************************************************************************** |
||||
*/ |
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/ |
||||
#ifndef __NT35510_H |
||||
#define __NT35510_H |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include <stdint.h> |
||||
/** @addtogroup BSP
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @addtogroup Components
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @addtogroup nt35510
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @addtogroup NT35510_Exported_Variables
|
||||
* @{ |
||||
*/ |
||||
|
||||
#if defined ( __GNUC__ ) |
||||
#ifndef __weak |
||||
#define __weak __attribute__((weak)) |
||||
#endif /* __weak */ |
||||
#endif /* __GNUC__ */ |
||||
|
||||
/**
|
||||
* @brief LCD_OrientationTypeDef |
||||
* Possible values of Display Orientation |
||||
*/ |
||||
#define NT35510_ORIENTATION_PORTRAIT ((uint32_t)0x00) /* Portrait orientation choice of LCD screen */ |
||||
#define NT35510_ORIENTATION_LANDSCAPE ((uint32_t)0x01) /* Landscape orientation choice of LCD screen */ |
||||
|
||||
/**
|
||||
* @brief Possible values of |
||||
* pixel data format (ie color coding) transmitted on DSI Data lane in DSI packets |
||||
*/ |
||||
#define NT35510_FORMAT_RGB888 ((uint32_t)0x00) /* Pixel format chosen is RGB888 : 24 bpp */ |
||||
#define NT35510_FORMAT_RBG565 ((uint32_t)0x02) /* Pixel format chosen is RGB565 : 16 bpp */ |
||||
|
||||
/**
|
||||
* @brief nt35510_480x800 Size |
||||
*/ |
||||
|
||||
/* Width and Height in Portrait mode */ |
||||
#define NT35510_480X800_WIDTH ((uint16_t)480) /* LCD PIXEL WIDTH */ |
||||
#define NT35510_480X800_HEIGHT ((uint16_t)800) /* LCD PIXEL HEIGHT */ |
||||
|
||||
/* Width and Height in Landscape mode */ |
||||
#define NT35510_800X480_WIDTH ((uint16_t)800) /* LCD PIXEL WIDTH */ |
||||
#define NT35510_800X480_HEIGHT ((uint16_t)480) /* LCD PIXEL HEIGHT */ |
||||
|
||||
/**
|
||||
* @brief NT35510_480X800 Timing parameters for Portrait orientation mode |
||||
*/ |
||||
#define NT35510_480X800_HSYNC ((uint16_t)2) /* Horizontal synchronization */ |
||||
#define NT35510_480X800_HBP ((uint16_t)34) /* Horizontal back porch */ |
||||
#define NT35510_480X800_HFP ((uint16_t)34) /* Horizontal front porch */ |
||||
|
||||
#define NT35510_480X800_VSYNC ((uint16_t)120) /* Vertical synchronization */ |
||||
#define NT35510_480X800_VBP ((uint16_t)150) /* Vertical back porch */ |
||||
#define NT35510_480X800_VFP ((uint16_t)150) /* Vertical front porch */ |
||||
|
||||
/**
|
||||
* @brief NT35510_800X480 Timing parameters for Landscape orientation mode |
||||
* Same values as for Portrait mode in fact. |
||||
*/ |
||||
#define NT35510_800X480_HSYNC NT35510_480X800_VSYNC /* Horizontal synchronization */ |
||||
#define NT35510_800X480_HBP NT35510_480X800_VBP /* Horizontal back porch */ |
||||
#define NT35510_800X480_HFP NT35510_480X800_VFP /* Horizontal front porch */ |
||||
#define NT35510_800X480_VSYNC NT35510_480X800_HSYNC /* Vertical synchronization */ |
||||
#define NT35510_800X480_VBP NT35510_480X800_HBP /* Vertical back porch */ |
||||
#define NT35510_800X480_VFP NT35510_480X800_HFP /* Vertical front porch */ |
||||
|
||||
|
||||
/* List of NT35510 used commands */ |
||||
/* Detailed in NT35510 Data Sheet v0.80 */ |
||||
/* Version of 10/28/2011 */ |
||||
/* Command, NumberOfArguments */ |
||||
|
||||
#define NT35510_CMD_NOP 0x00 /* NOP */ |
||||
#define NT35510_CMD_SWRESET 0x01 /* SW reset */ |
||||
#define NT35510_CMD_RDDID 0x04 /* Read display ID */ |
||||
#define NT35510_CMD_RDNUMED 0x05 /* Read number of errors on DSI */ |
||||
#define NT35510_CMD_RDDPM 0x0A /* Read display power mode */ |
||||
#define NT35510_CMD_RDDMADCTL 0x0B /* Read display MADCTL */ |
||||
#define NT35510_CMD_RDDCOLMOD 0x0C /* Read display pixel format */ |
||||
#define NT35510_CMD_RDDIM 0x0D /* Read display image mode */ |
||||
#define NT35510_CMD_RDDSM 0x0E /* Read display signal mode */ |
||||
#define NT35510_CMD_RDDSDR 0x0F /* Read display self-diagnostics result */ |
||||
#define NT35510_CMD_SLPIN 0x10 /* Sleep in */ |
||||
#define NT35510_CMD_SLPOUT 0x11 /* Sleep out */ |
||||
#define NT35510_CMD_PTLON 0x12 /* Partial mode on */ |
||||
#define NT35510_CMD_NORON 0x13 /* Normal display mode on */ |
||||
#define NT35510_CMD_INVOFF 0x20 /* Display inversion off */ |
||||
#define NT35510_CMD_INVON 0x21 /* Display inversion on */ |
||||
#define NT35510_CMD_ALLPOFF 0x22 /* All pixel off */ |
||||
#define NT35510_CMD_ALLPON 0x23 /* All pixel on */ |
||||
#define NT35510_CMD_GAMSET 0x26 /* Gamma set */ |
||||
#define NT35510_CMD_DISPOFF 0x28 /* Display off */ |
||||
#define NT35510_CMD_DISPON 0x29 /* Display on */ |
||||
#define NT35510_CMD_CASET 0x2A /* Column address set */ |
||||
#define NT35510_CMD_RASET 0x2B /* Row address set */ |
||||
#define NT35510_CMD_RAMWR 0x2C /* Memory write */ |
||||
#define NT35510_CMD_RAMRD 0x2E /* Memory read */ |
||||
#define NT35510_CMD_PLTAR 0x30 /* Partial area */ |
||||
#define NT35510_CMD_TOPC 0x32 /* Turn On Peripheral Command */ |
||||
#define NT35510_CMD_TEOFF 0x34 /* Tearing effect line off */ |
||||
#define NT35510_CMD_TEEON 0x35 /* Tearing effect line on */ |
||||
#define NT35510_CMD_MADCTL 0x36 /* Memory data access control */ |
||||
#define NT35510_CMD_IDMOFF 0x38 /* Idle mode off */ |
||||
#define NT35510_CMD_IDMON 0x39 /* Idle mode on */ |
||||
#define NT35510_CMD_COLMOD 0x3A /* Interface pixel format */ |
||||
#define NT35510_CMD_RAMWRC 0x3C /* Memory write continue */ |
||||
#define NT35510_CMD_RAMRDC 0x3E /* Memory read continue */ |
||||
#define NT35510_CMD_STESL 0x44 /* Set tearing effect scan line */ |
||||
#define NT35510_CMD_GSL 0x45 /* Get scan line */ |
||||
|
||||
#define NT35510_CMD_DSTBON 0x4F /* Deep standby mode on */ |
||||
#define NT35510_CMD_WRPFD 0x50 /* Write profile value for display */ |
||||
#define NT35510_CMD_WRDISBV 0x51 /* Write display brightness */ |
||||
#define NT35510_CMD_RDDISBV 0x52 /* Read display brightness */ |
||||
#define NT35510_CMD_WRCTRLD 0x53 /* Write CTRL display */ |
||||
#define NT35510_CMD_RDCTRLD 0x54 /* Read CTRL display value */ |
||||
#define NT35510_CMD_WRCABC 0x55 /* Write content adaptative brightness control */ |
||||
#define NT35510_CMD_RDCABC 0x56 /* Read content adaptive brightness control */ |
||||
#define NT35510_CMD_WRHYSTE 0x57 /* Write hysteresis */ |
||||
#define NT35510_CMD_WRGAMMSET 0x58 /* Write gamme setting */ |
||||
#define NT35510_CMD_RDFSVM 0x5A /* Read FS value MSBs */ |
||||
#define NT35510_CMD_RDFSVL 0x5B /* Read FS value LSBs */ |
||||
#define NT35510_CMD_RDMFFSVM 0x5C /* Read median filter FS value MSBs */ |
||||
#define NT35510_CMD_RDMFFSVL 0x5D /* Read median filter FS value LSBs */ |
||||
#define NT35510_CMD_WRCABCMB 0x5E /* Write CABC minimum brightness */ |
||||
#define NT35510_CMD_RDCABCMB 0x5F /* Read CABC minimum brightness */ |
||||
#define NT35510_CMD_WRLSCC 0x65 /* Write light sensor compensation coefficient value */ |
||||
#define NT35510_CMD_RDLSCCM 0x66 /* Read light sensor compensation coefficient value MSBs */ |
||||
#define NT35510_CMD_RDLSCCL 0x67 /* Read light sensor compensation coefficient value LSBs */ |
||||
#define NT35510_CMD_RDBWLB 0x70 /* Read black/white low bits */ |
||||
#define NT35510_CMD_RDBKX 0x71 /* Read Bkx */ |
||||
#define NT35510_CMD_RDBKY 0x72 /* Read Bky */ |
||||
#define NT35510_CMD_RDWX 0x73 /* Read Wx */ |
||||
#define NT35510_CMD_RDWY 0x74 /* Read Wy */ |
||||
#define NT35510_CMD_RDRGLB 0x75 /* Read red/green low bits */ |
||||
#define NT35510_CMD_RDRX 0x76 /* Read Rx */ |
||||
#define NT35510_CMD_RDRY 0x77 /* Read Ry */ |
||||
#define NT35510_CMD_RDGX 0x78 /* Read Gx */ |
||||
#define NT35510_CMD_RDGY 0x79 /* Read Gy */ |
||||
#define NT35510_CMD_RDBALB 0x7A /* Read blue/acolor low bits */ |
||||
#define NT35510_CMD_RDBX 0x7B /* Read Bx */ |
||||
#define NT35510_CMD_RDBY 0x7C /* Read By */ |
||||
#define NT35510_CMD_RDAX 0x7D /* Read Ax */ |
||||
#define NT35510_CMD_RDAY 0x7E /* Read Ay */ |
||||
#define NT35510_CMD_RDDDBS 0xA1 /* Read DDB start */ |
||||
#define NT35510_CMD_RDDDBC 0xA8 /* Read DDB continue */ |
||||
#define NT35510_CMD_RDDCS 0xAA /* Read first checksum */ |
||||
#define NT35510_CMD_RDCCS 0xAF /* Read continue checksum */ |
||||
#define NT35510_CMD_RDID1 0xDA /* Read ID1 value */ |
||||
#define NT35510_CMD_RDID2 0xDB /* Read ID2 value */ |
||||
#define NT35510_CMD_RDID3 0xDC /* Read ID3 value */ |
||||
|
||||
/* Parameter TELOM : Tearing Effect Line Output Mode : possible values */ |
||||
#define NT35510_TEEON_TELOM_VBLANKING_INFO_ONLY 0x00 |
||||
#define NT35510_TEEON_TELOM_VBLANKING_AND_HBLANKING_INFO 0x01 |
||||
|
||||
/* Possible used values of MADCTR */ |
||||
#define NT35510_MADCTR_MODE_PORTRAIT 0x00 |
||||
#define NT35510_MADCTR_MODE_LANDSCAPE 0x60 /* MY = 0, MX = 1, MV = 1, ML = 0, RGB = 0 */ |
||||
|
||||
/* Possible values of COLMOD parameter corresponding to used pixel formats */ |
||||
#define NT35510_COLMOD_RGB565 0x55 |
||||
#define NT35510_COLMOD_RGB888 0x77 |
||||
|
||||
/**
|
||||
* @brief NT35510_480X800 frequency divider |
||||
*/ |
||||
#define NT35510_480X800_FREQUENCY_DIVIDER 2 /* LCD Frequency divider */ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/* Exported macro ------------------------------------------------------------*/ |
||||
|
||||
/** @defgroup NT35510_Exported_Macros NT35510 Exported Macros
|
||||
* @{ |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/* Exported functions --------------------------------------------------------*/ |
||||
|
||||
/** @addtogroup NT35510_Exported_Functions
|
||||
* @{ |
||||
*/ |
||||
void DSI_IO_WriteCmd(uint32_t NbrParams, uint8_t *pParams); |
||||
uint8_t NT35510_Init(uint32_t ColorCoding, uint32_t orientation); |
||||
uint8_t NT35510_DeInit(void); |
||||
void NT35510_IO_Delay(uint32_t Delay); |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
#endif /* __NT35510_H */ |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@ -0,0 +1,245 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> |
||||
<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns="http://www.w3.org/TR/REC-html40"><head> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> |
||||
|
||||
|
||||
<link rel="File-List" href="Library_files/filelist.xml"> |
||||
|
||||
|
||||
<link rel="Edit-Time-Data" href="Library_files/editdata.mso"><!--[if !mso]> <style> v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VML);} .shape {behavior:url(#default#VML);} </style> <![endif]--><title>Release Notes for OTM8009A BSP Components Drivers</title><!--[if gte mso 9]><xml> <o:DocumentProperties> <o:Author>STMicroelectronics</o:Author> <o:LastAuthor>STMicroelectronics</o:LastAuthor> <o:Revision>37</o:Revision> <o:TotalTime>136</o:TotalTime> <o:Created>2009-02-27T19:26:00Z</o:Created> <o:LastSaved>2009-03-01T17:56:00Z</o:LastSaved> <o:Pages>1</o:Pages> <o:Words>522</o:Words> <o:Characters>2977</o:Characters> <o:Company>STMicroelectronics</o:Company> <o:Lines>24</o:Lines> <o:Paragraphs>6</o:Paragraphs> <o:CharactersWithSpaces>3493</o:CharactersWithSpaces> <o:Version>11.6568</o:Version> </o:DocumentProperties> </xml><![endif]--><!--[if gte mso 9]><xml> <w:WordDocument> <w:Zoom>110</w:Zoom> <w:ValidateAgainstSchemas/> <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid> <w:IgnoreMixedContent>false</w:IgnoreMixedContent> <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText> <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel> </w:WordDocument> </xml><![endif]--><!--[if gte mso 9]><xml> <w:LatentStyles DefLockedState="false" LatentStyleCount="156"> </w:LatentStyles> </xml><![endif]--> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<style> |
||||
<!-- |
||||
/* Style Definitions */ |
||||
p.MsoNormal, li.MsoNormal, div.MsoNormal |
||||
{mso-style-parent:""; |
||||
margin:0in; |
||||
margin-bottom:.0001pt; |
||||
mso-pagination:widow-orphan; |
||||
font-size:12.0pt; |
||||
font-family:"Times New Roman"; |
||||
mso-fareast-font-family:"Times New Roman";} |
||||
h2 |
||||
{mso-style-next:Normal; |
||||
margin-top:12.0pt; |
||||
margin-right:0in; |
||||
margin-bottom:3.0pt; |
||||
margin-left:0in; |
||||
mso-pagination:widow-orphan; |
||||
page-break-after:avoid; |
||||
mso-outline-level:2; |
||||
font-size:14.0pt; |
||||
font-family:Arial; |
||||
font-weight:bold; |
||||
font-style:italic;} |
||||
a:link, span.MsoHyperlink |
||||
{color:blue; |
||||
text-decoration:underline; |
||||
text-underline:single;} |
||||
a:visited, span.MsoHyperlinkFollowed |
||||
{color:blue; |
||||
text-decoration:underline; |
||||
text-underline:single;} |
||||
p |
||||
{mso-margin-top-alt:auto; |
||||
margin-right:0in; |
||||
mso-margin-bottom-alt:auto; |
||||
margin-left:0in; |
||||
mso-pagination:widow-orphan; |
||||
font-size:12.0pt; |
||||
font-family:"Times New Roman"; |
||||
mso-fareast-font-family:"Times New Roman";} |
||||
@page Section1 |
||||
{size:8.5in 11.0in; |
||||
margin:1.0in 1.25in 1.0in 1.25in; |
||||
mso-header-margin:.5in; |
||||
mso-footer-margin:.5in; |
||||
mso-paper-source:0;} |
||||
div.Section1 |
||||
{page:Section1;} |
||||
--> |
||||
</style><!--[if gte mso 10]> <style> /* Style Definitions */ table.MsoNormalTable {mso-style-name:"Table Normal"; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-parent:""; mso-padding-alt:0in 5.4pt 0in 5.4pt; mso-para-margin:0in; mso-para-margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:10.0pt; font-family:"Times New Roman"; mso-ansi-language:#0400; mso-fareast-language:#0400; mso-bidi-language:#0400;} </style> <![endif]--><!--[if gte mso 9]><xml> <o:shapedefaults v:ext="edit" spidmax="5122"/> </xml><![endif]--><!--[if gte mso 9]><xml> <o:shapelayout v:ext="edit"> <o:idmap v:ext="edit" data="1"/> </o:shapelayout></xml><![endif]--> |
||||
<meta content="MCD Application Team" name="author"></head> |
||||
<body link="blue" vlink="blue"> |
||||
<div class="Section1"> |
||||
<p class="MsoNormal"><span style="font-family: Arial;"><o:p><br> |
||||
</o:p></span></p> |
||||
<div align="center"> |
||||
<table class="MsoNormalTable" style="width: 675pt;" border="0" cellpadding="0" cellspacing="0" width="900"> |
||||
<tbody> |
||||
<tr> |
||||
<td style="padding: 0cm;" valign="top"> |
||||
<table class="MsoNormalTable" style="width: 675pt;" border="0" cellpadding="0" cellspacing="0" width="900"> |
||||
<tbody> |
||||
<tr> |
||||
<td style="vertical-align: top;"> |
||||
<p class="MsoNormal"><span style="font-size: 8pt; font-family: Arial; color: blue;"><a href="../../../../Release_Notes.html">Back to Release page</a><o:p></o:p></span></p> |
||||
</td> |
||||
</tr> |
||||
<tr style=""> |
||||
<td style="padding: 1.5pt;"> |
||||
<h1 style="margin-bottom: 18pt; text-align: center;" align="center"><span style="font-size: 20pt; font-family: Verdana; color: rgb(51, 102, 255);">Release |
||||
Notes for OTM8009A Component Driver</span><span style="font-size: 20pt; font-family: Verdana;"><o:p></o:p></span></h1> |
||||
<p class="MsoNormal" style="text-align: center;" align="center"><span style="font-size: 10pt; font-family: Arial; color: black;">Copyright |
||||
2017 STMicroelectronics</span><span style="color: black;"><u1:p></u1:p><o:p></o:p></span></p> |
||||
<p class="MsoNormal" style="text-align: center;" align="center"><span style="font-size: 10pt; font-family: Arial; color: black;"><img alt="" id="_x0000_i1025" src="../../../../_htmresc/st_logo.png" style="border: 0px solid ; width: 86px; height: 65px;"></span><span style="font-size: 10pt;"><o:p></o:p></span></p> |
||||
</td> |
||||
</tr> |
||||
</tbody> |
||||
</table> |
||||
<p class="MsoNormal"><span style="font-family: Arial; display: none;"><o:p> </o:p></span></p> |
||||
<table style="width: 675pt;" class="MsoNormalTable" border="0" cellpadding="0" width="900"> |
||||
<tbody> |
||||
<tr style=""> |
||||
<td style="padding: 0cm;" valign="top"><span style="font-size: 10pt; font-family: Verdana;"></span><h2 style="background: rgb(51, 102, 255) none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial;"><a name="History"></a><span style="font-size: 12pt; color: white;">Update History</span></h2><h3 style="background: rgb(51, 102, 255) none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial; margin-right: 500pt; width: 180px;"><span style="font-size: 10pt; font-family: Arial; color: white;">V1.0.4 |
||||
/ 23-November-2020 <o:p></o:p></span></h3> |
||||
|
||||
|
||||
<p class="MsoNormal" style="margin: 4.5pt 0cm 4.5pt 18pt;"><b style=""><u><span style="font-size: 10pt; font-family: Verdana; color: black;">Main |
||||
Changes<o:p></o:p></span></u></b></p> |
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
<span style="font-size: 10pt; font-family: Verdana;"></span><span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
<ul style="list-style-type: square;"><li><span style="font-size: 10pt; font-family: Verdana;"></span><span style="font-family: Verdana;"></span><span style="font-size: 10pt; font-family: Verdana;">Update otm8009a.h to support ARM compiler Keil V6</span></li></ul><h3 style="background: rgb(51, 102, 255) none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial; margin-right: 500pt; width: 180px;"><span style="font-size: 10pt; font-family: Arial; color: white;">V1.0.3 |
||||
/ 07-April-2017 <o:p></o:p></span></h3> |
||||
|
||||
|
||||
<p class="MsoNormal" style="margin: 4.5pt 0cm 4.5pt 18pt;"><b style=""><u><span style="font-size: 10pt; font-family: Verdana; color: black;">Main |
||||
Changes<o:p></o:p></span></u></b></p> |
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
<span style="font-size: 10pt; font-family: Verdana;"></span><span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
<ul style="list-style-type: square;"><li><span style="font-size: 10pt; font-family: Verdana;"></span><span style="font-family: Verdana;"></span><span style="font-size: 10pt; font-family: Verdana;">Update comments to be used for PDSC generation</span></li></ul><h3 style="background: rgb(51, 102, 255) none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial; margin-right: 500pt; width: 180px;"><span style="font-size: 10pt; font-family: Arial; color: white;">V1.0.2 |
||||
/ 27-January-2017 <o:p></o:p></span></h3> |
||||
|
||||
<p class="MsoNormal" style="margin: 4.5pt 0cm 4.5pt 18pt;"><b style=""><u><span style="font-size: 10pt; font-family: Verdana; color: black;">Main |
||||
Changes<o:p></o:p></span></u></b></p> |
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
<span style="font-size: 10pt; font-family: Verdana;"></span><span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
<ul style="list-style-type: square;"> |
||||
<li><span style="font-size: 10pt; font-family: Verdana;"></span><span style="font-family: Verdana;"></span><span style="font-size: 10pt; font-family: Verdana;">Update DSI controller timings</span></li> |
||||
<li><span style="font-size: 10pt; font-family: Verdana;">CABC LEDPWM frequency adjusted to 19,5kHz<br> |
||||
</span></li> |
||||
</ul> |
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
<h3 style="background: rgb(51, 102, 255) none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial; margin-right: 500pt; width: 180px;"><span style="font-size: 10pt; font-family: Arial; color: white;">V1.0.1 |
||||
/ 04-August-2016 <o:p></o:p></span></h3> |
||||
|
||||
|
||||
<p class="MsoNormal" style="margin: 4.5pt 0cm 4.5pt 18pt;"><b style=""><u><span style="font-size: 10pt; font-family: Verdana; color: black;">Main |
||||
Changes<o:p></o:p></span></u></b></p> |
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
<span style="font-size: 10pt; font-family: Verdana;"></span><span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
<ul style="list-style-type: square;"> |
||||
<li><span style="font-size: 10pt; font-family: Verdana;"></span><span style="font-family: Verdana;"></span><span style="font-size: 10pt; font-family: Verdana;">Update DSI controller timings</span></li> |
||||
</ul> |
||||
<h3 style="background: rgb(51, 102, 255) none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial; margin-right: 500pt; width: 180px;"><span style="font-size: 10pt; font-family: Arial; color: white;">V1.0.0 |
||||
/ 03-August-2015 <o:p></o:p></span></h3> |
||||
|
||||
<p class="MsoNormal" style="margin: 4.5pt 0cm 4.5pt 18pt;"><b style=""><u><span style="font-size: 10pt; font-family: Verdana; color: black;">Main |
||||
Changes<o:p></o:p></span></u></b></p> |
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
<span style="font-size: 10pt; font-family: Verdana;"></span><span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
<ul style="list-style-type: square;"><li><span style="font-size: 10pt; font-family: Verdana;"></span><span style="font-family: Verdana;"></span><span style="font-size: 10pt; font-family: Verdana;">First official release of OTM8009A LCD component driver<br> |
||||
</span></li></ul><span style="font-size: 10pt; font-family: Verdana;"></span><span style="font-size: 10pt; font-family: Verdana;"></span><span style="font-size: 10pt; font-family: Verdana;"><span style="font-style: italic; font-weight: bold;"></span></span><span style="font-size: 10pt; font-family: Verdana;"><span style="font-style: italic; font-weight: bold;"></span></span><span style="font-size: 10pt; font-family: Verdana;"><span style="font-style: italic; font-weight: bold;"></span></span><span style="font-size: 10pt; font-family: Verdana;"><span style="font-style: italic; font-weight: bold;"></span></span><span style="font-size: 10pt; font-family: Verdana;"><span style="font-style: italic; font-weight: bold;"></span></span><span style="font-size: 10pt; font-family: Verdana;"></span><h2 style="background: rgb(51, 102, 255) none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial;"><a name="License"></a><span style="font-size: 12pt; color: white;">License<o:p></o:p></span><br></h2><div style="text-align: justify;"><font size="-1"><span style="font-family: "Verdana","sans-serif";"> |
||||
Redistribution and use in source and binary forms, with or without |
||||
modification, are permitted provided that the following conditions are |
||||
met:</span><br> |
||||
</font> |
||||
<ol><li><font size="-1"><span style="font-family: "Verdana","sans-serif";">Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.</span><span style="font-family: "Verdana","sans-serif";"></span></font></li><li><font size="-1"><span style="font-family: "Verdana","sans-serif";">Redistributions |
||||
in binary form must reproduce the above copyright notice, this list of |
||||
conditions and the following disclaimer in </span><span style="font-family: "Verdana","sans-serif";">the documentation and/or other materials provided with the distribution.</span><span style="font-family: "Verdana","sans-serif";"></span></font></li><li><font size="-1"><span style="font-family: "Verdana","sans-serif";">Neither the name of STMicroelectronics nor the names of its contributors may be used to endorse or promote products derived </span><br> |
||||
</font> |
||||
</li></ol> |
||||
<font size="-1"><span style="font-family: "Verdana","sans-serif";"> from this software without specific prior written permission.</span><br> |
||||
<span style="font-family: "Verdana","sans-serif";"></span><br> |
||||
<span style="font-family: "Verdana","sans-serif";">THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED</span><span style="font-family: "Verdana","sans-serif";"> WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A </span><span style="font-family: "Verdana","sans-serif";">PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY </span><span style="font-family: "Verdana","sans-serif";">DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, </span><span style="font-family: "Verdana","sans-serif";">PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER</span><span style="font-family: "Verdana","sans-serif";"> CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR </span><span style="font-family: "Verdana","sans-serif";">OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</span></font> |
||||
|
||||
</div> |
||||
<p class="MsoNormal"><span style="font-size: 10pt; font-family: "Verdana","sans-serif"; color: black;"><o:p></o:p></span></p> |
||||
<b><span style="font-size: 10pt; font-family: Verdana; color: black;"></span></b> |
||||
|
||||
<div class="MsoNormal" style="text-align: center;" align="center"><span style="color: black;"> |
||||
<hr align="center" size="2" width="100%"></span></div> |
||||
<div style="margin-left: 120px;"><span style="font-size: 10pt; font-family: Verdana; color: black;">For |
||||
complete documentation on </span><span style="font-size: 10pt; font-family: Verdana;">STM32<span style="color: black;"> Microcontrollers |
||||
visit </span><u><span style="color: blue;"><a href="http://www.st.com/internet/mcu/class/1734.jsp" target="_blank">www.st.com/STM32</a></span></u></span></div> |
||||
</td> |
||||
</tr> |
||||
<tr><td style="padding: 0cm;" valign="top"><br> |
||||
</td></tr></tbody> |
||||
</table> |
||||
<p class="MsoNormal"><span style="font-size: 10pt;"><o:p></o:p></span></p> |
||||
</td> |
||||
</tr> |
||||
</tbody> |
||||
</table> |
||||
</div> |
||||
<p class="MsoNormal"><o:p> </o:p></p> |
||||
</div> |
||||
|
||||
</body></html> |
@ -0,0 +1,452 @@
|
||||
/**
|
||||
****************************************************************************** |
||||
* @file otm8009a.c |
||||
* @author MCD Application Team |
||||
* @brief This file provides the LCD Driver for KoD KM-040TMP-02-0621 (WVGA) |
||||
* DSI LCD Display OTM8009A.
|
||||
****************************************************************************** |
||||
* @attention |
||||
* |
||||
* <h2><center>© COPYRIGHT(c) 2017 STMicroelectronics</center></h2> |
||||
* |
||||
* 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 STMicroelectronics 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. |
||||
* |
||||
****************************************************************************** |
||||
*/ |
||||
|
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include "otm8009a.h" |
||||
|
||||
/** @addtogroup BSP
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @addtogroup Components
|
||||
* @{ |
||||
*/
|
||||
|
||||
/** @defgroup OTM8009A OTM8009A
|
||||
* @brief This file provides a set of functions needed to drive the
|
||||
* otm8009a IC display driver. |
||||
* @{ |
||||
*/ |
||||
|
||||
/* Private types -------------------------------------------------------------*/ |
||||
/* Private variables ---------------------------------------------------------*/ |
||||
/* Private constants ---------------------------------------------------------*/ |
||||
/** @defgroup OTM8009A_Private_Constants OTM8009A Private Constants
|
||||
* @{ |
||||
*/ |
||||
|
||||
/*
|
||||
* @brief Constant tables of register settings used to transmit DSI |
||||
* command packets as power up initialization sequence of the KoD LCD (OTM8009A LCD Driver) |
||||
*/ |
||||
const uint8_t lcdRegData1[] = {0x80,0x09,0x01,0xFF}; |
||||
const uint8_t lcdRegData2[] = {0x80,0x09,0xFF}; |
||||
const uint8_t lcdRegData3[] = {0x00,0x09,0x0F,0x0E,0x07,0x10,0x0B,0x0A,0x04,0x07,0x0B,0x08,0x0F,0x10,0x0A,0x01,0xE1}; |
||||
const uint8_t lcdRegData4[] = {0x00,0x09,0x0F,0x0E,0x07,0x10,0x0B,0x0A,0x04,0x07,0x0B,0x08,0x0F,0x10,0x0A,0x01,0xE2}; |
||||
const uint8_t lcdRegData5[] = {0x79,0x79,0xD8}; |
||||
const uint8_t lcdRegData6[] = {0x00,0x01,0xB3}; |
||||
const uint8_t lcdRegData7[] = {0x85,0x01,0x00,0x84,0x01,0x00,0xCE}; |
||||
const uint8_t lcdRegData8[] = {0x18,0x04,0x03,0x39,0x00,0x00,0x00,0x18,0x03,0x03,0x3A,0x00,0x00,0x00,0xCE}; |
||||
const uint8_t lcdRegData9[] = {0x18,0x02,0x03,0x3B,0x00,0x00,0x00,0x18,0x01,0x03,0x3C,0x00,0x00,0x00,0xCE}; |
||||
const uint8_t lcdRegData10[] = {0x01,0x01,0x20,0x20,0x00,0x00,0x01,0x02,0x00,0x00,0xCF}; |
||||
const uint8_t lcdRegData11[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xCB}; |
||||
const uint8_t lcdRegData12[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xCB}; |
||||
const uint8_t lcdRegData13[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xCB}; |
||||
const uint8_t lcdRegData14[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xCB}; |
||||
const uint8_t lcdRegData15[] = {0x00,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xCB}; |
||||
const uint8_t lcdRegData16[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0xCB}; |
||||
const uint8_t lcdRegData17[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xCB}; |
||||
const uint8_t lcdRegData18[] = {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xCB}; |
||||
const uint8_t lcdRegData19[] = {0x00,0x26,0x09,0x0B,0x01,0x25,0x00,0x00,0x00,0x00,0xCC}; |
||||
const uint8_t lcdRegData20[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x26,0x0A,0x0C,0x02,0xCC}; |
||||
const uint8_t lcdRegData21[] = {0x25,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xCC}; |
||||
const uint8_t lcdRegData22[] = {0x00,0x25,0x0C,0x0A,0x02,0x26,0x00,0x00,0x00,0x00,0xCC}; |
||||
const uint8_t lcdRegData23[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x25,0x0B,0x09,0x01,0xCC}; |
||||
const uint8_t lcdRegData24[] = {0x26,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xCC}; |
||||
const uint8_t lcdRegData25[] = {0xFF,0xFF,0xFF,0xFF};
|
||||
/*
|
||||
* CASET value (Column Address Set) : X direction LCD GRAM boundaries |
||||
* depending on LCD orientation mode and PASET value (Page Address Set) : Y direction |
||||
* LCD GRAM boundaries depending on LCD orientation mode |
||||
* XS[15:0] = 0x000 = 0, XE[15:0] = 0x31F = 799 for landscape mode : apply to CASET |
||||
* YS[15:0] = 0x000 = 0, YE[15:0] = 0x31F = 799 for portrait mode : : apply to PASET |
||||
*/ |
||||
const uint8_t lcdRegData27[] = {0x00, 0x00, 0x03, 0x1F, OTM8009A_CMD_CASET}; |
||||
/*
|
||||
* XS[15:0] = 0x000 = 0, XE[15:0] = 0x1DF = 479 for portrait mode : apply to CASET |
||||
* YS[15:0] = 0x000 = 0, YE[15:0] = 0x1DF = 479 for landscape mode : apply to PASET |
||||
*/ |
||||
const uint8_t lcdRegData28[] = {0x00, 0x00, 0x01, 0xDF, OTM8009A_CMD_PASET}; |
||||
|
||||
|
||||
const uint8_t ShortRegData1[] = {OTM8009A_CMD_NOP, 0x00}; |
||||
const uint8_t ShortRegData2[] = {OTM8009A_CMD_NOP, 0x80}; |
||||
const uint8_t ShortRegData3[] = {0xC4, 0x30}; |
||||
const uint8_t ShortRegData4[] = {OTM8009A_CMD_NOP, 0x8A}; |
||||
const uint8_t ShortRegData5[] = {0xC4, 0x40}; |
||||
const uint8_t ShortRegData6[] = {OTM8009A_CMD_NOP, 0xB1}; |
||||
const uint8_t ShortRegData7[] = {0xC5, 0xA9}; |
||||
const uint8_t ShortRegData8[] = {OTM8009A_CMD_NOP, 0x91}; |
||||
const uint8_t ShortRegData9[] = {0xC5, 0x34}; |
||||
const uint8_t ShortRegData10[] = {OTM8009A_CMD_NOP, 0xB4}; |
||||
const uint8_t ShortRegData11[] = {0xC0, 0x50}; |
||||
const uint8_t ShortRegData12[] = {0xD9, 0x4E}; |
||||
const uint8_t ShortRegData13[] = {OTM8009A_CMD_NOP, 0x81}; |
||||
const uint8_t ShortRegData14[] = {0xC1, 0x66}; |
||||
const uint8_t ShortRegData15[] = {OTM8009A_CMD_NOP, 0xA1}; |
||||
const uint8_t ShortRegData16[] = {0xC1, 0x08}; |
||||
const uint8_t ShortRegData17[] = {OTM8009A_CMD_NOP, 0x92}; |
||||
const uint8_t ShortRegData18[] = {0xC5, 0x01}; |
||||
const uint8_t ShortRegData19[] = {OTM8009A_CMD_NOP, 0x95}; |
||||
const uint8_t ShortRegData20[] = {OTM8009A_CMD_NOP, 0x94}; |
||||
const uint8_t ShortRegData21[] = {0xC5, 0x33}; |
||||
const uint8_t ShortRegData22[] = {OTM8009A_CMD_NOP, 0xA3}; |
||||
const uint8_t ShortRegData23[] = {0xC0, 0x1B}; |
||||
const uint8_t ShortRegData24[] = {OTM8009A_CMD_NOP, 0x82}; |
||||
const uint8_t ShortRegData25[] = {0xC5, 0x83}; |
||||
const uint8_t ShortRegData26[] = {0xC4, 0x83}; |
||||
const uint8_t ShortRegData27[] = {0xC1, 0x0E}; |
||||
const uint8_t ShortRegData28[] = {OTM8009A_CMD_NOP, 0xA6}; |
||||
const uint8_t ShortRegData29[] = {OTM8009A_CMD_NOP, 0xA0}; |
||||
const uint8_t ShortRegData30[] = {OTM8009A_CMD_NOP, 0xB0}; |
||||
const uint8_t ShortRegData31[] = {OTM8009A_CMD_NOP, 0xC0}; |
||||
const uint8_t ShortRegData32[] = {OTM8009A_CMD_NOP, 0xD0}; |
||||
const uint8_t ShortRegData33[] = {OTM8009A_CMD_NOP, 0x90}; |
||||
const uint8_t ShortRegData34[] = {OTM8009A_CMD_NOP, 0xE0}; |
||||
const uint8_t ShortRegData35[] = {OTM8009A_CMD_NOP, 0xF0}; |
||||
const uint8_t ShortRegData36[] = {OTM8009A_CMD_SLPOUT, 0x00}; |
||||
const uint8_t ShortRegData37[] = {OTM8009A_CMD_COLMOD, OTM8009A_COLMOD_RGB565}; |
||||
const uint8_t ShortRegData38[] = {OTM8009A_CMD_COLMOD, OTM8009A_COLMOD_RGB888}; |
||||
const uint8_t ShortRegData39[] = {OTM8009A_CMD_MADCTR, OTM8009A_MADCTR_MODE_LANDSCAPE}; |
||||
const uint8_t ShortRegData40[] = {OTM8009A_CMD_WRDISBV, 0x7F}; |
||||
const uint8_t ShortRegData41[] = {OTM8009A_CMD_WRCTRLD, 0x2C}; |
||||
const uint8_t ShortRegData42[] = {OTM8009A_CMD_WRCABC, 0x02}; |
||||
const uint8_t ShortRegData43[] = {OTM8009A_CMD_WRCABCMB, 0xFF}; |
||||
const uint8_t ShortRegData44[] = {OTM8009A_CMD_DISPON, 0x00}; |
||||
const uint8_t ShortRegData45[] = {OTM8009A_CMD_RAMWR, 0x00}; |
||||
const uint8_t ShortRegData46[] = {0xCF, 0x00}; |
||||
const uint8_t ShortRegData47[] = {0xC5, 0x66}; |
||||
const uint8_t ShortRegData48[] = {OTM8009A_CMD_NOP, 0xB6}; |
||||
const uint8_t ShortRegData49[] = {0xF5, 0x06}; |
||||
const uint8_t ShortRegData50[] = {OTM8009A_CMD_NOP, 0xB1}; |
||||
const uint8_t ShortRegData51[] = {0xC6, 0x06}; |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/* Private macros ------------------------------------------------------------*/ |
||||
/* Private functions ---------------------------------------------------------*/ |
||||
/** @defgroup OTM8009A_Exported_Variables
|
||||
* @{ |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/* Exported functions ---------------------------------------------------------*/ |
||||
/** @defgroup OTM8009A_Exported_Functions OTM8009A Exported Functions
|
||||
* @{ |
||||
*/ |
||||
|
||||
/**
|
||||
* @brief DSI IO write short/long command. |
||||
* @note : Can be surcharged by application code implementation of the function. |
||||
*/ |
||||
__weak void DSI_IO_WriteCmd(uint32_t NbrParams, uint8_t *pParams) |
||||
{ |
||||
/* NOTE : This function Should not be modified, when it is needed,
|
||||
the DSI_IO_WriteCmd could be implemented in the user file |
||||
*/ |
||||
} |
||||
|
||||
/**
|
||||
* @brief Initializes the LCD KoD display part by communication in DSI mode in Video Mode |
||||
* with IC Display Driver OTM8009A (see IC Driver specification for more information). |
||||
* @param hdsi_eval : pointer on DSI configuration structure |
||||
* @param hdsivideo_handle : pointer on DSI video mode configuration structure |
||||
* @retval Status |
||||
*/ |
||||
uint8_t OTM8009A_Init(uint32_t ColorCoding, uint32_t orientation) |
||||
{ |
||||
/* Enable CMD2 to access vendor specific commands */ |
||||
/* Enter in command 2 mode and set EXTC to enable address shift function (0x00) */ |
||||
DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData1); |
||||
DSI_IO_WriteCmd( 3, (uint8_t *)lcdRegData1); |
||||
|
||||
/* Enter ORISE Command 2 */ |
||||
DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData2); /* Shift address to 0x80 */ |
||||
DSI_IO_WriteCmd( 2, (uint8_t *)lcdRegData2); |
||||
|
||||
/////////////////////////////////////////////////////////////////////
|
||||
/* SD_PCH_CTRL - 0xC480h - 129th parameter - Default 0x00 */ |
||||
/* Set SD_PT */ |
||||
/* -> Source output level during porch and non-display area to GND */ |
||||
DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData2); |
||||
DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData3); |
||||
OTM8009A_IO_Delay(10); |
||||
/* Not documented */ |
||||
DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData4); |
||||
DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData5); |
||||
OTM8009A_IO_Delay(10); |
||||
/////////////////////////////////////////////////////////////////////
|
||||
|
||||
/* PWR_CTRL4 - 0xC4B0h - 178th parameter - Default 0xA8 */ |
||||
/* Set gvdd_en_test */ |
||||
/* -> enable GVDD test mode !!! */ |
||||
DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData6); |
||||
DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData7); |
||||
|
||||
/* PWR_CTRL2 - 0xC590h - 146th parameter - Default 0x79 */ |
||||
/* Set pump 4 vgh voltage */ |
||||
/* -> from 15.0v down to 13.0v */ |
||||
/* Set pump 5 vgh voltage */ |
||||
/* -> from -12.0v downto -9.0v */ |
||||
DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData8); |
||||
DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData9); |
||||
|
||||
/* P_DRV_M - 0xC0B4h - 181th parameter - Default 0x00 */ |
||||
/* -> Column inversion */ |
||||
DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData10); |
||||
DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData11); |
||||
|
||||
/* VCOMDC - 0xD900h - 1st parameter - Default 0x39h */ |
||||
/* VCOM Voltage settings */ |
||||
/* -> from -1.0000v downto -1.2625v */ |
||||
DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData1); |
||||
DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData12); |
||||
|
||||
/* Oscillator adjustment for Idle/Normal mode (LPDT only) set to 65Hz (default is 60Hz) */ |
||||
DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData13); |
||||
DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData14); |
||||
|
||||
/* Video mode internal */ |
||||
DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData15); |
||||
DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData16); |
||||
|
||||
/* PWR_CTRL2 - 0xC590h - 147h parameter - Default 0x00 */ |
||||
/* Set pump 4&5 x6 */ |
||||
/* -> ONLY VALID when PUMP4_EN_ASDM_HV = "0" */ |
||||
DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData17); |
||||
DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData18); |
||||
|
||||
/* PWR_CTRL2 - 0xC590h - 150th parameter - Default 0x33h */ |
||||
/* Change pump4 clock ratio */ |
||||
/* -> from 1 line to 1/2 line */ |
||||
DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData19); |
||||
DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData9); |
||||
|
||||
/* GVDD/NGVDD settings */ |
||||
DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData1); |
||||
DSI_IO_WriteCmd( 2, (uint8_t *)lcdRegData5); |
||||
|
||||
/* PWR_CTRL2 - 0xC590h - 149th parameter - Default 0x33h */ |
||||
/* Rewrite the default value ! */ |
||||
DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData20); |
||||
DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData21); |
||||
|
||||
/* Panel display timing Setting 3 */ |
||||
DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData22); |
||||
DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData23); |
||||
|
||||
/* Power control 1 */ |
||||
DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData24); |
||||
DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData25); |
||||
|
||||
/* Source driver precharge */ |
||||
DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData13); |
||||
DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData26); |
||||
|
||||
DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData15); |
||||
DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData27); |
||||
|
||||
DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData28); |
||||
DSI_IO_WriteCmd( 2, (uint8_t *)lcdRegData6); |
||||
|
||||
/* GOAVST */ |
||||
DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData2); |
||||
DSI_IO_WriteCmd( 6, (uint8_t *)lcdRegData7); |
||||
|
||||
DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData29); |
||||
DSI_IO_WriteCmd( 14, (uint8_t *)lcdRegData8); |
||||
|
||||
DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData30); |
||||
DSI_IO_WriteCmd( 14, (uint8_t *)lcdRegData9); |
||||
|
||||
DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData31); |
||||
DSI_IO_WriteCmd( 10, (uint8_t *)lcdRegData10); |
||||
|
||||
DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData32); |
||||
DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData46); |
||||
|
||||
DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData2); |
||||
DSI_IO_WriteCmd( 10, (uint8_t *)lcdRegData11); |
||||
|
||||
DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData33); |
||||
DSI_IO_WriteCmd( 15, (uint8_t *)lcdRegData12); |
||||
|
||||
DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData29); |
||||
DSI_IO_WriteCmd( 15, (uint8_t *)lcdRegData13); |
||||
|
||||
DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData30); |
||||
DSI_IO_WriteCmd( 10, (uint8_t *)lcdRegData14); |
||||
|
||||
DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData31); |
||||
DSI_IO_WriteCmd( 15, (uint8_t *)lcdRegData15); |
||||
|
||||
DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData32); |
||||
DSI_IO_WriteCmd( 15, (uint8_t *)lcdRegData16); |
||||
|
||||
DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData34); |
||||
DSI_IO_WriteCmd( 10, (uint8_t *)lcdRegData17); |
||||
|
||||
DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData35); |
||||
DSI_IO_WriteCmd( 10, (uint8_t *)lcdRegData18); |
||||
|
||||
DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData2); |
||||
DSI_IO_WriteCmd( 10, (uint8_t *)lcdRegData19); |
||||
|
||||
DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData33); |
||||
DSI_IO_WriteCmd( 15, (uint8_t *)lcdRegData20); |
||||
|
||||
DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData29); |
||||
DSI_IO_WriteCmd( 15, (uint8_t *)lcdRegData21); |
||||
|
||||
DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData30); |
||||
DSI_IO_WriteCmd( 10, (uint8_t *)lcdRegData22); |
||||
|
||||
DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData31); |
||||
DSI_IO_WriteCmd( 15, (uint8_t *)lcdRegData23); |
||||
|
||||
DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData32); |
||||
DSI_IO_WriteCmd( 15, (uint8_t *)lcdRegData24); |
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
/* PWR_CTRL1 - 0xc580h - 130th parameter - default 0x00 */ |
||||
/* Pump 1 min and max DM */ |
||||
DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData13); |
||||
DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData47); |
||||
DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData48); |
||||
DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData49); |
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
/* CABC LEDPWM frequency adjusted to 19,5kHz */ |
||||
DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData50); |
||||
DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData51); |
||||
|
||||
/* Exit CMD2 mode */ |
||||
DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData1); |
||||
DSI_IO_WriteCmd( 3, (uint8_t *)lcdRegData25); |
||||
|
||||
/*************************************************************************** */ |
||||
/* Standard DCS Initialization TO KEEP CAN BE DONE IN HSDT */ |
||||
/*************************************************************************** */ |
||||
|
||||
/* NOP - goes back to DCS std command ? */ |
||||
DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData1); |
||||
|
||||
/* Gamma correction 2.2+ table (HSDT possible) */ |
||||
DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData1); |
||||
DSI_IO_WriteCmd( 16, (uint8_t *)lcdRegData3); |
||||
|
||||
/* Gamma correction 2.2- table (HSDT possible) */ |
||||
DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData1); |
||||
DSI_IO_WriteCmd( 16, (uint8_t *)lcdRegData4); |
||||
|
||||
/* Send Sleep Out command to display : no parameter */ |
||||
DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData36); |
||||
|
||||
/* Wait for sleep out exit */ |
||||
OTM8009A_IO_Delay(120); |
||||
|
||||
switch(ColorCoding) |
||||
{ |
||||
case OTM8009A_FORMAT_RBG565 : |
||||
/* Set Pixel color format to RGB565 */ |
||||
DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData37); |
||||
break; |
||||
case OTM8009A_FORMAT_RGB888 : |
||||
/* Set Pixel color format to RGB888 */ |
||||
DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData38); |
||||
break; |
||||
default : |
||||
break; |
||||
} |
||||
|
||||
/* Send command to configure display in landscape orientation mode. By default
|
||||
the orientation mode is portrait */ |
||||
if(orientation == OTM8009A_ORIENTATION_LANDSCAPE) |
||||
{ |
||||
DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData39); |
||||
DSI_IO_WriteCmd( 4, (uint8_t *)lcdRegData27); |
||||
DSI_IO_WriteCmd( 4, (uint8_t *)lcdRegData28); |
||||
} |
||||
|
||||
/** CABC : Content Adaptive Backlight Control section start >> */ |
||||
/* Note : defaut is 0 (lowest Brightness), 0xFF is highest Brightness, try 0x7F : intermediate value */ |
||||
DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData40); |
||||
|
||||
/* defaut is 0, try 0x2C - Brightness Control Block, Display Dimming & BackLight on */ |
||||
DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData41); |
||||
|
||||
/* defaut is 0, try 0x02 - image Content based Adaptive Brightness [Still Picture] */ |
||||
DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData42); |
||||
|
||||
/* defaut is 0 (lowest Brightness), 0xFF is highest Brightness */ |
||||
DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData43); |
||||
|
||||
/** CABC : Content Adaptive Backlight Control section end << */ |
||||
|
||||
/* Send Command Display On */ |
||||
DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData44); |
||||
|
||||
/* NOP command */ |
||||
DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData1); |
||||
|
||||
/* Send Command GRAM memory write (no parameters) : this initiates frame write via other DSI commands sent by */ |
||||
/* DSI host from LTDC incoming pixels in video mode */ |
||||
DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData45); |
||||
|
||||
return 0; |
||||
} |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@ -0,0 +1,222 @@
|
||||
/**
|
||||
****************************************************************************** |
||||
* @file otm8009a.h |
||||
* @author MCD Application Team |
||||
* @brief This file contains all the constants parameters for the OTM8009A |
||||
* which is the LCD Driver for KoD KM-040TMP-02-0621 (WVGA) |
||||
* DSI LCD Display. |
||||
****************************************************************************** |
||||
* @attention |
||||
* |
||||
* <h2><center>© COPYRIGHT(c) 2017 STMicroelectronics</center></h2> |
||||
* |
||||
* 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 STMicroelectronics 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. |
||||
* |
||||
****************************************************************************** |
||||
*/ |
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/ |
||||
#ifndef __OTM8009A_H |
||||
#define __OTM8009A_H |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include <stdint.h> |
||||
/** @addtogroup BSP
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @addtogroup Components
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @addtogroup otm8009a
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @addtogroup OTM8009A_Exported_Variables
|
||||
* @{ |
||||
*/ |
||||
|
||||
#if defined ( __GNUC__ ) || (defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)) /* GNU and ARM Compiler 6 compilers */ |
||||
#ifndef __weak |
||||
#define __weak __attribute__((weak)) |
||||
#endif /* __weak */ |
||||
#endif /* __GNUC__ || (__ARMCC_VERSION && (__ARMCC_VERSION >= 6010050)) */ |
||||
|
||||
/**
|
||||
* @brief LCD_OrientationTypeDef |
||||
* Possible values of Display Orientation |
||||
*/ |
||||
#define OTM8009A_ORIENTATION_PORTRAIT ((uint32_t)0x00) /* Portrait orientation choice of LCD screen */ |
||||
#define OTM8009A_ORIENTATION_LANDSCAPE ((uint32_t)0x01) /* Landscape orientation choice of LCD screen */ |
||||
|
||||
/**
|
||||
* @brief Possible values of |
||||
* pixel data format (ie color coding) transmitted on DSI Data lane in DSI packets |
||||
*/ |
||||
#define OTM8009A_FORMAT_RGB888 ((uint32_t)0x00) /* Pixel format chosen is RGB888 : 24 bpp */ |
||||
#define OTM8009A_FORMAT_RBG565 ((uint32_t)0x02) /* Pixel format chosen is RGB565 : 16 bpp */ |
||||
|
||||
/**
|
||||
* @brief otm8009a_480x800 Size |
||||
*/ |
||||
|
||||
/* Width and Height in Portrait mode */ |
||||
#define OTM8009A_480X800_WIDTH ((uint16_t)480) /* LCD PIXEL WIDTH */ |
||||
#define OTM8009A_480X800_HEIGHT ((uint16_t)800) /* LCD PIXEL HEIGHT */ |
||||
|
||||
/* Width and Height in Landscape mode */ |
||||
#define OTM8009A_800X480_WIDTH ((uint16_t)800) /* LCD PIXEL WIDTH */ |
||||
#define OTM8009A_800X480_HEIGHT ((uint16_t)480) /* LCD PIXEL HEIGHT */ |
||||
|
||||
/**
|
||||
* @brief OTM8009A_480X800 Timing parameters for Portrait orientation mode |
||||
*/ |
||||
#define OTM8009A_480X800_HSYNC ((uint16_t)2) /* Horizontal synchronization */ |
||||
#define OTM8009A_480X800_HBP ((uint16_t)34) /* Horizontal back porch */ |
||||
#define OTM8009A_480X800_HFP ((uint16_t)34) /* Horizontal front porch */ |
||||
#define OTM8009A_480X800_VSYNC ((uint16_t)1) /* Vertical synchronization */ |
||||
#define OTM8009A_480X800_VBP ((uint16_t)15) /* Vertical back porch */ |
||||
#define OTM8009A_480X800_VFP ((uint16_t)16) /* Vertical front porch */ |
||||
|
||||
/**
|
||||
* @brief OTM8009A_800X480 Timing parameters for Landscape orientation mode |
||||
* Same values as for Portrait mode in fact. |
||||
*/ |
||||
#define OTM8009A_800X480_HSYNC OTM8009A_480X800_VSYNC /* Horizontal synchronization */ |
||||
#define OTM8009A_800X480_HBP OTM8009A_480X800_VBP /* Horizontal back porch */ |
||||
#define OTM8009A_800X480_HFP OTM8009A_480X800_VFP /* Horizontal front porch */ |
||||
#define OTM8009A_800X480_VSYNC OTM8009A_480X800_HSYNC /* Vertical synchronization */ |
||||
#define OTM8009A_800X480_VBP OTM8009A_480X800_HBP /* Vertical back porch */ |
||||
#define OTM8009A_800X480_VFP OTM8009A_480X800_HFP /* Vertical front porch */ |
||||
|
||||
|
||||
/* List of OTM8009A used commands */ |
||||
/* Detailed in OTM8009A Data Sheet 'DATA_SHEET_OTM8009A_V0 92.pdf' */ |
||||
/* Version of 14 June 2012 */ |
||||
#define OTM8009A_CMD_NOP 0x00 /* NOP command */ |
||||
#define OTM8009A_CMD_SWRESET 0x01 /* Sw reset command */ |
||||
#define OTM8009A_CMD_RDDMADCTL 0x0B /* Read Display MADCTR command : read memory display access ctrl */ |
||||
#define OTM8009A_CMD_RDDCOLMOD 0x0C /* Read Display pixel format */ |
||||
#define OTM8009A_CMD_SLPIN 0x10 /* Sleep In command */ |
||||
#define OTM8009A_CMD_SLPOUT 0x11 /* Sleep Out command */ |
||||
#define OTM8009A_CMD_PTLON 0x12 /* Partial mode On command */ |
||||
|
||||
#define OTM8009A_CMD_DISPOFF 0x28 /* Display Off command */ |
||||
#define OTM8009A_CMD_DISPON 0x29 /* Display On command */ |
||||
|
||||
#define OTM8009A_CMD_CASET 0x2A /* Column address set command */ |
||||
#define OTM8009A_CMD_PASET 0x2B /* Page address set command */ |
||||
|
||||
#define OTM8009A_CMD_RAMWR 0x2C /* Memory (GRAM) write command */ |
||||
#define OTM8009A_CMD_RAMRD 0x2E /* Memory (GRAM) read command */ |
||||
|
||||
#define OTM8009A_CMD_PLTAR 0x30 /* Partial area command (4 parameters) */ |
||||
|
||||
#define OTM8009A_CMD_TEOFF 0x34 /* Tearing Effect Line Off command : command with no parameter */ |
||||
|
||||
#define OTM8009A_CMD_TEEON 0x35 /* Tearing Effect Line On command : command with 1 parameter 'TELOM' */ |
||||
|
||||
/* Parameter TELOM : Tearing Effect Line Output Mode : possible values */ |
||||
#define OTM8009A_TEEON_TELOM_VBLANKING_INFO_ONLY 0x00 |
||||
#define OTM8009A_TEEON_TELOM_VBLANKING_AND_HBLANKING_INFO 0x01 |
||||
|
||||
#define OTM8009A_CMD_MADCTR 0x36 /* Memory Access write control command */ |
||||
|
||||
/* Possible used values of MADCTR */ |
||||
#define OTM8009A_MADCTR_MODE_PORTRAIT 0x00 |
||||
#define OTM8009A_MADCTR_MODE_LANDSCAPE 0x60 /* MY = 0, MX = 1, MV = 1, ML = 0, RGB = 0 */ |
||||
|
||||
#define OTM8009A_CMD_IDMOFF 0x38 /* Idle mode Off command */ |
||||
#define OTM8009A_CMD_IDMON 0x39 /* Idle mode On command */ |
||||
|
||||
#define OTM8009A_CMD_COLMOD 0x3A /* Interface Pixel format command */ |
||||
|
||||
/* Possible values of COLMOD parameter corresponding to used pixel formats */ |
||||
#define OTM8009A_COLMOD_RGB565 0x55 |
||||
#define OTM8009A_COLMOD_RGB888 0x77 |
||||
|
||||
#define OTM8009A_CMD_RAMWRC 0x3C /* Memory write continue command */ |
||||
#define OTM8009A_CMD_RAMRDC 0x3E /* Memory read continue command */ |
||||
|
||||
#define OTM8009A_CMD_WRTESCN 0x44 /* Write Tearing Effect Scan line command */ |
||||
#define OTM8009A_CMD_RDSCNL 0x45 /* Read Tearing Effect Scan line command */ |
||||
|
||||
/* CABC Management : ie : Content Adaptive Back light Control in IC OTM8009a */ |
||||
#define OTM8009A_CMD_WRDISBV 0x51 /* Write Display Brightness command */ |
||||
#define OTM8009A_CMD_WRCTRLD 0x53 /* Write CTRL Display command */ |
||||
#define OTM8009A_CMD_WRCABC 0x55 /* Write Content Adaptive Brightness command */ |
||||
#define OTM8009A_CMD_WRCABCMB 0x5E /* Write CABC Minimum Brightness command */ |
||||
|
||||
/**
|
||||
* @brief OTM8009A_480X800 frequency divider |
||||
*/ |
||||
#define OTM8009A_480X800_FREQUENCY_DIVIDER 2 /* LCD Frequency divider */ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/* Exported macro ------------------------------------------------------------*/ |
||||
|
||||
/** @defgroup OTM8009A_Exported_Macros OTM8009A Exported Macros
|
||||
* @{ |
||||
*/
|
||||
|
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
/* Exported functions --------------------------------------------------------*/ |
||||
|
||||
/** @addtogroup OTM8009A_Exported_Functions
|
||||
* @{ |
||||
*/ |
||||
void DSI_IO_WriteCmd(uint32_t NbrParams, uint8_t *pParams); |
||||
uint8_t OTM8009A_Init(uint32_t ColorCoding, uint32_t orientation); |
||||
void OTM8009A_IO_Delay(uint32_t Delay); |
||||
/**
|
||||
* @} |
||||
*/ |
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
#endif /* __OTM8009A_480X800_H */ |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@ -0,0 +1,6 @@
|
||||
This software component is provided to you as part of a software package and |
||||
applicable license terms are in the Package_license file. If you received this |
||||
software component outside of a package or without applicable license terms, |
||||
the terms of the BSD-3-Clause license shall apply. |
||||
You may obtain a copy of the BSD-3-Clause at: |
||||
https://opensource.org/licenses/BSD-3-Clause |
@ -0,0 +1,369 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> |
||||
<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns="http://www.w3.org/TR/REC-html40"><head> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> |
||||
|
||||
|
||||
<link rel="File-List" href="Library_files/filelist.xml"> |
||||
|
||||
|
||||
<link rel="Edit-Time-Data" href="Library_files/editdata.mso"><!--[if !mso]> <style> v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VML);} .shape {behavior:url(#default#VML);} </style> <![endif]--><title>Release Notes for STM32469I_Discovery Kit BSP Drivers</title><!--[if gte mso 9]><xml> <o:DocumentProperties> <o:Author>STMicroelectronics</o:Author> <o:LastAuthor>STMicroelectronics</o:LastAuthor> <o:Revision>37</o:Revision> <o:TotalTime>136</o:TotalTime> <o:Created>2009-02-27T19:26:00Z</o:Created> <o:LastSaved>2009-03-01T17:56:00Z</o:LastSaved> <o:Pages>1</o:Pages> <o:Words>522</o:Words> <o:Characters>2977</o:Characters> <o:Company>STMicroelectronics</o:Company> <o:Lines>24</o:Lines> <o:Paragraphs>6</o:Paragraphs> <o:CharactersWithSpaces>3493</o:CharactersWithSpaces> <o:Version>11.6568</o:Version> </o:DocumentProperties> </xml><![endif]--><!--[if gte mso 9]><xml> <w:WordDocument> <w:Zoom>110</w:Zoom> <w:ValidateAgainstSchemas/> <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid> <w:IgnoreMixedContent>false</w:IgnoreMixedContent> <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText> <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel> </w:WordDocument> </xml><![endif]--><!--[if gte mso 9]><xml> <w:LatentStyles DefLockedState="false" LatentStyleCount="156"> </w:LatentStyles> </xml><![endif]--> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<style> |
||||
<!-- |
||||
/* Style Definitions */ |
||||
p.MsoNormal, li.MsoNormal, div.MsoNormal |
||||
{mso-style-parent:""; |
||||
margin:0in; |
||||
margin-bottom:.0001pt; |
||||
mso-pagination:widow-orphan; |
||||
font-size:12.0pt; |
||||
font-family:"Times New Roman"; |
||||
mso-fareast-font-family:"Times New Roman";} |
||||
h2 |
||||
{mso-style-next:Normal; |
||||
margin-top:12.0pt; |
||||
margin-right:0in; |
||||
margin-bottom:3.0pt; |
||||
margin-left:0in; |
||||
mso-pagination:widow-orphan; |
||||
page-break-after:avoid; |
||||
mso-outline-level:2; |
||||
font-size:14.0pt; |
||||
font-family:Arial; |
||||
font-weight:bold; |
||||
font-style:italic;} |
||||
a:link, span.MsoHyperlink |
||||
{color:blue; |
||||
text-decoration:underline; |
||||
text-underline:single;} |
||||
a:visited, span.MsoHyperlinkFollowed |
||||
{color:blue; |
||||
text-decoration:underline; |
||||
text-underline:single;} |
||||
p |
||||
{mso-margin-top-alt:auto; |
||||
margin-right:0in; |
||||
mso-margin-bottom-alt:auto; |
||||
margin-left:0in; |
||||
mso-pagination:widow-orphan; |
||||
font-size:12.0pt; |
||||
font-family:"Times New Roman"; |
||||
mso-fareast-font-family:"Times New Roman";} |
||||
@page Section1 |
||||
{size:8.5in 11.0in; |
||||
margin:1.0in 1.25in 1.0in 1.25in; |
||||
mso-header-margin:.5in; |
||||
mso-footer-margin:.5in; |
||||
mso-paper-source:0;} |
||||
div.Section1 |
||||
{page:Section1;} |
||||
--> |
||||
</style><!--[if gte mso 10]> <style> /* Style Definitions */ table.MsoNormalTable {mso-style-name:"Table Normal"; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-parent:""; mso-padding-alt:0in 5.4pt 0in 5.4pt; mso-para-margin:0in; mso-para-margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:10.0pt; font-family:"Times New Roman"; mso-ansi-language:#0400; mso-fareast-language:#0400; mso-bidi-language:#0400;} </style> <![endif]--><!--[if gte mso 9]><xml> <o:shapedefaults v:ext="edit" spidmax="5122"/> </xml><![endif]--><!--[if gte mso 9]><xml> <o:shapelayout v:ext="edit"> <o:idmap v:ext="edit" data="1"/> </o:shapelayout></xml><![endif]--> |
||||
|
||||
<meta content="MCD Application Team" name="author"></head><body link="blue" vlink="blue"> |
||||
<div class="Section1"> |
||||
<p class="MsoNormal"><span style="font-family: Arial;"><o:p><br> |
||||
</o:p></span></p> |
||||
<div align="center"> |
||||
<table class="MsoNormalTable" style="width: 675pt;" border="0" cellpadding="0" cellspacing="0" width="900"> |
||||
<tbody> |
||||
<tr> |
||||
<td style="padding: 0cm;" valign="top"> |
||||
<table class="MsoNormalTable" style="width: 675pt;" border="0" cellpadding="0" cellspacing="0" width="900"> |
||||
<tbody> |
||||
<tr> |
||||
<td style="vertical-align: top;"> |
||||
<p class="MsoNormal"><span style="font-size: 8pt; font-family: Arial; color: blue;"><a href="../../../Release_Notes.html">Back to Release page</a><o:p></o:p></span></p> |
||||
</td> |
||||
</tr> |
||||
<tr style=""> |
||||
<td style="padding: 1.5pt;"> |
||||
<h1 style="margin-bottom: 18pt; text-align: center;" align="center"><span style="font-size: 20pt; font-family: Verdana; color: rgb(51, 102, 255);">Release |
||||
Notes for STM32469I_Discovery Board Drivers</span><span style="font-size: 20pt; font-family: Verdana;"><o:p></o:p></span></h1> |
||||
<p class="MsoNormal" style="text-align: center;" align="center"><span style="font-size: 10pt; font-family: Arial; color: black;">Copyright |
||||
2017 STMicroelectronics</span><span style="color: black;"><u1:p></u1:p><o:p></o:p></span></p> |
||||
<p class="MsoNormal" style="text-align: center;" align="center"><span style="font-size: 10pt; font-family: Arial; color: black;"><img alt="" id="_x0000_i1025" src="_htmresc/st_logo.png" style="border: 0px solid ; width: 86px; height: 65px;"></span><span style="font-size: 10pt;"><o:p></o:p></span></p> |
||||
</td> |
||||
</tr> |
||||
</tbody> |
||||
</table> |
||||
<p class="MsoNormal"><span style="font-family: Arial; display: none;"><o:p> </o:p></span></p> |
||||
<table class="MsoNormalTable" style="width: 675pt;" border="0" cellpadding="0" width="900"> |
||||
<tbody> |
||||
<tr style=""> |
||||
<td style="padding: 0cm;" valign="top"><span style="font-family: "Times New Roman";"></span><p class="MsoListParagraph" style="text-align: left;"><span style="font-family: "Arial",sans-serif; font-size: 11pt;">The |
||||
BSP (Board Specific Package) drivers are parts of the STM32Cube package |
||||
based on the HAL drivers and provide a set of high level APIs relative |
||||
to the hardware components and features in the evaluation boards, |
||||
discovery kits and nucleo boards coming with the STM32Cube package for |
||||
a given STM32 serie.</span></p><p class="MsoListParagraph" style="text-align: left;"><span style="font-family: "Arial",sans-serif; font-size: 11pt;">The |
||||
BSP drivers allow a quick access to the boards’ services using high |
||||
level APIs and without any specific configuration as the link with the |
||||
HAL and the external components is done in intrinsic within the |
||||
drivers. <br></span></p><p class="MsoListParagraph" style="text-align: left;"><span style="font-family: "Arial",sans-serif; font-size: 11pt;">From |
||||
project settings points of view, user has only to add the necessary |
||||
driver’s files in the workspace and call the needed functions from |
||||
examples. However some low level configuration functions are weak and |
||||
can be overridden by the applications if user wants to change some BSP |
||||
drivers default behavior.</span></p><h2 style="background: rgb(51, 102, 255) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"><span style="font-size: 12pt; color: white;">Update |
||||
History</span></h2> |
||||
|
||||
<h3 style="background: rgb(51, 102, 255) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-right: 500pt; width: 215px;"><span style="font-size: 10pt; font-family: Arial; color: white;">V2.1.1 / 11-February-2022 <o:p></o:p></span></h3> |
||||
|
||||
<b style=""><u><span style="font-size: 10pt; font-family: Verdana; color: black;">Main |
||||
Changes<br></span></u></b> |
||||
<ul style="list-style-type: square;"> |
||||
<li><span style="font-size: 10pt; font-family: Verdana;">All source files: update disclaimer to add reference to the new license agreement</span></li> |
||||
</ul> |
||||
<h3 style="background: rgb(51, 102, 255) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-right: 500pt; width: 215px;"><span style="font-size: 10pt; font-family: Arial; color: white;">V2.1.0 / 11-December-2020 <o:p></o:p></span></h3> |
||||
<b style=""><u><span style="font-size: 10pt; font-family: Verdana; color: black;">Main |
||||
Changes<br></span></u></b><ul style="list-style-type: square;"><li><span style="font-size: 10pt; font-family: Verdana;">Update Drivers to support new LCD controller <span style="font-weight: bold;">NT35510</span>.</span></li></ul><h3 style="background: rgb(51, 102, 255) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-right: 500pt; width: 215px;"><span style="font-size: 10pt; font-family: Arial; color: white;">V2.0.1 / 21-September-2017 <o:p></o:p></span></h3> |
||||
<p class="MsoNormal" style="margin: 4.5pt 0cm 4.5pt 18pt;"><b style=""><u><span style="font-size: 10pt; font-family: Verdana; color: black;">Main |
||||
Changes<o:p></o:p></span></u></b></p> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span><span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
<ul style="list-style-type: square;"><li><span style="font-size: 10pt; font-family: Verdana;">Remove date & version</span></li><li><span style="font-family: Verdana; font-size: 10pt;">Add general description of BSP drivers</span></li><li><span style="font-size: 10pt; font-family: Verdana;">stm32469i_discovery_audio.c/.h:</span></li><ul><li><span style="font-size: 10pt; font-family: Verdana;">Aligned with PDM library v3.0.0 </span></li></ul><li><span style="font-size: 10pt; font-family: Verdana;">stm32469i_discovery_lcd.c:</span></li><ul><li><span style="font-size: 10pt; font-family: Verdana;">Update BSP_LCD_DrawBitmap() API to fix functional misbehaviour with SW4STM32 Toolchain</span></li></ul><li><span style="font-family: Verdana; font-size: 10pt;"><span style="font-style: italic; font-weight: bold; text-decoration: underline;">Notes:</span> <br> |
||||
</span></li><ul><li><span style="font-family: Verdana; font-size: 10pt;">This version must be used with v3.0.0 of PDM library</span></li></ul></ul><h3 style="background: rgb(51, 102, 255) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-right: 500pt; width: 205px;"><span style="font-size: 10pt; font-family: Arial; color: white;">V2.0.0 / 27-January-2017 <o:p></o:p></span></h3> |
||||
|
||||
|
||||
<p class="MsoNormal" style="margin: 4.5pt 0cm 4.5pt 18pt;"><b style=""><u><span style="font-size: 10pt; font-family: Verdana; color: black;">Main |
||||
Changes<o:p></o:p></span></u></b></p> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span><span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
<span style="font-size: 10pt; font-family: Verdana;"></span> |
||||
|
||||
|
||||
<ul style="list-style-type: square;"> |
||||
<li><span style="font-size: 10pt; font-family: Verdana;">stm32469i_discovery_sd.c/.h:</span></li><ul><li><span style="font-size: 10pt; font-family: Verdana;">Update BSP SD APIs </span><span style="font-family: Verdana; font-size: 10pt;">following new HAL SD drivers implementation</span></li><li><span style="font-size: 10pt; font-family: Verdana;">Fix BlockSize to 512 bytes<br> |
||||
</span></li></ul><li><span style="font-size: 10pt; font-family: Verdana;">stm32469i_</span><span style="font-size: 10pt; font-family: Verdana;">discovery</span><span style="font-size: 10pt; font-family: Verdana;">_ts.c/.h:</span></li><ul><li><span style="font-size: 10pt; font-family: Verdana;">Support of FT6336G Touch Screen</span></li></ul><li><span style="font-size: 10pt; font-family: Verdana;">stm32469i_</span><span style="font-size: 10pt; font-family: Verdana;">discovery</span><span style="font-size: 10pt; font-family: Verdana;">_qspi.c/.h:</span></li><ul><li><span style="font-size: 10pt; font-family: Verdana;">QSPI write operation improvement</span></li><li><span style="font-size: 10pt; font-family: Verdana;">Update CS High Time</span></li></ul><li><span style="font-size: 10pt; font-family: Verdana;">stm32469i_</span><span style="font-size: 10pt; font-family: Verdana;">discovery</span><span style="font-size: 10pt; font-family: Verdana;">_sdram.c:</span></li><ul><li><span style="font-size: 10pt; font-family: Verdana;">Update SDRAM RowBitsNumbers and ColumnBitsNumber values to address all 16MB memory size</span><span style="font-size: 10.5pt; font-family: "Helvetica",sans-serif; color: rgb(51, 51, 51);">.</span></li></ul> |
||||
<li><span style="font-size: 10pt; font-family: Verdana;">stm32469i_</span><span style="font-size: 10pt; font-family: Verdana;">discovery</span><span style="font-size: 10pt; font-family: Verdana;">_lcd.c:</span></li> |
||||
<ul> |
||||
<li><span style="font-size: 10pt; font-family: Verdana;">Update BSP_LCD_ReadPixel for ARGB8888 and RGB888 formats</span></li> |
||||
</ul> |
||||
<li><span style="font-size: 10pt; font-family: Verdana;">stm32469i_</span><span style="font-size: 10pt; font-family: Verdana;">discovery</span><span style="font-size: 10pt; font-family: Verdana;">_audio.c:</span></li> |
||||
<ul> |
||||
<li><span style="font-size: 10pt; font-family: Verdana;">Remove static CODEC_Reset API<br> |
||||
</span></li> |
||||
</ul> |
||||
|
||||
<li><span style="font-family: Verdana; font-size: 10pt;"><span style="font-style: italic; font-weight: bold; text-decoration: underline;">Notes:</span> <br> |
||||
</span></li><ul><li><span style="font-family: Verdana; font-size: 10pt;">These</span><span style="font-family: Verdana; font-size: 10pt;"> BSP drivers</span><span style="font-family: Verdana; font-size: 10pt;"> break the compatibility with previous versions.</span></li></ul><ul><li><span style="font-family: Verdana; font-size: 10pt;">If FatFs is required, </span><span style="font-family: Verdana; font-size: 10pt; font-style: italic;">"FatFS R0.11<span class="Apple-converted-space"> </span> </span><span style="font-family: Verdana; font-size: 10pt;"><span style="font-style: italic;">ST modified 20161223"</span><span style="color: red;"><span style="color: black;"></span></span></span><span style="font-family: Verdana; font-size: 10pt;"> must be used with </span><span style="font-family: Verdana; font-size: 10pt;">this version of BSP drivers.</span></li></ul> |
||||
</ul> |
||||
|
||||
<h3 style="background: rgb(51, 102, 255) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-right: 500pt; width: 205px;"><span style="font-size: 10pt; font-family: Arial; color: white;">V1.0.3 / 04-August-2016 <o:p></o:p></span></h3> |
||||
|
||||
|
||||
|
||||
|
||||
<p class="MsoNormal" style="margin: 4.5pt 0cm 4.5pt 18pt;"><b style=""><u><span style="font-size: 10pt; font-family: Verdana; color: black;">Main |
||||
Changes</span></u></b><b style=""><u><span style="font-size: 10pt; font-family: Verdana; color: black;"><o:p></o:p></span></u></b></p> |
||||
|
||||
|
||||
<ul style="margin-top: 0cm;" type="square"> |
||||
<li><span style="font-size: 10pt; font-family: Verdana;">stm32469i_discovery_lcd.c/.h:<br></span></li> |
||||
<ul> |
||||
<li class="MsoNormal" style="margin: 4.5pt 0in; font-size: 12pt; font-family: 'Times New Roman'; color: black;"><span style="font-size: 10pt; font-family: Verdana;">Update DSI initialization<br> |
||||
</span></li><li class="MsoNormal" style="margin: 4.5pt 0in; font-size: 12pt; font-family: 'Times New Roman'; color: black;"><span style="font-size: 10pt; font-family: Verdana;">Update LTDC clock value</span></li><li class="MsoNormal" style="margin: 4.5pt 0in; font-size: 12pt; font-family: 'Times New Roman'; color: black;"><span style="font-size: 10pt; font-family: Verdana;">Update LCD_DSI_PIXEL_DATA_FMT_RBG888 and LCD_DSI_PIXEL_DATA_FMT_RBG565 values</span></li> |
||||
</ul> |
||||
</ul><h3 style="background: rgb(51, 102, 255) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-right: 500pt; width: 205px;"><span style="font-size: 10pt; font-family: Arial; color: white;">V1.0.2 / |
||||
13-January-2016 <o:p></o:p></span></h3> |
||||
|
||||
<p class="MsoNormal" style="margin: 4.5pt 0cm 4.5pt 18pt;"><b style=""><u><span style="font-size: 10pt; font-family: Verdana; color: black;">Main |
||||
Changes</span></u></b><b style=""><u><span style="font-size: 10pt; font-family: Verdana; color: black;"><o:p></o:p></span></u></b></p> |
||||
<ul style="margin-top: 0cm;" type="square"> |
||||
<li class="MsoNormal" style="margin: 4.5pt 0in; font-size: 12pt; font-family: 'Times New Roman'; color: black;"><span style="color: rgb(0, 0, 0); font-family: Verdana,sans-serif; font-size: 13.3333px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: 1; word-spacing: 0px; display: inline ! important; float: none;">General updates |
||||
to fix doxygen errors</span><span style="font-size: 10pt; font-family: Verdana;"></span></li> |
||||
<li class="MsoNormal" style="margin: 4.5pt 0in; font-size: 12pt; font-family: 'Times New Roman'; color: black;"><span style="font-size: 10pt; font-family: Verdana;">Add |
||||
STM32F469I-Discovery_BSP_User_Manual.chm file</span></li> |
||||
<li><span style="font-size: 10pt; font-family: Verdana;">stm32469i_discovery_audio.c</span></li> |
||||
<ul> |
||||
<li class="MsoNormal" style="color: black; margin-top: 4.5pt; margin-bottom: 4.5pt;"><span style="font-size: 10pt; font-family: Verdana;">Alignement with |
||||
STM32F4xx_HAL_Driver V1.4.4</span><span style="font-size: 10pt; font-family: Verdana;"> </span></li> |
||||
</ul> |
||||
<li><span style="font-size: 10pt; font-family: Verdana;">stm32469i_discovery_qspi.c</span></li> |
||||
<ul> |
||||
<li class="MsoNormal" style="color: black; margin-top: 4.5pt; margin-bottom: 4.5pt;"><span style="font-size: 10pt; font-family: Verdana;">Desactivate Timeout in |
||||
memory mapped mode</span></li> |
||||
<li class="MsoNormal" style="color: black; margin-top: 4.5pt; margin-bottom: 4.5pt;"><span style="font-size: 10pt; font-family: Verdana;">Rename |
||||
BSP_QSPI_MemoryMappedMode() API to BSP_QSPI_EnableMemoryMappedMode() |
||||
API </span></li> |
||||
</ul> |
||||
<li><span style="font-size: 10pt; font-family: Verdana;">stm32469i_discovery_lcd.c</span></li> |
||||
<ul> |
||||
<li class="MsoNormal" style="color: black; margin-top: 4.5pt; margin-bottom: 4.5pt;"><span style="font-size: 10pt; font-family: Verdana;">BSP_LCD_InitEx() API |
||||
updated to remove use of intermediate variable Clockratio and improve |
||||
calculation granularity</span><br> |
||||
<span style="font-size: 10pt; font-family: Arial; color: white;"></span></li> |
||||
</ul> |
||||
</ul> |
||||
<h3 style="background: rgb(51, 102, 255) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-right: 500pt; width: 220px;"><span style="font-size: 10pt; font-family: Arial; color: white;">V1.0.1 / |
||||
29-September-2015</span></h3> |
||||
<p class="MsoNormal" style="margin: 4.5pt 0cm 4.5pt 18pt;"><b style=""><u><span style="font-size: 10pt; font-family: Verdana; color: black;">Main |
||||
Changes<o:p></o:p></span></u></b></p> |
||||
<ul style="margin-top: 0cm;" type="square"> |
||||
<li class="MsoNormal"><span style="font-size: 10pt; font-family: Verdana;">stm32469i_discovery_lcd.c |
||||
update:</span></li> |
||||
<ul> |
||||
<li class="MsoNormal"><span style="font-size: 10pt; font-family: Verdana;">Add delay |
||||
within BSP_LCD_Reset() function </span></li> |
||||
</ul> |
||||
</ul> |
||||
<h3 style="background: rgb(51, 102, 255) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-right: 500pt; width: 200px;"><span style="font-size: 10pt; font-family: Arial; color: white;">V1.0.0 / |
||||
14-Augusty-2015</span></h3><p class="MsoNormal" style="margin: 4.5pt 0cm 4.5pt 18pt;"><b style=""><u><span style="font-size: 10pt; font-family: Verdana; color: black;">Main |
||||
Changes<o:p></o:p></span></u></b></p> |
||||
<ul style="margin-top: 0cm;" type="square"> |
||||
<li class="MsoNormal"><span style="font-size: 10pt; font-family: Verdana;">First official Release </span><span style="font-size: 10pt; font-family: Verdana;"><span style="font-weight: bold; font-style: italic;"></span></span><span style="font-size: 10pt; font-family: Verdana;">for <span style="font-weight: bold; font-style: italic;">STM32469I_Discovery</span> |
||||
board drivers.</span></li> |
||||
</ul><div style="text-align: justify;"><span style="font-family: "Verdana","sans-serif";"></span></div> |
||||
<span style="font-size: 10pt; font-family: "Verdana","sans-serif"; color: black;"></span> |
||||
<b><span style="font-size: 10pt; font-family: Verdana; color: black;"></span></b> |
||||
<div class="MsoNormal" style="text-align: center;" align="center"><span style="color: black;"> |
||||
<hr align="center" size="2" width="100%"></span></div> |
||||
<p class="MsoNormal" style="margin: 4.5pt 0cm 4.5pt 18pt; text-align: center;" align="center"><span style="font-size: 10pt; font-family: Verdana; color: black;">For |
||||
complete documentation on </span><span style="font-size: 10pt; font-family: Verdana;">STM32<span style="color: black;"> Microcontrollers |
||||
visit </span><u><span style="color: blue;"><a href="http://www.st.com/internet/mcu/class/1734.jsp" target="_blank">www.st.com/STM32</a></span></u></span><span style="font-size: 10pt; font-family: Verdana;"><a target="_blank" href="http://www.st.com/internet/mcu/family/141.jsp"><u><span style="color: blue;"></span></u></a></span><span style="font-size: 10pt; font-family: Verdana;"><u><span style="color: blue;"></span></u></span><span style="color: black;"><o:p></o:p></span></p> |
||||
</td> |
||||
</tr> |
||||
</tbody> |
||||
</table> |
||||
<p class="MsoNormal"><span style="font-size: 10pt;"><o:p></o:p></span></p> |
||||
</td> |
||||
</tr> |
||||
</tbody> |
||||
</table> |
||||
</div> |
||||
<p class="MsoNormal"><o:p> </o:p></p> |
||||
</div> |
||||
|
||||
</body></html> |
Binary file not shown.
File diff suppressed because it is too large
Load Diff
After Width: | Height: | Size: 18 KiB |
@ -0,0 +1,943 @@
|
||||
/**
|
||||
****************************************************************************** |
||||
* @file stm32469i_discovery.c |
||||
* @author MCD Application Team |
||||
* @brief This file provides a set of firmware functions to manage LEDs, |
||||
* push-buttons, external SDRAM, external QSPI Flash, RF EEPROM, |
||||
* available on STM32469I-Discovery |
||||
* board (MB1189) RevA/B/C from STMicroelectronics. |
||||
****************************************************************************** |
||||
* @attention |
||||
* |
||||
* Copyright (c) 2017 STMicroelectronics. |
||||
* All rights reserved. |
||||
* |
||||
* This software is licensed under terms that can be found in the LICENSE file |
||||
* in the root directory of this software component. |
||||
* If no LICENSE file comes with this software, it is provided AS-IS. |
||||
* |
||||
****************************************************************************** |
||||
*/ |
||||
|
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include "stm32469i_discovery.h" |
||||
|
||||
/** @defgroup BSP BSP
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @defgroup STM32469I_Discovery STM32469I Discovery
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @defgroup STM32469I_Discovery_LOW_LEVEL STM32469I Discovery LOW LEVEL
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @defgroup STM32469I_Discovery_LOW_LEVEL_Private_TypesDefinitions STM32469I Discovery LOW LEVEL Private TypesDefinitions
|
||||
* @{ |
||||
*/ |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup STM32469I_Discovery_LOW_LEVEL_Private_Defines STM32469I Discovery LOW LEVEL Private Defines
|
||||
* @{ |
||||
*/ |
||||
/**
|
||||
* @brief STM32469I Discovery BSP Driver version number V2.1.1 |
||||
*/ |
||||
#define __STM32469I_DISCOVERY_BSP_VERSION_MAIN (0x02) /*!< [31:24] main version */ |
||||
#define __STM32469I_DISCOVERY_BSP_VERSION_SUB1 (0x01) /*!< [23:16] sub1 version */ |
||||
#define __STM32469I_DISCOVERY_BSP_VERSION_SUB2 (0x01) /*!< [15:8] sub2 version */ |
||||
#define __STM32469I_DISCOVERY_BSP_VERSION_RC (0x00) /*!< [7:0] release candidate */ |
||||
#define __STM32469I_DISCOVERY_BSP_VERSION ((__STM32469I_DISCOVERY_BSP_VERSION_MAIN << 24)\ |
||||
|(__STM32469I_DISCOVERY_BSP_VERSION_SUB1 << 16)\
|
||||
|(__STM32469I_DISCOVERY_BSP_VERSION_SUB2 << 8 )\
|
||||
|(__STM32469I_DISCOVERY_BSP_VERSION_RC)) |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup STM32469I_Discovery_LOW_LEVEL_Private_Macros STM32469I Discovery LOW LEVEL Private Macros
|
||||
* @{ |
||||
*/ |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup STM32469I_Discovery_LOW_LEVEL_Private_Variables STM32469I Discovery LOW LEVEL Private Variables
|
||||
* @{ |
||||
*/ |
||||
uint32_t GPIO_PIN[LEDn] = {LED1_PIN, |
||||
LED2_PIN, |
||||
LED3_PIN, |
||||
LED4_PIN}; |
||||
|
||||
GPIO_TypeDef* GPIO_PORT[LEDn] = {LED1_GPIO_PORT, |
||||
LED2_GPIO_PORT, |
||||
LED3_GPIO_PORT, |
||||
LED4_GPIO_PORT}; |
||||
|
||||
GPIO_TypeDef* BUTTON_PORT[BUTTONn] = {WAKEUP_BUTTON_GPIO_PORT }; |
||||
|
||||
const uint16_t BUTTON_PIN[BUTTONn] = {WAKEUP_BUTTON_PIN }; |
||||
|
||||
const uint16_t BUTTON_IRQn[BUTTONn] = {WAKEUP_BUTTON_EXTI_IRQn }; |
||||
|
||||
|
||||
static I2C_HandleTypeDef heval_I2c1; |
||||
static I2C_HandleTypeDef heval_I2c2; |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup STM32469I_Discovery_LOW_LEVEL_Private_FunctionPrototypes STM32469I Discovery LOW LEVEL Private FunctionPrototypes
|
||||
* @{ |
||||
*/ |
||||
static void I2C1_MspInit(void); |
||||
static void I2C2_MspInit(void); |
||||
static void I2C1_Init(void); |
||||
static void I2C2_Init(void); |
||||
|
||||
#if defined(USE_IOEXPANDER) |
||||
static void I2C1_Write(uint8_t Addr, uint8_t Reg, uint8_t Value); |
||||
static uint8_t I2C1_Read(uint8_t Addr, uint8_t Reg); |
||||
#endif /* USE_IOEXPANDER */ |
||||
static HAL_StatusTypeDef I2C1_ReadMultiple(uint8_t Addr, uint16_t Reg, uint16_t MemAddSize, uint8_t *Buffer, uint16_t Length); |
||||
static HAL_StatusTypeDef I2C2_ReadMultiple(uint8_t Addr, uint16_t Reg, uint16_t MemAddSize, uint8_t *Buffer, uint16_t Length); |
||||
static HAL_StatusTypeDef I2C1_WriteMultiple(uint8_t Addr, uint16_t Reg, uint16_t MemAddSize, uint8_t *Buffer, uint16_t Length); |
||||
static HAL_StatusTypeDef I2C2_WriteMultiple(uint8_t Addr, uint16_t Reg, uint16_t MemAddSize, uint8_t *Buffer, uint16_t Length); |
||||
static HAL_StatusTypeDef I2C1_IsDeviceReady(uint16_t DevAddress, uint32_t Trials); |
||||
static void I2C1_Error(uint8_t Addr); |
||||
static void I2C2_Error(uint8_t Addr); |
||||
|
||||
/* AUDIO IO functions */ |
||||
void AUDIO_IO_Init(void); |
||||
void AUDIO_IO_DeInit(void); |
||||
void AUDIO_IO_Write(uint8_t Addr, uint8_t Reg, uint8_t Value); |
||||
uint8_t AUDIO_IO_Read(uint8_t Addr, uint8_t Reg); |
||||
void AUDIO_IO_Delay(uint32_t Delay); |
||||
|
||||
|
||||
/* I2C EEPROM IO function */ |
||||
void EEPROM_IO_Init(void); |
||||
HAL_StatusTypeDef EEPROM_IO_WriteData(uint16_t DevAddress, uint16_t MemAddress, uint8_t* pBuffer, uint32_t BufferSize); |
||||
HAL_StatusTypeDef EEPROM_IO_ReadData(uint16_t DevAddress, uint16_t MemAddress, uint8_t* pBuffer, uint32_t BufferSize); |
||||
HAL_StatusTypeDef EEPROM_IO_IsDeviceReady(uint16_t DevAddress, uint32_t Trials); |
||||
|
||||
/* TouchScreen (TS) IO functions */ |
||||
void TS_IO_Init(void); |
||||
void TS_IO_Write(uint8_t Addr, uint8_t Reg, uint8_t Value); |
||||
uint8_t TS_IO_Read(uint8_t Addr, uint8_t Reg); |
||||
uint16_t TS_IO_ReadMultiple(uint8_t Addr, uint8_t Reg, uint8_t *Buffer, uint16_t Length); |
||||
void TS_IO_WriteMultiple(uint8_t Addr, uint8_t Reg, uint8_t *Buffer, uint16_t Length); |
||||
void TS_IO_Delay(uint32_t Delay); |
||||
void OTM8009A_IO_Delay(uint32_t Delay); |
||||
void NT35510_IO_Delay(uint32_t Delay); |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup STM32469I_Discovery_BSP_Public_Functions STM32469I Discovery BSP Public Functions
|
||||
* @{ |
||||
*/ |
||||
|
||||
/**
|
||||
* @brief This method returns the STM32469I Discovery BSP Driver revision |
||||
* @retval version: 0xXYZR (8bits for each decimal, R for RC) |
||||
*/ |
||||
uint32_t BSP_GetVersion(void) |
||||
{ |
||||
return __STM32469I_DISCOVERY_BSP_VERSION; |
||||
} |
||||
|
||||
/**
|
||||
* @brief Configures LED GPIO. |
||||
* @param Led: LED to be configured. |
||||
* This parameter can be one of the following values: |
||||
* @arg LED1 |
||||
* @arg LED2 |
||||
* @arg LED3 |
||||
* @arg LED4 |
||||
*/ |
||||
void BSP_LED_Init(Led_TypeDef Led) |
||||
{ |
||||
GPIO_InitTypeDef gpio_init_structure; |
||||
|
||||
if (Led <= LED4) |
||||
{ |
||||
/* Configure the GPIO_LED pin */ |
||||
gpio_init_structure.Pin = GPIO_PIN[Led]; |
||||
gpio_init_structure.Mode = GPIO_MODE_OUTPUT_PP; |
||||
gpio_init_structure.Pull = GPIO_PULLUP; |
||||
gpio_init_structure.Speed = GPIO_SPEED_HIGH; |
||||
|
||||
switch(Led) |
||||
{ |
||||
case LED1 : |
||||
LED1_GPIO_CLK_ENABLE(); |
||||
break; |
||||
case LED2 : |
||||
LED2_GPIO_CLK_ENABLE(); |
||||
break; |
||||
case LED3 : |
||||
LED3_GPIO_CLK_ENABLE(); |
||||
break; |
||||
case LED4 : |
||||
LED4_GPIO_CLK_ENABLE(); |
||||
break; |
||||
default : |
||||
break; |
||||
|
||||
} /* end switch */ |
||||
|
||||
HAL_GPIO_Init(GPIO_PORT[Led], &gpio_init_structure); |
||||
|
||||
/* By default, turn off LED by setting a high level on corresponding GPIO */ |
||||
HAL_GPIO_WritePin(GPIO_PORT[Led], GPIO_PIN[Led], GPIO_PIN_SET); |
||||
|
||||
} /* of if (Led <= LED4) */ |
||||
|
||||
} |
||||
|
||||
|
||||
/**
|
||||
* @brief DeInit LEDs. |
||||
* @param Led: LED to be configured. |
||||
* This parameter can be one of the following values: |
||||
* @arg LED1 |
||||
* @arg LED2 |
||||
* @arg LED3 |
||||
* @arg LED4 |
||||
* @note Led DeInit does not disable the GPIO clock nor disable the Mfx |
||||
*/ |
||||
void BSP_LED_DeInit(Led_TypeDef Led) |
||||
{ |
||||
GPIO_InitTypeDef gpio_init_structure; |
||||
|
||||
if (Led <= LED4) |
||||
{ |
||||
/* DeInit the GPIO_LED pin */ |
||||
gpio_init_structure.Pin = GPIO_PIN[Led]; |
||||
|
||||
/* Turn off LED */ |
||||
HAL_GPIO_WritePin(GPIO_PORT[Led], GPIO_PIN[Led], GPIO_PIN_SET); |
||||
HAL_GPIO_DeInit(GPIO_PORT[Led], gpio_init_structure.Pin); |
||||
} |
||||
|
||||
} |
||||
|
||||
/**
|
||||
* @brief Turns selected LED On. |
||||
* @param Led: LED to be set on |
||||
* This parameter can be one of the following values: |
||||
* @arg LED1 |
||||
* @arg LED2 |
||||
* @arg LED3 |
||||
* @arg LED4 |
||||
*/ |
||||
void BSP_LED_On(Led_TypeDef Led) |
||||
{ |
||||
if (Led <= LED4) |
||||
{ |
||||
HAL_GPIO_WritePin(GPIO_PORT[Led], GPIO_PIN[Led], GPIO_PIN_RESET); |
||||
} |
||||
|
||||
} |
||||
|
||||
/**
|
||||
* @brief Turns selected LED Off. |
||||
* @param Led: LED to be set off |
||||
* This parameter can be one of the following values: |
||||
* @arg LED1 |
||||
* @arg LED2 |
||||
* @arg LED3 |
||||
* @arg LED4 |
||||
*/ |
||||
void BSP_LED_Off(Led_TypeDef Led) |
||||
{ |
||||
if (Led <= LED4) |
||||
{ |
||||
HAL_GPIO_WritePin(GPIO_PORT[Led], GPIO_PIN[Led], GPIO_PIN_SET); |
||||
} |
||||
} |
||||
|
||||
/**
|
||||
* @brief Toggles the selected LED. |
||||
* @param Led: LED to be toggled |
||||
* This parameter can be one of the following values: |
||||
* @arg LED1 |
||||
* @arg LED2 |
||||
* @arg LED3 |
||||
* @arg LED4 |
||||
*/ |
||||
void BSP_LED_Toggle(Led_TypeDef Led) |
||||
{ |
||||
if (Led <= LED4) |
||||
{ |
||||
HAL_GPIO_TogglePin(GPIO_PORT[Led], GPIO_PIN[Led]); |
||||
} |
||||
} |
||||
|
||||
/**
|
||||
* @brief Configures button GPIO and EXTI Line. |
||||
* @param Button: Button to be configured |
||||
* This parameter can be one of the following values: |
||||
* @arg BUTTON_WAKEUP: Wakeup Push Button |
||||
* @arg BUTTON_USER: User Push Button |
||||
* @param Button_Mode: Button mode |
||||
* This parameter can be one of the following values: |
||||
* @arg BUTTON_MODE_GPIO: Button will be used as simple IO |
||||
* @arg BUTTON_MODE_EXTI: Button will be connected to EXTI line |
||||
* with interrupt generation capability |
||||
*/ |
||||
void BSP_PB_Init(Button_TypeDef Button, ButtonMode_TypeDef Button_Mode) |
||||
{ |
||||
GPIO_InitTypeDef gpio_init_structure; |
||||
|
||||
/* Enable the BUTTON clock */ |
||||
BUTTON_GPIO_CLK_ENABLE(); |
||||
|
||||
if(Button_Mode == BUTTON_MODE_GPIO) |
||||
{ |
||||
/* Configure Button pin as input */ |
||||
gpio_init_structure.Pin = BUTTON_PIN[Button]; |
||||
gpio_init_structure.Mode = GPIO_MODE_INPUT; |
||||
gpio_init_structure.Pull = GPIO_NOPULL; |
||||
gpio_init_structure.Speed = GPIO_SPEED_FAST; |
||||
HAL_GPIO_Init(BUTTON_PORT[Button], &gpio_init_structure); |
||||
} |
||||
|
||||
if(Button_Mode == BUTTON_MODE_EXTI) |
||||
{ |
||||
/* Configure Button pin as input with External interrupt */ |
||||
gpio_init_structure.Pin = BUTTON_PIN[Button]; |
||||
gpio_init_structure.Pull = GPIO_NOPULL; |
||||
gpio_init_structure.Speed = GPIO_SPEED_FAST; |
||||
|
||||
gpio_init_structure.Mode = GPIO_MODE_IT_RISING; |
||||
|
||||
HAL_GPIO_Init(BUTTON_PORT[Button], &gpio_init_structure); |
||||
|
||||
/* Enable and set Button EXTI Interrupt to the lowest priority */ |
||||
HAL_NVIC_SetPriority((IRQn_Type)(BUTTON_IRQn[Button]), 0x0F, 0x00); |
||||
HAL_NVIC_EnableIRQ((IRQn_Type)(BUTTON_IRQn[Button])); |
||||
} |
||||
} |
||||
|
||||
/**
|
||||
* @brief Push Button DeInit. |
||||
* @param Button: Button to be configured |
||||
* This parameter can be one of the following values: |
||||
* @arg BUTTON_WAKEUP: Wakeup Push Button |
||||
* @arg BUTTON_USER: User Push Button |
||||
* @note PB DeInit does not disable the GPIO clock |
||||
*/ |
||||
void BSP_PB_DeInit(Button_TypeDef Button) |
||||
{ |
||||
GPIO_InitTypeDef gpio_init_structure; |
||||
|
||||
gpio_init_structure.Pin = BUTTON_PIN[Button]; |
||||
HAL_NVIC_DisableIRQ((IRQn_Type)(BUTTON_IRQn[Button])); |
||||
HAL_GPIO_DeInit(BUTTON_PORT[Button], gpio_init_structure.Pin); |
||||
} |
||||
|
||||
|
||||
/**
|
||||
* @brief Returns the selected button state. |
||||
* @param Button: Button to be checked |
||||
* This parameter can be one of the following values: |
||||
* @arg BUTTON_WAKEUP: Wakeup Push Button |
||||
* @arg BUTTON_USER: User Push Button |
||||
* @retval The Button GPIO pin value |
||||
*/ |
||||
uint32_t BSP_PB_GetState(Button_TypeDef Button) |
||||
{ |
||||
return HAL_GPIO_ReadPin(BUTTON_PORT[Button], BUTTON_PIN[Button]); |
||||
} |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup STM32469I_Discovery_LOW_LEVEL_Private_Functions STM32469I Discovery LOW LEVEL Private Functions
|
||||
* @{ |
||||
*/ |
||||
|
||||
|
||||
/*******************************************************************************
|
||||
BUS OPERATIONS |
||||
*******************************************************************************/ |
||||
|
||||
/******************************* I2C Routines *********************************/ |
||||
/**
|
||||
* @brief Initializes I2C MSP. |
||||
*/ |
||||
static void I2C1_MspInit(void) |
||||
{ |
||||
GPIO_InitTypeDef gpio_init_structure; |
||||
|
||||
/*** Configure the GPIOs ***/ |
||||
/* Enable GPIO clock */ |
||||
DISCO_I2C1_SCL_SDA_GPIO_CLK_ENABLE(); |
||||
|
||||
#if defined(USE_STM32469I_DISCO_REVC) |
||||
/* Perform 10 pulses on SCL to unlock I2C devices if previous I2C transaction aborted.*/ |
||||
/* This configuration is needed with STM32F469i Disco RevC when using touch screen controller FT6336U */ |
||||
gpio_init_structure.Pin = DISCO_I2C1_SCL_PIN; |
||||
gpio_init_structure.Mode = GPIO_MODE_OUTPUT_OD; |
||||
gpio_init_structure.Pull = GPIO_NOPULL; |
||||
gpio_init_structure.Speed = GPIO_SPEED_FAST; |
||||
gpio_init_structure.Alternate = 0; |
||||
HAL_GPIO_Init( DISCO_I2C1_SCL_SDA_GPIO_PORT, &gpio_init_structure ); |
||||
for(uint8_t count = 10; count > 0; count-- ) |
||||
{ |
||||
HAL_GPIO_WritePin( DISCO_I2C1_SCL_SDA_GPIO_PORT, DISCO_I2C1_SCL_PIN, GPIO_PIN_SET ); |
||||
HAL_Delay(1); |
||||
HAL_GPIO_WritePin( DISCO_I2C1_SCL_SDA_GPIO_PORT, DISCO_I2C1_SCL_PIN, GPIO_PIN_RESET ); |
||||
HAL_Delay(1); |
||||
} |
||||
#endif /* USE_STM32469I_DISCO_REVC */ |
||||
|
||||
/* Configure I2C Tx as alternate function */ |
||||
gpio_init_structure.Pin = DISCO_I2C1_SCL_PIN; |
||||
gpio_init_structure.Mode = GPIO_MODE_AF_OD; |
||||
gpio_init_structure.Pull = GPIO_NOPULL; |
||||
gpio_init_structure.Speed = GPIO_SPEED_FAST; |
||||
gpio_init_structure.Alternate = DISCO_I2C1_SCL_SDA_AF; |
||||
HAL_GPIO_Init(DISCO_I2C1_SCL_SDA_GPIO_PORT, &gpio_init_structure); |
||||
|
||||
/* Configure I2C Rx as alternate function */ |
||||
gpio_init_structure.Pin = DISCO_I2C1_SDA_PIN; |
||||
HAL_GPIO_Init(DISCO_I2C1_SCL_SDA_GPIO_PORT, &gpio_init_structure); |
||||
|
||||
/*** Configure the I2C peripheral ***/ |
||||
/* Enable I2C clock */ |
||||
DISCO_I2C1_CLK_ENABLE(); |
||||
|
||||
/* Force the I2C peripheral clock reset */ |
||||
DISCO_I2C1_FORCE_RESET(); |
||||
|
||||
/* Release the I2C peripheral clock reset */ |
||||
DISCO_I2C1_RELEASE_RESET(); |
||||
|
||||
/* Enable and set I2C1 Interrupt to a lower priority */ |
||||
HAL_NVIC_SetPriority(DISCO_I2C1_EV_IRQn, 0x05, 0); |
||||
HAL_NVIC_EnableIRQ(DISCO_I2C1_EV_IRQn); |
||||
|
||||
/* Enable and set I2C1 Interrupt to a lower priority */ |
||||
HAL_NVIC_SetPriority(DISCO_I2C1_ER_IRQn, 0x05, 0); |
||||
HAL_NVIC_EnableIRQ(DISCO_I2C1_ER_IRQn); |
||||
} |
||||
|
||||
/**
|
||||
* @brief Initializes I2C MSP. |
||||
*/ |
||||
static void I2C2_MspInit(void) |
||||
{ |
||||
GPIO_InitTypeDef gpio_init_structure; |
||||
|
||||
/*** Configure the GPIOs ***/ |
||||
/* Enable GPIO clock */ |
||||
DISCO_I2C2_SCL_SDA_GPIO_CLK_ENABLE(); |
||||
|
||||
/* Configure I2C Tx as alternate function */ |
||||
gpio_init_structure.Pin = DISCO_I2C2_SCL_PIN; |
||||
gpio_init_structure.Mode = GPIO_MODE_AF_OD; |
||||
gpio_init_structure.Pull = GPIO_NOPULL; |
||||
gpio_init_structure.Speed = GPIO_SPEED_FAST; |
||||
gpio_init_structure.Alternate = DISCO_I2C2_SCL_SDA_AF; |
||||
HAL_GPIO_Init(DISCO_I2C2_SCL_SDA_GPIO_PORT, &gpio_init_structure); |
||||
|
||||
/* Configure I2C Rx as alternate function */ |
||||
gpio_init_structure.Pin = DISCO_I2C2_SDA_PIN; |
||||
HAL_GPIO_Init(DISCO_I2C2_SCL_SDA_GPIO_PORT, &gpio_init_structure); |
||||
|
||||
/*** Configure the I2C peripheral ***/ |
||||
/* Enable I2C clock */ |
||||
DISCO_I2C2_CLK_ENABLE(); |
||||
|
||||
/* Force the I2C peripheral clock reset */ |
||||
DISCO_I2C2_FORCE_RESET(); |
||||
|
||||
/* Release the I2C peripheral clock reset */ |
||||
DISCO_I2C2_RELEASE_RESET(); |
||||
|
||||
/* Enable and set I2C1 Interrupt to a lower priority */ |
||||
HAL_NVIC_SetPriority(DISCO_I2C2_EV_IRQn, 0x05, 0); |
||||
HAL_NVIC_EnableIRQ(DISCO_I2C2_EV_IRQn); |
||||
|
||||
/* Enable and set I2C1 Interrupt to a lower priority */ |
||||
HAL_NVIC_SetPriority(DISCO_I2C2_ER_IRQn, 0x05, 0); |
||||
HAL_NVIC_EnableIRQ(DISCO_I2C2_ER_IRQn); |
||||
} |
||||
|
||||
/**
|
||||
* @brief Initializes I2C HAL. |
||||
*/ |
||||
static void I2C1_Init(void) |
||||
{ |
||||
if(HAL_I2C_GetState(&heval_I2c1) == HAL_I2C_STATE_RESET) |
||||
{ |
||||
heval_I2c1.Instance = I2C1; |
||||
heval_I2c1.Init.ClockSpeed = I2C1_SCL_FREQ_KHZ; |
||||
heval_I2c1.Init.DutyCycle = I2C_DUTYCYCLE_2; |
||||
heval_I2c1.Init.OwnAddress1 = 0; |
||||
heval_I2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT; |
||||
heval_I2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE; |
||||
heval_I2c1.Init.OwnAddress2 = 0; |
||||
heval_I2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE; |
||||
heval_I2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE; |
||||
|
||||
/* Init the I2C */ |
||||
I2C1_MspInit(); |
||||
HAL_I2C_Init(&heval_I2c1); |
||||
} |
||||
} |
||||
|
||||
/**
|
||||
* @brief Initializes I2C HAL. |
||||
*/ |
||||
static void I2C2_Init(void) |
||||
{ |
||||
if(HAL_I2C_GetState(&heval_I2c2) == HAL_I2C_STATE_RESET) |
||||
{ |
||||
heval_I2c2.Instance = I2C2; |
||||
heval_I2c2.Init.ClockSpeed = I2C2_SCL_FREQ_KHZ; |
||||
heval_I2c2.Init.DutyCycle = I2C_DUTYCYCLE_2; |
||||
heval_I2c2.Init.OwnAddress1 = 0; |
||||
heval_I2c2.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT; |
||||
heval_I2c2.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE; |
||||
heval_I2c2.Init.OwnAddress2 = 0; |
||||
heval_I2c2.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE; |
||||
heval_I2c2.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE; |
||||
|
||||
/* Init the I2C */ |
||||
I2C2_MspInit(); |
||||
HAL_I2C_Init(&heval_I2c2); |
||||
} |
||||
} |
||||
|
||||
/**
|
||||
* @brief Writes a single data. |
||||
* @param Addr: I2C address |
||||
* @param Reg: Register address |
||||
* @param Value: Data to be written |
||||
*/ |
||||
static void I2C1_Write(uint8_t Addr, uint8_t Reg, uint8_t Value) |
||||
{ |
||||
HAL_StatusTypeDef status = HAL_OK; |
||||
|
||||
status = HAL_I2C_Mem_Write(&heval_I2c1, |
||||
Addr, |
||||
(uint16_t)Reg, |
||||
I2C_MEMADD_SIZE_8BIT, |
||||
&Value, |
||||
1, |
||||
100); |
||||
|
||||
/* Check the communication status */ |
||||
if(status != HAL_OK) |
||||
{ |
||||
/* Execute user timeout callback */ |
||||
I2C1_Error(Addr); |
||||
} |
||||
} |
||||
|
||||
/**
|
||||
* @brief Reads a single data. |
||||
* @param Addr: I2C address |
||||
* @param Reg: Register address |
||||
* @retval Read data |
||||
*/ |
||||
static uint8_t I2C1_Read(uint8_t Addr, uint8_t Reg) |
||||
{ |
||||
HAL_StatusTypeDef status = HAL_OK; |
||||
uint8_t Value = 0; |
||||
|
||||
status = HAL_I2C_Mem_Read(&heval_I2c1, |
||||
Addr, |
||||
Reg, |
||||
I2C_MEMADD_SIZE_8BIT, |
||||
&Value, |
||||
1, |
||||
1000); |
||||
|
||||
/* Check the communication status */ |
||||
if(status != HAL_OK) |
||||
{ |
||||
/* Execute user timeout callback */ |
||||
I2C1_Error(Addr); |
||||
} |
||||
return Value; |
||||
} |
||||
|
||||
/**
|
||||
* @brief Reads multiple data. |
||||
* @param Addr: I2C address |
||||
* @param Reg: Reg address |
||||
* @param MemAddress: memory address |
||||
* @param Buffer: Pointer to data buffer |
||||
* @param Length: Length of the data |
||||
* @retval HAL status |
||||
*/ |
||||
static HAL_StatusTypeDef I2C1_ReadMultiple(uint8_t Addr, |
||||
uint16_t Reg, |
||||
uint16_t MemAddress, |
||||
uint8_t *Buffer, |
||||
uint16_t Length) |
||||
{ |
||||
HAL_StatusTypeDef status = HAL_OK; |
||||
|
||||
status = HAL_I2C_Mem_Read(&heval_I2c1, |
||||
Addr, |
||||
(uint16_t)Reg, |
||||
MemAddress, |
||||
Buffer, |
||||
Length, |
||||
1000); |
||||
|
||||
/* Check the communication status */ |
||||
if(status != HAL_OK) |
||||
{ |
||||
/* I2C error occured */ |
||||
I2C1_Error(Addr); |
||||
} |
||||
return status; |
||||
} |
||||
|
||||
static HAL_StatusTypeDef I2C2_ReadMultiple(uint8_t Addr, |
||||
uint16_t Reg, |
||||
uint16_t MemAddress, |
||||
uint8_t *Buffer, |
||||
uint16_t Length) |
||||
{ |
||||
HAL_StatusTypeDef status = HAL_OK; |
||||
|
||||
status = HAL_I2C_Mem_Read(&heval_I2c2, |
||||
Addr, |
||||
(uint16_t)Reg, |
||||
MemAddress, |
||||
Buffer, |
||||
Length, |
||||
1000); |
||||
|
||||
/* Check the communication status */ |
||||
if(status != HAL_OK) |
||||
{ |
||||
/* I2C2 error occured */ |
||||
I2C2_Error(Addr); |
||||
} |
||||
return status; |
||||
} |
||||
|
||||
/**
|
||||
* @brief Writes a value in a register of the device through BUS in using DMA mode. |
||||
* @param Addr: Device address on BUS Bus. |
||||
* @param Reg: The target register address to write |
||||
* @param MemAddress: memory address |
||||
* @param Buffer: The target register value to be written |
||||
* @param Length: buffer size to be written |
||||
* @retval HAL status |
||||
*/ |
||||
static HAL_StatusTypeDef I2C1_WriteMultiple(uint8_t Addr, |
||||
uint16_t Reg, |
||||
uint16_t MemAddress, |
||||
uint8_t *Buffer, |
||||
uint16_t Length) |
||||
{ |
||||
HAL_StatusTypeDef status = HAL_OK; |
||||
|
||||
status = HAL_I2C_Mem_Write(&heval_I2c1, |
||||
Addr, |
||||
(uint16_t)Reg, |
||||
MemAddress, |
||||
Buffer, |
||||
Length, |
||||
1000); |
||||
|
||||
/* Check the communication status */ |
||||
if(status != HAL_OK) |
||||
{ |
||||
/* Re-Initiaize the I2C Bus */ |
||||
I2C1_Error(Addr); |
||||
} |
||||
return status; |
||||
} |
||||
|
||||
static HAL_StatusTypeDef I2C2_WriteMultiple(uint8_t Addr, |
||||
uint16_t Reg, |
||||
uint16_t MemAddress, |
||||
uint8_t *Buffer, |
||||
uint16_t Length) |
||||
{ |
||||
HAL_StatusTypeDef status = HAL_OK; |
||||
|
||||
status = HAL_I2C_Mem_Write(&heval_I2c2, |
||||
Addr, |
||||
(uint16_t)Reg, |
||||
MemAddress, |
||||
Buffer, |
||||
Length, |
||||
1000); |
||||
|
||||
/* Check the communication status */ |
||||
if(status != HAL_OK) |
||||
{ |
||||
/* Re-Initiaize the I2C2 Bus */ |
||||
I2C2_Error(Addr); |
||||
} |
||||
return status; |
||||
} |
||||
|
||||
/**
|
||||
* @brief Checks if target device is ready for communication. |
||||
* @note This function is used with Memory devices |
||||
* @param DevAddress: Target device address |
||||
* @param Trials: Number of trials |
||||
* @retval HAL status |
||||
*/ |
||||
static HAL_StatusTypeDef I2C1_IsDeviceReady(uint16_t DevAddress, uint32_t Trials) |
||||
{ |
||||
return (HAL_I2C_IsDeviceReady(&heval_I2c1, DevAddress, Trials, 1000)); |
||||
} |
||||
|
||||
/**
|
||||
* @brief Manages error callback by re-initializing I2C. |
||||
* @param Addr: I2C Address |
||||
*/ |
||||
static void I2C1_Error(uint8_t Addr) |
||||
{ |
||||
/* De-initialize the I2C comunication bus */ |
||||
HAL_I2C_DeInit(&heval_I2c1); |
||||
|
||||
/* Re-Initiaize the I2C comunication bus */ |
||||
I2C1_Init(); |
||||
} |
||||
|
||||
static void I2C2_Error(uint8_t Addr) |
||||
{ |
||||
/* De-initialize the I2C2 comunication bus */ |
||||
HAL_I2C_DeInit(&heval_I2c2); |
||||
|
||||
/* Re-Initiaize the I2C2 comunication bus */ |
||||
I2C2_Init(); |
||||
} |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/*******************************************************************************
|
||||
LINK OPERATIONS |
||||
*******************************************************************************/ |
||||
|
||||
/********************************* LINK AUDIO *********************************/ |
||||
|
||||
/**
|
||||
* @brief Initializes Audio low level. |
||||
*/ |
||||
void AUDIO_IO_Init(void) |
||||
{ |
||||
I2C2_Init(); |
||||
} |
||||
|
||||
/**
|
||||
* @brief DeInitializes Audio low level. |
||||
*/ |
||||
void AUDIO_IO_DeInit(void) |
||||
{ |
||||
|
||||
} |
||||
|
||||
/**
|
||||
* @brief Writes a single data. |
||||
* @param Addr: I2C address |
||||
* @param Reg: Reg address |
||||
* @param Value: Data to be written |
||||
*/ |
||||
void AUDIO_IO_Write(uint8_t Addr, uint8_t Reg, uint8_t Value) |
||||
{ |
||||
I2C2_WriteMultiple(Addr, (uint16_t) Reg, I2C_MEMADD_SIZE_8BIT, (uint8_t*)&Value, 1); |
||||
} |
||||
|
||||
/**
|
||||
* @brief Reads a single data. |
||||
* @param Addr: I2C address |
||||
* @param Reg: Reg address |
||||
* @retval Data to be read |
||||
*/ |
||||
uint8_t AUDIO_IO_Read(uint8_t Addr, uint8_t Reg) |
||||
{ |
||||
uint8_t read_value = 0; |
||||
|
||||
I2C2_ReadMultiple(Addr, (uint16_t) Reg, I2C_MEMADD_SIZE_8BIT, (uint8_t*)&read_value, 1); |
||||
|
||||
return read_value; |
||||
} |
||||
|
||||
/**
|
||||
* @brief AUDIO Codec delay |
||||
* @param Delay: Delay in ms |
||||
*/ |
||||
void AUDIO_IO_Delay(uint32_t Delay) |
||||
{ |
||||
HAL_Delay(Delay); |
||||
} |
||||
|
||||
/******************************** LINK I2C EEPROM *****************************/ |
||||
|
||||
/**
|
||||
* @brief Initializes peripherals used by the I2C EEPROM driver. |
||||
*/ |
||||
void EEPROM_IO_Init(void) |
||||
{ |
||||
I2C1_Init(); |
||||
} |
||||
|
||||
/**
|
||||
* @brief Write data to I2C EEPROM driver in using DMA channel. |
||||
* @param DevAddress: Target device address |
||||
* @param MemAddress: Internal memory address |
||||
* @param pBuffer: Pointer to data buffer |
||||
* @param BufferSize: Amount of data to be sent |
||||
* @retval HAL status |
||||
*/ |
||||
HAL_StatusTypeDef EEPROM_IO_WriteData(uint16_t DevAddress, uint16_t MemAddress, uint8_t* pBuffer, uint32_t BufferSize) |
||||
{ |
||||
return (I2C1_WriteMultiple(DevAddress, MemAddress, I2C_MEMADD_SIZE_16BIT, pBuffer, BufferSize)); |
||||
} |
||||
|
||||
/**
|
||||
* @brief Read data from I2C EEPROM driver in using DMA channel. |
||||
* @param DevAddress: Target device address |
||||
* @param MemAddress: Internal memory address |
||||
* @param pBuffer: Pointer to data buffer |
||||
* @param BufferSize: Amount of data to be read |
||||
* @retval HAL status |
||||
*/ |
||||
HAL_StatusTypeDef EEPROM_IO_ReadData(uint16_t DevAddress, uint16_t MemAddress, uint8_t* pBuffer, uint32_t BufferSize) |
||||
{ |
||||
return (I2C1_ReadMultiple(DevAddress, MemAddress, I2C_MEMADD_SIZE_16BIT, pBuffer, BufferSize)); |
||||
} |
||||
|
||||
/**
|
||||
* @brief Checks if target device is ready for communication. |
||||
* @note This function is used with Memory devices |
||||
* @param DevAddress: Target device address |
||||
* @param Trials: Number of trials |
||||
* @retval HAL status |
||||
*/ |
||||
HAL_StatusTypeDef EEPROM_IO_IsDeviceReady(uint16_t DevAddress, uint32_t Trials) |
||||
{ |
||||
return (I2C1_IsDeviceReady(DevAddress, Trials)); |
||||
} |
||||
|
||||
/******************************** LINK TS (TouchScreen) ***********************/ |
||||
|
||||
/**
|
||||
* @brief Initialize I2C communication |
||||
* channel from MCU to TouchScreen (TS). |
||||
*/ |
||||
void TS_IO_Init(void) |
||||
{ |
||||
I2C1_Init(); |
||||
} |
||||
|
||||
/**
|
||||
* @brief Writes single data with I2C communication |
||||
* channel from MCU to TouchScreen. |
||||
* @param Addr: I2C address |
||||
* @param Reg: Register address |
||||
* @param Value: Data to be written |
||||
*/ |
||||
void TS_IO_Write(uint8_t Addr, uint8_t Reg, uint8_t Value) |
||||
{ |
||||
I2C1_Write(Addr, Reg, Value); |
||||
} |
||||
|
||||
/**
|
||||
* @brief Reads single data with I2C communication |
||||
* channel from TouchScreen. |
||||
* @param Addr: I2C address |
||||
* @param Reg: Register address |
||||
* @retval Read data |
||||
*/ |
||||
uint8_t TS_IO_Read(uint8_t Addr, uint8_t Reg) |
||||
{ |
||||
return I2C1_Read(Addr, Reg); |
||||
} |
||||
|
||||
/**
|
||||
* @brief Reads multiple data with I2C communication |
||||
* channel from TouchScreen. |
||||
* @param Addr: I2C address |
||||
* @param Reg: Register address |
||||
* @param Buffer: Pointer to data buffer |
||||
* @param Length: Length of the data |
||||
* @retval Number of read data |
||||
*/ |
||||
uint16_t TS_IO_ReadMultiple(uint8_t Addr, uint8_t Reg, uint8_t *Buffer, uint16_t Length) |
||||
{ |
||||
return I2C1_ReadMultiple(Addr, (uint16_t)Reg, I2C_MEMADD_SIZE_8BIT, Buffer, Length); |
||||
} |
||||
|
||||
/**
|
||||
* @brief Writes multiple data with I2C communication |
||||
* channel from MCU to TouchScreen. |
||||
* @param Addr: I2C address |
||||
* @param Reg: Register address |
||||
* @param Buffer: Pointer to data buffer |
||||
* @param Length: Length of the data |
||||
*/ |
||||
void TS_IO_WriteMultiple(uint8_t Addr, uint8_t Reg, uint8_t *Buffer, uint16_t Length) |
||||
{ |
||||
I2C1_WriteMultiple(Addr, (uint16_t)Reg, I2C_MEMADD_SIZE_8BIT, Buffer, Length); |
||||
} |
||||
|
||||
/**
|
||||
* @brief Delay function used in TouchScreen low level driver. |
||||
* @param Delay: Delay in ms |
||||
*/ |
||||
void TS_IO_Delay(uint32_t Delay) |
||||
{ |
||||
HAL_Delay(Delay); |
||||
} |
||||
|
||||
/**************************** LINK OTM8009A (Display driver) ******************/ |
||||
/**
|
||||
* @brief OTM8009A delay |
||||
* @param Delay: Delay in ms |
||||
*/ |
||||
void OTM8009A_IO_Delay(uint32_t Delay) |
||||
{ |
||||
HAL_Delay(Delay); |
||||
} |
||||
|
||||
/**************************** LINK NT35510 (Display driver) ******************/ |
||||
/**
|
||||
* @brief NT35510 delay |
||||
* @param Delay: Delay in ms |
||||
*/ |
||||
void NT35510_IO_Delay(uint32_t Delay) |
||||
{ |
||||
HAL_Delay(Delay); |
||||
} |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
@ -0,0 +1,362 @@
|
||||
/**
|
||||
****************************************************************************** |
||||
* @file stm32469i_discovery.h |
||||
* @author MCD Application Team |
||||
* @brief This file contains definitions for STM32469I-Discovery LEDs, |
||||
* push-buttons hardware resources. |
||||
****************************************************************************** |
||||
* @attention |
||||
* |
||||
* Copyright (c) 2017 STMicroelectronics. |
||||
* All rights reserved. |
||||
* |
||||
* This software is licensed under terms that can be found in the LICENSE file |
||||
* in the root directory of this software component. |
||||
* If no LICENSE file comes with this software, it is provided AS-IS. |
||||
* |
||||
****************************************************************************** |
||||
*/ |
||||
|
||||
/* IMPORTANT: One of the following flags must be defined in the preprocessor */ |
||||
/* options in order to select the target board revision: !!!!!!!!!! */ |
||||
/* USE_STM32469I_DISCO_REVA */ |
||||
/* USE_STM32469I_DISCO_REVB */ |
||||
/* USE_STM32469I_DISCO_REVC */ |
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/ |
||||
#ifndef __STM32469I_DISCOVERY_H |
||||
#define __STM32469I_DISCOVERY_H |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include "stm32f4xx_hal.h" |
||||
|
||||
/** @addtogroup BSP
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @addtogroup STM32469I_Discovery
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @addtogroup STM32469I_Discovery_LOW_LEVEL
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @defgroup STM32469I_Discovery_LOW_LEVEL_Exported_Types STM32469I Discovery LOW LEVEL Exported Types
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @brief Led_TypeDef
|
||||
* STM32469I_Discovery board leds definitions. |
||||
*/ |
||||
typedef enum |
||||
{ |
||||
LED1 = 0, |
||||
LED_GREEN = LED1, |
||||
LED2 = 1, |
||||
LED_ORANGE = LED2, |
||||
LED3 = 2, |
||||
LED_RED = LED3, |
||||
LED4 = 3, |
||||
LED_BLUE = LED4 |
||||
|
||||
} Led_TypeDef; |
||||
|
||||
/** @brief Button_TypeDef
|
||||
* STM32469I_Discovery board Buttons definitions. |
||||
*/ |
||||
typedef enum |
||||
{ |
||||
BUTTON_WAKEUP = 0 |
||||
} Button_TypeDef; |
||||
|
||||
#define BUTTON_USER BUTTON_WAKEUP |
||||
|
||||
/** @brief ButtonMode_TypeDef
|
||||
* STM32469I_Discovery board Buttons Modes definitions. |
||||
*/ |
||||
typedef enum |
||||
{ |
||||
BUTTON_MODE_GPIO = 0, |
||||
BUTTON_MODE_EXTI = 1 |
||||
|
||||
} ButtonMode_TypeDef; |
||||
|
||||
/** @addtogroup Exported_types
|
||||
* @{ |
||||
*/
|
||||
typedef enum
|
||||
{ |
||||
PB_SET = 0,
|
||||
PB_RESET = !PB_SET |
||||
} ButtonValue_TypeDef; |
||||
|
||||
|
||||
/** @brief DISCO_Status_TypeDef
|
||||
* STM32469I_DISCO board Status return possible values. |
||||
*/ |
||||
typedef enum |
||||
{ |
||||
DISCO_OK = 0, |
||||
DISCO_ERROR = 1 |
||||
|
||||
} DISCO_Status_TypeDef; |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup STM32469I_Discovery_LOW_LEVEL_Exported_Constants STM32469I Discovery LOW LEVEL Exported Constants
|
||||
* @{ |
||||
*/ |
||||
|
||||
|
||||
/** @defgroup STM32469I_Discovery_LOW_LEVEL_LED STM32469I Discovery LOW LEVEL LED
|
||||
* @{ |
||||
*/ |
||||
/* Always four leds for all revisions of Discovery boards */ |
||||
#define LEDn ((uint8_t)4) |
||||
|
||||
|
||||
/* 4 Leds are connected to MCU directly on PG6, PD4, PD5, PK3 */ |
||||
#define LED1_GPIO_PORT ((GPIO_TypeDef*)GPIOG) |
||||
#define LED2_GPIO_PORT ((GPIO_TypeDef*)GPIOD) |
||||
#define LED3_GPIO_PORT ((GPIO_TypeDef*)GPIOD) |
||||
#define LED4_GPIO_PORT ((GPIO_TypeDef*)GPIOK) |
||||
|
||||
#define LED1_GPIO_CLK_ENABLE() __HAL_RCC_GPIOG_CLK_ENABLE() |
||||
#define LED1_GPIO_CLK_DISABLE() __HAL_RCC_GPIOG_CLK_DISABLE() |
||||
#define LED2_GPIO_CLK_ENABLE() __HAL_RCC_GPIOD_CLK_ENABLE() |
||||
#define LED2_GPIO_CLK_DISABLE() __HAL_RCC_GPIOD_CLK_DISABLE() |
||||
#define LED3_GPIO_CLK_ENABLE() __HAL_RCC_GPIOD_CLK_ENABLE() |
||||
#define LED3_GPIO_CLK_DISABLE() __HAL_RCC_GPIOD_CLK_DISABLE() |
||||
#define LED4_GPIO_CLK_ENABLE() __HAL_RCC_GPIOK_CLK_ENABLE() |
||||
#define LED4_GPIO_CLK_DISABLE() __HAL_RCC_GPIOK_CLK_DISABLE() |
||||
|
||||
#define LED1_PIN ((uint32_t)GPIO_PIN_6) |
||||
#define LED2_PIN ((uint32_t)GPIO_PIN_4) |
||||
#define LED3_PIN ((uint32_t)GPIO_PIN_5) |
||||
#define LED4_PIN ((uint32_t)GPIO_PIN_3) |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @addtogroup STM32469I_Discovery_LOW_LEVEL_BUTTON STM32469I Discovery LOW LEVEL BUTTON
|
||||
* @{ |
||||
*/ |
||||
/* Only one User/Wakeup button */ |
||||
#define BUTTONn ((uint8_t)1) |
||||
|
||||
/**
|
||||
* @brief Wakeup push-button |
||||
*/ |
||||
#define WAKEUP_BUTTON_PIN GPIO_PIN_0 |
||||
#define WAKEUP_BUTTON_GPIO_PORT GPIOA |
||||
#define WAKEUP_BUTTON_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() |
||||
#define WAKEUP_BUTTON_GPIO_CLK_DISABLE() __HAL_RCC_GPIOA_CLK_DISABLE() |
||||
#define WAKEUP_BUTTON_EXTI_IRQn EXTI0_IRQn |
||||
|
||||
/* Define the USER button as an alias of the Wakeup button */ |
||||
#define USER_BUTTON_PIN WAKEUP_BUTTON_PIN |
||||
#define USER_BUTTON_GPIO_PORT WAKEUP_BUTTON_GPIO_PORT |
||||
#define USER_BUTTON_GPIO_CLK_ENABLE() WAKEUP_BUTTON_GPIO_CLK_ENABLE() |
||||
#define USER_BUTTON_GPIO_CLK_DISABLE() WAKEUP_BUTTON_GPIO_CLK_DISABLE() |
||||
#define USER_BUTTON_EXTI_IRQn WAKEUP_BUTTON_EXTI_IRQn |
||||
|
||||
#define BUTTON_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @brief OTG_FS1 OVER_CURRENT and POWER_SWITCH Pins definition |
||||
*/ |
||||
#define AUDIO_INT_PIN GPIO_PIN_7 |
||||
#define AUDIO_INT_PORT GPIOB |
||||
#define AUDIO_INT_PORT_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() |
||||
|
||||
#define OTG_FS1_OVER_CURRENT_PIN GPIO_PIN_7 |
||||
#define OTG_FS1_OVER_CURRENT_PORT GPIOB |
||||
#define OTG_FS1_OVER_CURRENT_PORT_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() |
||||
|
||||
#define OTG_FS1_POWER_SWITCH_PIN GPIO_PIN_2 |
||||
#define OTG_FS1_POWER_SWITCH_PORT GPIOB |
||||
#define OTG_FS1_POWER_SWITCH_PORT_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() |
||||
|
||||
/**
|
||||
* @brief SD-detect signal |
||||
*/ |
||||
#define SD_DETECT_PIN ((uint32_t)GPIO_PIN_2) |
||||
#define SD_DETECT_GPIO_PORT ((GPIO_TypeDef*)GPIOG) |
||||
#define SD_DETECT_GPIO_CLK_ENABLE() __HAL_RCC_GPIOG_CLK_ENABLE() |
||||
#define SD_DETECT_GPIO_CLK_DISABLE() __HAL_RCC_GPIOG_CLK_DISABLE() |
||||
#define SD_DETECT_EXTI_IRQn EXTI2_IRQn |
||||
|
||||
/**
|
||||
* @brief TS_INT signal from TouchScreen when it is configured in interrupt mode |
||||
*/ |
||||
#define TS_INT_PIN ((uint32_t)GPIO_PIN_5) |
||||
#define TS_INT_GPIO_PORT ((GPIO_TypeDef*)GPIOJ) |
||||
#define TS_INT_GPIO_CLK_ENABLE() __HAL_RCC_GPIOJ_CLK_ENABLE() |
||||
#define TS_INT_GPIO_CLK_DISABLE() __HAL_RCC_GPIOJ_CLK_DISABLE() |
||||
#define TS_INT_EXTI_IRQn EXTI9_5_IRQn |
||||
|
||||
/**
|
||||
* @brief TouchScreen FT6206 Slave I2C address 1 |
||||
*/ |
||||
#define TS_I2C_ADDRESS ((uint16_t)0x54) |
||||
|
||||
/**
|
||||
* @brief TouchScreen FT6336G Slave I2C address 2 |
||||
*/ |
||||
#define TS_I2C_ADDRESS_A02 ((uint16_t)0x70) |
||||
|
||||
|
||||
/**
|
||||
* @brief Audio I2C Slave address |
||||
*/ |
||||
#define AUDIO_I2C_ADDRESS ((uint16_t)0x94) |
||||
|
||||
/**
|
||||
* @brief EEPROM I2C Slave address 1 |
||||
*/ |
||||
#define EEPROM_I2C_ADDRESS_A01 ((uint16_t)0xA0) |
||||
|
||||
/**
|
||||
* @brief EEPROM I2C Slave address 2 |
||||
*/ |
||||
#define EEPROM_I2C_ADDRESS_A02 ((uint16_t)0xA6) |
||||
|
||||
/**
|
||||
* @brief I2C clock speed configuration (in Hz) |
||||
* WARNING: |
||||
* Make sure that this define is not already declared in other files |
||||
* It can be used in parallel by other modules. |
||||
*/ |
||||
#ifndef I2C1_SCL_FREQ_KHZ |
||||
#define I2C1_SCL_FREQ_KHZ 400000 /*!< f(I2C_SCL) = 400 kHz */ |
||||
#endif /* I2C1_SCL_FREQ_KHZ */ |
||||
|
||||
/**
|
||||
* @brief User can use this section to tailor I2C1/I2C1 instance used and associated |
||||
* resources. |
||||
* Definition for I2C1 clock resources |
||||
*/ |
||||
#define DISCO_I2C1 I2C1 |
||||
#define DISCO_I2C1_CLK_ENABLE() __HAL_RCC_I2C1_CLK_ENABLE() |
||||
#define DISCO_DMAx_CLK_ENABLE() __HAL_RCC_DMA1_CLK_ENABLE() |
||||
#define DISCO_I2C1_SCL_SDA_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() |
||||
|
||||
#define DISCO_I2C1_FORCE_RESET() __HAL_RCC_I2C1_FORCE_RESET() |
||||
#define DISCO_I2C1_RELEASE_RESET() __HAL_RCC_I2C1_RELEASE_RESET() |
||||
|
||||
/** @brief Definition for I2C1 Pins
|
||||
*/ |
||||
#define DISCO_I2C1_SCL_PIN GPIO_PIN_8 /*!< PB8 */ |
||||
#define DISCO_I2C1_SCL_SDA_GPIO_PORT GPIOB |
||||
#define DISCO_I2C1_SCL_SDA_AF GPIO_AF4_I2C1 |
||||
#define DISCO_I2C1_SDA_PIN GPIO_PIN_9 /*!< PB9 */ |
||||
|
||||
/** @brief Definition of I2C interrupt requests
|
||||
*/ |
||||
#define DISCO_I2C1_EV_IRQn I2C1_EV_IRQn |
||||
#define DISCO_I2C1_ER_IRQn I2C1_ER_IRQn |
||||
|
||||
|
||||
|
||||
/**
|
||||
* @brief I2C2 clock speed configuration (in Hz) |
||||
* WARNING: |
||||
* Make sure that this define is not already declared in other files |
||||
* It can be used in parallel by other modules. |
||||
*/ |
||||
#ifndef I2C2_SCL_FREQ_KHZ |
||||
#define I2C2_SCL_FREQ_KHZ 100000 /*!< f(I2C2_SCL) < 100 kHz */ |
||||
#endif /* I2C2_SCL_FREQ_KHZ */ |
||||
|
||||
/**
|
||||
* @brief User can use this section to tailor I2C2/I2C2 instance used and associated |
||||
* resources (audio codec). |
||||
* Definition for I2C2 clock resources |
||||
*/ |
||||
#define DISCO_I2C2 I2C2 |
||||
#define DISCO_I2C2_CLK_ENABLE() __HAL_RCC_I2C2_CLK_ENABLE() |
||||
#define DISCO_I2C2_SCL_SDA_GPIO_CLK_ENABLE() __HAL_RCC_GPIOH_CLK_ENABLE() |
||||
|
||||
#define DISCO_I2C2_FORCE_RESET() __HAL_RCC_I2C2_FORCE_RESET() |
||||
#define DISCO_I2C2_RELEASE_RESET() __HAL_RCC_I2C2_RELEASE_RESET() |
||||
|
||||
/** @brief Definition for I2C2 Pins
|
||||
*/ |
||||
#define DISCO_I2C2_SCL_PIN GPIO_PIN_4 /*!< PH4 */ |
||||
#define DISCO_I2C2_SCL_SDA_GPIO_PORT GPIOH |
||||
#define DISCO_I2C2_SCL_SDA_AF GPIO_AF4_I2C2 |
||||
#define DISCO_I2C2_SDA_PIN GPIO_PIN_5 /*!< PH5 */ |
||||
|
||||
/** @brief Definition of I2C2 interrupt requests
|
||||
*/ |
||||
#define DISCO_I2C2_EV_IRQn I2C2_EV_IRQn |
||||
#define DISCO_I2C2_ER_IRQn I2C2_ER_IRQn |
||||
|
||||
#if !defined(USE_STM32469I_DISCO_REVA) && \ |
||||
!defined(USE_STM32469I_DISCO_REVB) && \
|
||||
!defined(USE_STM32469I_DISCO_REVC) |
||||
#define USE_STM32469I_DISCO_REVC |
||||
#endif |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup STM32469I_Discovery_LOW_LEVEL_Exported_Macros STM32469I Discovery LOW LEVEL Exported Macros
|
||||
* @{ |
||||
*/ |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup STM32469I_Discovery_LOW_LEVEL_Exported_Functions STM32469I Discovery LOW LEVEL Exported Functions
|
||||
* @{ |
||||
*/ |
||||
uint32_t BSP_GetVersion(void); |
||||
void BSP_LED_Init(Led_TypeDef Led); |
||||
void BSP_LED_DeInit(Led_TypeDef Led); |
||||
void BSP_LED_On(Led_TypeDef Led); |
||||
void BSP_LED_Off(Led_TypeDef Led); |
||||
void BSP_LED_Toggle(Led_TypeDef Led); |
||||
void BSP_PB_Init(Button_TypeDef Button, ButtonMode_TypeDef Button_Mode); |
||||
void BSP_PB_DeInit(Button_TypeDef Button); |
||||
uint32_t BSP_PB_GetState(Button_TypeDef Button); |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
#endif /* __STM32469I_DISCOVERY_H */ |
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,328 @@
|
||||
/**
|
||||
****************************************************************************** |
||||
* @file stm32469i_discovery_audio.h |
||||
* @author MCD Application Team |
||||
* @version V2.0.0 |
||||
* @date 27-January-2017 |
||||
* @brief This file contains the common defines and functions prototypes for |
||||
* the stm32469i_discovery_audio.c driver. |
||||
****************************************************************************** |
||||
* @attention |
||||
* |
||||
* Copyright (c) 2017 STMicroelectronics. |
||||
* All rights reserved. |
||||
* |
||||
* This software is licensed under terms that can be found in the LICENSE file |
||||
* in the root directory of this software component. |
||||
* If no LICENSE file comes with this software, it is provided AS-IS. |
||||
* |
||||
****************************************************************************** |
||||
*/ |
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/ |
||||
#ifndef __STM32469I_DISCOVERY_AUDIO_H |
||||
#define __STM32469I_DISCOVERY_AUDIO_H |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#if defined(BSP_AUDIO_USE_RTOS) |
||||
#include "k_mem.h" |
||||
#else |
||||
#include <stdlib.h> |
||||
#endif |
||||
|
||||
/* Include audio component Driver */ |
||||
#include "../Components/cs43l22/cs43l22.h" |
||||
#include "stm32469i_discovery.h" |
||||
#include "../../../Middlewares/ST/STM32_Audio/Addons/PDM/Inc/pdm2pcm_glo.h" |
||||
|
||||
/** @addtogroup BSP
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @addtogroup STM32469I_Discovery
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @addtogroup STM32469I-Discovery_AUDIO
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @defgroup STM32469I-Discovery_AUDIO_Exported_Types STM32469I Discovery AUDIO Exported Types
|
||||
* @{ |
||||
*/ |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup STM32469I-Discovery_AUDIO_Exported_Constants STM32469I Discovery AUDIO Exported Constants
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @defgroup BSP_Audio_Out_Option BSP AUDIO OUT Option
|
||||
* @{ |
||||
*/ |
||||
#define BSP_AUDIO_OUT_CIRCULARMODE ((uint32_t)0x00000001) /* BUFFER CIRCULAR MODE */ |
||||
#define BSP_AUDIO_OUT_NORMALMODE ((uint32_t)0x00000002) /* BUFFER NORMAL MODE */ |
||||
#define BSP_AUDIO_OUT_STEREOMODE ((uint32_t)0x00000004) /* STEREO MODE */ |
||||
#define BSP_AUDIO_OUT_MONOMODE ((uint32_t)0x00000008) /* MONO MODE */ |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
USER SAI defines parameters |
||||
-----------------------------------------------------------------------------*/ |
||||
/** @defgroup CODEC_AudioFrame_SLOT_TDMMode STM32469I Discovery Audio Slot TDM mode
|
||||
* @brief In W8994 codec the Audio frame contains 4 slots : TDM Mode |
||||
* TDM format : |
||||
* +------------------|------------------|--------------------|-------------------+ |
||||
* | CODEC_SLOT0 Left | CODEC_SLOT1 Left | CODEC_SLOT0 Right | CODEC_SLOT1 Right | |
||||
* +------------------------------------------------------------------------------+ |
||||
* @{ |
||||
*/ |
||||
/* To have 2 separate audio stream in Both headphone and speaker the 4 slot must be activated */ |
||||
#define CODEC_AUDIOFRAME_SLOT_0123 SAI_SLOTACTIVE_0 | SAI_SLOTACTIVE_1 | SAI_SLOTACTIVE_2 | SAI_SLOTACTIVE_3 |
||||
/* To have an audio stream in headphone only SAI Slot 0 and Slot 2 must be activated */ |
||||
#define CODEC_AUDIOFRAME_SLOT_02 SAI_SLOTACTIVE_0 | SAI_SLOTACTIVE_2 |
||||
/* To have an audio stream in speaker only SAI Slot 1 and Slot 3 must be activated */ |
||||
#define CODEC_AUDIOFRAME_SLOT_13 SAI_SLOTACTIVE_1 | SAI_SLOTACTIVE_3 |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/* SAI peripheral configuration defines */ |
||||
#define AUDIO_SAIx SAI1_Block_A |
||||
#define AUDIO_SAIx_CLK_ENABLE() __HAL_RCC_SAI1_CLK_ENABLE() |
||||
#define AUDIO_SAIx_CLK_DISABLE() __HAL_RCC_SAI1_CLK_DISABLE() |
||||
#define AUDIO_SAIx_MCLK_SCK_SD_FS_AF GPIO_AF6_SAI1 |
||||
|
||||
#define AUDIO_SAIx_MCLK_ENABLE() __HAL_RCC_GPIOG_CLK_ENABLE() |
||||
#define AUDIO_SAIx_MCLK_DISABLE() __HAL_RCC_GPIOG_CLK_DISABLE() |
||||
|
||||
#define AUDIO_SAIx_MCK_PIN GPIO_PIN_7 |
||||
#define AUDIO_SAIx_MCLK_GPIO_PORT GPIOG |
||||
|
||||
#define AUDIO_SAIx_SCK_SD_FS_ENABLE() __HAL_RCC_GPIOE_CLK_ENABLE() |
||||
#define AUDIO_SAIx_SCK_SD_FS_DISABLE() __HAL_RCC_GPIOE_CLK_DISABLE() |
||||
#define AUDIO_SAIx_FS_PIN GPIO_PIN_4 |
||||
#define AUDIO_SAIx_SCK_PIN GPIO_PIN_5 |
||||
#define AUDIO_SAIx_SD_PIN GPIO_PIN_6 |
||||
#define AUDIO_SAIx_SCK_SD_FS_GPIO_PORT GPIOE |
||||
|
||||
#define AUDIO_RESET_ENABLE() __HAL_RCC_GPIOE_CLK_ENABLE() |
||||
#define AUDIO_RESET_DISABLE() __HAL_RCC_GPIOE_CLK_DISABLE() |
||||
#define AUDIO_RESET_PIN GPIO_PIN_2 |
||||
#define AUDIO_RESET_GPIO_PORT GPIOE |
||||
|
||||
/* SAI DMA Stream definitions */ |
||||
#define AUDIO_SAIx_DMAx_CLK_ENABLE() __HAL_RCC_DMA2_CLK_ENABLE() |
||||
#define AUDIO_SAIx_DMAx_CLK_DISABLE() __HAL_RCC_DMA2_CLK_DISABLE() |
||||
#define AUDIO_SAIx_DMAx_STREAM DMA2_Stream3 |
||||
#define AUDIO_SAIx_DMAx_CHANNEL DMA_CHANNEL_0 |
||||
#define AUDIO_SAIx_DMAx_IRQ DMA2_Stream3_IRQn |
||||
#define AUDIO_SAIx_DMAx_PERIPH_DATA_SIZE DMA_PDATAALIGN_HALFWORD |
||||
#define AUDIO_SAIx_DMAx_MEM_DATA_SIZE DMA_MDATAALIGN_HALFWORD |
||||
#define DMA_MAX_SZE 0xFFFF |
||||
|
||||
#define AUDIO_SAIx_DMAx_IRQHandler DMA2_Stream3_IRQHandler |
||||
|
||||
/* Select the interrupt preemption priority for the DMA interrupt */ |
||||
#define AUDIO_OUT_IRQ_PREPRIO 5 /* Select the preemption priority level(0 is the highest) */ |
||||
|
||||
/* Disable SAIx PLL */ |
||||
#define AUDIO_SAIx_PLL_DISABLE() HAL_RCCEx_DisablePLLSAI1() |
||||
/*------------------------------------------------------------------------------
|
||||
AUDIO IN CONFIGURATION |
||||
------------------------------------------------------------------------------*/ |
||||
/* SPI Configuration defines */ |
||||
#define AUDIO_I2Sx SPI3 |
||||
#define AUDIO_I2Sx_CLK_ENABLE() __HAL_RCC_SPI3_CLK_ENABLE() |
||||
#define AUDIO_I2Sx_CLK_DISABLE() __HAL_RCC_SPI3_CLK_DISABLE() |
||||
#define AUDIO_I2Sx_SCK_PIN GPIO_PIN_3 |
||||
#define AUDIO_I2Sx_SCK_GPIO_PORT GPIOB |
||||
#define AUDIO_I2Sx_SCK_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() |
||||
#define AUDIO_I2Sx_SCK_GPIO_CLK_DISABLE() __HAL_RCC_GPIOB_CLK_DISABLE() |
||||
#define AUDIO_I2Sx_SCK_AF GPIO_AF6_SPI3 |
||||
|
||||
#define AUDIO_I2Sx_SD_PIN GPIO_PIN_6 |
||||
#define AUDIO_I2Sx_SD_GPIO_PORT GPIOD |
||||
#define AUDIO_I2Sx_SD_GPIO_CLK_ENABLE() __HAL_RCC_GPIOD_CLK_ENABLE() |
||||
#define AUDIO_I2Sx_SD_GPIO_CLK_DISABLE() __HAL_RCC_GPIOD_CLK_DISABLE() |
||||
#define AUDIO_I2Sx_SD_AF GPIO_AF5_I2S3ext |
||||
|
||||
/* I2S DMA Stream Rx definitions */ |
||||
#define AUDIO_I2Sx_DMAx_CLK_ENABLE() __HAL_RCC_DMA1_CLK_ENABLE() |
||||
#define AUDIO_I2Sx_DMAx_CLK_DISABLE() __HAL_RCC_DMA1_CLK_DISABLE() |
||||
#define AUDIO_I2Sx_DMAx_STREAM DMA1_Stream2 |
||||
#define AUDIO_I2Sx_DMAx_CHANNEL DMA_CHANNEL_0 |
||||
#define AUDIO_I2Sx_DMAx_IRQ DMA1_Stream2_IRQn |
||||
#define AUDIO_I2Sx_DMAx_PERIPH_DATA_SIZE DMA_PDATAALIGN_HALFWORD |
||||
#define AUDIO_I2Sx_DMAx_MEM_DATA_SIZE DMA_MDATAALIGN_HALFWORD |
||||
|
||||
#define AUDIO_I2Sx_DMAx_IRQHandler DMA1_Stream2_IRQHandler |
||||
|
||||
/* Select the interrupt preemption priority and subpriority for the IT/DMA interrupt */ |
||||
#define AUDIO_IN_IRQ_PREPRIO ((uint32_t)6) /* Select the preemption priority level(0 is the highest) */ |
||||
|
||||
|
||||
/* Two channels are used:
|
||||
- one channel as input which is connected to I2S SCK in stereo mode |
||||
- one channel as outupt which divides the frequency on the input |
||||
*/ |
||||
|
||||
#define AUDIO_TIMx_CLK_ENABLE() __HAL_RCC_TIM4_CLK_ENABLE() |
||||
#define AUDIO_TIMx_CLK_DISABLE() __HAL_RCC_TIM4_CLK_DISABLE() |
||||
#define AUDIO_TIMx TIM4 |
||||
#define AUDIO_TIMx_IN_CHANNEL TIM_CHANNEL_1 |
||||
#define AUDIO_TIMx_OUT_CHANNEL TIM_CHANNEL_2 /* Select channel 2 as output */ |
||||
#define AUDIO_TIMx_GPIO_CLK_ENABLE() __HAL_RCC_GPIOD_CLK_ENABLE() |
||||
#define AUDIO_TIMx_GPIO_CLK_DISABLE() __HAL_RCC_GPIOD_CLK_DISABLE() |
||||
#define AUDIO_TIMx_GPIO_PORT GPIOD |
||||
#define AUDIO_TIMx_IN_GPIO_PIN GPIO_PIN_12 |
||||
#define AUDIO_TIMx_OUT_GPIO_PIN GPIO_PIN_13 |
||||
#define AUDIO_TIMx_AF GPIO_AF2_TIM4 |
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
CONFIGURATION: Audio Driver Configuration parameters |
||||
------------------------------------------------------------------------------*/ |
||||
|
||||
#define AUDIODATA_SIZE 2 /* 16-bits audio data size */ |
||||
|
||||
/* Audio status definition */ |
||||
#define AUDIO_OK ((uint8_t)0) |
||||
#define AUDIO_ERROR ((uint8_t)1) |
||||
#define AUDIO_TIMEOUT ((uint8_t)2) |
||||
|
||||
/* AudioFreq * DataSize (2 bytes) * NumChannels (Stereo: 2) */ |
||||
#define DEFAULT_AUDIO_IN_FREQ I2S_AUDIOFREQ_16K |
||||
#define DEFAULT_AUDIO_IN_BIT_RESOLUTION ((uint8_t)16) |
||||
#define DEFAULT_AUDIO_IN_CHANNEL_NBR ((uint8_t)2) /* Mono = 1, Stereo = 2 */ |
||||
#define DEFAULT_AUDIO_IN_VOLUME ((uint16_t)64) |
||||
|
||||
/* PDM buffer input size */ |
||||
#define INTERNAL_BUFF_SIZE (128*DEFAULT_AUDIO_IN_FREQ/16000*DEFAULT_AUDIO_IN_CHANNEL_NBR) |
||||
/* PCM buffer output size */ |
||||
#define PCM_OUT_SIZE (DEFAULT_AUDIO_IN_FREQ/1000*DEFAULT_AUDIO_IN_CHANNEL_NBR) |
||||
#define CHANNEL_DEMUX_MASK ((uint8_t)0x55) |
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
OPTIONAL Configuration defines parameters |
||||
------------------------------------------------------------------------------*/ |
||||
|
||||
/* Delay for the Codec to be correctly reset */ |
||||
#define CODEC_RESET_DELAY ((uint8_t)5) |
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
OUTPUT DEVICES definition |
||||
------------------------------------------------------------------------------*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup STM32469I-Discovery_AUDIO_Exported_Variables STM32469I-Discovery AUDIO Exported Variables
|
||||
* @{ |
||||
*/ |
||||
extern __IO uint16_t AudioInVolume; |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup STM32469I-Discovery_AUDIO_Exported_Macros STM32469I-Discovery AUDIO Exported Macros
|
||||
* @{ |
||||
*/ |
||||
#define DMA_MAX(x) (((x) <= DMA_MAX_SZE)? (x):DMA_MAX_SZE) |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup STM32469I-Discovery_AUDIO_OUT_Exported_Functions STM32469I Discovery AUDIO OUT Exported Functions
|
||||
* @{ |
||||
*/ |
||||
uint8_t BSP_AUDIO_OUT_Init(uint16_t OutputDevice, uint8_t Volume, uint32_t AudioFreq); |
||||
uint8_t BSP_AUDIO_OUT_Play(uint16_t* pBuffer, uint32_t Size); |
||||
void BSP_AUDIO_OUT_ChangeBuffer(uint16_t *pData, uint16_t Size); |
||||
uint8_t BSP_AUDIO_OUT_Pause(void); |
||||
uint8_t BSP_AUDIO_OUT_Resume(void); |
||||
uint8_t BSP_AUDIO_OUT_Stop(uint32_t Option); |
||||
uint8_t BSP_AUDIO_OUT_SetVolume(uint8_t Volume); |
||||
void BSP_AUDIO_OUT_SetFrequency(uint32_t AudioFreq); |
||||
void BSP_AUDIO_OUT_SetAudioFrameSlot(uint32_t AudioFrameSlot); |
||||
uint8_t BSP_AUDIO_OUT_SetMute(uint32_t Cmd); |
||||
uint8_t BSP_AUDIO_OUT_SetOutputMode(uint8_t Output); |
||||
void BSP_AUDIO_OUT_DeInit(void); |
||||
|
||||
/* User Callbacks: user has to implement these functions in his code if they are needed. */ |
||||
/* This function is called when the requested data has been completely transferred.*/ |
||||
void BSP_AUDIO_OUT_TransferComplete_CallBack(void); |
||||
|
||||
/* This function is called when half of the requested buffer has been transferred. */ |
||||
void BSP_AUDIO_OUT_HalfTransfer_CallBack(void); |
||||
|
||||
/* This function is called when an Interrupt due to transfer error on or peripheral
|
||||
error occurs. */ |
||||
void BSP_AUDIO_OUT_Error_CallBack(void); |
||||
|
||||
/* These function can be modified in case the current settings (e.g. DMA stream)
|
||||
need to be changed for specific application needs */ |
||||
void BSP_AUDIO_OUT_ClockConfig(SAI_HandleTypeDef *hsai, uint32_t AudioFreq, void *Params); |
||||
void BSP_AUDIO_OUT_MspInit(SAI_HandleTypeDef *hsai, void *Params); |
||||
void BSP_AUDIO_OUT_MspDeInit(SAI_HandleTypeDef *hsai, void *Params); |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup STM32469I-Discovery_AUDIO_IN_Exported_Functions STM32469I Discovery AUDIO IN Exported Functions
|
||||
* @{ |
||||
*/ |
||||
uint8_t BSP_AUDIO_IN_Init(uint32_t AudioFreq, uint32_t BitRes, uint32_t ChnlNbr); |
||||
uint8_t BSP_AUDIO_IN_Record(uint16_t *pData, uint32_t Size); |
||||
uint8_t BSP_AUDIO_IN_Stop(void); |
||||
uint8_t BSP_AUDIO_IN_Pause(void); |
||||
uint8_t BSP_AUDIO_IN_Resume(void); |
||||
uint8_t BSP_AUDIO_IN_SetVolume(uint8_t Volume); |
||||
void BSP_AUDIO_IN_DeInit(void); |
||||
uint8_t BSP_AUDIO_IN_PDMToPCM(uint16_t* PDMBuf, uint16_t* PCMBuf); |
||||
/* User Callbacks: user has to implement these functions in his code if they are needed. */ |
||||
/* This function should be implemented by the user application.
|
||||
It is called into this driver when the current buffer is filled to prepare the next |
||||
buffer pointer and its size. */ |
||||
void BSP_AUDIO_IN_TransferComplete_CallBack(void); |
||||
void BSP_AUDIO_IN_HalfTransfer_CallBack(void); |
||||
|
||||
/* This function is called when an Interrupt due to transfer error on or peripheral
|
||||
error occurs. */ |
||||
void BSP_AUDIO_IN_Error_Callback(void); |
||||
|
||||
/* These function can be modified in case the current settings (e.g. DMA stream)
|
||||
need to be changed for specific application needs */ |
||||
void BSP_AUDIO_IN_ClockConfig(I2S_HandleTypeDef *hi2s, void *Params);
|
||||
void BSP_AUDIO_IN_MspInit(I2S_HandleTypeDef *hi2s, void *Params); |
||||
void BSP_AUDIO_IN_MspDeInit(I2S_HandleTypeDef *hi2s, void *Params); |
||||
|
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
#endif /* __STM32469I_DISCOVERY_AUDIO_H */ |
@ -0,0 +1,453 @@
|
||||
/**
|
||||
****************************************************************************** |
||||
* @file stm32469i_discovery_eeprom.c |
||||
* @author MCD Application Team |
||||
* @brief This file provides a set of functions needed to manage an I2C M24LR64
|
||||
* EEPROM memory. |
||||
* To be able to use this driver, the switch EE_M24LR64 must be defined |
||||
* in your toolchain compiler preprocessor |
||||
*
|
||||
* ===================================================================
|
||||
* Notes: |
||||
* - This driver is intended for STM32F4xx families devices only.
|
||||
* - The I2C EEPROM memory (M24LR64) is available on separate daughter
|
||||
* board ANT7-M24LR-A, which is not provided with the STM32469I-Discovery |
||||
* board. |
||||
* To use this driver you have to connect the ANT7-M24LR-A to CN11 |
||||
* connector of STM32469I-Discovery board. |
||||
* =================================================================== |
||||
*
|
||||
* It implements a high level communication layer for read and write
|
||||
* from/to this memory. The needed STM32F4xx hardware resources (I2C and
|
||||
* GPIO) are defined in stm32469i_discovery.h file, and the initialization is |
||||
* performed in EEPROM_IO_Init() function declared in stm32469i_discovery.c |
||||
* file. |
||||
* You can easily tailor this driver to any other development board,
|
||||
* by just adapting the defines for hardware resources and
|
||||
* EEPROM_IO_Init() function.
|
||||
*
|
||||
* @note In this driver, basic read and write functions (BSP_EEPROM_ReadBuffer()
|
||||
* and BSP_EEPROM_WritePage()) use DMA mode to perform the data
|
||||
* transfer to/from EEPROM memory. |
||||
* |
||||
* @note Regarding BSP_EEPROM_WritePage(), it is a optimized function to perform |
||||
* small write (less than 1 page) BUT The number of bytes (combined to write start address) must not
|
||||
* cross the EEPROM page boundary. This function can only write into |
||||
* the boundaries of an EEPROM page. |
||||
* This function doesn't check on boundaries condition (in this driver
|
||||
* the function BSP_EEPROM_WriteBuffer() which calls BSP_EEPROM_WritePage() is
|
||||
* responsible of checking on Page boundaries). |
||||
*
|
||||
*
|
||||
* +-----------------------------------------------------------------+ |
||||
* | Pin assignment for M24LR64 EEPROM | |
||||
* +---------------------------------------+-----------+-------------+ |
||||
* | STM32F4xx I2C Pins | EEPROM | Pin | |
||||
* +---------------------------------------+-----------+-------------+ |
||||
* | . | E0(GND) | 1 (0V) | |
||||
* | . | AC0 | 2 | |
||||
* | . | AC1 | 3 | |
||||
* | . | VSS | 4 (0V) | |
||||
* | SDA | SDA | 5 | |
||||
* | SCL | SCL | 6 | |
||||
* | . | E1(GND) | 7 (0V) | |
||||
* | . | VDD | 8 (3.3V) | |
||||
* +---------------------------------------+-----------+-------------+ |
||||
* |
||||
****************************************************************************** |
||||
* @attention |
||||
* |
||||
* Copyright (c) 2017 STMicroelectronics. |
||||
* All rights reserved. |
||||
* |
||||
* This software is licensed under terms that can be found in the LICENSE file |
||||
* in the root directory of this software component. |
||||
* If no LICENSE file comes with this software, it is provided AS-IS. |
||||
* |
||||
****************************************************************************** |
||||
*/ |
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include "stm32469i_discovery_eeprom.h" |
||||
|
||||
/** @addtogroup BSP
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @addtogroup STM32469I_Discovery
|
||||
* @{ |
||||
*/
|
||||
|
||||
/** @defgroup STM32469I-Discovery_EEPROM STM32469I Discovery EEPROM
|
||||
* @brief This file includes the I2C EEPROM driver of STM32469I-Discovery board. |
||||
* @{ |
||||
*/
|
||||
|
||||
/** @defgroup STM32469I-Discovery_EEPROM_Private_Types STM32469I Discovery EEPROM Private Types
|
||||
* @{ |
||||
*/
|
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
/** @defgroup STM32469I-Discovery_EEPROM_Private_Defines STM32469I Discovery EEPROM Private Defines
|
||||
* @{ |
||||
*/
|
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
/** @defgroup STM32469I-Discovery_EEPROM_Private_Macros STM32469I Discovery EEPROM Private Macros
|
||||
* @{ |
||||
*/ |
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
/** @defgroup STM32469I-Discovery_EEPROM_Private_Variables STM32469I Discovery EEPROM Private Variables
|
||||
* @{ |
||||
*/ |
||||
__IO uint16_t EEPROMAddress = 0; |
||||
__IO uint32_t EEPROMTimeout = EEPROM_READ_TIMEOUT; |
||||
__IO uint16_t EEPROMDataRead; |
||||
__IO uint8_t EEPROMDataWrite; |
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
/** @defgroup STM32469I-Discovery_EEPROM_Private_Function_Prototypes STM32469I Discovery EEPROM Private Prototypes
|
||||
* @{ |
||||
*/
|
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
/** @defgroup STM32469I-Discovery_EEPROM_Private_Functions STM32469I Discovery EEPROM Private Functions
|
||||
* @{ |
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Initializes peripherals used by the I2C EEPROM driver. |
||||
*
|
||||
* @note There are 2 different versions of M24LR64 (A01 & A02). |
||||
* Then try to connect on 1st one (EEPROM_I2C_ADDRESS_A01)
|
||||
* and if problem, check the 2nd one (EEPROM_I2C_ADDRESS_A02) |
||||
* @retval EEPROM_OK (0) if operation is correctly performed, else return value
|
||||
* different from EEPROM_OK (0) |
||||
*/ |
||||
uint32_t BSP_EEPROM_Init(void) |
||||
{
|
||||
/* I2C Initialization */ |
||||
EEPROM_IO_Init(); |
||||
|
||||
/* Select the EEPROM address for A01 and check if OK */ |
||||
EEPROMAddress = EEPROM_I2C_ADDRESS_A01; |
||||
if(EEPROM_IO_IsDeviceReady(EEPROMAddress, EEPROM_MAX_TRIALS) != HAL_OK)
|
||||
{ |
||||
/* Select the EEPROM address for A02 and check if OK */ |
||||
EEPROMAddress = EEPROM_I2C_ADDRESS_A02; |
||||
if(EEPROM_IO_IsDeviceReady(EEPROMAddress, EEPROM_MAX_TRIALS) != HAL_OK) |
||||
{ |
||||
return EEPROM_FAIL; |
||||
} |
||||
} |
||||
return EEPROM_OK; |
||||
} |
||||
|
||||
/**
|
||||
* @brief DeInitializes the EEPROM. |
||||
* @retval EEPROM state |
||||
*/ |
||||
uint8_t BSP_EEPROM_DeInit(void) |
||||
{
|
||||
/* I2C won't be disabled because common to other functionalities */ |
||||
return EEPROM_OK; |
||||
} |
||||
|
||||
/**
|
||||
* @brief Reads a block of data from the EEPROM. |
||||
* @param pBuffer: pointer to the buffer that receives the data read from
|
||||
* the EEPROM. |
||||
* @param ReadAddr: EEPROM's internal address to start reading from. |
||||
* @param NumByteToRead: pointer to the variable holding number of bytes to
|
||||
* be read from the EEPROM. |
||||
*
|
||||
* @note The variable pointed by NumByteToRead is reset to 0 when all the
|
||||
* data are read from the EEPROM. Application should monitor this
|
||||
* variable in order know when the transfer is complete. |
||||
*
|
||||
* @retval EEPROM_OK (0) if operation is correctly performed, else return value
|
||||
* different from EEPROM_OK (0) or the timeout user callback. |
||||
*/ |
||||
uint32_t BSP_EEPROM_ReadBuffer(uint8_t* pBuffer, uint16_t ReadAddr, uint16_t* NumByteToRead) |
||||
{
|
||||
uint32_t buffersize = *NumByteToRead; |
||||
|
||||
/* Set the pointer to the Number of data to be read. This pointer will be used
|
||||
by the DMA Transfer Completer interrupt Handler in order to reset the
|
||||
variable to 0. User should check on this variable in order to know if the
|
||||
DMA transfer has been complete or not. */ |
||||
EEPROMDataRead = *NumByteToRead; |
||||
|
||||
if(EEPROM_IO_ReadData(EEPROMAddress, ReadAddr, pBuffer, buffersize) != HAL_OK) |
||||
{ |
||||
BSP_EEPROM_TIMEOUT_UserCallback(); |
||||
return EEPROM_FAIL; |
||||
} |
||||
|
||||
/* If all operations OK, return EEPROM_OK (0) */ |
||||
return EEPROM_OK; |
||||
} |
||||
|
||||
/**
|
||||
* @brief Writes more than one byte to the EEPROM with a single WRITE cycle. |
||||
* |
||||
* @note The number of bytes (combined to write start address) must not
|
||||
* cross the EEPROM page boundary. This function can only write into |
||||
* the boundaries of an EEPROM page. |
||||
* This function doesn't check on boundaries condition (in this driver
|
||||
* the function BSP_EEPROM_WriteBuffer() which calls BSP_EEPROM_WritePage() is
|
||||
* responsible of checking on Page boundaries). |
||||
*
|
||||
* @param pBuffer: pointer to the buffer containing the data to be written to
|
||||
* the EEPROM. |
||||
* @param WriteAddr: EEPROM's internal address to write to. |
||||
* @param NumByteToWrite: pointer to the variable holding number of bytes to
|
||||
* be written into the EEPROM.
|
||||
*
|
||||
* @note The variable pointed by NumByteToWrite is reset to 0 when all the
|
||||
* data are written to the EEPROM. Application should monitor this
|
||||
* variable in order know when the transfer is complete. |
||||
*
|
||||
* @note This function just configure the communication and enable the DMA
|
||||
* channel to transfer data. Meanwhile, the user application may perform
|
||||
* other tasks in parallel. |
||||
*
|
||||
* @retval EEPROM_OK (0) if operation is correctly performed, else return value
|
||||
* different from EEPROM_OK (0) or the timeout user callback. |
||||
*/ |
||||
uint32_t BSP_EEPROM_WritePage(uint8_t* pBuffer, uint16_t WriteAddr, uint8_t* NumByteToWrite) |
||||
{
|
||||
uint32_t buffersize = *NumByteToWrite; |
||||
uint32_t status = EEPROM_OK; |
||||
|
||||
/* Set the pointer to the Number of data to be written. This pointer will be used
|
||||
by the DMA Transfer Completer interrupt Handler in order to reset the
|
||||
variable to 0. User should check on this variable in order to know if the
|
||||
DMA transfer has been complete or not. */ |
||||
EEPROMDataWrite = *NumByteToWrite;
|
||||
|
||||
if(EEPROM_IO_WriteData(EEPROMAddress, WriteAddr, pBuffer, buffersize) != HAL_OK) |
||||
{ |
||||
BSP_EEPROM_TIMEOUT_UserCallback(); |
||||
status = EEPROM_FAIL; |
||||
} |
||||
|
||||
if(BSP_EEPROM_WaitEepromStandbyState() != EEPROM_OK)
|
||||
{ |
||||
return EEPROM_FAIL; |
||||
} |
||||
|
||||
/* If all operations OK, return EEPROM_OK (0) */ |
||||
return status; |
||||
} |
||||
|
||||
/**
|
||||
* @brief Writes buffer of data to the I2C EEPROM. |
||||
* @param pBuffer: pointer to the buffer containing the data to be written
|
||||
* to the EEPROM. |
||||
* @param WriteAddr: EEPROM's internal address to write to. |
||||
* @param NumByteToWrite: number of bytes to write to the EEPROM. |
||||
* @retval EEPROM_OK (0) if operation is correctly performed, else return value
|
||||
* different from EEPROM_OK (0) or the timeout user callback. |
||||
*/ |
||||
uint32_t BSP_EEPROM_WriteBuffer(uint8_t *pBuffer, uint16_t WriteAddr, uint16_t NumByteToWrite) |
||||
{ |
||||
uint16_t numofpage = 0, numofsingle = 0, count = 0; |
||||
uint16_t addr = 0; |
||||
uint8_t dataindex = 0; |
||||
uint32_t status = EEPROM_OK; |
||||
|
||||
addr = WriteAddr % EEPROM_PAGESIZE; |
||||
count = EEPROM_PAGESIZE - addr; |
||||
numofpage = NumByteToWrite / EEPROM_PAGESIZE; |
||||
numofsingle = NumByteToWrite % EEPROM_PAGESIZE; |
||||
|
||||
/* If WriteAddr is EEPROM_PAGESIZE aligned */ |
||||
if(addr == 0)
|
||||
{ |
||||
/* If NumByteToWrite < EEPROM_PAGESIZE */ |
||||
if(numofpage == 0)
|
||||
{ |
||||
/* Store the number of data to be written */ |
||||
dataindex = numofsingle; |
||||
/* Start writing data */ |
||||
status = BSP_EEPROM_WritePage(pBuffer, WriteAddr, (uint8_t*)(&dataindex)); |
||||
if(status != EEPROM_OK) |
||||
{ |
||||
return status; |
||||
} |
||||
} |
||||
/* If NumByteToWrite > EEPROM_PAGESIZE */ |
||||
else
|
||||
{ |
||||
while(numofpage--) |
||||
{ |
||||
/* Store the number of data to be written */ |
||||
dataindex = EEPROM_PAGESIZE;
|
||||
status = BSP_EEPROM_WritePage(pBuffer, WriteAddr, (uint8_t*)(&dataindex)); |
||||
if(status != EEPROM_OK) |
||||
{ |
||||
return status; |
||||
} |
||||
|
||||
WriteAddr += EEPROM_PAGESIZE; |
||||
pBuffer += EEPROM_PAGESIZE; |
||||
} |
||||
|
||||
if(numofsingle!=0) |
||||
{ |
||||
/* Store the number of data to be written */ |
||||
dataindex = numofsingle;
|
||||
status = BSP_EEPROM_WritePage(pBuffer, WriteAddr, (uint8_t*)(&dataindex)); |
||||
if(status != EEPROM_OK) |
||||
{ |
||||
return status; |
||||
} |
||||
} |
||||
} |
||||
} |
||||
/* If WriteAddr is not EEPROM_PAGESIZE aligned */ |
||||
else
|
||||
{ |
||||
/* If NumByteToWrite < EEPROM_PAGESIZE */ |
||||
if(numofpage== 0)
|
||||
{ |
||||
/* If the number of data to be written is more than the remaining space
|
||||
in the current page: */ |
||||
if(NumByteToWrite > count) |
||||
{ |
||||
/* Store the number of data to be written */ |
||||
dataindex = count;
|
||||
/* Write the data contained in same page */ |
||||
status = BSP_EEPROM_WritePage(pBuffer, WriteAddr, (uint8_t*)(&dataindex)); |
||||
if(status != EEPROM_OK) |
||||
{ |
||||
return status; |
||||
} |
||||
|
||||
/* Store the number of data to be written */ |
||||
dataindex = (NumByteToWrite - count);
|
||||
/* Write the remaining data in the following page */ |
||||
status = BSP_EEPROM_WritePage((uint8_t*)(pBuffer + count), (WriteAddr + count), (uint8_t*)(&dataindex)); |
||||
if(status != EEPROM_OK) |
||||
{ |
||||
return status; |
||||
} |
||||
}
|
||||
else
|
||||
{ |
||||
/* Store the number of data to be written */ |
||||
dataindex = numofsingle;
|
||||
status = BSP_EEPROM_WritePage(pBuffer, WriteAddr, (uint8_t*)(&dataindex)); |
||||
if(status != EEPROM_OK) |
||||
{ |
||||
return status; |
||||
} |
||||
}
|
||||
} |
||||
/* If NumByteToWrite > EEPROM_PAGESIZE */ |
||||
else |
||||
{ |
||||
NumByteToWrite -= count; |
||||
numofpage = NumByteToWrite / EEPROM_PAGESIZE; |
||||
numofsingle = NumByteToWrite % EEPROM_PAGESIZE; |
||||
|
||||
if(count != 0) |
||||
{
|
||||
/* Store the number of data to be written */ |
||||
dataindex = count;
|
||||
status = BSP_EEPROM_WritePage(pBuffer, WriteAddr, (uint8_t*)(&dataindex)); |
||||
if(status != EEPROM_OK) |
||||
{ |
||||
return status; |
||||
} |
||||
WriteAddr += count; |
||||
pBuffer += count; |
||||
}
|
||||
|
||||
while(numofpage--) |
||||
{ |
||||
/* Store the number of data to be written */ |
||||
dataindex = EEPROM_PAGESIZE;
|
||||
status = BSP_EEPROM_WritePage(pBuffer, WriteAddr, (uint8_t*)(&dataindex)); |
||||
if(status != EEPROM_OK) |
||||
{ |
||||
return status; |
||||
} |
||||
WriteAddr += EEPROM_PAGESIZE; |
||||
pBuffer += EEPROM_PAGESIZE;
|
||||
} |
||||
if(numofsingle != 0) |
||||
{ |
||||
/* Store the number of data to be written */ |
||||
dataindex = numofsingle;
|
||||
status = BSP_EEPROM_WritePage(pBuffer, WriteAddr, (uint8_t*)(&dataindex)); |
||||
if(status != EEPROM_OK) |
||||
{ |
||||
return status; |
||||
} |
||||
} |
||||
} |
||||
}
|
||||
|
||||
/* If all operations OK, return EEPROM_OK (0) */ |
||||
return EEPROM_OK; |
||||
} |
||||
|
||||
/**
|
||||
* @brief Wait for EEPROM Standby state. |
||||
*
|
||||
* @note This function allows to wait and check that EEPROM has finished the
|
||||
* last operation. It is mostly used after Write operation: after receiving |
||||
* the buffer to be written, the EEPROM may need additional time to actually |
||||
* perform the write operation. During this time, it doesn't answer to |
||||
* I2C packets addressed to it. Once the write operation is complete |
||||
* the EEPROM responds to its address. |
||||
*
|
||||
* @retval EEPROM_OK (0) if operation is correctly performed, else return value
|
||||
* different from EEPROM_OK (0) or the timeout user callback. |
||||
*/ |
||||
uint32_t BSP_EEPROM_WaitEepromStandbyState(void)
|
||||
{ |
||||
/* Check if the maximum allowed number of trials has bee reached */ |
||||
if(EEPROM_IO_IsDeviceReady(EEPROMAddress, EEPROM_MAX_TRIALS) != HAL_OK) |
||||
{ |
||||
/* If the maximum number of trials has been reached, exit the function */ |
||||
BSP_EEPROM_TIMEOUT_UserCallback(); |
||||
return EEPROM_TIMEOUT; |
||||
} |
||||
return EEPROM_OK; |
||||
} |
||||
|
||||
/**
|
||||
* @brief Basic management of the timeout situation. |
||||
*/ |
||||
__weak void BSP_EEPROM_TIMEOUT_UserCallback(void) |
||||
{ |
||||
} |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
@ -0,0 +1,125 @@
|
||||
/**
|
||||
****************************************************************************** |
||||
* @file stm32469i_discovery_eeprom.h |
||||
* @author MCD Application Team |
||||
* @brief This file contains all the functions prototypes for |
||||
* the stm32469i_discovery_eeprom.c firmware driver. |
||||
****************************************************************************** |
||||
* @attention |
||||
* |
||||
* Copyright (c) 2017 STMicroelectronics. |
||||
* All rights reserved. |
||||
* |
||||
* This software is licensed under terms that can be found in the LICENSE file |
||||
* in the root directory of this software component. |
||||
* If no LICENSE file comes with this software, it is provided AS-IS. |
||||
* |
||||
****************************************************************************** |
||||
*/ |
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/ |
||||
#ifndef __STM32F469I_DISCOVERY_EEPROM_H |
||||
#define __STM32F469I_DISCOVERY_EEPROM_H |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include "stm32469i_discovery.h" |
||||
|
||||
/** @addtogroup BSP
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @addtogroup STM32469I_Discovery
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @addtogroup STM32469I-Discovery_EEPROM
|
||||
* @brief This file includes the I2C EEPROM driver of STM32469I-Discovery board. |
||||
* @{ |
||||
*/ |
||||
|
||||
/** @defgroup STM32469I-Discovery_EEPROM_Exported_Types STM32469I Discovery EEPROM Exported Types
|
||||
* @{ |
||||
*/ |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup STM32469I-Discovery_EEPROM_Exported_Constants STM32469I Discovery EEPROM Exported Constants
|
||||
* @{ |
||||
*/ |
||||
/* EEPROM hardware address and page size */ |
||||
#define EEPROM_PAGESIZE ((uint8_t)4) |
||||
#define EEPROM_MAX_SIZE ((uint16_t)0x2000) /* 64Kbit */ |
||||
|
||||
/* Maximum Timeout values for flags and events waiting loops.
|
||||
This timeout is based on systick set to 1ms*/ |
||||
/* Timeout for read based if read all the EEPROM : EEPROM_MAX_SIZE * I2C_SPEED (640ms) */ |
||||
#define EEPROM_READ_TIMEOUT ((uint32_t)(1000)) |
||||
/* Timeout for write based on max write which is EEPROM_PAGESIZE bytes: EEPROM_PAGESIZE * I2C_SPEED (320us) */ |
||||
#define EEPROM_WRITE_TIMEOUT ((uint32_t)(10)) |
||||
|
||||
/* Maximum number of trials for EEPROM_WaitEepromStandbyState() function */ |
||||
#define EEPROM_MAX_TRIALS 3000 |
||||
|
||||
#define EEPROM_OK 0 |
||||
#define EEPROM_FAIL 1 |
||||
#define EEPROM_TIMEOUT 2 |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup STM32469I-Discovery_EEPROM_Exported_Macros STM32469I Discovery EEPROM Exported Macros
|
||||
* @{ |
||||
*/ |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup STM32469I-Discovery_EEPROM_Exported_Functions STM32469I Discovery EEPROM Exported Functions
|
||||
* @{ |
||||
*/ |
||||
uint32_t BSP_EEPROM_Init(void); |
||||
uint8_t BSP_EEPROM_DeInit(void); |
||||
uint32_t BSP_EEPROM_ReadBuffer(uint8_t* pBuffer, uint16_t ReadAddr, uint16_t* NumByteToRead); |
||||
uint32_t BSP_EEPROM_WritePage(uint8_t* pBuffer, uint16_t WriteAddr, uint8_t* NumByteToWrite); |
||||
uint32_t BSP_EEPROM_WriteBuffer(uint8_t* pBuffer, uint16_t WriteAddr, uint16_t NumByteToWrite); |
||||
uint32_t BSP_EEPROM_WaitEepromStandbyState(void); |
||||
|
||||
/* USER Callbacks: This function is declared as __weak in EEPROM driver and
|
||||
should be implemented into user application. |
||||
BSP_EEPROM_TIMEOUT_UserCallback() function is called whenever a timeout condition |
||||
occure during communication (waiting on an event that doesn't occur, bus |
||||
errors, busy devices ...). */ |
||||
void BSP_EEPROM_TIMEOUT_UserCallback(void); |
||||
|
||||
/* Link function for I2C EEPROM peripheral */ |
||||
void EEPROM_IO_Init(void); |
||||
HAL_StatusTypeDef EEPROM_IO_WriteData(uint16_t DevAddress, uint16_t MemAddress, uint8_t *pBuffer, uint32_t BufferSize); |
||||
HAL_StatusTypeDef EEPROM_IO_ReadData(uint16_t DevAddress, uint16_t MemAddress, uint8_t *pBuffer, uint32_t BufferSize); |
||||
HAL_StatusTypeDef EEPROM_IO_IsDeviceReady(uint16_t DevAddress, uint32_t Trials); |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
#endif /* __STM32F469I_DISCOVERY_EEPROM_H */ |
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,389 @@
|
||||
/**
|
||||
****************************************************************************** |
||||
* @file stm32469i_discovery_lcd.h |
||||
* @author MCD Application Team |
||||
* @brief This file contains the common defines and functions prototypes for |
||||
* the stm32469i_discovery_lcd.c driver. |
||||
****************************************************************************** |
||||
* @attention |
||||
* |
||||
* Copyright (c) 2017 STMicroelectronics. |
||||
* All rights reserved. |
||||
* |
||||
* This software is licensed under terms that can be found in the LICENSE file |
||||
* in the root directory of this software component. |
||||
* If no LICENSE file comes with this software, it is provided AS-IS. |
||||
* |
||||
****************************************************************************** |
||||
*/ |
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/ |
||||
#ifndef __STM32469I_DISCOVERY_LCD_H |
||||
#define __STM32469I_DISCOVERY_LCD_H |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
/* Includes ------------------------------------------------------------------*/ |
||||
/* Include LCD component Driver */ |
||||
|
||||
/* Include OTM8009A LCD Driver IC driver code */ |
||||
#include "../Components/otm8009a/otm8009a.h" |
||||
/* Include NT35510 LCD Driver IC driver code */ |
||||
#include "../Components/nt35510/nt35510.h" |
||||
|
||||
/* Include SDRAM Driver */ |
||||
#include "stm32469i_discovery_sdram.h" |
||||
#include "stm32469i_discovery.h" |
||||
#include "../../../Utilities/Fonts/fonts.h" |
||||
|
||||
#include <string.h> /* use of memset() */ |
||||
|
||||
/** @addtogroup BSP
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @addtogroup STM32469I_Discovery
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @addtogroup STM32469I-Discovery_LCD
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @defgroup STM32469I-Discovery_LCD_Exported_Constants STM32469I Discovery LCD Exported Constants
|
||||
* @{ |
||||
*/ |
||||
|
||||
#define LCD_LayerCfgTypeDef LTDC_LayerCfgTypeDef |
||||
/**
|
||||
* @brief LCD FB_StartAddress
|
||||
*/ |
||||
#define LCD_FB_START_ADDRESS ((uint32_t)0xC0000000) |
||||
|
||||
/** @brief Maximum number of LTDC layers
|
||||
*/ |
||||
#define LTDC_MAX_LAYER_NUMBER ((uint32_t) 2) |
||||
|
||||
/** @brief LTDC Background layer index
|
||||
*/ |
||||
#define LTDC_ACTIVE_LAYER_BACKGROUND ((uint32_t) 0) |
||||
|
||||
/** @brief LTDC Foreground layer index
|
||||
*/ |
||||
#define LTDC_ACTIVE_LAYER_FOREGROUND ((uint32_t) 1) |
||||
|
||||
/** @brief Number of LTDC layers
|
||||
*/ |
||||
#define LTDC_NB_OF_LAYERS ((uint32_t) 2) |
||||
|
||||
/** @brief LTDC Default used layer index
|
||||
*/ |
||||
#define LTDC_DEFAULT_ACTIVE_LAYER LTDC_ACTIVE_LAYER_FOREGROUND |
||||
|
||||
/**
|
||||
* @brief LCD status structure definition
|
||||
*/
|
||||
#define LCD_OK 0x00 |
||||
#define LCD_ERROR 0x01 |
||||
#define LCD_TIMEOUT 0x02 |
||||
|
||||
/**
|
||||
* @brief LCD Display OTM8009A ID
|
||||
*/
|
||||
#define LCD_OTM8009A_ID ((uint32_t) 0) |
||||
|
||||
/**
|
||||
* @brief LCD color definitions values |
||||
* in ARGB8888 format. |
||||
*/ |
||||
|
||||
/** @brief Blue value in ARGB8888 format
|
||||
*/ |
||||
#define LCD_COLOR_BLUE ((uint32_t) 0xFF0000FF) |
||||
|
||||
/** @brief Green value in ARGB8888 format
|
||||
*/ |
||||
#define LCD_COLOR_GREEN ((uint32_t) 0xFF00FF00) |
||||
|
||||
/** @brief Red value in ARGB8888 format
|
||||
*/ |
||||
#define LCD_COLOR_RED ((uint32_t) 0xFFFF0000) |
||||
|
||||
/** @brief Cyan value in ARGB8888 format
|
||||
*/ |
||||
#define LCD_COLOR_CYAN ((uint32_t) 0xFF00FFFF) |
||||
|
||||
/** @brief Magenta value in ARGB8888 format
|
||||
*/ |
||||
#define LCD_COLOR_MAGENTA ((uint32_t) 0xFFFF00FF) |
||||
|
||||
/** @brief Yellow value in ARGB8888 format
|
||||
*/ |
||||
#define LCD_COLOR_YELLOW ((uint32_t) 0xFFFFFF00) |
||||
|
||||
/** @brief Light Blue value in ARGB8888 format
|
||||
*/ |
||||
#define LCD_COLOR_LIGHTBLUE ((uint32_t) 0xFF8080FF) |
||||
|
||||
/** @brief Light Green value in ARGB8888 format
|
||||
*/ |
||||
#define LCD_COLOR_LIGHTGREEN ((uint32_t) 0xFF80FF80) |
||||
|
||||
/** @brief Light Red value in ARGB8888 format
|
||||
*/ |
||||
#define LCD_COLOR_LIGHTRED ((uint32_t) 0xFFFF8080) |
||||
|
||||
/** @brief Light Cyan value in ARGB8888 format
|
||||
*/ |
||||
#define LCD_COLOR_LIGHTCYAN ((uint32_t) 0xFF80FFFF) |
||||
|
||||
/** @brief Light Magenta value in ARGB8888 format
|
||||
*/ |
||||
#define LCD_COLOR_LIGHTMAGENTA ((uint32_t) 0xFFFF80FF) |
||||
|
||||
/** @brief Light Yellow value in ARGB8888 format
|
||||
*/ |
||||
#define LCD_COLOR_LIGHTYELLOW ((uint32_t) 0xFFFFFF80) |
||||
|
||||
/** @brief Dark Blue value in ARGB8888 format
|
||||
*/ |
||||
#define LCD_COLOR_DARKBLUE ((uint32_t) 0xFF000080) |
||||
|
||||
/** @brief Light Dark Green value in ARGB8888 format
|
||||
*/ |
||||
#define LCD_COLOR_DARKGREEN ((uint32_t) 0xFF008000) |
||||
|
||||
/** @brief Light Dark Red value in ARGB8888 format
|
||||
*/ |
||||
#define LCD_COLOR_DARKRED ((uint32_t) 0xFF800000) |
||||
|
||||
/** @brief Dark Cyan value in ARGB8888 format
|
||||
*/ |
||||
#define LCD_COLOR_DARKCYAN ((uint32_t) 0xFF008080) |
||||
|
||||
/** @brief Dark Magenta value in ARGB8888 format
|
||||
*/ |
||||
#define LCD_COLOR_DARKMAGENTA ((uint32_t) 0xFF800080) |
||||
|
||||
/** @brief Dark Yellow value in ARGB8888 format
|
||||
*/ |
||||
#define LCD_COLOR_DARKYELLOW ((uint32_t) 0xFF808000) |
||||
|
||||
/** @brief White value in ARGB8888 format
|
||||
*/ |
||||
#define LCD_COLOR_WHITE ((uint32_t) 0xFFFFFFFF) |
||||
|
||||
/** @brief Light Gray value in ARGB8888 format
|
||||
*/ |
||||
#define LCD_COLOR_LIGHTGRAY ((uint32_t) 0xFFD3D3D3) |
||||
|
||||
/** @brief Gray value in ARGB8888 format
|
||||
*/ |
||||
#define LCD_COLOR_GRAY ((uint32_t) 0xFF808080) |
||||
|
||||
/** @brief Dark Gray value in ARGB8888 format
|
||||
*/ |
||||
#define LCD_COLOR_DARKGRAY ((uint32_t) 0xFF404040) |
||||
|
||||
/** @brief Black value in ARGB8888 format
|
||||
*/ |
||||
#define LCD_COLOR_BLACK ((uint32_t) 0xFF000000) |
||||
|
||||
/** @brief Brown value in ARGB8888 format
|
||||
*/ |
||||
#define LCD_COLOR_BROWN ((uint32_t) 0xFFA52A2A) |
||||
|
||||
/** @brief Orange value in ARGB8888 format
|
||||
*/ |
||||
#define LCD_COLOR_ORANGE ((uint32_t) 0xFFFFA500) |
||||
|
||||
/** @brief Transparent value in ARGB8888 format
|
||||
*/ |
||||
#define LCD_COLOR_TRANSPARENT ((uint32_t) 0xFF000000) |
||||
|
||||
/**
|
||||
* @brief LCD default font |
||||
*/ |
||||
#define LCD_DEFAULT_FONT Font24 |
||||
|
||||
/**
|
||||
* @brief Possible values of |
||||
* pixel data format (ie color coding) transmitted on DSI Data lane in DSI packets |
||||
*/ |
||||
|
||||
#define LCD_DSI_PIXEL_DATA_FMT_RBG888 DSI_RGB888 /*!< DSI packet pixel format chosen is RGB888 : 24 bpp */ |
||||
#define LCD_DSI_PIXEL_DATA_FMT_RBG565 DSI_RGB565 /*!< DSI packet pixel format chosen is RGB565 : 16 bpp */ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup STM32469I-Discovery_LCD_Exported_Types STM32469I Discovery LCD Exported Types
|
||||
* @{ |
||||
*/ |
||||
|
||||
/**
|
||||
* @brief LCD Drawing main properties |
||||
*/ |
||||
typedef struct |
||||
{ |
||||
uint32_t TextColor; /*!< Specifies the color of text */ |
||||
uint32_t BackColor; /*!< Specifies the background color below the text */ |
||||
sFONT *pFont; /*!< Specifies the font used for the text */ |
||||
|
||||
} LCD_DrawPropTypeDef; |
||||
|
||||
/**
|
||||
* @brief LCD Drawing point (pixel) geometric definition |
||||
*/ |
||||
typedef struct |
||||
{ |
||||
int16_t X; /*!< geometric X position of drawing */ |
||||
int16_t Y; /*!< geometric Y position of drawing */ |
||||
|
||||
} Point; |
||||
|
||||
/**
|
||||
* @brief Pointer on LCD Drawing point (pixel) geometric definition |
||||
*/ |
||||
typedef Point * pPoint; |
||||
|
||||
/**
|
||||
* @brief LCD drawing Line alignment mode definitions |
||||
*/ |
||||
typedef enum |
||||
{ |
||||
CENTER_MODE = 0x01, /*!< Center mode */ |
||||
RIGHT_MODE = 0x02, /*!< Right mode */ |
||||
LEFT_MODE = 0x03 /*!< Left mode */ |
||||
|
||||
} Text_AlignModeTypdef; |
||||
|
||||
|
||||
/**
|
||||
* @brief LCD_OrientationTypeDef |
||||
* Possible values of Display Orientation |
||||
*/ |
||||
typedef enum |
||||
{ |
||||
LCD_ORIENTATION_PORTRAIT = 0x00, /*!< Portrait orientation choice of LCD screen */ |
||||
LCD_ORIENTATION_LANDSCAPE = 0x01, /*!< Landscape orientation choice of LCD screen */ |
||||
LCD_ORIENTATION_INVALID = 0x02 /*!< Invalid orientation choice of LCD screen */ |
||||
} LCD_OrientationTypeDef; |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup STM32469I-Discovery_LCD_Exported_Macro STM32469I Discovery LCD Exported Macro
|
||||
* @{ |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup STM32469I-Discovery_LCD_Exported_Functions STM32469I Discovery LCD Exported Functions
|
||||
* @{ |
||||
*/ |
||||
void BSP_LCD_DMA2D_IRQHandler(void); |
||||
void BSP_LCD_DSI_IRQHandler(void); |
||||
void BSP_LCD_LTDC_IRQHandler(void); |
||||
void BSP_LCD_LTDC_ER_IRQHandler(void); |
||||
|
||||
uint8_t BSP_LCD_Init(void); |
||||
uint8_t BSP_LCD_InitEx(LCD_OrientationTypeDef orientation); |
||||
|
||||
void BSP_LCD_MspDeInit(void); |
||||
void BSP_LCD_MspInit(void); |
||||
void BSP_LCD_Reset(void); |
||||
|
||||
uint32_t BSP_LCD_GetXSize(void); |
||||
uint32_t BSP_LCD_GetYSize(void); |
||||
void BSP_LCD_SetXSize(uint32_t imageWidthPixels); |
||||
void BSP_LCD_SetYSize(uint32_t imageHeightPixels); |
||||
|
||||
void BSP_LCD_LayerDefaultInit(uint16_t LayerIndex, uint32_t FB_Address); |
||||
void BSP_LCD_SetTransparency(uint32_t LayerIndex, uint8_t Transparency); |
||||
void BSP_LCD_SetLayerAddress(uint32_t LayerIndex, uint32_t Address); |
||||
void BSP_LCD_SetColorKeying(uint32_t LayerIndex, uint32_t RGBValue); |
||||
void BSP_LCD_ResetColorKeying(uint32_t LayerIndex); |
||||
void BSP_LCD_SetLayerWindow(uint16_t LayerIndex, uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height); |
||||
|
||||
void BSP_LCD_SelectLayer(uint32_t LayerIndex); |
||||
void BSP_LCD_SetLayerVisible(uint32_t LayerIndex, FunctionalState State); |
||||
|
||||
void BSP_LCD_SetTextColor(uint32_t Color); |
||||
uint32_t BSP_LCD_GetTextColor(void); |
||||
void BSP_LCD_SetBackColor(uint32_t Color); |
||||
uint32_t BSP_LCD_GetBackColor(void); |
||||
void BSP_LCD_SetFont(sFONT *fonts); |
||||
sFONT *BSP_LCD_GetFont(void); |
||||
|
||||
uint32_t BSP_LCD_ReadPixel(uint16_t Xpos, uint16_t Ypos); |
||||
void BSP_LCD_DrawPixel(uint16_t Xpos, uint16_t Ypos, uint32_t pixel); |
||||
void BSP_LCD_Clear(uint32_t Color); |
||||
void BSP_LCD_ClearStringLine(uint32_t Line); |
||||
void BSP_LCD_DisplayStringAtLine(uint16_t Line, uint8_t *ptr); |
||||
void BSP_LCD_DisplayStringAt(uint16_t Xpos, uint16_t Ypos, uint8_t *Text, Text_AlignModeTypdef Mode); |
||||
void BSP_LCD_DisplayChar(uint16_t Xpos, uint16_t Ypos, uint8_t Ascii); |
||||
|
||||
void BSP_LCD_DrawHLine(uint16_t Xpos, uint16_t Ypos, uint16_t Length); |
||||
void BSP_LCD_DrawVLine(uint16_t Xpos, uint16_t Ypos, uint16_t Length); |
||||
void BSP_LCD_DrawLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2); |
||||
void BSP_LCD_DrawRect(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height); |
||||
void BSP_LCD_DrawCircle(uint16_t Xpos, uint16_t Ypos, uint16_t Radius); |
||||
void BSP_LCD_DrawPolygon(pPoint Points, uint16_t PointCount); |
||||
void BSP_LCD_DrawEllipse(int Xpos, int Ypos, int XRadius, int YRadius); |
||||
void BSP_LCD_DrawBitmap(uint32_t Xpos, uint32_t Ypos, uint8_t *pbmp); |
||||
|
||||
void BSP_LCD_FillRect(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height); |
||||
void BSP_LCD_FillCircle(uint16_t Xpos, uint16_t Ypos, uint16_t Radius); |
||||
void BSP_LCD_FillPolygon(pPoint Points, uint16_t PointCount); |
||||
void BSP_LCD_FillEllipse(int Xpos, int Ypos, int XRadius, int YRadius); |
||||
|
||||
void BSP_LCD_DisplayOff(void); |
||||
void BSP_LCD_DisplayOn(void); |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup STM32469I-EVAL_LCD_Exported_Variables STM32469I EVAL LCD Exported Variables
|
||||
* @{ |
||||
*/ |
||||
|
||||
/* @brief DMA2D handle variable */ |
||||
extern DMA2D_HandleTypeDef hdma2d_eval; |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup STM32469I-Discovery_LCD_Exported_Variables STM32469I Discovery LCD Exported Variables
|
||||
* @{ |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
#endif /* __STM32469I_DISCOVERY_LCD_H */ |
@ -0,0 +1,755 @@
|
||||
/**
|
||||
****************************************************************************** |
||||
* @file stm32469i_discovery_qspi.c |
||||
* @author MCD Application Team |
||||
* @brief This file includes a standard driver for the N25Q128A QSPI |
||||
* memory mounted on STM32469I-Discovery board. |
||||
* |
||||
****************************************************************************** |
||||
* @attention |
||||
* |
||||
* Copyright (c) 2017 STMicroelectronics. |
||||
* All rights reserved. |
||||
* |
||||
* This software is licensed under terms that can be found in the LICENSE file |
||||
* in the root directory of this software component. |
||||
* If no LICENSE file comes with this software, it is provided AS-IS. |
||||
* |
||||
****************************************************************************** |
||||
@verbatim |
||||
============================================================================== |
||||
##### How to use this driver ##### |
||||
============================================================================== |
||||
[..] |
||||
(#) This driver is used to drive the N25Q128A QSPI external |
||||
memory mounted on STM32469I-Discovery board. |
||||
|
||||
(#) This driver need a specific component driver N25Q128A to be included with. |
||||
|
||||
(#) Initialization steps: |
||||
(++) Initialize the QPSI external memory using the BSP_QSPI_Init() function. This |
||||
function includes the MSP layer hardware resources initialization and the |
||||
QSPI interface with the external memory. |
||||
|
||||
(#) QSPI memory operations |
||||
(++) QSPI memory can be accessed with read/write operations once it is |
||||
initialized. |
||||
Read/write operation can be performed with AHB access using the functions |
||||
BSP_QSPI_Read()/BSP_QSPI_Write(). |
||||
(++) The function BSP_QSPI_GetInfo() returns the configuration of the QSPI memory. |
||||
(see the QSPI memory data sheet) |
||||
(++) Perform erase block operation using the function BSP_QSPI_Erase_Block() and by |
||||
specifying the block address. You can perform an erase operation of the whole |
||||
chip by calling the function BSP_QSPI_Erase_Chip(). |
||||
(++) The function BSP_QSPI_GetStatus() returns the current status of the QSPI memory. |
||||
(see the QSPI memory data sheet) |
||||
@endverbatim |
||||
****************************************************************************** |
||||
*/ |
||||
|
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include "stm32469i_discovery_qspi.h" |
||||
|
||||
/** @addtogroup BSP
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @addtogroup STM32469I_Discovery
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @defgroup STM32469I_Discovery_QSPI STM32469I Discovery QSPI
|
||||
* @{ |
||||
*/ |
||||
|
||||
|
||||
/* Private variables ---------------------------------------------------------*/ |
||||
|
||||
|
||||
/** @defgroup STM32469I_Discovery_QSPI_Private_Variables STM32469I Discovery QSPI Private Variables
|
||||
* @{ |
||||
*/ |
||||
QSPI_HandleTypeDef QSPIHandle; |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
|
||||
|
||||
/* Private functions ---------------------------------------------------------*/ |
||||
|
||||
/** @defgroup STM32469I_Discovery_QSPI_Private_Functions STM32469I Discovery QSPI Private Functions
|
||||
* @{ |
||||
*/ |
||||
static uint8_t QSPI_ResetMemory (QSPI_HandleTypeDef *hqspi); |
||||
static uint8_t QSPI_DummyCyclesCfg (QSPI_HandleTypeDef *hqspi); |
||||
static uint8_t QSPI_WriteEnable (QSPI_HandleTypeDef *hqspi); |
||||
static uint8_t QSPI_AutoPollingMemReady (QSPI_HandleTypeDef *hqspi, uint32_t Timeout); |
||||
|
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup STM32469I_Discovery_QSPI_Exported_Functions STM32469I Discovery QSPI Exported Functions
|
||||
* @{ |
||||
*/ |
||||
|
||||
/**
|
||||
* @brief Initializes the QSPI interface. |
||||
* @retval QSPI memory status |
||||
*/ |
||||
uint8_t BSP_QSPI_Init(void) |
||||
{ |
||||
QSPIHandle.Instance = QUADSPI; |
||||
|
||||
/* Call the DeInit function to reset the driver */ |
||||
if (HAL_QSPI_DeInit(&QSPIHandle) != HAL_OK) |
||||
{ |
||||
return QSPI_ERROR; |
||||
} |
||||
|
||||
/* System level initialization */ |
||||
BSP_QSPI_MspInit(&QSPIHandle, NULL); |
||||
|
||||
/* QSPI initialization */ |
||||
QSPIHandle.Init.ClockPrescaler = 1; /* QSPI Freq= 180 MHz / (1+1) = 90 MHz */ |
||||
QSPIHandle.Init.FifoThreshold = 1; |
||||
QSPIHandle.Init.SampleShifting = QSPI_SAMPLE_SHIFTING_HALFCYCLE; |
||||
QSPIHandle.Init.FlashSize = POSITION_VAL(N25Q128A_FLASH_SIZE) - 1; |
||||
QSPIHandle.Init.ChipSelectHighTime = QSPI_CS_HIGH_TIME_5_CYCLE; |
||||
QSPIHandle.Init.ClockMode = QSPI_CLOCK_MODE_0; |
||||
QSPIHandle.Init.FlashID = QSPI_FLASH_ID_1; |
||||
QSPIHandle.Init.DualFlash = QSPI_DUALFLASH_DISABLE; |
||||
|
||||
if (HAL_QSPI_Init(&QSPIHandle) != HAL_OK) |
||||
{ |
||||
return QSPI_ERROR; |
||||
} |
||||
|
||||
/* QSPI memory reset */ |
||||
if (QSPI_ResetMemory(&QSPIHandle) != QSPI_OK) |
||||
{ |
||||
return QSPI_NOT_SUPPORTED; |
||||
} |
||||
|
||||
|
||||
/* Configuration of the dummy cucles on QSPI memory side */ |
||||
if (QSPI_DummyCyclesCfg(&QSPIHandle) != QSPI_OK) |
||||
{ |
||||
return QSPI_NOT_SUPPORTED; |
||||
} |
||||
|
||||
return QSPI_OK; |
||||
} |
||||
|
||||
/**
|
||||
* @brief De-Initializes the QSPI interface. |
||||
* @retval QSPI memory status |
||||
*/ |
||||
uint8_t BSP_QSPI_DeInit(void) |
||||
{ |
||||
QSPIHandle.Instance = QUADSPI; |
||||
|
||||
/* Call the DeInit function to reset the driver */ |
||||
if (HAL_QSPI_DeInit(&QSPIHandle) != HAL_OK) |
||||
{ |
||||
return QSPI_ERROR; |
||||
} |
||||
|
||||
/* System level De-initialization */ |
||||
BSP_QSPI_MspDeInit(&QSPIHandle, NULL); |
||||
|
||||
return QSPI_OK; |
||||
} |
||||
|
||||
/**
|
||||
* @brief Reads an amount of data from the QSPI memory. |
||||
* @param pData: Pointer to data to be read |
||||
* @param ReadAddr: Read start address |
||||
* @param Size: Size of data to read |
||||
* @retval QSPI memory status |
||||
*/ |
||||
uint8_t BSP_QSPI_Read(uint8_t* pData, uint32_t ReadAddr, uint32_t Size) |
||||
{ |
||||
QSPI_CommandTypeDef s_command; |
||||
|
||||
/* Initialize the read command */ |
||||
s_command.InstructionMode = QSPI_INSTRUCTION_1_LINE; |
||||
s_command.Instruction = QUAD_INOUT_FAST_READ_CMD; |
||||
s_command.AddressMode = QSPI_ADDRESS_4_LINES; |
||||
s_command.AddressSize = QSPI_ADDRESS_24_BITS; |
||||
s_command.Address = ReadAddr; |
||||
s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE; |
||||
s_command.DataMode = QSPI_DATA_4_LINES; |
||||
s_command.DummyCycles = N25Q128A_DUMMY_CYCLES_READ_QUAD; |
||||
s_command.NbData = Size; |
||||
s_command.DdrMode = QSPI_DDR_MODE_DISABLE; |
||||
s_command.DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY; |
||||
s_command.SIOOMode = QSPI_SIOO_INST_EVERY_CMD; |
||||
|
||||
/* Configure the command */ |
||||
if (HAL_QSPI_Command(&QSPIHandle, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) |
||||
{ |
||||
return QSPI_ERROR; |
||||
} |
||||
|
||||
/* Set S# timing for Read command: Min 20ns for N25Q128A memory */ |
||||
MODIFY_REG(QSPIHandle.Instance->DCR, QUADSPI_DCR_CSHT, QSPI_CS_HIGH_TIME_2_CYCLE); |
||||
|
||||
/* Reception of the data */ |
||||
if (HAL_QSPI_Receive(&QSPIHandle, pData, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) |
||||
{ |
||||
return QSPI_ERROR; |
||||
} |
||||
|
||||
/* Restore S# timing for nonRead commands */ |
||||
MODIFY_REG(QSPIHandle.Instance->DCR, QUADSPI_DCR_CSHT, QSPI_CS_HIGH_TIME_5_CYCLE); |
||||
|
||||
return QSPI_OK; |
||||
} |
||||
|
||||
/**
|
||||
* @brief Writes an amount of data to the QSPI memory. |
||||
* @param pData: Pointer to data to be written |
||||
* @param WriteAddr: Write start address |
||||
* @param Size: Size of data to write |
||||
* @retval QSPI memory status |
||||
*/ |
||||
uint8_t BSP_QSPI_Write(uint8_t* pData, uint32_t WriteAddr, uint32_t Size) |
||||
{ |
||||
QSPI_CommandTypeDef s_command; |
||||
uint32_t end_addr, current_size, current_addr; |
||||
|
||||
/* Calculation of the size between the write address and the end of the page */ |
||||
current_size = N25Q128A_PAGE_SIZE - (WriteAddr % N25Q128A_PAGE_SIZE); |
||||
|
||||
/* Check if the size of the data is less than the remaining place in the page */ |
||||
if (current_size > Size) |
||||
{ |
||||
current_size = Size; |
||||
} |
||||
|
||||
/* Initialize the address variables */ |
||||
current_addr = WriteAddr; |
||||
end_addr = WriteAddr + Size; |
||||
|
||||
/* Initialize the program command */ |
||||
s_command.InstructionMode = QSPI_INSTRUCTION_1_LINE; |
||||
s_command.Instruction = EXT_QUAD_IN_FAST_PROG_CMD; |
||||
s_command.AddressMode = QSPI_ADDRESS_4_LINES; |
||||
s_command.AddressSize = QSPI_ADDRESS_24_BITS; |
||||
s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE; |
||||
s_command.DataMode = QSPI_DATA_4_LINES; |
||||
s_command.DummyCycles = 0; |
||||
s_command.DdrMode = QSPI_DDR_MODE_DISABLE; |
||||
s_command.DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY; |
||||
s_command.SIOOMode = QSPI_SIOO_INST_EVERY_CMD; |
||||
|
||||
/* Perform the write page by page */ |
||||
do |
||||
{ |
||||
s_command.Address = current_addr; |
||||
s_command.NbData = current_size; |
||||
|
||||
/* Enable write operations */ |
||||
if (QSPI_WriteEnable(&QSPIHandle) != QSPI_OK) |
||||
{ |
||||
return QSPI_ERROR; |
||||
} |
||||
|
||||
/* Configure the command */ |
||||
if (HAL_QSPI_Command(&QSPIHandle, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) |
||||
{ |
||||
return QSPI_ERROR; |
||||
} |
||||
|
||||
/* Transmission of the data */ |
||||
if (HAL_QSPI_Transmit(&QSPIHandle, pData, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) |
||||
{ |
||||
return QSPI_ERROR; |
||||
} |
||||
|
||||
/* Configure automatic polling mode to wait for end of program */ |
||||
if (QSPI_AutoPollingMemReady(&QSPIHandle, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != QSPI_OK) |
||||
{ |
||||
return QSPI_ERROR; |
||||
} |
||||
|
||||
/* Update the address and size variables for next page programming */ |
||||
current_addr += current_size; |
||||
pData += current_size; |
||||
current_size = ((current_addr + N25Q128A_PAGE_SIZE) > end_addr) ? (end_addr - current_addr) : N25Q128A_PAGE_SIZE; |
||||
} while (current_addr < end_addr); |
||||
|
||||
return QSPI_OK; |
||||
} |
||||
|
||||
/**
|
||||
* @brief Erases the specified block of the QSPI memory. |
||||
* @param BlockAddress: Block address to erase |
||||
* @retval QSPI memory status |
||||
*/ |
||||
uint8_t BSP_QSPI_Erase_Block(uint32_t BlockAddress) |
||||
{ |
||||
QSPI_CommandTypeDef s_command; |
||||
|
||||
/* Initialize the erase command */ |
||||
s_command.InstructionMode = QSPI_INSTRUCTION_1_LINE; |
||||
s_command.Instruction = SUBSECTOR_ERASE_CMD; |
||||
s_command.AddressMode = QSPI_ADDRESS_1_LINE; |
||||
s_command.AddressSize = QSPI_ADDRESS_24_BITS; |
||||
s_command.Address = BlockAddress; |
||||
s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE; |
||||
s_command.DataMode = QSPI_DATA_NONE; |
||||
s_command.DummyCycles = 0; |
||||
s_command.DdrMode = QSPI_DDR_MODE_DISABLE; |
||||
s_command.DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY; |
||||
s_command.SIOOMode = QSPI_SIOO_INST_EVERY_CMD; |
||||
|
||||
/* Enable write operations */ |
||||
if (QSPI_WriteEnable(&QSPIHandle) != QSPI_OK) |
||||
{ |
||||
return QSPI_ERROR; |
||||
} |
||||
|
||||
/* Send the command */ |
||||
if (HAL_QSPI_Command(&QSPIHandle, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) |
||||
{ |
||||
return QSPI_ERROR; |
||||
} |
||||
|
||||
/* Configure automatic polling mode to wait for end of erase */
|
||||
if (QSPI_AutoPollingMemReady(&QSPIHandle, N25Q128A_SUBSECTOR_ERASE_MAX_TIME) != QSPI_OK) |
||||
{ |
||||
return QSPI_ERROR; |
||||
} |
||||
|
||||
return QSPI_OK; |
||||
} |
||||
|
||||
/**
|
||||
* @brief Erases the entire QSPI memory. |
||||
* @retval QSPI memory status |
||||
*/ |
||||
uint8_t BSP_QSPI_Erase_Chip(void) |
||||
{ |
||||
QSPI_CommandTypeDef s_command; |
||||
|
||||
/* Initialize the erase command */ |
||||
s_command.InstructionMode = QSPI_INSTRUCTION_1_LINE; |
||||
s_command.Instruction = BULK_ERASE_CMD; |
||||
s_command.AddressMode = QSPI_ADDRESS_NONE; |
||||
s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE; |
||||
s_command.DataMode = QSPI_DATA_NONE; |
||||
s_command.DummyCycles = 0; |
||||
s_command.DdrMode = QSPI_DDR_MODE_DISABLE; |
||||
s_command.DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY; |
||||
s_command.SIOOMode = QSPI_SIOO_INST_EVERY_CMD; |
||||
|
||||
/* Enable write operations */ |
||||
if (QSPI_WriteEnable(&QSPIHandle) != QSPI_OK) |
||||
{ |
||||
return QSPI_ERROR; |
||||
} |
||||
|
||||
/* Send the command */ |
||||
if (HAL_QSPI_Command(&QSPIHandle, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) |
||||
{ |
||||
return QSPI_ERROR; |
||||
} |
||||
|
||||
/* Configure automatic polling mode to wait for end of erase */
|
||||
if (QSPI_AutoPollingMemReady(&QSPIHandle, N25Q128A_BULK_ERASE_MAX_TIME) != QSPI_OK) |
||||
{ |
||||
return QSPI_ERROR; |
||||
} |
||||
|
||||
return QSPI_OK; |
||||
} |
||||
|
||||
/**
|
||||
* @brief Reads current status of the QSPI memory. |
||||
* @retval QSPI memory status |
||||
*/ |
||||
uint8_t BSP_QSPI_GetStatus(void) |
||||
{ |
||||
QSPI_CommandTypeDef s_command; |
||||
uint8_t reg; |
||||
|
||||
/* Initialize the read flag status register command */ |
||||
s_command.InstructionMode = QSPI_INSTRUCTION_1_LINE; |
||||
s_command.Instruction = READ_FLAG_STATUS_REG_CMD; |
||||
s_command.AddressMode = QSPI_ADDRESS_NONE; |
||||
s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE; |
||||
s_command.DataMode = QSPI_DATA_1_LINE; |
||||
s_command.DummyCycles = 0; |
||||
s_command.NbData = 1; |
||||
s_command.DdrMode = QSPI_DDR_MODE_DISABLE; |
||||
s_command.DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY; |
||||
s_command.SIOOMode = QSPI_SIOO_INST_EVERY_CMD; |
||||
|
||||
/* Configure the command */ |
||||
if (HAL_QSPI_Command(&QSPIHandle, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) |
||||
{ |
||||
return QSPI_ERROR; |
||||
} |
||||
|
||||
/* Reception of the data */ |
||||
if (HAL_QSPI_Receive(&QSPIHandle, ®, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) |
||||
{ |
||||
return QSPI_ERROR; |
||||
} |
||||
|
||||
/* Check the value of the register */ |
||||
if ((reg & (N25Q128A_FSR_PRERR | N25Q128A_FSR_VPPERR | N25Q128A_FSR_PGERR | N25Q128A_FSR_ERERR)) != 0) |
||||
{ |
||||
return QSPI_ERROR; |
||||
} |
||||
else if ((reg & (N25Q128A_FSR_PGSUS | N25Q128A_FSR_ERSUS)) != 0) |
||||
{ |
||||
return QSPI_SUSPENDED; |
||||
} |
||||
else if ((reg & N25Q128A_FSR_READY) != 0) |
||||
{ |
||||
return QSPI_OK; |
||||
} |
||||
else |
||||
{ |
||||
return QSPI_BUSY; |
||||
} |
||||
} |
||||
|
||||
/**
|
||||
* @brief Reads the configuration of the memory and fills QspiInfo struct |
||||
* @param pInfo pointer to Info structure |
||||
* @retval QSPI memory status |
||||
*/ |
||||
uint8_t BSP_QSPI_GetInfo(QSPI_InfoTypeDef* pInfo) |
||||
{ |
||||
/* Configure the structure with the memory configuration */ |
||||
pInfo->FlashSize = N25Q128A_FLASH_SIZE; |
||||
pInfo->EraseSectorSize = N25Q128A_SUBSECTOR_SIZE; |
||||
pInfo->EraseSectorsNumber = (N25Q128A_FLASH_SIZE/N25Q128A_SUBSECTOR_SIZE); |
||||
pInfo->ProgPageSize = N25Q128A_PAGE_SIZE; |
||||
pInfo->ProgPagesNumber = (N25Q128A_FLASH_SIZE/N25Q128A_PAGE_SIZE); |
||||
|
||||
return QSPI_OK; |
||||
} |
||||
|
||||
/**
|
||||
* @brief Configure the QSPI in memory-mapped mode
|
||||
* @retval QSPI memory status |
||||
*/ |
||||
uint8_t BSP_QSPI_EnableMemoryMappedMode(void) |
||||
{ |
||||
QSPI_CommandTypeDef s_command; |
||||
QSPI_MemoryMappedTypeDef s_mem_mapped_cfg; |
||||
|
||||
/* Configure the command for the read instruction */ |
||||
s_command.InstructionMode = QSPI_INSTRUCTION_1_LINE; |
||||
s_command.Instruction = QUAD_INOUT_FAST_READ_CMD; |
||||
s_command.AddressMode = QSPI_ADDRESS_4_LINES; |
||||
s_command.AddressSize = QSPI_ADDRESS_24_BITS; |
||||
s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE; |
||||
s_command.DataMode = QSPI_DATA_4_LINES; |
||||
s_command.DummyCycles = N25Q128A_DUMMY_CYCLES_READ_QUAD; |
||||
s_command.DdrMode = QSPI_DDR_MODE_DISABLE; |
||||
s_command.DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY; |
||||
s_command.SIOOMode = QSPI_SIOO_INST_EVERY_CMD; |
||||
|
||||
/* Configure the memory mapped mode */ |
||||
s_mem_mapped_cfg.TimeOutActivation = QSPI_TIMEOUT_COUNTER_DISABLE; |
||||
|
||||
if (HAL_QSPI_MemoryMapped(&QSPIHandle, &s_command, &s_mem_mapped_cfg) != HAL_OK) |
||||
{ |
||||
return QSPI_ERROR; |
||||
} |
||||
|
||||
return QSPI_OK; |
||||
} |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup STM32469I_Discovery_QSPI_Private_Functions STM32469I Discovery QSPI Private Functions
|
||||
* @{ |
||||
*/ |
||||
|
||||
/**
|
||||
* @brief QSPI MSP Initialization |
||||
* This function configures the hardware resources used in this example: |
||||
* - Peripheral's clock enable |
||||
* - Peripheral's GPIO Configuration |
||||
* - NVIC configuration for QSPI interrupt |
||||
*/ |
||||
__weak void BSP_QSPI_MspInit(QSPI_HandleTypeDef *hqspi, void *Params) |
||||
{ |
||||
GPIO_InitTypeDef gpio_init_structure; |
||||
|
||||
/*##-1- Enable peripherals and GPIO Clocks #################################*/ |
||||
/* Enable the QuadSPI memory interface clock */ |
||||
QSPI_CLK_ENABLE(); |
||||
/* Reset the QuadSPI memory interface */ |
||||
QSPI_FORCE_RESET(); |
||||
QSPI_RELEASE_RESET(); |
||||
/* Enable GPIO clocks */ |
||||
QSPI_CS_GPIO_CLK_ENABLE(); |
||||
QSPI_DX_CLK_GPIO_CLK_ENABLE(); |
||||
|
||||
/*##-2- Configure peripheral GPIO ##########################################*/ |
||||
/* QSPI CS GPIO pin configuration */ |
||||
gpio_init_structure.Pin = QSPI_CS_PIN; |
||||
gpio_init_structure.Mode = GPIO_MODE_AF_PP; |
||||
gpio_init_structure.Pull = GPIO_PULLUP; |
||||
gpio_init_structure.Speed = GPIO_SPEED_HIGH; |
||||
gpio_init_structure.Alternate = GPIO_AF10_QSPI; |
||||
HAL_GPIO_Init(QSPI_CS_GPIO_PORT, &gpio_init_structure); |
||||
|
||||
/* QSPI CLK GPIO pin configuration */ |
||||
gpio_init_structure.Pin = QSPI_CLK_PIN; |
||||
gpio_init_structure.Pull = GPIO_NOPULL; |
||||
gpio_init_structure.Alternate = GPIO_AF9_QSPI; |
||||
HAL_GPIO_Init(QSPI_CLK_GPIO_PORT, &gpio_init_structure); |
||||
|
||||
/* QSPI D0 and D1 GPIO pin configuration */ |
||||
gpio_init_structure.Pin = (QSPI_D0_PIN | QSPI_D1_PIN); |
||||
gpio_init_structure.Alternate = GPIO_AF10_QSPI; |
||||
HAL_GPIO_Init(QSPI_DX_GPIO_PORT, &gpio_init_structure); |
||||
|
||||
/* QSPI D2 and D3 GPIO pin configuration */ |
||||
gpio_init_structure.Pin = (QSPI_D2_PIN | QSPI_D3_PIN) ; |
||||
gpio_init_structure.Alternate = GPIO_AF9_QSPI; |
||||
HAL_GPIO_Init(QSPI_DX_GPIO_PORT, &gpio_init_structure); |
||||
|
||||
/*##-3- Configure the NVIC for QSPI #########################################*/ |
||||
/* NVIC configuration for QSPI interrupt */ |
||||
HAL_NVIC_SetPriority(QUADSPI_IRQn, 0x0F, 0); |
||||
HAL_NVIC_EnableIRQ(QUADSPI_IRQn); |
||||
|
||||
} |
||||
|
||||
/**
|
||||
* @brief QSPI MSP De-Initialization |
||||
* This function frees the hardware resources used in this example: |
||||
* - Disable the Peripheral's clock |
||||
* - Revert GPIO and NVIC configuration to their default state |
||||
*/ |
||||
__weak void BSP_QSPI_MspDeInit(QSPI_HandleTypeDef *hqspi, void *Params) |
||||
{ |
||||
/*##-1- Disable the NVIC for QSPI ###########################################*/ |
||||
HAL_NVIC_DisableIRQ(QUADSPI_IRQn); |
||||
|
||||
/*##-2- Disable peripherals and GPIO Clocks ################################*/ |
||||
/* De-Configure QSPI pins */ |
||||
HAL_GPIO_DeInit(QSPI_CS_GPIO_PORT, QSPI_CS_PIN); |
||||
HAL_GPIO_DeInit(QSPI_CLK_GPIO_PORT, QSPI_CLK_PIN); |
||||
HAL_GPIO_DeInit(QSPI_DX_GPIO_PORT, QSPI_D0_PIN); |
||||
HAL_GPIO_DeInit(QSPI_DX_GPIO_PORT, QSPI_D1_PIN); |
||||
HAL_GPIO_DeInit(QSPI_DX_GPIO_PORT, QSPI_D2_PIN); |
||||
HAL_GPIO_DeInit(QSPI_DX_GPIO_PORT, QSPI_D3_PIN); |
||||
|
||||
/*##-3- Reset peripherals ##################################################*/ |
||||
/* Reset the QuadSPI memory interface */ |
||||
QSPI_FORCE_RESET(); |
||||
QSPI_RELEASE_RESET(); |
||||
|
||||
/* Disable the QuadSPI memory interface clock */ |
||||
QSPI_CLK_DISABLE(); |
||||
} |
||||
|
||||
/**
|
||||
* @brief This function reset the QSPI memory. |
||||
* @param hqspi: QSPI handle |
||||
*/ |
||||
static uint8_t QSPI_ResetMemory(QSPI_HandleTypeDef *hqspi) |
||||
{ |
||||
QSPI_CommandTypeDef s_command; |
||||
|
||||
/* Initialize the reset enable command */ |
||||
s_command.InstructionMode = QSPI_INSTRUCTION_1_LINE; |
||||
s_command.Instruction = RESET_ENABLE_CMD; |
||||
s_command.AddressMode = QSPI_ADDRESS_NONE; |
||||
s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE; |
||||
s_command.DataMode = QSPI_DATA_NONE; |
||||
s_command.DummyCycles = 0; |
||||
s_command.DdrMode = QSPI_DDR_MODE_DISABLE; |
||||
s_command.DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY; |
||||
s_command.SIOOMode = QSPI_SIOO_INST_EVERY_CMD; |
||||
|
||||
/* Send the command */ |
||||
if (HAL_QSPI_Command(hqspi, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) |
||||
{ |
||||
return QSPI_ERROR; |
||||
} |
||||
|
||||
/* Send the reset memory command */ |
||||
s_command.Instruction = RESET_MEMORY_CMD; |
||||
if (HAL_QSPI_Command(hqspi, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) |
||||
{ |
||||
return QSPI_ERROR; |
||||
} |
||||
|
||||
/* Configure automatic polling mode to wait the memory is ready */
|
||||
if (QSPI_AutoPollingMemReady(hqspi, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != QSPI_OK) |
||||
{ |
||||
return QSPI_ERROR; |
||||
} |
||||
|
||||
return QSPI_OK; |
||||
} |
||||
|
||||
/**
|
||||
* @brief This function configure the dummy cycles on memory side. |
||||
* @param hqspi: QSPI handle |
||||
*/ |
||||
static uint8_t QSPI_DummyCyclesCfg(QSPI_HandleTypeDef *hqspi) |
||||
{ |
||||
QSPI_CommandTypeDef s_command; |
||||
uint8_t reg; |
||||
|
||||
/* Initialize the read volatile configuration register command */ |
||||
s_command.InstructionMode = QSPI_INSTRUCTION_1_LINE; |
||||
s_command.Instruction = READ_VOL_CFG_REG_CMD; |
||||
s_command.AddressMode = QSPI_ADDRESS_NONE; |
||||
s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE; |
||||
s_command.DataMode = QSPI_DATA_1_LINE; |
||||
s_command.DummyCycles = 0; |
||||
s_command.NbData = 1; |
||||
s_command.DdrMode = QSPI_DDR_MODE_DISABLE; |
||||
s_command.DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY; |
||||
s_command.SIOOMode = QSPI_SIOO_INST_EVERY_CMD; |
||||
|
||||
/* Configure the command */ |
||||
if (HAL_QSPI_Command(hqspi, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) |
||||
{ |
||||
return QSPI_ERROR; |
||||
} |
||||
|
||||
/* Reception of the data */ |
||||
if (HAL_QSPI_Receive(hqspi, ®, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) |
||||
{ |
||||
return QSPI_ERROR; |
||||
} |
||||
|
||||
/* Enable write operations */ |
||||
if (QSPI_WriteEnable(hqspi) != QSPI_OK) |
||||
{ |
||||
return QSPI_ERROR; |
||||
} |
||||
|
||||
/* Update volatile configuration register (with new dummy cycles) */
|
||||
s_command.Instruction = WRITE_VOL_CFG_REG_CMD; |
||||
MODIFY_REG(reg, N25Q128A_VCR_NB_DUMMY, (N25Q128A_DUMMY_CYCLES_READ_QUAD << POSITION_VAL(N25Q128A_VCR_NB_DUMMY))); |
||||
|
||||
/* Configure the write volatile configuration register command */ |
||||
if (HAL_QSPI_Command(hqspi, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) |
||||
{ |
||||
return QSPI_ERROR; |
||||
} |
||||
|
||||
/* Transmission of the data */ |
||||
if (HAL_QSPI_Transmit(hqspi, ®, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) |
||||
{ |
||||
return QSPI_ERROR; |
||||
} |
||||
|
||||
return QSPI_OK; |
||||
} |
||||
|
||||
/**
|
||||
* @brief This function send a Write Enable and wait it is effective. |
||||
* @param hqspi: QSPI handle |
||||
*/ |
||||
static uint8_t QSPI_WriteEnable(QSPI_HandleTypeDef *hqspi) |
||||
{ |
||||
QSPI_CommandTypeDef s_command; |
||||
QSPI_AutoPollingTypeDef s_config; |
||||
|
||||
/* Enable write operations */ |
||||
s_command.InstructionMode = QSPI_INSTRUCTION_1_LINE; |
||||
s_command.Instruction = WRITE_ENABLE_CMD; |
||||
s_command.AddressMode = QSPI_ADDRESS_NONE; |
||||
s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE; |
||||
s_command.DataMode = QSPI_DATA_NONE; |
||||
s_command.DummyCycles = 0; |
||||
s_command.DdrMode = QSPI_DDR_MODE_DISABLE; |
||||
s_command.DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY; |
||||
s_command.SIOOMode = QSPI_SIOO_INST_EVERY_CMD; |
||||
|
||||
if (HAL_QSPI_Command(hqspi, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) |
||||
{ |
||||
return QSPI_ERROR; |
||||
} |
||||
|
||||
/* Configure automatic polling mode to wait for write enabling */
|
||||
s_config.Match = N25Q128A_SR_WREN; |
||||
s_config.Mask = N25Q128A_SR_WREN; |
||||
s_config.MatchMode = QSPI_MATCH_MODE_AND; |
||||
s_config.StatusBytesSize = 1; |
||||
s_config.Interval = 0x10; |
||||
s_config.AutomaticStop = QSPI_AUTOMATIC_STOP_ENABLE; |
||||
|
||||
s_command.Instruction = READ_STATUS_REG_CMD; |
||||
s_command.DataMode = QSPI_DATA_1_LINE; |
||||
|
||||
if (HAL_QSPI_AutoPolling(hqspi, &s_command, &s_config, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) |
||||
{ |
||||
return QSPI_ERROR; |
||||
} |
||||
|
||||
return QSPI_OK; |
||||
} |
||||
|
||||
/**
|
||||
* @brief This function read the SR of the memory and wait the EOP. |
||||
* @param hqspi: QSPI handle |
||||
* @param Timeout: timeout value before returning an error |
||||
*/ |
||||
static uint8_t QSPI_AutoPollingMemReady(QSPI_HandleTypeDef *hqspi, uint32_t Timeout) |
||||
{ |
||||
QSPI_CommandTypeDef s_command; |
||||
QSPI_AutoPollingTypeDef s_config; |
||||
|
||||
/* Configure automatic polling mode to wait for memory ready */
|
||||
s_command.InstructionMode = QSPI_INSTRUCTION_1_LINE; |
||||
s_command.Instruction = READ_STATUS_REG_CMD; |
||||
s_command.AddressMode = QSPI_ADDRESS_NONE; |
||||
s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE; |
||||
s_command.DataMode = QSPI_DATA_1_LINE; |
||||
s_command.DummyCycles = 0; |
||||
s_command.DdrMode = QSPI_DDR_MODE_DISABLE; |
||||
s_command.DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY; |
||||
s_command.SIOOMode = QSPI_SIOO_INST_EVERY_CMD; |
||||
|
||||
s_config.Match = 0; |
||||
s_config.Mask = N25Q128A_SR_WIP; |
||||
s_config.MatchMode = QSPI_MATCH_MODE_AND; |
||||
s_config.StatusBytesSize = 1; |
||||
s_config.Interval = 0x10; |
||||
s_config.AutomaticStop = QSPI_AUTOMATIC_STOP_ENABLE; |
||||
|
||||
if (HAL_QSPI_AutoPolling(hqspi, &s_command, &s_config, Timeout) != HAL_OK) |
||||
{ |
||||
return QSPI_ERROR; |
||||
} |
||||
|
||||
return QSPI_OK; |
||||
} |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
@ -0,0 +1,145 @@
|
||||
/**
|
||||
****************************************************************************** |
||||
* @file stm32469i_discovery_qspi.h |
||||
* @author MCD Application Team |
||||
* @brief This file contains the common defines and functions prototypes for |
||||
* the stm32469i_discovery_qspi.c driver. |
||||
****************************************************************************** |
||||
* @attention |
||||
* |
||||
* Copyright (c) 2017 STMicroelectronics. |
||||
* All rights reserved. |
||||
* |
||||
* This software is licensed under terms that can be found in the LICENSE file |
||||
* in the root directory of this software component. |
||||
* If no LICENSE file comes with this software, it is provided AS-IS. |
||||
* |
||||
****************************************************************************** |
||||
*/ |
||||
|
||||
/** @addtogroup BSP
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @addtogroup STM32469I_Discovery
|
||||
* @{ |
||||
*/ |
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/ |
||||
#ifndef __STM32469I_DISCOVERY_QSPI_H |
||||
#define __STM32469I_DISCOVERY_QSPI_H |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include "stm32f4xx_hal.h" |
||||
#include "../Components/n25q128a/n25q128a.h" |
||||
|
||||
|
||||
/** @addtogroup STM32469I_Discovery_QSPI
|
||||
* @{ |
||||
*/ |
||||
|
||||
|
||||
/* Exported constants --------------------------------------------------------*/ |
||||
/** @defgroup STM32469I_Discovery_QSPI_Exported_Constants STM32469I Discovery QSPI Exported Constants
|
||||
* @{ |
||||
*/ |
||||
/* QSPI Error codes */ |
||||
#define QSPI_OK ((uint8_t)0x00) |
||||
#define QSPI_ERROR ((uint8_t)0x01) |
||||
#define QSPI_BUSY ((uint8_t)0x02) |
||||
#define QSPI_NOT_SUPPORTED ((uint8_t)0x04) |
||||
#define QSPI_SUSPENDED ((uint8_t)0x08) |
||||
|
||||
|
||||
/* Definition for QSPI clock resources */ |
||||
#define QSPI_CLK_ENABLE() __HAL_RCC_QSPI_CLK_ENABLE() |
||||
#define QSPI_CLK_DISABLE() __HAL_RCC_QSPI_CLK_DISABLE() |
||||
#define QSPI_CS_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() |
||||
#define QSPI_CS_GPIO_CLK_DISABLE() __HAL_RCC_GPIOB_CLK_DISABLE() |
||||
#define QSPI_DX_CLK_GPIO_CLK_ENABLE() __HAL_RCC_GPIOF_CLK_ENABLE() |
||||
#define QSPI_DX_CLK_GPIO_CLK_DISABLE() __HAL_RCC_GPIOF_CLK_DISABLE() |
||||
|
||||
#define QSPI_FORCE_RESET() __HAL_RCC_QSPI_FORCE_RESET() |
||||
#define QSPI_RELEASE_RESET() __HAL_RCC_QSPI_RELEASE_RESET() |
||||
|
||||
/* Definition for QSPI Pins */ |
||||
#define QSPI_CS_PIN GPIO_PIN_6 |
||||
#define QSPI_CS_GPIO_PORT GPIOB |
||||
#define QSPI_CLK_PIN GPIO_PIN_10 |
||||
#define QSPI_CLK_GPIO_PORT GPIOF |
||||
#define QSPI_D0_PIN GPIO_PIN_8 |
||||
#define QSPI_D1_PIN GPIO_PIN_9 |
||||
#define QSPI_D2_PIN GPIO_PIN_7 |
||||
#define QSPI_D3_PIN GPIO_PIN_6 |
||||
#define QSPI_DX_GPIO_PORT GPIOF |
||||
|
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/* Exported types ------------------------------------------------------------*/ |
||||
/** @defgroup STM32469I_Discovery_QSPI_Exported_Types STM32469I Discovery QSPI Exported Types
|
||||
* @{ |
||||
*/ |
||||
/**
|
||||
* @brief QSPI Info |
||||
* */ |
||||
typedef struct { |
||||
uint32_t FlashSize; /*!< Size of the flash */ |
||||
uint32_t EraseSectorSize; /*!< Size of sectors for the erase operation */ |
||||
uint32_t EraseSectorsNumber; /*!< Number of sectors for the erase operation */ |
||||
uint32_t ProgPageSize; /*!< Size of pages for the program operation */ |
||||
uint32_t ProgPagesNumber; /*!< Number of pages for the program operation */ |
||||
} QSPI_InfoTypeDef; |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
|
||||
/* Exported functions --------------------------------------------------------*/ |
||||
/** @addtogroup STM32469I_Discovery_QSPI_Exported_Functions STM32469I Discovery QSPI Exported Functions
|
||||
* @{ |
||||
*/ |
||||
uint8_t BSP_QSPI_Init (void); |
||||
uint8_t BSP_QSPI_DeInit (void); |
||||
uint8_t BSP_QSPI_Read (uint8_t* pData, uint32_t ReadAddr, uint32_t Size); |
||||
uint8_t BSP_QSPI_Write (uint8_t* pData, uint32_t WriteAddr, uint32_t Size); |
||||
uint8_t BSP_QSPI_Erase_Block(uint32_t BlockAddress); |
||||
uint8_t BSP_QSPI_Erase_Chip (void); |
||||
uint8_t BSP_QSPI_GetStatus (void); |
||||
uint8_t BSP_QSPI_GetInfo (QSPI_InfoTypeDef* pInfo); |
||||
uint8_t BSP_QSPI_EnableMemoryMappedMode(void); |
||||
/* BSP Aliased function maintained for legacy purpose */ |
||||
#define BSP_QSPI_MemoryMappedMode BSP_QSPI_EnableMemoryMappedMode |
||||
|
||||
/* These function can be modified in case the current settings (e.g. DMA stream)
|
||||
need to be changed for specific application needs */ |
||||
void BSP_QSPI_MspInit(QSPI_HandleTypeDef *hqspi, void *Params); |
||||
void BSP_QSPI_MspDeInit(QSPI_HandleTypeDef *hqspi, void *Params); |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
#endif /* __STM32469I_DISCOVERY_QSPI_H */ |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
@ -0,0 +1,578 @@
|
||||
/**
|
||||
****************************************************************************** |
||||
* @file stm32469i_discovery_sd.c |
||||
* @author MCD Application Team |
||||
* @brief This file includes the uSD card driver mounted on STM32469I-Discovery |
||||
* board. |
||||
****************************************************************************** |
||||
* @attention |
||||
* |
||||
* Copyright (c) 2017 STMicroelectronics. |
||||
* All rights reserved. |
||||
* |
||||
* This software is licensed under terms that can be found in the LICENSE file |
||||
* in the root directory of this software component. |
||||
* If no LICENSE file comes with this software, it is provided AS-IS. |
||||
* |
||||
****************************************************************************** |
||||
*/ |
||||
|
||||
/* File Info : -----------------------------------------------------------------
|
||||
User NOTES |
||||
1. How To use this driver: |
||||
-------------------------- |
||||
- This driver is used to drive the micro SD external card mounted on STM32469I-Discovery |
||||
board. |
||||
- This driver does not need a specific component driver for the micro SD device |
||||
to be included with. |
||||
|
||||
2. Driver description: |
||||
--------------------- |
||||
+ Initialization steps: |
||||
o Initialize the micro SD card using the BSP_SD_Init() function. This |
||||
function includes the MSP layer hardware resources initialization and the |
||||
SDIO interface configuration to interface with the external micro SD. It |
||||
also includes the micro SD initialization sequence. |
||||
o To check the SD card presence you can use the function BSP_SD_IsDetected() which |
||||
returns the detection status |
||||
o If SD presence detection interrupt mode is desired, you must configure the
|
||||
SD detection interrupt mode by calling the function BSP_SD_ITConfig(). The interrupt
|
||||
is generated as an external interrupt whenever the micro SD card is
|
||||
plugged/unplugged in/from the board. |
||||
o The function BSP_SD_GetCardInfo() is used to get the micro SD card information |
||||
which is stored in the structure "HAL_SD_CardInfoTypeDef". |
||||
|
||||
+ Micro SD card operations |
||||
o The micro SD card can be accessed with read/write block(s) operations once
|
||||
it is ready for access. The access can be performed whether using the polling |
||||
mode by calling the functions BSP_SD_ReadBlocks()/BSP_SD_WriteBlocks(), or by DMA
|
||||
transfer using the functions BSP_SD_ReadBlocks_DMA()/BSP_SD_WriteBlocks_DMA() |
||||
o The DMA transfer complete is used with interrupt mode. Once the SD transfer |
||||
is complete, the SD interrupt is handled using the function BSP_SD_IRQHandler(), |
||||
the DMA Tx/Rx transfer complete are handled using the functions |
||||
BSP_SD_DMA_Tx_IRQHandler()/BSP_SD_DMA_Rx_IRQHandler(). The corresponding user callbacks
|
||||
are implemented by the user at application level.
|
||||
o The SD erase block(s) is performed using the function BSP_SD_Erase() with specifying |
||||
the number of blocks to erase. |
||||
o The SD runtime status is returned when calling the function BSP_SD_GetCardState(). |
||||
|
||||
------------------------------------------------------------------------------*/ |
||||
|
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include "stm32469i_discovery_sd.h" |
||||
|
||||
/** @addtogroup BSP
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @addtogroup STM32469I_Discovery
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @defgroup STM32469I-Discovery_SD STM32469I Discovery SD
|
||||
* @{ |
||||
*/ |
||||
|
||||
|
||||
/** @defgroup STM32469I-Discovery_SD_Private_TypesDefinitions STM32469I Discovery SD Private TypesDef
|
||||
* @{ |
||||
*/ |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup STM32469I-Discovery_SD_Private_Defines STM32469I Discovery SD Private Defines
|
||||
* @{ |
||||
*/ |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup STM32469I-Discovery_SD_Private_Macros STM32469I Discovery SD Private Macro
|
||||
* @{ |
||||
*/ |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup STM32469I-Discovery_SD_Private_Variables STM32469I Discovery SD Private Variables
|
||||
* @{ |
||||
*/ |
||||
SD_HandleTypeDef uSdHandle; |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup STM32469I-Discovery_SD_Private_FunctionPrototypes STM32469I Discovery SD Private Prototypes
|
||||
* @{ |
||||
*/ |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup STM32469I-Discovery_SD_Private_Functions STM32469I Discovery SD Private Functions
|
||||
* @{ |
||||
*/ |
||||
|
||||
/**
|
||||
* @brief Initializes the SD card device. |
||||
* @retval SD status |
||||
*/ |
||||
uint8_t BSP_SD_Init(void) |
||||
{ |
||||
uint8_t sd_state = MSD_OK; |
||||
|
||||
/* PLLSAI is dedicated to LCD periph. Do not use it to get 48MHz*/ |
||||
|
||||
/* uSD device interface configuration */ |
||||
uSdHandle.Instance = SDIO; |
||||
|
||||
uSdHandle.Init.ClockEdge = SDIO_CLOCK_EDGE_RISING; |
||||
uSdHandle.Init.ClockBypass = SDIO_CLOCK_BYPASS_DISABLE; |
||||
uSdHandle.Init.ClockPowerSave = SDIO_CLOCK_POWER_SAVE_DISABLE; |
||||
uSdHandle.Init.BusWide = SDIO_BUS_WIDE_1B; |
||||
uSdHandle.Init.HardwareFlowControl = SDIO_HARDWARE_FLOW_CONTROL_ENABLE; |
||||
uSdHandle.Init.ClockDiv = SDIO_TRANSFER_CLK_DIV; |
||||
|
||||
/* Msp SD Detect pin initialization */ |
||||
BSP_SD_Detect_MspInit(&uSdHandle, NULL); |
||||
if(BSP_SD_IsDetected() != SD_PRESENT) /* Check if SD card is present */ |
||||
{ |
||||
return MSD_ERROR_SD_NOT_PRESENT; |
||||
} |
||||
|
||||
/* Msp SD initialization */ |
||||
BSP_SD_MspInit(&uSdHandle, NULL); |
||||
|
||||
/* HAL SD initialization */ |
||||
if(HAL_SD_Init(&uSdHandle) != HAL_OK) |
||||
{ |
||||
sd_state = MSD_ERROR; |
||||
} |
||||
|
||||
/* Configure SD Bus width */ |
||||
if(sd_state == MSD_OK) |
||||
{ |
||||
/* Enable wide operation */ |
||||
if(HAL_SD_ConfigWideBusOperation(&uSdHandle, SDIO_BUS_WIDE_4B) != HAL_OK) |
||||
{ |
||||
sd_state = MSD_ERROR; |
||||
} |
||||
else |
||||
{ |
||||
sd_state = MSD_OK; |
||||
} |
||||
} |
||||
return sd_state; |
||||
} |
||||
|
||||
/**
|
||||
* @brief DeInitializes the SD card device. |
||||
* @retval SD status |
||||
*/ |
||||
uint8_t BSP_SD_DeInit(void) |
||||
{ |
||||
uint8_t sd_state = MSD_OK; |
||||
|
||||
uSdHandle.Instance = SDIO; |
||||
|
||||
/* HAL SD deinitialization */ |
||||
if(HAL_SD_DeInit(&uSdHandle) != HAL_OK) |
||||
{ |
||||
sd_state = MSD_ERROR; |
||||
} |
||||
|
||||
/* Msp SD deinitialization */ |
||||
uSdHandle.Instance = SDIO; |
||||
BSP_SD_MspDeInit(&uSdHandle, NULL); |
||||
|
||||
return sd_state; |
||||
} |
||||
|
||||
/**
|
||||
* @brief Configures Interrupt mode for SD detection pin. |
||||
* @retval Returns 0 |
||||
*/ |
||||
uint8_t BSP_SD_ITConfig(void) |
||||
{ |
||||
GPIO_InitTypeDef gpio_init_structure; |
||||
|
||||
/* Configure Interrupt mode for SD detection pin */ |
||||
gpio_init_structure.Pin = SD_DETECT_PIN; |
||||
gpio_init_structure.Pull = GPIO_PULLUP; |
||||
gpio_init_structure.Speed = GPIO_SPEED_FAST; |
||||
gpio_init_structure.Mode = GPIO_MODE_IT_RISING_FALLING; |
||||
HAL_GPIO_Init(SD_DETECT_GPIO_PORT, &gpio_init_structure); |
||||
|
||||
/* Enable and set SD detect EXTI Interrupt to the lowest priority */ |
||||
HAL_NVIC_SetPriority((IRQn_Type)(SD_DETECT_EXTI_IRQn), 0x0F, 0x00); |
||||
HAL_NVIC_EnableIRQ((IRQn_Type)(SD_DETECT_EXTI_IRQn)); |
||||
|
||||
return MSD_OK; |
||||
} |
||||
|
||||
/**
|
||||
* @brief Detects if SD card is correctly plugged in the memory slot or not. |
||||
* @retval Returns if SD is detected or not |
||||
*/ |
||||
uint8_t BSP_SD_IsDetected(void) |
||||
{ |
||||
__IO uint8_t status = SD_PRESENT; |
||||
|
||||
/* Check SD card detect pin */ |
||||
if (HAL_GPIO_ReadPin(SD_DETECT_GPIO_PORT, SD_DETECT_PIN) == GPIO_PIN_SET) |
||||
{ |
||||
status = SD_NOT_PRESENT; |
||||
} |
||||
|
||||
return status; |
||||
} |
||||
|
||||
/**
|
||||
* @brief Reads block(s) from a specified address in an SD card, in polling mode. |
||||
* @param pData: Pointer to the buffer that will contain the data to transmit |
||||
* @param ReadAddr: Address from where data is to be read |
||||
* @param NumOfBlocks: Number of SD blocks to read |
||||
* @param Timeout: Timeout for read operation |
||||
* @retval SD status |
||||
*/ |
||||
uint8_t BSP_SD_ReadBlocks(uint32_t *pData, uint32_t ReadAddr, uint32_t NumOfBlocks, uint32_t Timeout) |
||||
{ |
||||
if(HAL_SD_ReadBlocks(&uSdHandle, (uint8_t *)pData, ReadAddr, NumOfBlocks, Timeout) != HAL_OK) |
||||
{ |
||||
return MSD_ERROR; |
||||
} |
||||
else |
||||
{ |
||||
return MSD_OK; |
||||
} |
||||
} |
||||
|
||||
/**
|
||||
* @brief Writes block(s) to a specified address in an SD card, in polling mode.
|
||||
* @param pData: Pointer to the buffer that will contain the data to transmit |
||||
* @param WriteAddr: Address from where data is to be written |
||||
* @param NumOfBlocks: Number of SD blocks to write |
||||
* @param Timeout: Timeout for write operation |
||||
* @retval SD status |
||||
*/ |
||||
uint8_t BSP_SD_WriteBlocks(uint32_t *pData, uint32_t WriteAddr, uint32_t NumOfBlocks, uint32_t Timeout) |
||||
{ |
||||
if(HAL_SD_WriteBlocks(&uSdHandle, (uint8_t *)pData, WriteAddr, NumOfBlocks, Timeout) != HAL_OK) |
||||
{ |
||||
return MSD_ERROR; |
||||
} |
||||
else |
||||
{ |
||||
return MSD_OK; |
||||
} |
||||
} |
||||
|
||||
/**
|
||||
* @brief Reads block(s) from a specified address in an SD card, in DMA mode. |
||||
* @param pData: Pointer to the buffer that will contain the data to transmit |
||||
* @param ReadAddr: Address from where data is to be read |
||||
* @param NumOfBlocks: Number of SD blocks to read
|
||||
* @retval SD status |
||||
*/ |
||||
uint8_t BSP_SD_ReadBlocks_DMA(uint32_t *pData, uint32_t ReadAddr, uint32_t NumOfBlocks) |
||||
{
|
||||
/* Read block(s) in DMA transfer mode */ |
||||
if(HAL_SD_ReadBlocks_DMA(&uSdHandle, (uint8_t *)pData, ReadAddr, NumOfBlocks) != HAL_OK) |
||||
{ |
||||
return MSD_ERROR; |
||||
} |
||||
else |
||||
{ |
||||
return MSD_OK; |
||||
} |
||||
} |
||||
|
||||
/**
|
||||
* @brief Writes block(s) to a specified address in an SD card, in DMA mode. |
||||
* @param pData: Pointer to the buffer that will contain the data to transmit |
||||
* @param WriteAddr: Address from where data is to be written |
||||
* @param NumOfBlocks: Number of SD blocks to write
|
||||
* @retval SD status |
||||
*/ |
||||
uint8_t BSP_SD_WriteBlocks_DMA(uint32_t *pData, uint32_t WriteAddr, uint32_t NumOfBlocks) |
||||
{
|
||||
/* Write block(s) in DMA transfer mode */ |
||||
if(HAL_SD_WriteBlocks_DMA(&uSdHandle, (uint8_t *)pData, WriteAddr, NumOfBlocks) != HAL_OK) |
||||
{ |
||||
return MSD_ERROR; |
||||
} |
||||
else |
||||
{ |
||||
return MSD_OK; |
||||
} |
||||
} |
||||
|
||||
/**
|
||||
* @brief Erases the specified memory area of the given SD card.
|
||||
* @param StartAddr: Start byte address |
||||
* @param EndAddr: End byte address |
||||
* @retval SD status |
||||
*/ |
||||
uint8_t BSP_SD_Erase(uint32_t StartAddr, uint32_t EndAddr) |
||||
{ |
||||
if(HAL_SD_Erase(&uSdHandle, StartAddr, EndAddr) != HAL_OK) |
||||
{ |
||||
return MSD_ERROR; |
||||
} |
||||
else |
||||
{ |
||||
return MSD_OK; |
||||
} |
||||
} |
||||
|
||||
/**
|
||||
* @brief Initializes the SD MSP. |
||||
* @param hsd: SD handle |
||||
* @param Params : pointer on additional configuration parameters, can be NULL. |
||||
*/ |
||||
__weak void BSP_SD_MspInit(SD_HandleTypeDef *hsd, void *Params) |
||||
{ |
||||
static DMA_HandleTypeDef dma_rx_handle; |
||||
static DMA_HandleTypeDef dma_tx_handle; |
||||
GPIO_InitTypeDef gpio_init_structure; |
||||
|
||||
/* Enable SDIO clock */ |
||||
__HAL_RCC_SDIO_CLK_ENABLE(); |
||||
|
||||
/* Enable DMA2 clocks */ |
||||
__DMAx_TxRx_CLK_ENABLE(); |
||||
|
||||
/* Enable GPIOs clock */ |
||||
__HAL_RCC_GPIOC_CLK_ENABLE(); |
||||
__HAL_RCC_GPIOD_CLK_ENABLE(); |
||||
|
||||
/* Common GPIO configuration */ |
||||
gpio_init_structure.Mode = GPIO_MODE_AF_PP; |
||||
gpio_init_structure.Pull = GPIO_PULLUP; |
||||
gpio_init_structure.Speed = GPIO_SPEED_HIGH; |
||||
gpio_init_structure.Alternate = GPIO_AF12_SDIO; |
||||
|
||||
/* GPIOC configuration */ |
||||
gpio_init_structure.Pin = GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12; |
||||
|
||||
HAL_GPIO_Init(GPIOC, &gpio_init_structure); |
||||
|
||||
/* GPIOD configuration */ |
||||
gpio_init_structure.Pin = GPIO_PIN_2; |
||||
HAL_GPIO_Init(GPIOD, &gpio_init_structure); |
||||
|
||||
/* NVIC configuration for SDIO interrupts */ |
||||
HAL_NVIC_SetPriority(SDIO_IRQn, 0x0E, 0); |
||||
HAL_NVIC_EnableIRQ(SDIO_IRQn); |
||||
|
||||
/* Configure DMA Rx parameters */ |
||||
dma_rx_handle.Init.Channel = SD_DMAx_Rx_CHANNEL; |
||||
dma_rx_handle.Init.Direction = DMA_PERIPH_TO_MEMORY; |
||||
dma_rx_handle.Init.PeriphInc = DMA_PINC_DISABLE; |
||||
dma_rx_handle.Init.MemInc = DMA_MINC_ENABLE; |
||||
dma_rx_handle.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD; |
||||
dma_rx_handle.Init.MemDataAlignment = DMA_MDATAALIGN_WORD; |
||||
dma_rx_handle.Init.Mode = DMA_PFCTRL; |
||||
dma_rx_handle.Init.Priority = DMA_PRIORITY_VERY_HIGH; |
||||
dma_rx_handle.Init.FIFOMode = DMA_FIFOMODE_ENABLE; |
||||
dma_rx_handle.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL; |
||||
dma_rx_handle.Init.MemBurst = DMA_MBURST_INC4; |
||||
dma_rx_handle.Init.PeriphBurst = DMA_PBURST_INC4; |
||||
|
||||
dma_rx_handle.Instance = SD_DMAx_Rx_STREAM; |
||||
|
||||
/* Associate the DMA handle */ |
||||
__HAL_LINKDMA(hsd, hdmarx, dma_rx_handle); |
||||
|
||||
/* Deinitialize the stream for new transfer */ |
||||
HAL_DMA_DeInit(&dma_rx_handle); |
||||
|
||||
/* Configure the DMA stream */ |
||||
HAL_DMA_Init(&dma_rx_handle); |
||||
|
||||
/* Configure DMA Tx parameters */ |
||||
dma_tx_handle.Init.Channel = SD_DMAx_Tx_CHANNEL; |
||||
dma_tx_handle.Init.Direction = DMA_MEMORY_TO_PERIPH; |
||||
dma_tx_handle.Init.PeriphInc = DMA_PINC_DISABLE; |
||||
dma_tx_handle.Init.MemInc = DMA_MINC_ENABLE; |
||||
dma_tx_handle.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD; |
||||
dma_tx_handle.Init.MemDataAlignment = DMA_MDATAALIGN_WORD; |
||||
dma_tx_handle.Init.Mode = DMA_PFCTRL; |
||||
dma_tx_handle.Init.Priority = DMA_PRIORITY_VERY_HIGH; |
||||
dma_tx_handle.Init.FIFOMode = DMA_FIFOMODE_ENABLE; |
||||
dma_tx_handle.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL; |
||||
dma_tx_handle.Init.MemBurst = DMA_MBURST_INC4; |
||||
dma_tx_handle.Init.PeriphBurst = DMA_PBURST_INC4; |
||||
|
||||
dma_tx_handle.Instance = SD_DMAx_Tx_STREAM; |
||||
|
||||
/* Associate the DMA handle */ |
||||
__HAL_LINKDMA(hsd, hdmatx, dma_tx_handle); |
||||
|
||||
/* Deinitialize the stream for new transfer */ |
||||
HAL_DMA_DeInit(&dma_tx_handle); |
||||
|
||||
/* Configure the DMA stream */ |
||||
HAL_DMA_Init(&dma_tx_handle); |
||||
|
||||
/* NVIC configuration for DMA transfer complete interrupt */ |
||||
HAL_NVIC_SetPriority(SD_DMAx_Rx_IRQn, 0x0F, 0); |
||||
HAL_NVIC_EnableIRQ(SD_DMAx_Rx_IRQn); |
||||
|
||||
/* NVIC configuration for DMA transfer complete interrupt */ |
||||
HAL_NVIC_SetPriority(SD_DMAx_Tx_IRQn, 0x0F, 0); |
||||
HAL_NVIC_EnableIRQ(SD_DMAx_Tx_IRQn); |
||||
} |
||||
|
||||
/**
|
||||
* @brief Initializes the SD Detect pin MSP. |
||||
* @param hsd: SD handle |
||||
* @param Params : pointer on additional configuration parameters, can be NULL. |
||||
*/ |
||||
__weak void BSP_SD_Detect_MspInit(SD_HandleTypeDef *hsd, void *Params) |
||||
{ |
||||
GPIO_InitTypeDef gpio_init_structure; |
||||
|
||||
SD_DETECT_GPIO_CLK_ENABLE(); |
||||
|
||||
/* GPIO configuration in input for uSD_Detect signal */ |
||||
gpio_init_structure.Pin = SD_DETECT_PIN; |
||||
gpio_init_structure.Mode = GPIO_MODE_INPUT; |
||||
gpio_init_structure.Pull = GPIO_PULLUP; |
||||
gpio_init_structure.Speed = GPIO_SPEED_HIGH; |
||||
HAL_GPIO_Init(SD_DETECT_GPIO_PORT, &gpio_init_structure); |
||||
} |
||||
|
||||
/**
|
||||
* @brief DeInitializes the SD MSP. |
||||
* @param hsd: SD handle |
||||
* @param Params : pointer on additional configuration parameters, can be NULL. |
||||
*/ |
||||
__weak void BSP_SD_MspDeInit(SD_HandleTypeDef *hsd, void *Params) |
||||
{ |
||||
static DMA_HandleTypeDef dma_rx_handle; |
||||
static DMA_HandleTypeDef dma_tx_handle; |
||||
|
||||
/* Disable NVIC for DMA transfer complete interrupts */ |
||||
HAL_NVIC_DisableIRQ(SD_DMAx_Rx_IRQn); |
||||
HAL_NVIC_DisableIRQ(SD_DMAx_Tx_IRQn); |
||||
|
||||
/* Deinitialize the stream for new transfer */ |
||||
dma_rx_handle.Instance = SD_DMAx_Rx_STREAM; |
||||
HAL_DMA_DeInit(&dma_rx_handle); |
||||
|
||||
/* Deinitialize the stream for new transfer */ |
||||
dma_tx_handle.Instance = SD_DMAx_Tx_STREAM; |
||||
HAL_DMA_DeInit(&dma_tx_handle); |
||||
|
||||
/* Disable NVIC for SDIO interrupts */ |
||||
HAL_NVIC_DisableIRQ(SDIO_IRQn); |
||||
|
||||
/* DeInit GPIO pins can be done in the application
|
||||
(by surcharging this __weak function) */ |
||||
|
||||
/* Disable SDIO clock */ |
||||
__HAL_RCC_SDIO_CLK_DISABLE(); |
||||
|
||||
/* GPOI pins clock and DMA cloks can be shut down in the applic
|
||||
by surcgarging this __weak function */ |
||||
} |
||||
|
||||
/**
|
||||
* @brief Gets the current SD card data status. |
||||
* @retval Data transfer state. |
||||
* This value can be one of the following values: |
||||
* @arg SD_TRANSFER_OK: No data transfer is acting |
||||
* @arg SD_TRANSFER_BUSY: Data transfer is acting |
||||
*/ |
||||
uint8_t BSP_SD_GetCardState(void) |
||||
{ |
||||
return((HAL_SD_GetCardState(&uSdHandle) == HAL_SD_CARD_TRANSFER ) ? SD_TRANSFER_OK : SD_TRANSFER_BUSY); |
||||
} |
||||
|
||||
|
||||
/**
|
||||
* @brief Get SD information about specific SD card. |
||||
* @param CardInfo: Pointer to HAL_SD_CardInfoTypedef structure |
||||
* @retval None
|
||||
*/ |
||||
void BSP_SD_GetCardInfo(HAL_SD_CardInfoTypeDef *CardInfo) |
||||
{ |
||||
/* Get SD card Information */ |
||||
HAL_SD_GetCardInfo(&uSdHandle, CardInfo); |
||||
} |
||||
|
||||
/**
|
||||
* @brief SD Abort callbacks |
||||
* @param hsd: SD handle |
||||
* @retval None |
||||
*/ |
||||
void HAL_SD_AbortCallback(SD_HandleTypeDef *hsd) |
||||
{ |
||||
BSP_SD_AbortCallback(); |
||||
} |
||||
|
||||
/**
|
||||
* @brief Tx Transfer completed callbacks |
||||
* @param hsd: SD handle |
||||
* @retval None |
||||
*/ |
||||
void HAL_SD_TxCpltCallback(SD_HandleTypeDef *hsd) |
||||
{ |
||||
BSP_SD_WriteCpltCallback(); |
||||
} |
||||
|
||||
/**
|
||||
* @brief Rx Transfer completed callbacks |
||||
* @param hsd: SD handle |
||||
* @retval None |
||||
*/ |
||||
void HAL_SD_RxCpltCallback(SD_HandleTypeDef *hsd) |
||||
{ |
||||
BSP_SD_ReadCpltCallback(); |
||||
} |
||||
|
||||
/**
|
||||
* @brief BSP SD Abort callbacks |
||||
* @retval None |
||||
*/ |
||||
__weak void BSP_SD_AbortCallback(void) |
||||
{ |
||||
|
||||
} |
||||
|
||||
/**
|
||||
* @brief BSP Tx Transfer completed callbacks |
||||
* @retval None |
||||
*/ |
||||
__weak void BSP_SD_WriteCpltCallback(void) |
||||
{ |
||||
|
||||
} |
||||
|
||||
/**
|
||||
* @brief BSP Rx Transfer completed callbacks |
||||
* @retval None |
||||
*/ |
||||
__weak void BSP_SD_ReadCpltCallback(void) |
||||
{ |
||||
|
||||
} |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
@ -0,0 +1,143 @@
|
||||
/**
|
||||
****************************************************************************** |
||||
* @file stm32469i_discovery_sd.h |
||||
* @author MCD Application Team |
||||
* @brief This file contains the common defines and functions prototypes for |
||||
* the stm32469i_discovery_sd.c driver. |
||||
****************************************************************************** |
||||
* @attention |
||||
* |
||||
* Copyright (c) 2017 STMicroelectronics. |
||||
* All rights reserved. |
||||
* |
||||
* This software is licensed under terms that can be found in the LICENSE file |
||||
* in the root directory of this software component. |
||||
* If no LICENSE file comes with this software, it is provided AS-IS. |
||||
* |
||||
****************************************************************************** |
||||
*/ |
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/ |
||||
#ifndef __STM32469I_DISCOVERY_SD_H |
||||
#define __STM32469I_DISCOVERY_SD_H |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include "stm32469i_discovery.h" |
||||
|
||||
/** @addtogroup BSP
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @addtogroup STM32469I_Discovery
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @addtogroup STM32469I-Discovery_SD
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @defgroup STM32469I-Discovery_SD_Exported_Types STM32469I Discovery SD Exported Types
|
||||
* @{ |
||||
*/ |
||||
|
||||
/**
|
||||
* @brief SD Card information structure |
||||
*/ |
||||
#define BSP_SD_CardInfo HAL_SD_CardInfoTypeDef |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @brief SD status structure definition |
||||
*/ |
||||
#define MSD_OK ((uint8_t)0x00) |
||||
#define MSD_ERROR ((uint8_t)0x01) |
||||
#define MSD_ERROR_SD_NOT_PRESENT ((uint8_t)0x02) |
||||
|
||||
/**
|
||||
* @brief SD transfer state definition
|
||||
*/
|
||||
#define SD_TRANSFER_OK ((uint8_t)0x00) |
||||
#define SD_TRANSFER_BUSY ((uint8_t)0x01) |
||||
|
||||
/** @defgroup STM32469I-Discovery_SD_Exported_Constants STM32469I Discovery SD Exported Constants
|
||||
* @{ |
||||
*/ |
||||
#define SD_PRESENT ((uint8_t)0x01) |
||||
#define SD_NOT_PRESENT ((uint8_t)0x00) |
||||
|
||||
#define SD_DATATIMEOUT ((uint32_t)100000000) |
||||
|
||||
/* DMA definitions for SD DMA transfer */ |
||||
#define __DMAx_TxRx_CLK_ENABLE __HAL_RCC_DMA2_CLK_ENABLE |
||||
#define SD_DMAx_Tx_CHANNEL DMA_CHANNEL_4 |
||||
#define SD_DMAx_Rx_CHANNEL DMA_CHANNEL_4 |
||||
#define SD_DMAx_Tx_STREAM DMA2_Stream6 |
||||
#define SD_DMAx_Rx_STREAM DMA2_Stream3 |
||||
#define SD_DMAx_Tx_IRQn DMA2_Stream6_IRQn |
||||
#define SD_DMAx_Rx_IRQn DMA2_Stream3_IRQn |
||||
#define BSP_SD_IRQHandler SDIO_IRQHandler |
||||
#define BSP_SD_DMA_Tx_IRQHandler DMA2_Stream6_IRQHandler |
||||
#define BSP_SD_DMA_Rx_IRQHandler DMA2_Stream3_IRQHandler |
||||
#define SD_DetectIRQHandler() HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_8) |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup STM32469I-Discovery_SD_Exported_Macro STM32469I Discovery SD Exported Macro
|
||||
* @{ |
||||
*/ |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup STM32469I-Discovery_SD_Exported_Functions STM32469I Discovery SD Exported Functions
|
||||
* @{ |
||||
*/ |
||||
uint8_t BSP_SD_Init(void); |
||||
uint8_t BSP_SD_DeInit(void); |
||||
uint8_t BSP_SD_ITConfig(void); |
||||
uint8_t BSP_SD_ReadBlocks(uint32_t *pData, uint32_t ReadAddr, uint32_t NumOfBlocks, uint32_t Timeout); |
||||
uint8_t BSP_SD_WriteBlocks(uint32_t *pData, uint32_t WriteAddr, uint32_t NumOfBlocks, uint32_t Timeout); |
||||
uint8_t BSP_SD_ReadBlocks_DMA(uint32_t *pData, uint32_t ReadAddr, uint32_t NumOfBlocks); |
||||
uint8_t BSP_SD_WriteBlocks_DMA(uint32_t *pData, uint32_t WriteAddr, uint32_t NumOfBlocks); |
||||
uint8_t BSP_SD_Erase(uint32_t StartAddr, uint32_t EndAddr); |
||||
uint8_t BSP_SD_GetCardState(void); |
||||
void BSP_SD_GetCardInfo(HAL_SD_CardInfoTypeDef *CardInfo); |
||||
uint8_t BSP_SD_IsDetected(void); |
||||
|
||||
/* These functions can be modified in case the current settings (e.g. DMA stream)
|
||||
need to be changed for specific application needs */ |
||||
void BSP_SD_MspInit(SD_HandleTypeDef *hsd, void *Params); |
||||
void BSP_SD_Detect_MspInit(SD_HandleTypeDef *hsd, void *Params); |
||||
void BSP_SD_MspDeInit(SD_HandleTypeDef *hsd, void *Params); |
||||
void BSP_SD_AbortCallback(void); |
||||
void BSP_SD_WriteCpltCallback(void); |
||||
void BSP_SD_ReadCpltCallback(void); |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
#endif /* __STM32469I_DISCOVERY_SD_H */ |
@ -0,0 +1,508 @@
|
||||
/**
|
||||
****************************************************************************** |
||||
* @file stm32469i_discovery_sdram.c |
||||
* @author MCD Application Team |
||||
* @brief This file includes the SDRAM driver for the MT48LC4M32B2B5-7 memory |
||||
* device mounted on STM32469I-Discovery board. |
||||
****************************************************************************** |
||||
* @attention |
||||
* |
||||
* Copyright (c) 2017 STMicroelectronics. |
||||
* All rights reserved. |
||||
* |
||||
* This software is licensed under terms that can be found in the LICENSE file |
||||
* in the root directory of this software component. |
||||
* If no LICENSE file comes with this software, it is provided AS-IS. |
||||
* |
||||
****************************************************************************** |
||||
*/ |
||||
|
||||
/* File Info : -----------------------------------------------------------------
|
||||
User NOTES |
||||
1. How To use this driver: |
||||
-------------------------- |
||||
- This driver is used to drive the MT48LC4M32B2B5-7 SDRAM external memory mounted |
||||
on STM32469I-Discovery board. |
||||
- This driver does not need a specific component driver for the SDRAM device |
||||
to be included with. |
||||
|
||||
2. Driver description: |
||||
--------------------- |
||||
+ Initialization steps: |
||||
o Initialize the SDRAM external memory using the BSP_SDRAM_Init() function. This |
||||
function includes the MSP layer hardware resources initialization and the |
||||
FMC controller configuration to interface with the external SDRAM memory. |
||||
o It contains the SDRAM initialization sequence to program the SDRAM external |
||||
device using the function BSP_SDRAM_Initialization_sequence(). Note that this |
||||
sequence is standard for all SDRAM devices, but can include some differences |
||||
from a device to another. If it is the case, the right sequence should be |
||||
implemented separately. |
||||
|
||||
+ SDRAM read/write operations |
||||
o SDRAM external memory can be accessed with read/write operations once it is |
||||
initialized. |
||||
Read/write operation can be performed with AHB access using the functions |
||||
BSP_SDRAM_ReadData()/BSP_SDRAM_WriteData(), or by DMA transfer using the functions |
||||
BSP_SDRAM_ReadData_DMA()/BSP_SDRAM_WriteData_DMA(). |
||||
o The AHB access is performed with 32-bit width transaction, the DMA transfer |
||||
configuration is fixed at single (no burst) word transfer (see the |
||||
BSP_SDRAM_MspInit() weak function). |
||||
o User can implement his own functions for read/write access with his desired |
||||
configurations. |
||||
o If interrupt mode is used for DMA transfer, the function BSP_SDRAM_DMA_IRQHandler() |
||||
is called in IRQ handler file, to serve the generated interrupt once the DMA |
||||
transfer is complete. |
||||
o You can send a command to the SDRAM device in runtime using the function |
||||
BSP_SDRAM_Sendcmd(), and giving the desired command as parameter chosen between |
||||
the predefined commands of the "FMC_SDRAM_CommandTypeDef" structure. |
||||
|
||||
------------------------------------------------------------------------------*/ |
||||
|
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include "stm32469i_discovery_sdram.h" |
||||
|
||||
/** @addtogroup BSP
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @addtogroup STM32469I_Discovery
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @defgroup STM32469I-Discovery_SDRAM STM32469I Discovery SDRAM
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @defgroup STM32469I-Discovery_SDRAM_Private_Types_Definitions STM32469I Discovery SDRAM Private TypesDef
|
||||
* @{ |
||||
*/ |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup STM32469I-Discovery_SDRAM_Private_Defines STM32469I Discovery SDRAM Private Defines
|
||||
* @{ |
||||
*/ |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup STM32469I-Discovery_SDRAM_Private_Macros STM32469I Discovery SDRAM Private Macros
|
||||
* @{ |
||||
*/ |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup STM32469I-Discovery_SDRAM_Private_Variables STM32469I Discovery SDRAM Private Variables
|
||||
* @{ |
||||
*/ |
||||
static SDRAM_HandleTypeDef sdramHandle; |
||||
static FMC_SDRAM_TimingTypeDef Timing; |
||||
static FMC_SDRAM_CommandTypeDef Command; |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup STM32469I-Discovery_SDRAM_Private_Function_Prototypes STM32469I Discovery SDRAM Private Prototypes
|
||||
* @{ |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup STM32469I-Discovery_SDRAM_Private_Functions STM32469I Discovery SDRAM Private Functions
|
||||
* @{ |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup STM32469I_Discovery_SDRAM_Exported_Functions STM32469I Discovery SDRAM Exported Functions
|
||||
* @{ |
||||
*/ |
||||
|
||||
/**
|
||||
* @brief Initializes the SDRAM device. |
||||
* @retval SDRAM status |
||||
*/ |
||||
uint8_t BSP_SDRAM_Init(void) |
||||
{ |
||||
static uint8_t sdramstatus = SDRAM_ERROR; |
||||
|
||||
/* SDRAM device configuration */ |
||||
sdramHandle.Instance = FMC_SDRAM_DEVICE; |
||||
|
||||
/* Timing configuration for 90 MHz as SD clock frequency (System clock is up to 180 MHz) */ |
||||
Timing.LoadToActiveDelay = 2; |
||||
Timing.ExitSelfRefreshDelay = 7; |
||||
Timing.SelfRefreshTime = 4; |
||||
Timing.RowCycleDelay = 7; |
||||
Timing.WriteRecoveryTime = 2; |
||||
Timing.RPDelay = 2; |
||||
Timing.RCDDelay = 2; |
||||
|
||||
sdramHandle.Init.SDBank = FMC_SDRAM_BANK1; |
||||
sdramHandle.Init.ColumnBitsNumber = FMC_SDRAM_COLUMN_BITS_NUM_8; |
||||
sdramHandle.Init.RowBitsNumber = FMC_SDRAM_ROW_BITS_NUM_12; |
||||
sdramHandle.Init.MemoryDataWidth = SDRAM_MEMORY_WIDTH; |
||||
sdramHandle.Init.InternalBankNumber = FMC_SDRAM_INTERN_BANKS_NUM_4; |
||||
sdramHandle.Init.CASLatency = FMC_SDRAM_CAS_LATENCY_3; |
||||
sdramHandle.Init.WriteProtection = FMC_SDRAM_WRITE_PROTECTION_DISABLE; |
||||
sdramHandle.Init.SDClockPeriod = SDCLOCK_PERIOD; |
||||
sdramHandle.Init.ReadBurst = FMC_SDRAM_RBURST_ENABLE; |
||||
sdramHandle.Init.ReadPipeDelay = FMC_SDRAM_RPIPE_DELAY_0; |
||||
|
||||
/* SDRAM controller initialization */ |
||||
/* __weak function can be surcharged by the application code */ |
||||
BSP_SDRAM_MspInit(&sdramHandle, (void *)NULL); |
||||
if(HAL_SDRAM_Init(&sdramHandle, &Timing) != HAL_OK) |
||||
{ |
||||
sdramstatus = SDRAM_ERROR; |
||||
} |
||||
else |
||||
{ |
||||
sdramstatus = SDRAM_OK; |
||||
} |
||||
|
||||
/* SDRAM initialization sequence */ |
||||
BSP_SDRAM_Initialization_sequence(REFRESH_COUNT); |
||||
|
||||
return sdramstatus; |
||||
} |
||||
|
||||
/**
|
||||
* @brief DeInitializes the SDRAM device. |
||||
* @retval SDRAM status : SDRAM_OK or SDRAM_ERROR. |
||||
*/ |
||||
uint8_t BSP_SDRAM_DeInit(void) |
||||
{ |
||||
static uint8_t sdramstatus = SDRAM_ERROR; |
||||
|
||||
/* SDRAM device configuration */ |
||||
sdramHandle.Instance = FMC_SDRAM_DEVICE; |
||||
|
||||
if(HAL_SDRAM_DeInit(&sdramHandle) == HAL_OK) |
||||
{ |
||||
sdramstatus = SDRAM_OK; |
||||
|
||||
/* SDRAM controller De-initialization */ |
||||
BSP_SDRAM_MspDeInit(&sdramHandle, (void *)NULL); |
||||
} |
||||
|
||||
return sdramstatus; |
||||
} |
||||
|
||||
|
||||
/**
|
||||
* @brief Programs the SDRAM device. |
||||
* @param RefreshCount: SDRAM refresh counter value |
||||
*/ |
||||
void BSP_SDRAM_Initialization_sequence(uint32_t RefreshCount) |
||||
{ |
||||
__IO uint32_t tmpmrd = 0; |
||||
|
||||
/* Step 1: Configure a clock configuration enable command */ |
||||
Command.CommandMode = FMC_SDRAM_CMD_CLK_ENABLE; |
||||
Command.CommandTarget = FMC_SDRAM_CMD_TARGET_BANK1; |
||||
Command.AutoRefreshNumber = 1; |
||||
Command.ModeRegisterDefinition = 0; |
||||
|
||||
/* Send the command */ |
||||
HAL_SDRAM_SendCommand(&sdramHandle, &Command, SDRAM_TIMEOUT); |
||||
|
||||
/* Step 2: Insert 100 us minimum delay */ |
||||
/* Inserted delay is equal to 1 ms due to systick time base unit (ms) */ |
||||
HAL_Delay(1); |
||||
|
||||
/* Step 3: Configure a PALL (precharge all) command */ |
||||
Command.CommandMode = FMC_SDRAM_CMD_PALL; |
||||
Command.CommandTarget = FMC_SDRAM_CMD_TARGET_BANK1; |
||||
Command.AutoRefreshNumber = 1; |
||||
Command.ModeRegisterDefinition = 0; |
||||
|
||||
/* Send the command */ |
||||
HAL_SDRAM_SendCommand(&sdramHandle, &Command, SDRAM_TIMEOUT); |
||||
|
||||
/* Step 4: Configure an Auto Refresh command */ |
||||
Command.CommandMode = FMC_SDRAM_CMD_AUTOREFRESH_MODE; |
||||
Command.CommandTarget = FMC_SDRAM_CMD_TARGET_BANK1; |
||||
Command.AutoRefreshNumber = 8; |
||||
Command.ModeRegisterDefinition = 0; |
||||
|
||||
/* Send the command */ |
||||
HAL_SDRAM_SendCommand(&sdramHandle, &Command, SDRAM_TIMEOUT); |
||||
|
||||
/* Step 5: Program the external memory mode register */ |
||||
tmpmrd = (uint32_t)SDRAM_MODEREG_BURST_LENGTH_1 |\
|
||||
SDRAM_MODEREG_BURST_TYPE_SEQUENTIAL |\
|
||||
SDRAM_MODEREG_CAS_LATENCY_3 |\
|
||||
SDRAM_MODEREG_OPERATING_MODE_STANDARD |\
|
||||
SDRAM_MODEREG_WRITEBURST_MODE_SINGLE; |
||||
|
||||
Command.CommandMode = FMC_SDRAM_CMD_LOAD_MODE; |
||||
Command.CommandTarget = FMC_SDRAM_CMD_TARGET_BANK1; |
||||
Command.AutoRefreshNumber = 1; |
||||
Command.ModeRegisterDefinition = tmpmrd; |
||||
|
||||
/* Send the command */ |
||||
HAL_SDRAM_SendCommand(&sdramHandle, &Command, SDRAM_TIMEOUT); |
||||
|
||||
/* Step 6: Set the refresh rate counter */ |
||||
/* Set the device refresh rate */ |
||||
HAL_SDRAM_ProgramRefreshRate(&sdramHandle, RefreshCount); |
||||
} |
||||
|
||||
/**
|
||||
* @brief Reads an mount of data from the SDRAM memory in polling mode. |
||||
* @param uwStartAddress: Read start address |
||||
* @param pData: Pointer to data to be read |
||||
* @param uwDataSize: Size of read data from the memory |
||||
* @retval SDRAM status : SDRAM_OK or SDRAM_ERROR. |
||||
*/ |
||||
uint8_t BSP_SDRAM_ReadData(uint32_t uwStartAddress, uint32_t *pData, uint32_t uwDataSize) |
||||
{ |
||||
if(HAL_SDRAM_Read_32b(&sdramHandle, (uint32_t *)uwStartAddress, pData, uwDataSize) != HAL_OK) |
||||
{ |
||||
return SDRAM_ERROR; |
||||
} |
||||
else |
||||
{ |
||||
return SDRAM_OK; |
||||
} |
||||
} |
||||
|
||||
/**
|
||||
* @brief Reads an mount of data from the SDRAM memory in DMA mode. |
||||
* @param uwStartAddress: Read start address |
||||
* @param pData: Pointer to data to be read |
||||
* @param uwDataSize: Size of read data from the memory |
||||
* @retval SDRAM status : SDRAM_OK or SDRAM_ERROR. |
||||
*/ |
||||
uint8_t BSP_SDRAM_ReadData_DMA(uint32_t uwStartAddress, uint32_t *pData, uint32_t uwDataSize) |
||||
{ |
||||
if(HAL_SDRAM_Read_DMA(&sdramHandle, (uint32_t *)uwStartAddress, pData, uwDataSize) != HAL_OK) |
||||
{ |
||||
return SDRAM_ERROR; |
||||
} |
||||
else |
||||
{ |
||||
return SDRAM_OK; |
||||
} |
||||
} |
||||
|
||||
/**
|
||||
* @brief Writes an mount of data to the SDRAM memory in polling mode. |
||||
* @param uwStartAddress: Write start address |
||||
* @param pData: Pointer to data to be written |
||||
* @param uwDataSize: Size of written data from the memory |
||||
* @retval SDRAM status : SDRAM_OK or SDRAM_ERROR. |
||||
*/ |
||||
uint8_t BSP_SDRAM_WriteData(uint32_t uwStartAddress, uint32_t *pData, uint32_t uwDataSize) |
||||
{ |
||||
if(HAL_SDRAM_Write_32b(&sdramHandle, (uint32_t *)uwStartAddress, pData, uwDataSize) != HAL_OK) |
||||
{ |
||||
return SDRAM_ERROR; |
||||
} |
||||
else |
||||
{ |
||||
return SDRAM_OK; |
||||
} |
||||
} |
||||
|
||||
/**
|
||||
* @brief Writes an mount of data to the SDRAM memory in DMA mode. |
||||
* @param uwStartAddress: Write start address |
||||
* @param pData: Pointer to data to be written |
||||
* @param uwDataSize: Size of written data from the memory |
||||
* @retval SDRAM status : SDRAM_OK or SDRAM_ERROR. |
||||
*/ |
||||
uint8_t BSP_SDRAM_WriteData_DMA(uint32_t uwStartAddress, uint32_t *pData, uint32_t uwDataSize) |
||||
{ |
||||
if(HAL_SDRAM_Write_DMA(&sdramHandle, (uint32_t *)uwStartAddress, pData, uwDataSize) != HAL_OK) |
||||
{ |
||||
return SDRAM_ERROR; |
||||
} |
||||
else |
||||
{ |
||||
return SDRAM_OK; |
||||
} |
||||
} |
||||
|
||||
/**
|
||||
* @brief Sends command to the SDRAM bank. |
||||
* @param SdramCmd: Pointer to SDRAM command structure |
||||
* @retval HAL status : SDRAM_OK or SDRAM_ERROR. |
||||
*/ |
||||
uint8_t BSP_SDRAM_Sendcmd(FMC_SDRAM_CommandTypeDef *SdramCmd) |
||||
{ |
||||
if(HAL_SDRAM_SendCommand(&sdramHandle, SdramCmd, SDRAM_TIMEOUT) != HAL_OK) |
||||
{ |
||||
return SDRAM_ERROR; |
||||
} |
||||
else |
||||
{ |
||||
return SDRAM_OK; |
||||
} |
||||
} |
||||
|
||||
/**
|
||||
* @brief Handles SDRAM DMA transfer interrupt request. |
||||
*/ |
||||
void BSP_SDRAM_DMA_IRQHandler(void) |
||||
{ |
||||
HAL_DMA_IRQHandler(sdramHandle.hdma); |
||||
} |
||||
|
||||
/**
|
||||
* @brief Initializes SDRAM MSP. |
||||
* @note This function can be surcharged by application code. |
||||
* @param hsdram: pointer on SDRAM handle |
||||
* @param Params: pointer on additional configuration parameters, can be NULL. |
||||
*/ |
||||
__weak void BSP_SDRAM_MspInit(SDRAM_HandleTypeDef *hsdram, void *Params) |
||||
{ |
||||
static DMA_HandleTypeDef dma_handle; |
||||
GPIO_InitTypeDef gpio_init_structure; |
||||
|
||||
if(hsdram != (SDRAM_HandleTypeDef *)NULL) |
||||
{ |
||||
/* Enable FMC clock */ |
||||
__HAL_RCC_FMC_CLK_ENABLE(); |
||||
|
||||
/* Enable chosen DMAx clock */ |
||||
__DMAx_CLK_ENABLE(); |
||||
|
||||
/* Enable GPIOs clock */ |
||||
__HAL_RCC_GPIOC_CLK_ENABLE(); |
||||
__HAL_RCC_GPIOD_CLK_ENABLE(); |
||||
__HAL_RCC_GPIOE_CLK_ENABLE(); |
||||
__HAL_RCC_GPIOF_CLK_ENABLE(); |
||||
__HAL_RCC_GPIOG_CLK_ENABLE(); |
||||
__HAL_RCC_GPIOH_CLK_ENABLE(); |
||||
__HAL_RCC_GPIOI_CLK_ENABLE(); |
||||
|
||||
/* Common GPIO configuration */ |
||||
gpio_init_structure.Mode = GPIO_MODE_AF_PP; |
||||
gpio_init_structure.Pull = GPIO_PULLUP; |
||||
gpio_init_structure.Speed = GPIO_SPEED_FAST; |
||||
gpio_init_structure.Alternate = GPIO_AF12_FMC; |
||||
|
||||
/* GPIOC configuration : PC0 is SDNWE */ |
||||
gpio_init_structure.Pin = GPIO_PIN_0; |
||||
HAL_GPIO_Init(GPIOC, &gpio_init_structure); |
||||
|
||||
/* GPIOD configuration */ |
||||
gpio_init_structure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_8| GPIO_PIN_9 | GPIO_PIN_10 |\
|
||||
GPIO_PIN_14 | GPIO_PIN_15; |
||||
|
||||
|
||||
HAL_GPIO_Init(GPIOD, &gpio_init_structure); |
||||
|
||||
/* GPIOE configuration */ |
||||
gpio_init_structure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_7| GPIO_PIN_8 | GPIO_PIN_9 |\
|
||||
GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14 |\
|
||||
GPIO_PIN_15; |
||||
|
||||
HAL_GPIO_Init(GPIOE, &gpio_init_structure); |
||||
|
||||
/* GPIOF configuration */ |
||||
gpio_init_structure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2| GPIO_PIN_3 | GPIO_PIN_4 |\
|
||||
GPIO_PIN_5 | GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14 |\
|
||||
GPIO_PIN_15; |
||||
|
||||
HAL_GPIO_Init(GPIOF, &gpio_init_structure); |
||||
|
||||
/* GPIOG configuration */ |
||||
gpio_init_structure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_4| GPIO_PIN_5 | GPIO_PIN_8 |\
|
||||
GPIO_PIN_15; |
||||
HAL_GPIO_Init(GPIOG, &gpio_init_structure); |
||||
|
||||
/* GPIOH configuration */ |
||||
gpio_init_structure.Pin = GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_8 | GPIO_PIN_9 |\
|
||||
GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14 |\
|
||||
GPIO_PIN_15; |
||||
HAL_GPIO_Init(GPIOH, &gpio_init_structure); |
||||
|
||||
/* GPIOI configuration */ |
||||
gpio_init_structure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4 |\
|
||||
GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7 | GPIO_PIN_9 | GPIO_PIN_10; |
||||
HAL_GPIO_Init(GPIOI, &gpio_init_structure); |
||||
|
||||
/* Configure common DMA parameters */ |
||||
dma_handle.Init.Channel = SDRAM_DMAx_CHANNEL; |
||||
dma_handle.Init.Direction = DMA_MEMORY_TO_MEMORY; |
||||
dma_handle.Init.PeriphInc = DMA_PINC_ENABLE; |
||||
dma_handle.Init.MemInc = DMA_MINC_ENABLE; |
||||
dma_handle.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD; |
||||
dma_handle.Init.MemDataAlignment = DMA_MDATAALIGN_WORD; |
||||
dma_handle.Init.Mode = DMA_NORMAL; |
||||
dma_handle.Init.Priority = DMA_PRIORITY_HIGH; |
||||
dma_handle.Init.FIFOMode = DMA_FIFOMODE_DISABLE; |
||||
dma_handle.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL; |
||||
dma_handle.Init.MemBurst = DMA_MBURST_SINGLE; |
||||
dma_handle.Init.PeriphBurst = DMA_PBURST_SINGLE; |
||||
|
||||
dma_handle.Instance = SDRAM_DMAx_STREAM; |
||||
|
||||
/* Associate the DMA handle */ |
||||
__HAL_LINKDMA(hsdram, hdma, dma_handle); |
||||
|
||||
/* Deinitialize the stream for new transfer */ |
||||
HAL_DMA_DeInit(&dma_handle); |
||||
|
||||
/* Configure the DMA stream */ |
||||
HAL_DMA_Init(&dma_handle); |
||||
|
||||
/* NVIC configuration for DMA transfer complete interrupt */ |
||||
HAL_NVIC_SetPriority(SDRAM_DMAx_IRQn, 5, 0); |
||||
HAL_NVIC_EnableIRQ(SDRAM_DMAx_IRQn); |
||||
|
||||
} /* of if(hsdram != (SDRAM_HandleTypeDef *)NULL) */ |
||||
} |
||||
|
||||
/**
|
||||
* @brief DeInitializes SDRAM MSP. |
||||
* @note This function can be surcharged by application code. |
||||
* @param hsdram: pointer on SDRAM handle |
||||
* @param Params: pointer on additional configuration parameters, can be NULL. |
||||
*/ |
||||
__weak void BSP_SDRAM_MspDeInit(SDRAM_HandleTypeDef *hsdram, void *Params) |
||||
{ |
||||
static DMA_HandleTypeDef dma_handle; |
||||
|
||||
if(hsdram != (SDRAM_HandleTypeDef *)NULL) |
||||
{ |
||||
/* Disable NVIC configuration for DMA interrupt */ |
||||
HAL_NVIC_DisableIRQ(SDRAM_DMAx_IRQn); |
||||
|
||||
/* Deinitialize the stream for new transfer */ |
||||
dma_handle.Instance = SDRAM_DMAx_STREAM; |
||||
HAL_DMA_DeInit(&dma_handle); |
||||
|
||||
/* DeInit GPIO pins can be done in the application
|
||||
(by surcharging this __weak function) */ |
||||
|
||||
/* GPIO pins clock, FMC clock and DMA clock can be shut down in the application
|
||||
by surcharging this __weak function */ |
||||
|
||||
} /* of if(hsdram != (SDRAM_HandleTypeDef *)NULL) */ |
||||
} |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue