Working FLAC decoding routine and callbacks.
This commit is contained in:
parent
b7a47fa77d
commit
5389746566
12
.clang-format
Normal file
12
.clang-format
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
BasedOnStyle: Google
|
||||||
|
IndentWidth: 4
|
||||||
|
AlignConsecutiveMacros: Consecutive
|
||||||
|
AlignConsecutiveDeclarations: Consecutive
|
||||||
|
AlignConsecutiveAssignments: Consecutive
|
||||||
|
BreakBeforeBraces: Custom
|
||||||
|
IndentGotoLabels: false
|
||||||
|
BraceWrapping:
|
||||||
|
AfterEnum: false
|
||||||
|
AfterStruct: false
|
||||||
|
SplitEmptyFunction: false
|
||||||
|
ColumnLimit: 120
|
147
.clang-tidy
Normal file
147
.clang-tidy
Normal file
|
@ -0,0 +1,147 @@
|
||||||
|
# Generated from CLion Inspection settings
|
||||||
|
---
|
||||||
|
Checks: '-*,
|
||||||
|
bugprone-argument-comment,
|
||||||
|
bugprone-assert-side-effect,
|
||||||
|
bugprone-bad-signal-to-kill-thread,
|
||||||
|
bugprone-branch-clone,
|
||||||
|
bugprone-copy-constructor-init,
|
||||||
|
bugprone-dangling-handle,
|
||||||
|
bugprone-dynamic-static-initializers,
|
||||||
|
bugprone-fold-init-type,
|
||||||
|
bugprone-forward-declaration-namespace,
|
||||||
|
bugprone-forwarding-reference-overload,
|
||||||
|
bugprone-inaccurate-erase,
|
||||||
|
bugprone-incorrect-roundings,
|
||||||
|
bugprone-integer-division,
|
||||||
|
bugprone-lambda-function-name,
|
||||||
|
bugprone-macro-parentheses,
|
||||||
|
bugprone-macro-repeated-side-effects,
|
||||||
|
bugprone-misplaced-operator-in-strlen-in-alloc,
|
||||||
|
bugprone-misplaced-pointer-arithmetic-in-alloc,
|
||||||
|
bugprone-misplaced-widening-cast,
|
||||||
|
bugprone-move-forwarding-reference,
|
||||||
|
bugprone-multiple-statement-macro,
|
||||||
|
bugprone-no-escape,
|
||||||
|
bugprone-not-null-terminated-result,
|
||||||
|
bugprone-parent-virtual-call,
|
||||||
|
bugprone-posix-return,
|
||||||
|
bugprone-reserved-identifier,
|
||||||
|
bugprone-sizeof-container,
|
||||||
|
bugprone-sizeof-expression,
|
||||||
|
bugprone-spuriously-wake-up-functions,
|
||||||
|
bugprone-string-constructor,
|
||||||
|
bugprone-string-integer-assignment,
|
||||||
|
bugprone-string-literal-with-embedded-nul,
|
||||||
|
bugprone-suspicious-enum-usage,
|
||||||
|
bugprone-suspicious-include,
|
||||||
|
bugprone-suspicious-memory-comparison,
|
||||||
|
bugprone-suspicious-memset-usage,
|
||||||
|
bugprone-suspicious-missing-comma,
|
||||||
|
bugprone-suspicious-semicolon,
|
||||||
|
bugprone-suspicious-string-compare,
|
||||||
|
bugprone-swapped-arguments,
|
||||||
|
bugprone-terminating-continue,
|
||||||
|
bugprone-throw-keyword-missing,
|
||||||
|
bugprone-too-small-loop-variable,
|
||||||
|
bugprone-undefined-memory-manipulation,
|
||||||
|
bugprone-undelegated-constructor,
|
||||||
|
bugprone-unhandled-self-assignment,
|
||||||
|
bugprone-unused-raii,
|
||||||
|
bugprone-unused-return-value,
|
||||||
|
bugprone-use-after-move,
|
||||||
|
bugprone-virtual-near-miss,
|
||||||
|
cert-dcl21-cpp,
|
||||||
|
cert-dcl58-cpp,
|
||||||
|
cert-err34-c,
|
||||||
|
cert-err52-cpp,
|
||||||
|
cert-err60-cpp,
|
||||||
|
cert-flp30-c,
|
||||||
|
cert-msc50-cpp,
|
||||||
|
cert-msc51-cpp,
|
||||||
|
cert-str34-c,
|
||||||
|
cppcoreguidelines-interfaces-global-init,
|
||||||
|
cppcoreguidelines-narrowing-conversions,
|
||||||
|
cppcoreguidelines-pro-type-member-init,
|
||||||
|
cppcoreguidelines-pro-type-static-cast-downcast,
|
||||||
|
cppcoreguidelines-slicing,
|
||||||
|
google-default-arguments,
|
||||||
|
google-explicit-constructor,
|
||||||
|
google-runtime-operator,
|
||||||
|
hicpp-exception-baseclass,
|
||||||
|
hicpp-multiway-paths-covered,
|
||||||
|
misc-misplaced-const,
|
||||||
|
misc-new-delete-overloads,
|
||||||
|
misc-no-recursion,
|
||||||
|
misc-non-copyable-objects,
|
||||||
|
misc-throw-by-value-catch-by-reference,
|
||||||
|
misc-unconventional-assign-operator,
|
||||||
|
misc-uniqueptr-reset-release,
|
||||||
|
modernize-avoid-bind,
|
||||||
|
modernize-concat-nested-namespaces,
|
||||||
|
modernize-deprecated-headers,
|
||||||
|
modernize-deprecated-ios-base-aliases,
|
||||||
|
modernize-loop-convert,
|
||||||
|
modernize-make-shared,
|
||||||
|
modernize-make-unique,
|
||||||
|
modernize-pass-by-value,
|
||||||
|
modernize-raw-string-literal,
|
||||||
|
modernize-redundant-void-arg,
|
||||||
|
modernize-replace-auto-ptr,
|
||||||
|
modernize-replace-disallow-copy-and-assign-macro,
|
||||||
|
modernize-replace-random-shuffle,
|
||||||
|
modernize-return-braced-init-list,
|
||||||
|
modernize-shrink-to-fit,
|
||||||
|
modernize-unary-static-assert,
|
||||||
|
modernize-use-auto,
|
||||||
|
modernize-use-bool-literals,
|
||||||
|
modernize-use-emplace,
|
||||||
|
modernize-use-equals-default,
|
||||||
|
modernize-use-equals-delete,
|
||||||
|
modernize-use-nodiscard,
|
||||||
|
modernize-use-noexcept,
|
||||||
|
modernize-use-nullptr,
|
||||||
|
modernize-use-override,
|
||||||
|
modernize-use-transparent-functors,
|
||||||
|
modernize-use-uncaught-exceptions,
|
||||||
|
mpi-buffer-deref,
|
||||||
|
mpi-type-mismatch,
|
||||||
|
openmp-use-default-none,
|
||||||
|
performance-faster-string-find,
|
||||||
|
performance-for-range-copy,
|
||||||
|
performance-implicit-conversion-in-loop,
|
||||||
|
performance-inefficient-algorithm,
|
||||||
|
performance-inefficient-string-concatenation,
|
||||||
|
performance-inefficient-vector-operation,
|
||||||
|
performance-move-const-arg,
|
||||||
|
performance-move-constructor-init,
|
||||||
|
performance-no-automatic-move,
|
||||||
|
performance-noexcept-move-constructor,
|
||||||
|
performance-trivially-destructible,
|
||||||
|
performance-type-promotion-in-math-fn,
|
||||||
|
performance-unnecessary-copy-initialization,
|
||||||
|
performance-unnecessary-value-param,
|
||||||
|
portability-simd-intrinsics,
|
||||||
|
readability-avoid-const-params-in-decls,
|
||||||
|
readability-const-return-type,
|
||||||
|
readability-container-size-empty,
|
||||||
|
readability-convert-member-functions-to-static,
|
||||||
|
readability-delete-null-pointer,
|
||||||
|
readability-deleted-default,
|
||||||
|
readability-inconsistent-declaration-parameter-name,
|
||||||
|
readability-make-member-function-const,
|
||||||
|
readability-misleading-indentation,
|
||||||
|
readability-misplaced-array-index,
|
||||||
|
readability-non-const-parameter,
|
||||||
|
readability-redundant-control-flow,
|
||||||
|
readability-redundant-declaration,
|
||||||
|
readability-redundant-function-ptr-dereference,
|
||||||
|
readability-redundant-smartptr-get,
|
||||||
|
readability-redundant-string-cstr,
|
||||||
|
readability-redundant-string-init,
|
||||||
|
readability-simplify-subscript-expr,
|
||||||
|
readability-static-accessed-through-instance,
|
||||||
|
readability-static-definition-in-anonymous-namespace,
|
||||||
|
readability-string-compare,
|
||||||
|
readability-uniqueptr-delete-release,
|
||||||
|
readability-use-anyofallof'
|
3
.gitmodules
vendored
3
.gitmodules
vendored
|
@ -1,3 +1,6 @@
|
||||||
[submodule "SDK"]
|
[submodule "SDK"]
|
||||||
path = SDK
|
path = SDK
|
||||||
url = https://git.minori.work/Embedded_SDK/MCUXpresso_LPC55S69.git
|
url = https://git.minori.work/Embedded_SDK/MCUXpresso_LPC55S69.git
|
||||||
|
[submodule "lib/flac"]
|
||||||
|
path = lib/flac
|
||||||
|
url = https://github.com/xiph/flac.git
|
||||||
|
|
|
@ -1,15 +1,17 @@
|
||||||
cmake_minimum_required(VERSION 3.10)
|
cmake_minimum_required(VERSION 3.10)
|
||||||
|
|
||||||
project(lpcxpresso_55s69_template)
|
project(lpcxpresso_55s69_player)
|
||||||
|
|
||||||
enable_language(CXX)
|
enable_language(CXX)
|
||||||
enable_language(ASM)
|
enable_language(ASM)
|
||||||
|
|
||||||
# Different linker scripts
|
# Different linker scripts
|
||||||
set(TARGET_LDSCRIPT_FLASH "${CMAKE_SOURCE_DIR}/SDK/devices/LPC55S69/gcc/LPC55S69_cm33_core0_flash.ld")
|
set(TARGET_LDSCRIPT_FLASH "${CMAKE_SOURCE_DIR}/app_flash.ld")
|
||||||
set(TARGET_LDSCRIPT_RAM "${CMAKE_SOURCE_DIR}/SDK/devices/LPC55S69/gcc/LPC55S69_cm33_core0_ram.ld")
|
set(TARGET_LDSCRIPT_RAM "${CMAKE_SOURCE_DIR}/SDK/devices/LPC55S69/gcc/LPC55S69_cm33_core0_ram.ld")
|
||||||
|
|
||||||
set(TARGET_SOURCES
|
set(TARGET_SOURCES
|
||||||
|
"SDK/components/lists/fsl_component_generic_list.c"
|
||||||
|
"SDK/components/osa/fsl_os_abstraction_bm.c"
|
||||||
"SDK/components/serial_manager/fsl_component_serial_manager.c"
|
"SDK/components/serial_manager/fsl_component_serial_manager.c"
|
||||||
"SDK/components/serial_manager/fsl_component_serial_port_uart.c"
|
"SDK/components/serial_manager/fsl_component_serial_port_uart.c"
|
||||||
"SDK/components/uart/fsl_adapter_usart.c"
|
"SDK/components/uart/fsl_adapter_usart.c"
|
||||||
|
@ -56,10 +58,22 @@ set(TARGET_SOURCES
|
||||||
"SDK/devices/LPC55S69/system_LPC55S69_cm33_core0.c"
|
"SDK/devices/LPC55S69/system_LPC55S69_cm33_core0.c"
|
||||||
"SDK/devices/LPC55S69/utilities/debug_console/fsl_debug_console.c"
|
"SDK/devices/LPC55S69/utilities/debug_console/fsl_debug_console.c"
|
||||||
"SDK/devices/LPC55S69/utilities/str/fsl_str.c"
|
"SDK/devices/LPC55S69/utilities/str/fsl_str.c"
|
||||||
|
"SDK/middleware/fatfs/source/fsl_sd_disk/fsl_sd_disk.c"
|
||||||
|
"SDK/middleware/fatfs/source/diskio.c"
|
||||||
|
"SDK/middleware/fatfs/source/ff.c"
|
||||||
|
"SDK/middleware/fatfs/source/ffsystem.c"
|
||||||
|
"SDK/middleware/fatfs/source/ffunicode.c"
|
||||||
|
"SDK/middleware/sdmmc/common/fsl_sdmmc_common.c"
|
||||||
|
"SDK/middleware/sdmmc/host/sdif/non_blocking/fsl_sdmmc_host.c"
|
||||||
|
"SDK/middleware/sdmmc/sd/fsl_sd.c"
|
||||||
|
"SDK/middleware/sdmmc/osa/fsl_sdmmc_osa.c"
|
||||||
|
"SDK/devices/LPC55S69/utilities/fsl_sbrk.c"
|
||||||
"board/board.c"
|
"board/board.c"
|
||||||
"board/clock_config.c"
|
"board/clock_config.c"
|
||||||
"board/peripherals.c"
|
"board/peripherals.c"
|
||||||
"board/pin_mux.c"
|
"board/pin_mux.c"
|
||||||
|
"board/sdmmc_config.c"
|
||||||
|
"src/app_flac_callbacks.c"
|
||||||
"src/main.c"
|
"src/main.c"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -67,24 +81,35 @@ set(TARGET_C_DEFINES
|
||||||
"CPU_LPC55S69JBD100_cm33_core0"
|
"CPU_LPC55S69JBD100_cm33_core0"
|
||||||
"FFR_INCLUDE=\"fsl_iap_ffr.h\""
|
"FFR_INCLUDE=\"fsl_iap_ffr.h\""
|
||||||
"MCUXPRESSO_SDK"
|
"MCUXPRESSO_SDK"
|
||||||
|
"SD_ENABLED"
|
||||||
"SERIAL_PORT_TYPE_UART=1"
|
"SERIAL_PORT_TYPE_UART=1"
|
||||||
"__STARTUP_CLEAR_BSS"
|
"__STARTUP_CLEAR_BSS"
|
||||||
)
|
)
|
||||||
|
|
||||||
set(TARGET_C_INCLUDES
|
set(TARGET_C_INCLUDES
|
||||||
"SDK/CMSIS/Core/Include"
|
"SDK/CMSIS/Core/Include"
|
||||||
|
"SDK/components/lists"
|
||||||
|
"SDK/components/osa"
|
||||||
"SDK/components/serial_manager"
|
"SDK/components/serial_manager"
|
||||||
"SDK/components/uart"
|
"SDK/components/uart"
|
||||||
"SDK/devices/LPC55S69"
|
"SDK/devices/LPC55S69"
|
||||||
"SDK/devices/LPC55S69/drivers"
|
"SDK/devices/LPC55S69/drivers"
|
||||||
"SDK/devices/LPC55S69/utilities/debug_console"
|
"SDK/devices/LPC55S69/utilities/debug_console"
|
||||||
"SDK/devices/LPC55S69/utilities/str"
|
"SDK/devices/LPC55S69/utilities/str"
|
||||||
|
"SDK/middleware/fatfs/source"
|
||||||
|
"SDK/middleware/fatfs/source/fsl_sd_disk"
|
||||||
|
"SDK/middleware/sdmmc/common"
|
||||||
|
"SDK/middleware/sdmmc/host/sdif"
|
||||||
|
"SDK/middleware/sdmmc/osa"
|
||||||
|
"SDK/middleware/sdmmc/sd"
|
||||||
"board"
|
"board"
|
||||||
"include"
|
"include"
|
||||||
)
|
)
|
||||||
|
|
||||||
# Shared libraries linked with application
|
# Shared libraries linked with application
|
||||||
set(TARGET_LIBS
|
set(TARGET_LIBS
|
||||||
|
"fro_calib_hardabi"
|
||||||
|
"FLAC"
|
||||||
"c"
|
"c"
|
||||||
"m"
|
"m"
|
||||||
"nosys"
|
"nosys"
|
||||||
|
@ -92,7 +117,7 @@ set(TARGET_LIBS
|
||||||
|
|
||||||
# Shared library and linker script search paths
|
# Shared library and linker script search paths
|
||||||
set(TARGET_LIB_DIRECTORIES
|
set(TARGET_LIB_DIRECTORIES
|
||||||
|
"${CMAKE_SOURCE_DIR}/SDK/devices/LPC55S69/gcc"
|
||||||
)
|
)
|
||||||
|
|
||||||
# Device specific settings, goes to CFLAGS and LDFLAGS
|
# Device specific settings, goes to CFLAGS and LDFLAGS
|
||||||
|
@ -116,6 +141,9 @@ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${TARGET_CFLAGS_HARDWARE} -Wall -
|
||||||
set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} ${CMAKE_C_FLAGS} -x assembler-with-cpp")
|
set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} ${CMAKE_C_FLAGS} -x assembler-with-cpp")
|
||||||
set(CMAKE_EXE_LINKER_FLAGS "-specs=nano.specs -specs=nosys.specs -Wl,--gc-sections -Wl,--print-memory-usage -Wl,--no-warn-rwx-segments")
|
set(CMAKE_EXE_LINKER_FLAGS "-specs=nano.specs -specs=nosys.specs -Wl,--gc-sections -Wl,--print-memory-usage -Wl,--no-warn-rwx-segments")
|
||||||
|
|
||||||
|
# Sub directories
|
||||||
|
set(WITH_OGG OFF CACHE BOOL "" FORCE)
|
||||||
|
add_subdirectory(lib/flac)
|
||||||
|
|
||||||
# Shared sources, includes and definitions
|
# Shared sources, includes and definitions
|
||||||
add_compile_definitions(${TARGET_C_DEFINES})
|
add_compile_definitions(${TARGET_C_DEFINES})
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding= "UTF-8" ?>
|
<?xml version="1.0" encoding= "UTF-8" ?>
|
||||||
<configuration name="LPCXpresso55S69" xsi:schemaLocation="http://mcuxpresso.nxp.com/XSD/mex_configuration_11 http://mcuxpresso.nxp.com/XSD/mex_configuration_11.xsd" uuid="6c6bcd04-a24b-4f8f-aa35-5b756538b2f6" version="11" xmlns="http://mcuxpresso.nxp.com/XSD/mex_configuration_11" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
<configuration name="LPCXpresso55S69" xsi:schemaLocation="http://mcuxpresso.nxp.com/XSD/mex_configuration_12 http://mcuxpresso.nxp.com/XSD/mex_configuration_12.xsd" uuid="6c6bcd04-a24b-4f8f-aa35-5b756538b2f6" version="12" xmlns="http://mcuxpresso.nxp.com/XSD/mex_configuration_12" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||||
<common>
|
<common>
|
||||||
<processor>LPC55S69</processor>
|
<processor>LPC55S69</processor>
|
||||||
<package>LPC55S69JBD100</package>
|
<package>LPC55S69JBD100</package>
|
||||||
|
@ -20,13 +20,13 @@
|
||||||
<generate_registers_defines>false</generate_registers_defines>
|
<generate_registers_defines>false</generate_registers_defines>
|
||||||
</preferences>
|
</preferences>
|
||||||
<tools>
|
<tools>
|
||||||
<pins name="Pins" version="11.0" enabled="true" update_project_code="true">
|
<pins name="Pins" version="12.0" enabled="true" update_project_code="true">
|
||||||
<generated_project_files>
|
<generated_project_files>
|
||||||
<file path="board/pin_mux.c" update_enabled="true"/>
|
<file path="board/pin_mux.c" update_enabled="true"/>
|
||||||
<file path="board/pin_mux.h" update_enabled="true"/>
|
<file path="board/pin_mux.h" update_enabled="true"/>
|
||||||
</generated_project_files>
|
</generated_project_files>
|
||||||
<pins_profile>
|
<pins_profile>
|
||||||
<processor_version>11.0.1</processor_version>
|
<processor_version>12.0.0</processor_version>
|
||||||
</pins_profile>
|
</pins_profile>
|
||||||
<functions_list>
|
<functions_list>
|
||||||
<function name="BOARD_InitDEBUG_UARTPins">
|
<function name="BOARD_InitDEBUG_UARTPins">
|
||||||
|
@ -516,15 +516,45 @@
|
||||||
</pin>
|
</pin>
|
||||||
</pins>
|
</pins>
|
||||||
</function>
|
</function>
|
||||||
|
<function name="BOARD_InitSDPins">
|
||||||
|
<description>Configures pin routing and optionally pin electrical features.</description>
|
||||||
|
<options>
|
||||||
|
<callFromInitBoot>true</callFromInitBoot>
|
||||||
|
<coreID>cm33_core0</coreID>
|
||||||
|
<enableClock>true</enableClock>
|
||||||
|
</options>
|
||||||
|
<dependencies>
|
||||||
|
<dependency resourceType="Peripheral" resourceId="SDIF" description="Peripheral SDIF is not initialized" problem_level="1" source="Pins:BOARD_InitSDPins">
|
||||||
|
<feature name="initialized" evaluation="equal">
|
||||||
|
<data>true</data>
|
||||||
|
</feature>
|
||||||
|
</dependency>
|
||||||
|
<dependency resourceType="SWComponent" resourceId="platform.drivers.common" description="Pins initialization requires the COMMON Driver in the project." problem_level="2" source="Pins:BOARD_InitSDPins">
|
||||||
|
<feature name="enabled" evaluation="equal" configuration="cm33_core0">
|
||||||
|
<data>true</data>
|
||||||
|
</feature>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
<pins>
|
||||||
|
<pin peripheral="SDIF" signal="SD0_CARD_DET" pin_num="8" pin_signal="PIO0_17/FC4_SSEL2/SD0_CARD_DET_N/SCT_GPI7/SCT0_OUT0/SD0_CARD_INT_N/PLU_IN2/SECURE_GPIO0_17"/>
|
||||||
|
<pin peripheral="SDIF" signal="SD0_CLK" pin_num="6" pin_signal="PIO0_7/FC3_RTS_SCL_SSEL1/SD0_CLK/FC5_SCK/FC1_SCK/SECURE_GPIO0_7"/>
|
||||||
|
<pin peripheral="SDIF" signal="SD0_CMD" pin_num="26" pin_signal="PIO0_8/FC3_SSEL3/SD0_CMD/FC5_RXD_SDA_MOSI_DATA/SWO/SECURE_GPIO0_8"/>
|
||||||
|
<pin peripheral="SDIF" signal="SD0_D, 0" pin_num="70" pin_signal="PIO0_24/FC0_RXD_SDA_MOSI_DATA/SD0_D0/CT_INP8/SCT_GPI0/SECURE_GPIO0_24"/>
|
||||||
|
<pin peripheral="SDIF" signal="SD0_D, 1" pin_num="79" pin_signal="PIO0_25/FC0_TXD_SCL_MISO_WS/SD0_D1/CT_INP9/SCT_GPI1/SECURE_GPIO0_25"/>
|
||||||
|
<pin peripheral="SDIF" signal="SD0_D, 2" pin_num="23" pin_signal="PIO0_31/FC0_CTS_SDA_SSEL0/SD0_D2/CTIMER0_MAT1/SCT0_OUT3/SECURE_GPIO0_31/ADC0_3"/>
|
||||||
|
<pin peripheral="SDIF" signal="SD0_D, 3" pin_num="11" pin_signal="PIO1_0/FC0_RTS_SCL_SSEL1/SD0_D3/CT_INP2/SCT_GPI4/PLU_OUT3/ADC0_11"/>
|
||||||
|
<pin peripheral="SDIF" signal="SD0_POW_EN" pin_num="55" pin_signal="PIO0_9/FC3_SSEL2/SD0_POW_EN/FC5_TXD_SCL_MISO_WS/SECURE_GPIO0_9/ACMP0_B"/>
|
||||||
|
</pins>
|
||||||
|
</function>
|
||||||
</functions_list>
|
</functions_list>
|
||||||
</pins>
|
</pins>
|
||||||
<clocks name="Clocks" version="9.0" enabled="true" update_project_code="true">
|
<clocks name="Clocks" version="10.0" enabled="true" update_project_code="true">
|
||||||
<generated_project_files>
|
<generated_project_files>
|
||||||
<file path="board/clock_config.c" update_enabled="true"/>
|
<file path="board/clock_config.c" update_enabled="true"/>
|
||||||
<file path="board/clock_config.h" update_enabled="true"/>
|
<file path="board/clock_config.h" update_enabled="true"/>
|
||||||
</generated_project_files>
|
</generated_project_files>
|
||||||
<clocks_profile>
|
<clocks_profile>
|
||||||
<processor_version>11.0.1</processor_version>
|
<processor_version>12.0.0</processor_version>
|
||||||
</clocks_profile>
|
</clocks_profile>
|
||||||
<clock_configurations>
|
<clock_configurations>
|
||||||
<clock_configuration name="BOARD_BootClockFRO12M" id_prefix="" prefix_user_defined="false">
|
<clock_configuration name="BOARD_BootClockFRO12M" id_prefix="" prefix_user_defined="false">
|
||||||
|
@ -541,6 +571,16 @@
|
||||||
<data>true</data>
|
<data>true</data>
|
||||||
</feature>
|
</feature>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency resourceType="SWComponent" resourceId="platform.drivers.power" description="Clocks initialization requires the POWER Driver in the project." problem_level="2" source="Clocks:BOARD_BootClockFRO12M">
|
||||||
|
<feature name="enabled" evaluation="equal" configuration="cm33_core1">
|
||||||
|
<data>true</data>
|
||||||
|
</feature>
|
||||||
|
</dependency>
|
||||||
|
<dependency resourceType="SWComponent" resourceId="platform.drivers.power" description="Clocks initialization requires the POWER Driver in the project." problem_level="2" source="Clocks:BOARD_BootClockFRO12M">
|
||||||
|
<feature name="enabled" evaluation="equal" configuration="cm33_core0">
|
||||||
|
<data>true</data>
|
||||||
|
</feature>
|
||||||
|
</dependency>
|
||||||
<dependency resourceType="SWComponent" resourceId="platform.drivers.clock" description="Clocks initialization requires the CLOCK Driver in the project." problem_level="2" source="Clocks:BOARD_BootClockFRO12M">
|
<dependency resourceType="SWComponent" resourceId="platform.drivers.clock" description="Clocks initialization requires the CLOCK Driver in the project." problem_level="2" source="Clocks:BOARD_BootClockFRO12M">
|
||||||
<feature name="enabled" evaluation="equal" configuration="cm33_core1">
|
<feature name="enabled" evaluation="equal" configuration="cm33_core1">
|
||||||
<data>true</data>
|
<data>true</data>
|
||||||
|
@ -573,6 +613,16 @@
|
||||||
<data>true</data>
|
<data>true</data>
|
||||||
</feature>
|
</feature>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency resourceType="SWComponent" resourceId="platform.drivers.power" description="Clocks initialization requires the POWER Driver in the project." problem_level="2" source="Clocks:BOARD_BootClockFROHF96M">
|
||||||
|
<feature name="enabled" evaluation="equal" configuration="cm33_core1">
|
||||||
|
<data>true</data>
|
||||||
|
</feature>
|
||||||
|
</dependency>
|
||||||
|
<dependency resourceType="SWComponent" resourceId="platform.drivers.power" description="Clocks initialization requires the POWER Driver in the project." problem_level="2" source="Clocks:BOARD_BootClockFROHF96M">
|
||||||
|
<feature name="enabled" evaluation="equal" configuration="cm33_core0">
|
||||||
|
<data>true</data>
|
||||||
|
</feature>
|
||||||
|
</dependency>
|
||||||
<dependency resourceType="SWComponent" resourceId="platform.drivers.clock" description="Clocks initialization requires the CLOCK Driver in the project." problem_level="2" source="Clocks:BOARD_BootClockFROHF96M">
|
<dependency resourceType="SWComponent" resourceId="platform.drivers.clock" description="Clocks initialization requires the CLOCK Driver in the project." problem_level="2" source="Clocks:BOARD_BootClockFROHF96M">
|
||||||
<feature name="enabled" evaluation="equal" configuration="cm33_core1">
|
<feature name="enabled" evaluation="equal" configuration="cm33_core1">
|
||||||
<data>true</data>
|
<data>true</data>
|
||||||
|
@ -630,6 +680,16 @@
|
||||||
<data>true</data>
|
<data>true</data>
|
||||||
</feature>
|
</feature>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency resourceType="SWComponent" resourceId="platform.drivers.power" description="Clocks initialization requires the POWER Driver in the project." problem_level="2" source="Clocks:BOARD_BootClockPLL100M">
|
||||||
|
<feature name="enabled" evaluation="equal" configuration="cm33_core1">
|
||||||
|
<data>true</data>
|
||||||
|
</feature>
|
||||||
|
</dependency>
|
||||||
|
<dependency resourceType="SWComponent" resourceId="platform.drivers.power" description="Clocks initialization requires the POWER Driver in the project." problem_level="2" source="Clocks:BOARD_BootClockPLL100M">
|
||||||
|
<feature name="enabled" evaluation="equal" configuration="cm33_core0">
|
||||||
|
<data>true</data>
|
||||||
|
</feature>
|
||||||
|
</dependency>
|
||||||
<dependency resourceType="SWComponent" resourceId="platform.drivers.clock" description="Clocks initialization requires the CLOCK Driver in the project." problem_level="2" source="Clocks:BOARD_BootClockPLL100M">
|
<dependency resourceType="SWComponent" resourceId="platform.drivers.clock" description="Clocks initialization requires the CLOCK Driver in the project." problem_level="2" source="Clocks:BOARD_BootClockPLL100M">
|
||||||
<feature name="enabled" evaluation="equal" configuration="cm33_core1">
|
<feature name="enabled" evaluation="equal" configuration="cm33_core1">
|
||||||
<data>true</data>
|
<data>true</data>
|
||||||
|
@ -693,6 +753,16 @@
|
||||||
<data>true</data>
|
<data>true</data>
|
||||||
</feature>
|
</feature>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency resourceType="SWComponent" resourceId="platform.drivers.power" description="Clocks initialization requires the POWER Driver in the project." problem_level="2" source="Clocks:BOARD_BootClockPLL150M">
|
||||||
|
<feature name="enabled" evaluation="equal" configuration="cm33_core1">
|
||||||
|
<data>true</data>
|
||||||
|
</feature>
|
||||||
|
</dependency>
|
||||||
|
<dependency resourceType="SWComponent" resourceId="platform.drivers.power" description="Clocks initialization requires the POWER Driver in the project." problem_level="2" source="Clocks:BOARD_BootClockPLL150M">
|
||||||
|
<feature name="enabled" evaluation="equal" configuration="cm33_core0">
|
||||||
|
<data>true</data>
|
||||||
|
</feature>
|
||||||
|
</dependency>
|
||||||
<dependency resourceType="SWComponent" resourceId="platform.drivers.clock" description="Clocks initialization requires the CLOCK Driver in the project." problem_level="2" source="Clocks:BOARD_BootClockPLL150M">
|
<dependency resourceType="SWComponent" resourceId="platform.drivers.clock" description="Clocks initialization requires the CLOCK Driver in the project." problem_level="2" source="Clocks:BOARD_BootClockPLL150M">
|
||||||
<feature name="enabled" evaluation="equal" configuration="cm33_core1">
|
<feature name="enabled" evaluation="equal" configuration="cm33_core1">
|
||||||
<data>true</data>
|
<data>true</data>
|
||||||
|
@ -737,7 +807,7 @@
|
||||||
<file path="board/peripherals.h" update_enabled="true"/>
|
<file path="board/peripherals.h" update_enabled="true"/>
|
||||||
</generated_project_files>
|
</generated_project_files>
|
||||||
<peripherals_profile>
|
<peripherals_profile>
|
||||||
<processor_version>11.0.1</processor_version>
|
<processor_version>12.0.0</processor_version>
|
||||||
</peripherals_profile>
|
</peripherals_profile>
|
||||||
<functional_groups>
|
<functional_groups>
|
||||||
<functional_group name="BOARD_InitPeripherals_cm33_core0" uuid="61d0725d-b300-49cb-9c66-b5edfbf8ffc1" called_from_default_init="true" id_prefix="" core="cm33_core0">
|
<functional_group name="BOARD_InitPeripherals_cm33_core0" uuid="61d0725d-b300-49cb-9c66-b5edfbf8ffc1" called_from_default_init="true" id_prefix="" core="cm33_core0">
|
||||||
|
|
1
SDK
Submodule
1
SDK
Submodule
|
@ -0,0 +1 @@
|
||||||
|
Subproject commit 442622515005ffb9fd32e59d3fbd470f0f67550b
|
4
app_flash.ld
Normal file
4
app_flash.ld
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
__stack_size__ = 0x08000;
|
||||||
|
__heap_size__ = 0x20000;
|
||||||
|
|
||||||
|
INCLUDE LPC55S69_cm33_core0_flash.ld
|
|
@ -17,11 +17,11 @@
|
||||||
/* clang-format off */
|
/* clang-format off */
|
||||||
/* TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************
|
/* TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************
|
||||||
!!GlobalInfo
|
!!GlobalInfo
|
||||||
product: Clocks v9.0
|
product: Clocks v10.0
|
||||||
processor: LPC55S69
|
processor: LPC55S69
|
||||||
package_id: LPC55S69JBD100
|
package_id: LPC55S69JBD100
|
||||||
mcu_data: ksdk2_0
|
mcu_data: ksdk2_0
|
||||||
processor_version: 11.0.1
|
processor_version: 12.0.0
|
||||||
board: LPCXpresso55S69
|
board: LPCXpresso55S69
|
||||||
* BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS **********/
|
* BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS **********/
|
||||||
/* clang-format on */
|
/* clang-format on */
|
||||||
|
@ -37,8 +37,6 @@ board: LPCXpresso55S69
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* Variables
|
* Variables
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
/* System clock frequency. */
|
|
||||||
extern uint32_t SystemCoreClock;
|
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
************************ BOARD_InitBootClocks function ************************
|
************************ BOARD_InitBootClocks function ************************
|
||||||
|
|
|
@ -10,7 +10,7 @@ product: Peripherals v11.0
|
||||||
processor: LPC55S69
|
processor: LPC55S69
|
||||||
package_id: LPC55S69JBD100
|
package_id: LPC55S69JBD100
|
||||||
mcu_data: ksdk2_0
|
mcu_data: ksdk2_0
|
||||||
processor_version: 11.0.1
|
processor_version: 12.0.0
|
||||||
board: LPCXpresso55S69
|
board: LPCXpresso55S69
|
||||||
functionalGroups:
|
functionalGroups:
|
||||||
- name: BOARD_InitPeripherals_cm33_core0
|
- name: BOARD_InitPeripherals_cm33_core0
|
||||||
|
|
194
board/pin_mux.c
194
board/pin_mux.c
|
@ -7,11 +7,11 @@
|
||||||
/*
|
/*
|
||||||
* TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************
|
* TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************
|
||||||
!!GlobalInfo
|
!!GlobalInfo
|
||||||
product: Pins v11.0
|
product: Pins v12.0
|
||||||
processor: LPC55S69
|
processor: LPC55S69
|
||||||
package_id: LPC55S69JBD100
|
package_id: LPC55S69JBD100
|
||||||
mcu_data: ksdk2_0
|
mcu_data: ksdk2_0
|
||||||
processor_version: 11.0.1
|
processor_version: 12.0.0
|
||||||
board: LPCXpresso55S69
|
board: LPCXpresso55S69
|
||||||
* BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS ***********
|
* BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS ***********
|
||||||
*/
|
*/
|
||||||
|
@ -32,6 +32,7 @@ void BOARD_InitBootPins(void)
|
||||||
{
|
{
|
||||||
BOARD_InitDEBUG_UARTPins();
|
BOARD_InitDEBUG_UARTPins();
|
||||||
BOARD_InitPins_Core0();
|
BOARD_InitPins_Core0();
|
||||||
|
BOARD_InitSDPins();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* clang-format off */
|
/* clang-format off */
|
||||||
|
@ -845,6 +846,195 @@ void BOARD_InitACCELPins(void)
|
||||||
/* PORT1 PIN21 (coords: 30) is configured as FC4_RXD_SDA_MOSI_DATA */
|
/* PORT1 PIN21 (coords: 30) is configured as FC4_RXD_SDA_MOSI_DATA */
|
||||||
IOCON_PinMuxSet(IOCON, BOARD_INITACCELPINS_FC4_I2C_SDA_PORT, BOARD_INITACCELPINS_FC4_I2C_SDA_PIN, FC4_I2C_SDA);
|
IOCON_PinMuxSet(IOCON, BOARD_INITACCELPINS_FC4_I2C_SDA_PORT, BOARD_INITACCELPINS_FC4_I2C_SDA_PIN, FC4_I2C_SDA);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* clang-format off */
|
||||||
|
/*
|
||||||
|
* TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************
|
||||||
|
BOARD_InitSDPins:
|
||||||
|
- options: {callFromInitBoot: 'true', coreID: cm33_core0, enableClock: 'true'}
|
||||||
|
- pin_list:
|
||||||
|
- {pin_num: '8', peripheral: SDIF, signal: SD0_CARD_DET, pin_signal: PIO0_17/FC4_SSEL2/SD0_CARD_DET_N/SCT_GPI7/SCT0_OUT0/SD0_CARD_INT_N/PLU_IN2/SECURE_GPIO0_17}
|
||||||
|
- {pin_num: '6', peripheral: SDIF, signal: SD0_CLK, pin_signal: PIO0_7/FC3_RTS_SCL_SSEL1/SD0_CLK/FC5_SCK/FC1_SCK/SECURE_GPIO0_7}
|
||||||
|
- {pin_num: '26', peripheral: SDIF, signal: SD0_CMD, pin_signal: PIO0_8/FC3_SSEL3/SD0_CMD/FC5_RXD_SDA_MOSI_DATA/SWO/SECURE_GPIO0_8}
|
||||||
|
- {pin_num: '70', peripheral: SDIF, signal: 'SD0_D, 0', pin_signal: PIO0_24/FC0_RXD_SDA_MOSI_DATA/SD0_D0/CT_INP8/SCT_GPI0/SECURE_GPIO0_24}
|
||||||
|
- {pin_num: '79', peripheral: SDIF, signal: 'SD0_D, 1', pin_signal: PIO0_25/FC0_TXD_SCL_MISO_WS/SD0_D1/CT_INP9/SCT_GPI1/SECURE_GPIO0_25}
|
||||||
|
- {pin_num: '23', peripheral: SDIF, signal: 'SD0_D, 2', pin_signal: PIO0_31/FC0_CTS_SDA_SSEL0/SD0_D2/CTIMER0_MAT1/SCT0_OUT3/SECURE_GPIO0_31/ADC0_3}
|
||||||
|
- {pin_num: '11', peripheral: SDIF, signal: 'SD0_D, 3', pin_signal: PIO1_0/FC0_RTS_SCL_SSEL1/SD0_D3/CT_INP2/SCT_GPI4/PLU_OUT3/ADC0_11}
|
||||||
|
- {pin_num: '55', peripheral: SDIF, signal: SD0_POW_EN, pin_signal: PIO0_9/FC3_SSEL2/SD0_POW_EN/FC5_TXD_SCL_MISO_WS/SECURE_GPIO0_9/ACMP0_B}
|
||||||
|
* BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS ***********
|
||||||
|
*/
|
||||||
|
/* clang-format on */
|
||||||
|
|
||||||
|
/* FUNCTION ************************************************************************************************************
|
||||||
|
*
|
||||||
|
* Function Name : BOARD_InitSDPins
|
||||||
|
* Description : Configures pin routing and optionally pin electrical features.
|
||||||
|
*
|
||||||
|
* END ****************************************************************************************************************/
|
||||||
|
/* Function assigned for the Cortex-M33 (Core #0) */
|
||||||
|
void BOARD_InitSDPins(void)
|
||||||
|
{
|
||||||
|
/* Enables the clock for the I/O controller.: Enable Clock. */
|
||||||
|
CLOCK_EnableClock(kCLOCK_Iocon);
|
||||||
|
|
||||||
|
IOCON->PIO[0][17] = ((IOCON->PIO[0][17] &
|
||||||
|
/* Mask bits to zero which are setting */
|
||||||
|
(~(IOCON_PIO_FUNC_MASK | IOCON_PIO_DIGIMODE_MASK)))
|
||||||
|
|
||||||
|
/* Selects pin function.
|
||||||
|
* : PORT017 (pin 8) is configured as SD0_CARD_DET_N. */
|
||||||
|
| IOCON_PIO_FUNC(PIO0_17_FUNC_ALT2)
|
||||||
|
|
||||||
|
/* Select Digital mode.
|
||||||
|
* : Enable Digital mode.
|
||||||
|
* Digital input is enabled. */
|
||||||
|
| IOCON_PIO_DIGIMODE(PIO0_17_DIGIMODE_DIGITAL));
|
||||||
|
|
||||||
|
IOCON->PIO[0][24] = ((IOCON->PIO[0][24] &
|
||||||
|
/* Mask bits to zero which are setting */
|
||||||
|
(~(IOCON_PIO_FUNC_MASK | IOCON_PIO_DIGIMODE_MASK)))
|
||||||
|
|
||||||
|
/* Selects pin function.
|
||||||
|
* : PORT024 (pin 70) is configured as SD0_D0. */
|
||||||
|
| IOCON_PIO_FUNC(PIO0_24_FUNC_ALT2)
|
||||||
|
|
||||||
|
/* Select Digital mode.
|
||||||
|
* : Enable Digital mode.
|
||||||
|
* Digital input is enabled. */
|
||||||
|
| IOCON_PIO_DIGIMODE(PIO0_24_DIGIMODE_DIGITAL));
|
||||||
|
|
||||||
|
IOCON->PIO[0][25] = ((IOCON->PIO[0][25] &
|
||||||
|
/* Mask bits to zero which are setting */
|
||||||
|
(~(IOCON_PIO_FUNC_MASK | IOCON_PIO_DIGIMODE_MASK)))
|
||||||
|
|
||||||
|
/* Selects pin function.
|
||||||
|
* : PORT025 (pin 79) is configured as SD0_D1. */
|
||||||
|
| IOCON_PIO_FUNC(PIO0_25_FUNC_ALT2)
|
||||||
|
|
||||||
|
/* Select Digital mode.
|
||||||
|
* : Enable Digital mode.
|
||||||
|
* Digital input is enabled. */
|
||||||
|
| IOCON_PIO_DIGIMODE(PIO0_25_DIGIMODE_DIGITAL));
|
||||||
|
|
||||||
|
if (Chip_GetVersion()==1)
|
||||||
|
{
|
||||||
|
IOCON->PIO[0][31] = ((IOCON->PIO[0][31] &
|
||||||
|
/* Mask bits to zero which are setting */
|
||||||
|
(~(IOCON_PIO_FUNC_MASK | IOCON_PIO_DIGIMODE_MASK)))
|
||||||
|
|
||||||
|
/* Selects pin function.
|
||||||
|
* : PORT031 (pin 23) is configured as SD0_D2. */
|
||||||
|
| IOCON_PIO_FUNC(PIO0_31_FUNC_ALT2)
|
||||||
|
|
||||||
|
/* Select Digital mode.
|
||||||
|
* : Enable Digital mode.
|
||||||
|
* Digital input is enabled. */
|
||||||
|
| IOCON_PIO_DIGIMODE(PIO0_31_DIGIMODE_DIGITAL));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
IOCON->PIO[0][31] = ((IOCON->PIO[0][31] &
|
||||||
|
/* Mask bits to zero which are setting */
|
||||||
|
(~(IOCON_PIO_FUNC_MASK | IOCON_PIO_DIGIMODE_MASK)))
|
||||||
|
|
||||||
|
/* Selects pin function.
|
||||||
|
* : PORT031 (pin 23) is configured as SD0_D2. */
|
||||||
|
| IOCON_PIO_FUNC(PIO0_31_FUNC_ALT2)
|
||||||
|
|
||||||
|
/* Select Digital mode.
|
||||||
|
* : Enable Digital mode.
|
||||||
|
* Digital input is enabled. */
|
||||||
|
| IOCON_PIO_DIGIMODE(PIO0_31_DIGIMODE_DIGITAL));
|
||||||
|
}
|
||||||
|
|
||||||
|
IOCON->PIO[0][7] = ((IOCON->PIO[0][7] &
|
||||||
|
/* Mask bits to zero which are setting */
|
||||||
|
(~(IOCON_PIO_FUNC_MASK | IOCON_PIO_DIGIMODE_MASK)))
|
||||||
|
|
||||||
|
/* Selects pin function.
|
||||||
|
* : PORT07 (pin 6) is configured as SD0_CLK. */
|
||||||
|
| IOCON_PIO_FUNC(PIO0_7_FUNC_ALT2)
|
||||||
|
|
||||||
|
/* Select Digital mode.
|
||||||
|
* : Enable Digital mode.
|
||||||
|
* Digital input is enabled. */
|
||||||
|
| IOCON_PIO_DIGIMODE(PIO0_7_DIGIMODE_DIGITAL));
|
||||||
|
|
||||||
|
IOCON->PIO[0][8] = ((IOCON->PIO[0][8] &
|
||||||
|
/* Mask bits to zero which are setting */
|
||||||
|
(~(IOCON_PIO_FUNC_MASK | IOCON_PIO_DIGIMODE_MASK)))
|
||||||
|
|
||||||
|
/* Selects pin function.
|
||||||
|
* : PORT08 (pin 26) is configured as SD0_CMD. */
|
||||||
|
| IOCON_PIO_FUNC(PIO0_8_FUNC_ALT2)
|
||||||
|
|
||||||
|
/* Select Digital mode.
|
||||||
|
* : Enable Digital mode.
|
||||||
|
* Digital input is enabled. */
|
||||||
|
| IOCON_PIO_DIGIMODE(PIO0_8_DIGIMODE_DIGITAL));
|
||||||
|
|
||||||
|
if (Chip_GetVersion()==1)
|
||||||
|
{
|
||||||
|
IOCON->PIO[0][9] = ((IOCON->PIO[0][9] &
|
||||||
|
/* Mask bits to zero which are setting */
|
||||||
|
(~(IOCON_PIO_FUNC_MASK | IOCON_PIO_DIGIMODE_MASK)))
|
||||||
|
|
||||||
|
/* Selects pin function.
|
||||||
|
* : PORT09 (pin 55) is configured as SD0_POW_EN. */
|
||||||
|
| IOCON_PIO_FUNC(PIO0_9_FUNC_ALT2)
|
||||||
|
|
||||||
|
/* Select Digital mode.
|
||||||
|
* : Enable Digital mode.
|
||||||
|
* Digital input is enabled. */
|
||||||
|
| IOCON_PIO_DIGIMODE(PIO0_9_DIGIMODE_DIGITAL));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
IOCON->PIO[0][9] = ((IOCON->PIO[0][9] &
|
||||||
|
/* Mask bits to zero which are setting */
|
||||||
|
(~(IOCON_PIO_FUNC_MASK | IOCON_PIO_DIGIMODE_MASK)))
|
||||||
|
|
||||||
|
/* Selects pin function.
|
||||||
|
* : PORT09 (pin 55) is configured as SD0_POW_EN. */
|
||||||
|
| IOCON_PIO_FUNC(PIO0_9_FUNC_ALT2)
|
||||||
|
|
||||||
|
/* Select Digital mode.
|
||||||
|
* : Enable Digital mode.
|
||||||
|
* Digital input is enabled. */
|
||||||
|
| IOCON_PIO_DIGIMODE(PIO0_9_DIGIMODE_DIGITAL));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Chip_GetVersion()==1)
|
||||||
|
{
|
||||||
|
IOCON->PIO[1][0] = ((IOCON->PIO[1][0] &
|
||||||
|
/* Mask bits to zero which are setting */
|
||||||
|
(~(IOCON_PIO_FUNC_MASK | IOCON_PIO_DIGIMODE_MASK)))
|
||||||
|
|
||||||
|
/* Selects pin function.
|
||||||
|
* : PORT10 (pin 11) is configured as SD0_D3. */
|
||||||
|
| IOCON_PIO_FUNC(PIO1_0_FUNC_ALT2)
|
||||||
|
|
||||||
|
/* Select Digital mode.
|
||||||
|
* : Enable Digital mode.
|
||||||
|
* Digital input is enabled. */
|
||||||
|
| IOCON_PIO_DIGIMODE(PIO1_0_DIGIMODE_DIGITAL));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
IOCON->PIO[1][0] = ((IOCON->PIO[1][0] &
|
||||||
|
/* Mask bits to zero which are setting */
|
||||||
|
(~(IOCON_PIO_FUNC_MASK | IOCON_PIO_DIGIMODE_MASK)))
|
||||||
|
|
||||||
|
/* Selects pin function.
|
||||||
|
* : PORT10 (pin 11) is configured as SD0_D3. */
|
||||||
|
| IOCON_PIO_FUNC(PIO1_0_FUNC_ALT2)
|
||||||
|
|
||||||
|
/* Select Digital mode.
|
||||||
|
* : Enable Digital mode.
|
||||||
|
* Digital input is enabled. */
|
||||||
|
| IOCON_PIO_DIGIMODE(PIO1_0_DIGIMODE_DIGITAL));
|
||||||
|
}
|
||||||
|
}
|
||||||
/***********************************************************************************************************************
|
/***********************************************************************************************************************
|
||||||
* EOF
|
* EOF
|
||||||
**********************************************************************************************************************/
|
**********************************************************************************************************************/
|
||||||
|
|
|
@ -435,6 +435,61 @@ void BOARD_InitI2SPins(void); /* Function assigned for the Cortex-M33 (Core #0)
|
||||||
*/
|
*/
|
||||||
void BOARD_InitACCELPins(void); /* Function assigned for the Cortex-M33 (Core #0) */
|
void BOARD_InitACCELPins(void); /* Function assigned for the Cortex-M33 (Core #0) */
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief Select Digital mode.: Enable Digital mode. Digital input is enabled. */
|
||||||
|
#define PIO0_17_DIGIMODE_DIGITAL 0x01u
|
||||||
|
/*!
|
||||||
|
* @brief Selects pin function.: Alternative connection 2. */
|
||||||
|
#define PIO0_17_FUNC_ALT2 0x02u
|
||||||
|
/*!
|
||||||
|
* @brief Select Digital mode.: Enable Digital mode. Digital input is enabled. */
|
||||||
|
#define PIO0_24_DIGIMODE_DIGITAL 0x01u
|
||||||
|
/*!
|
||||||
|
* @brief Selects pin function.: Alternative connection 2. */
|
||||||
|
#define PIO0_24_FUNC_ALT2 0x02u
|
||||||
|
/*!
|
||||||
|
* @brief Select Digital mode.: Enable Digital mode. Digital input is enabled. */
|
||||||
|
#define PIO0_25_DIGIMODE_DIGITAL 0x01u
|
||||||
|
/*!
|
||||||
|
* @brief Selects pin function.: Alternative connection 2. */
|
||||||
|
#define PIO0_25_FUNC_ALT2 0x02u
|
||||||
|
/*!
|
||||||
|
* @brief Select Digital mode.: Enable Digital mode. Digital input is enabled. */
|
||||||
|
#define PIO0_31_DIGIMODE_DIGITAL 0x01u
|
||||||
|
/*!
|
||||||
|
* @brief Selects pin function.: Alternative connection 2. */
|
||||||
|
#define PIO0_31_FUNC_ALT2 0x02u
|
||||||
|
/*!
|
||||||
|
* @brief Select Digital mode.: Enable Digital mode. Digital input is enabled. */
|
||||||
|
#define PIO0_7_DIGIMODE_DIGITAL 0x01u
|
||||||
|
/*!
|
||||||
|
* @brief Selects pin function.: Alternative connection 2. */
|
||||||
|
#define PIO0_7_FUNC_ALT2 0x02u
|
||||||
|
/*!
|
||||||
|
* @brief Select Digital mode.: Enable Digital mode. Digital input is enabled. */
|
||||||
|
#define PIO0_8_DIGIMODE_DIGITAL 0x01u
|
||||||
|
/*!
|
||||||
|
* @brief Selects pin function.: Alternative connection 2. */
|
||||||
|
#define PIO0_8_FUNC_ALT2 0x02u
|
||||||
|
/*!
|
||||||
|
* @brief Select Digital mode.: Enable Digital mode. Digital input is enabled. */
|
||||||
|
#define PIO0_9_DIGIMODE_DIGITAL 0x01u
|
||||||
|
/*!
|
||||||
|
* @brief Selects pin function.: Alternative connection 2. */
|
||||||
|
#define PIO0_9_FUNC_ALT2 0x02u
|
||||||
|
/*!
|
||||||
|
* @brief Select Digital mode.: Enable Digital mode. Digital input is enabled. */
|
||||||
|
#define PIO1_0_DIGIMODE_DIGITAL 0x01u
|
||||||
|
/*!
|
||||||
|
* @brief Selects pin function.: Alternative connection 2. */
|
||||||
|
#define PIO1_0_FUNC_ALT2 0x02u
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief Configures pin routing and optionally pin electrical features.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
void BOARD_InitSDPins(void); /* Function assigned for the Cortex-M33 (Core #0) */
|
||||||
|
|
||||||
#if defined(__cplusplus)
|
#if defined(__cplusplus)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
69
board/sdmmc_config.c
Normal file
69
board/sdmmc_config.c
Normal file
|
@ -0,0 +1,69 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2020 NXP
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: BSD-3-Clause
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "sdmmc_config.h"
|
||||||
|
#include "fsl_iocon.h"
|
||||||
|
/*******************************************************************************
|
||||||
|
* Definitions
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* Prototypes
|
||||||
|
******************************************************************************/
|
||||||
|
/*******************************************************************************
|
||||||
|
* Variables
|
||||||
|
******************************************************************************/
|
||||||
|
/*!brief sdmmc dma buffer */
|
||||||
|
SDK_ALIGN(static uint32_t s_sdmmcHostDmaBuffer[BOARD_SDMMC_HOST_DMA_DESCRIPTOR_BUFFER_SIZE],
|
||||||
|
SDMMCHOST_DMA_DESCRIPTOR_BUFFER_ALIGN_SIZE);
|
||||||
|
#if defined(SDIO_ENABLED) || defined(SD_ENABLED)
|
||||||
|
static sd_detect_card_t s_cd;
|
||||||
|
#endif
|
||||||
|
static sdmmchost_t s_host;
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* Code
|
||||||
|
******************************************************************************/
|
||||||
|
uint32_t BOARD_SDIF0ClockConfiguration(void)
|
||||||
|
{
|
||||||
|
/* attach main clock to SDIF */
|
||||||
|
CLOCK_AttachClk(kMAIN_CLK_to_SDIO_CLK);
|
||||||
|
/* need call this function to clear the halt bit in clock divider register */
|
||||||
|
CLOCK_SetClkDiv(kCLOCK_DivSdioClk, (uint32_t)(SystemCoreClock / FSL_FEATURE_SDIF_MAX_SOURCE_CLOCK + 1U), true);
|
||||||
|
|
||||||
|
return CLOCK_GetSdioClkFreq();
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined(SDIO_ENABLED) || defined(SD_ENABLED)
|
||||||
|
void BOARD_SDCardDetectInit(sd_cd_t cd, void *userData)
|
||||||
|
{
|
||||||
|
/* install card detect callback */
|
||||||
|
s_cd.cdDebounce_ms = BOARD_SDMMC_SD_CARD_DETECT_DEBOUNCE_DELAY_MS;
|
||||||
|
s_cd.type = BOARD_SDMMC_SD_CD_TYPE;
|
||||||
|
s_cd.callback = cd;
|
||||||
|
s_cd.userData = userData;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef SD_ENABLED
|
||||||
|
void BOARD_SD_Config(void *card, sd_cd_t cd, uint32_t hostIRQPriority, void *userData)
|
||||||
|
{
|
||||||
|
assert(card);
|
||||||
|
|
||||||
|
s_host.dmaDesBuffer = s_sdmmcHostDmaBuffer;
|
||||||
|
s_host.dmaDesBufferWordsNum = BOARD_SDMMC_HOST_DMA_DESCRIPTOR_BUFFER_SIZE;
|
||||||
|
((sd_card_t *)card)->host = &s_host;
|
||||||
|
((sd_card_t *)card)->host->hostController.base = BOARD_SDMMC_SD_HOST_BASEADDR;
|
||||||
|
((sd_card_t *)card)->host->hostController.sourceClock_Hz = BOARD_SDIF0ClockConfiguration();
|
||||||
|
|
||||||
|
((sd_card_t *)card)->usrParam.cd = &s_cd;
|
||||||
|
|
||||||
|
BOARD_SDCardDetectInit(cd, userData);
|
||||||
|
|
||||||
|
NVIC_SetPriority(BOARD_SDMMC_SD_HOST_IRQ, hostIRQPriority);
|
||||||
|
}
|
||||||
|
#endif
|
61
board/sdmmc_config.h
Normal file
61
board/sdmmc_config.h
Normal file
|
@ -0,0 +1,61 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2020-2022 NXP
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: BSD-3-Clause
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _SDMMC_CONFIG_H_
|
||||||
|
#define _SDMMC_CONFIG_H_
|
||||||
|
|
||||||
|
#ifdef SD_ENABLED
|
||||||
|
#include "fsl_sd.h"
|
||||||
|
#endif
|
||||||
|
#ifdef MMC_ENABLED
|
||||||
|
#include "fsl_mmc.h"
|
||||||
|
#endif
|
||||||
|
#include "clock_config.h"
|
||||||
|
#include "fsl_sdmmc_host.h"
|
||||||
|
#include "fsl_sdmmc_common.h"
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* Definitions
|
||||||
|
******************************************************************************/
|
||||||
|
/* @brief host basic configuration */
|
||||||
|
#define BOARD_SDMMC_SD_HOST_BASEADDR SDIF
|
||||||
|
#define BOARD_SDMMC_SD_HOST_IRQ SDIO_IRQn
|
||||||
|
|
||||||
|
/* @brief card detect configuration */
|
||||||
|
#define BOARD_SDMMC_SD_CD_TYPE kSD_DetectCardByHostCD
|
||||||
|
#define BOARD_SDMMC_SD_CARD_DETECT_DEBOUNCE_DELAY_MS (100U)
|
||||||
|
|
||||||
|
#define BOARD_SDMMC_DATA_BUFFER_ALIGN_SIZE (4U)
|
||||||
|
|
||||||
|
/*!@ brief host interrupt priority*/
|
||||||
|
#define BOARD_SDMMC_SD_HOST_IRQ_PRIORITY (5U)
|
||||||
|
#define BOARD_SDMMC_MMC_HOST_IRQ_PRIORITY (5U)
|
||||||
|
/*!@brief dma descriptor buffer size */
|
||||||
|
#define BOARD_SDMMC_HOST_DMA_DESCRIPTOR_BUFFER_SIZE (0x40U)
|
||||||
|
|
||||||
|
#if defined(__cplusplus)
|
||||||
|
extern "C" {
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* API
|
||||||
|
******************************************************************************/
|
||||||
|
/*!
|
||||||
|
* @brief BOARD SD configurations.
|
||||||
|
* @param card card descriptor
|
||||||
|
* @param cd card detect callback
|
||||||
|
* @param userData user data for callback
|
||||||
|
*/
|
||||||
|
#ifdef SD_ENABLED
|
||||||
|
void BOARD_SD_Config(void *card, sd_cd_t cd, uint32_t hostIRQPriority, void *userData);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__cplusplus)
|
||||||
|
}
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
#endif /* _BOARD_H_ */
|
25
include/app_flac_callbacks.h
Normal file
25
include/app_flac_callbacks.h
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
#ifndef APP_FLAC_CALLBACKS_H
|
||||||
|
#define APP_FLAC_CALLBACKS_H
|
||||||
|
|
||||||
|
#include "FLAC/stream_decoder.h"
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
FIL fd;
|
||||||
|
} app_flac_client_t;
|
||||||
|
|
||||||
|
int app_flac_init(app_flac_client_t *client, const char *filename);
|
||||||
|
FLAC__StreamDecoderReadStatus app_flac_read(const FLAC__StreamDecoder *decoder, FLAC__byte buffer[], size_t *bytes,
|
||||||
|
void *client_data);
|
||||||
|
FLAC__StreamDecoderSeekStatus app_flac_seek(const FLAC__StreamDecoder *decoder, FLAC__uint64 absolute_byte_offset,
|
||||||
|
void *client_data);
|
||||||
|
FLAC__StreamDecoderTellStatus app_flac_tell(const FLAC__StreamDecoder *decoder, FLAC__uint64 *absolute_byte_offset,
|
||||||
|
void *client_data);
|
||||||
|
FLAC__StreamDecoderLengthStatus app_flac_length(const FLAC__StreamDecoder *decoder, FLAC__uint64 *stream_length,
|
||||||
|
void *client_data);
|
||||||
|
FLAC__bool app_flac_eof(const FLAC__StreamDecoder *decoder, void *client_data);
|
||||||
|
FLAC__StreamDecoderWriteStatus app_flac_write(const FLAC__StreamDecoder *decoder, const FLAC__Frame *frame,
|
||||||
|
const FLAC__int32 *const buffer[], void *client_data);
|
||||||
|
void app_flac_meta(const FLAC__StreamDecoder *decoder, const FLAC__StreamMetadata *metadata, void *client_data);
|
||||||
|
void app_flac_error(const FLAC__StreamDecoder *decoder, FLAC__StreamDecoderErrorStatus status, void *client_data);
|
||||||
|
|
||||||
|
#endif
|
311
include/ffconf.h
Normal file
311
include/ffconf.h
Normal file
|
@ -0,0 +1,311 @@
|
||||||
|
#ifndef _FFCONF_H_
|
||||||
|
#define _FFCONF_H_
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------/
|
||||||
|
/ FatFs Functional Configurations
|
||||||
|
/---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#define FFCONF_DEF 86631 /* Revision ID */
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------/
|
||||||
|
/ MSDK adaptation configuration
|
||||||
|
/---------------------------------------------------------------------------*/
|
||||||
|
#define SD_DISK_ENABLE
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------/
|
||||||
|
/ Function Configurations
|
||||||
|
/---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#define FF_FS_READONLY 0
|
||||||
|
/* This option switches read-only configuration. (0:Read/Write or 1:Read-only)
|
||||||
|
/ Read-only configuration removes writing API functions, f_write(), f_sync(),
|
||||||
|
/ f_unlink(), f_mkdir(), f_chmod(), f_rename(), f_truncate(), f_getfree()
|
||||||
|
/ and optional writing functions as well. */
|
||||||
|
|
||||||
|
|
||||||
|
#define FF_FS_MINIMIZE 0
|
||||||
|
/* This option defines minimization level to remove some basic API functions.
|
||||||
|
/
|
||||||
|
/ 0: Basic functions are fully enabled.
|
||||||
|
/ 1: f_stat(), f_getfree(), f_unlink(), f_mkdir(), f_truncate() and f_rename()
|
||||||
|
/ are removed.
|
||||||
|
/ 2: f_opendir(), f_readdir() and f_closedir() are removed in addition to 1.
|
||||||
|
/ 3: f_lseek() function is removed in addition to 2. */
|
||||||
|
|
||||||
|
|
||||||
|
#define FF_USE_FIND 0
|
||||||
|
/* This option switches filtered directory read functions, f_findfirst() and
|
||||||
|
/ f_findnext(). (0:Disable, 1:Enable 2:Enable with matching altname[] too) */
|
||||||
|
|
||||||
|
|
||||||
|
#define FF_USE_MKFS 1
|
||||||
|
/* This option switches f_mkfs() function. (0:Disable or 1:Enable) */
|
||||||
|
|
||||||
|
|
||||||
|
#define FF_USE_FASTSEEK 0
|
||||||
|
/* This option switches fast seek function. (0:Disable or 1:Enable) */
|
||||||
|
|
||||||
|
|
||||||
|
#define FF_USE_EXPAND 0
|
||||||
|
/* This option switches f_expand function. (0:Disable or 1:Enable) */
|
||||||
|
|
||||||
|
|
||||||
|
#define FF_USE_CHMOD 0
|
||||||
|
/* This option switches attribute manipulation functions, f_chmod() and f_utime().
|
||||||
|
/ (0:Disable or 1:Enable) Also FF_FS_READONLY needs to be 0 to enable this option. */
|
||||||
|
|
||||||
|
|
||||||
|
#define FF_USE_LABEL 0
|
||||||
|
/* This option switches volume label functions, f_getlabel() and f_setlabel().
|
||||||
|
/ (0:Disable or 1:Enable) */
|
||||||
|
|
||||||
|
|
||||||
|
#define FF_USE_FORWARD 0
|
||||||
|
/* This option switches f_forward() function. (0:Disable or 1:Enable) */
|
||||||
|
|
||||||
|
|
||||||
|
#define FF_USE_STRFUNC 1
|
||||||
|
#define FF_PRINT_LLI 0
|
||||||
|
#define FF_PRINT_FLOAT 0
|
||||||
|
#define FF_STRF_ENCODE 3
|
||||||
|
/* FF_USE_STRFUNC switches string functions, f_gets(), f_putc(), f_puts() and
|
||||||
|
/ f_printf().
|
||||||
|
/
|
||||||
|
/ 0: Disable. FF_PRINT_LLI, FF_PRINT_FLOAT and FF_STRF_ENCODE have no effect.
|
||||||
|
/ 1: Enable without LF-CRLF conversion.
|
||||||
|
/ 2: Enable with LF-CRLF conversion.
|
||||||
|
/
|
||||||
|
/ FF_PRINT_LLI = 1 makes f_printf() support long long argument and FF_PRINT_FLOAT = 1/2
|
||||||
|
makes f_printf() support floating point argument. These features want C99 or later.
|
||||||
|
/ When FF_LFN_UNICODE >= 1 with LFN enabled, string functions convert the character
|
||||||
|
/ encoding in it. FF_STRF_ENCODE selects assumption of character encoding ON THE FILE
|
||||||
|
/ to be read/written via those functions.
|
||||||
|
/
|
||||||
|
/ 0: ANSI/OEM in current CP
|
||||||
|
/ 1: Unicode in UTF-16LE
|
||||||
|
/ 2: Unicode in UTF-16BE
|
||||||
|
/ 3: Unicode in UTF-8
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------/
|
||||||
|
/ Locale and Namespace Configurations
|
||||||
|
/---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#define FF_CODE_PAGE 932
|
||||||
|
/* This option specifies the OEM code page to be used on the target system.
|
||||||
|
/ Incorrect code page setting can cause a file open failure.
|
||||||
|
/
|
||||||
|
/ 437 - U.S.
|
||||||
|
/ 720 - Arabic
|
||||||
|
/ 737 - Greek
|
||||||
|
/ 771 - KBL
|
||||||
|
/ 775 - Baltic
|
||||||
|
/ 850 - Latin 1
|
||||||
|
/ 852 - Latin 2
|
||||||
|
/ 855 - Cyrillic
|
||||||
|
/ 857 - Turkish
|
||||||
|
/ 860 - Portuguese
|
||||||
|
/ 861 - Icelandic
|
||||||
|
/ 862 - Hebrew
|
||||||
|
/ 863 - Canadian French
|
||||||
|
/ 864 - Arabic
|
||||||
|
/ 865 - Nordic
|
||||||
|
/ 866 - Russian
|
||||||
|
/ 869 - Greek 2
|
||||||
|
/ 932 - Japanese (DBCS)
|
||||||
|
/ 936 - Simplified Chinese (DBCS)
|
||||||
|
/ 949 - Korean (DBCS)
|
||||||
|
/ 950 - Traditional Chinese (DBCS)
|
||||||
|
/ 0 - Include all code pages above and configured by f_setcp()
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#define FF_USE_LFN 2
|
||||||
|
#define FF_MAX_LFN 255
|
||||||
|
/* The FF_USE_LFN switches the support for LFN (long file name).
|
||||||
|
/
|
||||||
|
/ 0: Disable LFN. FF_MAX_LFN has no effect.
|
||||||
|
/ 1: Enable LFN with static working buffer on the BSS. Always NOT thread-safe.
|
||||||
|
/ 2: Enable LFN with dynamic working buffer on the STACK.
|
||||||
|
/ 3: Enable LFN with dynamic working buffer on the HEAP.
|
||||||
|
/
|
||||||
|
/ To enable the LFN, ffunicode.c needs to be added to the project. The LFN function
|
||||||
|
/ requiers certain internal working buffer occupies (FF_MAX_LFN + 1) * 2 bytes and
|
||||||
|
/ additional (FF_MAX_LFN + 44) / 15 * 32 bytes when exFAT is enabled.
|
||||||
|
/ The FF_MAX_LFN defines size of the working buffer in UTF-16 code unit and it can
|
||||||
|
/ be in range of 12 to 255. It is recommended to be set it 255 to fully support LFN
|
||||||
|
/ specification.
|
||||||
|
/ When use stack for the working buffer, take care on stack overflow. When use heap
|
||||||
|
/ memory for the working buffer, memory management functions, ff_memalloc() and
|
||||||
|
/ ff_memfree() exemplified in ffsystem.c, need to be added to the project. */
|
||||||
|
|
||||||
|
|
||||||
|
#define FF_LFN_UNICODE 0
|
||||||
|
/* This option switches the character encoding on the API when LFN is enabled.
|
||||||
|
/
|
||||||
|
/ 0: ANSI/OEM in current CP (TCHAR = char)
|
||||||
|
/ 1: Unicode in UTF-16 (TCHAR = WCHAR)
|
||||||
|
/ 2: Unicode in UTF-8 (TCHAR = char)
|
||||||
|
/ 3: Unicode in UTF-32 (TCHAR = DWORD)
|
||||||
|
/
|
||||||
|
/ Also behavior of string I/O functions will be affected by this option.
|
||||||
|
/ When LFN is not enabled, this option has no effect. */
|
||||||
|
|
||||||
|
|
||||||
|
#define FF_LFN_BUF 255
|
||||||
|
#define FF_SFN_BUF 12
|
||||||
|
/* This set of options defines size of file name members in the FILINFO structure
|
||||||
|
/ which is used to read out directory items. These values should be suffcient for
|
||||||
|
/ the file names to read. The maximum possible length of the read file name depends
|
||||||
|
/ on character encoding. When LFN is not enabled, these options have no effect. */
|
||||||
|
|
||||||
|
|
||||||
|
#define FF_FS_RPATH 2
|
||||||
|
/* This option configures support for relative path.
|
||||||
|
/
|
||||||
|
/ 0: Disable relative path and remove related functions.
|
||||||
|
/ 1: Enable relative path. f_chdir() and f_chdrive() are available.
|
||||||
|
/ 2: f_getcwd() function is available in addition to 1.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------/
|
||||||
|
/ Drive/Volume Configurations
|
||||||
|
/---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#define FF_VOLUMES 3
|
||||||
|
/* Number of volumes (logical drives) to be used. (1-10) */
|
||||||
|
|
||||||
|
|
||||||
|
#define FF_STR_VOLUME_ID 0
|
||||||
|
#define FF_VOLUME_STRS "RAM","NAND","CF","SD","SD2","USB","USB2","USB3"
|
||||||
|
/* FF_STR_VOLUME_ID switches support for volume ID in arbitrary strings.
|
||||||
|
/ When FF_STR_VOLUME_ID is set to 1 or 2, arbitrary strings can be used as drive
|
||||||
|
/ number in the path name. FF_VOLUME_STRS defines the volume ID strings for each
|
||||||
|
/ logical drives. Number of items must not be less than FF_VOLUMES. Valid
|
||||||
|
/ characters for the volume ID strings are A-Z, a-z and 0-9, however, they are
|
||||||
|
/ compared in case-insensitive. If FF_STR_VOLUME_ID >= 1 and FF_VOLUME_STRS is
|
||||||
|
/ not defined, a user defined volume string table needs to be defined as:
|
||||||
|
/
|
||||||
|
/ const char* VolumeStr[FF_VOLUMES] = {"ram","flash","sd","usb",...
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#define FF_MULTI_PARTITION 0
|
||||||
|
/* This option switches support for multiple volumes on the physical drive.
|
||||||
|
/ By default (0), each logical drive number is bound to the same physical drive
|
||||||
|
/ number and only an FAT volume found on the physical drive will be mounted.
|
||||||
|
/ When this function is enabled (1), each logical drive number can be bound to
|
||||||
|
/ arbitrary physical drive and partition listed in the VolToPart[]. Also f_fdisk()
|
||||||
|
/ funciton will be available. */
|
||||||
|
|
||||||
|
|
||||||
|
#define FF_MIN_SS 512
|
||||||
|
#define FF_MAX_SS 512
|
||||||
|
/* This set of options configures the range of sector size to be supported. (512,
|
||||||
|
/ 1024, 2048 or 4096) Always set both 512 for most systems, generic memory card and
|
||||||
|
/ harddisk, but a larger value may be required for on-board flash memory and some
|
||||||
|
/ type of optical media. When FF_MAX_SS is larger than FF_MIN_SS, FatFs is configured
|
||||||
|
/ for variable sector size mode and disk_ioctl() function needs to implement
|
||||||
|
/ GET_SECTOR_SIZE command. */
|
||||||
|
|
||||||
|
|
||||||
|
#define FF_LBA64 0
|
||||||
|
/* This option switches support for 64-bit LBA. (0:Disable or 1:Enable)
|
||||||
|
/ To enable the 64-bit LBA, also exFAT needs to be enabled. (FF_FS_EXFAT == 1) */
|
||||||
|
|
||||||
|
|
||||||
|
#define FF_MIN_GPT 0x10000000
|
||||||
|
/* Minimum number of sectors to switch GPT as partitioning format in f_mkfs and
|
||||||
|
/ f_fdisk function. 0x100000000 max. This option has no effect when FF_LBA64 == 0. */
|
||||||
|
|
||||||
|
|
||||||
|
#define FF_USE_TRIM 0
|
||||||
|
/* This option switches support for ATA-TRIM. (0:Disable or 1:Enable)
|
||||||
|
/ To enable Trim function, also CTRL_TRIM command should be implemented to the
|
||||||
|
/ disk_ioctl() function. */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------/
|
||||||
|
/ System Configurations
|
||||||
|
/---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#define FF_FS_TINY 0
|
||||||
|
/* This option switches tiny buffer configuration. (0:Normal or 1:Tiny)
|
||||||
|
/ At the tiny configuration, size of file object (FIL) is shrinked FF_MAX_SS bytes.
|
||||||
|
/ Instead of private sector buffer eliminated from the file object, common sector
|
||||||
|
/ buffer in the filesystem object (FATFS) is used for the file data transfer. */
|
||||||
|
|
||||||
|
|
||||||
|
#define FF_FS_EXFAT 1
|
||||||
|
/* This option switches support for exFAT filesystem. (0:Disable or 1:Enable)
|
||||||
|
/ To enable exFAT, also LFN needs to be enabled. (FF_USE_LFN >= 1)
|
||||||
|
/ Note that enabling exFAT discards ANSI C (C89) compatibility. */
|
||||||
|
|
||||||
|
|
||||||
|
#define FF_FS_NORTC 1
|
||||||
|
#define FF_NORTC_MON 1
|
||||||
|
#define FF_NORTC_MDAY 1
|
||||||
|
#define FF_NORTC_YEAR 2021
|
||||||
|
/* The option FF_FS_NORTC switches timestamp functiton. If the system does not have
|
||||||
|
/ any RTC function or valid timestamp is not needed, set FF_FS_NORTC = 1 to disable
|
||||||
|
/ the timestamp function. Every object modified by FatFs will have a fixed timestamp
|
||||||
|
/ defined by FF_NORTC_MON, FF_NORTC_MDAY and FF_NORTC_YEAR in local time.
|
||||||
|
/ To enable timestamp function (FF_FS_NORTC = 0), get_fattime() function need to be
|
||||||
|
/ added to the project to read current time form real-time clock. FF_NORTC_MON,
|
||||||
|
/ FF_NORTC_MDAY and FF_NORTC_YEAR have no effect.
|
||||||
|
/ These options have no effect in read-only configuration (FF_FS_READONLY = 1). */
|
||||||
|
|
||||||
|
|
||||||
|
#define FF_FS_NOFSINFO 0
|
||||||
|
/* If you need to know correct free space on the FAT32 volume, set bit 0 of this
|
||||||
|
/ option, and f_getfree() function at first time after volume mount will force
|
||||||
|
/ a full FAT scan. Bit 1 controls the use of last allocated cluster number.
|
||||||
|
/
|
||||||
|
/ bit0=0: Use free cluster count in the FSINFO if available.
|
||||||
|
/ bit0=1: Do not trust free cluster count in the FSINFO.
|
||||||
|
/ bit1=0: Use last allocated cluster number in the FSINFO if available.
|
||||||
|
/ bit1=1: Do not trust last allocated cluster number in the FSINFO.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#define FF_FS_LOCK 0
|
||||||
|
/* The option FF_FS_LOCK switches file lock function to control duplicated file open
|
||||||
|
/ and illegal operation to open objects. This option must be 0 when FF_FS_READONLY
|
||||||
|
/ is 1.
|
||||||
|
/
|
||||||
|
/ 0: Disable file lock function. To avoid volume corruption, application program
|
||||||
|
/ should avoid illegal open, remove and rename to the open objects.
|
||||||
|
/ >0: Enable file lock function. The value defines how many files/sub-directories
|
||||||
|
/ can be opened simultaneously under file lock control. Note that the file
|
||||||
|
/ lock control is independent of re-entrancy. */
|
||||||
|
|
||||||
|
|
||||||
|
/* #include <somertos.h> // O/S definitions */
|
||||||
|
#define FF_FS_REENTRANT 0
|
||||||
|
#define FF_FS_TIMEOUT 1000
|
||||||
|
#define FF_SYNC_t HANDLE
|
||||||
|
/* The option FF_FS_REENTRANT switches the re-entrancy (thread safe) of the FatFs
|
||||||
|
/ module itself. Note that regardless of this option, file access to different
|
||||||
|
/ volume is always re-entrant and volume control functions, f_mount(), f_mkfs()
|
||||||
|
/ and f_fdisk() function, are always not re-entrant. Only file/directory access
|
||||||
|
/ to the same volume is under control of this function.
|
||||||
|
/
|
||||||
|
/ 0: Disable re-entrancy. FF_FS_TIMEOUT and FF_SYNC_t have no effect.
|
||||||
|
/ 1: Enable re-entrancy. Also user provided synchronization handlers,
|
||||||
|
/ ff_req_grant(), ff_rel_grant(), ff_del_syncobj() and ff_cre_syncobj()
|
||||||
|
/ function, must be added to the project. Samples are available in
|
||||||
|
/ option/syscall.c.
|
||||||
|
/
|
||||||
|
/ The FF_FS_TIMEOUT defines timeout period in unit of time tick.
|
||||||
|
/ The FF_SYNC_t defines O/S dependent sync object type. e.g. HANDLE, ID, OS_EVENT*,
|
||||||
|
/ SemaphoreHandle_t and etc. A header file for O/S definitions needs to be
|
||||||
|
/ included somewhere in the scope of ff.h. */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*--- End of configuration options ---*/
|
||||||
|
|
||||||
|
#endif /* _FFCONF_H_ */
|
1
lib/flac
Submodule
1
lib/flac
Submodule
|
@ -0,0 +1 @@
|
||||||
|
Subproject commit 5d1402eae30b2daeeb40ecfb8892a98690850829
|
109
src/app_flac_callbacks.c
Normal file
109
src/app_flac_callbacks.c
Normal file
|
@ -0,0 +1,109 @@
|
||||||
|
#include "fsl_debug_console.h"
|
||||||
|
|
||||||
|
/* FS */
|
||||||
|
/* clang-format off */
|
||||||
|
#include "ff.h"
|
||||||
|
#include "diskio.h"
|
||||||
|
#include "fsl_debug_console.h"
|
||||||
|
#include "fsl_sd.h"
|
||||||
|
#include "fsl_sd_disk.h"
|
||||||
|
#include "sdmmc_config.h"
|
||||||
|
/* clang-format on */
|
||||||
|
|
||||||
|
#include "app_flac_callbacks.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initialize client data, while opening the file.
|
||||||
|
* @param client Pointer to the client struct
|
||||||
|
* @param filename File name to be opened
|
||||||
|
* @return 0 for success, negative for error.
|
||||||
|
*/
|
||||||
|
int app_flac_init(app_flac_client_t *client, const char *filename) {
|
||||||
|
if (f_open(&client->fd, filename, FA_READ) != FR_OK) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
FLAC__StreamDecoderReadStatus app_flac_read(const FLAC__StreamDecoder *decoder, FLAC__byte buffer[], size_t *bytes,
|
||||||
|
void *client_data) {
|
||||||
|
app_flac_client_t *client = client_data;
|
||||||
|
|
||||||
|
if (*bytes > 0) {
|
||||||
|
if (f_read(&client->fd, buffer, *bytes, bytes) != FR_OK) {
|
||||||
|
/* Unexpected error */
|
||||||
|
return FLAC__STREAM_DECODER_READ_STATUS_ABORT;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (*bytes == 0) {
|
||||||
|
/* EOF reached */
|
||||||
|
return FLAC__STREAM_DECODER_READ_STATUS_END_OF_STREAM;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* More data available */
|
||||||
|
return FLAC__STREAM_DECODER_READ_STATUS_CONTINUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return FLAC__STREAM_DECODER_READ_STATUS_ABORT;
|
||||||
|
}
|
||||||
|
|
||||||
|
FLAC__StreamDecoderSeekStatus app_flac_seek(const FLAC__StreamDecoder *decoder, FLAC__uint64 absolute_byte_offset,
|
||||||
|
void *client_data) {
|
||||||
|
app_flac_client_t *client = client_data;
|
||||||
|
|
||||||
|
if (f_lseek(&client->fd, (FSIZE_t)absolute_byte_offset) != FR_OK) {
|
||||||
|
return FLAC__STREAM_DECODER_SEEK_STATUS_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
return FLAC__STREAM_DECODER_SEEK_STATUS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
FLAC__StreamDecoderTellStatus app_flac_tell(const FLAC__StreamDecoder *decoder, FLAC__uint64 *absolute_byte_offset,
|
||||||
|
void *client_data) {
|
||||||
|
app_flac_client_t *client = client_data;
|
||||||
|
|
||||||
|
*absolute_byte_offset = (FLAC__uint64)f_tell(&client->fd);
|
||||||
|
|
||||||
|
return FLAC__STREAM_DECODER_TELL_STATUS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
FLAC__StreamDecoderLengthStatus app_flac_length(const FLAC__StreamDecoder *decoder, FLAC__uint64 *stream_length,
|
||||||
|
void *client_data) {
|
||||||
|
app_flac_client_t *client = client_data;
|
||||||
|
|
||||||
|
*stream_length = (FLAC__uint64)f_size(&client->fd);
|
||||||
|
|
||||||
|
return FLAC__STREAM_DECODER_LENGTH_STATUS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
FLAC__bool app_flac_eof(const FLAC__StreamDecoder *decoder, void *client_data) {
|
||||||
|
app_flac_client_t *client = client_data;
|
||||||
|
|
||||||
|
if (f_eof(&client->fd)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
FLAC__StreamDecoderWriteStatus app_flac_write(const FLAC__StreamDecoder *decoder, const FLAC__Frame *frame,
|
||||||
|
const FLAC__int32 *const buffer[], void *client_data) {
|
||||||
|
app_flac_client_t *client = client_data;
|
||||||
|
|
||||||
|
PRINTF("FP: %p, Decoded FLAC block size: %d\r\n", &client->fd, frame->header.blocksize);
|
||||||
|
|
||||||
|
return FLAC__STREAM_DECODER_WRITE_STATUS_CONTINUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
void app_flac_meta(const FLAC__StreamDecoder *decoder, const FLAC__StreamMetadata *metadata, void *client_data) {
|
||||||
|
app_flac_client_t *client = client_data;
|
||||||
|
|
||||||
|
PRINTF("FP: %p, meta type: %d\r\n", &client->fd, metadata->type);
|
||||||
|
}
|
||||||
|
|
||||||
|
void app_flac_error(const FLAC__StreamDecoder *decoder, FLAC__StreamDecoderErrorStatus status, void *client_data) {
|
||||||
|
app_flac_client_t *client = client_data;
|
||||||
|
|
||||||
|
PRINTF("FP: %p, error: %d.\r\n", client, status);
|
||||||
|
}
|
95
src/main.c
95
src/main.c
|
@ -3,18 +3,109 @@
|
||||||
#include "peripherals.h"
|
#include "peripherals.h"
|
||||||
#include "pin_mux.h"
|
#include "pin_mux.h"
|
||||||
|
|
||||||
|
/* FS */
|
||||||
|
/* clang-format off */
|
||||||
|
#include "ff.h"
|
||||||
|
#include "diskio.h"
|
||||||
#include "fsl_debug_console.h"
|
#include "fsl_debug_console.h"
|
||||||
|
#include "fsl_sd.h"
|
||||||
|
#include "fsl_sd_disk.h"
|
||||||
|
#include "sdmmc_config.h"
|
||||||
|
/* clang-format on */
|
||||||
|
|
||||||
|
#include "app_flac_callbacks.h"
|
||||||
|
|
||||||
|
#define FLAC_FILE_NAME "2:/re_tryment.flac"
|
||||||
|
|
||||||
|
static FATFS s_fs;
|
||||||
|
static const TCHAR s_drive_num[] = {SDDISK + '0', ':', '/'};
|
||||||
|
|
||||||
|
static status_t sdcardWaitCardInsert(void);
|
||||||
|
|
||||||
int main(void) {
|
int main(void) {
|
||||||
BOARD_InitBootPins();
|
BOARD_InitBootPins();
|
||||||
BOARD_BootClockFROHF96M();
|
BOARD_InitBootClocks();
|
||||||
BOARD_InitBootPeripherals();
|
BOARD_InitBootPeripherals();
|
||||||
|
|
||||||
BOARD_InitDebugConsole();
|
BOARD_InitDebugConsole();
|
||||||
|
|
||||||
PRINTF("Hello world!!\r\n");
|
PRINTF("Hello world!!\r\n");
|
||||||
|
|
||||||
for(;;) {
|
if (sdcardWaitCardInsert() != kStatus_Success) {
|
||||||
|
PRINTF("Card detect failed...\r\n");
|
||||||
|
goto dead_loop;
|
||||||
|
}
|
||||||
|
|
||||||
|
PRINTF("SD inserted...\r\n");
|
||||||
|
|
||||||
|
if (f_mount(&s_fs, s_drive_num, 1U) != FR_OK) { /* Mount immediately */
|
||||||
|
PRINTF("Failed to mount filesystem...\r\n");
|
||||||
|
goto dead_loop;
|
||||||
|
}
|
||||||
|
|
||||||
|
PRINTF("FS mounted...\r\n");
|
||||||
|
|
||||||
|
app_flac_client_t client;
|
||||||
|
if (app_flac_init(&client, FLAC_FILE_NAME) < 0) {
|
||||||
|
PRINTF("Open FLAC file failed...\r\n");
|
||||||
|
goto dead_loop;
|
||||||
|
}
|
||||||
|
|
||||||
|
PRINTF("File opened...\r\n");
|
||||||
|
|
||||||
|
FLAC__StreamDecoder *decoder = FLAC__stream_decoder_new();
|
||||||
|
if (decoder == NULL) {
|
||||||
|
PRINTF("Error allocating decoder...\r\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
FLAC__stream_decoder_set_md5_checking(decoder, true);
|
||||||
|
|
||||||
|
FLAC__StreamDecoderInitStatus status =
|
||||||
|
FLAC__stream_decoder_init_stream(decoder, app_flac_read, app_flac_seek, app_flac_tell, app_flac_length,
|
||||||
|
app_flac_eof, app_flac_write, app_flac_meta, app_flac_error, &client);
|
||||||
|
|
||||||
|
if (status != FLAC__STREAM_DECODER_INIT_STATUS_OK) {
|
||||||
|
PRINTF("Stream decoder init failed: %d...\r\n", status);
|
||||||
|
goto dead_loop;
|
||||||
|
}
|
||||||
|
|
||||||
|
FLAC__bool ret = FLAC__stream_decoder_process_until_end_of_stream(decoder);
|
||||||
|
if (ret) {
|
||||||
|
PRINTF("Processed OK!\r\n");
|
||||||
|
} else {
|
||||||
|
PRINTF("Processed error: %s...\r\n", FLAC__StreamDecoderStateString[FLAC__stream_decoder_get_state(decoder)]);
|
||||||
|
}
|
||||||
|
|
||||||
|
FLAC__stream_decoder_delete(decoder);
|
||||||
|
|
||||||
|
dead_loop:
|
||||||
|
for (;;) {
|
||||||
__WFI();
|
__WFI();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static status_t sdcardWaitCardInsert(void) {
|
||||||
|
BOARD_SD_Config(&g_sd, NULL, BOARD_SDMMC_SD_HOST_IRQ_PRIORITY, NULL);
|
||||||
|
|
||||||
|
/* SD host init function */
|
||||||
|
if (SD_HostInit(&g_sd) != kStatus_Success) {
|
||||||
|
PRINTF("\r\nSD host init fail\r\n");
|
||||||
|
return kStatus_Fail;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* wait card insert */
|
||||||
|
if (SD_PollingCardInsert(&g_sd, kSD_Inserted) == kStatus_Success) {
|
||||||
|
PRINTF("\r\nCard inserted.\r\n");
|
||||||
|
/* power off card */
|
||||||
|
SD_SetCardPower(&g_sd, false);
|
||||||
|
/* power on the card */
|
||||||
|
SD_SetCardPower(&g_sd, true);
|
||||||
|
} else {
|
||||||
|
PRINTF("\r\nCard detect fail.\r\n");
|
||||||
|
return kStatus_Fail;
|
||||||
|
}
|
||||||
|
|
||||||
|
return kStatus_Success;
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user