Init commit
This commit is contained in:
commit
4f6fe6959f
44
.gitignore
vendored
Normal file
44
.gitignore
vendored
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
# Python
|
||||||
|
**/.idea/*
|
||||||
|
!**/.idea/runConfigurations
|
||||||
|
__pycache__
|
||||||
|
*.csv
|
||||||
|
*.db
|
||||||
|
tmtc/Lib
|
||||||
|
tmtc/Scripts/
|
||||||
|
tmtc/pyvenv.cfg
|
||||||
|
venv
|
||||||
|
|
||||||
|
# Eclipse
|
||||||
|
.cproject
|
||||||
|
.project
|
||||||
|
!misc/eclipse/**/.project
|
||||||
|
!misc/eclipse/**/.cproject
|
||||||
|
.pydevproject
|
||||||
|
.settings
|
||||||
|
.metadata
|
||||||
|
|
||||||
|
|
||||||
|
# Build folders
|
||||||
|
Debug
|
||||||
|
Debug*
|
||||||
|
Release
|
||||||
|
Release*
|
||||||
|
RelWithDeb
|
||||||
|
RelWithDeb*
|
||||||
|
MinSizeRel
|
||||||
|
MinSizeRel*
|
||||||
|
/build*
|
||||||
|
|
||||||
|
_dep
|
||||||
|
_obj
|
||||||
|
_bin
|
||||||
|
Makefile*
|
||||||
|
!**/make/Makefile*
|
||||||
|
|
||||||
|
# GCOV
|
||||||
|
*.gcno
|
||||||
|
|
||||||
|
# Visual Studio
|
||||||
|
.vs
|
||||||
|
out
|
12
.gitmodules
vendored
Normal file
12
.gitmodules
vendored
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
[submodule "framework"]
|
||||||
|
path = fsfw
|
||||||
|
url = https://egit.irs.uni-stuttgart.de/fsfw/fsfw.git
|
||||||
|
[submodule "cmake/rtems-cmake"]
|
||||||
|
path = cmake/rtems-cmake
|
||||||
|
url = https://github.com/rmspacefish/rtems-cmake.git
|
||||||
|
[submodule "tmtc/tmtccmd"]
|
||||||
|
path = tmtc/tmtccmd
|
||||||
|
url = https://github.com/rmspacefish/tmtccmd.git
|
||||||
|
[submodule "fsfw_hal"]
|
||||||
|
path = fsfw_hal
|
||||||
|
url = https://egit.irs.uni-stuttgart.de/fsfw/fsfw_hal.git
|
202
CMakeLists.txt
Normal file
202
CMakeLists.txt
Normal file
@ -0,0 +1,202 @@
|
|||||||
|
################################################################################
|
||||||
|
# CMake support for the Flight Software Framework
|
||||||
|
#
|
||||||
|
# Developed in an effort to replace Make with a modern build system.
|
||||||
|
#
|
||||||
|
# Author: R. Mueller
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# Pre-Project preparation
|
||||||
|
################################################################################
|
||||||
|
cmake_minimum_required(VERSION 3.13)
|
||||||
|
|
||||||
|
# set(CMAKE_VERBOSE TRUE)
|
||||||
|
# set(RTEMS_VERBOSE TRUE)
|
||||||
|
|
||||||
|
set(CMAKE_SCRIPT_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
|
||||||
|
|
||||||
|
if(NOT OS_FSFW)
|
||||||
|
set(OS_FSFW host CACHE STRING "OS for the FSFW.")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(TGT_BSP MATCHES "arm/raspberrypi" OR TGT_BSP MATCHES "arm/beagleboneblack")
|
||||||
|
option(LINUX_CROSS_COMPILE OFF)
|
||||||
|
set(FSFW_HAL_ADD_LINUX ON)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(TGT_BSP MATCHES "arm/raspberrypi")
|
||||||
|
set(FSFW_HAL_ADD_RASPBERRY_PI ON)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Perform steps like loading toolchain files where applicable.
|
||||||
|
include(${CMAKE_SCRIPT_PATH}/PreProjectConfig.cmake)
|
||||||
|
pre_project_config()
|
||||||
|
|
||||||
|
# Project Name
|
||||||
|
project(fsfw_example ASM C CXX)
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# Pre-Sources preparation
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
# Specify the C++ standard
|
||||||
|
set(CMAKE_CXX_STANDARD 11)
|
||||||
|
set(CMAKE_CXX_STANDARD_REQUIRED True)
|
||||||
|
|
||||||
|
# Set names and variables
|
||||||
|
set(TARGET_NAME ${CMAKE_PROJECT_NAME})
|
||||||
|
set(LIB_FSFW_NAME fsfw)
|
||||||
|
set(LIB_FSFW_HAL_NAME fsfw_hal)
|
||||||
|
|
||||||
|
# Set path names
|
||||||
|
set(FSFW_PATH fsfw)
|
||||||
|
set(MISSION_PATH mission)
|
||||||
|
set(COMMON_PATH common)
|
||||||
|
set(TEST_PATH test)
|
||||||
|
set(LWIP_PATH lwip)
|
||||||
|
set(LIB_FSFW_HAL_PATH fsfw_hal)
|
||||||
|
|
||||||
|
# Analyse different OS and architecture/target options, determine BSP_PATH,
|
||||||
|
# display information about compiler etc.
|
||||||
|
include (${CMAKE_SCRIPT_PATH}/HardwareOsPreConfig.cmake)
|
||||||
|
pre_source_hw_os_config()
|
||||||
|
|
||||||
|
set(COMMON_CONFIG_PATH "${COMMON_PATH}/config")
|
||||||
|
set(FSFW_CONFIG_PATH "${BSP_PATH}/fsfwconfig")
|
||||||
|
set(FSFW_ADDITIONAL_INC_PATH ${COMMON_CONFIG_PATH})
|
||||||
|
|
||||||
|
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
||||||
|
set(WARNING_FLAGS
|
||||||
|
-Wall
|
||||||
|
-Wextra
|
||||||
|
-Wimplicit-fallthrough=1
|
||||||
|
-Wno-unused-parameter
|
||||||
|
-Wno-psabi
|
||||||
|
)
|
||||||
|
|
||||||
|
set(SHADOW_LOCAL_WARNING ON)
|
||||||
|
if(TGT_BSP MATCHES "arm/raspberrypi" OR TGT_BSP MATCHES "arm/beagleboneblack")
|
||||||
|
set(SHADOW_LOCAL_WARNING OFF)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(SHADOW_LOCAL_WARNING)
|
||||||
|
# Some older compilers emit odd warnings if this is used.
|
||||||
|
set(WARNING_FLAGS ${WARNING_FLAGS} -Wshadow=local)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(FSFW_WARNING_FLAGS ${WARNING_FLAGS})
|
||||||
|
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
|
||||||
|
add_compile_options(/permissive- /d2SSAOptimizer-)
|
||||||
|
# To avoid nameclashes with min and max macro
|
||||||
|
add_compile_definitions(NOMINMAX)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# Executable and Sources
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
# Add executable
|
||||||
|
add_executable(${TARGET_NAME})
|
||||||
|
|
||||||
|
# Add subdirectories
|
||||||
|
if(LIB_OS_NAME)
|
||||||
|
add_subdirectory(${LIB_OS_NAME})
|
||||||
|
endif()
|
||||||
|
if(ADD_LWIP_STACK)
|
||||||
|
add_subdirectory(${LWIP_PATH})
|
||||||
|
endif()
|
||||||
|
add_subdirectory(${BSP_PATH})
|
||||||
|
add_subdirectory(${FSFW_PATH})
|
||||||
|
add_subdirectory(${MISSION_PATH})
|
||||||
|
add_subdirectory(${COMMON_PATH})
|
||||||
|
add_subdirectory(${TEST_PATH})
|
||||||
|
add_subdirectory(${LIB_FSFW_HAL_PATH})
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# Post-Sources preparation
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
# Add libraries for all sources.
|
||||||
|
target_link_libraries(${TARGET_NAME} PRIVATE
|
||||||
|
${LIB_FSFW_NAME}
|
||||||
|
${LIB_OS_NAME}
|
||||||
|
${LIB_FSFW_HAL_NAME}
|
||||||
|
)
|
||||||
|
|
||||||
|
# Add include paths for all sources.
|
||||||
|
target_include_directories(${TARGET_NAME} PRIVATE
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}
|
||||||
|
${FSFW_CONFIG_PATH}
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
||||||
|
target_link_options(${TARGET_NAME} PRIVATE
|
||||||
|
"-Wl,-Map=${TARGET_NAME}.map"
|
||||||
|
)
|
||||||
|
|
||||||
|
# Remove unused sections.
|
||||||
|
target_compile_options(${TARGET_NAME} PRIVATE
|
||||||
|
"-ffunction-sections"
|
||||||
|
"-fdata-sections"
|
||||||
|
)
|
||||||
|
|
||||||
|
# Removed unused sections.
|
||||||
|
if(NOT ${OS_FSFW} MATCHES rtems)
|
||||||
|
target_link_options(${TARGET_NAME} PRIVATE
|
||||||
|
"-Wl,--gc-sections"
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(CMAKE_VERBOSE)
|
||||||
|
message(STATUS "Warning flags: ${WARNING_FLAGS}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
|
||||||
|
# Compile options for all sources.
|
||||||
|
target_compile_options(${TARGET_NAME} PRIVATE
|
||||||
|
${WARNING_FLAGS}
|
||||||
|
)
|
||||||
|
|
||||||
|
if(CMAKE_CROSSCOMPILING)
|
||||||
|
include(${CMAKE_SCRIPT_PATH}/HardwareOsPostConfig.cmake)
|
||||||
|
post_source_hw_os_config()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(NOT CMAKE_SIZE)
|
||||||
|
set(CMAKE_SIZE size)
|
||||||
|
if(WIN32)
|
||||||
|
set(FILE_SUFFIX ".exe")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(TGT_BSP)
|
||||||
|
set(TARGET_STRING "Target BSP: ${TGT_BSP}")
|
||||||
|
else()
|
||||||
|
set(TARGET_STRING "Target BSP: Hosted")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
string(CONCAT POST_BUILD_COMMENT
|
||||||
|
"Build directory: ${CMAKE_BINARY_DIR}\n"
|
||||||
|
"Target OSAL: ${OS_FSFW}\n"
|
||||||
|
"Target Build Type: ${CMAKE_BUILD_TYPE}\n"
|
||||||
|
"${TARGET_STRING}"
|
||||||
|
)
|
||||||
|
|
||||||
|
add_custom_command(
|
||||||
|
TARGET ${TARGET_NAME}
|
||||||
|
POST_BUILD
|
||||||
|
COMMAND ${CMAKE_SIZE} ${TARGET_NAME}${FILE_SUFFIX}
|
||||||
|
COMMENT ${POST_BUILD_COMMENT}
|
||||||
|
)
|
||||||
|
|
||||||
|
include (${CMAKE_SCRIPT_PATH}/BuildType.cmake)
|
||||||
|
set_build_type()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
202
LICENSE
Normal file
202
LICENSE
Normal file
@ -0,0 +1,202 @@
|
|||||||
|
|
||||||
|
Apache License
|
||||||
|
Version 2.0, January 2004
|
||||||
|
http://www.apache.org/licenses/
|
||||||
|
|
||||||
|
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||||
|
|
||||||
|
1. Definitions.
|
||||||
|
|
||||||
|
"License" shall mean the terms and conditions for use, reproduction,
|
||||||
|
and distribution as defined by Sections 1 through 9 of this document.
|
||||||
|
|
||||||
|
"Licensor" shall mean the copyright owner or entity authorized by
|
||||||
|
the copyright owner that is granting the License.
|
||||||
|
|
||||||
|
"Legal Entity" shall mean the union of the acting entity and all
|
||||||
|
other entities that control, are controlled by, or are under common
|
||||||
|
control with that entity. For the purposes of this definition,
|
||||||
|
"control" means (i) the power, direct or indirect, to cause the
|
||||||
|
direction or management of such entity, whether by contract or
|
||||||
|
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||||
|
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||||
|
|
||||||
|
"You" (or "Your") shall mean an individual or Legal Entity
|
||||||
|
exercising permissions granted by this License.
|
||||||
|
|
||||||
|
"Source" form shall mean the preferred form for making modifications,
|
||||||
|
including but not limited to software source code, documentation
|
||||||
|
source, and configuration files.
|
||||||
|
|
||||||
|
"Object" form shall mean any form resulting from mechanical
|
||||||
|
transformation or translation of a Source form, including but
|
||||||
|
not limited to compiled object code, generated documentation,
|
||||||
|
and conversions to other media types.
|
||||||
|
|
||||||
|
"Work" shall mean the work of authorship, whether in Source or
|
||||||
|
Object form, made available under the License, as indicated by a
|
||||||
|
copyright notice that is included in or attached to the work
|
||||||
|
(an example is provided in the Appendix below).
|
||||||
|
|
||||||
|
"Derivative Works" shall mean any work, whether in Source or Object
|
||||||
|
form, that is based on (or derived from) the Work and for which the
|
||||||
|
editorial revisions, annotations, elaborations, or other modifications
|
||||||
|
represent, as a whole, an original work of authorship. For the purposes
|
||||||
|
of this License, Derivative Works shall not include works that remain
|
||||||
|
separable from, or merely link (or bind by name) to the interfaces of,
|
||||||
|
the Work and Derivative Works thereof.
|
||||||
|
|
||||||
|
"Contribution" shall mean any work of authorship, including
|
||||||
|
the original version of the Work and any modifications or additions
|
||||||
|
to that Work or Derivative Works thereof, that is intentionally
|
||||||
|
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||||
|
or by an individual or Legal Entity authorized to submit on behalf of
|
||||||
|
the copyright owner. For the purposes of this definition, "submitted"
|
||||||
|
means any form of electronic, verbal, or written communication sent
|
||||||
|
to the Licensor or its representatives, including but not limited to
|
||||||
|
communication on electronic mailing lists, source code control systems,
|
||||||
|
and issue tracking systems that are managed by, or on behalf of, the
|
||||||
|
Licensor for the purpose of discussing and improving the Work, but
|
||||||
|
excluding communication that is conspicuously marked or otherwise
|
||||||
|
designated in writing by the copyright owner as "Not a Contribution."
|
||||||
|
|
||||||
|
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||||
|
on behalf of whom a Contribution has been received by Licensor and
|
||||||
|
subsequently incorporated within the Work.
|
||||||
|
|
||||||
|
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
copyright license to reproduce, prepare Derivative Works of,
|
||||||
|
publicly display, publicly perform, sublicense, and distribute the
|
||||||
|
Work and such Derivative Works in Source or Object form.
|
||||||
|
|
||||||
|
3. Grant of Patent License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
(except as stated in this section) patent license to make, have made,
|
||||||
|
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||||
|
where such license applies only to those patent claims licensable
|
||||||
|
by such Contributor that are necessarily infringed by their
|
||||||
|
Contribution(s) alone or by combination of their Contribution(s)
|
||||||
|
with the Work to which such Contribution(s) was submitted. If You
|
||||||
|
institute patent litigation against any entity (including a
|
||||||
|
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||||
|
or a Contribution incorporated within the Work constitutes direct
|
||||||
|
or contributory patent infringement, then any patent licenses
|
||||||
|
granted to You under this License for that Work shall terminate
|
||||||
|
as of the date such litigation is filed.
|
||||||
|
|
||||||
|
4. Redistribution. You may reproduce and distribute copies of the
|
||||||
|
Work or Derivative Works thereof in any medium, with or without
|
||||||
|
modifications, and in Source or Object form, provided that You
|
||||||
|
meet the following conditions:
|
||||||
|
|
||||||
|
(a) You must give any other recipients of the Work or
|
||||||
|
Derivative Works a copy of this License; and
|
||||||
|
|
||||||
|
(b) You must cause any modified files to carry prominent notices
|
||||||
|
stating that You changed the files; and
|
||||||
|
|
||||||
|
(c) You must retain, in the Source form of any Derivative Works
|
||||||
|
that You distribute, all copyright, patent, trademark, and
|
||||||
|
attribution notices from the Source form of the Work,
|
||||||
|
excluding those notices that do not pertain to any part of
|
||||||
|
the Derivative Works; and
|
||||||
|
|
||||||
|
(d) If the Work includes a "NOTICE" text file as part of its
|
||||||
|
distribution, then any Derivative Works that You distribute must
|
||||||
|
include a readable copy of the attribution notices contained
|
||||||
|
within such NOTICE file, excluding those notices that do not
|
||||||
|
pertain to any part of the Derivative Works, in at least one
|
||||||
|
of the following places: within a NOTICE text file distributed
|
||||||
|
as part of the Derivative Works; within the Source form or
|
||||||
|
documentation, if provided along with the Derivative Works; or,
|
||||||
|
within a display generated by the Derivative Works, if and
|
||||||
|
wherever such third-party notices normally appear. The contents
|
||||||
|
of the NOTICE file are for informational purposes only and
|
||||||
|
do not modify the License. You may add Your own attribution
|
||||||
|
notices within Derivative Works that You distribute, alongside
|
||||||
|
or as an addendum to the NOTICE text from the Work, provided
|
||||||
|
that such additional attribution notices cannot be construed
|
||||||
|
as modifying the License.
|
||||||
|
|
||||||
|
You may add Your own copyright statement to Your modifications and
|
||||||
|
may provide additional or different license terms and conditions
|
||||||
|
for use, reproduction, or distribution of Your modifications, or
|
||||||
|
for any such Derivative Works as a whole, provided Your use,
|
||||||
|
reproduction, and distribution of the Work otherwise complies with
|
||||||
|
the conditions stated in this License.
|
||||||
|
|
||||||
|
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||||
|
any Contribution intentionally submitted for inclusion in the Work
|
||||||
|
by You to the Licensor shall be under the terms and conditions of
|
||||||
|
this License, without any additional terms or conditions.
|
||||||
|
Notwithstanding the above, nothing herein shall supersede or modify
|
||||||
|
the terms of any separate license agreement you may have executed
|
||||||
|
with Licensor regarding such Contributions.
|
||||||
|
|
||||||
|
6. Trademarks. This License does not grant permission to use the trade
|
||||||
|
names, trademarks, service marks, or product names of the Licensor,
|
||||||
|
except as required for reasonable and customary use in describing the
|
||||||
|
origin of the Work and reproducing the content of the NOTICE file.
|
||||||
|
|
||||||
|
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||||
|
agreed to in writing, Licensor provides the Work (and each
|
||||||
|
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||||
|
implied, including, without limitation, any warranties or conditions
|
||||||
|
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||||
|
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||||
|
appropriateness of using or redistributing the Work and assume any
|
||||||
|
risks associated with Your exercise of permissions under this License.
|
||||||
|
|
||||||
|
8. Limitation of Liability. In no event and under no legal theory,
|
||||||
|
whether in tort (including negligence), contract, or otherwise,
|
||||||
|
unless required by applicable law (such as deliberate and grossly
|
||||||
|
negligent acts) or agreed to in writing, shall any Contributor be
|
||||||
|
liable to You for damages, including any direct, indirect, special,
|
||||||
|
incidental, or consequential damages of any character arising as a
|
||||||
|
result of this License or out of the use or inability to use the
|
||||||
|
Work (including but not limited to damages for loss of goodwill,
|
||||||
|
work stoppage, computer failure or malfunction, or any and all
|
||||||
|
other commercial damages or losses), even if such Contributor
|
||||||
|
has been advised of the possibility of such damages.
|
||||||
|
|
||||||
|
9. Accepting Warranty or Additional Liability. While redistributing
|
||||||
|
the Work or Derivative Works thereof, You may choose to offer,
|
||||||
|
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||||
|
or other liability obligations and/or rights consistent with this
|
||||||
|
License. However, in accepting such obligations, You may act only
|
||||||
|
on Your own behalf and on Your sole responsibility, not on behalf
|
||||||
|
of any other Contributor, and only if You agree to indemnify,
|
||||||
|
defend, and hold each Contributor harmless for any liability
|
||||||
|
incurred by, or claims asserted against, such Contributor by reason
|
||||||
|
of your accepting any such warranty or additional liability.
|
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
APPENDIX: How to apply the Apache License to your work.
|
||||||
|
|
||||||
|
To apply the Apache License to your work, attach the following
|
||||||
|
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||||
|
replaced with your own identifying information. (Don't include
|
||||||
|
the brackets!) The text should be enclosed in the appropriate
|
||||||
|
comment syntax for the file format. We also recommend that a
|
||||||
|
file or class name and description of purpose be included on the
|
||||||
|
same "printed page" as the copyright notice for easier
|
||||||
|
identification within third-party archives.
|
||||||
|
|
||||||
|
Copyright [yyyy] [name of copyright owner]
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
16
NOTICE
Normal file
16
NOTICE
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
Flight Software Framework Examples
|
||||||
|
|
||||||
|
The initial version of the Flight Software Framework was developed during
|
||||||
|
the Flying Laptop Project by the Universität Stuttgart in coorporation
|
||||||
|
with Airbus Defence and Space GmbH.
|
||||||
|
|
||||||
|
The supreme FSFW Logo was designed by Markus Koller and Luise Trilsbach.
|
||||||
|
|
||||||
|
Copyrights in the Flight Software Framework Examples are retained by their contributors.
|
||||||
|
No copyright assignment is required to contribute to the Flight Software Framework Examples.
|
||||||
|
|
||||||
|
Some files include explicit copyright notices and/or license notices.
|
||||||
|
For full authorship information, see the version control history.
|
||||||
|
|
||||||
|
Except as otherwise noted (below and/or in individual files), the
|
||||||
|
Flight Software Framework Example is licensed under the Apache License, Version 2.0.
|
34
README.md
Normal file
34
README.md
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
<img align="center" src=doc/images/FSFW_Logo_V3_bw.png width="50%">
|
||||||
|
|
||||||
|
# <a id="top"></a> <a name="linux"></a> FSFW Demo Application
|
||||||
|
|
||||||
|
This repository features a demo application. The example has been run successfully on the following
|
||||||
|
platforms:
|
||||||
|
|
||||||
|
- Linux host machine with the Linux OSAL or the Host OSAL
|
||||||
|
- Windows with the Host OSAL
|
||||||
|
- STM32H743ZI-Nucleo with the FreeRTOS OSAL
|
||||||
|
- Raspberry Pi with the Linux OSAL
|
||||||
|
- STM32H743ZI-Nucleo with the RTEMS OSAL
|
||||||
|
|
||||||
|
The purpose of this example is to provide a demo of the FSFW capabilities.
|
||||||
|
However, it can also be used as a starting point to set up a repository for
|
||||||
|
new flight software. It also aims to provide developers with practical examples
|
||||||
|
of how the FSFW is inteded to be used and how project using the FSFW should or can be
|
||||||
|
set up and it might serve as a basic test platform for the FSFW as well to ensure all OSALs are compiling
|
||||||
|
and running as expected.
|
||||||
|
|
||||||
|
The repository contains a Python TMTC program which can be used to showcase
|
||||||
|
the TMTC capabilities of the FSFW (currently, using the ECSS PUS packet standard).
|
||||||
|
|
||||||
|
## Reference
|
||||||
|
|
||||||
|
[Getting started with the Linux OSAL](doc/README-linux.md#top)<br>
|
||||||
|
[Getting started with the Host OSAL](doc/README-host.md#top)<br>
|
||||||
|
[Getting started with the FreeRTOS OSAL on a STM32](doc/README-stm32-freertos.md#top)<br>
|
||||||
|
[Getting started with the Raspberry Pi](doc/README-rpi.md#top)<br>
|
||||||
|
[Getting started with the RTEMS OSAL on a STM32](doc/README-stm32-rtems.md#top)<br>
|
||||||
|
[Getting started with Eclipse for C/C++](doc/README-eclipse.md#top)<br>
|
||||||
|
[Getting started with CMake](doc/README-cmake.md#top)<br>
|
||||||
|
|
||||||
|
|
13
bsp_hosted/CMakeLists.txt
Normal file
13
bsp_hosted/CMakeLists.txt
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
target_sources(${TARGET_NAME}
|
||||||
|
PRIVATE
|
||||||
|
main.cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
add_subdirectory(core)
|
||||||
|
add_subdirectory(fsfwconfig)
|
||||||
|
add_subdirectory(utility)
|
||||||
|
|
||||||
|
target_include_directories(${TARGET_NAME}
|
||||||
|
PRIVATE
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}
|
||||||
|
)
|
9
bsp_hosted/bsp_hosted.mk
Normal file
9
bsp_hosted/bsp_hosted.mk
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
CSRC += $(wildcard $(CURRENTPATH)/*.c)
|
||||||
|
CXXSRC += $(wildcard $(CURRENTPATH)/*.cpp)
|
||||||
|
|
||||||
|
CSRC += $(wildcard $(CURRENTPATH)/core/*.c)
|
||||||
|
CXXSRC += $(wildcard $(CURRENTPATH)/core/*.cpp)
|
||||||
|
|
||||||
|
CSRC += $(wildcard $(CURRENTPATH)/utility/*.c)
|
||||||
|
|
||||||
|
INCLUDES += $(CURRENTPATH)
|
5
bsp_hosted/core/CMakeLists.txt
Normal file
5
bsp_hosted/core/CMakeLists.txt
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
target_sources(${TARGET_NAME}
|
||||||
|
PRIVATE
|
||||||
|
InitMission.cpp
|
||||||
|
ObjectFactory.cpp
|
||||||
|
)
|
265
bsp_hosted/core/InitMission.cpp
Normal file
265
bsp_hosted/core/InitMission.cpp
Normal file
@ -0,0 +1,265 @@
|
|||||||
|
#include <OBSWConfig.h>
|
||||||
|
|
||||||
|
#include <bsp_hosted/core/InitMission.h>
|
||||||
|
#include <bsp_hosted/fsfwconfig/objects/systemObjectList.h>
|
||||||
|
#include <bsp_hosted/fsfwconfig/pollingsequence/pollingSequenceFactory.h>
|
||||||
|
|
||||||
|
#include <mission/utility/TaskCreation.h>
|
||||||
|
|
||||||
|
#include <fsfw/returnvalues/HasReturnvaluesIF.h>
|
||||||
|
#include <fsfw/serviceinterface/ServiceInterface.h>
|
||||||
|
#include <fsfw/tasks/FixedTimeslotTaskIF.h>
|
||||||
|
#include <fsfw/tasks/PeriodicTaskIF.h>
|
||||||
|
#include <fsfw/tasks/TaskFactory.h>
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
#include <fsfw/osal/windows/winTaskHelpers.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
void InitMission::createTasks() {
|
||||||
|
TaskFactory* taskFactory = TaskFactory::instance();
|
||||||
|
if(taskFactory == nullptr) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
TaskPriority currPrio;
|
||||||
|
#ifdef _WIN32
|
||||||
|
currPrio = tasks::makeWinPriority();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
TaskDeadlineMissedFunction deadlineMissedFunc = nullptr;
|
||||||
|
#if OBSW_PRINT_MISSED_DEADLINES == 1
|
||||||
|
deadlineMissedFunc = TaskFactory::printMissedDeadline;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if OBSW_ADD_CORE_COMPONENTS == 1
|
||||||
|
|
||||||
|
#ifdef __unix__
|
||||||
|
currPrio = 40;
|
||||||
|
#endif
|
||||||
|
/* TMTC Distribution */
|
||||||
|
PeriodicTaskIF* distributerTask = taskFactory->createPeriodicTask(
|
||||||
|
"DIST", currPrio, PeriodicTaskIF::MINIMUM_STACK_SIZE, 0.1, deadlineMissedFunc);
|
||||||
|
ReturnValue_t result = distributerTask->addComponent(
|
||||||
|
objects::CCSDS_DISTRIBUTOR);
|
||||||
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
|
task::printInitError("CCSDS distributor", objects::CCSDS_DISTRIBUTOR);
|
||||||
|
}
|
||||||
|
result = distributerTask->addComponent(objects::PUS_DISTRIBUTOR);
|
||||||
|
if (result!=HasReturnvaluesIF::RETURN_OK) {
|
||||||
|
task::printInitError("PUS distributor", objects::PUS_DISTRIBUTOR);
|
||||||
|
}
|
||||||
|
result = distributerTask->addComponent(objects::TM_FUNNEL);
|
||||||
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
|
task::printInitError("TM funnel", objects::TM_FUNNEL);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef __unix__
|
||||||
|
currPrio = 50;
|
||||||
|
#endif
|
||||||
|
/* UDP bridge */
|
||||||
|
PeriodicTaskIF* udpBridgeTask = taskFactory->createPeriodicTask(
|
||||||
|
"UDP_UNIX_BRIDGE", currPrio, PeriodicTaskIF::MINIMUM_STACK_SIZE, 0.2,
|
||||||
|
deadlineMissedFunc
|
||||||
|
);
|
||||||
|
result = udpBridgeTask->addComponent(objects::UDP_BRIDGE);
|
||||||
|
if(result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
|
task::printInitError("UDP bridge", objects::UDP_BRIDGE);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef __unix__
|
||||||
|
currPrio = 80;
|
||||||
|
#endif
|
||||||
|
PeriodicTaskIF* udpPollingTask = taskFactory->createPeriodicTask(
|
||||||
|
"UDP_POLLING", currPrio, PeriodicTaskIF::MINIMUM_STACK_SIZE, 2.0, deadlineMissedFunc
|
||||||
|
);
|
||||||
|
result = udpPollingTask->addComponent(objects::UDP_POLLING_TASK);
|
||||||
|
if(result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
|
task::printInitError("UDP polling", objects::UDP_POLLING_TASK);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef __unix__
|
||||||
|
currPrio = 20;
|
||||||
|
#endif
|
||||||
|
PeriodicTaskIF* eventTask = taskFactory->createPeriodicTask(
|
||||||
|
"EVENT", currPrio, PeriodicTaskIF::MINIMUM_STACK_SIZE, 0.100, deadlineMissedFunc
|
||||||
|
);
|
||||||
|
result = eventTask->addComponent(objects::EVENT_MANAGER);
|
||||||
|
if(result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
|
task::printInitError("Event Manager", objects::EVENT_MANAGER);
|
||||||
|
}
|
||||||
|
#endif /* OBSW_ADD_CORE_COMPONENTS == 1 */
|
||||||
|
|
||||||
|
#if OBSW_ADD_TASK_EXAMPLE == 1
|
||||||
|
|
||||||
|
#ifdef __unix__
|
||||||
|
currPrio = 50;
|
||||||
|
#endif
|
||||||
|
FixedTimeslotTaskIF* timeslotDemoTask = taskFactory->createFixedTimeslotTask(
|
||||||
|
"PST_TASK", currPrio, PeriodicTaskIF::MINIMUM_STACK_SIZE, 0.5, deadlineMissedFunc);
|
||||||
|
result = pst::pollingSequenceExamples(timeslotDemoTask);
|
||||||
|
if(result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
|
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
||||||
|
sif::error << "InitMission::createTasks: Timeslot demo task initialization failed!" <<
|
||||||
|
std::endl;
|
||||||
|
#else
|
||||||
|
sif::printError("InitMission::createTasks: Timeslot demo task initialization failed!\n");
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef __unix__
|
||||||
|
currPrio = 40;
|
||||||
|
#endif
|
||||||
|
PeriodicTaskIF* readerTask = taskFactory->createPeriodicTask(
|
||||||
|
"READER_TASK", currPrio, PeriodicTaskIF::MINIMUM_STACK_SIZE, 1.0, deadlineMissedFunc);
|
||||||
|
result = readerTask->addComponent(objects::TEST_DUMMY_4);
|
||||||
|
if(result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
|
task::printInitError("Dummy 4", objects::TEST_DUMMY_4);
|
||||||
|
}
|
||||||
|
#endif /* OBSW_ADD_TASK_EXAMPLE == 1 */
|
||||||
|
|
||||||
|
|
||||||
|
#if OBSW_ADD_PUS_STACK == 1
|
||||||
|
/* PUS Services */
|
||||||
|
#ifdef __unix__
|
||||||
|
currPrio = 45;
|
||||||
|
#endif
|
||||||
|
PeriodicTaskIF* pusVerification = taskFactory->createPeriodicTask(
|
||||||
|
"PUS_VERIF_1", currPrio, PeriodicTaskIF::MINIMUM_STACK_SIZE, 0.200, deadlineMissedFunc);
|
||||||
|
result = pusVerification->addComponent(objects::PUS_SERVICE_1_VERIFICATION);
|
||||||
|
if(result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
|
task::printInitError("PUS 1", objects::PUS_SERVICE_1_VERIFICATION);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef __unix__
|
||||||
|
currPrio = 50;
|
||||||
|
#endif
|
||||||
|
PeriodicTaskIF* pusHighPrio = taskFactory->createPeriodicTask(
|
||||||
|
"PUS_HIGH_PRIO", currPrio, PeriodicTaskIF::MINIMUM_STACK_SIZE, 0.2, deadlineMissedFunc);
|
||||||
|
result = pusHighPrio->addComponent(objects::PUS_SERVICE_2_DEVICE_ACCESS);
|
||||||
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
|
task::printInitError("PUS 2", objects::PUS_SERVICE_2_DEVICE_ACCESS);
|
||||||
|
}
|
||||||
|
result = pusHighPrio->addComponent(objects::PUS_SERVICE_5_EVENT_REPORTING);
|
||||||
|
if(result != HasReturnvaluesIF::RETURN_OK){
|
||||||
|
task::printInitError("PUS 5",objects::PUS_SERVICE_5_EVENT_REPORTING);
|
||||||
|
}
|
||||||
|
result = pusHighPrio->addComponent(objects::PUS_SERVICE_9_TIME_MGMT);
|
||||||
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
|
task::printInitError("PUS 9", objects::PUS_SERVICE_9_TIME_MGMT);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef __unix__
|
||||||
|
currPrio = 40;
|
||||||
|
#endif
|
||||||
|
PeriodicTaskIF* pusMedPrio = taskFactory->createPeriodicTask(
|
||||||
|
"PUS_MED_PRIO", currPrio, PeriodicTaskIF::MINIMUM_STACK_SIZE, 0.6, deadlineMissedFunc);
|
||||||
|
result = pusMedPrio->addComponent(objects::PUS_SERVICE_3_HOUSEKEEPING);
|
||||||
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
|
task::printInitError("PUS 3", objects::PUS_SERVICE_3_HOUSEKEEPING);
|
||||||
|
}
|
||||||
|
result = pusMedPrio->addComponent(objects::PUS_SERVICE_8_FUNCTION_MGMT);
|
||||||
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
|
task::printInitError("PUS 8", objects::PUS_SERVICE_8_FUNCTION_MGMT);
|
||||||
|
}
|
||||||
|
result = pusMedPrio->addComponent(objects::PUS_SERVICE_20_PARAMETERS);
|
||||||
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
|
task::printInitError("PUS 20", objects::PUS_SERVICE_20_PARAMETERS);
|
||||||
|
}
|
||||||
|
result = pusMedPrio->addComponent(objects::PUS_SERVICE_200_MODE_MGMT);
|
||||||
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
|
task::printInitError("PUS 200", objects::PUS_SERVICE_200_MODE_MGMT);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef __unix__
|
||||||
|
currPrio = 30;
|
||||||
|
#endif
|
||||||
|
PeriodicTaskIF* pusLowPrio = taskFactory->createPeriodicTask(
|
||||||
|
"PUS_LOW_PRIO", currPrio, PeriodicTaskIF::MINIMUM_STACK_SIZE, 1.2, deadlineMissedFunc);
|
||||||
|
result = pusLowPrio->addComponent(objects::PUS_SERVICE_17_TEST);
|
||||||
|
if(result!=HasReturnvaluesIF::RETURN_OK) {
|
||||||
|
task::printInitError("PUS 17", objects::PUS_SERVICE_17_TEST);
|
||||||
|
}
|
||||||
|
#endif /* OBSW_ADD_PUS_STACK == 1 */
|
||||||
|
|
||||||
|
#if OBSW_ADD_DEVICE_HANDLER_DEMO == 1
|
||||||
|
#ifdef __unix__
|
||||||
|
currPrio = 40;
|
||||||
|
#endif
|
||||||
|
FixedTimeslotTaskIF* testDevicesTimeslotTask = taskFactory->createFixedTimeslotTask(
|
||||||
|
"PST_TEST_TASK", currPrio, PeriodicTaskIF::MINIMUM_STACK_SIZE, 1.0, deadlineMissedFunc);
|
||||||
|
result = pst::pollingSequenceDevices(testDevicesTimeslotTask);
|
||||||
|
if(result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
|
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
||||||
|
sif::error << "InitMission::createTasks: Test PST initialization failed!" << std::endl;
|
||||||
|
#else
|
||||||
|
sif::printError("InitMission::createTasks: Test PST initialization failed!\n");
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
#endif /* OBSW_ADD_DEVICE_HANDLER_DEMO == 1 */
|
||||||
|
|
||||||
|
#if OBSW_ADD_CONTROLLER_DEMO == 1
|
||||||
|
#ifdef __unix__
|
||||||
|
currPrio = 45;
|
||||||
|
#endif
|
||||||
|
PeriodicTaskIF* controllerTask = taskFactory->createPeriodicTask(
|
||||||
|
"TEST_CTRL", currPrio, PeriodicTaskIF::MINIMUM_STACK_SIZE, 0.8, deadlineMissedFunc);
|
||||||
|
result = controllerTask->addComponent(objects::TEST_CONTROLLER);
|
||||||
|
if(result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
|
task::printInitError("Controller Task", objects::TEST_CONTROLLER);
|
||||||
|
}
|
||||||
|
#endif /* OBSW_ADD_CONTROLLER_DEMO == 1 */
|
||||||
|
#ifdef __unix__
|
||||||
|
currPrio = 15;
|
||||||
|
#endif
|
||||||
|
PeriodicTaskIF* testTask = TaskFactory::instance()->createPeriodicTask(
|
||||||
|
"TEST_TASK", currPrio, PeriodicTaskIF::MINIMUM_STACK_SIZE, 1.0, deadlineMissedFunc);
|
||||||
|
result = testTask->addComponent(objects::TEST_TASK);
|
||||||
|
if(result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
|
task::printInitError("Test Task", objects::TEST_TASK);
|
||||||
|
}
|
||||||
|
|
||||||
|
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
||||||
|
sif::info << "Starting tasks.." << std::endl;
|
||||||
|
#else
|
||||||
|
sif::printInfo("Starting tasks..\n");
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if OBSW_ADD_CORE_COMPONENTS == 1
|
||||||
|
distributerTask->startTask();
|
||||||
|
udpBridgeTask->startTask();
|
||||||
|
udpPollingTask->startTask();
|
||||||
|
eventTask->startTask();
|
||||||
|
#endif /* OBSW_ADD_CORE_COMPONENTS == 1 */
|
||||||
|
|
||||||
|
#if OBSW_ADD_PUS_STACK == 1
|
||||||
|
pusVerification->startTask();
|
||||||
|
pusHighPrio->startTask();
|
||||||
|
pusMedPrio->startTask();
|
||||||
|
pusLowPrio->startTask();
|
||||||
|
#endif /* OBSW_ADD_PUS_STACK == 1 */
|
||||||
|
|
||||||
|
#if OBSW_ADD_TASK_EXAMPLE == 1
|
||||||
|
timeslotDemoTask->startTask();
|
||||||
|
readerTask->startTask();
|
||||||
|
#endif /* OBSW_ADD_TASK_EXAMPLE == 1 */
|
||||||
|
|
||||||
|
#if OBSW_ADD_DEVICE_HANDLER_DEMO == 1
|
||||||
|
testDevicesTimeslotTask->startTask();
|
||||||
|
#endif /* OBSW_ADD_DEVICE_HANDLER_DEMO == 1 */
|
||||||
|
|
||||||
|
#if OBSW_ADD_CONTROLLER_DEMO == 1
|
||||||
|
controllerTask->startTask();
|
||||||
|
#endif /* OBSW_ADD_CONTROLLER_DEMO == 1 */
|
||||||
|
|
||||||
|
testTask->startTask();
|
||||||
|
|
||||||
|
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
||||||
|
sif::info << "Tasks started.." << std::endl;
|
||||||
|
#else
|
||||||
|
sif::printInfo("Tasks started..\n");
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
10
bsp_hosted/core/InitMission.h
Normal file
10
bsp_hosted/core/InitMission.h
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
#ifndef MISSION_CORE_INITMISSION_H_
|
||||||
|
#define MISSION_CORE_INITMISSION_H_
|
||||||
|
|
||||||
|
#include <fsfw/objectmanager/SystemObjectIF.h>
|
||||||
|
|
||||||
|
namespace InitMission {
|
||||||
|
void createTasks();
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* MISSION_CORE_INITMISSION_H_ */
|
59
bsp_hosted/core/ObjectFactory.cpp
Normal file
59
bsp_hosted/core/ObjectFactory.cpp
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
#include <OBSWConfig.h>
|
||||||
|
|
||||||
|
#include <bsp_hosted/core/ObjectFactory.h>
|
||||||
|
#include <bsp_hosted/fsfwconfig/objects/systemObjectList.h>
|
||||||
|
#include <bsp_hosted/fsfwconfig/OBSWConfig.h>
|
||||||
|
#include <bsp_hosted/fsfwconfig/tmtc/apid.h>
|
||||||
|
#include <bsp_hosted/fsfwconfig/tmtc/pusIds.h>
|
||||||
|
|
||||||
|
#include <test/TestTask.h>
|
||||||
|
|
||||||
|
#include <mission/utility/TmFunnel.h>
|
||||||
|
#include <mission/core/GenericFactory.h>
|
||||||
|
|
||||||
|
#include <fsfw/monitoring/MonitoringMessageContent.h>
|
||||||
|
#include <fsfw/storagemanager/PoolManager.h>
|
||||||
|
#include <fsfw/datapoollocal/LocalDataPoolManager.h>
|
||||||
|
#include <fsfw/tmtcpacket/pus/TmPacketStored.h>
|
||||||
|
#include <fsfw/tmtcservices/CommandingServiceBase.h>
|
||||||
|
#include <fsfw/tmtcservices/PusServiceBase.h>
|
||||||
|
|
||||||
|
#include <fsfw/osal/common/UdpTcPollingTask.h>
|
||||||
|
#include <fsfw/osal/common/UdpTmTcBridge.h>
|
||||||
|
|
||||||
|
void ObjectFactory::produce(){
|
||||||
|
Factory::setStaticFrameworkObjectIds();
|
||||||
|
|
||||||
|
#if OBSW_ADD_CORE_COMPONENTS == 1
|
||||||
|
{
|
||||||
|
LocalPool::LocalPoolConfig poolCfg = {
|
||||||
|
{16, 100}, {32, 50}, {64, 25}, {128,15}, {1024, 5}
|
||||||
|
};
|
||||||
|
new PoolManager(objects::TC_STORE, poolCfg);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
LocalPool::LocalPoolConfig poolCfg = {
|
||||||
|
{16, 100}, {32, 50}, {64, 25}, {128,15}, {1024, 5}
|
||||||
|
};
|
||||||
|
new PoolManager(objects::TM_STORE, poolCfg);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
LocalPool::LocalPoolConfig poolCfg = {
|
||||||
|
{16, 100}, {32, 50}, {64, 25}, {128,15}, {1024, 5}
|
||||||
|
};
|
||||||
|
new PoolManager(objects::IPC_STORE, poolCfg);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* TMTC Reception via UDP socket */
|
||||||
|
new UdpTmTcBridge(objects::UDP_BRIDGE, objects::CCSDS_DISTRIBUTOR,
|
||||||
|
objects::TM_STORE, objects::TC_STORE);
|
||||||
|
new UdpTcPollingTask(objects::UDP_POLLING_TASK, objects::UDP_BRIDGE);
|
||||||
|
|
||||||
|
#endif /* OBSW_ADD_CORE_COMPONENTS == 1 */
|
||||||
|
|
||||||
|
new TestTask(objects::TEST_TASK, false);
|
||||||
|
|
||||||
|
ObjectFactory::produceGenericObjects();
|
||||||
|
}
|
12
bsp_hosted/core/ObjectFactory.h
Normal file
12
bsp_hosted/core/ObjectFactory.h
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
#ifndef MISSION_CORE_OBJECTFACTORY_H_
|
||||||
|
#define MISSION_CORE_OBJECTFACTORY_H_
|
||||||
|
|
||||||
|
namespace ObjectFactory {
|
||||||
|
|
||||||
|
void setStatics();
|
||||||
|
void produce();
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* MISSION_CORE_OBJECTFACTORY_H_ */
|
11
bsp_hosted/fsfwconfig/CMakeLists.txt
Normal file
11
bsp_hosted/fsfwconfig/CMakeLists.txt
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
target_sources(${TARGET_NAME}
|
||||||
|
PRIVATE
|
||||||
|
ipc/missionMessageTypes.cpp
|
||||||
|
pollingsequence/pollingSequenceFactory.cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
# Add include paths for the executable
|
||||||
|
target_include_directories(${TARGET_NAME}
|
||||||
|
PUBLIC
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}
|
||||||
|
)
|
72
bsp_hosted/fsfwconfig/FSFWConfig.h
Normal file
72
bsp_hosted/fsfwconfig/FSFWConfig.h
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
#ifndef CONFIG_FSFWCONFIG_H_
|
||||||
|
#define CONFIG_FSFWCONFIG_H_
|
||||||
|
|
||||||
|
#include <cstddef>
|
||||||
|
#include <cstdint>
|
||||||
|
|
||||||
|
//! Used to determine whether C++ ostreams are used which can increase
|
||||||
|
//! the binary size significantly. If this is disabled,
|
||||||
|
//! the C stdio functions can be used alternatively
|
||||||
|
#define FSFW_CPP_OSTREAM_ENABLED 1
|
||||||
|
|
||||||
|
//! More FSFW related printouts depending on level. Useful for development.
|
||||||
|
#define FSFW_VERBOSE_LEVEL 1
|
||||||
|
|
||||||
|
//! Can be used to completely disable printouts, even the C stdio ones.
|
||||||
|
#if FSFW_CPP_OSTREAM_ENABLED == 0 && FSFW_VERBOSE_LEVEL == 0
|
||||||
|
#define FSFW_DISABLE_PRINTOUT 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define FSFW_USE_PUS_C_TELEMETRY 1
|
||||||
|
|
||||||
|
//! Can be used to disable the ANSI color sequences for C stdio.
|
||||||
|
#define FSFW_COLORED_OUTPUT 1
|
||||||
|
|
||||||
|
//! If FSFW_OBJ_EVENT_TRANSLATION is set to one,
|
||||||
|
//! additional output which requires the translation files translateObjects
|
||||||
|
//! and translateEvents (and their compiled source files)
|
||||||
|
#define FSFW_OBJ_EVENT_TRANSLATION 0
|
||||||
|
|
||||||
|
#if FSFW_OBJ_EVENT_TRANSLATION == 1
|
||||||
|
//! Specify whether info events are printed too.
|
||||||
|
#define FSFW_DEBUG_INFO 1
|
||||||
|
#include "objects/translateObjects.h"
|
||||||
|
#include "events/translateEvents.h"
|
||||||
|
#else
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//! When using the newlib nano library, C99 support for stdio facilities
|
||||||
|
//! will not be provided. This define should be set to 1 if this is the case.
|
||||||
|
#define FSFW_NO_C99_IO 1
|
||||||
|
|
||||||
|
//! Specify whether a special mode store is used for Subsystem components.
|
||||||
|
#define FSFW_USE_MODESTORE 0
|
||||||
|
|
||||||
|
//! Defines if the real time scheduler for linux should be used.
|
||||||
|
//! If set to 0, this will also disable priority settings for linux
|
||||||
|
//! as most systems will not allow to set nice values without privileges
|
||||||
|
//! For embedded linux system set this to 1.
|
||||||
|
//! If set to 1 the binary needs "cap_sys_nice=eip" privileges to run
|
||||||
|
#define FSFW_USE_REALTIME_FOR_LINUX 0
|
||||||
|
|
||||||
|
namespace fsfwconfig {
|
||||||
|
|
||||||
|
//! Default timestamp size. The default timestamp will be an seven byte CDC short timestamp.
|
||||||
|
static constexpr uint8_t FSFW_MISSION_TIMESTAMP_SIZE = 7;
|
||||||
|
|
||||||
|
//! Configure the allocated pool sizes for the event manager.
|
||||||
|
static constexpr size_t FSFW_EVENTMGMR_MATCHTREE_NODES = 240;
|
||||||
|
static constexpr size_t FSFW_EVENTMGMT_EVENTIDMATCHERS = 120;
|
||||||
|
static constexpr size_t FSFW_EVENTMGMR_RANGEMATCHERS = 120;
|
||||||
|
|
||||||
|
//! Defines the FIFO depth of each commanding service base which
|
||||||
|
//! also determines how many commands a CSB service can handle in one cycle
|
||||||
|
//! simultaneously. This will increase the required RAM for
|
||||||
|
//! each CSB service !
|
||||||
|
static constexpr uint8_t FSFW_CSB_FIFO_DEPTH = 6;
|
||||||
|
|
||||||
|
static constexpr size_t FSFW_PRINT_BUFFER_SIZE = 124;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* CONFIG_FSFWCONFIG_H_ */
|
25
bsp_hosted/fsfwconfig/OBSWConfig.h
Normal file
25
bsp_hosted/fsfwconfig/OBSWConfig.h
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
/**
|
||||||
|
* @brief This file can be used to add preprocessor define for conditional
|
||||||
|
* code inclusion exclusion or various other project constants and
|
||||||
|
* properties in one place.
|
||||||
|
*/
|
||||||
|
#ifndef FSFWCONFIG_OBSWCONFIG_H_
|
||||||
|
#define FSFWCONFIG_OBSWCONFIG_H_
|
||||||
|
|
||||||
|
#include <commonConfig.h>
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
|
||||||
|
#include "events/subsystemIdRanges.h"
|
||||||
|
#include "objects/systemObjectList.h"
|
||||||
|
|
||||||
|
namespace config {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Add mission configuration flags here */
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* FSFWCONFIG_OBSWCONFIG_H_ */
|
11
bsp_hosted/fsfwconfig/events/subsystemIdRanges.h
Normal file
11
bsp_hosted/fsfwconfig/events/subsystemIdRanges.h
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
#ifndef FSFWCONFIG_TMTC_SUBSYSTEMIDRANGES_H_
|
||||||
|
#define FSFWCONFIG_TMTC_SUBSYSTEMIDRANGES_H_
|
||||||
|
|
||||||
|
#include <commonConfig.h>
|
||||||
|
|
||||||
|
namespace SUBSYSTEM_ID {
|
||||||
|
enum subsystemId: uint8_t {
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* FSFWCONFIG_TMTC_SUBSYSTEMIDRANGES_H_ */
|
8
bsp_hosted/fsfwconfig/fsfwconfig.mk
Normal file
8
bsp_hosted/fsfwconfig/fsfwconfig.mk
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
CXXSRC += $(wildcard $(CURRENTPATH)/datapool/*.cpp)
|
||||||
|
CXXSRC += $(wildcard $(CURRENTPATH)/events/*.cpp)
|
||||||
|
CXXSRC += $(wildcard $(CURRENTPATH)/ipc/*.cpp)
|
||||||
|
CXXSRC += $(wildcard $(CURRENTPATH)/objects/*.cpp)
|
||||||
|
CXXSRC += $(wildcard $(CURRENTPATH)/pollingsequence/*.cpp)
|
||||||
|
|
||||||
|
INCLUDES += $(CURRENTPATH)
|
||||||
|
INCLUDES += $(CURRENTPATH)/events
|
11
bsp_hosted/fsfwconfig/ipc/missionMessageTypes.cpp
Normal file
11
bsp_hosted/fsfwconfig/ipc/missionMessageTypes.cpp
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
#include "missionMessageTypes.h"
|
||||||
|
#include <fsfw/ipc/CommandMessage.h>
|
||||||
|
#include <fsfw/ipc/CommandMessageCleaner.h>
|
||||||
|
|
||||||
|
void messagetypes::clearMissionMessage(CommandMessage* message) {
|
||||||
|
switch((message->getMessageType())) {
|
||||||
|
default:
|
||||||
|
message->setCommand(CommandMessage::CMD_NONE);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
19
bsp_hosted/fsfwconfig/ipc/missionMessageTypes.h
Normal file
19
bsp_hosted/fsfwconfig/ipc/missionMessageTypes.h
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
#ifndef FSFWCONFIG_IPC_MISSIONMESSAGETYPES_H_
|
||||||
|
#define FSFWCONFIG_IPC_MISSIONMESSAGETYPES_H_
|
||||||
|
|
||||||
|
#include <fsfw/ipc/FwMessageTypes.h>
|
||||||
|
|
||||||
|
class CommandMessage;
|
||||||
|
|
||||||
|
namespace messagetypes {
|
||||||
|
/* First type must have number MESSAGE_TYPE::FW_MESSAGES_COUNT! */
|
||||||
|
/* Remember to add new message types to the clearMissionMessage function below! */
|
||||||
|
enum MISSION_MESSAGE_TYPE {
|
||||||
|
COSTUM_MESSAGE = FW_MESSAGES_COUNT,
|
||||||
|
};
|
||||||
|
|
||||||
|
void clearMissionMessage(CommandMessage* message);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* FSFWCONFIG_IPC_MISSIONMESSAGETYPES_H_ */
|
16
bsp_hosted/fsfwconfig/objects/systemObjectList.h
Normal file
16
bsp_hosted/fsfwconfig/objects/systemObjectList.h
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
#ifndef FSFWCONFIG_OBJECTS_SYSTEMOBJECTLIST_H_
|
||||||
|
#define FSFWCONFIG_OBJECTS_SYSTEMOBJECTLIST_H_
|
||||||
|
|
||||||
|
#include <commonSystemObjects.h>
|
||||||
|
|
||||||
|
namespace objects {
|
||||||
|
enum mission_objects {
|
||||||
|
/* 0x62 ('b') Board and mission specific objects */
|
||||||
|
UDP_BRIDGE = 0x62000300,
|
||||||
|
UDP_POLLING_TASK = 0x62000400,
|
||||||
|
/* Generic name for FSFW static ID setter */
|
||||||
|
DOWNLINK_DESTINATION = UDP_BRIDGE
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* FSFWCONFIG_OBJECTS_SYSTEMOBJECTLIST_H_ */
|
@ -0,0 +1,5 @@
|
|||||||
|
/**
|
||||||
|
* Add polling sequence initialization which are not common to every BSP here.
|
||||||
|
*/
|
||||||
|
#include "pollingSequenceFactory.h"
|
||||||
|
|
@ -0,0 +1,14 @@
|
|||||||
|
#ifndef POLLINGSEQUENCE_POLLINGSEQUENCFACTORY_H_
|
||||||
|
#define POLLINGSEQUENCE_POLLINGSEQUENCFACTORY_H_
|
||||||
|
|
||||||
|
#include <bsp_hosted/fsfwconfig/OBSWConfig.h>
|
||||||
|
#include <fsfw/returnvalues/HasReturnvaluesIF.h>
|
||||||
|
|
||||||
|
class FixedTimeslotTaskIF;
|
||||||
|
|
||||||
|
namespace pst {
|
||||||
|
ReturnValue_t pollingSequenceExamples(FixedTimeslotTaskIF *thisSequence);
|
||||||
|
ReturnValue_t pollingSequenceDevices(FixedTimeslotTaskIF* thisSequence);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* POLLINGSEQUENCE_POLLINGSEQUENCFACTORY_H_ */
|
12
bsp_hosted/fsfwconfig/returnvalues/classIds.h
Normal file
12
bsp_hosted/fsfwconfig/returnvalues/classIds.h
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
#ifndef FSFWCONFIG_RETURNVALUES_CLASSIDS_H_
|
||||||
|
#define FSFWCONFIG_RETURNVALUES_CLASSIDS_H_
|
||||||
|
|
||||||
|
#include <commonConfig.h>
|
||||||
|
|
||||||
|
namespace CLASS_ID {
|
||||||
|
enum classIds: uint8_t {
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* FSFWCONFIG_RETURNVALUES_CLASSIDS_H_ */
|
11
bsp_hosted/fsfwconfig/tmtc/apid.h
Normal file
11
bsp_hosted/fsfwconfig/tmtc/apid.h
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
#ifndef FSFWCONFIG_TMTC_APID_H_
|
||||||
|
#define FSFWCONFIG_TMTC_APID_H_
|
||||||
|
|
||||||
|
#include <cstdint>
|
||||||
|
#include <commonConfig.h>
|
||||||
|
|
||||||
|
namespace apid {
|
||||||
|
static const uint16_t APID = COMMON_APID;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* FSFWCONFIG_TMTC_APID_H_ */
|
7
bsp_hosted/fsfwconfig/tmtc/pusIds.h
Normal file
7
bsp_hosted/fsfwconfig/tmtc/pusIds.h
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
#ifndef FSFWCONFIG_TMTC_PUSIDS_H_
|
||||||
|
#define FSFWCONFIG_TMTC_PUSIDS_H_
|
||||||
|
|
||||||
|
#include <commonConfig.h>
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* FSFWCONFIG_TMTC_PUSIDS_H_ */
|
69
bsp_hosted/main.cpp
Normal file
69
bsp_hosted/main.cpp
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
#include <bsp_hosted/core/InitMission.h>
|
||||||
|
#include <bsp_hosted/core/ObjectFactory.h>
|
||||||
|
|
||||||
|
#include <test/MutexExample.h>
|
||||||
|
#include <common/utility/utility.h>
|
||||||
|
#include <mission/utility/PusPacketCreator.h>
|
||||||
|
|
||||||
|
#include <fsfw/objectmanager/ObjectManager.h>
|
||||||
|
#include <fsfw/serviceinterface/ServiceInterface.h>
|
||||||
|
#include <fsfw/tasks/TaskFactory.h>
|
||||||
|
|
||||||
|
#include <chrono>
|
||||||
|
|
||||||
|
#ifdef WIN32
|
||||||
|
static const char* COMPILE_PRINTOUT = "Windows";
|
||||||
|
#elif LINUX
|
||||||
|
static const char* COMPILE_PRINTOUT = "Linux";
|
||||||
|
#else
|
||||||
|
static const char* COMPILE_PRINTOUT = "unknown OS";
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
||||||
|
ServiceInterfaceStream sif::debug("DEBUG", false);
|
||||||
|
ServiceInterfaceStream sif::info("INFO", false);
|
||||||
|
ServiceInterfaceStream sif::warning("WARNING", false);
|
||||||
|
ServiceInterfaceStream sif::error("ERROR", false, true, true);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
ObjectManagerIF *objectManager = nullptr;
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
|
||||||
|
utility::commonInitPrint("Hosted", COMPILE_PRINTOUT);
|
||||||
|
|
||||||
|
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
||||||
|
sif::info << "Producing system objects.." << std::endl;
|
||||||
|
#else
|
||||||
|
sif::printInfo("Producing system objects..\n");
|
||||||
|
#endif /* FSFW_CPP_OSTREAM_ENABLED == 1 */
|
||||||
|
|
||||||
|
objectManager = new ObjectManager(ObjectFactory::produce);
|
||||||
|
|
||||||
|
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
||||||
|
sif::info << "Objects created successfully.." << std::endl;
|
||||||
|
sif::info << "Initializing objects.." << std::endl;
|
||||||
|
#else
|
||||||
|
sif::printInfo("Objects created successfully..\n");
|
||||||
|
#endif /* FSFW_CPP_OSTREAM_ENABLED == 1 */
|
||||||
|
|
||||||
|
objectManager->initialize();
|
||||||
|
|
||||||
|
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
||||||
|
sif::info << "Creating tasks.." << std::endl;
|
||||||
|
#else
|
||||||
|
sif::printInfo("Creating tasks..\n");
|
||||||
|
#endif /* FSFW_CPP_OSTREAM_ENABLED == 1 */
|
||||||
|
|
||||||
|
InitMission::createTasks();
|
||||||
|
|
||||||
|
MutexExample::example();
|
||||||
|
PusPacketCreator::createPusPacketAndPrint();
|
||||||
|
|
||||||
|
/* Permanent loop. */
|
||||||
|
for(;;) {
|
||||||
|
/* Sleep main thread, not needed anymore. */
|
||||||
|
TaskFactory::delayTask(5000);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
7
bsp_hosted/utility/CMakeLists.txt
Normal file
7
bsp_hosted/utility/CMakeLists.txt
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
target_sources(${TARGET_NAME}
|
||||||
|
PUBLIC
|
||||||
|
printChar.c
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
13
bsp_hosted/utility/printChar.c
Normal file
13
bsp_hosted/utility/printChar.c
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
|
||||||
|
|
||||||
|
void printChar(const char* character, bool errStream) {
|
||||||
|
if(errStream) {
|
||||||
|
fprintf(stderr, "%c", *character);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
printf("%c", *character);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
14
bsp_linux/CMakeLists.txt
Normal file
14
bsp_linux/CMakeLists.txt
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
target_sources(${TARGET_NAME}
|
||||||
|
PRIVATE
|
||||||
|
main.cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
add_subdirectory(core)
|
||||||
|
add_subdirectory(fsfwconfig)
|
||||||
|
add_subdirectory(utility)
|
||||||
|
add_subdirectory(test)
|
||||||
|
|
||||||
|
target_include_directories(${TARGET_NAME}
|
||||||
|
PRIVATE
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}
|
||||||
|
)
|
5
bsp_linux/core/CMakeLists.txt
Normal file
5
bsp_linux/core/CMakeLists.txt
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
target_sources(${TARGET_NAME}
|
||||||
|
PRIVATE
|
||||||
|
InitMission.cpp
|
||||||
|
ObjectFactory.cpp
|
||||||
|
)
|
248
bsp_linux/core/InitMission.cpp
Normal file
248
bsp_linux/core/InitMission.cpp
Normal file
@ -0,0 +1,248 @@
|
|||||||
|
#include "InitMission.h"
|
||||||
|
#include <OBSWConfig.h>
|
||||||
|
|
||||||
|
#include <bsp_linux/fsfwconfig/objects/systemObjectList.h>
|
||||||
|
#include <bsp_linux/fsfwconfig/pollingsequence/pollingSequenceFactory.h>
|
||||||
|
|
||||||
|
#include <mission/utility/TaskCreation.h>
|
||||||
|
|
||||||
|
#include <fsfw/returnvalues/HasReturnvaluesIF.h>
|
||||||
|
#include <fsfw/serviceinterface/ServiceInterface.h>
|
||||||
|
#include <fsfw/tasks/FixedTimeslotTaskIF.h>
|
||||||
|
#include <fsfw/tasks/PeriodicTaskIF.h>
|
||||||
|
#include <fsfw/tasks/TaskFactory.h>
|
||||||
|
|
||||||
|
#include <fsfw/ipc/MessageQueueSenderIF.h>
|
||||||
|
#include <fsfw/ipc/CommandMessage.h>
|
||||||
|
#include <fsfw/modes/ModeMessage.h>
|
||||||
|
#include <fsfw/devicehandlers/DeviceHandlerIF.h>
|
||||||
|
#include <mission/assemblies/TestAssembly.h>
|
||||||
|
|
||||||
|
void InitMission::createTasks() {
|
||||||
|
TaskFactory* taskFactory = TaskFactory::instance();
|
||||||
|
if(taskFactory == nullptr) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if OBSW_ADD_CORE_COMPONENTS == 1
|
||||||
|
/* TMTC Distribution */
|
||||||
|
PeriodicTaskIF* distributerTask = taskFactory->
|
||||||
|
createPeriodicTask("DIST", 40, PeriodicTaskIF::MINIMUM_STACK_SIZE, 0.2, nullptr);
|
||||||
|
ReturnValue_t result = distributerTask->addComponent(objects::CCSDS_DISTRIBUTOR);
|
||||||
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
|
task::printInitError("CCSDS distributor", objects::CCSDS_DISTRIBUTOR);
|
||||||
|
}
|
||||||
|
result = distributerTask->addComponent(objects::PUS_DISTRIBUTOR);
|
||||||
|
if (result!=HasReturnvaluesIF::RETURN_OK) {
|
||||||
|
task::printInitError("PUS distributor", objects::PUS_DISTRIBUTOR);
|
||||||
|
}
|
||||||
|
result = distributerTask->addComponent(objects::TM_FUNNEL);
|
||||||
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
|
task::printInitError("TM funnel", objects::TM_FUNNEL);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* UDP bridge */
|
||||||
|
PeriodicTaskIF* udpBridgeTask = taskFactory->createPeriodicTask(
|
||||||
|
"UDP_UNIX_BRIDGE", 50, PeriodicTaskIF::MINIMUM_STACK_SIZE, 0.2, nullptr);
|
||||||
|
result = udpBridgeTask->addComponent(objects::UDP_BRIDGE);
|
||||||
|
if(result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
|
task::printInitError("UDP bridge", objects::UDP_BRIDGE);
|
||||||
|
}
|
||||||
|
/* UDP polling task */
|
||||||
|
PeriodicTaskIF* udpPollingTask = taskFactory->createPeriodicTask(
|
||||||
|
"UDP_POLLING", 80, PeriodicTaskIF::MINIMUM_STACK_SIZE, 0.1, nullptr);
|
||||||
|
result = udpPollingTask->addComponent(objects::UDP_POLLING_TASK);
|
||||||
|
if(result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
|
task::printInitError("UDP polling", objects::UDP_POLLING_TASK);
|
||||||
|
}
|
||||||
|
|
||||||
|
PeriodicTaskIF* eventTask = taskFactory->createPeriodicTask(
|
||||||
|
"EVENT_MGMT", 40, PeriodicTaskIF::MINIMUM_STACK_SIZE, 0.1, nullptr);
|
||||||
|
result = eventTask->addComponent(objects::EVENT_MANAGER);
|
||||||
|
if(result != HasReturnvaluesIF::RETURN_OK){
|
||||||
|
task::printInitError("Event Manager", objects::EVENT_MANAGER);
|
||||||
|
}
|
||||||
|
#endif /* OBSW_ADD_CORE_COMPONENTS == 1 */
|
||||||
|
|
||||||
|
#if OBSW_ADD_TASK_EXAMPLE == 1
|
||||||
|
FixedTimeslotTaskIF* timeslotDemoTask = taskFactory->createFixedTimeslotTask
|
||||||
|
("PST_TASK", 50, PeriodicTaskIF::MINIMUM_STACK_SIZE, 0.5, nullptr);
|
||||||
|
result = pst::pollingSequenceExamples(timeslotDemoTask);
|
||||||
|
if(result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
|
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
||||||
|
sif::error << "InitMission::createTasks: Timeslot demo task"
|
||||||
|
<<" initialization failed!" << std::endl;
|
||||||
|
#else
|
||||||
|
sif::printError("InitMission::createTasks: Timeslot demo task"
|
||||||
|
" initialization failed!\n");
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
PeriodicTaskIF* readerTask = taskFactory->
|
||||||
|
createPeriodicTask("READER_TASK", 40,
|
||||||
|
PeriodicTaskIF::MINIMUM_STACK_SIZE, 1.0, nullptr);
|
||||||
|
result = readerTask->addComponent(objects::TEST_DUMMY_4);
|
||||||
|
if(result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
|
task::printInitError("Dummy 4", objects::TEST_DUMMY_4);
|
||||||
|
}
|
||||||
|
#endif /* OBSW_ADD_TASK_EXAMPLE == 1 */
|
||||||
|
|
||||||
|
#if OBSW_ADD_PUS_STACK == 1
|
||||||
|
/* PUS Services */
|
||||||
|
PeriodicTaskIF* pusVerification = taskFactory->createPeriodicTask(
|
||||||
|
"PUS_VERIF_1", 45, PeriodicTaskIF::MINIMUM_STACK_SIZE, 0.2, nullptr);
|
||||||
|
result = pusVerification->addComponent(objects::PUS_SERVICE_1_VERIFICATION);
|
||||||
|
if(result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
|
task::printInitError("PUS 1", objects::PUS_SERVICE_1_VERIFICATION);
|
||||||
|
}
|
||||||
|
|
||||||
|
PeriodicTaskIF* pusHighPrio = taskFactory->createPeriodicTask(
|
||||||
|
"PUS_HIGH_PRIO", 50, PeriodicTaskIF::MINIMUM_STACK_SIZE, 0.2, nullptr);
|
||||||
|
result = pusHighPrio->addComponent(objects::PUS_SERVICE_2_DEVICE_ACCESS);
|
||||||
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
|
task::printInitError("PUS 2", objects::PUS_SERVICE_2_DEVICE_ACCESS);
|
||||||
|
}
|
||||||
|
result = pusHighPrio->addComponent(objects::PUS_SERVICE_5_EVENT_REPORTING);
|
||||||
|
if(result != HasReturnvaluesIF::RETURN_OK){
|
||||||
|
task::printInitError("PUS 5",objects::PUS_SERVICE_5_EVENT_REPORTING);
|
||||||
|
}
|
||||||
|
result = pusHighPrio->addComponent(objects::PUS_SERVICE_9_TIME_MGMT);
|
||||||
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
|
task::printInitError("PUS 9", objects::PUS_SERVICE_9_TIME_MGMT);
|
||||||
|
}
|
||||||
|
|
||||||
|
PeriodicTaskIF* pusMedPrio = taskFactory->createPeriodicTask(
|
||||||
|
"PUS_MED_PRIO", 40, PeriodicTaskIF::MINIMUM_STACK_SIZE, 0.8, nullptr);
|
||||||
|
result = pusMedPrio->addComponent(objects::PUS_SERVICE_8_FUNCTION_MGMT);
|
||||||
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
|
task::printInitError("PUS 8", objects::PUS_SERVICE_8_FUNCTION_MGMT);
|
||||||
|
}
|
||||||
|
result = pusMedPrio->addComponent(objects::PUS_SERVICE_20_PARAMETERS);
|
||||||
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
|
task::printInitError("PUS 20", objects::PUS_SERVICE_20_PARAMETERS);
|
||||||
|
}
|
||||||
|
result = pusMedPrio->addComponent(objects::PUS_SERVICE_200_MODE_MGMT);
|
||||||
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
|
task::printInitError("PUS 200", objects::PUS_SERVICE_200_MODE_MGMT);
|
||||||
|
}
|
||||||
|
|
||||||
|
PeriodicTaskIF* pusLowPrio = taskFactory->createPeriodicTask(
|
||||||
|
"PUS_LOW_PRIO", 30, PeriodicTaskIF::MINIMUM_STACK_SIZE, 1.6, nullptr);
|
||||||
|
result = pusLowPrio->addComponent(objects::PUS_SERVICE_17_TEST);
|
||||||
|
if(result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
|
task::printInitError("PUS 17", objects::PUS_SERVICE_17_TEST);
|
||||||
|
}
|
||||||
|
#endif /* OBSW_ADD_PUS_STACK == 1 */
|
||||||
|
|
||||||
|
#if OBSW_ADD_DEVICE_HANDLER_DEMO == 1
|
||||||
|
FixedTimeslotTaskIF* testDeviceTask = taskFactory->createFixedTimeslotTask(
|
||||||
|
"PST_TEST_TASK", 40, PeriodicTaskIF::MINIMUM_STACK_SIZE, 1.0, nullptr);
|
||||||
|
result = pst::pollingSequenceDevices(testDeviceTask);
|
||||||
|
if(result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
|
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
||||||
|
sif::error << "InitMission::createTasks: Test PST initialization failed!" << std::endl;
|
||||||
|
#else
|
||||||
|
sif::printError("InitMission::createTasks: Test PST initialization failed!\n\r");
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
PeriodicTaskIF* assemblyTask = taskFactory->createPeriodicTask("ASS_TASK", 30, PeriodicTaskIF::MINIMUM_STACK_SIZE, 2.0, nullptr);
|
||||||
|
if(assemblyTask == nullptr){
|
||||||
|
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
||||||
|
sif::error << "InitMission::createTasks: Test Assembly Task creation failed!" << std::endl;
|
||||||
|
#else
|
||||||
|
sif::printError("InitMission::createTasks: Test Assembly Task creation failed!\n\r");
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
result = assemblyTask->addComponent(objects::TEST_ASSEMBLY);
|
||||||
|
if(result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
|
if(assemblyTask == nullptr){
|
||||||
|
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
||||||
|
sif::error << "InitMission::createTasks: Test Assembly Task adding failed!" << std::endl;
|
||||||
|
#else
|
||||||
|
sif::printError("InitMission::createTasks: Test Assembly Task adding failed!\n\r");
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif /* OBSW_ADD_DEVICE_HANDLER_DEMO == 1 */
|
||||||
|
|
||||||
|
#if OBSW_ADD_CONTROLLER_DEMO == 1
|
||||||
|
PeriodicTaskIF* controllerTask = taskFactory->createPeriodicTask(
|
||||||
|
"TEST_CTRL", 45, PeriodicTaskIF::MINIMUM_STACK_SIZE, 0.8, nullptr);
|
||||||
|
result = controllerTask->addComponent(objects::TEST_CONTROLLER);
|
||||||
|
if(result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
|
task::printInitError("Controller Task", objects::TEST_CONTROLLER);
|
||||||
|
}
|
||||||
|
#endif /* OBSW_ADD_CONTROLLER_DEMO == 1 */
|
||||||
|
|
||||||
|
PeriodicTaskIF* testTask = taskFactory->createPeriodicTask(
|
||||||
|
"TEST", 15, PeriodicTaskIF::MINIMUM_STACK_SIZE, 1.0, nullptr);
|
||||||
|
result = testTask->addComponent(objects::TEST_TASK);
|
||||||
|
if(result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
|
task::printInitError("Test Task", objects::TEST_TASK);
|
||||||
|
}
|
||||||
|
|
||||||
|
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
||||||
|
sif::info << "Starting tasks.." << std::endl;
|
||||||
|
#else
|
||||||
|
sif::printInfo("Starting tasks..\n");
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if OBSW_ADD_CORE_COMPONENTS == 1
|
||||||
|
distributerTask->startTask();
|
||||||
|
udpBridgeTask->startTask();
|
||||||
|
udpPollingTask->startTask();
|
||||||
|
eventTask->startTask();
|
||||||
|
#endif /* OBSW_ADD_CORE_COMPONENTS == 1 */
|
||||||
|
|
||||||
|
#if OBSW_ADD_PUS_STACK == 1
|
||||||
|
pusVerification->startTask();
|
||||||
|
pusHighPrio->startTask();
|
||||||
|
pusMedPrio->startTask();
|
||||||
|
pusLowPrio->startTask();
|
||||||
|
#endif /* OBSW_ADD_PUS_STACK == 1 */
|
||||||
|
|
||||||
|
#if OBSW_ADD_TASK_EXAMPLE == 1
|
||||||
|
timeslotDemoTask->startTask();
|
||||||
|
readerTask->startTask();
|
||||||
|
#endif /* OBSW_ADD_TASK_EXAMPLE == 1 */
|
||||||
|
|
||||||
|
#if OBSW_ADD_DEVICE_HANDLER_DEMO == 1
|
||||||
|
testDeviceTask->startTask();
|
||||||
|
assemblyTask->startTask();
|
||||||
|
#endif /* OBSW_ADD_DEVICE_HANDLER_DEMO == 1 */
|
||||||
|
|
||||||
|
#if OBSW_ADD_CONTROLLER_DEMO == 1
|
||||||
|
controllerTask->startTask();
|
||||||
|
#endif /* OBSW_ADD_CONTROLLER_DEMO == 1 */
|
||||||
|
|
||||||
|
testTask->startTask();
|
||||||
|
|
||||||
|
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
||||||
|
sif::info << "Tasks started.." << std::endl;
|
||||||
|
#else
|
||||||
|
sif::printInfo("Tasks started..\n");
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#if OBSW_ADD_DEVICE_HANDLER_DEMO
|
||||||
|
HasModesIF* assembly = objectManager->get<HasModesIF>(objects::TEST_ASSEMBLY);
|
||||||
|
if (assembly == nullptr){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
||||||
|
sif::info << "Waiting 5 Seconds and then command Test Assembly to Normal, Dual" << std::endl;
|
||||||
|
#else
|
||||||
|
sif::printInfo("Waiting 5 Seconds and then command Test Assembly to Normal, Dual \n");
|
||||||
|
#endif
|
||||||
|
|
||||||
|
TaskFactory::delayTask(5000);
|
||||||
|
CommandMessage modeMessage;
|
||||||
|
ModeMessage::setModeMessage(&modeMessage, ModeMessage::CMD_MODE_COMMAND, DeviceHandlerIF::MODE_NORMAL, TestAssembly::submodes::DUAL);
|
||||||
|
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
||||||
|
sif::info << "Commanding Test Assembly to Normal, Dual" << std::endl;
|
||||||
|
#else
|
||||||
|
sif::printInfo("Commanding Test Assembly to Normal, Dual \n");
|
||||||
|
#endif
|
||||||
|
MessageQueueSenderIF::sendMessage(assembly->getCommandQueue(), &modeMessage, MessageQueueIF::NO_QUEUE);
|
||||||
|
#endif
|
||||||
|
}
|
8
bsp_linux/core/InitMission.h
Normal file
8
bsp_linux/core/InitMission.h
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
#ifndef MISSION_CORE_INITMISSION_H_
|
||||||
|
#define MISSION_CORE_INITMISSION_H_
|
||||||
|
|
||||||
|
namespace InitMission {
|
||||||
|
void createTasks();
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* MISSION_CORE_INITMISSION_H_ */
|
59
bsp_linux/core/ObjectFactory.cpp
Normal file
59
bsp_linux/core/ObjectFactory.cpp
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
#include <OBSWConfig.h>
|
||||||
|
|
||||||
|
#include <bsp_linux/core/ObjectFactory.h>
|
||||||
|
#include <bsp_linux/fsfwconfig/objects/systemObjectList.h>
|
||||||
|
#include <bsp_linux/fsfwconfig/OBSWConfig.h>
|
||||||
|
#include <bsp_linux/fsfwconfig/tmtc/apid.h>
|
||||||
|
#include <bsp_linux/fsfwconfig/tmtc/pusIds.h>
|
||||||
|
|
||||||
|
#include <test/TestTask.h>
|
||||||
|
|
||||||
|
#include <mission/utility/TmFunnel.h>
|
||||||
|
#include <mission/core/GenericFactory.h>
|
||||||
|
|
||||||
|
#include <fsfw/datapoollocal/LocalDataPoolManager.h>
|
||||||
|
#include <fsfw/monitoring/MonitoringMessageContent.h>
|
||||||
|
#include <fsfw/storagemanager/PoolManager.h>
|
||||||
|
#include <fsfw/tmtcpacket/pus/TmPacketStored.h>
|
||||||
|
#include <fsfw/tmtcservices/CommandingServiceBase.h>
|
||||||
|
#include <fsfw/tmtcservices/PusServiceBase.h>
|
||||||
|
#include <fsfw/osal/common/UdpTcPollingTask.h>
|
||||||
|
#include <fsfw/osal/common/UdpTmTcBridge.h>
|
||||||
|
|
||||||
|
|
||||||
|
void ObjectFactory::produce() {
|
||||||
|
/* Located inside the GenericFactory source file */
|
||||||
|
Factory::setStaticFrameworkObjectIds();
|
||||||
|
|
||||||
|
#if OBSW_ADD_CORE_COMPONENTS == 1
|
||||||
|
{
|
||||||
|
LocalPool::LocalPoolConfig poolCfg = {
|
||||||
|
{16, 100},{32, 50}, {64, 25}, {128,15}, {1024, 5}
|
||||||
|
};
|
||||||
|
new PoolManager(objects::TC_STORE, poolCfg);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
LocalPool::LocalPoolConfig poolCfg = {
|
||||||
|
{16, 100},{32, 50}, {64, 25}, {128,15}, {1024, 5}
|
||||||
|
};
|
||||||
|
new PoolManager(objects::TM_STORE, poolCfg);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
LocalPool::LocalPoolConfig poolCfg = {
|
||||||
|
{16, 100},{32, 50}, {64, 25}, {128,15}, {1024, 5}
|
||||||
|
};
|
||||||
|
new PoolManager(objects::IPC_STORE, poolCfg);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* TMTC Reception via UDP socket */
|
||||||
|
auto tmtcBridge = new UdpTmTcBridge(objects::UDP_BRIDGE, objects::CCSDS_DISTRIBUTOR,
|
||||||
|
objects::TM_STORE, objects::TC_STORE);
|
||||||
|
tmtcBridge->setMaxNumberOfPacketsStored(20);
|
||||||
|
new UdpTcPollingTask(objects::UDP_POLLING_TASK, objects::UDP_BRIDGE);
|
||||||
|
#endif /* OBSW_ADD_CORE_COMPONENTS == 1 */
|
||||||
|
|
||||||
|
ObjectFactory::produceGenericObjects();
|
||||||
|
new TestTask(objects::TEST_TASK, false);
|
||||||
|
}
|
10
bsp_linux/core/ObjectFactory.h
Normal file
10
bsp_linux/core/ObjectFactory.h
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
#ifndef MISSION_CORE_OBJECTFACTORY_H_
|
||||||
|
#define MISSION_CORE_OBJECTFACTORY_H_
|
||||||
|
|
||||||
|
|
||||||
|
namespace ObjectFactory {
|
||||||
|
void setStatics();
|
||||||
|
void produce();
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* MISSION_CORE_OBJECTFACTORY_H_ */
|
8
bsp_linux/fsfwconfig/CMakeLists.txt
Normal file
8
bsp_linux/fsfwconfig/CMakeLists.txt
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
target_sources(${TARGET_NAME} PRIVATE
|
||||||
|
ipc/missionMessageTypes.cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
# Add include paths for the executable
|
||||||
|
target_include_directories(${TARGET_NAME} PUBLIC
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}
|
||||||
|
)
|
72
bsp_linux/fsfwconfig/FSFWConfig.h
Normal file
72
bsp_linux/fsfwconfig/FSFWConfig.h
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
#ifndef CONFIG_FSFWCONFIG_H_
|
||||||
|
#define CONFIG_FSFWCONFIG_H_
|
||||||
|
|
||||||
|
#include <cstddef>
|
||||||
|
#include <cstdint>
|
||||||
|
|
||||||
|
//! Used to determine whether C++ ostreams are used which can increase
|
||||||
|
//! the binary size significantly. If this is disabled,
|
||||||
|
//! the C stdio functions can be used alternatively
|
||||||
|
#define FSFW_CPP_OSTREAM_ENABLED 1
|
||||||
|
|
||||||
|
//! More FSFW related printouts depending on level. Useful for development.
|
||||||
|
#define FSFW_VERBOSE_LEVEL 1
|
||||||
|
|
||||||
|
//! Can be used to completely disable printouts, even the C stdio ones.
|
||||||
|
#if FSFW_CPP_OSTREAM_ENABLED == 0 && FSFW_VERBOSE_LEVEL == 0
|
||||||
|
#define FSFW_DISABLE_PRINTOUT 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define FSFW_USE_PUS_C_TELEMETRY 1
|
||||||
|
|
||||||
|
//! Can be used to disable the ANSI color sequences for C stdio.
|
||||||
|
#define FSFW_COLORED_OUTPUT 1
|
||||||
|
|
||||||
|
//! If FSFW_OBJ_EVENT_TRANSLATION is set to one,
|
||||||
|
//! additional output which requires the translation files translateObjects
|
||||||
|
//! and translateEvents (and their compiled source files)
|
||||||
|
#define FSFW_OBJ_EVENT_TRANSLATION 0
|
||||||
|
|
||||||
|
#if FSFW_OBJ_EVENT_TRANSLATION == 1
|
||||||
|
//! Specify whether info events are printed too.
|
||||||
|
#define FSFW_DEBUG_INFO 1
|
||||||
|
#include "objects/translateObjects.h"
|
||||||
|
#include "events/translateEvents.h"
|
||||||
|
#else
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//! When using the newlib nano library, C99 support for stdio facilities
|
||||||
|
//! will not be provided. This define should be set to 1 if this is the case.
|
||||||
|
#define FSFW_NO_C99_IO 1
|
||||||
|
|
||||||
|
//! Specify whether a special mode store is used for Subsystem components.
|
||||||
|
#define FSFW_USE_MODESTORE 0
|
||||||
|
|
||||||
|
//! Defines if the real time scheduler for linux should be used.
|
||||||
|
//! If set to 0, this will also disable priority settings for linux
|
||||||
|
//! as most systems will not allow to set nice values without privileges
|
||||||
|
//! For embedded linux system set this to 1.
|
||||||
|
//! If set to 1 the binary needs "cap_sys_nice=eip" privileges to run
|
||||||
|
#define FSFW_USE_REALTIME_FOR_LINUX 0
|
||||||
|
|
||||||
|
namespace fsfwconfig {
|
||||||
|
|
||||||
|
//! Default timestamp size. The default timestamp will be an seven byte CDC short timestamp.
|
||||||
|
static constexpr uint8_t FSFW_MISSION_TIMESTAMP_SIZE = 7;
|
||||||
|
|
||||||
|
//! Configure the allocated pool sizes for the event manager.
|
||||||
|
static constexpr size_t FSFW_EVENTMGMR_MATCHTREE_NODES = 240;
|
||||||
|
static constexpr size_t FSFW_EVENTMGMT_EVENTIDMATCHERS = 120;
|
||||||
|
static constexpr size_t FSFW_EVENTMGMR_RANGEMATCHERS = 120;
|
||||||
|
|
||||||
|
//! Defines the FIFO depth of each commanding service base which
|
||||||
|
//! also determines how many commands a CSB service can handle in one cycle
|
||||||
|
//! simultaneously. This will increase the required RAM for
|
||||||
|
//! each CSB service !
|
||||||
|
static constexpr uint8_t FSFW_CSB_FIFO_DEPTH = 6;
|
||||||
|
|
||||||
|
static constexpr size_t FSFW_PRINT_BUFFER_SIZE = 124;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* CONFIG_FSFWCONFIG_H_ */
|
25
bsp_linux/fsfwconfig/OBSWConfig.h
Normal file
25
bsp_linux/fsfwconfig/OBSWConfig.h
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
/**
|
||||||
|
* @brief This file can be used to add preprocessor define for conditional
|
||||||
|
* code inclusion exclusion or various other project constants and
|
||||||
|
* properties in one place.
|
||||||
|
*/
|
||||||
|
#ifndef FSFWCONFIG_OBSWCONFIG_H_
|
||||||
|
#define FSFWCONFIG_OBSWCONFIG_H_
|
||||||
|
|
||||||
|
#include <commonConfig.h>
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
|
||||||
|
#include "events/subsystemIdRanges.h"
|
||||||
|
#include "objects/systemObjectList.h"
|
||||||
|
|
||||||
|
namespace config {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Add mission configuration flags here */
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* FSFWCONFIG_OBSWCONFIG_H_ */
|
11
bsp_linux/fsfwconfig/events/subsystemIdRanges.h
Normal file
11
bsp_linux/fsfwconfig/events/subsystemIdRanges.h
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
#ifndef FSFWCONFIG_TMTC_SUBSYSTEMIDRANGES_H_
|
||||||
|
#define FSFWCONFIG_TMTC_SUBSYSTEMIDRANGES_H_
|
||||||
|
|
||||||
|
#include <commonConfig.h>
|
||||||
|
|
||||||
|
namespace SUBSYSTEM_ID {
|
||||||
|
enum subsystemId: uint8_t {
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* FSFWCONFIG_TMTC_SUBSYSTEMIDRANGES_H_ */
|
8
bsp_linux/fsfwconfig/fsfwconfig.mk
Normal file
8
bsp_linux/fsfwconfig/fsfwconfig.mk
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
CXXSRC += $(wildcard $(CURRENTPATH)/datapool/*.cpp)
|
||||||
|
CXXSRC += $(wildcard $(CURRENTPATH)/events/*.cpp)
|
||||||
|
CXXSRC += $(wildcard $(CURRENTPATH)/ipc/*.cpp)
|
||||||
|
CXXSRC += $(wildcard $(CURRENTPATH)/objects/*.cpp)
|
||||||
|
CXXSRC += $(wildcard $(CURRENTPATH)/pollingsequence/*.cpp)
|
||||||
|
|
||||||
|
INCLUDES += $(CURRENTPATH)
|
||||||
|
INCLUDES += $(CURRENTPATH)/events
|
11
bsp_linux/fsfwconfig/ipc/missionMessageTypes.cpp
Normal file
11
bsp_linux/fsfwconfig/ipc/missionMessageTypes.cpp
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
#include "missionMessageTypes.h"
|
||||||
|
#include <fsfw/ipc/CommandMessage.h>
|
||||||
|
#include <fsfw/ipc/CommandMessageCleaner.h>
|
||||||
|
|
||||||
|
void messagetypes::clearMissionMessage(CommandMessage* message) {
|
||||||
|
switch((message->getMessageType())) {
|
||||||
|
default:
|
||||||
|
message->setCommand(CommandMessage::CMD_NONE);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
19
bsp_linux/fsfwconfig/ipc/missionMessageTypes.h
Normal file
19
bsp_linux/fsfwconfig/ipc/missionMessageTypes.h
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
#ifndef FSFWCONFIG_IPC_MISSIONMESSAGETYPES_H_
|
||||||
|
#define FSFWCONFIG_IPC_MISSIONMESSAGETYPES_H_
|
||||||
|
|
||||||
|
#include <fsfw/ipc/FwMessageTypes.h>
|
||||||
|
|
||||||
|
class CommandMessage;
|
||||||
|
|
||||||
|
namespace messagetypes {
|
||||||
|
/* First type must have number MESSAGE_TYPE::FW_MESSAGES_COUNT! */
|
||||||
|
/* Remember to add new message types to the clearMissionMessage function below! */
|
||||||
|
enum MISSION_MESSAGE_TYPE {
|
||||||
|
COSTUM_MESSAGE = FW_MESSAGES_COUNT,
|
||||||
|
};
|
||||||
|
|
||||||
|
void clearMissionMessage(CommandMessage* message);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* FSFWCONFIG_IPC_MISSIONMESSAGETYPES_H_ */
|
17
bsp_linux/fsfwconfig/objects/systemObjectList.h
Normal file
17
bsp_linux/fsfwconfig/objects/systemObjectList.h
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
#ifndef FSFWCONFIG_OBJECTS_SYSTEMOBJECTLIST_H_
|
||||||
|
#define FSFWCONFIG_OBJECTS_SYSTEMOBJECTLIST_H_
|
||||||
|
|
||||||
|
#include <commonSystemObjects.h>
|
||||||
|
|
||||||
|
namespace objects {
|
||||||
|
enum mission_objects: object_id_t {
|
||||||
|
/* 0x62 ('b') Board and mission specific objects */
|
||||||
|
UDP_BRIDGE = 0x62000300,
|
||||||
|
UDP_POLLING_TASK = 0x62000400,
|
||||||
|
/* Generic name for FSFW static ID setter */
|
||||||
|
DOWNLINK_DESTINATION = UDP_BRIDGE,
|
||||||
|
LINUX_SPI_COM_IF = 0x63000001,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* FSFWCONFIG_OBJECTS_SYSTEMOBJECTLIST_H_ */
|
@ -0,0 +1,5 @@
|
|||||||
|
/**
|
||||||
|
* Add polling sequence initialization which are not common to every BSP here.
|
||||||
|
*/
|
||||||
|
#include "pollingSequenceFactory.h"
|
||||||
|
|
@ -0,0 +1,14 @@
|
|||||||
|
#ifndef POLLINGSEQUENCE_POLLINGSEQUENCFACTORY_H_
|
||||||
|
#define POLLINGSEQUENCE_POLLINGSEQUENCFACTORY_H_
|
||||||
|
|
||||||
|
#include <bsp_hosted/fsfwconfig/OBSWConfig.h>
|
||||||
|
#include <fsfw/returnvalues/HasReturnvaluesIF.h>
|
||||||
|
|
||||||
|
class FixedTimeslotTaskIF;
|
||||||
|
|
||||||
|
namespace pst {
|
||||||
|
ReturnValue_t pollingSequenceExamples(FixedTimeslotTaskIF *thisSequence);
|
||||||
|
ReturnValue_t pollingSequenceDevices(FixedTimeslotTaskIF* thisSequence);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* POLLINGSEQUENCE_POLLINGSEQUENCFACTORY_H_ */
|
14
bsp_linux/fsfwconfig/returnvalues/classIds.h
Normal file
14
bsp_linux/fsfwconfig/returnvalues/classIds.h
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
#ifndef FSFWCONFIG_RETURNVALUES_CLASSIDS_H_
|
||||||
|
#define FSFWCONFIG_RETURNVALUES_CLASSIDS_H_
|
||||||
|
|
||||||
|
#include <commonConfig.h>
|
||||||
|
|
||||||
|
namespace CLASS_ID {
|
||||||
|
enum classIds: uint8_t {
|
||||||
|
LINUX_LIBGPIO_IF = COMMON_CLASS_ID_COUNT + 1,
|
||||||
|
LINUX_SPI_COM_IF
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* FSFWCONFIG_RETURNVALUES_CLASSIDS_H_ */
|
11
bsp_linux/fsfwconfig/tmtc/apid.h
Normal file
11
bsp_linux/fsfwconfig/tmtc/apid.h
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
#ifndef FSFWCONFIG_TMTC_APID_H_
|
||||||
|
#define FSFWCONFIG_TMTC_APID_H_
|
||||||
|
|
||||||
|
#include <cstdint>
|
||||||
|
#include <commonConfig.h>
|
||||||
|
|
||||||
|
namespace apid {
|
||||||
|
static const uint16_t APID = COMMON_APID;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* FSFWCONFIG_TMTC_APID_H_ */
|
6
bsp_linux/fsfwconfig/tmtc/pusIds.h
Normal file
6
bsp_linux/fsfwconfig/tmtc/pusIds.h
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
#ifndef FSFWCONFIG_TMTC_PUSIDS_H_
|
||||||
|
#define FSFWCONFIG_TMTC_PUSIDS_H_
|
||||||
|
|
||||||
|
#include <commonConfig.h>
|
||||||
|
|
||||||
|
#endif /* FSFWCONFIG_TMTC_PUSIDS_H_ */
|
72
bsp_linux/main.cpp
Normal file
72
bsp_linux/main.cpp
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
#include <bsp_hosted/core/InitMission.h>
|
||||||
|
#include <bsp_hosted/core/ObjectFactory.h>
|
||||||
|
|
||||||
|
#include <test/MutexExample.h>
|
||||||
|
#include <mission/utility/PusPacketCreator.h>
|
||||||
|
#include <common/utility/utility.h>
|
||||||
|
|
||||||
|
#include <fsfw/objectmanager/ObjectManager.h>
|
||||||
|
#include <fsfw/serviceinterface/ServiceInterface.h>
|
||||||
|
#include <fsfw/tasks/TaskFactory.h>
|
||||||
|
|
||||||
|
#if defined(RASPBERRY_PI)
|
||||||
|
static const char* COMPILE_PRINTOUT = "Raspberry Pi";
|
||||||
|
#elif defined(BEAGLE_BONE_BLACK)
|
||||||
|
static const char* COMPILE_PRINTOUT = "Beagle Bone Black";
|
||||||
|
#elif defined(LINUX)
|
||||||
|
static const char* COMPILE_PRINTOUT = "Host";
|
||||||
|
#else
|
||||||
|
static const char* COMPILE_PRINTOUT = "Unknown device";
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
||||||
|
/* On Linux, no carriage return is added. */
|
||||||
|
ServiceInterfaceStream sif::debug("DEBUG");
|
||||||
|
ServiceInterfaceStream sif::info("INFO");
|
||||||
|
ServiceInterfaceStream sif::warning("WARNING");
|
||||||
|
ServiceInterfaceStream sif::error("ERROR", false, false, true);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
ObjectManagerIF *objectManager = nullptr;
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
|
||||||
|
utility::commonInitPrint("Linux", COMPILE_PRINTOUT);
|
||||||
|
|
||||||
|
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
||||||
|
sif::info << "Producing system objects.." << std::endl;
|
||||||
|
#else
|
||||||
|
sif::printInfo("Producing system objects..\n");
|
||||||
|
#endif /* FSFW_CPP_OSTREAM_ENABLED == 1 */
|
||||||
|
|
||||||
|
objectManager = new ObjectManager(ObjectFactory::produce);
|
||||||
|
|
||||||
|
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
||||||
|
sif::info << "Objects created successfully.." << std::endl;
|
||||||
|
sif::info << "Initializing objects.." << std::endl;
|
||||||
|
#else
|
||||||
|
sif::printInfo("Objects created successfully..\n");
|
||||||
|
#endif /* FSFW_CPP_OSTREAM_ENABLED == 1 */
|
||||||
|
|
||||||
|
objectManager->initialize();
|
||||||
|
|
||||||
|
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
||||||
|
sif::info << "Creating tasks.." << std::endl;
|
||||||
|
#else
|
||||||
|
sif::printInfo("Creating tasks..\n");
|
||||||
|
#endif /* FSFW_CPP_OSTREAM_ENABLED == 1 */
|
||||||
|
|
||||||
|
InitMission::createTasks();
|
||||||
|
|
||||||
|
MutexExample::example();
|
||||||
|
PusPacketCreator::createPusPacketAndPrint();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* Permanent loop. */
|
||||||
|
for(;;) {
|
||||||
|
/* Sleep main thread, not needed anymore. */
|
||||||
|
TaskFactory::delayTask(5000);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
7
bsp_linux/test/CMakeLists.txt
Normal file
7
bsp_linux/test/CMakeLists.txt
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
target_sources(${TARGET_NAME}
|
||||||
|
PUBLIC
|
||||||
|
SpiTest.cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
4
bsp_linux/test/SpiTest.cpp
Normal file
4
bsp_linux/test/SpiTest.cpp
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
#include "SpiTest.h"
|
||||||
|
|
||||||
|
SpiTest::SpiTest(object_id_t objectId): SystemObject(objectId) {
|
||||||
|
}
|
15
bsp_linux/test/SpiTest.h
Normal file
15
bsp_linux/test/SpiTest.h
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
#ifndef BSP_LINUX_TEST_SPITEST_H_
|
||||||
|
#define BSP_LINUX_TEST_SPITEST_H_
|
||||||
|
|
||||||
|
#include <fsfw/objectmanager/SystemObject.h>
|
||||||
|
#include <fsfw/tasks/ExecutableObjectIF.h>
|
||||||
|
|
||||||
|
class SpiTest: public ExecutableObjectIF, SystemObject {
|
||||||
|
public:
|
||||||
|
SpiTest(object_id_t objectId);
|
||||||
|
private:
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* BSP_LINUX_TEST_SPITEST_H_ */
|
7
bsp_linux/utility/CMakeLists.txt
Normal file
7
bsp_linux/utility/CMakeLists.txt
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
target_sources(${TARGET_NAME}
|
||||||
|
PUBLIC
|
||||||
|
printChar.c
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
12
bsp_linux/utility/printChar.c
Normal file
12
bsp_linux/utility/printChar.c
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
|
||||||
|
|
||||||
|
void printChar(const char* character, bool errStream) {
|
||||||
|
if(errStream) {
|
||||||
|
fprintf( stderr, "%c", *character);
|
||||||
|
} else {
|
||||||
|
printf("%c", *character);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
21
bsp_stm32_freertos/CMakeLists.txt
Normal file
21
bsp_stm32_freertos/CMakeLists.txt
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
target_sources(${TARGET_NAME} PRIVATE
|
||||||
|
main.cpp
|
||||||
|
startup_stm32h743xx.s
|
||||||
|
)
|
||||||
|
|
||||||
|
target_compile_options(${TARGET_NAME} PRIVATE
|
||||||
|
)
|
||||||
|
|
||||||
|
target_link_options(${TARGET_NAME} PRIVATE
|
||||||
|
)
|
||||||
|
|
||||||
|
target_compile_definitions(${TARGET_NAME} PRIVATE
|
||||||
|
BOARD_NAME="stm32h743zi-nucleo"
|
||||||
|
)
|
||||||
|
|
||||||
|
add_subdirectory(STM32CubeH7)
|
||||||
|
add_subdirectory(core)
|
||||||
|
add_subdirectory(utility)
|
||||||
|
add_subdirectory(fsfwconfig)
|
||||||
|
add_subdirectory(boardtest)
|
||||||
|
|
0
bsp_stm32_freertos/README.md
Normal file
0
bsp_stm32_freertos/README.md
Normal file
1
bsp_stm32_freertos/STM32CubeH7/Boards/CMakeLists.txt
Normal file
1
bsp_stm32_freertos/STM32CubeH7/Boards/CMakeLists.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
add_subdirectory(NUCLEO-H743ZI)
|
@ -0,0 +1,5 @@
|
|||||||
|
add_subdirectory(Src)
|
||||||
|
|
||||||
|
target_include_directories(${TARGET_NAME} PRIVATE
|
||||||
|
Inc
|
||||||
|
)
|
@ -0,0 +1,136 @@
|
|||||||
|
/*
|
||||||
|
* FreeRTOS Kernel V10.0.1
|
||||||
|
* Copyright (C) 2017 Amazon.com, Inc. or its affiliates. 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!
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#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 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.
|
||||||
|
*----------------------------------------------------------*/
|
||||||
|
|
||||||
|
/* Ensure stdint is only used by the compiler, and not the assembler. */
|
||||||
|
#if defined(__ICCARM__) || defined(__CC_ARM) || defined(__GNUC__)
|
||||||
|
#include <stdint.h>
|
||||||
|
extern uint32_t SystemCoreClock;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define configUSE_PREEMPTION 1
|
||||||
|
/* If this is set to one, configMAX_PRIORITIES is limited to 32 */
|
||||||
|
#define configUSE_PORT_OPTIMISED_TASK_SELECTION 1
|
||||||
|
#define configUSE_IDLE_HOOK 0
|
||||||
|
#define configUSE_TICK_HOOK 0
|
||||||
|
#define configCPU_CLOCK_HZ ( SystemCoreClock )
|
||||||
|
#define configTICK_RATE_HZ ( ( TickType_t ) 1000 )
|
||||||
|
#define configMAX_PRIORITIES ( 10 )
|
||||||
|
#define configMINIMAL_STACK_SIZE ( ( uint16_t ) 256 )
|
||||||
|
#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 1024 * 100 ) )
|
||||||
|
#define configMAX_TASK_NAME_LEN ( 16 )
|
||||||
|
#define configUSE_TRACE_FACILITY 1
|
||||||
|
#define configUSE_16_BIT_TICKS 0
|
||||||
|
#define configIDLE_SHOULD_YIELD 1
|
||||||
|
#define configUSE_MUTEXES 1
|
||||||
|
#define configQUEUE_REGISTRY_SIZE 8
|
||||||
|
#define configCHECK_FOR_STACK_OVERFLOW 0
|
||||||
|
#define configUSE_RECURSIVE_MUTEXES 1
|
||||||
|
#define configUSE_MALLOC_FAILED_HOOK 0
|
||||||
|
#define configUSE_APPLICATION_TASK_TAG 0
|
||||||
|
#define configUSE_COUNTING_SEMAPHORES 1
|
||||||
|
#define configGENERATE_RUN_TIME_STATS 0
|
||||||
|
|
||||||
|
|
||||||
|
/* Co-routine definitions. */
|
||||||
|
#define configUSE_CO_ROUTINES 0
|
||||||
|
#define configMAX_CO_ROUTINE_PRIORITIES ( 2 )
|
||||||
|
|
||||||
|
/* Software timer definitions. */
|
||||||
|
#define configUSE_TIMERS 0
|
||||||
|
#define configTIMER_TASK_PRIORITY ( 2 )
|
||||||
|
#define configTIMER_QUEUE_LENGTH 10
|
||||||
|
#define configTIMER_TASK_STACK_DEPTH ( configMINIMAL_STACK_SIZE * 2 )
|
||||||
|
|
||||||
|
/* 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 1
|
||||||
|
#define INCLUDE_vTaskSuspend 1
|
||||||
|
#define INCLUDE_vTaskDelayUntil 1
|
||||||
|
#define INCLUDE_vTaskDelay 1
|
||||||
|
#define INCLUDE_xQueueGetMutexHolder 1
|
||||||
|
#define INCLUDE_xTaskGetSchedulerState 1
|
||||||
|
#define INCLUDE_eTaskGetState 1
|
||||||
|
#define INCLUDE_uxTaskGetStackHighWaterMark 1
|
||||||
|
|
||||||
|
/* 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 /* 15 priority levels */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* The lowest interrupt priority that can be used in a call to a "set priority"
|
||||||
|
function. */
|
||||||
|
#define configLIBRARY_LOWEST_INTERRUPT_PRIORITY 0xf
|
||||||
|
|
||||||
|
/* 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. */
|
||||||
|
#define configASSERT( x ) if( ( x ) == 0 ) { taskDISABLE_INTERRUPTS(); for( ;; ); }
|
||||||
|
|
||||||
|
/* Definitions that map the FreeRTOS port interrupt handlers to their CMSIS
|
||||||
|
standard names. */
|
||||||
|
#define vPortSVCHandler SVC_Handler
|
||||||
|
#define xPortPendSVHandler PendSV_Handler
|
||||||
|
|
||||||
|
/* IMPORTANT: This define MUST be commented when used with STM32Cube firmware,
|
||||||
|
to prevent overwriting SysTick_Handler defined within STM32Cube HAL */
|
||||||
|
/* #define xPortSysTickHandler SysTick_Handler */
|
||||||
|
|
||||||
|
#endif /* FREERTOS_CONFIG_H */
|
@ -0,0 +1,26 @@
|
|||||||
|
#ifndef BSP_STM32_STM32CUBEH7_BOARDS_NUCLEO_H743ZI_INC_APP_DHCP_H_
|
||||||
|
#define BSP_STM32_STM32CUBEH7_BOARDS_NUCLEO_H743ZI_INC_APP_DHCP_H_
|
||||||
|
|
||||||
|
#include <lwipopts.h>
|
||||||
|
|
||||||
|
#if LWIP_DHCP == 1
|
||||||
|
|
||||||
|
#include <lwip/netif.h>
|
||||||
|
|
||||||
|
/* DHCP process states */
|
||||||
|
#define DHCP_OFF (uint8_t) 0
|
||||||
|
#define DHCP_START (uint8_t) 1
|
||||||
|
#define DHCP_WAIT_ADDRESS (uint8_t) 2
|
||||||
|
#define DHCP_ADDRESS_ASSIGNED (uint8_t) 3
|
||||||
|
#define DHCP_TIMEOUT (uint8_t) 4
|
||||||
|
#define DHCP_LINK_DOWN (uint8_t) 5
|
||||||
|
|
||||||
|
uint8_t get_dhcp_state();
|
||||||
|
void set_dhcp_state(uint8_t new_state);
|
||||||
|
|
||||||
|
void DHCP_Process(struct netif *netif);
|
||||||
|
void DHCP_Periodic_Handle(struct netif *netif);
|
||||||
|
|
||||||
|
#endif /* LWIP_DHCP */
|
||||||
|
|
||||||
|
#endif /* BSP_STM32_STM32CUBEH7_BOARDS_NUCLEO_H743ZI_INC_APP_DHCP_H_ */
|
@ -0,0 +1,77 @@
|
|||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file LwIP/LwIP_UDP_Echo_Client/Inc/app_ethernet.h
|
||||||
|
* @author MCD Application Team
|
||||||
|
* @brief Header for app_ethernet.c module
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* <h2><center>© Copyright (c) 2017 STMicroelectronics International N.V.
|
||||||
|
* All rights reserved.</center></h2>
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted, provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistribution 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 other
|
||||||
|
* contributors to this software may be used to endorse or promote products
|
||||||
|
* derived from this software without specific written permission.
|
||||||
|
* 4. This software, including modifications and/or derivative works of this
|
||||||
|
* software, must execute solely and exclusively on microcontroller or
|
||||||
|
* microprocessor devices manufactured by or for STMicroelectronics.
|
||||||
|
* 5. Redistribution and use of this software other than as permitted under
|
||||||
|
* this license is void and will automatically terminate your rights under
|
||||||
|
* this license.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY STMICROELECTRONICS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS, IMPLIED OR STATUTORY WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
|
||||||
|
* PARTICULAR PURPOSE AND NON-INFRINGEMENT OF THIRD PARTY INTELLECTUAL PROPERTY
|
||||||
|
* RIGHTS ARE DISCLAIMED TO THE FULLEST EXTENT PERMITTED BY LAW. IN NO EVENT
|
||||||
|
* SHALL STMICROELECTRONICS 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 __APP_ETHERNET_H
|
||||||
|
#define __APP_ETHERNET_H
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Includes ------------------------------------------------------------------*/
|
||||||
|
#include <lwip/netif.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
/* Exported types ------------------------------------------------------------*/
|
||||||
|
|
||||||
|
/* Exported constants --------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
||||||
|
/* Exported macro ------------------------------------------------------------*/
|
||||||
|
/* Exported functions ------------------------------------------------------- */
|
||||||
|
void ethernet_link_status_updated(struct netif *netif);
|
||||||
|
void ethernet_link_periodic_handle(struct netif *netif);
|
||||||
|
|
||||||
|
void set_lwip_addresses(ip_addr_t* ipaddr, ip_addr_t* netmask, ip_addr_t* gw);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* __APP_ETHERNET_H */
|
||||||
|
|
||||||
|
|
||||||
|
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
||||||
|
|
@ -0,0 +1,10 @@
|
|||||||
|
#ifndef BSP_STM32_BOARDS_NUCLEO_H743ZI_INC_BOARDCONFIG_H_
|
||||||
|
#define BSP_STM32_BOARDS_NUCLEO_H743ZI_INC_BOARDCONFIG_H_
|
||||||
|
|
||||||
|
//! Timeout when sending debug data via the UART interface in MS
|
||||||
|
#define DEBUG_UART_MS_TIMEOUT 10
|
||||||
|
#define DEBUG_UART_BAUDRATE 115200
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* BSP_STM32_BOARDS_NUCLEO_H743ZI_INC_BOARDCONFIG_H_ */
|
1026
bsp_stm32_freertos/STM32CubeH7/Boards/NUCLEO-H743ZI/Inc/cmsis_os.h
Normal file
1026
bsp_stm32_freertos/STM32CubeH7/Boards/NUCLEO-H743ZI/Inc/cmsis_os.h
Normal file
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,36 @@
|
|||||||
|
/**
|
||||||
|
* Additional layer for hardware initialization.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef STM32_BSP_HARDWARE_INIT_H_
|
||||||
|
#define STM32_BSP_HARDWARE_INIT_H_
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
|
||||||
|
#include <stm32h7xx_hal.h>
|
||||||
|
#include <stm32h7xx_hal_gpio.h>
|
||||||
|
#include <stm32h7xx_hal_uart.h>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Declaration of global hardware handlers here.
|
||||||
|
* Definition inside respective .cpp or .c files.
|
||||||
|
*/
|
||||||
|
extern UART_HandleTypeDef huart3;
|
||||||
|
extern GPIO_InitTypeDef gpio_uart_init_struct;
|
||||||
|
extern struct netif gnetif; /* network interface structure */
|
||||||
|
|
||||||
|
extern bool debugAvailable;
|
||||||
|
|
||||||
|
void performHardwareInit();
|
||||||
|
void Netif_Config(void);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* STM32_BSP_HARDWARE_INIT_H_ */
|
@ -0,0 +1,252 @@
|
|||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file LwIP/LwIP_HTTP_Server_Netconn_RTOS/Inc/lwipopts.h
|
||||||
|
* @author MCD Application Team
|
||||||
|
* @brief lwIP Options Configuration.
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* <h2><center>© Copyright (c) 2017 STMicroelectronics International N.V.
|
||||||
|
* All rights reserved.</center></h2>
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted, provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistribution 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 other
|
||||||
|
* contributors to this software may be used to endorse or promote products
|
||||||
|
* derived from this software without specific written permission.
|
||||||
|
* 4. This software, including modifications and/or derivative works of this
|
||||||
|
* software, must execute solely and exclusively on microcontroller or
|
||||||
|
* microprocessor devices manufactured by or for STMicroelectronics.
|
||||||
|
* 5. Redistribution and use of this software other than as permitted under
|
||||||
|
* this license is void and will automatically terminate your rights under
|
||||||
|
* this license.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY STMICROELECTRONICS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS, IMPLIED OR STATUTORY WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
|
||||||
|
* PARTICULAR PURPOSE AND NON-INFRINGEMENT OF THIRD PARTY INTELLECTUAL PROPERTY
|
||||||
|
* RIGHTS ARE DISCLAIMED TO THE FULLEST EXTENT PERMITTED BY LAW. IN NO EVENT
|
||||||
|
* SHALL STMICROELECTRONICS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||||
|
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||||
|
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
|
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||||
|
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __LWIPOPTS_H__
|
||||||
|
#define __LWIPOPTS_H__
|
||||||
|
/**
|
||||||
|
* SYS_LIGHTWEIGHT_PROT==1: if you want inter-task protection for certain
|
||||||
|
* critical regions during buffer allocation, deallocation and memory
|
||||||
|
* allocation and deallocation.
|
||||||
|
*/
|
||||||
|
#define SYS_LIGHTWEIGHT_PROT 0
|
||||||
|
|
||||||
|
/**
|
||||||
|
* NO_SYS==1: Provides VERY minimal functionality. Otherwise,
|
||||||
|
* use lwIP facilities.
|
||||||
|
*/
|
||||||
|
#define NO_SYS 1
|
||||||
|
|
||||||
|
/* ---------- Memory options ---------- */
|
||||||
|
/* MEM_ALIGNMENT: should be set to the alignment of the CPU for which
|
||||||
|
lwIP is compiled. 4 byte alignment -> define MEM_ALIGNMENT to 4, 2
|
||||||
|
byte alignment -> define MEM_ALIGNMENT to 2. */
|
||||||
|
#define MEM_ALIGNMENT 4
|
||||||
|
|
||||||
|
/* MEM_SIZE: the size of the heap memory. If the application will send
|
||||||
|
a lot of data that needs to be copied, this should be set high. */
|
||||||
|
#define MEM_SIZE (10*1024)
|
||||||
|
|
||||||
|
/* Relocate the LwIP RAM heap pointer */
|
||||||
|
#define LWIP_RAM_HEAP_POINTER (0x30044000)
|
||||||
|
|
||||||
|
/* MEMP_NUM_PBUF: the number of memp struct pbufs. If the application
|
||||||
|
sends a lot of data out of ROM (or other static memory), this
|
||||||
|
should be set high. */
|
||||||
|
#define MEMP_NUM_PBUF 10
|
||||||
|
/* MEMP_NUM_UDP_PCB: the number of UDP protocol control blocks. One
|
||||||
|
per active UDP "connection". */
|
||||||
|
#define MEMP_NUM_UDP_PCB 6
|
||||||
|
/* MEMP_NUM_TCP_PCB: the number of simulatenously active TCP
|
||||||
|
connections. */
|
||||||
|
#define MEMP_NUM_TCP_PCB 10
|
||||||
|
/* MEMP_NUM_TCP_PCB_LISTEN: the number of listening TCP
|
||||||
|
connections. */
|
||||||
|
#define MEMP_NUM_TCP_PCB_LISTEN 5
|
||||||
|
/* MEMP_NUM_TCP_SEG: the number of simultaneously queued TCP
|
||||||
|
segments. */
|
||||||
|
#define MEMP_NUM_TCP_SEG 8
|
||||||
|
/* MEMP_NUM_SYS_TIMEOUT: the number of simulateously active
|
||||||
|
timeouts. */
|
||||||
|
#define MEMP_NUM_SYS_TIMEOUT 10
|
||||||
|
|
||||||
|
|
||||||
|
/* ---------- Pbuf options ---------- */
|
||||||
|
/* PBUF_POOL_SIZE: the number of buffers in the pbuf pool.
|
||||||
|
@ note: used to allocate Tx pbufs only */
|
||||||
|
#define PBUF_POOL_SIZE 4
|
||||||
|
|
||||||
|
/* PBUF_POOL_BUFSIZE: the size of each pbuf in the pbuf pool. */
|
||||||
|
#define PBUF_POOL_BUFSIZE 1528
|
||||||
|
|
||||||
|
/* LWIP_SUPPORT_CUSTOM_PBUF == 1: to pass directly MAC Rx buffers to the stack
|
||||||
|
no copy is needed */
|
||||||
|
#define LWIP_SUPPORT_CUSTOM_PBUF 1
|
||||||
|
|
||||||
|
/* ---------- IPv4 options ---------- */
|
||||||
|
#define LWIP_IPV4 1
|
||||||
|
|
||||||
|
/* ---------- TCP options ---------- */
|
||||||
|
#define LWIP_TCP 1
|
||||||
|
#define TCP_TTL 255
|
||||||
|
|
||||||
|
/* Controls if TCP should queue segments that arrive out of
|
||||||
|
order. Define to 0 if your device is low on memory. */
|
||||||
|
#define TCP_QUEUE_OOSEQ 0
|
||||||
|
|
||||||
|
/* TCP Maximum segment size. */
|
||||||
|
#define TCP_MSS (1500 - 40) /* TCP_MSS = (Ethernet MTU - IP header size - TCP header size) */
|
||||||
|
|
||||||
|
/* TCP sender buffer space (bytes). */
|
||||||
|
#define TCP_SND_BUF (4*TCP_MSS)
|
||||||
|
|
||||||
|
/* TCP_SND_QUEUELEN: TCP sender buffer space (pbufs). This must be at least
|
||||||
|
as much as (2 * TCP_SND_BUF/TCP_MSS) for things to work. */
|
||||||
|
|
||||||
|
#define TCP_SND_QUEUELEN (2* TCP_SND_BUF/TCP_MSS)
|
||||||
|
|
||||||
|
/* TCP receive window. */
|
||||||
|
#define TCP_WND (2*TCP_MSS)
|
||||||
|
|
||||||
|
|
||||||
|
/* ---------- ICMP options ---------- */
|
||||||
|
#define LWIP_ICMP 1
|
||||||
|
|
||||||
|
|
||||||
|
/* ---------- DHCP options ---------- */
|
||||||
|
#define LWIP_DHCP 1
|
||||||
|
|
||||||
|
|
||||||
|
/* ---------- UDP options ---------- */
|
||||||
|
#define LWIP_UDP 1
|
||||||
|
#define UDP_TTL 255
|
||||||
|
|
||||||
|
/* ---------- link callback options ---------- */
|
||||||
|
/* LWIP_NETIF_LINK_CALLBACK==1: Support a callback function from an interface
|
||||||
|
* whenever the link changes (i.e., link down)
|
||||||
|
*/
|
||||||
|
#define LWIP_NETIF_LINK_CALLBACK 1
|
||||||
|
|
||||||
|
/*
|
||||||
|
--------------------------------------
|
||||||
|
---------- Checksum options ----------
|
||||||
|
--------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
The STM32H7xx allows computing and verifying the IP, UDP, TCP and ICMP checksums by hardware:
|
||||||
|
- To use this feature let the following define uncommented.
|
||||||
|
- To disable it and process by CPU comment the the checksum.
|
||||||
|
*/
|
||||||
|
#define CHECKSUM_BY_HARDWARE
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef CHECKSUM_BY_HARDWARE
|
||||||
|
/* CHECKSUM_GEN_IP==0: Generate checksums by hardware for outgoing IP packets.*/
|
||||||
|
#define CHECKSUM_GEN_IP 0
|
||||||
|
/* CHECKSUM_GEN_UDP==0: Generate checksums by hardware for outgoing UDP packets.*/
|
||||||
|
#define CHECKSUM_GEN_UDP 0
|
||||||
|
/* CHECKSUM_GEN_TCP==0: Generate checksums by hardware for outgoing TCP packets.*/
|
||||||
|
#define CHECKSUM_GEN_TCP 0
|
||||||
|
/* CHECKSUM_CHECK_IP==0: Check checksums by hardware for incoming IP packets.*/
|
||||||
|
#define CHECKSUM_CHECK_IP 0
|
||||||
|
/* CHECKSUM_CHECK_UDP==0: Check checksums by hardware for incoming UDP packets.*/
|
||||||
|
#define CHECKSUM_CHECK_UDP 0
|
||||||
|
/* CHECKSUM_CHECK_TCP==0: Check checksums by hardware for incoming TCP packets.*/
|
||||||
|
#define CHECKSUM_CHECK_TCP 0
|
||||||
|
/* CHECKSUM_CHECK_ICMP==0: Check checksums by hardware for incoming ICMP packets.*/
|
||||||
|
#define CHECKSUM_GEN_ICMP 0
|
||||||
|
#else
|
||||||
|
/* CHECKSUM_GEN_IP==1: Generate checksums in software for outgoing IP packets.*/
|
||||||
|
#define CHECKSUM_GEN_IP 1
|
||||||
|
/* CHECKSUM_GEN_UDP==1: Generate checksums in software for outgoing UDP packets.*/
|
||||||
|
#define CHECKSUM_GEN_UDP 1
|
||||||
|
/* CHECKSUM_GEN_TCP==1: Generate checksums in software for outgoing TCP packets.*/
|
||||||
|
#define CHECKSUM_GEN_TCP 1
|
||||||
|
/* CHECKSUM_CHECK_IP==1: Check checksums in software for incoming IP packets.*/
|
||||||
|
#define CHECKSUM_CHECK_IP 1
|
||||||
|
/* CHECKSUM_CHECK_UDP==1: Check checksums in software for incoming UDP packets.*/
|
||||||
|
#define CHECKSUM_CHECK_UDP 1
|
||||||
|
/* CHECKSUM_CHECK_TCP==1: Check checksums in software for incoming TCP packets.*/
|
||||||
|
#define CHECKSUM_CHECK_TCP 1
|
||||||
|
/* CHECKSUM_CHECK_ICMP==1: Check checksums by hardware for incoming ICMP packets.*/
|
||||||
|
#define CHECKSUM_GEN_ICMP 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
----------------------------------------------
|
||||||
|
---------- Sequential layer options ----------
|
||||||
|
----------------------------------------------
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* LWIP_NETCONN==1: Enable Netconn API (require to use api_lib.c)
|
||||||
|
*/
|
||||||
|
#define LWIP_NETCONN 0
|
||||||
|
|
||||||
|
/*
|
||||||
|
------------------------------------
|
||||||
|
---------- Socket options ----------
|
||||||
|
------------------------------------
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* LWIP_SOCKET==1: Enable Socket API (require to use sockets.c)
|
||||||
|
*/
|
||||||
|
#define LWIP_SOCKET 0
|
||||||
|
|
||||||
|
/*
|
||||||
|
------------------------------------
|
||||||
|
---------- httpd options ----------
|
||||||
|
------------------------------------
|
||||||
|
*/
|
||||||
|
/** Set this to 1 to include "fsdata_custom.c" instead of "fsdata.c" for the
|
||||||
|
* file system (to prevent changing the file included in CVS) */
|
||||||
|
#define HTTPD_USE_CUSTOM_FSDATA 1
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
---------------------------------
|
||||||
|
---------- OS options ----------
|
||||||
|
---------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define TCPIP_THREAD_NAME "TCP/IP"
|
||||||
|
#define TCPIP_THREAD_STACKSIZE 1000
|
||||||
|
#define TCPIP_MBOX_SIZE 6
|
||||||
|
#define DEFAULT_UDP_RECVMBOX_SIZE 6
|
||||||
|
#define DEFAULT_TCP_RECVMBOX_SIZE 6
|
||||||
|
#define DEFAULT_ACCEPTMBOX_SIZE 6
|
||||||
|
#define DEFAULT_THREAD_STACKSIZE 500
|
||||||
|
#define TCPIP_THREAD_PRIO osPriorityHigh
|
||||||
|
|
||||||
|
/*
|
||||||
|
---------------------------------
|
||||||
|
---------- ASSERT options ----------
|
||||||
|
---------------------------------
|
||||||
|
*/
|
||||||
|
#define LWIP_NOASSERT
|
||||||
|
|
||||||
|
#endif /* __LWIPOPTS_H__ */
|
||||||
|
|
||||||
|
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
@ -0,0 +1,96 @@
|
|||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file LwIP/LwIP_HTTP_Server_Netconn_RTOS/Inc/main.h
|
||||||
|
* @author MCD Application Team
|
||||||
|
* @brief Header for main.c module
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* <h2><center>© Copyright (c) 2017 STMicroelectronics International N.V.
|
||||||
|
* All rights reserved.</center></h2>
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted, provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistribution 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 other
|
||||||
|
* contributors to this software may be used to endorse or promote products
|
||||||
|
* derived from this software without specific written permission.
|
||||||
|
* 4. This software, including modifications and/or derivative works of this
|
||||||
|
* software, must execute solely and exclusively on microcontroller or
|
||||||
|
* microprocessor devices manufactured by or for STMicroelectronics.
|
||||||
|
* 5. Redistribution and use of this software other than as permitted under
|
||||||
|
* this license is void and will automatically terminate your rights under
|
||||||
|
* this license.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY STMICROELECTRONICS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS, IMPLIED OR STATUTORY WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
|
||||||
|
* PARTICULAR PURPOSE AND NON-INFRINGEMENT OF THIRD PARTY INTELLECTUAL PROPERTY
|
||||||
|
* RIGHTS ARE DISCLAIMED TO THE FULLEST EXTENT PERMITTED BY LAW. IN NO EVENT
|
||||||
|
* SHALL STMICROELECTRONICS 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 __MAIN_H
|
||||||
|
#define __MAIN_H
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Includes ------------------------------------------------------------------*/
|
||||||
|
#include "stm32h7xx_hal.h"
|
||||||
|
|
||||||
|
/* Exported types ------------------------------------------------------------*/
|
||||||
|
/* Exported constants --------------------------------------------------------*/
|
||||||
|
|
||||||
|
/* UDP local connection port */
|
||||||
|
#define UDP_SERVER_PORT 7
|
||||||
|
/* UDP remote connection port */
|
||||||
|
#define UDP_CLIENT_PORT 2008
|
||||||
|
|
||||||
|
/*Static DEST IP ADDRESS: DEST_IP_ADDR0.DEST_IP_ADDR1.DEST_IP_ADDR2.DEST_IP_ADDR3 */
|
||||||
|
#define DEST_IP_ADDR0 ((uint8_t)169U)
|
||||||
|
#define DEST_IP_ADDR1 ((uint8_t)254U)
|
||||||
|
#define DEST_IP_ADDR2 ((uint8_t)39U)
|
||||||
|
#define DEST_IP_ADDR3 ((uint8_t)2U)
|
||||||
|
|
||||||
|
/*Static IP ADDRESS*/
|
||||||
|
#define IP_ADDR0 169
|
||||||
|
#define IP_ADDR1 254
|
||||||
|
#define IP_ADDR2 1
|
||||||
|
#define IP_ADDR3 38
|
||||||
|
|
||||||
|
/*NETMASK*/
|
||||||
|
#define NETMASK_ADDR0 255
|
||||||
|
#define NETMASK_ADDR1 255
|
||||||
|
#define NETMASK_ADDR2 0
|
||||||
|
#define NETMASK_ADDR3 0
|
||||||
|
|
||||||
|
/*Gateway Address*/
|
||||||
|
#define GW_ADDR0 192
|
||||||
|
#define GW_ADDR1 168
|
||||||
|
#define GW_ADDR2 178
|
||||||
|
#define GW_ADDR3 1
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* __MAIN_H */
|
||||||
|
|
||||||
|
|
||||||
|
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
26287
bsp_stm32_freertos/STM32CubeH7/Boards/NUCLEO-H743ZI/Inc/stm32h743xx.h
Normal file
26287
bsp_stm32_freertos/STM32CubeH7/Boards/NUCLEO-H743ZI/Inc/stm32h743xx.h
Normal file
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,243 @@
|
|||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file stm32h7xx.h
|
||||||
|
* @author MCD Application Team
|
||||||
|
* @brief CMSIS STM32H7xx Device Peripheral Access Layer Header File.
|
||||||
|
*
|
||||||
|
* The file is the unique include file that the application programmer
|
||||||
|
* is using in the C source code, usually in main.c. This file contains:
|
||||||
|
* - Configuration section that allows to select:
|
||||||
|
* - The STM32H7xx device used in the target application
|
||||||
|
* - To use or not the peripheral’s drivers in application code(i.e.
|
||||||
|
* code will be based on direct access to peripheral’s registers
|
||||||
|
* rather than drivers API), this option is controlled by
|
||||||
|
* "#define USE_HAL_DRIVER"
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* <h2><center>© Copyright (c) 2017 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
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @addtogroup CMSIS
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @addtogroup stm32h7xx
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef STM32H7xx_H
|
||||||
|
#define STM32H7xx_H
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
/** @addtogroup Library_configuration_section
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief STM32 Family
|
||||||
|
*/
|
||||||
|
#if !defined (STM32H7)
|
||||||
|
#define STM32H7
|
||||||
|
#endif /* STM32H7 */
|
||||||
|
|
||||||
|
|
||||||
|
/* Uncomment the line below according to the target STM32H7 device used in your
|
||||||
|
application
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if !defined (STM32H743xx) && !defined (STM32H753xx) && !defined (STM32H750xx) && !defined (STM32H742xx) && \
|
||||||
|
!defined (STM32H745xx) && !defined (STM32H755xx) && !defined (STM32H747xx) && !defined (STM32H757xx) && \
|
||||||
|
!defined (STM32H7A3xx) && !defined (STM32H7A3xxQ) && !defined (STM32H7B3xx) && !defined (STM32H7B3xxQ) && !defined (STM32H7B0xx) && !defined (STM32H7B0xxQ) && \
|
||||||
|
!defined (STM32H735xx) && !defined (STM32H733xx) && !defined (STM32H730xx) && !defined (STM32H730xxQ) && !defined (STM32H725xx) && !defined (STM32H723xx)
|
||||||
|
/* #define STM32H742xx */ /*!< STM32H742VI, STM32H742ZI, STM32H742AI, STM32H742II, STM32H742BI, STM32H742XI Devices */
|
||||||
|
/* #define STM32H743xx */ /*!< STM32H743VI, STM32H743ZI, STM32H743AI, STM32H743II, STM32H743BI, STM32H743XI Devices */
|
||||||
|
/* #define STM32H753xx */ /*!< STM32H753VI, STM32H753ZI, STM32H753AI, STM32H753II, STM32H753BI, STM32H753XI Devices */
|
||||||
|
/* #define STM32H750xx */ /*!< STM32H750V, STM32H750I, STM32H750X Devices */
|
||||||
|
/* #define STM32H747xx */ /*!< STM32H747ZI, STM32H747AI, STM32H747II, STM32H747BI, STM32H747XI Devices */
|
||||||
|
/* #define STM32H757xx */ /*!< STM32H757ZI, STM32H757AI, STM32H757II, STM32H757BI, STM32H757XI Devices */
|
||||||
|
/* #define STM32H745xx */ /*!< STM32H745ZI, STM32H745II, STM32H745BI, STM32H745XI Devices */
|
||||||
|
/* #define STM32H755xx */ /*!< STM32H755ZI, STM32H755II, STM32H755BI, STM32H755XI Devices */
|
||||||
|
/* #define STM32H7B0xx */ /*!< STM32H7B0ABIxQ, STM32H7B0IBTx, STM32H7B0RBTx, STM32H7B0VBTx, STM32H7B0ZBTx, STM32H7B0IBKxQ */
|
||||||
|
/* #define STM32H7A3xx */ /*!< STM32H7A3IIK6, STM32H7A3IIT6, STM32H7A3NIH6, STM32H7A3RIT6, STM32H7A3VIH6, STM32H7A3VIT6, STM32H7A3ZIT6 */
|
||||||
|
/* #define STM32H7A3xxQ */ /*!< STM32H7A3QIY6Q, STM32H7A3IIK6Q, STM32H7A3IIT6Q, STM32H7A3LIH6Q, STM32H7A3VIH6Q, STM32H7A3VIT6Q, STM32H7A3AII6Q, STM32H7A3ZIT6Q */
|
||||||
|
/* #define STM32H7B3xx */ /*!< STM32H7B3IIK6, STM32H7B3IIT6, STM32H7B3NIH6, STM32H7B3RIT6, STM32H7B3VIH6, STM32H7B3VIT6, STM32H7B3ZIT6 */
|
||||||
|
/* #define STM32H7B3xxQ */ /*!< STM32H7B3QIY6Q, STM32H7B3IIK6Q, STM32H7B3IIT6Q, STM32H7B3LIH6Q, STM32H7B3VIH6Q, STM32H7B3VIT6Q, STM32H7B3AII6Q, STM32H7B3ZIT6Q */
|
||||||
|
/* #define STM32H735xx */ /*!< STM32H735AGI6, STM32H735IGK6, STM32H735RGV6, STM32H735VGT6, STM32H735VGY6, STM32H735ZGT6 Devices */
|
||||||
|
/* #define STM32H733xx */ /*!< STM32H733VGH6, STM32H733VGT6, STM32H733ZGI6, STM32H733ZGT6, Devices */
|
||||||
|
/* #define STM32H730xx */ /*!< STM32H730VBH6, STM32H730VBT6, STM32H730ZBT6, STM32H730ZBI6 Devices */
|
||||||
|
/* #define STM32H730xxQ */ /*!< STM32H730IBT6Q, STM32H730ABI6Q, STM32H730IBK6Q Devices */
|
||||||
|
/* #define STM32H725xx */ /*!< STM32H725AGI6, STM32H725IGK6, STM32H725IGT6, STM32H725RGV6, STM32H725VGT6, STM32H725VGY6, STM32H725ZGT6, STM32H725REV6, SM32H725VET6, STM32H725ZET6, STM32H725AEI6, STM32H725IET6, STM32H725IEK6 Devices */
|
||||||
|
/* #define STM32H723xx */ /*!< STM32H723VGH6, STM32H723VGT6, STM32H723ZGI6, STM32H723ZGT6, STM32H723VET6, STM32H723VEH6, STM32H723ZET6, STM32H723ZEI6 Devices */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Tip: To avoid modifying this file each time you need to switch between these
|
||||||
|
devices, you can define the device in your toolchain compiler preprocessor.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined(DUAL_CORE) && !defined(CORE_CM4) && !defined(CORE_CM7)
|
||||||
|
#error "Dual core device, please select CORE_CM4 or CORE_CM7"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined (USE_HAL_DRIVER)
|
||||||
|
/**
|
||||||
|
* @brief Comment the line below if you will not use the peripherals drivers.
|
||||||
|
In this case, these drivers will not be included and the application code will
|
||||||
|
be based on direct access to peripherals registers
|
||||||
|
*/
|
||||||
|
/*#define USE_HAL_DRIVER */
|
||||||
|
#endif /* USE_HAL_DRIVER */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief CMSIS Device version number V1.9.0
|
||||||
|
*/
|
||||||
|
#define __STM32H7xx_CMSIS_DEVICE_VERSION_MAIN (0x01) /*!< [31:24] main version */
|
||||||
|
#define __STM32H7xx_CMSIS_DEVICE_VERSION_SUB1 (0x09) /*!< [23:16] sub1 version */
|
||||||
|
#define __STM32H7xx_CMSIS_DEVICE_VERSION_SUB2 (0x00) /*!< [15:8] sub2 version */
|
||||||
|
#define __STM32H7xx_CMSIS_DEVICE_VERSION_RC (0x00) /*!< [7:0] release candidate */
|
||||||
|
#define __STM32H7xx_CMSIS_DEVICE_VERSION ((__CMSIS_DEVICE_VERSION_MAIN << 24)\
|
||||||
|
|(__CMSIS_DEVICE_HAL_VERSION_SUB1 << 16)\
|
||||||
|
|(__CMSIS_DEVICE_HAL_VERSION_SUB2 << 8 )\
|
||||||
|
|(__CMSIS_DEVICE_HAL_VERSION_RC))
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @addtogroup Device_Included
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined(STM32H743xx)
|
||||||
|
#include "stm32h743xx.h"
|
||||||
|
#elif defined(STM32H753xx)
|
||||||
|
#include "stm32h753xx.h"
|
||||||
|
#elif defined(STM32H750xx)
|
||||||
|
#include "stm32h750xx.h"
|
||||||
|
#elif defined(STM32H742xx)
|
||||||
|
#include "stm32h742xx.h"
|
||||||
|
#elif defined(STM32H745xx)
|
||||||
|
#include "stm32h745xx.h"
|
||||||
|
#elif defined(STM32H755xx)
|
||||||
|
#include "stm32h755xx.h"
|
||||||
|
#elif defined(STM32H747xx)
|
||||||
|
#include "stm32h747xx.h"
|
||||||
|
#elif defined(STM32H757xx)
|
||||||
|
#include "stm32h757xx.h"
|
||||||
|
#elif defined(STM32H7B0xx)
|
||||||
|
#include "stm32h7b0xx.h"
|
||||||
|
#elif defined(STM32H7B0xxQ)
|
||||||
|
#include "stm32h7b0xxq.h"
|
||||||
|
#elif defined(STM32H7A3xx)
|
||||||
|
#include "stm32h7a3xx.h"
|
||||||
|
#elif defined(STM32H7B3xx)
|
||||||
|
#include "stm32h7b3xx.h"
|
||||||
|
#elif defined(STM32H7A3xxQ)
|
||||||
|
#include "stm32h7a3xxq.h"
|
||||||
|
#elif defined(STM32H7B3xxQ)
|
||||||
|
#include "stm32h7b3xxq.h"
|
||||||
|
#elif defined(STM32H735xx)
|
||||||
|
#include "stm32h735xx.h"
|
||||||
|
#elif defined(STM32H733xx)
|
||||||
|
#include "stm32h733xx.h"
|
||||||
|
#elif defined(STM32H730xx)
|
||||||
|
#include "stm32h730xx.h"
|
||||||
|
#elif defined(STM32H730xxQ)
|
||||||
|
#include "stm32h730xxq.h"
|
||||||
|
#elif defined(STM32H725xx)
|
||||||
|
#include "stm32h725xx.h"
|
||||||
|
#elif defined(STM32H723xx)
|
||||||
|
#include "stm32h723xx.h"
|
||||||
|
#else
|
||||||
|
#error "Please select first the target STM32H7xx device used in your application (in stm32h7xx.h file)"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @addtogroup Exported_types
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
RESET = 0,
|
||||||
|
SET = !RESET
|
||||||
|
} FlagStatus, ITStatus;
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
DISABLE = 0,
|
||||||
|
ENABLE = !DISABLE
|
||||||
|
} FunctionalState;
|
||||||
|
#define IS_FUNCTIONAL_STATE(STATE) (((STATE) == DISABLE) || ((STATE) == ENABLE))
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
SUCCESS = 0,
|
||||||
|
ERROR = !SUCCESS
|
||||||
|
} ErrorStatus;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/** @addtogroup Exported_macros
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define SET_BIT(REG, BIT) ((REG) |= (BIT))
|
||||||
|
|
||||||
|
#define CLEAR_BIT(REG, BIT) ((REG) &= ~(BIT))
|
||||||
|
|
||||||
|
#define READ_BIT(REG, BIT) ((REG) & (BIT))
|
||||||
|
|
||||||
|
#define CLEAR_REG(REG) ((REG) = (0x0))
|
||||||
|
|
||||||
|
#define WRITE_REG(REG, VAL) ((REG) = (VAL))
|
||||||
|
|
||||||
|
#define READ_REG(REG) ((REG))
|
||||||
|
|
||||||
|
#define MODIFY_REG(REG, CLEARMASK, SETMASK) WRITE_REG((REG), (((READ_REG(REG)) & (~(CLEARMASK))) | (SETMASK)))
|
||||||
|
|
||||||
|
#define POSITION_VAL(VAL) (__CLZ(__RBIT(VAL)))
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined (USE_HAL_DRIVER)
|
||||||
|
#include "stm32h7xx_hal.h"
|
||||||
|
#endif /* USE_HAL_DRIVER */
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
#endif /* STM32H7xx_H */
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
@ -0,0 +1,425 @@
|
|||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file stm32h7xx_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 stm32h7xx_hal_conf.h.
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* <h2><center>© Copyright (c) 2017 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 __STM32H7xx_HAL_CONF_H
|
||||||
|
#define __STM32H7xx_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_CEC_MODULE_ENABLED
|
||||||
|
#define HAL_COMP_MODULE_ENABLED
|
||||||
|
#define HAL_CORTEX_MODULE_ENABLED
|
||||||
|
#define HAL_CRC_MODULE_ENABLED
|
||||||
|
#define HAL_CRYP_MODULE_ENABLED
|
||||||
|
#define HAL_DAC_MODULE_ENABLED
|
||||||
|
#define HAL_DCMI_MODULE_ENABLED
|
||||||
|
#define HAL_DFSDM_MODULE_ENABLED
|
||||||
|
#define HAL_DMA_MODULE_ENABLED
|
||||||
|
#define HAL_DMA2D_MODULE_ENABLED
|
||||||
|
#define HAL_ETH_MODULE_ENABLED
|
||||||
|
#define HAL_EXTI_MODULE_ENABLED
|
||||||
|
#define HAL_FDCAN_MODULE_ENABLED
|
||||||
|
#define HAL_FLASH_MODULE_ENABLED
|
||||||
|
#define HAL_GPIO_MODULE_ENABLED
|
||||||
|
#define HAL_HASH_MODULE_ENABLED
|
||||||
|
#define HAL_HCD_MODULE_ENABLED
|
||||||
|
#define HAL_HRTIM_MODULE_ENABLED
|
||||||
|
#define HAL_HSEM_MODULE_ENABLED
|
||||||
|
#define HAL_I2C_MODULE_ENABLED
|
||||||
|
#define HAL_I2S_MODULE_ENABLED
|
||||||
|
#define HAL_IRDA_MODULE_ENABLED
|
||||||
|
#define HAL_IWDG_MODULE_ENABLED
|
||||||
|
#define HAL_JPEG_MODULE_ENABLED
|
||||||
|
#define HAL_LPTIM_MODULE_ENABLED
|
||||||
|
#define HAL_LTDC_MODULE_ENABLED
|
||||||
|
#define HAL_MDIOS_MODULE_ENABLED
|
||||||
|
#define HAL_MDMA_MODULE_ENABLED
|
||||||
|
#define HAL_MMC_MODULE_ENABLED
|
||||||
|
#define HAL_NAND_MODULE_ENABLED
|
||||||
|
#define HAL_NOR_MODULE_ENABLED
|
||||||
|
#define HAL_OPAMP_MODULE_ENABLED
|
||||||
|
#define HAL_PCD_MODULE_ENABLED
|
||||||
|
#define HAL_PWR_MODULE_ENABLED
|
||||||
|
#define HAL_QSPI_MODULE_ENABLED
|
||||||
|
#define HAL_RAMECC_MODULE_ENABLED
|
||||||
|
#define HAL_RCC_MODULE_ENABLED
|
||||||
|
#define HAL_RNG_MODULE_ENABLED
|
||||||
|
#define HAL_RTC_MODULE_ENABLED
|
||||||
|
#define HAL_SAI_MODULE_ENABLED
|
||||||
|
#define HAL_SD_MODULE_ENABLED
|
||||||
|
#define HAL_SDRAM_MODULE_ENABLED
|
||||||
|
#define HAL_SMARTCARD_MODULE_ENABLED
|
||||||
|
#define HAL_SMBUS_MODULE_ENABLED
|
||||||
|
#define HAL_SPDIFRX_MODULE_ENABLED
|
||||||
|
#define HAL_SPI_MODULE_ENABLED
|
||||||
|
#define HAL_SRAM_MODULE_ENABLED
|
||||||
|
#define HAL_SWPMI_MODULE_ENABLED
|
||||||
|
#define HAL_TIM_MODULE_ENABLED
|
||||||
|
#define HAL_UART_MODULE_ENABLED
|
||||||
|
#define HAL_USART_MODULE_ENABLED
|
||||||
|
#define HAL_WWDG_MODULE_ENABLED
|
||||||
|
|
||||||
|
/* ########################## Oscillator 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 ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */
|
||||||
|
#endif /* HSE_VALUE */
|
||||||
|
|
||||||
|
#if !defined (HSE_STARTUP_TIMEOUT)
|
||||||
|
#define HSE_STARTUP_TIMEOUT ((uint32_t)5000) /*!< Time out for HSE start up, in ms */
|
||||||
|
#endif /* HSE_STARTUP_TIMEOUT */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Internal oscillator (CSI) default value.
|
||||||
|
* This value is the default CSI value after Reset.
|
||||||
|
*/
|
||||||
|
#if !defined (CSI_VALUE)
|
||||||
|
#define CSI_VALUE ((uint32_t)4000000) /*!< Value of the Internal oscillator in Hz*/
|
||||||
|
#endif /* CSI_VALUE */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @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)64000000) /*!< Value of the Internal oscillator in Hz*/
|
||||||
|
#endif /* HSI_VALUE */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief External Low Speed oscillator (LSE) value.
|
||||||
|
* This value is used by the UART, RTC HAL module to compute the system frequency
|
||||||
|
*/
|
||||||
|
#if !defined (LSE_VALUE)
|
||||||
|
#define LSE_VALUE ((uint32_t)32768) /*!< Value of the External oscillator in Hz*/
|
||||||
|
#endif /* LSE_VALUE */
|
||||||
|
|
||||||
|
|
||||||
|
#if !defined (LSE_STARTUP_TIMEOUT)
|
||||||
|
#define LSE_STARTUP_TIMEOUT ((uint32_t)5000) /*!< Time out for LSE start up, in ms */
|
||||||
|
#endif /* LSE_STARTUP_TIMEOUT */
|
||||||
|
|
||||||
|
#if !defined (LSI_VALUE)
|
||||||
|
#define LSI_VALUE ((uint32_t)32000) /*!< 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 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 clock 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 ((uint32_t)3300) /*!< Value of VDD in mv */
|
||||||
|
#define TICK_INT_PRIORITY ((uint32_t)0x0F) /*!< tick interrupt priority */
|
||||||
|
#define USE_RTOS 0
|
||||||
|
/* #define USE_SD_TRANSCEIVER 1U */ /*!< use uSD Transceiver */
|
||||||
|
#define USE_SPI_CRC 1U /*!< use CRC in SPI */
|
||||||
|
|
||||||
|
/* ########################### Ethernet Configuration ######################### */
|
||||||
|
#define ETH_TX_DESC_CNT 4 /* number of Ethernet Tx DMA descriptors */
|
||||||
|
#define ETH_RX_DESC_CNT 4 /* number of Ethernet Rx DMA descriptors */
|
||||||
|
|
||||||
|
#define ETH_MAC_ADDR0 ((uint8_t)0x02)
|
||||||
|
#define ETH_MAC_ADDR1 ((uint8_t)0x00)
|
||||||
|
#define ETH_MAC_ADDR2 ((uint8_t)0x00)
|
||||||
|
#define ETH_MAC_ADDR3 ((uint8_t)0x00)
|
||||||
|
#define ETH_MAC_ADDR4 ((uint8_t)0x00)
|
||||||
|
#define ETH_MAC_ADDR5 ((uint8_t)0x00)
|
||||||
|
|
||||||
|
/* ########################## Assert Selection ############################## */
|
||||||
|
/**
|
||||||
|
* @brief Uncomment the line below to expanse the "assert_param" macro in the
|
||||||
|
* HAL drivers code
|
||||||
|
*/
|
||||||
|
/* #define USE_FULL_ASSERT 1 */
|
||||||
|
|
||||||
|
|
||||||
|
/* Includes ------------------------------------------------------------------*/
|
||||||
|
/**
|
||||||
|
* @brief Include module's header file
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef HAL_RCC_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_rcc.h"
|
||||||
|
#endif /* HAL_RCC_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_GPIO_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_gpio.h"
|
||||||
|
#endif /* HAL_GPIO_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_DMA_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_dma.h"
|
||||||
|
#endif /* HAL_DMA_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_MDMA_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_mdma.h"
|
||||||
|
#endif /* HAL_MDMA_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_HASH_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_hash.h"
|
||||||
|
#endif /* HAL_HASH_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_DCMI_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_dcmi.h"
|
||||||
|
#endif /* HAL_DCMI_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_DMA2D_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_dma2d.h"
|
||||||
|
#endif /* HAL_DMA2D_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_DFSDM_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_dfsdm.h"
|
||||||
|
#endif /* HAL_DFSDM_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_ETH_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_eth.h"
|
||||||
|
#endif /* HAL_ETH_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_EXTI_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_exti.h"
|
||||||
|
#endif /* HAL_EXTI_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_CORTEX_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_cortex.h"
|
||||||
|
#endif /* HAL_CORTEX_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_ADC_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_adc.h"
|
||||||
|
#endif /* HAL_ADC_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_FDCAN_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_fdcan.h"
|
||||||
|
#endif /* HAL_FDCAN_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_CEC_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_cec.h"
|
||||||
|
#endif /* HAL_CEC_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_COMP_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_comp.h"
|
||||||
|
#endif /* HAL_COMP_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_CRC_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_crc.h"
|
||||||
|
#endif /* HAL_CRC_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_CRYP_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_cryp.h"
|
||||||
|
#endif /* HAL_CRYP_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_DAC_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_dac.h"
|
||||||
|
#endif /* HAL_DAC_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_FLASH_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_flash.h"
|
||||||
|
#endif /* HAL_FLASH_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_HRTIM_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_hrtim.h"
|
||||||
|
#endif /* HAL_HRTIM_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_HSEM_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_hsem.h"
|
||||||
|
#endif /* HAL_HSEM_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_SRAM_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_sram.h"
|
||||||
|
#endif /* HAL_SRAM_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_NOR_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_nor.h"
|
||||||
|
#endif /* HAL_NOR_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_NAND_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_nand.h"
|
||||||
|
#endif /* HAL_NAND_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_I2C_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_i2c.h"
|
||||||
|
#endif /* HAL_I2C_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_I2S_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_i2s.h"
|
||||||
|
#endif /* HAL_I2S_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_IWDG_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_iwdg.h"
|
||||||
|
#endif /* HAL_IWDG_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_JPEG_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_jpeg.h"
|
||||||
|
#endif /* HAL_JPEG_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_MDIOS_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_mdios.h"
|
||||||
|
#endif /* HAL_MDIOS_MODULE_ENABLED */
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef HAL_MMC_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_mmc.h"
|
||||||
|
#endif /* HAL_MMC_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_LPTIM_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_lptim.h"
|
||||||
|
#endif /* HAL_LPTIM_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_LTDC_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_ltdc.h"
|
||||||
|
#endif /* HAL_LTDC_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_OPAMP_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_opamp.h"
|
||||||
|
#endif /* HAL_OPAMP_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_PWR_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_pwr.h"
|
||||||
|
#endif /* HAL_PWR_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_QSPI_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_qspi.h"
|
||||||
|
#endif /* HAL_QSPI_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_RAMECC_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_ramecc.h"
|
||||||
|
#endif /* HAL_HCD_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_RNG_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_rng.h"
|
||||||
|
#endif /* HAL_RNG_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_RTC_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_rtc.h"
|
||||||
|
#endif /* HAL_RTC_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_SAI_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_sai.h"
|
||||||
|
#endif /* HAL_SAI_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_SD_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_sd.h"
|
||||||
|
#endif /* HAL_SD_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_SDRAM_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_sdram.h"
|
||||||
|
#endif /* HAL_SDRAM_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_SPI_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_spi.h"
|
||||||
|
#endif /* HAL_SPI_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_SPDIFRX_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_spdifrx.h"
|
||||||
|
#endif /* HAL_SPDIFRX_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_SWPMI_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_swpmi.h"
|
||||||
|
#endif /* HAL_SWPMI_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_TIM_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_tim.h"
|
||||||
|
#endif /* HAL_TIM_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_UART_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_uart.h"
|
||||||
|
#endif /* HAL_UART_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_USART_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_usart.h"
|
||||||
|
#endif /* HAL_USART_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_IRDA_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_irda.h"
|
||||||
|
#endif /* HAL_IRDA_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_SMARTCARD_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_smartcard.h"
|
||||||
|
#endif /* HAL_SMARTCARD_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_SMBUS_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_smbus.h"
|
||||||
|
#endif /* HAL_SMBUS_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_WWDG_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_wwdg.h"
|
||||||
|
#endif /* HAL_WWDG_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_PCD_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_pcd.h"
|
||||||
|
#endif /* HAL_PCD_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_HCD_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_hcd.h"
|
||||||
|
#endif /* HAL_HCD_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 /* __STM32H7xx_HAL_CONF_H */
|
||||||
|
|
||||||
|
|
||||||
|
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
@ -0,0 +1,50 @@
|
|||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file Templates/Inc/stm32h7xx_it.h
|
||||||
|
* @author MCD Application Team
|
||||||
|
* @brief This file contains the headers of the interrupt handlers.
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* <h2><center>© Copyright (c) 2017 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 __STM32H7xx_IT_H
|
||||||
|
#define __STM32H7xx_IT_H
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Includes ------------------------------------------------------------------*/
|
||||||
|
/* Exported types ------------------------------------------------------------*/
|
||||||
|
/* Exported constants --------------------------------------------------------*/
|
||||||
|
/* Exported macro ------------------------------------------------------------*/
|
||||||
|
/* Exported functions ------------------------------------------------------- */
|
||||||
|
|
||||||
|
void NMI_Handler(void);
|
||||||
|
void HardFault_Handler(void);
|
||||||
|
void MemManage_Handler(void);
|
||||||
|
void BusFault_Handler(void);
|
||||||
|
void UsageFault_Handler(void);
|
||||||
|
void SVC_Handler(void);
|
||||||
|
void DebugMon_Handler(void);
|
||||||
|
void PendSV_Handler(void);
|
||||||
|
void SysTick_Handler(void);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* __STM32H7xx_IT_H */
|
||||||
|
|
||||||
|
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
@ -0,0 +1,82 @@
|
|||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file stm32h7xx_nucleo_conf.h
|
||||||
|
* @author MCD Application Team
|
||||||
|
* @brief STM32H7xx_Nuleo board configuration file.
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* <h2><center>© Copyright (c) 2019 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 STM32H7XX_NUCLEO_CONF_H
|
||||||
|
#define STM32H7XX_NUCLEO_CONF_H
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Includes ------------------------------------------------------------------*/
|
||||||
|
#include "stm32h7xx_hal.h"
|
||||||
|
#include "stm32h743xx.h"
|
||||||
|
|
||||||
|
/** @addtogroup BSP
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @addtogroup STM32H7XX_NUCLEO
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup STM32H7XX_NUCLEO_CONFIG Config
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup STM32H7XX_NUCLEO_CONFIG_Exported_Constants Exported Constants
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
/* Nucleo pin and part number defines */
|
||||||
|
#define USE_NUCLEO_144
|
||||||
|
#define USE_NUCLEO_H743ZI
|
||||||
|
|
||||||
|
/* COM define */
|
||||||
|
#define USE_COM_LOG 0U
|
||||||
|
#define USE_BSP_COM_FEATURE 1U
|
||||||
|
|
||||||
|
/* IRQ priorities */
|
||||||
|
#define BSP_BUTTON_USER_IT_PRIORITY 15U
|
||||||
|
|
||||||
|
#define BUS_SPI1_BAUDRATE 18000000
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* STM32H7XX_NUCLEO_CONF_H */
|
||||||
|
|
||||||
|
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
@ -0,0 +1,105 @@
|
|||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file system_stm32h7xx.h
|
||||||
|
* @author MCD Application Team
|
||||||
|
* @brief CMSIS Cortex-Mx Device System Source File for STM32H7xx devices.
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* <h2><center>© Copyright (c) 2017 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
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @addtogroup CMSIS
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @addtogroup stm32h7xx_system
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Define to prevent recursive inclusion
|
||||||
|
*/
|
||||||
|
#ifndef SYSTEM_STM32H7XX_H
|
||||||
|
#define SYSTEM_STM32H7XX_H
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/** @addtogroup STM32H7xx_System_Includes
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/** @addtogroup STM32H7xx_System_Exported_types
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
/* This variable is updated in three ways:
|
||||||
|
1) by calling CMSIS function SystemCoreClockUpdate()
|
||||||
|
2) by calling HAL API function HAL_RCC_GetSysClockFreq()
|
||||||
|
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.
|
||||||
|
*/
|
||||||
|
extern uint32_t SystemCoreClock; /*!< System Domain1 Clock Frequency */
|
||||||
|
extern uint32_t SystemD2Clock; /*!< System Domain2 Clock Frequency */
|
||||||
|
extern const uint8_t D1CorePrescTable[16] ; /*!< D1CorePrescTable prescalers table values */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @addtogroup STM32H7xx_System_Exported_Constants
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @addtogroup STM32H7xx_System_Exported_Macros
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @addtogroup STM32H7xx_System_Exported_Functions
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
extern void SystemInit(void);
|
||||||
|
extern void SystemCoreClockUpdate(void);
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* SYSTEM_STM32H7XX_H */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
@ -0,0 +1,4 @@
|
|||||||
|
CSRC += $(wildcard $(CURRENTPATH)/Src/*.c)
|
||||||
|
CSRC += $(wildcard $(CURRENTPATH)/Src/networking/*.c)
|
||||||
|
|
||||||
|
INCLUDES += $(CURRENTPATH)/Inc
|
@ -0,0 +1,191 @@
|
|||||||
|
/*
|
||||||
|
*****************************************************************************
|
||||||
|
**
|
||||||
|
|
||||||
|
** File : LinkerScript.ld
|
||||||
|
**
|
||||||
|
** Abstract : Linker script for STM32H743XIHx Device with
|
||||||
|
** 2048KByte FLASH, 128KByte RAM
|
||||||
|
**
|
||||||
|
** Set heap size, stack size and stack location according
|
||||||
|
** to application requirements.
|
||||||
|
**
|
||||||
|
** Set memory bank area and size if external memory is used.
|
||||||
|
**
|
||||||
|
** Target : STMicroelectronics STM32
|
||||||
|
**
|
||||||
|
**
|
||||||
|
** Distribution: The file is distributed as is, without any warranty
|
||||||
|
** of any kind.
|
||||||
|
**
|
||||||
|
*****************************************************************************
|
||||||
|
** @attention
|
||||||
|
**
|
||||||
|
** Copyright (c) 2017 STMicroelectronics.
|
||||||
|
** All rights reserved.
|
||||||
|
**
|
||||||
|
** 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
|
||||||
|
**
|
||||||
|
****************************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Entry Point */
|
||||||
|
ENTRY(Reset_Handler)
|
||||||
|
|
||||||
|
/* Highest address of the user mode stack */
|
||||||
|
_estack = 0x24080000; /* end of RAM */
|
||||||
|
/* Generate a link error if heap and stack don't fit into RAM */
|
||||||
|
_Min_Heap_Size = 0x400; /* required amount of heap */
|
||||||
|
_Min_Stack_Size = 0x800; /* required amount of stack */
|
||||||
|
|
||||||
|
/* Specify the memory areas */
|
||||||
|
MEMORY
|
||||||
|
{
|
||||||
|
DTCMRAM (xrw) : ORIGIN = 0x20000000, LENGTH = 128K
|
||||||
|
RAM_D1 (xrw) : ORIGIN = 0x24000000, LENGTH = 512K
|
||||||
|
RAM_D2 (xrw) : ORIGIN = 0x30000000, LENGTH = 288K
|
||||||
|
RAM_D3 (xrw) : ORIGIN = 0x38000000, LENGTH = 64K
|
||||||
|
ITCMRAM (xrw) : ORIGIN = 0x00000000, LENGTH = 64K
|
||||||
|
FLASH (rx) : ORIGIN = 0x8000000, LENGTH = 2048K
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Define output sections */
|
||||||
|
SECTIONS
|
||||||
|
{
|
||||||
|
/* The startup code goes first into FLASH */
|
||||||
|
.isr_vector :
|
||||||
|
{
|
||||||
|
. = ALIGN(4);
|
||||||
|
KEEP(*(.isr_vector)) /* Startup code */
|
||||||
|
. = ALIGN(4);
|
||||||
|
} >FLASH
|
||||||
|
|
||||||
|
/* The program code and other data goes into FLASH */
|
||||||
|
.text :
|
||||||
|
{
|
||||||
|
. = ALIGN(4);
|
||||||
|
*(.text) /* .text sections (code) */
|
||||||
|
*(.text*) /* .text* sections (code) */
|
||||||
|
*(.glue_7) /* glue arm to thumb code */
|
||||||
|
*(.glue_7t) /* glue thumb to arm code */
|
||||||
|
*(.eh_frame)
|
||||||
|
|
||||||
|
KEEP (*(.init))
|
||||||
|
KEEP (*(.fini))
|
||||||
|
|
||||||
|
. = ALIGN(4);
|
||||||
|
_etext = .; /* define a global symbols at end of code */
|
||||||
|
} >FLASH
|
||||||
|
|
||||||
|
/* Constant data goes into FLASH */
|
||||||
|
.rodata :
|
||||||
|
{
|
||||||
|
. = ALIGN(4);
|
||||||
|
*(.rodata) /* .rodata sections (constants, strings, etc.) */
|
||||||
|
*(.rodata*) /* .rodata* sections (constants, strings, etc.) */
|
||||||
|
. = ALIGN(4);
|
||||||
|
} >FLASH
|
||||||
|
|
||||||
|
.ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH
|
||||||
|
.ARM : {
|
||||||
|
__exidx_start = .;
|
||||||
|
*(.ARM.exidx*)
|
||||||
|
__exidx_end = .;
|
||||||
|
} >FLASH
|
||||||
|
|
||||||
|
.preinit_array :
|
||||||
|
{
|
||||||
|
PROVIDE_HIDDEN (__preinit_array_start = .);
|
||||||
|
KEEP (*(.preinit_array*))
|
||||||
|
PROVIDE_HIDDEN (__preinit_array_end = .);
|
||||||
|
} >FLASH
|
||||||
|
|
||||||
|
.init_array :
|
||||||
|
{
|
||||||
|
PROVIDE_HIDDEN (__init_array_start = .);
|
||||||
|
KEEP (*(SORT(.init_array.*)))
|
||||||
|
KEEP (*(.init_array*))
|
||||||
|
PROVIDE_HIDDEN (__init_array_end = .);
|
||||||
|
} >FLASH
|
||||||
|
|
||||||
|
.fini_array :
|
||||||
|
{
|
||||||
|
PROVIDE_HIDDEN (__fini_array_start = .);
|
||||||
|
KEEP (*(SORT(.fini_array.*)))
|
||||||
|
KEEP (*(.fini_array*))
|
||||||
|
PROVIDE_HIDDEN (__fini_array_end = .);
|
||||||
|
} >FLASH
|
||||||
|
|
||||||
|
/* used by the startup to initialize data */
|
||||||
|
_sidata = LOADADDR(.data);
|
||||||
|
|
||||||
|
/* Initialized data sections goes into RAM, load LMA copy after code */
|
||||||
|
.data :
|
||||||
|
{
|
||||||
|
. = ALIGN(4);
|
||||||
|
_sdata = .; /* create a global symbol at data start */
|
||||||
|
*(.data) /* .data sections */
|
||||||
|
*(.data*) /* .data* sections */
|
||||||
|
|
||||||
|
. = ALIGN(4);
|
||||||
|
_edata = .; /* define a global symbol at data end */
|
||||||
|
} >RAM_D1 AT> FLASH
|
||||||
|
|
||||||
|
|
||||||
|
/* Uninitialized data section */
|
||||||
|
. = ALIGN(4);
|
||||||
|
.bss :
|
||||||
|
{
|
||||||
|
/* This is used by the startup in order to initialize the .bss secion */
|
||||||
|
_sbss = .; /* define a global symbol at bss start */
|
||||||
|
__bss_start__ = _sbss;
|
||||||
|
*(.bss)
|
||||||
|
*(.bss*)
|
||||||
|
*(COMMON)
|
||||||
|
|
||||||
|
. = ALIGN(4);
|
||||||
|
_ebss = .; /* define a global symbol at bss end */
|
||||||
|
__bss_end__ = _ebss;
|
||||||
|
} >RAM_D1
|
||||||
|
|
||||||
|
/* User_heap_stack section, used to check that there is enough RAM left */
|
||||||
|
._user_heap_stack :
|
||||||
|
{
|
||||||
|
. = ALIGN(8);
|
||||||
|
PROVIDE ( end = . );
|
||||||
|
PROVIDE ( _end = . );
|
||||||
|
. = . + _Min_Heap_Size;
|
||||||
|
. = . + _Min_Stack_Size;
|
||||||
|
. = ALIGN(8);
|
||||||
|
} >RAM_D1
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
.lwip_sec (NOLOAD) : {
|
||||||
|
. = ABSOLUTE(0x30040000);
|
||||||
|
*(.RxDecripSection)
|
||||||
|
|
||||||
|
. = ABSOLUTE(0x30040060);
|
||||||
|
*(.TxDecripSection)
|
||||||
|
|
||||||
|
. = ABSOLUTE(0x30040200);
|
||||||
|
*(.RxArraySection)
|
||||||
|
} >RAM_D2 AT> FLASH
|
||||||
|
|
||||||
|
/* Remove information from the standard libraries */
|
||||||
|
/DISCARD/ :
|
||||||
|
{
|
||||||
|
libc.a ( * )
|
||||||
|
libm.a ( * )
|
||||||
|
libgcc.a ( * )
|
||||||
|
}
|
||||||
|
|
||||||
|
.ARM.attributes 0 : { *(.ARM.attributes) }
|
||||||
|
}
|
||||||
|
|
||||||
|
|
@ -0,0 +1,9 @@
|
|||||||
|
target_sources(${TARGET_NAME} PRIVATE
|
||||||
|
freertos.c
|
||||||
|
hardware_init.c
|
||||||
|
stm32h7xx_hal_timebase_tim.c
|
||||||
|
stm32h7xx_it.c
|
||||||
|
syscalls.c
|
||||||
|
cmsis_os.c
|
||||||
|
system_stm32h7xx.c
|
||||||
|
)
|
1727
bsp_stm32_freertos/STM32CubeH7/Boards/NUCLEO-H743ZI/Src/cmsis_os.c
Normal file
1727
bsp_stm32_freertos/STM32CubeH7/Boards/NUCLEO-H743ZI/Src/cmsis_os.c
Normal file
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,79 @@
|
|||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* File Name : freertos.c
|
||||||
|
* Description : Code for freertos applications
|
||||||
|
******************************************************************************
|
||||||
|
* This notice applies to any and all portions of this file
|
||||||
|
* that are not between comment pairs USER CODE BEGIN and
|
||||||
|
* USER CODE END. Other portions of this file, whether
|
||||||
|
* inserted by the user or by software development tools
|
||||||
|
* are owned by their respective copyright owners.
|
||||||
|
*
|
||||||
|
* Copyright (c) 2018 STMicroelectronics International N.V.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted, provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistribution 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 other
|
||||||
|
* contributors to this software may be used to endorse or promote products
|
||||||
|
* derived from this software without specific written permission.
|
||||||
|
* 4. This software, including modifications and/or derivative works of this
|
||||||
|
* software, must execute solely and exclusively on microcontroller or
|
||||||
|
* microprocessor devices manufactured by or for STMicroelectronics.
|
||||||
|
* 5. Redistribution and use of this software other than as permitted under
|
||||||
|
* this license is void and will automatically terminate your rights under
|
||||||
|
* this license.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY STMICROELECTRONICS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS, IMPLIED OR STATUTORY WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
|
||||||
|
* PARTICULAR PURPOSE AND NON-INFRINGEMENT OF THIRD PARTY INTELLECTUAL PROPERTY
|
||||||
|
* RIGHTS ARE DISCLAIMED TO THE FULLEST EXTENT PERMITTED BY LAW. IN NO EVENT
|
||||||
|
* SHALL STMICROELECTRONICS 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 "freertos/FreeRTOS.h"
|
||||||
|
#include "freertos/task.h"
|
||||||
|
#include <portmacro.h>
|
||||||
|
|
||||||
|
/* USER CODE BEGIN Includes */
|
||||||
|
void vRequestContextSwitchFromISR() {
|
||||||
|
portYIELD_FROM_ISR(pdTRUE);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* USER CODE END Includes */
|
||||||
|
|
||||||
|
/* Variables -----------------------------------------------------------------*/
|
||||||
|
|
||||||
|
/* USER CODE BEGIN Variables */
|
||||||
|
|
||||||
|
/* USER CODE END Variables */
|
||||||
|
|
||||||
|
/* Function prototypes -------------------------------------------------------*/
|
||||||
|
|
||||||
|
/* USER CODE BEGIN FunctionPrototypes */
|
||||||
|
|
||||||
|
/* USER CODE END FunctionPrototypes */
|
||||||
|
|
||||||
|
/* Hook prototypes */
|
||||||
|
|
||||||
|
/* USER CODE BEGIN Application */
|
||||||
|
|
||||||
|
/* USER CODE END Application */
|
||||||
|
|
||||||
|
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
@ -0,0 +1,267 @@
|
|||||||
|
#include "hardware_init.h"
|
||||||
|
|
||||||
|
#include <stm32h743xx.h>
|
||||||
|
#include <stm32h7xx_hal_rcc_ex.h>
|
||||||
|
#include <stm32h7xx_nucleo.h>
|
||||||
|
|
||||||
|
#include <app_ethernet.h>
|
||||||
|
#include <common/stm32_nucleo/networking/ethernetif.h>
|
||||||
|
#include <lwip/netif.h>
|
||||||
|
#include <lwip/init.h>
|
||||||
|
#include <lwip/ip_addr.h>
|
||||||
|
#include <netif/ethernet.h>
|
||||||
|
|
||||||
|
#include <boardconfig.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
/* Forward declarations */
|
||||||
|
void MPU_Config(void);
|
||||||
|
void SystemClock_Config(void);
|
||||||
|
void BSP_Config(void);
|
||||||
|
void CPU_CACHE_Enable(void);
|
||||||
|
void MX_USART3_UART_Init(uint32_t baudRate);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ST-LINK UART3
|
||||||
|
* CN5 pins on board
|
||||||
|
*/
|
||||||
|
UART_HandleTypeDef huart3;
|
||||||
|
GPIO_InitTypeDef gpio_uart_init_struct;
|
||||||
|
struct netif gnetif;
|
||||||
|
bool debugAvailable = false;
|
||||||
|
|
||||||
|
void performHardwareInit() {
|
||||||
|
/* Configure the MPU attributes as Device memory for ETH DMA descriptors */
|
||||||
|
MPU_Config();
|
||||||
|
|
||||||
|
/* Enable the CPU Cache */
|
||||||
|
CPU_CACHE_Enable();
|
||||||
|
|
||||||
|
MX_USART3_UART_Init(DEBUG_UART_BAUDRATE);
|
||||||
|
|
||||||
|
HAL_StatusTypeDef retval = HAL_Init();
|
||||||
|
if(retval != HAL_OK) {
|
||||||
|
printf("Error: HAL initialization failed!\n\r");
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Configure the system clock to 400 MHz */
|
||||||
|
SystemClock_Config();
|
||||||
|
|
||||||
|
BSP_Config();
|
||||||
|
}
|
||||||
|
void MX_USART3_UART_Init(uint32_t baudRate)
|
||||||
|
{
|
||||||
|
__HAL_RCC_USART3_CONFIG(RCC_USART3CLKSOURCE_HSI);
|
||||||
|
__HAL_RCC_GPIOD_CLK_ENABLE();
|
||||||
|
__HAL_RCC_USART3_CLK_ENABLE();
|
||||||
|
/*Configure GPIO pins : PD8 PD9 */
|
||||||
|
gpio_uart_init_struct.Pin = GPIO_PIN_8|GPIO_PIN_9;
|
||||||
|
gpio_uart_init_struct.Mode = GPIO_MODE_AF_PP;
|
||||||
|
gpio_uart_init_struct.Pull = GPIO_NOPULL;
|
||||||
|
gpio_uart_init_struct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||||
|
gpio_uart_init_struct.Alternate = GPIO_AF7_USART3;
|
||||||
|
HAL_GPIO_Init(GPIOD, &gpio_uart_init_struct);
|
||||||
|
|
||||||
|
int result;
|
||||||
|
huart3.Instance = USART3;
|
||||||
|
huart3.Init.BaudRate = baudRate;
|
||||||
|
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;
|
||||||
|
huart3.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
|
||||||
|
huart3.Init.ClockPrescaler = UART_PRESCALER_DIV1;
|
||||||
|
//huart3.Init.FIFOMode = UART_FIFOMODE_DISABLE;
|
||||||
|
//huart3.Init.TXFIFOThreshold = UART_TXFIFO_THRESHOLD_1_8;
|
||||||
|
//huart3.Init.RXFIFOThreshold = UART_RXFIFO_THRESHOLD_1_8;
|
||||||
|
huart3.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
|
||||||
|
// we can't do error handling (simple print out first) here because UART3 is our print interface
|
||||||
|
result = HAL_UART_Init(&huart3);
|
||||||
|
if(result == HAL_OK) {
|
||||||
|
//print_uart3("\rUART3 configured successfully !\r\n\0");
|
||||||
|
debugAvailable = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief System Clock Configuration
|
||||||
|
* The system Clock is configured as follow :
|
||||||
|
* System Clock source = PLL (HSE BYPASS)
|
||||||
|
* SYSCLK(Hz) = 400000000 (CPU Clock)
|
||||||
|
* HCLK(Hz) = 200000000 (AXI and AHBs Clock)
|
||||||
|
* AHB Prescaler = 2
|
||||||
|
* D1 APB3 Prescaler = 2 (APB3 Clock 100MHz)
|
||||||
|
* D2 APB1 Prescaler = 2 (APB1 Clock 100MHz)
|
||||||
|
* D2 APB2 Prescaler = 2 (APB2 Clock 100MHz)
|
||||||
|
* D3 APB4 Prescaler = 2 (APB4 Clock 100MHz)
|
||||||
|
* HSE Frequency(Hz) = 8000000
|
||||||
|
* PLL_M = 4
|
||||||
|
* PLL_N = 400
|
||||||
|
* PLL_P = 2
|
||||||
|
* PLL_Q = 4
|
||||||
|
* PLL_R = 2
|
||||||
|
* VDD(V) = 3.3
|
||||||
|
* Flash Latency(WS) = 4
|
||||||
|
* @param None
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
void SystemClock_Config(void)
|
||||||
|
{
|
||||||
|
RCC_ClkInitTypeDef RCC_ClkInitStruct;
|
||||||
|
RCC_OscInitTypeDef RCC_OscInitStruct;
|
||||||
|
HAL_StatusTypeDef ret = HAL_OK;
|
||||||
|
|
||||||
|
/*!< Supply configuration update enable */
|
||||||
|
MODIFY_REG(PWR->CR3, PWR_CR3_SCUEN, 0); // @suppress("Field cannot be resolved")
|
||||||
|
|
||||||
|
/* 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); // @suppress("Field cannot be resolved")
|
||||||
|
|
||||||
|
while(!__HAL_PWR_GET_FLAG(PWR_FLAG_VOSRDY)) {} // @suppress("Field cannot be resolved")
|
||||||
|
|
||||||
|
/* Enable D2 domain SRAM3 Clock (0x30040000 AXI)*/
|
||||||
|
__HAL_RCC_D2SRAM3_CLK_ENABLE(); // @suppress("Field cannot be resolved")
|
||||||
|
|
||||||
|
/* Enable HSE Oscillator and activate PLL with HSE as source */
|
||||||
|
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
|
||||||
|
RCC_OscInitStruct.HSEState = RCC_HSE_BYPASS;
|
||||||
|
RCC_OscInitStruct.HSIState = RCC_HSI_OFF;
|
||||||
|
RCC_OscInitStruct.CSIState = RCC_CSI_OFF;
|
||||||
|
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
|
||||||
|
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
|
||||||
|
|
||||||
|
RCC_OscInitStruct.PLL.PLLM = 4;
|
||||||
|
RCC_OscInitStruct.PLL.PLLN = 400;
|
||||||
|
RCC_OscInitStruct.PLL.PLLP = 2;
|
||||||
|
RCC_OscInitStruct.PLL.PLLR = 2;
|
||||||
|
RCC_OscInitStruct.PLL.PLLQ = 4;
|
||||||
|
|
||||||
|
RCC_OscInitStruct.PLL.PLLVCOSEL = RCC_PLL1VCOWIDE;
|
||||||
|
RCC_OscInitStruct.PLL.PLLRGE = RCC_PLL1VCIRANGE_2;
|
||||||
|
ret = HAL_RCC_OscConfig(&RCC_OscInitStruct);
|
||||||
|
if(ret != HAL_OK)
|
||||||
|
{
|
||||||
|
while(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Select PLL as system clock source and configure bus clocks dividers */
|
||||||
|
RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK |
|
||||||
|
RCC_CLOCKTYPE_D1PCLK1 | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2 |
|
||||||
|
RCC_CLOCKTYPE_D3PCLK1);
|
||||||
|
|
||||||
|
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
|
||||||
|
RCC_ClkInitStruct.SYSCLKDivider = RCC_SYSCLK_DIV1;
|
||||||
|
RCC_ClkInitStruct.AHBCLKDivider = RCC_HCLK_DIV2;
|
||||||
|
RCC_ClkInitStruct.APB3CLKDivider = RCC_APB3_DIV2;
|
||||||
|
RCC_ClkInitStruct.APB1CLKDivider = RCC_APB1_DIV2;
|
||||||
|
RCC_ClkInitStruct.APB2CLKDivider = RCC_APB2_DIV2;
|
||||||
|
RCC_ClkInitStruct.APB4CLKDivider = RCC_APB4_DIV2;
|
||||||
|
ret = HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_4);
|
||||||
|
if(ret != HAL_OK)
|
||||||
|
{
|
||||||
|
while(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*Configure the MPU attributes */
|
||||||
|
void MPU_Config(void)
|
||||||
|
{
|
||||||
|
MPU_Region_InitTypeDef MPU_InitStruct;
|
||||||
|
|
||||||
|
/* Disable the MPU */
|
||||||
|
HAL_MPU_Disable();
|
||||||
|
|
||||||
|
/* Configure the MPU attributes as Device not cacheable
|
||||||
|
for ETH DMA descriptors */
|
||||||
|
MPU_InitStruct.Enable = MPU_REGION_ENABLE;
|
||||||
|
MPU_InitStruct.BaseAddress = 0x30040000;
|
||||||
|
MPU_InitStruct.Size = MPU_REGION_SIZE_256B;
|
||||||
|
MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS;
|
||||||
|
MPU_InitStruct.IsBufferable = MPU_ACCESS_BUFFERABLE;
|
||||||
|
MPU_InitStruct.IsCacheable = MPU_ACCESS_NOT_CACHEABLE;
|
||||||
|
MPU_InitStruct.IsShareable = MPU_ACCESS_NOT_SHAREABLE;
|
||||||
|
MPU_InitStruct.Number = MPU_REGION_NUMBER0;
|
||||||
|
MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL0;
|
||||||
|
MPU_InitStruct.SubRegionDisable = 0x00;
|
||||||
|
MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_ENABLE;
|
||||||
|
|
||||||
|
HAL_MPU_ConfigRegion(&MPU_InitStruct);
|
||||||
|
|
||||||
|
/* Configure the MPU attributes as Cacheable write through
|
||||||
|
for LwIP RAM heap which contains the Tx buffers */
|
||||||
|
MPU_InitStruct.Enable = MPU_REGION_ENABLE;
|
||||||
|
MPU_InitStruct.BaseAddress = 0x30044000;
|
||||||
|
MPU_InitStruct.Size = MPU_REGION_SIZE_16KB;
|
||||||
|
MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS;
|
||||||
|
MPU_InitStruct.IsBufferable = MPU_ACCESS_NOT_BUFFERABLE;
|
||||||
|
MPU_InitStruct.IsCacheable = MPU_ACCESS_CACHEABLE;
|
||||||
|
MPU_InitStruct.IsShareable = MPU_ACCESS_NOT_SHAREABLE;
|
||||||
|
MPU_InitStruct.Number = MPU_REGION_NUMBER1;
|
||||||
|
MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL0;
|
||||||
|
MPU_InitStruct.SubRegionDisable = 0x00;
|
||||||
|
MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_ENABLE;
|
||||||
|
|
||||||
|
HAL_MPU_ConfigRegion(&MPU_InitStruct);
|
||||||
|
|
||||||
|
/* Enable the MPU */
|
||||||
|
HAL_MPU_Enable(MPU_PRIVILEGED_DEFAULT);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*CPU L1-Cache enable*/
|
||||||
|
void CPU_CACHE_Enable(void)
|
||||||
|
{
|
||||||
|
/* Enable I-Cache */
|
||||||
|
SCB_EnableICache();
|
||||||
|
|
||||||
|
/* Enable D-Cache */
|
||||||
|
SCB_EnableDCache();
|
||||||
|
}
|
||||||
|
|
||||||
|
void BSP_Config(void)
|
||||||
|
{
|
||||||
|
BSP_LED_Init(LED1);
|
||||||
|
BSP_LED_Init(LED2);
|
||||||
|
BSP_LED_Init(LED3);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Netif_Config(void)
|
||||||
|
{
|
||||||
|
ip_addr_t ipaddr;
|
||||||
|
ip_addr_t netmask;
|
||||||
|
ip_addr_t gw;
|
||||||
|
#if LWIP_DHCP
|
||||||
|
ip_addr_set_zero_ip4(&ipaddr);
|
||||||
|
ip_addr_set_zero_ip4(&netmask);
|
||||||
|
ip_addr_set_zero_ip4(&gw);
|
||||||
|
#else
|
||||||
|
|
||||||
|
/* IP address default setting */
|
||||||
|
set_lwip_addresses(&ipaddr, &netmask, &gw);
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* add the network interface */
|
||||||
|
struct netif* netif_valid = netif_add(&gnetif, (ip4_addr_t*)&ipaddr,
|
||||||
|
(ip4_addr_t*)&netmask, (ip4_addr_t*) &gw, NULL, ðernetif_init,
|
||||||
|
ðernet_input);
|
||||||
|
if(netif_valid == NULL) {
|
||||||
|
printf("Error: netif initialization failed!\n\r");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
/* Registers the default network interface */
|
||||||
|
netif_set_default(&gnetif);
|
||||||
|
|
||||||
|
ethernet_link_status_updated(&gnetif);
|
||||||
|
|
||||||
|
#if LWIP_NETIF_LINK_CALLBACK
|
||||||
|
netif_set_link_callback(&gnetif, ethernet_link_status_updated);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
@ -0,0 +1,168 @@
|
|||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file stm32h7xx_hal_timebase_tim.c
|
||||||
|
* @author MCD Application Team
|
||||||
|
* @brief HAL time base based on the hardware TIM.
|
||||||
|
*
|
||||||
|
* This file overrides the native HAL time base functions (defined as weak)
|
||||||
|
* the TIM time base:
|
||||||
|
* + Intializes the TIM peripheral generate a Period elapsed Event each 1ms
|
||||||
|
* + HAL_IncTick is called inside HAL_TIM_PeriodElapsedCallback ie each 1ms
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
* @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 "stm32h7xx_hal.h"
|
||||||
|
|
||||||
|
/* Private typedef -----------------------------------------------------------*/
|
||||||
|
/* Private define ------------------------------------------------------------*/
|
||||||
|
/* Private macro -------------------------------------------------------------*/
|
||||||
|
/* Private variables ---------------------------------------------------------*/
|
||||||
|
TIM_HandleTypeDef TimHandle;
|
||||||
|
/* Private function prototypes -----------------------------------------------*/
|
||||||
|
void TIM6_DAC_IRQHandler(void);
|
||||||
|
/* 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;
|
||||||
|
|
||||||
|
/*Configure the TIM6 IRQ priority */
|
||||||
|
HAL_NVIC_SetPriority(TIM6_DAC_IRQn, TickPriority ,0U);
|
||||||
|
|
||||||
|
/* Enable the TIM6 global Interrupt */
|
||||||
|
HAL_NVIC_EnableIRQ(TIM6_DAC_IRQn);
|
||||||
|
|
||||||
|
/* 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 = 2*HAL_RCC_GetPCLK1Freq();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Compute the prescaler value to have TIM6 counter clock equal to 1MHz */
|
||||||
|
uwPrescalerValue = (uint32_t) ((uwTimclock / 1000000U) - 1U);
|
||||||
|
|
||||||
|
/* Initialize TIM6 */
|
||||||
|
TimHandle.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
|
||||||
|
*/
|
||||||
|
TimHandle.Init.Period = (1000000U / 1000U) - 1U;
|
||||||
|
TimHandle.Init.Prescaler = uwPrescalerValue;
|
||||||
|
TimHandle.Init.ClockDivision = 0;
|
||||||
|
TimHandle.Init.CounterMode = TIM_COUNTERMODE_UP;
|
||||||
|
if(HAL_TIM_Base_Init(&TimHandle) == HAL_OK)
|
||||||
|
{
|
||||||
|
/* Start the TIM time Base generation in interrupt mode */
|
||||||
|
return HAL_TIM_Base_Start_IT(&TimHandle);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Return function status */
|
||||||
|
return HAL_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @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(&TimHandle, 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(&TimHandle, TIM_IT_UPDATE);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @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)
|
||||||
|
{
|
||||||
|
HAL_IncTick();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief This function handles TIM interrupt request.
|
||||||
|
* @param None
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
void TIM6_DAC_IRQHandler(void)
|
||||||
|
{
|
||||||
|
HAL_TIM_IRQHandler(&TimHandle);
|
||||||
|
}
|
||||||
|
|
||||||
|
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
@ -0,0 +1,162 @@
|
|||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file LwIP/LwIP_HTTP_Server_Netconn_RTOS/Src/stm32h7xx_it.c
|
||||||
|
* @author MCD Application Team
|
||||||
|
* @brief Main Interrupt Service Routines.
|
||||||
|
******************************************************************************
|
||||||
|
* @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 "stm32h7xx_it.h"
|
||||||
|
|
||||||
|
#include "cmsis_os.h"
|
||||||
|
#include "main.h"
|
||||||
|
|
||||||
|
/* Private typedef -----------------------------------------------------------*/
|
||||||
|
/* Private define ------------------------------------------------------------*/
|
||||||
|
/* Private macro -------------------------------------------------------------*/
|
||||||
|
/* Private variables ---------------------------------------------------------*/
|
||||||
|
extern ETH_HandleTypeDef EthHandle;
|
||||||
|
/* Private function prototypes -----------------------------------------------*/
|
||||||
|
void ETH_IRQHandler(void);
|
||||||
|
/* Private functions ---------------------------------------------------------*/
|
||||||
|
|
||||||
|
/******************************************************************************/
|
||||||
|
/* Cortex-M7 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 Debug Monitor exception.
|
||||||
|
* @param None
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
void DebugMon_Handler(void)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief This function handles SysTick Handler.
|
||||||
|
* @param None
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
void SysTick_Handler(void)
|
||||||
|
{
|
||||||
|
osSystickHandler();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/******************************************************************************/
|
||||||
|
/* STM32H7xx 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_stm32h7xx.s). */
|
||||||
|
/******************************************************************************/
|
||||||
|
/**
|
||||||
|
* @brief This function handles Ethernet interrupt request.
|
||||||
|
* @param None
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
void ETH_IRQHandler(void)
|
||||||
|
{
|
||||||
|
HAL_ETH_IRQHandler(&EthHandle);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
@ -0,0 +1,154 @@
|
|||||||
|
/*!
|
||||||
|
* @file syscalls.c
|
||||||
|
* Implements some base-level for libc for heap management and printing on
|
||||||
|
* the debug port.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#include <hardware_init.h>
|
||||||
|
#include <boardconfig.h>
|
||||||
|
|
||||||
|
|
||||||
|
#define AUTO_RETURN_AFTER_NEWLINE 1
|
||||||
|
|
||||||
|
// _write currently adds \n after \r automatically.
|
||||||
|
// If the At91lib\utility\stdio.c printf implementation is not used anymore:
|
||||||
|
// remove if there are spurious newlines!
|
||||||
|
|
||||||
|
//int _read(int file, void *ptr, size_t len) {
|
||||||
|
// (void)len;
|
||||||
|
// if(file <= STDERR_FILENO) {
|
||||||
|
// *(char *) ptr = DBGU_GetChar();
|
||||||
|
//#if AUTO_RETURN_AFTER_NEWLINE
|
||||||
|
// if((*(char *) ptr != '\n') && (*(char *) ptr != '\r')) {
|
||||||
|
// DBGU_PutChar(*(char *) ptr);
|
||||||
|
// }
|
||||||
|
// else if(*(char *) ptr == '\r') {
|
||||||
|
// DBGU_PutChar('\n');
|
||||||
|
// DBGU_PutChar('\r');
|
||||||
|
// }
|
||||||
|
//#endif
|
||||||
|
// return 1;
|
||||||
|
// }
|
||||||
|
// else {
|
||||||
|
// return -1;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//}
|
||||||
|
|
||||||
|
int _write(int file, const void *ptr, size_t len) {
|
||||||
|
size_t i;
|
||||||
|
|
||||||
|
if(file <= STDERR_FILENO) {
|
||||||
|
for(i=0; i<len; i++) {
|
||||||
|
#if AUTO_RETURN_AFTER_NEWLINE
|
||||||
|
if(((const char *) ptr)[i] == '\n' &&
|
||||||
|
((const char *) ptr)[i+1] != '\r') {
|
||||||
|
HAL_UART_Transmit(&huart3, (uint8_t*)"\r", 1 ,
|
||||||
|
DEBUG_UART_MS_TIMEOUT);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
uint8_t* character = (uint8_t*) ptr;
|
||||||
|
HAL_UART_Transmit(&huart3, (uint8_t*) (character + i),
|
||||||
|
1 , DEBUG_UART_MS_TIMEOUT);
|
||||||
|
}
|
||||||
|
return len;
|
||||||
|
} else {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
int _lseek (int file, int ptr, int dir) {
|
||||||
|
(void)file;
|
||||||
|
(void)ptr;
|
||||||
|
(void)dir;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int _close(int file) {
|
||||||
|
(void)file;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int _open(const char *name, int flags, ...) {
|
||||||
|
(void)name;
|
||||||
|
(void)flags;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int _link(const char *oldpath, const char *newpath) {
|
||||||
|
(void)oldpath;
|
||||||
|
(void)newpath;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int _rename(const char *oldpath, const char *newpath) {
|
||||||
|
(void)oldpath;
|
||||||
|
(void)newpath;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int _unlink(const char *pathname) {
|
||||||
|
(void)pathname;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int fsync(int fd) {
|
||||||
|
(void)fd;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int _fstat(int fd, struct stat *st) {
|
||||||
|
(void)fd;
|
||||||
|
(void)st;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int _stat(const char *path, struct stat *st) {
|
||||||
|
(void)path;
|
||||||
|
(void)st;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int _isatty(int fd) {
|
||||||
|
if(fd <= STDERR_FILENO) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void exit(int n) {
|
||||||
|
printf("\n\r EXITING WITH CODE: %u \n\r", n);
|
||||||
|
//restart();
|
||||||
|
while(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
void _exit(int n) {
|
||||||
|
printf("\n\r EXITING WITH CODE: %u \n\r", n);
|
||||||
|
//restart();
|
||||||
|
while(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
int _kill() {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int _getpid() {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int _gettimeofday() {
|
||||||
|
return -1;
|
||||||
|
}
|
@ -0,0 +1,576 @@
|
|||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file system_stm32h7xx.c
|
||||||
|
* @author MCD Application Team
|
||||||
|
* @brief CMSIS Cortex-Mx 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_stm32h7xx.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
|
||||||
|
*
|
||||||
|
* <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.
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @addtogroup CMSIS
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @addtogroup stm32h7xx_system
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @addtogroup STM32H7xx_System_Private_Includes
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "stm32h7xx.h"
|
||||||
|
|
||||||
|
#if !defined (HSE_VALUE)
|
||||||
|
#define HSE_VALUE ((uint32_t)25000000) /*!< Value of the External oscillator in Hz */
|
||||||
|
#endif /* HSE_VALUE */
|
||||||
|
|
||||||
|
#if !defined (CSI_VALUE)
|
||||||
|
#define CSI_VALUE ((uint32_t)4000000) /*!< Value of the Internal oscillator in Hz*/
|
||||||
|
#endif /* CSI_VALUE */
|
||||||
|
|
||||||
|
#if !defined (HSI_VALUE)
|
||||||
|
#define HSI_VALUE ((uint32_t)64000000) /*!< Value of the Internal oscillator in Hz*/
|
||||||
|
#endif /* HSI_VALUE */
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @addtogroup STM32H7xx_System_Private_TypesDefinitions
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @addtogroup STM32H7xx_System_Private_Defines
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/************************* Miscellaneous Configuration ************************/
|
||||||
|
/*!< Uncomment the following line if you need to use external SRAM or SDRAM mounted
|
||||||
|
on EVAL board as data memory */
|
||||||
|
/*#define DATA_IN_ExtSRAM */
|
||||||
|
/*#define DATA_IN_ExtSDRAM*/
|
||||||
|
|
||||||
|
#if defined(DATA_IN_ExtSRAM) && defined(DATA_IN_ExtSDRAM)
|
||||||
|
#error "Please select DATA_IN_ExtSRAM or DATA_IN_ExtSDRAM "
|
||||||
|
#endif /* DATA_IN_ExtSRAM && 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 STM32H7xx_System_Private_Macros
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @addtogroup STM32H7xx_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 = 64000000;
|
||||||
|
uint32_t SystemD2Clock = 64000000;
|
||||||
|
const uint8_t D1CorePrescTable[16] = {0, 0, 0, 0, 1, 2, 3, 4, 1, 2, 3, 4, 6, 7, 8, 9};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @addtogroup STM32H7xx_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 STM32H7xx_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 |= RCC_CR_HSION;
|
||||||
|
|
||||||
|
/* Reset CFGR register */
|
||||||
|
RCC->CFGR = 0x00000000;
|
||||||
|
|
||||||
|
/* Reset HSEON, CSSON , CSION,RC48ON, CSIKERON PLL1ON, PLL2ON and PLL3ON bits */
|
||||||
|
RCC->CR &= (uint32_t)0xEAF6ED7F;
|
||||||
|
|
||||||
|
/* Reset D1CFGR register */
|
||||||
|
RCC->D1CFGR = 0x00000000;
|
||||||
|
|
||||||
|
/* Reset D2CFGR register */
|
||||||
|
RCC->D2CFGR = 0x00000000;
|
||||||
|
|
||||||
|
/* Reset D3CFGR register */
|
||||||
|
RCC->D3CFGR = 0x00000000;
|
||||||
|
|
||||||
|
/* Reset PLLCKSELR register */
|
||||||
|
RCC->PLLCKSELR = 0x00000000;
|
||||||
|
|
||||||
|
/* Reset PLLCFGR register */
|
||||||
|
RCC->PLLCFGR = 0x00000000;
|
||||||
|
/* Reset PLL1DIVR register */
|
||||||
|
RCC->PLL1DIVR = 0x00000000;
|
||||||
|
/* Reset PLL1FRACR register */
|
||||||
|
RCC->PLL1FRACR = 0x00000000;
|
||||||
|
|
||||||
|
/* Reset PLL2DIVR register */
|
||||||
|
RCC->PLL2DIVR = 0x00000000;
|
||||||
|
|
||||||
|
/* Reset PLL2FRACR register */
|
||||||
|
|
||||||
|
RCC->PLL2FRACR = 0x00000000;
|
||||||
|
/* Reset PLL3DIVR register */
|
||||||
|
RCC->PLL3DIVR = 0x00000000;
|
||||||
|
|
||||||
|
/* Reset PLL3FRACR register */
|
||||||
|
RCC->PLL3FRACR = 0x00000000;
|
||||||
|
|
||||||
|
/* Reset HSEBYP bit */
|
||||||
|
RCC->CR &= (uint32_t)0xFFFBFFFF;
|
||||||
|
|
||||||
|
/* Disable all interrupts */
|
||||||
|
RCC->CIER = 0x00000000;
|
||||||
|
|
||||||
|
/* Change the switch matrix read issuing capability to 1 for the AXI SRAM target (Target 7) */
|
||||||
|
*((__IO uint32_t*)0x51008108) = 0x00000001;
|
||||||
|
|
||||||
|
#if defined (DATA_IN_ExtSRAM) || defined (DATA_IN_ExtSDRAM)
|
||||||
|
SystemInit_ExtMemCtl();
|
||||||
|
#endif /* DATA_IN_ExtSRAM || DATA_IN_ExtSDRAM */
|
||||||
|
|
||||||
|
/* Configure the Vector Table location add offset address ------------------*/
|
||||||
|
#ifdef VECT_TAB_SRAM
|
||||||
|
SCB->VTOR = D1_AXISRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal ITCMSRAM */
|
||||||
|
#else
|
||||||
|
SCB->VTOR = FLASH_BANK1_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 , it can
|
||||||
|
* be used by the user application to setup the SysTick timer or configure
|
||||||
|
* other parameters.
|
||||||
|
*
|
||||||
|
* @note Each time the core clock 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 CSI, SystemCoreClock will contain the CSI_VALUE(*)
|
||||||
|
* - 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 CSI_VALUE(*),
|
||||||
|
* HSI_VALUE(**) or HSE_VALUE(***) multiplied/divided by the PLL factors.
|
||||||
|
*
|
||||||
|
* (*) CSI_VALUE is a constant defined in stm32h7xx_hal.h file (default value
|
||||||
|
* 4 MHz) but the real value may vary depending on the variations
|
||||||
|
* in voltage and temperature.
|
||||||
|
* (**) HSI_VALUE is a constant defined in stm32h7xx_hal.h file (default value
|
||||||
|
* 64 MHz) but the real value may vary depending on the variations
|
||||||
|
* in voltage and temperature.
|
||||||
|
*
|
||||||
|
* (***)HSE_VALUE is a constant defined in stm32h7xx_hal.h file (default value
|
||||||
|
* 25 MHz), 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 pllp = 2, pllsource = 0, pllm = 2 ,tmp, pllfracen =0 , hsivalue = 0;
|
||||||
|
float fracn1, pllvco = 0 ;
|
||||||
|
|
||||||
|
/* Get SYSCLK source -------------------------------------------------------*/
|
||||||
|
|
||||||
|
switch (RCC->CFGR & RCC_CFGR_SWS)
|
||||||
|
{
|
||||||
|
case 0x00: /* HSI used as system clock source */
|
||||||
|
SystemCoreClock = (uint32_t) (HSI_VALUE >> ((RCC->CR & RCC_CR_HSIDIV)>> 3));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 0x08: /* CSI used as system clock source */
|
||||||
|
SystemCoreClock = CSI_VALUE;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 0x10: /* HSE used as system clock source */
|
||||||
|
SystemCoreClock = HSE_VALUE;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 0x18: /* PLL1 used as system clock source */
|
||||||
|
|
||||||
|
/* PLL_VCO = (HSE_VALUE or HSI_VALUE or CSI_VALUE/ PLLM) * PLLN
|
||||||
|
SYSCLK = PLL_VCO / PLLR
|
||||||
|
*/
|
||||||
|
pllsource = (RCC->PLLCKSELR & RCC_PLLCKSELR_PLLSRC);
|
||||||
|
pllm = ((RCC->PLLCKSELR & RCC_PLLCKSELR_DIVM1)>> 4) ;
|
||||||
|
pllfracen = RCC->PLLCFGR & RCC_PLLCFGR_PLL1FRACEN;
|
||||||
|
fracn1 = (pllfracen* ((RCC->PLL1FRACR & RCC_PLL1FRACR_FRACN1)>> 3));
|
||||||
|
switch (pllsource)
|
||||||
|
{
|
||||||
|
|
||||||
|
case 0x00: /* HSI used as PLL clock source */
|
||||||
|
hsivalue = (HSI_VALUE >> ((RCC->CR & RCC_CR_HSIDIV)>> 3)) ;
|
||||||
|
pllvco = (hsivalue/ pllm) * ((RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1/0x2000) +1 );
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 0x01: /* CSI used as PLL clock source */
|
||||||
|
pllvco = (CSI_VALUE / pllm) * ((RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1/0x2000) +1 );
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 0x02: /* HSE used as PLL clock source */
|
||||||
|
pllvco = (HSE_VALUE / pllm) * ((RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1/0x2000) +1 );
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
pllvco = (CSI_VALUE / pllm) * ((RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1/0x2000) +1 );
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
pllp = (((RCC->PLL1DIVR & RCC_PLL1DIVR_P1) >>9) + 1 ) ;
|
||||||
|
SystemCoreClock = (uint32_t) (pllvco/pllp);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
SystemCoreClock = CSI_VALUE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Compute HCLK frequency --------------------------------------------------*/
|
||||||
|
/* Get HCLK prescaler */
|
||||||
|
tmp = D1CorePrescTable[(RCC->D1CFGR & RCC_D1CFGR_D1CPRE)>> POSITION_VAL(RCC_D1CFGR_D1CPRE_0)];
|
||||||
|
/* HCLK frequency */
|
||||||
|
SystemCoreClock >>= tmp;
|
||||||
|
}
|
||||||
|
#if defined (DATA_IN_ExtSRAM) || defined (DATA_IN_ExtSDRAM)
|
||||||
|
/**
|
||||||
|
* @brief Setup the external memory controller.
|
||||||
|
* Called in startup_stm32h7xx.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)
|
||||||
|
{
|
||||||
|
#if defined (DATA_IN_ExtSDRAM)
|
||||||
|
register uint32_t tmpreg = 0, timeout = 0xFFFF;
|
||||||
|
register __IO uint32_t index;
|
||||||
|
|
||||||
|
/* Enable GPIOD, GPIOE, GPIOF, GPIOG, GPIOH and GPIOI interface
|
||||||
|
clock */
|
||||||
|
RCC->AHB4ENR |= 0x000001F8;
|
||||||
|
/* Connect PDx pins to FMC Alternate function */
|
||||||
|
GPIOD->AFR[0] = 0x000000CC;
|
||||||
|
GPIOD->AFR[1] = 0xCC000CCC;
|
||||||
|
/* Configure PDx pins in Alternate function mode */
|
||||||
|
GPIOD->MODER = 0xAFEAFFFA;
|
||||||
|
/* 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 = 0x55555505;
|
||||||
|
/* Connect PEx pins to FMC Alternate function */
|
||||||
|
GPIOE->AFR[0] = 0xC00000CC;
|
||||||
|
GPIOE->AFR[1] = 0xCCCCCCCC;
|
||||||
|
/* Configure PEx pins in Alternate function mode */
|
||||||
|
GPIOE->MODER = 0xAAAABFFA;
|
||||||
|
/* 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 = 0x55554005;
|
||||||
|
/* Connect PFx pins to FMC Alternate function */
|
||||||
|
GPIOF->AFR[0] = 0x00CCCCCC;
|
||||||
|
GPIOF->AFR[1] = 0xCCCCC000;
|
||||||
|
/* Configure PFx pins in Alternate function mode */
|
||||||
|
GPIOF->MODER = 0xAABFFAAA;
|
||||||
|
/* 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 = 0x55400555;
|
||||||
|
/* Connect PGx pins to FMC Alternate function */
|
||||||
|
GPIOG->AFR[0] = 0x00CCCCCC;
|
||||||
|
GPIOG->AFR[1] = 0xC000000C;
|
||||||
|
/* Configure PGx pins in Alternate function mode */
|
||||||
|
GPIOG->MODER = 0xBFFEFAAA;
|
||||||
|
/* Configure PGx pins speed to 50 MHz */
|
||||||
|
GPIOG->OSPEEDR = 0x80020AAA;
|
||||||
|
/* Configure PGx pins Output type to push-pull */
|
||||||
|
GPIOG->OTYPER = 0x00000000;
|
||||||
|
/* No pull-up, pull-down for PGx pins */
|
||||||
|
GPIOG->PUPDR = 0x40010515;
|
||||||
|
/* Connect PHx pins to FMC Alternate function */
|
||||||
|
GPIOH->AFR[0] = 0xCCC00000;
|
||||||
|
GPIOH->AFR[1] = 0xCCCCCCCC;
|
||||||
|
/* Configure PHx pins in Alternate function mode */
|
||||||
|
GPIOH->MODER = 0xAAAAABFF;
|
||||||
|
/* Configure PHx pins speed to 50 MHz */
|
||||||
|
GPIOH->OSPEEDR = 0xAAAAA800;
|
||||||
|
/* Configure PHx pins Output type to push-pull */
|
||||||
|
GPIOH->OTYPER = 0x00000000;
|
||||||
|
/* No pull-up, pull-down for PHx pins */
|
||||||
|
GPIOH->PUPDR = 0x55555400;
|
||||||
|
/* Connect PIx pins to FMC Alternate function */
|
||||||
|
GPIOI->AFR[0] = 0xCCCCCCCC;
|
||||||
|
GPIOI->AFR[1] = 0x00000CC0;
|
||||||
|
/* Configure PIx pins in Alternate function mode */
|
||||||
|
GPIOI->MODER = 0xFFEBAAAA;
|
||||||
|
/* 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 = 0x00145555;
|
||||||
|
/*-- FMC Configuration ------------------------------------------------------*/
|
||||||
|
/* Enable the FMC interface clock */
|
||||||
|
(RCC->AHB3ENR |= (RCC_AHB3ENR_FMCEN));
|
||||||
|
/*SDRAM Timing and access interface configuration*/
|
||||||
|
/*LoadToActiveDelay = 2
|
||||||
|
ExitSelfRefreshDelay = 6
|
||||||
|
SelfRefreshTime = 4
|
||||||
|
RowCycleDelay = 6
|
||||||
|
WriteRecoveryTime = 2
|
||||||
|
RPDelay = 2
|
||||||
|
RCDDelay = 2
|
||||||
|
SDBank = FMC_SDRAM_BANK2
|
||||||
|
ColumnBitsNumber = FMC_SDRAM_COLUMN_BITS_NUM_9
|
||||||
|
RowBitsNumber = FMC_SDRAM_ROW_BITS_NUM_12
|
||||||
|
MemoryDataWidth = FMC_SDRAM_MEM_BUS_WIDTH_32
|
||||||
|
InternalBankNumber = FMC_SDRAM_INTERN_BANKS_NUM_4
|
||||||
|
CASLatency = FMC_SDRAM_CAS_LATENCY_2
|
||||||
|
WriteProtection = FMC_SDRAM_WRITE_PROTECTION_DISABLE
|
||||||
|
SDClockPeriod = FMC_SDRAM_CLOCK_PERIOD_2
|
||||||
|
ReadBurst = FMC_SDRAM_RBURST_ENABLE
|
||||||
|
ReadPipeDelay = FMC_SDRAM_RPIPE_DELAY_0*/
|
||||||
|
|
||||||
|
FMC_Bank5_6->SDCR[0] = 0x00001800;
|
||||||
|
FMC_Bank5_6->SDCR[1] = 0x00000165;
|
||||||
|
FMC_Bank5_6->SDTR[0] = 0x00105000;
|
||||||
|
FMC_Bank5_6->SDTR[1] = 0x01010351;
|
||||||
|
|
||||||
|
/* SDRAM initialization sequence */
|
||||||
|
/* Clock enable command */
|
||||||
|
FMC_Bank5_6->SDCMR = 0x00000009;
|
||||||
|
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 = 0x0000000A;
|
||||||
|
timeout = 0xFFFF;
|
||||||
|
while((tmpreg != 0) && (timeout-- > 0))
|
||||||
|
{
|
||||||
|
tmpreg = FMC_Bank5_6->SDSR & 0x00000020;
|
||||||
|
}
|
||||||
|
|
||||||
|
FMC_Bank5_6->SDCMR = 0x000000EB;
|
||||||
|
timeout = 0xFFFF;
|
||||||
|
while((tmpreg != 0) && (timeout-- > 0))
|
||||||
|
{
|
||||||
|
tmpreg = FMC_Bank5_6->SDSR & 0x00000020;
|
||||||
|
}
|
||||||
|
|
||||||
|
FMC_Bank5_6->SDCMR = 0x0004400C;
|
||||||
|
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 | (0x00000603<<1));
|
||||||
|
|
||||||
|
/* Disable write protection */
|
||||||
|
tmpreg = FMC_Bank5_6->SDCR[1];
|
||||||
|
FMC_Bank5_6->SDCR[1] = (tmpreg & 0xFFFFFDFF);
|
||||||
|
|
||||||
|
/*FMC controller Enable*/
|
||||||
|
FMC_Bank1->BTCR[0] |= 0x80000000;
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* DATA_IN_ExtSDRAM */
|
||||||
|
|
||||||
|
#if defined(DATA_IN_ExtSRAM)
|
||||||
|
/*-- GPIOs Configuration -----------------------------------------------------*/
|
||||||
|
/* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */
|
||||||
|
RCC->AHB4ENR |= 0x00000078;
|
||||||
|
|
||||||
|
/* 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 = 0x55550545;
|
||||||
|
|
||||||
|
/* 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 = 0x55554145;
|
||||||
|
|
||||||
|
/* 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 = 0x55000555;
|
||||||
|
|
||||||
|
/* Connect PGx pins to FMC Alternate function */
|
||||||
|
GPIOG->AFR[0] = 0x00CCCCCC;
|
||||||
|
GPIOG->AFR[1] = 0x000000C0;
|
||||||
|
/* Configure PGx pins in Alternate function mode */
|
||||||
|
GPIOG->MODER = 0x00200AAA;
|
||||||
|
/* Configure PGx pins speed to 100 MHz */
|
||||||
|
GPIOG->OSPEEDR = 0x00300FFF;
|
||||||
|
/* Configure PGx pins Output type to push-pull */
|
||||||
|
GPIOG->OTYPER = 0x00000000;
|
||||||
|
/* No pull-up, pull-down for PGx pins */
|
||||||
|
GPIOG->PUPDR = 0x00100555;
|
||||||
|
|
||||||
|
/*-- FMC/FSMC Configuration --------------------------------------------------*/
|
||||||
|
/* Enable the FMC/FSMC interface clock */
|
||||||
|
(RCC->AHB3ENR |= (RCC_AHB3ENR_FMCEN));
|
||||||
|
|
||||||
|
/* Configure and enable Bank1_SRAM2 */
|
||||||
|
FMC_Bank1->BTCR[4] = 0x00001091;
|
||||||
|
FMC_Bank1->BTCR[5] = 0x00110212;
|
||||||
|
FMC_Bank1E->BWTR[4] = 0x0FFFFFFF;
|
||||||
|
|
||||||
|
/*FMC controller Enable*/
|
||||||
|
FMC_Bank1->BTCR[0] |= 0x80000000;
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* DATA_IN_ExtSRAM */
|
||||||
|
}
|
||||||
|
#endif /* DATA_IN_ExtSRAM || DATA_IN_ExtSDRAM */
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
3
bsp_stm32_freertos/STM32CubeH7/CMakeLists.txt
Normal file
3
bsp_stm32_freertos/STM32CubeH7/CMakeLists.txt
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
add_subdirectory(Boards)
|
||||||
|
add_subdirectory(Middlewares)
|
||||||
|
add_subdirectory(Drivers)
|
32
bsp_stm32_freertos/STM32CubeH7/Drivers/BSP/BSP.mk
Normal file
32
bsp_stm32_freertos/STM32CubeH7/Drivers/BSP/BSP.mk
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
STM32_DRIV_PATH = STM32H7xx_HAL_Driver
|
||||||
|
|
||||||
|
ifeq ($(BOARD_NAME), stm32h743zi)
|
||||||
|
INCLUDES += $(CURRENTPATH)/STM32H7xx_HAL_Driver/Inc
|
||||||
|
INCLUDES += $(CURRENTPATH)/STM32H7xx_Nucleo
|
||||||
|
INCLUDES += $(CURRENTPATH)/Components/lan8742
|
||||||
|
|
||||||
|
CSRC += $(CURRENTPATH)/STM32H7xx_Nucleo/stm32h7xx_nucleo.c
|
||||||
|
CSRC += $(CURRENTPATH)/Components/lan8742/lan8742.c
|
||||||
|
|
||||||
|
# Only add whats required.
|
||||||
|
CSRC += $(CURRENTPATH)/$(STM32_DRIV_PATH)/Src/stm32h7xx_hal_gpio.c
|
||||||
|
CSRC += $(CURRENTPATH)/$(STM32_DRIV_PATH)/Src/stm32h7xx_hal.c
|
||||||
|
CSRC += $(CURRENTPATH)/$(STM32_DRIV_PATH)/Src/stm32h7xx_hal_cortex.c
|
||||||
|
CSRC += $(CURRENTPATH)/$(STM32_DRIV_PATH)/Src/stm32h7xx_hal_tim.c
|
||||||
|
CSRC += $(CURRENTPATH)/$(STM32_DRIV_PATH)/Src/stm32h7xx_hal_tim_ex.c
|
||||||
|
CSRC += $(CURRENTPATH)/$(STM32_DRIV_PATH)/Src/stm32h7xx_hal_rcc.c
|
||||||
|
CSRC += $(CURRENTPATH)/$(STM32_DRIV_PATH)/Src/stm32h7xx_hal_rcc_ex.c
|
||||||
|
CSRC += $(CURRENTPATH)/$(STM32_DRIV_PATH)/Src/stm32h7xx_hal_flash.c
|
||||||
|
CSRC += $(CURRENTPATH)/$(STM32_DRIV_PATH)/Src/stm32h7xx_hal_flash_ex.c
|
||||||
|
CSRC += $(CURRENTPATH)/$(STM32_DRIV_PATH)/Src/stm32h7xx_hal_hsem.c
|
||||||
|
CSRC += $(CURRENTPATH)/$(STM32_DRIV_PATH)/Src/stm32h7xx_hal_dma.c
|
||||||
|
CSRC += $(CURRENTPATH)/$(STM32_DRIV_PATH)/Src/stm32h7xx_hal_dma_ex.c
|
||||||
|
CSRC += $(CURRENTPATH)/$(STM32_DRIV_PATH)/Src/stm32h7xx_hal_mdma.c
|
||||||
|
CSRC += $(CURRENTPATH)/$(STM32_DRIV_PATH)/Src/stm32h7xx_hal_pwr.c
|
||||||
|
CSRC += $(CURRENTPATH)/$(STM32_DRIV_PATH)/Src/stm32h7xx_hal_pwr_ex.c
|
||||||
|
CSRC += $(CURRENTPATH)/$(STM32_DRIV_PATH)/Src/stm32h7xx_hal_i2c.c
|
||||||
|
CSRC += $(CURRENTPATH)/$(STM32_DRIV_PATH)/Src/stm32h7xx_hal_i2c_ex.c
|
||||||
|
CSRC += $(CURRENTPATH)/$(STM32_DRIV_PATH)/Src/stm32h7xx_hal_uart.c
|
||||||
|
CSRC += $(CURRENTPATH)/$(STM32_DRIV_PATH)/Src/stm32h7xx_hal_eth.c
|
||||||
|
CSRC += $(CURRENTPATH)/$(STM32_DRIV_PATH)/Src/stm32h7xx_hal_adc.c
|
||||||
|
endif
|
@ -0,0 +1,3 @@
|
|||||||
|
add_subdirectory(Components)
|
||||||
|
add_subdirectory(STM32H7xx_HAL_Driver)
|
||||||
|
add_subdirectory(STM32H7xx_Nucleo)
|
@ -0,0 +1 @@
|
|||||||
|
add_subdirectory(lan8742)
|
@ -0,0 +1,7 @@
|
|||||||
|
target_sources(${TARGET_NAME} PRIVATE
|
||||||
|
lan8742.c
|
||||||
|
)
|
||||||
|
|
||||||
|
target_include_directories(${TARGET_NAME} PRIVATE
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}
|
||||||
|
)
|
File diff suppressed because it is too large
Load Diff
Binary file not shown.
After Width: | Height: | Size: 18 KiB |
@ -0,0 +1,664 @@
|
|||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file lan8742.c
|
||||||
|
* @author MCD Application Team
|
||||||
|
* @brief This file provides a set of functions needed to manage the LAN742
|
||||||
|
* PHY devices.
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* <h2><center>© Copyright (c) 2017 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 "lan8742.h"
|
||||||
|
|
||||||
|
/** @addtogroup BSP
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @addtogroup Component
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup LAN8742 LAN8742
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Private typedef -----------------------------------------------------------*/
|
||||||
|
/* Private define ------------------------------------------------------------*/
|
||||||
|
/** @defgroup LAN8742_Private_Defines LAN8742 Private Defines
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define LAN8742_SW_RESET_TO ((uint32_t)500U)
|
||||||
|
#define LAN8742_INIT_TO ((uint32_t)2000U)
|
||||||
|
#define LAN8742_MAX_DEV_ADDR ((uint32_t)31U)
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Private macro -------------------------------------------------------------*/
|
||||||
|
/* Private variables ---------------------------------------------------------*/
|
||||||
|
/* Private function prototypes -----------------------------------------------*/
|
||||||
|
/* Private functions ---------------------------------------------------------*/
|
||||||
|
/** @defgroup LAN8742_Private_Functions LAN8742 Private Functions
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Register IO functions to component object
|
||||||
|
* @param pObj: device object of LAN8742_Object_t.
|
||||||
|
* @param ioctx: holds device IO functions.
|
||||||
|
* @retval LAN8742_STATUS_OK if OK
|
||||||
|
* LAN8742_STATUS_ERROR if missing mandatory function
|
||||||
|
*/
|
||||||
|
int32_t LAN8742_RegisterBusIO(lan8742_Object_t *pObj, lan8742_IOCtx_t *ioctx)
|
||||||
|
{
|
||||||
|
if(!pObj || !ioctx->ReadReg || !ioctx->WriteReg || !ioctx->GetTick)
|
||||||
|
{
|
||||||
|
return LAN8742_STATUS_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
pObj->IO.Init = ioctx->Init;
|
||||||
|
pObj->IO.DeInit = ioctx->DeInit;
|
||||||
|
pObj->IO.ReadReg = ioctx->ReadReg;
|
||||||
|
pObj->IO.WriteReg = ioctx->WriteReg;
|
||||||
|
pObj->IO.GetTick = ioctx->GetTick;
|
||||||
|
|
||||||
|
return LAN8742_STATUS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Initialize the lan8742 and configure the needed hardware resources
|
||||||
|
* @param pObj: device object LAN8742_Object_t.
|
||||||
|
* @retval LAN8742_STATUS_OK if OK
|
||||||
|
* LAN8742_STATUS_ADDRESS_ERROR if cannot find device address
|
||||||
|
* LAN8742_STATUS_READ_ERROR if connot read register
|
||||||
|
* LAN8742_STATUS_WRITE_ERROR if connot write to register
|
||||||
|
* LAN8742_STATUS_RESET_TIMEOUT if cannot perform a software reset
|
||||||
|
*/
|
||||||
|
int32_t LAN8742_Init(lan8742_Object_t *pObj)
|
||||||
|
{
|
||||||
|
uint32_t tickstart = 0, regvalue = 0, addr = 0;
|
||||||
|
int32_t status = LAN8742_STATUS_OK;
|
||||||
|
|
||||||
|
if(pObj->Is_Initialized == 0)
|
||||||
|
{
|
||||||
|
if(pObj->IO.Init != 0)
|
||||||
|
{
|
||||||
|
/* GPIO and Clocks initialization */
|
||||||
|
pObj->IO.Init();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* for later check */
|
||||||
|
pObj->DevAddr = LAN8742_MAX_DEV_ADDR + 1;
|
||||||
|
|
||||||
|
/* Get the device address from special mode register */
|
||||||
|
for(addr = 0; addr <= LAN8742_MAX_DEV_ADDR; addr ++)
|
||||||
|
{
|
||||||
|
if(pObj->IO.ReadReg(addr, LAN8742_SMR, ®value) < 0)
|
||||||
|
{
|
||||||
|
status = LAN8742_STATUS_READ_ERROR;
|
||||||
|
/* Can't read from this device address
|
||||||
|
continue with next address */
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if((regvalue & LAN8742_SMR_PHY_ADDR) == addr)
|
||||||
|
{
|
||||||
|
pObj->DevAddr = addr;
|
||||||
|
status = LAN8742_STATUS_OK;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(pObj->DevAddr > LAN8742_MAX_DEV_ADDR)
|
||||||
|
{
|
||||||
|
status = LAN8742_STATUS_ADDRESS_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* if device address is matched */
|
||||||
|
if(status == LAN8742_STATUS_OK)
|
||||||
|
{
|
||||||
|
/* set a software reset */
|
||||||
|
if(pObj->IO.WriteReg(pObj->DevAddr, LAN8742_BCR, LAN8742_BCR_SOFT_RESET) >= 0)
|
||||||
|
{
|
||||||
|
/* get software reset status */
|
||||||
|
if(pObj->IO.ReadReg(pObj->DevAddr, LAN8742_BCR, ®value) >= 0)
|
||||||
|
{
|
||||||
|
tickstart = pObj->IO.GetTick();
|
||||||
|
|
||||||
|
/* wait until software reset is done or timeout occured */
|
||||||
|
while(regvalue & LAN8742_BCR_SOFT_RESET)
|
||||||
|
{
|
||||||
|
if((pObj->IO.GetTick() - tickstart) <= LAN8742_SW_RESET_TO)
|
||||||
|
{
|
||||||
|
if(pObj->IO.ReadReg(pObj->DevAddr, LAN8742_BCR, ®value) < 0)
|
||||||
|
{
|
||||||
|
status = LAN8742_STATUS_READ_ERROR;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
status = LAN8742_STATUS_RESET_TIMEOUT;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
status = LAN8742_STATUS_READ_ERROR;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
status = LAN8742_STATUS_WRITE_ERROR;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(status == LAN8742_STATUS_OK)
|
||||||
|
{
|
||||||
|
tickstart = pObj->IO.GetTick();
|
||||||
|
|
||||||
|
/* Wait for 2s to perform initialization */
|
||||||
|
while((pObj->IO.GetTick() - tickstart) <= LAN8742_INIT_TO)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
pObj->Is_Initialized = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief De-Initialize the lan8742 and it's hardware resources
|
||||||
|
* @param pObj: device object LAN8742_Object_t.
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
int32_t LAN8742_DeInit(lan8742_Object_t *pObj)
|
||||||
|
{
|
||||||
|
if(pObj->Is_Initialized)
|
||||||
|
{
|
||||||
|
if(pObj->IO.DeInit != 0)
|
||||||
|
{
|
||||||
|
if(pObj->IO.DeInit() < 0)
|
||||||
|
{
|
||||||
|
return LAN8742_STATUS_ERROR;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pObj->Is_Initialized = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return LAN8742_STATUS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Disable the LAN8742 power down mode.
|
||||||
|
* @param pObj: device object LAN8742_Object_t.
|
||||||
|
* @retval LAN8742_STATUS_OK if OK
|
||||||
|
* LAN8742_STATUS_READ_ERROR if connot read register
|
||||||
|
* LAN8742_STATUS_WRITE_ERROR if connot write to register
|
||||||
|
*/
|
||||||
|
int32_t LAN8742_DisablePowerDownMode(lan8742_Object_t *pObj)
|
||||||
|
{
|
||||||
|
uint32_t readval = 0;
|
||||||
|
int32_t status = LAN8742_STATUS_OK;
|
||||||
|
|
||||||
|
if(pObj->IO.ReadReg(pObj->DevAddr, LAN8742_BCR, &readval) >= 0)
|
||||||
|
{
|
||||||
|
readval &= ~LAN8742_BCR_POWER_DOWN;
|
||||||
|
|
||||||
|
/* Apply configuration */
|
||||||
|
if(pObj->IO.WriteReg(pObj->DevAddr, LAN8742_BCR, readval) < 0)
|
||||||
|
{
|
||||||
|
status = LAN8742_STATUS_WRITE_ERROR;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
status = LAN8742_STATUS_READ_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Enable the LAN8742 power down mode.
|
||||||
|
* @param pObj: device object LAN8742_Object_t.
|
||||||
|
* @retval LAN8742_STATUS_OK if OK
|
||||||
|
* LAN8742_STATUS_READ_ERROR if connot read register
|
||||||
|
* LAN8742_STATUS_WRITE_ERROR if connot write to register
|
||||||
|
*/
|
||||||
|
int32_t LAN8742_EnablePowerDownMode(lan8742_Object_t *pObj)
|
||||||
|
{
|
||||||
|
uint32_t readval = 0;
|
||||||
|
int32_t status = LAN8742_STATUS_OK;
|
||||||
|
|
||||||
|
if(pObj->IO.ReadReg(pObj->DevAddr, LAN8742_BCR, &readval) >= 0)
|
||||||
|
{
|
||||||
|
readval |= LAN8742_BCR_POWER_DOWN;
|
||||||
|
|
||||||
|
/* Apply configuration */
|
||||||
|
if(pObj->IO.WriteReg(pObj->DevAddr, LAN8742_BCR, readval) < 0)
|
||||||
|
{
|
||||||
|
status = LAN8742_STATUS_WRITE_ERROR;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
status = LAN8742_STATUS_READ_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Start the auto negotiation process.
|
||||||
|
* @param pObj: device object LAN8742_Object_t.
|
||||||
|
* @retval LAN8742_STATUS_OK if OK
|
||||||
|
* LAN8742_STATUS_READ_ERROR if connot read register
|
||||||
|
* LAN8742_STATUS_WRITE_ERROR if connot write to register
|
||||||
|
*/
|
||||||
|
int32_t LAN8742_StartAutoNego(lan8742_Object_t *pObj)
|
||||||
|
{
|
||||||
|
uint32_t readval = 0;
|
||||||
|
int32_t status = LAN8742_STATUS_OK;
|
||||||
|
|
||||||
|
if(pObj->IO.ReadReg(pObj->DevAddr, LAN8742_BCR, &readval) >= 0)
|
||||||
|
{
|
||||||
|
readval |= LAN8742_BCR_AUTONEGO_EN;
|
||||||
|
|
||||||
|
/* Apply configuration */
|
||||||
|
if(pObj->IO.WriteReg(pObj->DevAddr, LAN8742_BCR, readval) < 0)
|
||||||
|
{
|
||||||
|
status = LAN8742_STATUS_WRITE_ERROR;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
status = LAN8742_STATUS_READ_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Get the link state of LAN8742 device.
|
||||||
|
* @param pObj: Pointer to device object.
|
||||||
|
* @param pLinkState: Pointer to link state
|
||||||
|
* @retval LAN8742_STATUS_LINK_DOWN if link is down
|
||||||
|
* LAN8742_STATUS_AUTONEGO_NOTDONE if Auto nego not completed
|
||||||
|
* LAN8742_STATUS_100MBITS_FULLDUPLEX if 100Mb/s FD
|
||||||
|
* LAN8742_STATUS_100MBITS_HALFDUPLEX if 100Mb/s HD
|
||||||
|
* LAN8742_STATUS_10MBITS_FULLDUPLEX if 10Mb/s FD
|
||||||
|
* LAN8742_STATUS_10MBITS_HALFDUPLEX if 10Mb/s HD
|
||||||
|
* LAN8742_STATUS_READ_ERROR if connot read register
|
||||||
|
* LAN8742_STATUS_WRITE_ERROR if connot write to register
|
||||||
|
*/
|
||||||
|
int32_t LAN8742_GetLinkState(lan8742_Object_t *pObj)
|
||||||
|
{
|
||||||
|
uint32_t readval = 0;
|
||||||
|
|
||||||
|
/* Read Status register */
|
||||||
|
if(pObj->IO.ReadReg(pObj->DevAddr, LAN8742_BSR, &readval) < 0)
|
||||||
|
{
|
||||||
|
return LAN8742_STATUS_READ_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Read Status register again */
|
||||||
|
if(pObj->IO.ReadReg(pObj->DevAddr, LAN8742_BSR, &readval) < 0)
|
||||||
|
{
|
||||||
|
return LAN8742_STATUS_READ_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
if((readval & LAN8742_BSR_LINK_STATUS) == 0)
|
||||||
|
{
|
||||||
|
/* Return Link Down status */
|
||||||
|
return LAN8742_STATUS_LINK_DOWN;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Check Auto negotiaition */
|
||||||
|
if(pObj->IO.ReadReg(pObj->DevAddr, LAN8742_BCR, &readval) < 0)
|
||||||
|
{
|
||||||
|
return LAN8742_STATUS_READ_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
if((readval & LAN8742_BCR_AUTONEGO_EN) != LAN8742_BCR_AUTONEGO_EN)
|
||||||
|
{
|
||||||
|
if(((readval & LAN8742_BCR_SPEED_SELECT) == LAN8742_BCR_SPEED_SELECT) && ((readval & LAN8742_BCR_DUPLEX_MODE) == LAN8742_BCR_DUPLEX_MODE))
|
||||||
|
{
|
||||||
|
return LAN8742_STATUS_100MBITS_FULLDUPLEX;
|
||||||
|
}
|
||||||
|
else if ((readval & LAN8742_BCR_SPEED_SELECT) == LAN8742_BCR_SPEED_SELECT)
|
||||||
|
{
|
||||||
|
return LAN8742_STATUS_100MBITS_HALFDUPLEX;
|
||||||
|
}
|
||||||
|
else if ((readval & LAN8742_BCR_DUPLEX_MODE) == LAN8742_BCR_DUPLEX_MODE)
|
||||||
|
{
|
||||||
|
return LAN8742_STATUS_10MBITS_FULLDUPLEX;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return LAN8742_STATUS_10MBITS_HALFDUPLEX;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else /* Auto Nego enabled */
|
||||||
|
{
|
||||||
|
if(pObj->IO.ReadReg(pObj->DevAddr, LAN8742_PHYSCSR, &readval) < 0)
|
||||||
|
{
|
||||||
|
return LAN8742_STATUS_READ_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Check if auto nego not done */
|
||||||
|
if((readval & LAN8742_PHYSCSR_AUTONEGO_DONE) == 0)
|
||||||
|
{
|
||||||
|
return LAN8742_STATUS_AUTONEGO_NOTDONE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if((readval & LAN8742_PHYSCSR_HCDSPEEDMASK) == LAN8742_PHYSCSR_100BTX_FD)
|
||||||
|
{
|
||||||
|
return LAN8742_STATUS_100MBITS_FULLDUPLEX;
|
||||||
|
}
|
||||||
|
else if ((readval & LAN8742_PHYSCSR_HCDSPEEDMASK) == LAN8742_PHYSCSR_100BTX_HD)
|
||||||
|
{
|
||||||
|
return LAN8742_STATUS_100MBITS_HALFDUPLEX;
|
||||||
|
}
|
||||||
|
else if ((readval & LAN8742_PHYSCSR_HCDSPEEDMASK) == LAN8742_PHYSCSR_10BT_FD)
|
||||||
|
{
|
||||||
|
return LAN8742_STATUS_10MBITS_FULLDUPLEX;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return LAN8742_STATUS_10MBITS_HALFDUPLEX;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Set the link state of LAN8742 device.
|
||||||
|
* @param pObj: Pointer to device object.
|
||||||
|
* @param pLinkState: link state can be one of the following
|
||||||
|
* LAN8742_STATUS_100MBITS_FULLDUPLEX if 100Mb/s FD
|
||||||
|
* LAN8742_STATUS_100MBITS_HALFDUPLEX if 100Mb/s HD
|
||||||
|
* LAN8742_STATUS_10MBITS_FULLDUPLEX if 10Mb/s FD
|
||||||
|
* LAN8742_STATUS_10MBITS_HALFDUPLEX if 10Mb/s HD
|
||||||
|
* @retval LAN8742_STATUS_OK if OK
|
||||||
|
* LAN8742_STATUS_ERROR if parameter error
|
||||||
|
* LAN8742_STATUS_READ_ERROR if connot read register
|
||||||
|
* LAN8742_STATUS_WRITE_ERROR if connot write to register
|
||||||
|
*/
|
||||||
|
int32_t LAN8742_SetLinkState(lan8742_Object_t *pObj, uint32_t LinkState)
|
||||||
|
{
|
||||||
|
uint32_t bcrvalue = 0;
|
||||||
|
int32_t status = LAN8742_STATUS_OK;
|
||||||
|
|
||||||
|
if(pObj->IO.ReadReg(pObj->DevAddr, LAN8742_BCR, &bcrvalue) >= 0)
|
||||||
|
{
|
||||||
|
/* Disable link config (Auto nego, speed and duplex) */
|
||||||
|
bcrvalue &= ~(LAN8742_BCR_AUTONEGO_EN | LAN8742_BCR_SPEED_SELECT | LAN8742_BCR_DUPLEX_MODE);
|
||||||
|
|
||||||
|
if(LinkState == LAN8742_STATUS_100MBITS_FULLDUPLEX)
|
||||||
|
{
|
||||||
|
bcrvalue |= (LAN8742_BCR_SPEED_SELECT | LAN8742_BCR_DUPLEX_MODE);
|
||||||
|
}
|
||||||
|
else if (LinkState == LAN8742_STATUS_100MBITS_HALFDUPLEX)
|
||||||
|
{
|
||||||
|
bcrvalue |= LAN8742_BCR_SPEED_SELECT;
|
||||||
|
}
|
||||||
|
else if (LinkState == LAN8742_STATUS_10MBITS_FULLDUPLEX)
|
||||||
|
{
|
||||||
|
bcrvalue |= LAN8742_BCR_DUPLEX_MODE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Wrong link status parameter */
|
||||||
|
status = LAN8742_STATUS_ERROR;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
status = LAN8742_STATUS_READ_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(status == LAN8742_STATUS_OK)
|
||||||
|
{
|
||||||
|
/* Apply configuration */
|
||||||
|
if(pObj->IO.WriteReg(pObj->DevAddr, LAN8742_BCR, bcrvalue) < 0)
|
||||||
|
{
|
||||||
|
status = LAN8742_STATUS_WRITE_ERROR;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Enable loopback mode.
|
||||||
|
* @param pObj: Pointer to device object.
|
||||||
|
* @retval LAN8742_STATUS_OK if OK
|
||||||
|
* LAN8742_STATUS_READ_ERROR if connot read register
|
||||||
|
* LAN8742_STATUS_WRITE_ERROR if connot write to register
|
||||||
|
*/
|
||||||
|
int32_t LAN8742_EnableLoopbackMode(lan8742_Object_t *pObj)
|
||||||
|
{
|
||||||
|
uint32_t readval = 0;
|
||||||
|
int32_t status = LAN8742_STATUS_OK;
|
||||||
|
|
||||||
|
if(pObj->IO.ReadReg(pObj->DevAddr, LAN8742_BCR, &readval) >= 0)
|
||||||
|
{
|
||||||
|
readval |= LAN8742_BCR_LOOPBACK;
|
||||||
|
|
||||||
|
/* Apply configuration */
|
||||||
|
if(pObj->IO.WriteReg(pObj->DevAddr, LAN8742_BCR, readval) < 0)
|
||||||
|
{
|
||||||
|
status = LAN8742_STATUS_WRITE_ERROR;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
status = LAN8742_STATUS_READ_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Disable loopback mode.
|
||||||
|
* @param pObj: Pointer to device object.
|
||||||
|
* @retval LAN8742_STATUS_OK if OK
|
||||||
|
* LAN8742_STATUS_READ_ERROR if connot read register
|
||||||
|
* LAN8742_STATUS_WRITE_ERROR if connot write to register
|
||||||
|
*/
|
||||||
|
int32_t LAN8742_DisableLoopbackMode(lan8742_Object_t *pObj)
|
||||||
|
{
|
||||||
|
uint32_t readval = 0;
|
||||||
|
int32_t status = LAN8742_STATUS_OK;
|
||||||
|
|
||||||
|
if(pObj->IO.ReadReg(pObj->DevAddr, LAN8742_BCR, &readval) >= 0)
|
||||||
|
{
|
||||||
|
readval &= ~LAN8742_BCR_LOOPBACK;
|
||||||
|
|
||||||
|
/* Apply configuration */
|
||||||
|
if(pObj->IO.WriteReg(pObj->DevAddr, LAN8742_BCR, readval) < 0)
|
||||||
|
{
|
||||||
|
status = LAN8742_STATUS_WRITE_ERROR;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
status = LAN8742_STATUS_READ_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Enable IT source.
|
||||||
|
* @param pObj: Pointer to device object.
|
||||||
|
* @param Interrupt: IT source to be enabled
|
||||||
|
* should be a value or a combination of the following:
|
||||||
|
* LAN8742_WOL_IT
|
||||||
|
* LAN8742_ENERGYON_IT
|
||||||
|
* LAN8742_AUTONEGO_COMPLETE_IT
|
||||||
|
* LAN8742_REMOTE_FAULT_IT
|
||||||
|
* LAN8742_LINK_DOWN_IT
|
||||||
|
* LAN8742_AUTONEGO_LP_ACK_IT
|
||||||
|
* LAN8742_PARALLEL_DETECTION_FAULT_IT
|
||||||
|
* LAN8742_AUTONEGO_PAGE_RECEIVED_IT
|
||||||
|
* @retval LAN8742_STATUS_OK if OK
|
||||||
|
* LAN8742_STATUS_READ_ERROR if connot read register
|
||||||
|
* LAN8742_STATUS_WRITE_ERROR if connot write to register
|
||||||
|
*/
|
||||||
|
int32_t LAN8742_EnableIT(lan8742_Object_t *pObj, uint32_t Interrupt)
|
||||||
|
{
|
||||||
|
uint32_t readval = 0;
|
||||||
|
int32_t status = LAN8742_STATUS_OK;
|
||||||
|
|
||||||
|
if(pObj->IO.ReadReg(pObj->DevAddr, LAN8742_IMR, &readval) >= 0)
|
||||||
|
{
|
||||||
|
readval |= Interrupt;
|
||||||
|
|
||||||
|
/* Apply configuration */
|
||||||
|
if(pObj->IO.WriteReg(pObj->DevAddr, LAN8742_IMR, readval) < 0)
|
||||||
|
{
|
||||||
|
status = LAN8742_STATUS_WRITE_ERROR;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
status = LAN8742_STATUS_READ_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Disable IT source.
|
||||||
|
* @param pObj: Pointer to device object.
|
||||||
|
* @param Interrupt: IT source to be disabled
|
||||||
|
* should be a value or a combination of the following:
|
||||||
|
* LAN8742_WOL_IT
|
||||||
|
* LAN8742_ENERGYON_IT
|
||||||
|
* LAN8742_AUTONEGO_COMPLETE_IT
|
||||||
|
* LAN8742_REMOTE_FAULT_IT
|
||||||
|
* LAN8742_LINK_DOWN_IT
|
||||||
|
* LAN8742_AUTONEGO_LP_ACK_IT
|
||||||
|
* LAN8742_PARALLEL_DETECTION_FAULT_IT
|
||||||
|
* LAN8742_AUTONEGO_PAGE_RECEIVED_IT
|
||||||
|
* @retval LAN8742_STATUS_OK if OK
|
||||||
|
* LAN8742_STATUS_READ_ERROR if connot read register
|
||||||
|
* LAN8742_STATUS_WRITE_ERROR if connot write to register
|
||||||
|
*/
|
||||||
|
int32_t LAN8742_DisableIT(lan8742_Object_t *pObj, uint32_t Interrupt)
|
||||||
|
{
|
||||||
|
uint32_t readval = 0;
|
||||||
|
int32_t status = LAN8742_STATUS_OK;
|
||||||
|
|
||||||
|
if(pObj->IO.ReadReg(pObj->DevAddr, LAN8742_IMR, &readval) >= 0)
|
||||||
|
{
|
||||||
|
readval &= ~Interrupt;
|
||||||
|
|
||||||
|
/* Apply configuration */
|
||||||
|
if(pObj->IO.WriteReg(pObj->DevAddr, LAN8742_IMR, readval) < 0)
|
||||||
|
{
|
||||||
|
status = LAN8742_STATUS_WRITE_ERROR;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
status = LAN8742_STATUS_READ_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Clear IT flag.
|
||||||
|
* @param pObj: Pointer to device object.
|
||||||
|
* @param Interrupt: IT flag to be cleared
|
||||||
|
* should be a value or a combination of the following:
|
||||||
|
* LAN8742_WOL_IT
|
||||||
|
* LAN8742_ENERGYON_IT
|
||||||
|
* LAN8742_AUTONEGO_COMPLETE_IT
|
||||||
|
* LAN8742_REMOTE_FAULT_IT
|
||||||
|
* LAN8742_LINK_DOWN_IT
|
||||||
|
* LAN8742_AUTONEGO_LP_ACK_IT
|
||||||
|
* LAN8742_PARALLEL_DETECTION_FAULT_IT
|
||||||
|
* LAN8742_AUTONEGO_PAGE_RECEIVED_IT
|
||||||
|
* @retval LAN8742_STATUS_OK if OK
|
||||||
|
* LAN8742_STATUS_READ_ERROR if connot read register
|
||||||
|
*/
|
||||||
|
int32_t LAN8742_ClearIT(lan8742_Object_t *pObj, uint32_t Interrupt)
|
||||||
|
{
|
||||||
|
uint32_t readval = 0;
|
||||||
|
int32_t status = LAN8742_STATUS_OK;
|
||||||
|
|
||||||
|
if(pObj->IO.ReadReg(pObj->DevAddr, LAN8742_ISFR, &readval) < 0)
|
||||||
|
{
|
||||||
|
status = LAN8742_STATUS_READ_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Get IT Flag status.
|
||||||
|
* @param pObj: Pointer to device object.
|
||||||
|
* @param Interrupt: IT Flag to be checked,
|
||||||
|
* should be a value or a combination of the following:
|
||||||
|
* LAN8742_WOL_IT
|
||||||
|
* LAN8742_ENERGYON_IT
|
||||||
|
* LAN8742_AUTONEGO_COMPLETE_IT
|
||||||
|
* LAN8742_REMOTE_FAULT_IT
|
||||||
|
* LAN8742_LINK_DOWN_IT
|
||||||
|
* LAN8742_AUTONEGO_LP_ACK_IT
|
||||||
|
* LAN8742_PARALLEL_DETECTION_FAULT_IT
|
||||||
|
* LAN8742_AUTONEGO_PAGE_RECEIVED_IT
|
||||||
|
* @retval 1 IT flag is SET
|
||||||
|
* 0 IT flag is RESET
|
||||||
|
* LAN8742_STATUS_READ_ERROR if connot read register
|
||||||
|
*/
|
||||||
|
int32_t LAN8742_GetITStatus(lan8742_Object_t *pObj, uint32_t Interrupt)
|
||||||
|
{
|
||||||
|
uint32_t readval = 0;
|
||||||
|
int32_t status = 0;
|
||||||
|
|
||||||
|
if(pObj->IO.ReadReg(pObj->DevAddr, LAN8742_ISFR, &readval) >= 0)
|
||||||
|
{
|
||||||
|
status = ((readval & Interrupt) == Interrupt);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
status = LAN8742_STATUS_READ_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
@ -0,0 +1,448 @@
|
|||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file lan8742.h
|
||||||
|
* @author MCD Application Team
|
||||||
|
* @brief This file contains all the functions prototypes for the
|
||||||
|
* lan8742.c PHY driver.
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* <h2><center>© Copyright (c) 2017 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 LAN8742_H
|
||||||
|
#define LAN8742_H
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Includes ------------------------------------------------------------------*/
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
/** @addtogroup BSP
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @addtogroup Component
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup LAN8742
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
/* Exported constants --------------------------------------------------------*/
|
||||||
|
/** @defgroup LAN8742_Exported_Constants LAN8742 Exported Constants
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup LAN8742_Registers_Mapping LAN8742 Registers Mapping
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define LAN8742_BCR ((uint16_t)0x0000U)
|
||||||
|
#define LAN8742_BSR ((uint16_t)0x0001U)
|
||||||
|
#define LAN8742_PHYI1R ((uint16_t)0x0002U)
|
||||||
|
#define LAN8742_PHYI2R ((uint16_t)0x0003U)
|
||||||
|
#define LAN8742_ANAR ((uint16_t)0x0004U)
|
||||||
|
#define LAN8742_ANLPAR ((uint16_t)0x0005U)
|
||||||
|
#define LAN8742_ANER ((uint16_t)0x0006U)
|
||||||
|
#define LAN8742_ANNPTR ((uint16_t)0x0007U)
|
||||||
|
#define LAN8742_ANNPRR ((uint16_t)0x0008U)
|
||||||
|
#define LAN8742_MMDACR ((uint16_t)0x000DU)
|
||||||
|
#define LAN8742_MMDAADR ((uint16_t)0x000EU)
|
||||||
|
#define LAN8742_ENCTR ((uint16_t)0x0010U)
|
||||||
|
#define LAN8742_MCSR ((uint16_t)0x0011U)
|
||||||
|
#define LAN8742_SMR ((uint16_t)0x0012U)
|
||||||
|
#define LAN8742_TPDCR ((uint16_t)0x0018U)
|
||||||
|
#define LAN8742_TCSR ((uint16_t)0x0019U)
|
||||||
|
#define LAN8742_SECR ((uint16_t)0x001AU)
|
||||||
|
#define LAN8742_SCSIR ((uint16_t)0x001BU)
|
||||||
|
#define LAN8742_CLR ((uint16_t)0x001CU)
|
||||||
|
#define LAN8742_ISFR ((uint16_t)0x001DU)
|
||||||
|
#define LAN8742_IMR ((uint16_t)0x001EU)
|
||||||
|
#define LAN8742_PHYSCSR ((uint16_t)0x001FU)
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup LAN8742_BCR_Bit_Definition LAN8742 BCR Bit Definition
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define LAN8742_BCR_SOFT_RESET ((uint16_t)0x8000U)
|
||||||
|
#define LAN8742_BCR_LOOPBACK ((uint16_t)0x4000U)
|
||||||
|
#define LAN8742_BCR_SPEED_SELECT ((uint16_t)0x2000U)
|
||||||
|
#define LAN8742_BCR_AUTONEGO_EN ((uint16_t)0x1000U)
|
||||||
|
#define LAN8742_BCR_POWER_DOWN ((uint16_t)0x0800U)
|
||||||
|
#define LAN8742_BCR_ISOLATE ((uint16_t)0x0400U)
|
||||||
|
#define LAN8742_BCR_RESTART_AUTONEGO ((uint16_t)0x0200U)
|
||||||
|
#define LAN8742_BCR_DUPLEX_MODE ((uint16_t)0x0100U)
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup LAN8742_BSR_Bit_Definition LAN8742 BSR Bit Definition
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define LAN8742_BSR_100BASE_T4 ((uint16_t)0x8000U)
|
||||||
|
#define LAN8742_BSR_100BASE_TX_FD ((uint16_t)0x4000U)
|
||||||
|
#define LAN8742_BSR_100BASE_TX_HD ((uint16_t)0x2000U)
|
||||||
|
#define LAN8742_BSR_10BASE_T_FD ((uint16_t)0x1000U)
|
||||||
|
#define LAN8742_BSR_10BASE_T_HD ((uint16_t)0x0800U)
|
||||||
|
#define LAN8742_BSR_100BASE_T2_FD ((uint16_t)0x0400U)
|
||||||
|
#define LAN8742_BSR_100BASE_T2_HD ((uint16_t)0x0200U)
|
||||||
|
#define LAN8742_BSR_EXTENDED_STATUS ((uint16_t)0x0100U)
|
||||||
|
#define LAN8742_BSR_AUTONEGO_CPLT ((uint16_t)0x0020U)
|
||||||
|
#define LAN8742_BSR_REMOTE_FAULT ((uint16_t)0x0010U)
|
||||||
|
#define LAN8742_BSR_AUTONEGO_ABILITY ((uint16_t)0x0008U)
|
||||||
|
#define LAN8742_BSR_LINK_STATUS ((uint16_t)0x0004U)
|
||||||
|
#define LAN8742_BSR_JABBER_DETECT ((uint16_t)0x0002U)
|
||||||
|
#define LAN8742_BSR_EXTENDED_CAP ((uint16_t)0x0001U)
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup LAN8742_PHYI1R_Bit_Definition LAN8742 PHYI1R Bit Definition
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define LAN8742_PHYI1R_OUI_3_18 ((uint16_t)0xFFFFU)
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup LAN8742_PHYI2R_Bit_Definition LAN8742 PHYI2R Bit Definition
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define LAN8742_PHYI2R_OUI_19_24 ((uint16_t)0xFC00U)
|
||||||
|
#define LAN8742_PHYI2R_MODEL_NBR ((uint16_t)0x03F0U)
|
||||||
|
#define LAN8742_PHYI2R_REVISION_NBR ((uint16_t)0x000FU)
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup LAN8742_ANAR_Bit_Definition LAN8742 ANAR Bit Definition
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define LAN8742_ANAR_NEXT_PAGE ((uint16_t)0x8000U)
|
||||||
|
#define LAN8742_ANAR_REMOTE_FAULT ((uint16_t)0x2000U)
|
||||||
|
#define LAN8742_ANAR_PAUSE_OPERATION ((uint16_t)0x0C00U)
|
||||||
|
#define LAN8742_ANAR_PO_NOPAUSE ((uint16_t)0x0000U)
|
||||||
|
#define LAN8742_ANAR_PO_SYMMETRIC_PAUSE ((uint16_t)0x0400U)
|
||||||
|
#define LAN8742_ANAR_PO_ASYMMETRIC_PAUSE ((uint16_t)0x0800U)
|
||||||
|
#define LAN8742_ANAR_PO_ADVERTISE_SUPPORT ((uint16_t)0x0C00U)
|
||||||
|
#define LAN8742_ANAR_100BASE_TX_FD ((uint16_t)0x0100U)
|
||||||
|
#define LAN8742_ANAR_100BASE_TX ((uint16_t)0x0080U)
|
||||||
|
#define LAN8742_ANAR_10BASE_T_FD ((uint16_t)0x0040U)
|
||||||
|
#define LAN8742_ANAR_10BASE_T ((uint16_t)0x0020U)
|
||||||
|
#define LAN8742_ANAR_SELECTOR_FIELD ((uint16_t)0x000FU)
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup LAN8742_ANLPAR_Bit_Definition LAN8742 ANLPAR Bit Definition
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define LAN8742_ANLPAR_NEXT_PAGE ((uint16_t)0x8000U)
|
||||||
|
#define LAN8742_ANLPAR_REMOTE_FAULT ((uint16_t)0x2000U)
|
||||||
|
#define LAN8742_ANLPAR_PAUSE_OPERATION ((uint16_t)0x0C00U)
|
||||||
|
#define LAN8742_ANLPAR_PO_NOPAUSE ((uint16_t)0x0000U)
|
||||||
|
#define LAN8742_ANLPAR_PO_SYMMETRIC_PAUSE ((uint16_t)0x0400U)
|
||||||
|
#define LAN8742_ANLPAR_PO_ASYMMETRIC_PAUSE ((uint16_t)0x0800U)
|
||||||
|
#define LAN8742_ANLPAR_PO_ADVERTISE_SUPPORT ((uint16_t)0x0C00U)
|
||||||
|
#define LAN8742_ANLPAR_100BASE_TX_FD ((uint16_t)0x0100U)
|
||||||
|
#define LAN8742_ANLPAR_100BASE_TX ((uint16_t)0x0080U)
|
||||||
|
#define LAN8742_ANLPAR_10BASE_T_FD ((uint16_t)0x0040U)
|
||||||
|
#define LAN8742_ANLPAR_10BASE_T ((uint16_t)0x0020U)
|
||||||
|
#define LAN8742_ANLPAR_SELECTOR_FIELD ((uint16_t)0x000FU)
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup LAN8742_ANER_Bit_Definition LAN8742 ANER Bit Definition
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define LAN8742_ANER_RX_NP_LOCATION_ABLE ((uint16_t)0x0040U)
|
||||||
|
#define LAN8742_ANER_RX_NP_STORAGE_LOCATION ((uint16_t)0x0020U)
|
||||||
|
#define LAN8742_ANER_PARALLEL_DETECT_FAULT ((uint16_t)0x0010U)
|
||||||
|
#define LAN8742_ANER_LP_NP_ABLE ((uint16_t)0x0008U)
|
||||||
|
#define LAN8742_ANER_NP_ABLE ((uint16_t)0x0004U)
|
||||||
|
#define LAN8742_ANER_PAGE_RECEIVED ((uint16_t)0x0002U)
|
||||||
|
#define LAN8742_ANER_LP_AUTONEG_ABLE ((uint16_t)0x0001U)
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup LAN8742_ANNPTR_Bit_Definition LAN8742 ANNPTR Bit Definition
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define LAN8742_ANNPTR_NEXT_PAGE ((uint16_t)0x8000U)
|
||||||
|
#define LAN8742_ANNPTR_MESSAGE_PAGE ((uint16_t)0x2000U)
|
||||||
|
#define LAN8742_ANNPTR_ACK2 ((uint16_t)0x1000U)
|
||||||
|
#define LAN8742_ANNPTR_TOGGLE ((uint16_t)0x0800U)
|
||||||
|
#define LAN8742_ANNPTR_MESSAGGE_CODE ((uint16_t)0x07FFU)
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup LAN8742_ANNPRR_Bit_Definition LAN8742 ANNPRR Bit Definition
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define LAN8742_ANNPTR_NEXT_PAGE ((uint16_t)0x8000U)
|
||||||
|
#define LAN8742_ANNPRR_ACK ((uint16_t)0x4000U)
|
||||||
|
#define LAN8742_ANNPRR_MESSAGE_PAGE ((uint16_t)0x2000U)
|
||||||
|
#define LAN8742_ANNPRR_ACK2 ((uint16_t)0x1000U)
|
||||||
|
#define LAN8742_ANNPRR_TOGGLE ((uint16_t)0x0800U)
|
||||||
|
#define LAN8742_ANNPRR_MESSAGGE_CODE ((uint16_t)0x07FFU)
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup LAN8742_MMDACR_Bit_Definition LAN8742 MMDACR Bit Definition
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define LAN8742_MMDACR_MMD_FUNCTION ((uint16_t)0xC000U)
|
||||||
|
#define LAN8742_MMDACR_MMD_FUNCTION_ADDR ((uint16_t)0x0000U)
|
||||||
|
#define LAN8742_MMDACR_MMD_FUNCTION_DATA ((uint16_t)0x4000U)
|
||||||
|
#define LAN8742_MMDACR_MMD_DEV_ADDR ((uint16_t)0x001FU)
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup LAN8742_ENCTR_Bit_Definition LAN8742 ENCTR Bit Definition
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define LAN8742_ENCTR_TX_ENABLE ((uint16_t)0x8000U)
|
||||||
|
#define LAN8742_ENCTR_TX_TIMER ((uint16_t)0x6000U)
|
||||||
|
#define LAN8742_ENCTR_TX_TIMER_1S ((uint16_t)0x0000U)
|
||||||
|
#define LAN8742_ENCTR_TX_TIMER_768MS ((uint16_t)0x2000U)
|
||||||
|
#define LAN8742_ENCTR_TX_TIMER_512MS ((uint16_t)0x4000U)
|
||||||
|
#define LAN8742_ENCTR_TX_TIMER_265MS ((uint16_t)0x6000U)
|
||||||
|
#define LAN8742_ENCTR_RX_ENABLE ((uint16_t)0x1000U)
|
||||||
|
#define LAN8742_ENCTR_RX_MAX_INTERVAL ((uint16_t)0x0C00U)
|
||||||
|
#define LAN8742_ENCTR_RX_MAX_INTERVAL_64MS ((uint16_t)0x0000U)
|
||||||
|
#define LAN8742_ENCTR_RX_MAX_INTERVAL_256MS ((uint16_t)0x0400U)
|
||||||
|
#define LAN8742_ENCTR_RX_MAX_INTERVAL_512MS ((uint16_t)0x0800U)
|
||||||
|
#define LAN8742_ENCTR_RX_MAX_INTERVAL_1S ((uint16_t)0x0C00U)
|
||||||
|
#define LAN8742_ENCTR_EX_CROSS_OVER ((uint16_t)0x0002U)
|
||||||
|
#define LAN8742_ENCTR_EX_MANUAL_CROSS_OVER ((uint16_t)0x0001U)
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup LAN8742_MCSR_Bit_Definition LAN8742 MCSR Bit Definition
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define LAN8742_MCSR_EDPWRDOWN ((uint16_t)0x2000U)
|
||||||
|
#define LAN8742_MCSR_FARLOOPBACK ((uint16_t)0x0200U)
|
||||||
|
#define LAN8742_MCSR_ALTINT ((uint16_t)0x0040U)
|
||||||
|
#define LAN8742_MCSR_ENERGYON ((uint16_t)0x0002U)
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup LAN8742_SMR_Bit_Definition LAN8742 SMR Bit Definition
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define LAN8742_SMR_MODE ((uint16_t)0x00E0U)
|
||||||
|
#define LAN8742_SMR_PHY_ADDR ((uint16_t)0x001FU)
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup LAN8742_TPDCR_Bit_Definition LAN8742 TPDCR Bit Definition
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define LAN8742_TPDCR_DELAY_IN ((uint16_t)0x8000U)
|
||||||
|
#define LAN8742_TPDCR_LINE_BREAK_COUNTER ((uint16_t)0x7000U)
|
||||||
|
#define LAN8742_TPDCR_PATTERN_HIGH ((uint16_t)0x0FC0U)
|
||||||
|
#define LAN8742_TPDCR_PATTERN_LOW ((uint16_t)0x003FU)
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup LAN8742_TCSR_Bit_Definition LAN8742 TCSR Bit Definition
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define LAN8742_TCSR_TDR_ENABLE ((uint16_t)0x8000U)
|
||||||
|
#define LAN8742_TCSR_TDR_AD_FILTER_ENABLE ((uint16_t)0x4000U)
|
||||||
|
#define LAN8742_TCSR_TDR_CH_CABLE_TYPE ((uint16_t)0x0600U)
|
||||||
|
#define LAN8742_TCSR_TDR_CH_CABLE_DEFAULT ((uint16_t)0x0000U)
|
||||||
|
#define LAN8742_TCSR_TDR_CH_CABLE_SHORTED ((uint16_t)0x0200U)
|
||||||
|
#define LAN8742_TCSR_TDR_CH_CABLE_OPEN ((uint16_t)0x0400U)
|
||||||
|
#define LAN8742_TCSR_TDR_CH_CABLE_MATCH ((uint16_t)0x0600U)
|
||||||
|
#define LAN8742_TCSR_TDR_CH_STATUS ((uint16_t)0x0100U)
|
||||||
|
#define LAN8742_TCSR_TDR_CH_LENGTH ((uint16_t)0x00FFU)
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup LAN8742_SCSIR_Bit_Definition LAN8742 SCSIR Bit Definition
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define LAN8742_SCSIR_AUTO_MDIX_ENABLE ((uint16_t)0x8000U)
|
||||||
|
#define LAN8742_SCSIR_CHANNEL_SELECT ((uint16_t)0x2000U)
|
||||||
|
#define LAN8742_SCSIR_SQE_DISABLE ((uint16_t)0x0800U)
|
||||||
|
#define LAN8742_SCSIR_XPOLALITY ((uint16_t)0x0010U)
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup LAN8742_CLR_Bit_Definition LAN8742 CLR Bit Definition
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define LAN8742_CLR_CABLE_LENGTH ((uint16_t)0xF000U)
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup LAN8742_IMR_ISFR_Bit_Definition LAN8742 IMR ISFR Bit Definition
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define LAN8742_INT_8 ((uint16_t)0x0100U)
|
||||||
|
#define LAN8742_INT_7 ((uint16_t)0x0080U)
|
||||||
|
#define LAN8742_INT_6 ((uint16_t)0x0040U)
|
||||||
|
#define LAN8742_INT_5 ((uint16_t)0x0020U)
|
||||||
|
#define LAN8742_INT_4 ((uint16_t)0x0010U)
|
||||||
|
#define LAN8742_INT_3 ((uint16_t)0x0008U)
|
||||||
|
#define LAN8742_INT_2 ((uint16_t)0x0004U)
|
||||||
|
#define LAN8742_INT_1 ((uint16_t)0x0002U)
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup LAN8742_PHYSCSR_Bit_Definition LAN8742 PHYSCSR Bit Definition
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define LAN8742_PHYSCSR_AUTONEGO_DONE ((uint16_t)0x1000U)
|
||||||
|
#define LAN8742_PHYSCSR_HCDSPEEDMASK ((uint16_t)0x001CU)
|
||||||
|
#define LAN8742_PHYSCSR_10BT_HD ((uint16_t)0x0004U)
|
||||||
|
#define LAN8742_PHYSCSR_10BT_FD ((uint16_t)0x0014U)
|
||||||
|
#define LAN8742_PHYSCSR_100BTX_HD ((uint16_t)0x0008U)
|
||||||
|
#define LAN8742_PHYSCSR_100BTX_FD ((uint16_t)0x0018U)
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup LAN8742_Status LAN8742 Status
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define LAN8742_STATUS_READ_ERROR ((int32_t)-5)
|
||||||
|
#define LAN8742_STATUS_WRITE_ERROR ((int32_t)-4)
|
||||||
|
#define LAN8742_STATUS_ADDRESS_ERROR ((int32_t)-3)
|
||||||
|
#define LAN8742_STATUS_RESET_TIMEOUT ((int32_t)-2)
|
||||||
|
#define LAN8742_STATUS_ERROR ((int32_t)-1)
|
||||||
|
#define LAN8742_STATUS_OK ((int32_t) 0)
|
||||||
|
#define LAN8742_STATUS_LINK_DOWN ((int32_t) 1)
|
||||||
|
#define LAN8742_STATUS_100MBITS_FULLDUPLEX ((int32_t) 2)
|
||||||
|
#define LAN8742_STATUS_100MBITS_HALFDUPLEX ((int32_t) 3)
|
||||||
|
#define LAN8742_STATUS_10MBITS_FULLDUPLEX ((int32_t) 4)
|
||||||
|
#define LAN8742_STATUS_10MBITS_HALFDUPLEX ((int32_t) 5)
|
||||||
|
#define LAN8742_STATUS_AUTONEGO_NOTDONE ((int32_t) 6)
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup LAN8742_IT_Flags LAN8742 IT Flags
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define LAN8742_WOL_IT LAN8742_INT_8
|
||||||
|
#define LAN8742_ENERGYON_IT LAN8742_INT_7
|
||||||
|
#define LAN8742_AUTONEGO_COMPLETE_IT LAN8742_INT_6
|
||||||
|
#define LAN8742_REMOTE_FAULT_IT LAN8742_INT_5
|
||||||
|
#define LAN8742_LINK_DOWN_IT LAN8742_INT_4
|
||||||
|
#define LAN8742_AUTONEGO_LP_ACK_IT LAN8742_INT_3
|
||||||
|
#define LAN8742_PARALLEL_DETECTION_FAULT_IT LAN8742_INT_2
|
||||||
|
#define LAN8742_AUTONEGO_PAGE_RECEIVED_IT LAN8742_INT_1
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Exported types ------------------------------------------------------------*/
|
||||||
|
/** @defgroup LAN8742_Exported_Types LAN8742 Exported Types
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
typedef int32_t (*lan8742_Init_Func) (void);
|
||||||
|
typedef int32_t (*lan8742_DeInit_Func) (void);
|
||||||
|
typedef int32_t (*lan8742_ReadReg_Func) (uint32_t, uint32_t, uint32_t *);
|
||||||
|
typedef int32_t (*lan8742_WriteReg_Func) (uint32_t, uint32_t, uint32_t);
|
||||||
|
typedef int32_t (*lan8742_GetTick_Func) (void);
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
lan8742_Init_Func Init;
|
||||||
|
lan8742_DeInit_Func DeInit;
|
||||||
|
lan8742_WriteReg_Func WriteReg;
|
||||||
|
lan8742_ReadReg_Func ReadReg;
|
||||||
|
lan8742_GetTick_Func GetTick;
|
||||||
|
} lan8742_IOCtx_t;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
uint32_t DevAddr;
|
||||||
|
uint32_t Is_Initialized;
|
||||||
|
lan8742_IOCtx_t IO;
|
||||||
|
void *pData;
|
||||||
|
}lan8742_Object_t;
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Exported macro ------------------------------------------------------------*/
|
||||||
|
/* Exported functions --------------------------------------------------------*/
|
||||||
|
/** @defgroup LAN8742_Exported_Functions LAN8742 Exported Functions
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
int32_t LAN8742_RegisterBusIO(lan8742_Object_t *pObj, lan8742_IOCtx_t *ioctx);
|
||||||
|
int32_t LAN8742_Init(lan8742_Object_t *pObj);
|
||||||
|
int32_t LAN8742_DeInit(lan8742_Object_t *pObj);
|
||||||
|
int32_t LAN8742_DisablePowerDownMode(lan8742_Object_t *pObj);
|
||||||
|
int32_t LAN8742_EnablePowerDownMode(lan8742_Object_t *pObj);
|
||||||
|
int32_t LAN8742_StartAutoNego(lan8742_Object_t *pObj);
|
||||||
|
int32_t LAN8742_GetLinkState(lan8742_Object_t *pObj);
|
||||||
|
int32_t LAN8742_SetLinkState(lan8742_Object_t *pObj, uint32_t LinkState);
|
||||||
|
int32_t LAN8742_EnableLoopbackMode(lan8742_Object_t *pObj);
|
||||||
|
int32_t LAN8742_DisableLoopbackMode(lan8742_Object_t *pObj);
|
||||||
|
int32_t LAN8742_EnableIT(lan8742_Object_t *pObj, uint32_t Interrupt);
|
||||||
|
int32_t LAN8742_DisableIT(lan8742_Object_t *pObj, uint32_t Interrupt);
|
||||||
|
int32_t LAN8742_ClearIT(lan8742_Object_t *pObj, uint32_t Interrupt);
|
||||||
|
int32_t LAN8742_GetITStatus(lan8742_Object_t *pObj, uint32_t Interrupt);
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif /* LAN8742_H */
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
@ -0,0 +1,106 @@
|
|||||||
|
cmake_minimum_required(VERSION 3.13)
|
||||||
|
|
||||||
|
option(STM_HAL_GENERATE_SECTIONS
|
||||||
|
"Generate function and data sections. Required to remove unused code" ON
|
||||||
|
)
|
||||||
|
|
||||||
|
if(STM_HAL_GENERATE_SECTIONS)
|
||||||
|
option(STM_HAL_REMOVE_UNUSED_CODE "Remove unused code" ON)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
|
||||||
|
set(LIB_STM_HAL_NAME stm_hal)
|
||||||
|
add_library(${LIB_STM_HAL_NAME})
|
||||||
|
|
||||||
|
target_sources(${LIB_STM_HAL_NAME} PRIVATE
|
||||||
|
Src/stm32h7xx_hal_gpio.c
|
||||||
|
Src/stm32h7xx_hal.c
|
||||||
|
Src/stm32h7xx_hal_cortex.c
|
||||||
|
Src/stm32h7xx_hal_tim.c
|
||||||
|
Src/stm32h7xx_hal_tim_ex.c
|
||||||
|
Src/stm32h7xx_hal_rcc.c
|
||||||
|
Src/stm32h7xx_hal_rcc_ex.c
|
||||||
|
Src/stm32h7xx_hal_flash.c
|
||||||
|
Src/stm32h7xx_hal_flash_ex.c
|
||||||
|
Src/stm32h7xx_hal_hsem.c
|
||||||
|
Src/stm32h7xx_hal_dma.c
|
||||||
|
Src/stm32h7xx_hal_dma_ex.c
|
||||||
|
Src/stm32h7xx_hal_mdma.c
|
||||||
|
Src/stm32h7xx_hal_pwr.c
|
||||||
|
Src/stm32h7xx_hal_pwr_ex.c
|
||||||
|
Src/stm32h7xx_hal_i2c.c
|
||||||
|
Src/stm32h7xx_hal_i2c_ex.c
|
||||||
|
Src/stm32h7xx_hal_uart.c
|
||||||
|
Src/stm32h7xx_hal_uart_ex.c
|
||||||
|
Src/stm32h7xx_hal_eth.c
|
||||||
|
Src/stm32h7xx_hal_adc.c
|
||||||
|
)
|
||||||
|
|
||||||
|
if(NOT STM_HAL_CONFIG_PATH)
|
||||||
|
message(WARNING
|
||||||
|
"STM HAL library configuration include path"
|
||||||
|
"STM_HAL_CONFIG_PATH not set!"
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(IS_ABSOLUTE ${STM_HAL_CONFIG_PATH})
|
||||||
|
set(STM_HAL_CONFIG_PATH_ABS "${STM_HAL_CONFIG_PATH}")
|
||||||
|
else()
|
||||||
|
get_filename_component(STM_HAL_CONFIG_PATH_ABS
|
||||||
|
${STM_HAL_CONFIG_PATH} REALPATH BASE_DIR ${CMAKE_SOURCE_DIR}
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(NOT CMSIS_INC_PATH)
|
||||||
|
message(WARNING "No include path for CMSIS includes specified!")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(IS_ABSOLUTE ${CMSIS_INC_PATH})
|
||||||
|
set(CMSIS_INC_PATH_ABS "${STM_HAL_CONFIG_PATH}")
|
||||||
|
else()
|
||||||
|
get_filename_component(CMSIS_INC_PATH_ABS
|
||||||
|
${CMSIS_INC_PATH} REALPATH BASE_DIR ${CMAKE_SOURCE_DIR}
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(CMAKE_VERBOSE)
|
||||||
|
message(STATUS "STM HAL defines: ${STM_HAL_DEFINES}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
target_compile_definitions(${LIB_STM_HAL_NAME} PRIVATE
|
||||||
|
${STM_HAL_DEFINES}
|
||||||
|
)
|
||||||
|
|
||||||
|
target_include_directories(${LIB_STM_HAL_NAME} PRIVATE
|
||||||
|
"${STM_HAL_CONFIG_PATH_ABS}"
|
||||||
|
"${CMSIS_INC_PATH_ABS}"
|
||||||
|
Inc
|
||||||
|
)
|
||||||
|
|
||||||
|
target_include_directories(${LIB_STM_HAL_NAME} INTERFACE
|
||||||
|
"${STM_HAL_CONFIG_PATH_ABS}"
|
||||||
|
"${CMSIS_INC_PATH_ABS}"
|
||||||
|
Inc
|
||||||
|
)
|
||||||
|
|
||||||
|
target_compile_definitions(${LIB_STM_HAL_NAME} INTERFACE
|
||||||
|
${STM_HAL_DEFINES}
|
||||||
|
)
|
||||||
|
|
||||||
|
if(CMAKE_C_COMPILER_ID STREQUAL "GNU")
|
||||||
|
if(STM_HAL_GENERATE_SECTIONS)
|
||||||
|
target_compile_options(${LIB_STM_HAL_NAME} PRIVATE
|
||||||
|
"-ffunction-sections"
|
||||||
|
"-fdata-sections"
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(STM_HAL_REMOVE_UNUSED_CODE)
|
||||||
|
target_link_options(${LIB_STM_HAL_NAME} PRIVATE
|
||||||
|
"Wl,--gc-sections"
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,57 @@
|
|||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file stm32_assert.h
|
||||||
|
* @author MCD Application Team
|
||||||
|
* @brief STM32 assert template file.
|
||||||
|
* This file should be copied to the application folder and renamed
|
||||||
|
* to stm32_assert.h.
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* <h2><center>© Copyright (c) 2017 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 __STM32_ASSERT_H
|
||||||
|
#define __STM32_ASSERT_H
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Exported types ------------------------------------------------------------*/
|
||||||
|
/* Exported constants --------------------------------------------------------*/
|
||||||
|
/* Includes ------------------------------------------------------------------*/
|
||||||
|
/* 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 /* __STM32_ASSERT_H */
|
||||||
|
|
||||||
|
|
||||||
|
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,794 @@
|
|||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file stm32h7xx_hal_cec.h
|
||||||
|
* @author MCD Application Team
|
||||||
|
* @brief Header file of CEC HAL module.
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* <h2><center>© Copyright (c) 2017 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 STM32H7xx_HAL_CEC_H
|
||||||
|
#define STM32H7xx_HAL_CEC_H
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Includes ------------------------------------------------------------------*/
|
||||||
|
#include "stm32h7xx_hal_def.h"
|
||||||
|
|
||||||
|
#if defined (CEC)
|
||||||
|
|
||||||
|
/** @addtogroup STM32H7xx_HAL_Driver
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @addtogroup CEC
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Exported types ------------------------------------------------------------*/
|
||||||
|
/** @defgroup CEC_Exported_Types CEC Exported Types
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief CEC Init Structure definition
|
||||||
|
*/
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
uint32_t SignalFreeTime; /*!< Set SFT field, specifies the Signal Free Time.
|
||||||
|
It can be one of @ref CEC_Signal_Free_Time
|
||||||
|
and belongs to the set {0,...,7} where
|
||||||
|
0x0 is the default configuration
|
||||||
|
else means 0.5 + (SignalFreeTime - 1) nominal data bit periods */
|
||||||
|
|
||||||
|
uint32_t Tolerance; /*!< Set RXTOL bit, specifies the tolerance accepted on the received waveforms,
|
||||||
|
it can be a value of @ref CEC_Tolerance : it is either CEC_STANDARD_TOLERANCE
|
||||||
|
or CEC_EXTENDED_TOLERANCE */
|
||||||
|
|
||||||
|
uint32_t BRERxStop; /*!< Set BRESTP bit @ref CEC_BRERxStop : specifies whether or not a Bit Rising Error stops the reception.
|
||||||
|
CEC_NO_RX_STOP_ON_BRE: reception is not stopped.
|
||||||
|
CEC_RX_STOP_ON_BRE: reception is stopped. */
|
||||||
|
|
||||||
|
uint32_t BREErrorBitGen; /*!< Set BREGEN bit @ref CEC_BREErrorBitGen : specifies whether or not an Error-Bit is generated on the
|
||||||
|
CEC line upon Bit Rising Error detection.
|
||||||
|
CEC_BRE_ERRORBIT_NO_GENERATION: no error-bit generation.
|
||||||
|
CEC_BRE_ERRORBIT_GENERATION: error-bit generation if BRESTP is set. */
|
||||||
|
|
||||||
|
uint32_t LBPEErrorBitGen; /*!< Set LBPEGEN bit @ref CEC_LBPEErrorBitGen : specifies whether or not an Error-Bit is generated on the
|
||||||
|
CEC line upon Long Bit Period Error detection.
|
||||||
|
CEC_LBPE_ERRORBIT_NO_GENERATION: no error-bit generation.
|
||||||
|
CEC_LBPE_ERRORBIT_GENERATION: error-bit generation. */
|
||||||
|
|
||||||
|
uint32_t BroadcastMsgNoErrorBitGen; /*!< Set BRDNOGEN bit @ref CEC_BroadCastMsgErrorBitGen : allows to avoid an Error-Bit generation on the CEC line
|
||||||
|
upon an error detected on a broadcast message.
|
||||||
|
|
||||||
|
It supersedes BREGEN and LBPEGEN bits for a broadcast message error handling. It can take two values:
|
||||||
|
|
||||||
|
1) CEC_BROADCASTERROR_ERRORBIT_GENERATION.
|
||||||
|
a) BRE detection: error-bit generation on the CEC line if BRESTP=CEC_RX_STOP_ON_BRE
|
||||||
|
and BREGEN=CEC_BRE_ERRORBIT_NO_GENERATION.
|
||||||
|
b) LBPE detection: error-bit generation on the CEC line
|
||||||
|
if LBPGEN=CEC_LBPE_ERRORBIT_NO_GENERATION.
|
||||||
|
|
||||||
|
2) CEC_BROADCASTERROR_NO_ERRORBIT_GENERATION.
|
||||||
|
no error-bit generation in case neither a) nor b) are satisfied. Additionally,
|
||||||
|
there is no error-bit generation in case of Short Bit Period Error detection in
|
||||||
|
a broadcast message while LSTN bit is set. */
|
||||||
|
|
||||||
|
uint32_t SignalFreeTimeOption; /*!< Set SFTOP bit @ref CEC_SFT_Option : specifies when SFT timer starts.
|
||||||
|
CEC_SFT_START_ON_TXSOM SFT: timer starts when TXSOM is set by software.
|
||||||
|
CEC_SFT_START_ON_TX_RX_END: SFT timer starts automatically at the end of message transmission/reception. */
|
||||||
|
|
||||||
|
uint32_t ListenMode; /*!< Set LSTN bit @ref CEC_Listening_Mode : specifies device listening mode. It can take two values:
|
||||||
|
|
||||||
|
CEC_REDUCED_LISTENING_MODE: CEC peripheral receives only message addressed to its
|
||||||
|
own address (OAR). Messages addressed to different destination are ignored.
|
||||||
|
Broadcast messages are always received.
|
||||||
|
|
||||||
|
CEC_FULL_LISTENING_MODE: CEC peripheral receives messages addressed to its own
|
||||||
|
address (OAR) with positive acknowledge. Messages addressed to different destination
|
||||||
|
are received, but without interfering with the CEC bus: no acknowledge sent. */
|
||||||
|
|
||||||
|
uint16_t OwnAddress; /*!< Own addresses configuration
|
||||||
|
This parameter can be a value of @ref CEC_OWN_ADDRESS */
|
||||||
|
|
||||||
|
uint8_t *RxBuffer; /*!< CEC Rx buffer pointeur */
|
||||||
|
|
||||||
|
|
||||||
|
} CEC_InitTypeDef;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief HAL CEC State definition
|
||||||
|
* @note HAL CEC State value is a combination of 2 different substates: gState and RxState (see @ref CEC_State_Definition).
|
||||||
|
* - gState contains CEC state information related to global Handle management
|
||||||
|
* and also information related to Tx operations.
|
||||||
|
* gState value coding follow below described bitmap :
|
||||||
|
* b7 (not used)
|
||||||
|
* x : Should be set to 0
|
||||||
|
* b6 Error information
|
||||||
|
* 0 : No Error
|
||||||
|
* 1 : Error
|
||||||
|
* b5 IP initilisation status
|
||||||
|
* 0 : Reset (IP not initialized)
|
||||||
|
* 1 : Init done (IP initialized. HAL CEC Init function already called)
|
||||||
|
* b4-b3 (not used)
|
||||||
|
* xx : Should be set to 00
|
||||||
|
* b2 Intrinsic process state
|
||||||
|
* 0 : Ready
|
||||||
|
* 1 : Busy (IP busy with some configuration or internal operations)
|
||||||
|
* b1 (not used)
|
||||||
|
* x : Should be set to 0
|
||||||
|
* b0 Tx state
|
||||||
|
* 0 : Ready (no Tx operation ongoing)
|
||||||
|
* 1 : Busy (Tx operation ongoing)
|
||||||
|
* - RxState contains information related to Rx operations.
|
||||||
|
* RxState value coding follow below described bitmap :
|
||||||
|
* b7-b6 (not used)
|
||||||
|
* xx : Should be set to 00
|
||||||
|
* b5 IP initilisation status
|
||||||
|
* 0 : Reset (IP not initialized)
|
||||||
|
* 1 : Init done (IP initialized)
|
||||||
|
* b4-b2 (not used)
|
||||||
|
* xxx : Should be set to 000
|
||||||
|
* b1 Rx state
|
||||||
|
* 0 : Ready (no Rx operation ongoing)
|
||||||
|
* 1 : Busy (Rx operation ongoing)
|
||||||
|
* b0 (not used)
|
||||||
|
* x : Should be set to 0.
|
||||||
|
*/
|
||||||
|
typedef uint32_t HAL_CEC_StateTypeDef;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief CEC handle Structure definition
|
||||||
|
*/
|
||||||
|
#if (USE_HAL_CEC_REGISTER_CALLBACKS == 1)
|
||||||
|
typedef struct __CEC_HandleTypeDef
|
||||||
|
#else
|
||||||
|
typedef struct
|
||||||
|
#endif /* USE_HAL_CEC_REGISTER_CALLBACKS */
|
||||||
|
{
|
||||||
|
CEC_TypeDef *Instance; /*!< CEC registers base address */
|
||||||
|
|
||||||
|
CEC_InitTypeDef Init; /*!< CEC communication parameters */
|
||||||
|
|
||||||
|
uint8_t *pTxBuffPtr; /*!< Pointer to CEC Tx transfer Buffer */
|
||||||
|
|
||||||
|
uint16_t TxXferCount; /*!< CEC Tx Transfer Counter */
|
||||||
|
|
||||||
|
uint16_t RxXferSize; /*!< CEC Rx Transfer size, 0: header received only */
|
||||||
|
|
||||||
|
HAL_LockTypeDef Lock; /*!< Locking object */
|
||||||
|
|
||||||
|
HAL_CEC_StateTypeDef gState; /*!< CEC state information related to global Handle management
|
||||||
|
and also related to Tx operations.
|
||||||
|
This parameter can be a value of @ref HAL_CEC_StateTypeDef */
|
||||||
|
|
||||||
|
HAL_CEC_StateTypeDef RxState; /*!< CEC state information related to Rx operations.
|
||||||
|
This parameter can be a value of @ref HAL_CEC_StateTypeDef */
|
||||||
|
|
||||||
|
uint32_t ErrorCode; /*!< For errors handling purposes, copy of ISR register
|
||||||
|
in case error is reported */
|
||||||
|
|
||||||
|
#if (USE_HAL_CEC_REGISTER_CALLBACKS == 1)
|
||||||
|
void (* TxCpltCallback)(struct __CEC_HandleTypeDef
|
||||||
|
*hcec); /*!< CEC Tx Transfer completed callback */
|
||||||
|
void (* RxCpltCallback)(struct __CEC_HandleTypeDef *hcec,
|
||||||
|
uint32_t RxFrameSize); /*!< CEC Rx Transfer completed callback */
|
||||||
|
void (* ErrorCallback)(struct __CEC_HandleTypeDef *hcec); /*!< CEC error callback */
|
||||||
|
|
||||||
|
void (* MspInitCallback)(struct __CEC_HandleTypeDef *hcec); /*!< CEC Msp Init callback */
|
||||||
|
void (* MspDeInitCallback)(struct __CEC_HandleTypeDef *hcec); /*!< CEC Msp DeInit callback */
|
||||||
|
|
||||||
|
#endif /* (USE_HAL_CEC_REGISTER_CALLBACKS) */
|
||||||
|
} CEC_HandleTypeDef;
|
||||||
|
|
||||||
|
#if (USE_HAL_CEC_REGISTER_CALLBACKS == 1)
|
||||||
|
/**
|
||||||
|
* @brief HAL CEC Callback ID enumeration definition
|
||||||
|
*/
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
HAL_CEC_TX_CPLT_CB_ID = 0x00U, /*!< CEC Tx Transfer completed callback ID */
|
||||||
|
HAL_CEC_RX_CPLT_CB_ID = 0x01U, /*!< CEC Rx Transfer completed callback ID */
|
||||||
|
HAL_CEC_ERROR_CB_ID = 0x02U, /*!< CEC error callback ID */
|
||||||
|
HAL_CEC_MSPINIT_CB_ID = 0x03U, /*!< CEC Msp Init callback ID */
|
||||||
|
HAL_CEC_MSPDEINIT_CB_ID = 0x04U /*!< CEC Msp DeInit callback ID */
|
||||||
|
} HAL_CEC_CallbackIDTypeDef;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief HAL CEC Callback pointer definition
|
||||||
|
*/
|
||||||
|
typedef void (*pCEC_CallbackTypeDef)(CEC_HandleTypeDef *hcec); /*!< pointer to an CEC callback function */
|
||||||
|
typedef void (*pCEC_RxCallbackTypeDef)(CEC_HandleTypeDef *hcec,
|
||||||
|
uint32_t RxFrameSize); /*!< pointer to an Rx Transfer completed callback function */
|
||||||
|
#endif /* USE_HAL_CEC_REGISTER_CALLBACKS */
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Exported constants --------------------------------------------------------*/
|
||||||
|
/** @defgroup CEC_Exported_Constants CEC Exported Constants
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
/** @defgroup CEC_State_Definition CEC State Code Definition
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define HAL_CEC_STATE_RESET ((uint32_t)0x00000000) /*!< Peripheral is not yet Initialized
|
||||||
|
Value is allowed for gState and RxState */
|
||||||
|
#define HAL_CEC_STATE_READY ((uint32_t)0x00000020) /*!< Peripheral Initialized and ready for use
|
||||||
|
Value is allowed for gState and RxState */
|
||||||
|
#define HAL_CEC_STATE_BUSY ((uint32_t)0x00000024) /*!< an internal process is ongoing
|
||||||
|
Value is allowed for gState only */
|
||||||
|
#define HAL_CEC_STATE_BUSY_RX ((uint32_t)0x00000022) /*!< Data Reception process is ongoing
|
||||||
|
Value is allowed for RxState only */
|
||||||
|
#define HAL_CEC_STATE_BUSY_TX ((uint32_t)0x00000021) /*!< Data Transmission process is ongoing
|
||||||
|
Value is allowed for gState only */
|
||||||
|
#define HAL_CEC_STATE_BUSY_RX_TX ((uint32_t)0x00000023) /*!< an internal process is ongoing
|
||||||
|
Value is allowed for gState only */
|
||||||
|
#define HAL_CEC_STATE_ERROR ((uint32_t)0x00000050) /*!< Error Value is allowed for gState only */
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
/** @defgroup CEC_Error_Code CEC Error Code
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define HAL_CEC_ERROR_NONE (uint32_t) 0x0000U /*!< no error */
|
||||||
|
#define HAL_CEC_ERROR_RXOVR CEC_ISR_RXOVR /*!< CEC Rx-Overrun */
|
||||||
|
#define HAL_CEC_ERROR_BRE CEC_ISR_BRE /*!< CEC Rx Bit Rising Error */
|
||||||
|
#define HAL_CEC_ERROR_SBPE CEC_ISR_SBPE /*!< CEC Rx Short Bit period Error */
|
||||||
|
#define HAL_CEC_ERROR_LBPE CEC_ISR_LBPE /*!< CEC Rx Long Bit period Error */
|
||||||
|
#define HAL_CEC_ERROR_RXACKE CEC_ISR_RXACKE /*!< CEC Rx Missing Acknowledge */
|
||||||
|
#define HAL_CEC_ERROR_ARBLST CEC_ISR_ARBLST /*!< CEC Arbitration Lost */
|
||||||
|
#define HAL_CEC_ERROR_TXUDR CEC_ISR_TXUDR /*!< CEC Tx-Buffer Underrun */
|
||||||
|
#define HAL_CEC_ERROR_TXERR CEC_ISR_TXERR /*!< CEC Tx-Error */
|
||||||
|
#define HAL_CEC_ERROR_TXACKE CEC_ISR_TXACKE /*!< CEC Tx Missing Acknowledge */
|
||||||
|
#if (USE_HAL_CEC_REGISTER_CALLBACKS == 1)
|
||||||
|
#define HAL_CEC_ERROR_INVALID_CALLBACK ((uint32_t)0x00002000U) /*!< Invalid Callback Error */
|
||||||
|
#endif /* USE_HAL_CEC_REGISTER_CALLBACKS */
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup CEC_Signal_Free_Time CEC Signal Free Time setting parameter
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define CEC_DEFAULT_SFT ((uint32_t)0x00000000U)
|
||||||
|
#define CEC_0_5_BITPERIOD_SFT ((uint32_t)0x00000001U)
|
||||||
|
#define CEC_1_5_BITPERIOD_SFT ((uint32_t)0x00000002U)
|
||||||
|
#define CEC_2_5_BITPERIOD_SFT ((uint32_t)0x00000003U)
|
||||||
|
#define CEC_3_5_BITPERIOD_SFT ((uint32_t)0x00000004U)
|
||||||
|
#define CEC_4_5_BITPERIOD_SFT ((uint32_t)0x00000005U)
|
||||||
|
#define CEC_5_5_BITPERIOD_SFT ((uint32_t)0x00000006U)
|
||||||
|
#define CEC_6_5_BITPERIOD_SFT ((uint32_t)0x00000007U)
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup CEC_Tolerance CEC Receiver Tolerance
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define CEC_STANDARD_TOLERANCE ((uint32_t)0x00000000U)
|
||||||
|
#define CEC_EXTENDED_TOLERANCE ((uint32_t)CEC_CFGR_RXTOL)
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup CEC_BRERxStop CEC Reception Stop on Error
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define CEC_NO_RX_STOP_ON_BRE ((uint32_t)0x00000000U)
|
||||||
|
#define CEC_RX_STOP_ON_BRE ((uint32_t)CEC_CFGR_BRESTP)
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup CEC_BREErrorBitGen CEC Error Bit Generation if Bit Rise Error reported
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define CEC_BRE_ERRORBIT_NO_GENERATION ((uint32_t)0x00000000U)
|
||||||
|
#define CEC_BRE_ERRORBIT_GENERATION ((uint32_t)CEC_CFGR_BREGEN)
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup CEC_LBPEErrorBitGen CEC Error Bit Generation if Long Bit Period Error reported
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define CEC_LBPE_ERRORBIT_NO_GENERATION ((uint32_t)0x00000000U)
|
||||||
|
#define CEC_LBPE_ERRORBIT_GENERATION ((uint32_t)CEC_CFGR_LBPEGEN)
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup CEC_BroadCastMsgErrorBitGen CEC Error Bit Generation on Broadcast message
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define CEC_BROADCASTERROR_ERRORBIT_GENERATION ((uint32_t)0x00000000U)
|
||||||
|
#define CEC_BROADCASTERROR_NO_ERRORBIT_GENERATION ((uint32_t)CEC_CFGR_BRDNOGEN)
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup CEC_SFT_Option CEC Signal Free Time start option
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define CEC_SFT_START_ON_TXSOM ((uint32_t)0x00000000U)
|
||||||
|
#define CEC_SFT_START_ON_TX_RX_END ((uint32_t)CEC_CFGR_SFTOPT)
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup CEC_Listening_Mode CEC Listening mode option
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define CEC_REDUCED_LISTENING_MODE ((uint32_t)0x00000000U)
|
||||||
|
#define CEC_FULL_LISTENING_MODE ((uint32_t)CEC_CFGR_LSTN)
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup CEC_OAR_Position CEC Device Own Address position in CEC CFGR register
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define CEC_CFGR_OAR_LSB_POS ((uint32_t) 16U)
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup CEC_Initiator_Position CEC Initiator logical address position in message header
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define CEC_INITIATOR_LSB_POS ((uint32_t) 4U)
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup CEC_OWN_ADDRESS CEC Own Address
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define CEC_OWN_ADDRESS_NONE ((uint16_t) 0x0000U) /* Reset value */
|
||||||
|
#define CEC_OWN_ADDRESS_0 ((uint16_t) 0x0001U) /* Logical Address 0 */
|
||||||
|
#define CEC_OWN_ADDRESS_1 ((uint16_t) 0x0002U) /* Logical Address 1 */
|
||||||
|
#define CEC_OWN_ADDRESS_2 ((uint16_t) 0x0004U) /* Logical Address 2 */
|
||||||
|
#define CEC_OWN_ADDRESS_3 ((uint16_t) 0x0008U) /* Logical Address 3 */
|
||||||
|
#define CEC_OWN_ADDRESS_4 ((uint16_t) 0x0010U) /* Logical Address 4 */
|
||||||
|
#define CEC_OWN_ADDRESS_5 ((uint16_t) 0x0020U) /* Logical Address 5 */
|
||||||
|
#define CEC_OWN_ADDRESS_6 ((uint16_t) 0x0040U) /* Logical Address 6 */
|
||||||
|
#define CEC_OWN_ADDRESS_7 ((uint16_t) 0x0080U) /* Logical Address 7 */
|
||||||
|
#define CEC_OWN_ADDRESS_8 ((uint16_t) 0x0100U) /* Logical Address 9 */
|
||||||
|
#define CEC_OWN_ADDRESS_9 ((uint16_t) 0x0200U) /* Logical Address 10 */
|
||||||
|
#define CEC_OWN_ADDRESS_10 ((uint16_t) 0x0400U) /* Logical Address 11 */
|
||||||
|
#define CEC_OWN_ADDRESS_11 ((uint16_t) 0x0800U) /* Logical Address 12 */
|
||||||
|
#define CEC_OWN_ADDRESS_12 ((uint16_t) 0x1000U) /* Logical Address 13 */
|
||||||
|
#define CEC_OWN_ADDRESS_13 ((uint16_t) 0x2000U) /* Logical Address 14 */
|
||||||
|
#define CEC_OWN_ADDRESS_14 ((uint16_t) 0x4000U) /* Logical Address 15 */
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup CEC_Interrupts_Definitions CEC Interrupts definition
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define CEC_IT_TXACKE CEC_IER_TXACKEIE
|
||||||
|
#define CEC_IT_TXERR CEC_IER_TXERRIE
|
||||||
|
#define CEC_IT_TXUDR CEC_IER_TXUDRIE
|
||||||
|
#define CEC_IT_TXEND CEC_IER_TXENDIE
|
||||||
|
#define CEC_IT_TXBR CEC_IER_TXBRIE
|
||||||
|
#define CEC_IT_ARBLST CEC_IER_ARBLSTIE
|
||||||
|
#define CEC_IT_RXACKE CEC_IER_RXACKEIE
|
||||||
|
#define CEC_IT_LBPE CEC_IER_LBPEIE
|
||||||
|
#define CEC_IT_SBPE CEC_IER_SBPEIE
|
||||||
|
#define CEC_IT_BRE CEC_IER_BREIE
|
||||||
|
#define CEC_IT_RXOVR CEC_IER_RXOVRIE
|
||||||
|
#define CEC_IT_RXEND CEC_IER_RXENDIE
|
||||||
|
#define CEC_IT_RXBR CEC_IER_RXBRIE
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup CEC_Flags_Definitions CEC Flags definition
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define CEC_FLAG_TXACKE CEC_ISR_TXACKE
|
||||||
|
#define CEC_FLAG_TXERR CEC_ISR_TXERR
|
||||||
|
#define CEC_FLAG_TXUDR CEC_ISR_TXUDR
|
||||||
|
#define CEC_FLAG_TXEND CEC_ISR_TXEND
|
||||||
|
#define CEC_FLAG_TXBR CEC_ISR_TXBR
|
||||||
|
#define CEC_FLAG_ARBLST CEC_ISR_ARBLST
|
||||||
|
#define CEC_FLAG_RXACKE CEC_ISR_RXACKE
|
||||||
|
#define CEC_FLAG_LBPE CEC_ISR_LBPE
|
||||||
|
#define CEC_FLAG_SBPE CEC_ISR_SBPE
|
||||||
|
#define CEC_FLAG_BRE CEC_ISR_BRE
|
||||||
|
#define CEC_FLAG_RXOVR CEC_ISR_RXOVR
|
||||||
|
#define CEC_FLAG_RXEND CEC_ISR_RXEND
|
||||||
|
#define CEC_FLAG_RXBR CEC_ISR_RXBR
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup CEC_ALL_ERROR CEC all RX or TX errors flags
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define CEC_ISR_ALL_ERROR ((uint32_t)CEC_ISR_RXOVR|CEC_ISR_BRE|CEC_ISR_SBPE|CEC_ISR_LBPE|CEC_ISR_RXACKE|\
|
||||||
|
CEC_ISR_ARBLST|CEC_ISR_TXUDR|CEC_ISR_TXERR|CEC_ISR_TXACKE)
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup CEC_IER_ALL_RX CEC all RX errors interrupts enabling flag
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define CEC_IER_RX_ALL_ERR ((uint32_t)CEC_IER_RXACKEIE|CEC_IER_LBPEIE|CEC_IER_SBPEIE|CEC_IER_BREIE|CEC_IER_RXOVRIE)
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup CEC_IER_ALL_TX CEC all TX errors interrupts enabling flag
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define CEC_IER_TX_ALL_ERR ((uint32_t)CEC_IER_TXACKEIE|CEC_IER_TXERRIE|CEC_IER_TXUDRIE|CEC_IER_ARBLSTIE)
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Exported macros -----------------------------------------------------------*/
|
||||||
|
/** @defgroup CEC_Exported_Macros CEC Exported Macros
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @brief Reset CEC handle gstate & RxState
|
||||||
|
* @param __HANDLE__ CEC handle.
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
#if (USE_HAL_CEC_REGISTER_CALLBACKS == 1)
|
||||||
|
#define __HAL_CEC_RESET_HANDLE_STATE(__HANDLE__) do{ \
|
||||||
|
(__HANDLE__)->gState = HAL_CEC_STATE_RESET; \
|
||||||
|
(__HANDLE__)->RxState = HAL_CEC_STATE_RESET; \
|
||||||
|
(__HANDLE__)->MspInitCallback = NULL; \
|
||||||
|
(__HANDLE__)->MspDeInitCallback = NULL; \
|
||||||
|
} while(0)
|
||||||
|
#else
|
||||||
|
#define __HAL_CEC_RESET_HANDLE_STATE(__HANDLE__) do{ \
|
||||||
|
(__HANDLE__)->gState = HAL_CEC_STATE_RESET; \
|
||||||
|
(__HANDLE__)->RxState = HAL_CEC_STATE_RESET; \
|
||||||
|
} while(0)
|
||||||
|
#endif /* USE_HAL_CEC_REGISTER_CALLBACKS */
|
||||||
|
/** @brief Checks whether or not the specified CEC interrupt flag is set.
|
||||||
|
* @param __HANDLE__ specifies the CEC Handle.
|
||||||
|
* @param __FLAG__ specifies the flag to check.
|
||||||
|
* @arg CEC_FLAG_TXACKE: Tx Missing acknowledge Error
|
||||||
|
* @arg CEC_FLAG_TXERR: Tx Error.
|
||||||
|
* @arg CEC_FLAG_TXUDR: Tx-Buffer Underrun.
|
||||||
|
* @arg CEC_FLAG_TXEND: End of transmission (successful transmission of the last byte).
|
||||||
|
* @arg CEC_FLAG_TXBR: Tx-Byte Request.
|
||||||
|
* @arg CEC_FLAG_ARBLST: Arbitration Lost
|
||||||
|
* @arg CEC_FLAG_RXACKE: Rx-Missing Acknowledge
|
||||||
|
* @arg CEC_FLAG_LBPE: Rx Long period Error
|
||||||
|
* @arg CEC_FLAG_SBPE: Rx Short period Error
|
||||||
|
* @arg CEC_FLAG_BRE: Rx Bit Rising Error
|
||||||
|
* @arg CEC_FLAG_RXOVR: Rx Overrun.
|
||||||
|
* @arg CEC_FLAG_RXEND: End Of Reception.
|
||||||
|
* @arg CEC_FLAG_RXBR: Rx-Byte Received.
|
||||||
|
* @retval ITStatus
|
||||||
|
*/
|
||||||
|
#define __HAL_CEC_GET_FLAG(__HANDLE__, __FLAG__) ((__HANDLE__)->Instance->ISR & (__FLAG__))
|
||||||
|
|
||||||
|
/** @brief Clears the interrupt or status flag when raised (write at 1)
|
||||||
|
* @param __HANDLE__ specifies the CEC Handle.
|
||||||
|
* @param __FLAG__ specifies the interrupt/status flag to clear.
|
||||||
|
* This parameter can be one of the following values:
|
||||||
|
* @arg CEC_FLAG_TXACKE: Tx Missing acknowledge Error
|
||||||
|
* @arg CEC_FLAG_TXERR: Tx Error.
|
||||||
|
* @arg CEC_FLAG_TXUDR: Tx-Buffer Underrun.
|
||||||
|
* @arg CEC_FLAG_TXEND: End of transmission (successful transmission of the last byte).
|
||||||
|
* @arg CEC_FLAG_TXBR: Tx-Byte Request.
|
||||||
|
* @arg CEC_FLAG_ARBLST: Arbitration Lost
|
||||||
|
* @arg CEC_FLAG_RXACKE: Rx-Missing Acknowledge
|
||||||
|
* @arg CEC_FLAG_LBPE: Rx Long period Error
|
||||||
|
* @arg CEC_FLAG_SBPE: Rx Short period Error
|
||||||
|
* @arg CEC_FLAG_BRE: Rx Bit Rising Error
|
||||||
|
* @arg CEC_FLAG_RXOVR: Rx Overrun.
|
||||||
|
* @arg CEC_FLAG_RXEND: End Of Reception.
|
||||||
|
* @arg CEC_FLAG_RXBR: Rx-Byte Received.
|
||||||
|
* @retval none
|
||||||
|
*/
|
||||||
|
#define __HAL_CEC_CLEAR_FLAG(__HANDLE__, __FLAG__) ((__HANDLE__)->Instance->ISR |= (__FLAG__))
|
||||||
|
|
||||||
|
/** @brief Enables the specified CEC interrupt.
|
||||||
|
* @param __HANDLE__ specifies the CEC Handle.
|
||||||
|
* @param __INTERRUPT__ specifies the CEC interrupt to enable.
|
||||||
|
* This parameter can be one of the following values:
|
||||||
|
* @arg CEC_IT_TXACKE: Tx Missing acknowledge Error IT Enable
|
||||||
|
* @arg CEC_IT_TXERR: Tx Error IT Enable
|
||||||
|
* @arg CEC_IT_TXUDR: Tx-Buffer Underrun IT Enable
|
||||||
|
* @arg CEC_IT_TXEND: End of transmission IT Enable
|
||||||
|
* @arg CEC_IT_TXBR: Tx-Byte Request IT Enable
|
||||||
|
* @arg CEC_IT_ARBLST: Arbitration Lost IT Enable
|
||||||
|
* @arg CEC_IT_RXACKE: Rx-Missing Acknowledge IT Enable
|
||||||
|
* @arg CEC_IT_LBPE: Rx Long period Error IT Enable
|
||||||
|
* @arg CEC_IT_SBPE: Rx Short period Error IT Enable
|
||||||
|
* @arg CEC_IT_BRE: Rx Bit Rising Error IT Enable
|
||||||
|
* @arg CEC_IT_RXOVR: Rx Overrun IT Enable
|
||||||
|
* @arg CEC_IT_RXEND: End Of Reception IT Enable
|
||||||
|
* @arg CEC_IT_RXBR: Rx-Byte Received IT Enable
|
||||||
|
* @retval none
|
||||||
|
*/
|
||||||
|
#define __HAL_CEC_ENABLE_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->IER |= (__INTERRUPT__))
|
||||||
|
|
||||||
|
/** @brief Disables the specified CEC interrupt.
|
||||||
|
* @param __HANDLE__ specifies the CEC Handle.
|
||||||
|
* @param __INTERRUPT__ specifies the CEC interrupt to disable.
|
||||||
|
* This parameter can be one of the following values:
|
||||||
|
* @arg CEC_IT_TXACKE: Tx Missing acknowledge Error IT Enable
|
||||||
|
* @arg CEC_IT_TXERR: Tx Error IT Enable
|
||||||
|
* @arg CEC_IT_TXUDR: Tx-Buffer Underrun IT Enable
|
||||||
|
* @arg CEC_IT_TXEND: End of transmission IT Enable
|
||||||
|
* @arg CEC_IT_TXBR: Tx-Byte Request IT Enable
|
||||||
|
* @arg CEC_IT_ARBLST: Arbitration Lost IT Enable
|
||||||
|
* @arg CEC_IT_RXACKE: Rx-Missing Acknowledge IT Enable
|
||||||
|
* @arg CEC_IT_LBPE: Rx Long period Error IT Enable
|
||||||
|
* @arg CEC_IT_SBPE: Rx Short period Error IT Enable
|
||||||
|
* @arg CEC_IT_BRE: Rx Bit Rising Error IT Enable
|
||||||
|
* @arg CEC_IT_RXOVR: Rx Overrun IT Enable
|
||||||
|
* @arg CEC_IT_RXEND: End Of Reception IT Enable
|
||||||
|
* @arg CEC_IT_RXBR: Rx-Byte Received IT Enable
|
||||||
|
* @retval none
|
||||||
|
*/
|
||||||
|
#define __HAL_CEC_DISABLE_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->IER &= (~(__INTERRUPT__)))
|
||||||
|
|
||||||
|
/** @brief Checks whether or not the specified CEC interrupt is enabled.
|
||||||
|
* @param __HANDLE__ specifies the CEC Handle.
|
||||||
|
* @param __INTERRUPT__ specifies the CEC interrupt to check.
|
||||||
|
* This parameter can be one of the following values:
|
||||||
|
* @arg CEC_IT_TXACKE: Tx Missing acknowledge Error IT Enable
|
||||||
|
* @arg CEC_IT_TXERR: Tx Error IT Enable
|
||||||
|
* @arg CEC_IT_TXUDR: Tx-Buffer Underrun IT Enable
|
||||||
|
* @arg CEC_IT_TXEND: End of transmission IT Enable
|
||||||
|
* @arg CEC_IT_TXBR: Tx-Byte Request IT Enable
|
||||||
|
* @arg CEC_IT_ARBLST: Arbitration Lost IT Enable
|
||||||
|
* @arg CEC_IT_RXACKE: Rx-Missing Acknowledge IT Enable
|
||||||
|
* @arg CEC_IT_LBPE: Rx Long period Error IT Enable
|
||||||
|
* @arg CEC_IT_SBPE: Rx Short period Error IT Enable
|
||||||
|
* @arg CEC_IT_BRE: Rx Bit Rising Error IT Enable
|
||||||
|
* @arg CEC_IT_RXOVR: Rx Overrun IT Enable
|
||||||
|
* @arg CEC_IT_RXEND: End Of Reception IT Enable
|
||||||
|
* @arg CEC_IT_RXBR: Rx-Byte Received IT Enable
|
||||||
|
* @retval FlagStatus
|
||||||
|
*/
|
||||||
|
#define __HAL_CEC_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->IER & (__INTERRUPT__))
|
||||||
|
|
||||||
|
/** @brief Enables the CEC device
|
||||||
|
* @param __HANDLE__ specifies the CEC Handle.
|
||||||
|
* @retval none
|
||||||
|
*/
|
||||||
|
#define __HAL_CEC_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR |= CEC_CR_CECEN)
|
||||||
|
|
||||||
|
/** @brief Disables the CEC device
|
||||||
|
* @param __HANDLE__ specifies the CEC Handle.
|
||||||
|
* @retval none
|
||||||
|
*/
|
||||||
|
#define __HAL_CEC_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CR &= ~CEC_CR_CECEN)
|
||||||
|
|
||||||
|
/** @brief Set Transmission Start flag
|
||||||
|
* @param __HANDLE__ specifies the CEC Handle.
|
||||||
|
* @retval none
|
||||||
|
*/
|
||||||
|
#define __HAL_CEC_FIRST_BYTE_TX_SET(__HANDLE__) ((__HANDLE__)->Instance->CR |= CEC_CR_TXSOM)
|
||||||
|
|
||||||
|
/** @brief Set Transmission End flag
|
||||||
|
* @param __HANDLE__ specifies the CEC Handle.
|
||||||
|
* @retval none
|
||||||
|
* If the CEC message consists of only one byte, TXEOM must be set before of TXSOM.
|
||||||
|
*/
|
||||||
|
#define __HAL_CEC_LAST_BYTE_TX_SET(__HANDLE__) ((__HANDLE__)->Instance->CR |= CEC_CR_TXEOM)
|
||||||
|
|
||||||
|
/** @brief Get Transmission Start flag
|
||||||
|
* @param __HANDLE__ specifies the CEC Handle.
|
||||||
|
* @retval FlagStatus
|
||||||
|
*/
|
||||||
|
#define __HAL_CEC_GET_TRANSMISSION_START_FLAG(__HANDLE__) ((__HANDLE__)->Instance->CR & CEC_CR_TXSOM)
|
||||||
|
|
||||||
|
/** @brief Get Transmission End flag
|
||||||
|
* @param __HANDLE__ specifies the CEC Handle.
|
||||||
|
* @retval FlagStatus
|
||||||
|
*/
|
||||||
|
#define __HAL_CEC_GET_TRANSMISSION_END_FLAG(__HANDLE__) ((__HANDLE__)->Instance->CR & CEC_CR_TXEOM)
|
||||||
|
|
||||||
|
/** @brief Clear OAR register
|
||||||
|
* @param __HANDLE__ specifies the CEC Handle.
|
||||||
|
* @retval none
|
||||||
|
*/
|
||||||
|
#define __HAL_CEC_CLEAR_OAR(__HANDLE__) CLEAR_BIT((__HANDLE__)->Instance->CFGR, CEC_CFGR_OAR)
|
||||||
|
|
||||||
|
/** @brief Set OAR register (without resetting previously set address in case of multi-address mode)
|
||||||
|
* To reset OAR, __HAL_CEC_CLEAR_OAR() needs to be called beforehand
|
||||||
|
* @param __HANDLE__ specifies the CEC Handle.
|
||||||
|
* @param __ADDRESS__ Own Address value (CEC logical address is identified by bit position)
|
||||||
|
* @retval none
|
||||||
|
*/
|
||||||
|
#define __HAL_CEC_SET_OAR(__HANDLE__,__ADDRESS__) SET_BIT((__HANDLE__)->Instance->CFGR, (__ADDRESS__)<< CEC_CFGR_OAR_LSB_POS)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Exported functions --------------------------------------------------------*/
|
||||||
|
/** @addtogroup CEC_Exported_Functions
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @addtogroup CEC_Exported_Functions_Group1
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
/* Initialization and de-initialization functions ****************************/
|
||||||
|
HAL_StatusTypeDef HAL_CEC_Init(CEC_HandleTypeDef *hcec);
|
||||||
|
HAL_StatusTypeDef HAL_CEC_DeInit(CEC_HandleTypeDef *hcec);
|
||||||
|
HAL_StatusTypeDef HAL_CEC_SetDeviceAddress(CEC_HandleTypeDef *hcec, uint16_t CEC_OwnAddress);
|
||||||
|
void HAL_CEC_MspInit(CEC_HandleTypeDef *hcec);
|
||||||
|
void HAL_CEC_MspDeInit(CEC_HandleTypeDef *hcec);
|
||||||
|
|
||||||
|
#if (USE_HAL_CEC_REGISTER_CALLBACKS == 1)
|
||||||
|
HAL_StatusTypeDef HAL_CEC_RegisterCallback(CEC_HandleTypeDef *hcec, HAL_CEC_CallbackIDTypeDef CallbackID,
|
||||||
|
pCEC_CallbackTypeDef pCallback);
|
||||||
|
HAL_StatusTypeDef HAL_CEC_UnRegisterCallback(CEC_HandleTypeDef *hcec, HAL_CEC_CallbackIDTypeDef CallbackID);
|
||||||
|
|
||||||
|
HAL_StatusTypeDef HAL_CEC_RegisterRxCpltCallback(CEC_HandleTypeDef *hcec, pCEC_RxCallbackTypeDef pCallback);
|
||||||
|
HAL_StatusTypeDef HAL_CEC_UnRegisterRxCpltCallback(CEC_HandleTypeDef *hcec);
|
||||||
|
#endif /* USE_HAL_CEC_REGISTER_CALLBACKS */
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @addtogroup CEC_Exported_Functions_Group2
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
/* I/O operation functions ***************************************************/
|
||||||
|
HAL_StatusTypeDef HAL_CEC_Transmit_IT(CEC_HandleTypeDef *hcec, uint8_t InitiatorAddress, uint8_t DestinationAddress,
|
||||||
|
uint8_t *pData, uint32_t Size);
|
||||||
|
uint32_t HAL_CEC_GetLastReceivedFrameSize(CEC_HandleTypeDef *hcec);
|
||||||
|
void HAL_CEC_ChangeRxBuffer(CEC_HandleTypeDef *hcec, uint8_t *Rxbuffer);
|
||||||
|
void HAL_CEC_IRQHandler(CEC_HandleTypeDef *hcec);
|
||||||
|
void HAL_CEC_TxCpltCallback(CEC_HandleTypeDef *hcec);
|
||||||
|
void HAL_CEC_RxCpltCallback(CEC_HandleTypeDef *hcec, uint32_t RxFrameSize);
|
||||||
|
void HAL_CEC_ErrorCallback(CEC_HandleTypeDef *hcec);
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @addtogroup CEC_Exported_Functions_Group3
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
/* Peripheral State functions ************************************************/
|
||||||
|
HAL_CEC_StateTypeDef HAL_CEC_GetState(CEC_HandleTypeDef *hcec);
|
||||||
|
uint32_t HAL_CEC_GetError(CEC_HandleTypeDef *hcec);
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Private types -------------------------------------------------------------*/
|
||||||
|
/** @defgroup CEC_Private_Types CEC Private Types
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Private variables ---------------------------------------------------------*/
|
||||||
|
/** @defgroup CEC_Private_Variables CEC Private Variables
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Private constants ---------------------------------------------------------*/
|
||||||
|
/** @defgroup CEC_Private_Constants CEC Private Constants
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Private macros ------------------------------------------------------------*/
|
||||||
|
/** @defgroup CEC_Private_Macros CEC Private Macros
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define IS_CEC_SIGNALFREETIME(__SFT__) ((__SFT__) <= CEC_CFGR_SFT)
|
||||||
|
|
||||||
|
#define IS_CEC_TOLERANCE(__RXTOL__) (((__RXTOL__) == CEC_STANDARD_TOLERANCE) || \
|
||||||
|
((__RXTOL__) == CEC_EXTENDED_TOLERANCE))
|
||||||
|
|
||||||
|
#define IS_CEC_BRERXSTOP(__BRERXSTOP__) (((__BRERXSTOP__) == CEC_NO_RX_STOP_ON_BRE) || \
|
||||||
|
((__BRERXSTOP__) == CEC_RX_STOP_ON_BRE))
|
||||||
|
|
||||||
|
#define IS_CEC_BREERRORBITGEN(__ERRORBITGEN__) (((__ERRORBITGEN__) == CEC_BRE_ERRORBIT_NO_GENERATION) || \
|
||||||
|
((__ERRORBITGEN__) == CEC_BRE_ERRORBIT_GENERATION))
|
||||||
|
|
||||||
|
#define IS_CEC_LBPEERRORBITGEN(__ERRORBITGEN__) (((__ERRORBITGEN__) == CEC_LBPE_ERRORBIT_NO_GENERATION) || \
|
||||||
|
((__ERRORBITGEN__) == CEC_LBPE_ERRORBIT_GENERATION))
|
||||||
|
|
||||||
|
#define IS_CEC_BROADCASTERROR_NO_ERRORBIT_GENERATION(__ERRORBITGEN__) (((__ERRORBITGEN__) == CEC_BROADCASTERROR_ERRORBIT_GENERATION) || \
|
||||||
|
((__ERRORBITGEN__) == CEC_BROADCASTERROR_NO_ERRORBIT_GENERATION))
|
||||||
|
|
||||||
|
#define IS_CEC_SFTOP(__SFTOP__) (((__SFTOP__) == CEC_SFT_START_ON_TXSOM) || \
|
||||||
|
((__SFTOP__) == CEC_SFT_START_ON_TX_RX_END))
|
||||||
|
|
||||||
|
#define IS_CEC_LISTENING_MODE(__MODE__) (((__MODE__) == CEC_REDUCED_LISTENING_MODE) || \
|
||||||
|
((__MODE__) == CEC_FULL_LISTENING_MODE))
|
||||||
|
|
||||||
|
/** @brief Check CEC message size.
|
||||||
|
* The message size is the payload size: without counting the header,
|
||||||
|
* it varies from 0 byte (ping operation, one header only, no payload) to
|
||||||
|
* 15 bytes (1 opcode and up to 14 operands following the header).
|
||||||
|
* @param __SIZE__ CEC message size.
|
||||||
|
* @retval Test result (TRUE or FALSE).
|
||||||
|
*/
|
||||||
|
#define IS_CEC_MSGSIZE(__SIZE__) ((__SIZE__) <= 0x10U)
|
||||||
|
|
||||||
|
/** @brief Check CEC device Own Address Register (OAR) setting.
|
||||||
|
* OAR address is written in a 15-bit field within CEC_CFGR register.
|
||||||
|
* @param __ADDRESS__ CEC own address.
|
||||||
|
* @retval Test result (TRUE or FALSE).
|
||||||
|
*/
|
||||||
|
#define IS_CEC_OWN_ADDRESS(__ADDRESS__) ((__ADDRESS__) <= 0x7FFFU)
|
||||||
|
|
||||||
|
/** @brief Check CEC initiator or destination logical address setting.
|
||||||
|
* Initiator and destination addresses are coded over 4 bits.
|
||||||
|
* @param __ADDRESS__ CEC initiator or logical address.
|
||||||
|
* @retval Test result (TRUE or FALSE).
|
||||||
|
*/
|
||||||
|
#define IS_CEC_ADDRESS(__ADDRESS__) ((__ADDRESS__) <= 0xFU)
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
/* Private functions ---------------------------------------------------------*/
|
||||||
|
/** @defgroup CEC_Private_Functions CEC Private Functions
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
#endif /* CEC */
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* STM32H7xxHAL_CEC_H */
|
||||||
|
|
||||||
|
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
@ -0,0 +1,954 @@
|
|||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file stm32h7xx_hal_comp.h
|
||||||
|
* @author MCD Application Team
|
||||||
|
* @brief Header file of COMP HAL module.
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* <h2><center>© Copyright (c) 2017 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 STM32H7xx_HAL_COMP_H
|
||||||
|
#define STM32H7xx_HAL_COMP_H
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Includes ------------------------------------------------------------------*/
|
||||||
|
#include "stm32h7xx_hal_def.h"
|
||||||
|
|
||||||
|
/** @addtogroup STM32H7xx_HAL_Driver
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @addtogroup COMP
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Exported types ------------------------------------------------------------*/
|
||||||
|
/** @defgroup COMP_Exported_Types COMP Exported Types
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief COMP Init structure definition
|
||||||
|
*/
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
|
||||||
|
uint32_t WindowMode; /*!< Set window mode of a pair of comparators instances
|
||||||
|
(2 consecutive instances odd and even COMP<x> and COMP<x+1>).
|
||||||
|
Note: HAL COMP driver allows to set window mode from any COMP instance of the pair of COMP instances composing window mode.
|
||||||
|
This parameter can be a value of @ref COMP_WindowMode */
|
||||||
|
|
||||||
|
uint32_t Mode; /*!< Set comparator operating mode to adjust power and speed.
|
||||||
|
Note: For the characteritics of comparator power modes
|
||||||
|
(propagation delay and power consumption), refer to device datasheet.
|
||||||
|
This parameter can be a value of @ref COMP_PowerMode */
|
||||||
|
|
||||||
|
uint32_t NonInvertingInput; /*!< Set comparator input plus (non-inverting input).
|
||||||
|
This parameter can be a value of @ref COMP_InputPlus */
|
||||||
|
|
||||||
|
uint32_t InvertingInput; /*!< Set comparator input minus (inverting input).
|
||||||
|
This parameter can be a value of @ref COMP_InputMinus */
|
||||||
|
|
||||||
|
uint32_t Hysteresis; /*!< Set comparator hysteresis mode of the input minus.
|
||||||
|
This parameter can be a value of @ref COMP_Hysteresis */
|
||||||
|
|
||||||
|
uint32_t OutputPol; /*!< Set comparator output polarity.
|
||||||
|
This parameter can be a value of @ref COMP_OutputPolarity */
|
||||||
|
|
||||||
|
uint32_t BlankingSrce; /*!< Set comparator blanking source.
|
||||||
|
This parameter can be a value of @ref COMP_BlankingSrce */
|
||||||
|
|
||||||
|
uint32_t TriggerMode; /*!< Set the comparator output triggering External Interrupt Line (EXTI).
|
||||||
|
This parameter can be a value of @ref COMP_EXTI_TriggerMode */
|
||||||
|
|
||||||
|
}COMP_InitTypeDef;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief HAL COMP state machine: HAL COMP states definition
|
||||||
|
*/
|
||||||
|
#define COMP_STATE_BITFIELD_LOCK ((uint32_t)0x10)
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
HAL_COMP_STATE_RESET = 0x00, /*!< COMP not yet initialized */
|
||||||
|
HAL_COMP_STATE_RESET_LOCKED = (HAL_COMP_STATE_RESET | COMP_STATE_BITFIELD_LOCK), /*!< COMP not yet initialized and configuration is locked */
|
||||||
|
HAL_COMP_STATE_READY = 0x01, /*!< COMP initialized and ready for use */
|
||||||
|
HAL_COMP_STATE_READY_LOCKED = (HAL_COMP_STATE_READY | COMP_STATE_BITFIELD_LOCK), /*!< COMP initialized but configuration is locked */
|
||||||
|
HAL_COMP_STATE_BUSY = 0x02, /*!< COMP is running */
|
||||||
|
HAL_COMP_STATE_BUSY_LOCKED = (HAL_COMP_STATE_BUSY | COMP_STATE_BITFIELD_LOCK) /*!< COMP is running and configuration is locked */
|
||||||
|
}HAL_COMP_StateTypeDef;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief COMP Handle Structure definition
|
||||||
|
*/
|
||||||
|
#if (USE_HAL_COMP_REGISTER_CALLBACKS == 1)
|
||||||
|
typedef struct __COMP_HandleTypeDef
|
||||||
|
#else
|
||||||
|
typedef struct
|
||||||
|
#endif /* USE_HAL_COMP_REGISTER_CALLBACKS */
|
||||||
|
{
|
||||||
|
COMP_TypeDef *Instance; /*!< Register base address */
|
||||||
|
COMP_InitTypeDef Init; /*!< COMP required parameters */
|
||||||
|
HAL_LockTypeDef Lock; /*!< Locking object */
|
||||||
|
__IO HAL_COMP_StateTypeDef State; /*!< COMP communication state */
|
||||||
|
__IO uint32_t ErrorCode; /*!< COMP error code */
|
||||||
|
#if (USE_HAL_COMP_REGISTER_CALLBACKS == 1)
|
||||||
|
void (* TriggerCallback)(struct __COMP_HandleTypeDef *hcomp); /*!< COMP trigger callback */
|
||||||
|
void (* MspInitCallback)(struct __COMP_HandleTypeDef *hcomp); /*!< COMP Msp Init callback */
|
||||||
|
void (* MspDeInitCallback)(struct __COMP_HandleTypeDef *hcomp); /*!< COMP Msp DeInit callback */
|
||||||
|
#endif /* USE_HAL_COMP_REGISTER_CALLBACKS */
|
||||||
|
|
||||||
|
} COMP_HandleTypeDef;
|
||||||
|
|
||||||
|
#if (USE_HAL_COMP_REGISTER_CALLBACKS == 1)
|
||||||
|
/**
|
||||||
|
* @brief HAL COMP Callback ID enumeration definition
|
||||||
|
*/
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
HAL_COMP_TRIGGER_CB_ID = 0x00U, /*!< COMP trigger callback ID */
|
||||||
|
HAL_COMP_MSPINIT_CB_ID = 0x01U, /*!< COMP Msp Init callback ID */
|
||||||
|
HAL_COMP_MSPDEINIT_CB_ID = 0x02U /*!< COMP Msp DeInit callback ID */
|
||||||
|
} HAL_COMP_CallbackIDTypeDef;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief HAL COMP Callback pointer definition
|
||||||
|
*/
|
||||||
|
typedef void (*pCOMP_CallbackTypeDef)(COMP_HandleTypeDef *hcomp); /*!< pointer to a COMP callback function */
|
||||||
|
|
||||||
|
#endif /* USE_HAL_COMP_REGISTER_CALLBACKS */
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Exported constants --------------------------------------------------------*/
|
||||||
|
/** @defgroup COMP_Exported_Constants COMP Exported Constants
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup COMP_Error_Code COMP Error Code
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define HAL_COMP_ERROR_NONE (0x00U) /*!< No error */
|
||||||
|
#if (USE_HAL_COMP_REGISTER_CALLBACKS == 1)
|
||||||
|
#define HAL_COMP_ERROR_INVALID_CALLBACK (0x01U) /*!< Invalid Callback error */
|
||||||
|
#endif /* USE_HAL_COMP_REGISTER_CALLBACKS */
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup COMP_WindowMode COMP Window Mode
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define COMP_WINDOWMODE_DISABLE ((uint32_t)0x00000000) /*!< Window mode disable: Comparators instances pair COMP1 and COMP2 are independent */
|
||||||
|
#define COMP_WINDOWMODE_COMP1_INPUT_PLUS_COMMON (COMP_CFGRx_WINMODE) /*!< Window mode enable: Comparators instances pair COMP1 and COMP2 have their input plus connected together. The common input is COMP1 input plus (COMP2 input plus is no more accessible). */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup COMP_PowerMode COMP power mode
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
/* Note: For the characteritics of comparator power modes */
|
||||||
|
/* (propagation delay and power consumption), */
|
||||||
|
/* refer to device datasheet. */
|
||||||
|
#define COMP_POWERMODE_HIGHSPEED ((uint32_t)0x00000000) /*!< High Speed */
|
||||||
|
#define COMP_POWERMODE_MEDIUMSPEED (COMP_CFGRx_PWRMODE_0) /*!< Medium Speed */
|
||||||
|
#define COMP_POWERMODE_ULTRALOWPOWER (COMP_CFGRx_PWRMODE) /*!< Ultra-low power mode */
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup COMP_InputPlus COMP input plus (non-inverting input)
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define COMP_INPUT_PLUS_IO1 ((uint32_t)0x00000000) /*!< Comparator input plus connected to IO1 (pin PB0 for COMP1, pin PE9 for COMP2) */
|
||||||
|
#define COMP_INPUT_PLUS_IO2 (COMP_CFGRx_INPSEL) /*!< Comparator input plus connected to IO2 (pin PB2 for COMP1, pin PE11 for COMP2) */
|
||||||
|
#if defined (COMP_CFGRx_INP2SEL)
|
||||||
|
#define COMP_INPUT_PLUS_DAC2_CH1 (COMP_CFGRx_INP2SEL) /*!< Comparator input plus 2 connected to (DAC2_CH1 for COMP1) */
|
||||||
|
#endif
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup COMP_InputMinus COMP input minus (inverting input)
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define COMP_INPUT_MINUS_1_4VREFINT ( COMP_CFGRx_SCALEN | COMP_CFGRx_BRGEN) /*!< Comparator input minus connected to 1/4 VrefInt */
|
||||||
|
#define COMP_INPUT_MINUS_1_2VREFINT ( COMP_CFGRx_INMSEL_0 | COMP_CFGRx_SCALEN | COMP_CFGRx_BRGEN) /*!< Comparator input minus connected to 1/2 VrefInt */
|
||||||
|
#define COMP_INPUT_MINUS_3_4VREFINT ( COMP_CFGRx_INMSEL_1 | COMP_CFGRx_SCALEN | COMP_CFGRx_BRGEN) /*!< Comparator input minus connected to 3/4 VrefInt */
|
||||||
|
#define COMP_INPUT_MINUS_VREFINT ( COMP_CFGRx_INMSEL_1 | COMP_CFGRx_INMSEL_0 | COMP_CFGRx_SCALEN ) /*!< Comparator input minus connected to VrefInt */
|
||||||
|
#define COMP_INPUT_MINUS_DAC1_CH1 ( COMP_CFGRx_INMSEL_2 ) /*!< Comparator input minus connected to DAC1 channel 1 (DAC_OUT1) */
|
||||||
|
#define COMP_INPUT_MINUS_DAC1_CH2 ( COMP_CFGRx_INMSEL_2 | COMP_CFGRx_INMSEL_0 ) /*!< Comparator input minus connected to DAC1 channel 2 (DAC_OUT2) */
|
||||||
|
#define COMP_INPUT_MINUS_IO1 ( COMP_CFGRx_INMSEL_2 | COMP_CFGRx_INMSEL_1 ) /*!< Comparator input minus connected to IO1 (pin PB1 for COMP1, pin PE10 for COMP2) */
|
||||||
|
#define COMP_INPUT_MINUS_IO2 ( COMP_CFGRx_INMSEL_2 | COMP_CFGRx_INMSEL_1 | COMP_CFGRx_INMSEL_0 ) /*!< Comparator input minus connected to IO2 (pin PC4 for COMP1, pin PE7 for COMP2) */
|
||||||
|
#if defined (COMP_CFGRx_INMSEL_3)
|
||||||
|
#define COMP_INPUT_MINUS_TPSENS_DAC2CH1 (COMP_CFGRx_INMSEL_3 ) /*!< Comparator input minus connected to (temp sensor which is exist in ADC for COMP1, DAC2_CH1 for COMP2) */
|
||||||
|
#define COMP_INPUT_MINUS_VBAT_VDDAP (COMP_CFGRx_INMSEL_3 | COMP_CFGRx_INMSEL_0 ) /*!< Comparator input minus connected to (VBAT/4 for COMP1, VDDAP for COMP2) */
|
||||||
|
#endif
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup COMP_Hysteresis COMP hysteresis
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define COMP_HYSTERESIS_NONE ((uint32_t)0x00000000) /*!< No hysteresis */
|
||||||
|
#define COMP_HYSTERESIS_LOW (COMP_CFGRx_HYST_0) /*!< Hysteresis level low */
|
||||||
|
#define COMP_HYSTERESIS_MEDIUM (COMP_CFGRx_HYST_1) /*!< Hysteresis level medium */
|
||||||
|
#define COMP_HYSTERESIS_HIGH (COMP_CFGRx_HYST) /*!< Hysteresis level high */
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup COMP_OutputPolarity COMP Output Polarity
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define COMP_OUTPUTPOL_NONINVERTED ((uint32_t)0x00000000) /*!< COMP output level is not inverted (comparator output is high when the input plus is at a higher voltage than the input minus) */
|
||||||
|
#define COMP_OUTPUTPOL_INVERTED (COMP_CFGRx_POLARITY) /*!< COMP output level is inverted (comparator output is low when the input plus is at a higher voltage than the input minus) */
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/** @defgroup COMP_BlankingSrce COMP Blanking Source
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
/* Any blanking source can be selected for all comparators */
|
||||||
|
#define COMP_BLANKINGSRC_NONE ((uint32_t)0x00000000) /*!< No blanking source */
|
||||||
|
#define COMP_BLANKINGSRC_TIM1_OC5 (COMP_CFGRx_BLANKING_0) /*!< TIM1 OC5 selected as blanking source for comparator */
|
||||||
|
#define COMP_BLANKINGSRC_TIM2_OC3 (COMP_CFGRx_BLANKING_1) /*!< TIM2 OC3 selected as blanking source for comparator */
|
||||||
|
#define COMP_BLANKINGSRC_TIM3_OC3 (COMP_CFGRx_BLANKING_0 |COMP_CFGRx_BLANKING_1) /*!< TIM3 OC3 selected as blanking source for compartor */
|
||||||
|
#define COMP_BLANKINGSRC_TIM3_OC4 (COMP_CFGRx_BLANKING_2) /*!< TIM3 OC4 selected as blanking source for comparator */
|
||||||
|
#define COMP_BLANKINGSRC_TIM8_OC5 (COMP_CFGRx_BLANKING_2|COMP_CFGRx_BLANKING_0) /*!< TIM8 OC5 selected as blanking source for comparator */
|
||||||
|
#define COMP_BLANKINGSRC_TIM15_OC1 (COMP_CFGRx_BLANKING_2|COMP_CFGRx_BLANKING_1) /*!< TIM15 OC1 selected as blanking source for comparator */
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/** @defgroup COMP_OutputLevel COMP Output Level
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Note: Comparator output level values are fixed to "0" and "1", */
|
||||||
|
/* corresponding COMP register bit is managed by HAL function to match */
|
||||||
|
/* with these values (independently of bit position in register). */
|
||||||
|
|
||||||
|
/* When output polarity is not inverted, comparator output is low when
|
||||||
|
the input plus is at a lower voltage than the input minus */
|
||||||
|
#define COMP_OUTPUT_LEVEL_LOW ((uint32_t)0x00000000)
|
||||||
|
/* When output polarity is not inverted, comparator output is high when
|
||||||
|
the input plus is at a higher voltage than the input minus */
|
||||||
|
#define COMP_OUTPUT_LEVEL_HIGH ((uint32_t)0x00000001)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup COMP_EXTI_TriggerMode COMP output to EXTI
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define COMP_TRIGGERMODE_NONE ((uint32_t)0x00000000) /*!< Comparator output triggering no External Interrupt Line */
|
||||||
|
#define COMP_TRIGGERMODE_IT_RISING (COMP_EXTI_IT | COMP_EXTI_RISING) /*!< Comparator output triggering External Interrupt Line event with interruption, on rising edge */
|
||||||
|
#define COMP_TRIGGERMODE_IT_FALLING (COMP_EXTI_IT | COMP_EXTI_FALLING) /*!< Comparator output triggering External Interrupt Line event with interruption, on falling edge */
|
||||||
|
#define COMP_TRIGGERMODE_IT_RISING_FALLING (COMP_EXTI_IT | COMP_EXTI_RISING | COMP_EXTI_FALLING) /*!< Comparator output triggering External Interrupt Line event with interruption, on both rising and falling edges */
|
||||||
|
#define COMP_TRIGGERMODE_EVENT_RISING (COMP_EXTI_EVENT | COMP_EXTI_RISING) /*!< Comparator output triggering External Interrupt Line event only (without interruption), on rising edge */
|
||||||
|
#define COMP_TRIGGERMODE_EVENT_FALLING (COMP_EXTI_EVENT | COMP_EXTI_FALLING) /*!< Comparator output triggering External Interrupt Line event only (without interruption), on falling edge */
|
||||||
|
#define COMP_TRIGGERMODE_EVENT_RISING_FALLING (COMP_EXTI_EVENT | COMP_EXTI_RISING | COMP_EXTI_FALLING) /*!< Comparator output triggering External Interrupt Line event only (without interruption), on both rising and falling edges */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup COMP_Flag COMP Flag
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define COMP_FLAG_C1I COMP_SR_C1IF /*!< Comparator 1 Interrupt Flag */
|
||||||
|
#define COMP_FLAG_C2I COMP_SR_C2IF /*!< Comparator 2 Interrupt Flag */
|
||||||
|
#define COMP_FLAG_LOCK COMP_CFGRx_LOCK /*!< Lock flag */
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
/** @defgroup COMP_IT_CLEAR_Flags COMP Interruption Clear Flags
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define COMP_CLEAR_C1IF COMP_ICFR_C1IF /*!< Clear Comparator 1 Interrupt Flag */
|
||||||
|
#define COMP_CLEAR_C2IF COMP_ICFR_C2IF /*!< Clear Comparator 2 Interrupt Flag */
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
/** @defgroup COMP_Interrupts_Definitions COMP Interrupts Definitions
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define COMP_IT_EN COMP_CFGRx_ITEN
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Exported macros -----------------------------------------------------------*/
|
||||||
|
/** @defgroup COMP_Exported_Macros COMP Exported Macros
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
/** @defgroup COMP_Handle_Management COMP Handle Management
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @brief Reset COMP handle state.
|
||||||
|
* @param __HANDLE__ COMP handle
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
#if (USE_HAL_COMP_REGISTER_CALLBACKS == 1)
|
||||||
|
#define __HAL_COMP_RESET_HANDLE_STATE(__HANDLE__) do{ \
|
||||||
|
(__HANDLE__)->State = HAL_COMP_STATE_RESET; \
|
||||||
|
(__HANDLE__)->MspInitCallback = NULL; \
|
||||||
|
(__HANDLE__)->MspDeInitCallback = NULL; \
|
||||||
|
} while(0)
|
||||||
|
#else
|
||||||
|
#define __HAL_COMP_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_COMP_STATE_RESET)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Clear COMP error code (set it to no error code "HAL_COMP_ERROR_NONE").
|
||||||
|
* @param __HANDLE__ COMP handle
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
#define COMP_CLEAR_ERRORCODE(__HANDLE__) ((__HANDLE__)->ErrorCode = HAL_COMP_ERROR_NONE)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Enable the specified comparator.
|
||||||
|
* @param __HANDLE__ COMP handle
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
#define __HAL_COMP_ENABLE(__HANDLE__) SET_BIT((__HANDLE__)->Instance->CFGR, COMP_CFGRx_EN)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Disable the specified comparator.
|
||||||
|
* @param __HANDLE__ COMP handle
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
#define __HAL_COMP_DISABLE(__HANDLE__) CLEAR_BIT((__HANDLE__)->Instance->CFGR, COMP_CFGRx_EN)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Lock the specified comparator configuration.
|
||||||
|
* @note Using this macro induce HAL COMP handle state machine being no
|
||||||
|
* more in line with COMP instance state.
|
||||||
|
* To keep HAL COMP handle state machine updated, it is recommended
|
||||||
|
* to use function "HAL_COMP_Lock')".
|
||||||
|
* @param __HANDLE__ COMP handle
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
#define __HAL_COMP_LOCK(__HANDLE__) SET_BIT((__HANDLE__)->Instance->CFGR, COMP_CFGRx_LOCK)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Check whether the specified comparator is locked.
|
||||||
|
* @param __HANDLE__ COMP handle
|
||||||
|
* @retval Value 0 if COMP instance is not locked, value 1 if COMP instance is locked
|
||||||
|
*/
|
||||||
|
#define __HAL_COMP_IS_LOCKED(__HANDLE__) (READ_BIT((__HANDLE__)->Instance->CFGR, COMP_CFGRx_LOCK) == COMP_CFGRx_LOCK)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup COMP_Exti_Management COMP external interrupt line management
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Enable the COMP1 EXTI line rising edge trigger.
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
#define __HAL_COMP_COMP1_EXTI_ENABLE_RISING_EDGE() SET_BIT(EXTI->RTSR1, COMP_EXTI_LINE_COMP1)
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Disable the COMP1 EXTI line rising edge trigger.
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
#define __HAL_COMP_COMP1_EXTI_DISABLE_RISING_EDGE() CLEAR_BIT(EXTI->RTSR1, COMP_EXTI_LINE_COMP1)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Enable the COMP1 EXTI line falling edge trigger.
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
#define __HAL_COMP_COMP1_EXTI_ENABLE_FALLING_EDGE() SET_BIT(EXTI->FTSR1, COMP_EXTI_LINE_COMP1)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Disable the COMP1 EXTI line falling edge trigger.
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
#define __HAL_COMP_COMP1_EXTI_DISABLE_FALLING_EDGE() CLEAR_BIT(EXTI->FTSR1, COMP_EXTI_LINE_COMP1)
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Enable the COMP1 EXTI line rising & falling edge trigger.
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
#define __HAL_COMP_COMP1_EXTI_ENABLE_RISING_FALLING_EDGE() do { \
|
||||||
|
__HAL_COMP_COMP1_EXTI_ENABLE_RISING_EDGE(); \
|
||||||
|
__HAL_COMP_COMP1_EXTI_ENABLE_FALLING_EDGE(); \
|
||||||
|
} while(0)
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Disable the COMP1 EXTI line rising & falling edge trigger.
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
#define __HAL_COMP_COMP1_EXTI_DISABLE_RISING_FALLING_EDGE() do { \
|
||||||
|
__HAL_COMP_COMP1_EXTI_DISABLE_RISING_EDGE(); \
|
||||||
|
__HAL_COMP_COMP1_EXTI_DISABLE_FALLING_EDGE(); \
|
||||||
|
} while(0)
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Enable the COMP1 EXTI line in interrupt mode.
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
#define __HAL_COMP_COMP1_EXTI_ENABLE_IT() SET_BIT(EXTI_D1->IMR1, COMP_EXTI_LINE_COMP1)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Disable the COMP1 EXTI line in interrupt mode.
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
#define __HAL_COMP_COMP1_EXTI_DISABLE_IT() CLEAR_BIT(EXTI_D1->IMR1, COMP_EXTI_LINE_COMP1)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Enable the COMP1 EXTI Line in event mode.
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
#define __HAL_COMP_COMP1_EXTI_ENABLE_EVENT() SET_BIT(EXTI_D1->EMR1, COMP_EXTI_LINE_COMP1)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Disable the COMP1 EXTI Line in event mode.
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
#define __HAL_COMP_COMP1_EXTI_DISABLE_EVENT() CLEAR_BIT(EXTI_D1->EMR1, COMP_EXTI_LINE_COMP1)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Check whether the COMP1 EXTI line flag is set or not.
|
||||||
|
* @retval RESET or SET
|
||||||
|
*/
|
||||||
|
#define __HAL_COMP_COMP1_EXTI_GET_FLAG() READ_BIT(EXTI_D1->PR1, COMP_EXTI_LINE_COMP1)
|
||||||
|
/**
|
||||||
|
* @brief Clear the COMP1 EXTI flag.
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
#define __HAL_COMP_COMP1_EXTI_CLEAR_FLAG() WRITE_REG(EXTI_D1->PR1, COMP_EXTI_LINE_COMP1)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Generate a software interrupt on the COMP1 EXTI line.
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
#define __HAL_COMP_COMP1_EXTI_GENERATE_SWIT() SET_BIT(EXTI->SWIER1, COMP_EXTI_LINE_COMP1)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Enable the COMP1 D3 EXTI Line in event mode.
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
#define __HAL_COMP_COMP1_EXTID3_ENABLE_EVENT() SET_BIT(EXTI->D3PMR1, COMP_EXTI_LINE_COMP1)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Disable the COMP1 D3 EXTI Line in event mode.
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
#define __HAL_COMP_COMP1_EXTID3_DISABLE_EVENT() CLEAR_BIT(EXTI->D3PMR1, COMP_EXTI_LINE_COMP1)
|
||||||
|
|
||||||
|
#if defined(DUAL_CORE)
|
||||||
|
/**
|
||||||
|
* @brief Enable the COMP1 D2 EXTI line in interrupt mode.
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
#define __HAL_COMP_COMP1_EXTID2_ENABLE_IT() SET_BIT(EXTI_D2->IMR1, COMP_EXTI_LINE_COMP1)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Disable the COMP1 D2 EXTI line in interrupt mode.
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
#define __HAL_COMP_COMP1_EXTID2_DISABLE_IT() CLEAR_BIT(EXTI_D2->IMR1, COMP_EXTI_LINE_COMP1)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Enable the COMP1 D2 EXTI Line in event mode.
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
#define __HAL_COMP_COMP1_EXTID2_ENABLE_EVENT() SET_BIT(EXTI_D2->EMR1, COMP_EXTI_LINE_COMP1)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Disable the COMP1 D2 EXTI Line in event mode.
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
#define __HAL_COMP_COMP1_EXTID2_DISABLE_EVENT() CLEAR_BIT(EXTI_D2->EMR1, COMP_EXTI_LINE_COMP1)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Check whether the COMP1 D2 EXTI line flag is set or not.
|
||||||
|
* @retval RESET or SET
|
||||||
|
*/
|
||||||
|
#define __HAL_COMP_COMP1_EXTID2_GET_FLAG() READ_BIT(EXTI_D2->PR1, COMP_EXTI_LINE_COMP1)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Clear the COMP1 D2 EXTI flag.
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
#define __HAL_COMP_COMP1_EXTID2_CLEAR_FLAG() WRITE_REG(EXTI_D2->PR1, COMP_EXTI_LINE_COMP1)
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Enable the COMP2 EXTI line rising edge trigger.
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
#define __HAL_COMP_COMP2_EXTI_ENABLE_RISING_EDGE() SET_BIT(EXTI->RTSR1, COMP_EXTI_LINE_COMP2)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Disable the COMP2 EXTI line rising edge trigger.
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
#define __HAL_COMP_COMP2_EXTI_DISABLE_RISING_EDGE() CLEAR_BIT(EXTI->RTSR1, COMP_EXTI_LINE_COMP2)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Enable the COMP2 EXTI line falling edge trigger.
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
#define __HAL_COMP_COMP2_EXTI_ENABLE_FALLING_EDGE() SET_BIT(EXTI->FTSR1, COMP_EXTI_LINE_COMP2)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Disable the COMP2 EXTI line falling edge trigger.
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
#define __HAL_COMP_COMP2_EXTI_DISABLE_FALLING_EDGE() CLEAR_BIT(EXTI->FTSR1, COMP_EXTI_LINE_COMP2)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Enable the COMP2 EXTI line rising & falling edge trigger.
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
#define __HAL_COMP_COMP2_EXTI_ENABLE_RISING_FALLING_EDGE() do { \
|
||||||
|
__HAL_COMP_COMP2_EXTI_ENABLE_RISING_EDGE(); \
|
||||||
|
__HAL_COMP_COMP2_EXTI_ENABLE_FALLING_EDGE(); \
|
||||||
|
} while(0)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Disable the COMP2 EXTI line rising & falling edge trigger.
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
#define __HAL_COMP_COMP2_EXTI_DISABLE_RISING_FALLING_EDGE() do { \
|
||||||
|
__HAL_COMP_COMP2_EXTI_DISABLE_RISING_EDGE(); \
|
||||||
|
__HAL_COMP_COMP2_EXTI_DISABLE_FALLING_EDGE(); \
|
||||||
|
} while(0)
|
||||||
|
/**
|
||||||
|
* @brief Enable the COMP2 EXTI line.
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
#define __HAL_COMP_COMP2_EXTI_ENABLE_IT() SET_BIT(EXTI_D1->IMR1, COMP_EXTI_LINE_COMP2)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Disable the COMP2 EXTI line.
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
#define __HAL_COMP_COMP2_EXTI_DISABLE_IT() CLEAR_BIT(EXTI_D1->IMR1, COMP_EXTI_LINE_COMP2)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Enable the COMP2 EXTI Line in event mode.
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
#define __HAL_COMP_COMP2_EXTI_ENABLE_EVENT() SET_BIT(EXTI_D1->EMR1, COMP_EXTI_LINE_COMP2)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Disable the COMP2 EXTI Line in event mode.
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
#define __HAL_COMP_COMP2_EXTI_DISABLE_EVENT() CLEAR_BIT(EXTI_D1->EMR1, COMP_EXTI_LINE_COMP2)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Check whether the COMP2 EXTI line flag is set or not.
|
||||||
|
* @retval RESET or SET
|
||||||
|
*/
|
||||||
|
#define __HAL_COMP_COMP2_EXTI_GET_FLAG() READ_BIT(EXTI_D1->PR1, COMP_EXTI_LINE_COMP2)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Clear the the COMP2 EXTI flag.
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
#define __HAL_COMP_COMP2_EXTI_CLEAR_FLAG() WRITE_REG(EXTI_D1->PR1, COMP_EXTI_LINE_COMP2)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Enable the COMP2 D3 EXTI Line in event mode.
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
#define __HAL_COMP_COMP2_EXTID3_ENABLE_EVENT() SET_BIT(EXTI->D3PMR1, COMP_EXTI_LINE_COMP2)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Disable the COMP2 D3 EXTI Line in event mode.
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
#define __HAL_COMP_COMP2_EXTID3_DISABLE_EVENT() CLEAR_BIT(EXTI->D3PMR1, COMP_EXTI_LINE_COMP2)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Generate a software interrupt on the COMP2 EXTI line.
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
#define __HAL_COMP_COMP2_EXTI_GENERATE_SWIT() SET_BIT(EXTI->SWIER1, COMP_EXTI_LINE_COMP2)
|
||||||
|
|
||||||
|
#if defined(DUAL_CORE)
|
||||||
|
/**
|
||||||
|
* @brief Enable the COMP2 D2 EXTI line
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
#define __HAL_COMP_COMP2_EXTID2_ENABLE_IT() SET_BIT(EXTI_D2->IMR1, COMP_EXTI_LINE_COMP2)
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Disable the COMP2 D2 EXTI line.
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
#define __HAL_COMP_COMP2_EXTID2_DISABLE_IT() CLEAR_BIT(EXTI_D2->IMR1, COMP_EXTI_LINE_COMP2)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Enable the COMP2 D2 EXTI Line in event mode.
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
#define __HAL_COMP_COMP2_EXTID2_ENABLE_EVENT() SET_BIT(EXTI_D2->EMR1, COMP_EXTI_LINE_COMP2)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Disable the COMP2 D2 EXTI Line in event mode.
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
#define __HAL_COMP_COMP2_EXTID2_DISABLE_EVENT() CLEAR_BIT(EXTI_D2->EMR1, COMP_EXTI_LINE_COMP2)
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Check whether the COMP2 D2 EXTI line flag is set or not.
|
||||||
|
* @retval RESET or SET
|
||||||
|
*/
|
||||||
|
#define __HAL_COMP_COMP2_EXTID2_GET_FLAG() READ_BIT(EXTI_D2->PR1, COMP_EXTI_LINE_COMP2)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Clear the the COMP2 D2 EXTI flag.
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
#define __HAL_COMP_COMP2_EXTID2_CLEAR_FLAG() WRITE_REG(EXTI_D2->PR1, COMP_EXTI_LINE_COMP2)
|
||||||
|
|
||||||
|
#endif
|
||||||
|
/** @brief Checks if the specified COMP interrupt source is enabled or disabled.
|
||||||
|
* @param __HANDLE__: specifies the COMP Handle.
|
||||||
|
* This parameter can be COMP1 where x: 1 or 2 to select the COMP peripheral.
|
||||||
|
* @param __INTERRUPT__: specifies the COMP interrupt source to check.
|
||||||
|
* This parameter can be one of the following values:
|
||||||
|
* @arg COMP_IT_EN: Comparator interrupt enable
|
||||||
|
*
|
||||||
|
* @retval The new state of __IT__ (TRUE or FALSE)
|
||||||
|
*/
|
||||||
|
#define __HAL_COMP_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->CFGR & (__INTERRUPT__)) == (__INTERRUPT__)) ? SET : RESET)
|
||||||
|
|
||||||
|
/** @brief Checks whether the specified COMP flag is set or not.
|
||||||
|
* @param __FLAG__: specifies the flag to check.
|
||||||
|
* This parameter can be one of the following values:
|
||||||
|
* @arg COMP_FLAG_C1I: Comparator 1 Interrupt Flag
|
||||||
|
* @arg COMP_FLAG_C2I: Comparator 2 Interrupt Flag
|
||||||
|
* @retval The new state of __FLAG__ (TRUE or FALSE)
|
||||||
|
*/
|
||||||
|
#define __HAL_COMP_GET_FLAG(__FLAG__) ((COMP12->SR & (__FLAG__)) == (__FLAG__))
|
||||||
|
|
||||||
|
/** @brief Clears the specified COMP pending flag.
|
||||||
|
* @param __FLAG__: specifies the flag to check.
|
||||||
|
* This parameter can be any combination of the following values:
|
||||||
|
* @arg COMP_CLEAR_C1IF : Clear Comparator 1 Interrupt Flag
|
||||||
|
* @arg COMP_CLEAR_C2IF : Clear Comparator 2 Interrupt Flag
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
#define __HAL_COMP_CLEAR_FLAG(__FLAG__) (COMP12->ICFR = (__FLAG__))
|
||||||
|
|
||||||
|
/** @brief Clear the COMP C1I flag.
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
#define __HAL_COMP_CLEAR_C1IFLAG() __HAL_COMP_CLEAR_FLAG( COMP_CLEAR_C1IF)
|
||||||
|
|
||||||
|
/** @brief Clear the COMP C2I flag.
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
#define __HAL_COMP_CLEAR_C2IFLAG() __HAL_COMP_CLEAR_FLAG( COMP_CLEAR_C2IF)
|
||||||
|
|
||||||
|
/** @brief Enable the specified COMP interrupt.
|
||||||
|
* @param __HANDLE__: specifies the COMP Handle.
|
||||||
|
* @param __INTERRUPT__: specifies the COMP interrupt source to enable.
|
||||||
|
* This parameter can be one of the following values:
|
||||||
|
* @arg COMP_CFGRx_ITEN : Comparator interrupt
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
#define __HAL_COMP_ENABLE_IT(__HANDLE__, __INTERRUPT__) ( ((__HANDLE__)->Instance->CFGR) |= (__INTERRUPT__) )
|
||||||
|
|
||||||
|
/** @brief Disable the specified COMP interrupt.
|
||||||
|
* @param __HANDLE__: specifies the COMP Handle.
|
||||||
|
* @param __INTERRUPT__: specifies the COMP interrupt source to enable.
|
||||||
|
* This parameter can be one of the following values:
|
||||||
|
* @arg COMP_CFGRx_ITEN : Comparator interrupt
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
#define __HAL_COMP_DISABLE_IT(__HANDLE__,__INTERRUPT__) (((__HANDLE__)->Instance->CFGR) &= ~(__INTERRUPT__))
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
/** @brief Enable the specified bit in the Option register.
|
||||||
|
* @param __AF__: specifies the Alternate Function source selection .
|
||||||
|
* This parameter can be one of the following values:
|
||||||
|
* @arg COMP_OR_AFOPA6 : Alternate Function PA6 source selection
|
||||||
|
* @arg COMP_OR_AFOPA8 : Alternate Function PA8 source selection
|
||||||
|
* @arg COMP_OR_AFOPB12 : Alternate Function PB12 source selection
|
||||||
|
* @arg COMP_OR_AFOPE6 : Alternate Function PE6 source selection
|
||||||
|
* @arg COMP_OR_AFOPE15 : Alternate Function PE15 source selection
|
||||||
|
* @arg COMP_OR_AFOPG2 : Alternate Function PG2 source selection
|
||||||
|
* @arg COMP_OR_AFOPG3 : Alternate Function PG3 source selection
|
||||||
|
* @arg COMP_OR_AFOPG4 : Alternate Function PG4 source selection
|
||||||
|
* @arg COMP_OR_AFOPI1 : Alternate Function PI1 source selection
|
||||||
|
* @arg COMP_OR_AFOPI4 : Alternate Function PI4 source selection
|
||||||
|
* @arg COMP_OR_AFOPK2 : Alternate Function PK2 source selection
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
#define __HAL_COMP_ENABLE_OR(__AF__) SET_BIT(COMP12->OR, (__AF__))
|
||||||
|
|
||||||
|
/** @brief Disable the specified bit in the Option register.
|
||||||
|
* @param __AF__: specifies the Alternate Function source selection .
|
||||||
|
* This parameter can be one of the following values:
|
||||||
|
* @arg COMP_OR_AFOPA6 : Alternate Function PA6 source selection
|
||||||
|
* @arg COMP_OR_AFOPA8 : Alternate Function PA8 source selection
|
||||||
|
* @arg COMP_OR_AFOPB12 : Alternate Function PB12 source selection
|
||||||
|
* @arg COMP_OR_AFOPE6 : Alternate Function PE6 source selection
|
||||||
|
* @arg COMP_OR_AFOPE15 : Alternate Function PE15 source selection
|
||||||
|
* @arg COMP_OR_AFOPG2 : Alternate Function PG2 source selection
|
||||||
|
* @arg COMP_OR_AFOPG3 : Alternate Function PG3 source selection
|
||||||
|
* @arg COMP_OR_AFOPG4 : Alternate Function PG4 source selection
|
||||||
|
* @arg COMP_OR_AFOPI1 : Alternate Function PI1 source selection
|
||||||
|
* @arg COMP_OR_AFOPI4 : Alternate Function PI4 source selection
|
||||||
|
* @arg COMP_OR_AFOPK2 : Alternate Function PK2 source selection
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
#define __HAL_COMP_DISABLE_OR(__AF__) CLEAR_BIT(COMP12->OR, (__AF__))
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Private types -------------------------------------------------------------*/
|
||||||
|
/* Private constants ---------------------------------------------------------*/
|
||||||
|
/** @defgroup COMP_Private_Constants COMP Private Constants
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
/** @defgroup COMP_ExtiLine COMP EXTI Lines
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define COMP_EXTI_LINE_COMP1 (EXTI_IMR1_IM20) /*!< EXTI line 20 connected to COMP1 output */
|
||||||
|
#define COMP_EXTI_LINE_COMP2 (EXTI_IMR1_IM21) /*!< EXTI line 21 connected to COMP2 output */
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
/** @defgroup COMP_ExtiLine COMP EXTI Lines
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define COMP_EXTI_IT ((uint32_t) 0x01) /*!< EXTI line event with interruption */
|
||||||
|
#define COMP_EXTI_EVENT ((uint32_t) 0x02) /*!< EXTI line event only (without interruption) */
|
||||||
|
#define COMP_EXTI_RISING ((uint32_t) 0x10) /*!< EXTI line event on rising edge */
|
||||||
|
#define COMP_EXTI_FALLING ((uint32_t) 0x20) /*!< EXTI line event on falling edge */
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Private macros ------------------------------------------------------------*/
|
||||||
|
/** @defgroup COMP_Private_Macros COMP Private Macros
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
/** @defgroup COMP_GET_EXTI_LINE COMP Private macros to get EXTI line associated with Comparators
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* @brief Get the specified EXTI line for a comparator instance.
|
||||||
|
* @param __INSTANCE__: specifies the COMP instance.
|
||||||
|
* @retval value of @ref COMP_ExtiLine
|
||||||
|
*/
|
||||||
|
#define COMP_GET_EXTI_LINE(__INSTANCE__) (((__INSTANCE__) == COMP1) ? COMP_EXTI_LINE_COMP1 : \
|
||||||
|
COMP_EXTI_LINE_COMP2)
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
/** @defgroup COMP_IS_COMP_Definitions COMP private macros to check input parameters
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define IS_COMP_WINDOWMODE(__WINDOWMODE__) (((__WINDOWMODE__) == COMP_WINDOWMODE_DISABLE) || \
|
||||||
|
((__WINDOWMODE__) == COMP_WINDOWMODE_COMP1_INPUT_PLUS_COMMON) )
|
||||||
|
|
||||||
|
#define IS_COMP_POWERMODE(__POWERMODE__) (((__POWERMODE__) == COMP_POWERMODE_HIGHSPEED) || \
|
||||||
|
((__POWERMODE__) == COMP_POWERMODE_MEDIUMSPEED) || \
|
||||||
|
((__POWERMODE__) == COMP_POWERMODE_ULTRALOWPOWER) )
|
||||||
|
|
||||||
|
#if defined (COMP_CFGRx_INP2SEL)
|
||||||
|
#define IS_COMP_INPUT_PLUS(__COMP_INSTANCE__, __INPUT_PLUS__) (((__INPUT_PLUS__) == COMP_INPUT_PLUS_IO1) || \
|
||||||
|
((__INPUT_PLUS__) == COMP_INPUT_PLUS_IO2) || \
|
||||||
|
((__INPUT_PLUS__) == COMP_INPUT_PLUS_DAC2_CH1))
|
||||||
|
#else
|
||||||
|
#define IS_COMP_INPUT_PLUS(__COMP_INSTANCE__, __INPUT_PLUS__) (((__INPUT_PLUS__) == COMP_INPUT_PLUS_IO1) || \
|
||||||
|
((__INPUT_PLUS__) == COMP_INPUT_PLUS_IO2))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#if defined (COMP_CFGRx_INMSEL_3)
|
||||||
|
#define IS_COMP_INPUT_MINUS(__COMP_INSTANCE__, __INPUT_MINUS__) (((__INPUT_MINUS__) == COMP_INPUT_MINUS_1_4VREFINT) || \
|
||||||
|
((__INPUT_MINUS__) == COMP_INPUT_MINUS_1_2VREFINT) || \
|
||||||
|
((__INPUT_MINUS__) == COMP_INPUT_MINUS_3_4VREFINT) || \
|
||||||
|
((__INPUT_MINUS__) == COMP_INPUT_MINUS_VREFINT) || \
|
||||||
|
((__INPUT_MINUS__) == COMP_INPUT_MINUS_DAC1_CH1) || \
|
||||||
|
((__INPUT_MINUS__) == COMP_INPUT_MINUS_DAC1_CH2) || \
|
||||||
|
((__INPUT_MINUS__) == COMP_INPUT_MINUS_IO1) || \
|
||||||
|
((__INPUT_MINUS__) == COMP_INPUT_MINUS_IO2) || \
|
||||||
|
((__INPUT_MINUS__) == COMP_INPUT_MINUS_TPSENS_DAC2CH1) || \
|
||||||
|
((__INPUT_MINUS__) == COMP_INPUT_MINUS_VBAT_VDDAP))
|
||||||
|
#else
|
||||||
|
#define IS_COMP_INPUT_MINUS(__COMP_INSTANCE__, __INPUT_MINUS__) (((__INPUT_MINUS__) == COMP_INPUT_MINUS_1_4VREFINT) || \
|
||||||
|
((__INPUT_MINUS__) == COMP_INPUT_MINUS_1_2VREFINT) || \
|
||||||
|
((__INPUT_MINUS__) == COMP_INPUT_MINUS_3_4VREFINT) || \
|
||||||
|
((__INPUT_MINUS__) == COMP_INPUT_MINUS_VREFINT) || \
|
||||||
|
((__INPUT_MINUS__) == COMP_INPUT_MINUS_DAC1_CH1) || \
|
||||||
|
((__INPUT_MINUS__) == COMP_INPUT_MINUS_DAC1_CH2) || \
|
||||||
|
((__INPUT_MINUS__) == COMP_INPUT_MINUS_IO1) || \
|
||||||
|
((__INPUT_MINUS__) == COMP_INPUT_MINUS_IO2))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define IS_COMP_HYSTERESIS(__HYSTERESIS__) (((__HYSTERESIS__) == COMP_HYSTERESIS_NONE) || \
|
||||||
|
((__HYSTERESIS__) == COMP_HYSTERESIS_LOW) || \
|
||||||
|
((__HYSTERESIS__) == COMP_HYSTERESIS_MEDIUM) || \
|
||||||
|
((__HYSTERESIS__) == COMP_HYSTERESIS_HIGH))
|
||||||
|
|
||||||
|
#define IS_COMP_OUTPUTPOL(__POL__) (((__POL__) == COMP_OUTPUTPOL_NONINVERTED) || \
|
||||||
|
((__POL__) == COMP_OUTPUTPOL_INVERTED))
|
||||||
|
|
||||||
|
#define IS_COMP_BLANKINGSRCE(__SOURCE__) (((__SOURCE__) == COMP_BLANKINGSRC_NONE) || \
|
||||||
|
((__SOURCE__) == COMP_BLANKINGSRC_TIM1_OC5) || \
|
||||||
|
((__SOURCE__) == COMP_BLANKINGSRC_TIM2_OC3) || \
|
||||||
|
((__SOURCE__) == COMP_BLANKINGSRC_TIM3_OC3) || \
|
||||||
|
((__SOURCE__) == COMP_BLANKINGSRC_TIM3_OC4) || \
|
||||||
|
((__SOURCE__) == COMP_BLANKINGSRC_TIM8_OC5) || \
|
||||||
|
((__SOURCE__) == COMP_BLANKINGSRC_TIM15_OC1))
|
||||||
|
|
||||||
|
|
||||||
|
#define IS_COMP_TRIGGERMODE(__MODE__) (((__MODE__) == COMP_TRIGGERMODE_NONE) || \
|
||||||
|
((__MODE__) == COMP_TRIGGERMODE_IT_RISING) || \
|
||||||
|
((__MODE__) == COMP_TRIGGERMODE_IT_FALLING) || \
|
||||||
|
((__MODE__) == COMP_TRIGGERMODE_IT_RISING_FALLING) || \
|
||||||
|
((__MODE__) == COMP_TRIGGERMODE_EVENT_RISING) || \
|
||||||
|
((__MODE__) == COMP_TRIGGERMODE_EVENT_FALLING) || \
|
||||||
|
((__MODE__) == COMP_TRIGGERMODE_EVENT_RISING_FALLING))
|
||||||
|
|
||||||
|
#define IS_COMP_OUTPUT_LEVEL(__OUTPUT_LEVEL__) (((__OUTPUT_LEVEL__) == COMP_OUTPUT_LEVEL_LOW) || \
|
||||||
|
((__OUTPUT_LEVEL__) == COMP_OUTPUT_LEVEL_HIGH))
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Exported functions --------------------------------------------------------*/
|
||||||
|
/** @addtogroup COMP_Exported_Functions
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @addtogroup COMP_Exported_Functions_Group1
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
/* Initialization and de-initialization functions **********************************/
|
||||||
|
HAL_StatusTypeDef HAL_COMP_Init(COMP_HandleTypeDef *hcomp);
|
||||||
|
HAL_StatusTypeDef HAL_COMP_DeInit (COMP_HandleTypeDef *hcomp);
|
||||||
|
void HAL_COMP_MspInit(COMP_HandleTypeDef *hcomp);
|
||||||
|
void HAL_COMP_MspDeInit(COMP_HandleTypeDef *hcomp);
|
||||||
|
#if (USE_HAL_COMP_REGISTER_CALLBACKS == 1)
|
||||||
|
/* Callbacks Register/UnRegister functions ***********************************/
|
||||||
|
HAL_StatusTypeDef HAL_COMP_RegisterCallback(COMP_HandleTypeDef *hcomp, HAL_COMP_CallbackIDTypeDef CallbackID, pCOMP_CallbackTypeDef pCallback);
|
||||||
|
HAL_StatusTypeDef HAL_COMP_UnRegisterCallback(COMP_HandleTypeDef *hcomp, HAL_COMP_CallbackIDTypeDef CallbackID);
|
||||||
|
#endif /* USE_HAL_COMP_REGISTER_CALLBACKS */
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* IO operation functions *****************************************************/
|
||||||
|
/** @addtogroup COMP_Exported_Functions_Group2
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
HAL_StatusTypeDef HAL_COMP_Start(COMP_HandleTypeDef *hcomp);
|
||||||
|
HAL_StatusTypeDef HAL_COMP_Stop(COMP_HandleTypeDef *hcomp);
|
||||||
|
HAL_StatusTypeDef HAL_COMP_Start_IT(COMP_HandleTypeDef *hcomp);
|
||||||
|
HAL_StatusTypeDef HAL_COMP_Stop_IT(COMP_HandleTypeDef *hcomp);
|
||||||
|
void HAL_COMP_IRQHandler(COMP_HandleTypeDef *hcomp);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Peripheral Control functions ************************************************/
|
||||||
|
/** @addtogroup COMP_Exported_Functions_Group3
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
HAL_StatusTypeDef HAL_COMP_Lock(COMP_HandleTypeDef *hcomp);
|
||||||
|
uint32_t HAL_COMP_GetOutputLevel(COMP_HandleTypeDef *hcomp);
|
||||||
|
/* Callback in Interrupt mode */
|
||||||
|
void HAL_COMP_TriggerCallback(COMP_HandleTypeDef *hcomp);
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Peripheral State functions **************************************************/
|
||||||
|
/** @addtogroup COMP_Exported_Functions_Group4
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
HAL_COMP_StateTypeDef HAL_COMP_GetState(COMP_HandleTypeDef *hcomp);
|
||||||
|
uint32_t HAL_COMP_GetError(COMP_HandleTypeDef *hcomp);
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* STM32H7xx_HAL_COMP_H */
|
||||||
|
|
||||||
|
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
@ -0,0 +1,513 @@
|
|||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file stm32h7xx_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 stm32h7xx_hal_conf.h.
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* <h2><center>© Copyright (c) 2017 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 STM32H7xx_HAL_CONF_H
|
||||||
|
#define STM32H7xx_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_CEC_MODULE_ENABLED
|
||||||
|
#define HAL_COMP_MODULE_ENABLED
|
||||||
|
#define HAL_CORDIC_MODULE_ENABLED
|
||||||
|
#define HAL_CORTEX_MODULE_ENABLED
|
||||||
|
#define HAL_CRC_MODULE_ENABLED
|
||||||
|
#define HAL_CRYP_MODULE_ENABLED
|
||||||
|
#define HAL_DAC_MODULE_ENABLED
|
||||||
|
#define HAL_DCMI_MODULE_ENABLED
|
||||||
|
#define HAL_DFSDM_MODULE_ENABLED
|
||||||
|
#define HAL_DMA_MODULE_ENABLED
|
||||||
|
#define HAL_DMA2D_MODULE_ENABLED
|
||||||
|
#define HAL_DTS_MODULE_ENABLED
|
||||||
|
#define HAL_DSI_MODULE_ENABLED
|
||||||
|
#define HAL_ETH_MODULE_ENABLED
|
||||||
|
#define HAL_EXTI_MODULE_ENABLED
|
||||||
|
#define HAL_FDCAN_MODULE_ENABLED
|
||||||
|
#define HAL_FLASH_MODULE_ENABLED
|
||||||
|
#define HAL_GFXMMU_MODULE_ENABLED
|
||||||
|
#define HAL_FMAC_MODULE_ENABLED
|
||||||
|
#define HAL_GPIO_MODULE_ENABLED
|
||||||
|
#define HAL_HASH_MODULE_ENABLED
|
||||||
|
#define HAL_HCD_MODULE_ENABLED
|
||||||
|
#define HAL_HRTIM_MODULE_ENABLED
|
||||||
|
#define HAL_HSEM_MODULE_ENABLED
|
||||||
|
#define HAL_I2C_MODULE_ENABLED
|
||||||
|
#define HAL_I2S_MODULE_ENABLED
|
||||||
|
#define HAL_IRDA_MODULE_ENABLED
|
||||||
|
#define HAL_IWDG_MODULE_ENABLED
|
||||||
|
#define HAL_JPEG_MODULE_ENABLED
|
||||||
|
#define HAL_LPTIM_MODULE_ENABLED
|
||||||
|
#define HAL_LTDC_MODULE_ENABLED
|
||||||
|
#define HAL_MDIOS_MODULE_ENABLED
|
||||||
|
#define HAL_MDMA_MODULE_ENABLED
|
||||||
|
#define HAL_MMC_MODULE_ENABLED
|
||||||
|
#define HAL_NAND_MODULE_ENABLED
|
||||||
|
#define HAL_NOR_MODULE_ENABLED
|
||||||
|
#define HAL_OPAMP_MODULE_ENABLED
|
||||||
|
#define HAL_OSPI_MODULE_ENABLED
|
||||||
|
#define HAL_OTFDEC_MODULE_ENABLED
|
||||||
|
#define HAL_PCD_MODULE_ENABLED
|
||||||
|
#define HAL_PWR_MODULE_ENABLED
|
||||||
|
#define HAL_PSSI_MODULE_ENABLED
|
||||||
|
#define HAL_QSPI_MODULE_ENABLED
|
||||||
|
#define HAL_RAMECC_MODULE_ENABLED
|
||||||
|
#define HAL_RCC_MODULE_ENABLED
|
||||||
|
#define HAL_RNG_MODULE_ENABLED
|
||||||
|
#define HAL_RTC_MODULE_ENABLED
|
||||||
|
#define HAL_SAI_MODULE_ENABLED
|
||||||
|
#define HAL_SD_MODULE_ENABLED
|
||||||
|
#define HAL_SDRAM_MODULE_ENABLED
|
||||||
|
#define HAL_SMARTCARD_MODULE_ENABLED
|
||||||
|
#define HAL_SMBUS_MODULE_ENABLED
|
||||||
|
#define HAL_SPDIFRX_MODULE_ENABLED
|
||||||
|
#define HAL_SPI_MODULE_ENABLED
|
||||||
|
#define HAL_SRAM_MODULE_ENABLED
|
||||||
|
#define HAL_SWPMI_MODULE_ENABLED
|
||||||
|
#define HAL_TIM_MODULE_ENABLED
|
||||||
|
#define HAL_UART_MODULE_ENABLED
|
||||||
|
#define HAL_USART_MODULE_ENABLED
|
||||||
|
#define HAL_WWDG_MODULE_ENABLED
|
||||||
|
|
||||||
|
/* ########################## Oscillator 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 (25000000UL) /*!< Value of the External oscillator in Hz */
|
||||||
|
#endif /* HSE_VALUE */
|
||||||
|
|
||||||
|
#if !defined (HSE_STARTUP_TIMEOUT)
|
||||||
|
#define HSE_STARTUP_TIMEOUT (5000UL) /*!< Time out for HSE start up, in ms */
|
||||||
|
#endif /* HSE_STARTUP_TIMEOUT */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Internal oscillator (CSI) default value.
|
||||||
|
* This value is the default CSI value after Reset.
|
||||||
|
*/
|
||||||
|
#if !defined (CSI_VALUE)
|
||||||
|
#define CSI_VALUE (4000000UL) /*!< Value of the Internal oscillator in Hz*/
|
||||||
|
#endif /* CSI_VALUE */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @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 (64000000UL) /*!< Value of the Internal oscillator in Hz*/
|
||||||
|
#endif /* HSI_VALUE */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief External Low Speed oscillator (LSE) value.
|
||||||
|
* This value is used by the UART, RTC HAL module to compute the system frequency
|
||||||
|
*/
|
||||||
|
#if !defined (LSE_VALUE)
|
||||||
|
#define LSE_VALUE (32768UL) /*!< Value of the External oscillator in Hz*/
|
||||||
|
#endif /* LSE_VALUE */
|
||||||
|
|
||||||
|
|
||||||
|
#if !defined (LSE_STARTUP_TIMEOUT)
|
||||||
|
#define LSE_STARTUP_TIMEOUT (5000UL) /*!< Time out for LSE start up, in ms */
|
||||||
|
#endif /* LSE_STARTUP_TIMEOUT */
|
||||||
|
|
||||||
|
#if !defined (LSI_VALUE)
|
||||||
|
#define LSI_VALUE (32000UL) /*!< 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 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 12288000UL /*!< Value of the External clock 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 (3300UL) /*!< Value of VDD in mv */
|
||||||
|
#define TICK_INT_PRIORITY (0x0FUL) /*!< tick interrupt priority */
|
||||||
|
#define USE_RTOS 0
|
||||||
|
#define USE_SD_TRANSCEIVER 1U /*!< use uSD Transceiver */
|
||||||
|
#define USE_SPI_CRC 1U /*!< use CRC in SPI */
|
||||||
|
|
||||||
|
#define USE_HAL_ADC_REGISTER_CALLBACKS 0U /* ADC register callback disabled */
|
||||||
|
#define USE_HAL_CEC_REGISTER_CALLBACKS 0U /* CEC register callback disabled */
|
||||||
|
#define USE_HAL_COMP_REGISTER_CALLBACKS 0U /* COMP register callback disabled */
|
||||||
|
#define USE_HAL_CORDIC_REGISTER_CALLBACKS 0U /* CORDIC 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_DTS_REGISTER_CALLBACKS 0U /* DTS register callback disabled */
|
||||||
|
#define USE_HAL_ETH_REGISTER_CALLBACKS 0U /* ETH register callback disabled */
|
||||||
|
#define USE_HAL_FDCAN_REGISTER_CALLBACKS 0U /* FDCAN register callback disabled */
|
||||||
|
#define USE_HAL_FMAC_REGISTER_CALLBACKS 0U /* FMAC 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_SDRAM_REGISTER_CALLBACKS 0U /* SDRAM register callback disabled */
|
||||||
|
#define USE_HAL_SRAM_REGISTER_CALLBACKS 0U /* SRAM 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_GFXMMU_REGISTER_CALLBACKS 0U /* GFXMMU register callback disabled */
|
||||||
|
#define USE_HAL_HRTIM_REGISTER_CALLBACKS 0U /* HRTIM register callback disabled */
|
||||||
|
#define USE_HAL_I2C_REGISTER_CALLBACKS 0U /* I2C 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_JPEG_REGISTER_CALLBACKS 0U /* JPEG 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_MDIOS_REGISTER_CALLBACKS 0U /* MDIO register callback disabled */
|
||||||
|
#define USE_HAL_MMC_REGISTER_CALLBACKS 0U /* MMC register callback disabled */
|
||||||
|
#define USE_HAL_OPAMP_REGISTER_CALLBACKS 0U /* MDIO register callback disabled */
|
||||||
|
#define USE_HAL_OSPI_REGISTER_CALLBACKS 0U /* OSPI register callback disabled */
|
||||||
|
#define USE_HAL_OTFDEC_REGISTER_CALLBACKS 0U /* OTFDEC 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_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_SWPMI_REGISTER_CALLBACKS 0U /* SWPMI 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 */
|
||||||
|
|
||||||
|
/* ########################### Ethernet Configuration ######################### */
|
||||||
|
#define ETH_TX_DESC_CNT 4 /* number of Ethernet Tx DMA descriptors */
|
||||||
|
#define ETH_RX_DESC_CNT 4 /* number of Ethernet Rx DMA descriptors */
|
||||||
|
|
||||||
|
#define ETH_MAC_ADDR0 (0x02UL)
|
||||||
|
#define ETH_MAC_ADDR1 (0x00UL)
|
||||||
|
#define ETH_MAC_ADDR2 (0x00UL)
|
||||||
|
#define ETH_MAC_ADDR3 (0x00UL)
|
||||||
|
#define ETH_MAC_ADDR4 (0x00UL)
|
||||||
|
#define ETH_MAC_ADDR5 (0x00UL)
|
||||||
|
|
||||||
|
/* ########################## Assert Selection ############################## */
|
||||||
|
/**
|
||||||
|
* @brief Uncomment the line below to expanse the "assert_param" macro in the
|
||||||
|
* HAL drivers code
|
||||||
|
*/
|
||||||
|
/* #define USE_FULL_ASSERT 1 */
|
||||||
|
|
||||||
|
|
||||||
|
/* Includes ------------------------------------------------------------------*/
|
||||||
|
/**
|
||||||
|
* @brief Include module's header file
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef HAL_RCC_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_rcc.h"
|
||||||
|
#endif /* HAL_RCC_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_GPIO_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_gpio.h"
|
||||||
|
#endif /* HAL_GPIO_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_DMA_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_dma.h"
|
||||||
|
#endif /* HAL_DMA_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_MDMA_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_mdma.h"
|
||||||
|
#endif /* HAL_MDMA_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_HASH_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_hash.h"
|
||||||
|
#endif /* HAL_HASH_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_DCMI_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_dcmi.h"
|
||||||
|
#endif /* HAL_DCMI_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_DMA2D_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_dma2d.h"
|
||||||
|
#endif /* HAL_DMA2D_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_DSI_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_dsi.h"
|
||||||
|
#endif /* HAL_DSI_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_DFSDM_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_dfsdm.h"
|
||||||
|
#endif /* HAL_DFSDM_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_DTS_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_dts.h"
|
||||||
|
#endif /* HAL_DTS_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_ETH_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_eth.h"
|
||||||
|
#endif /* HAL_ETH_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_EXTI_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_exti.h"
|
||||||
|
#endif /* HAL_EXTI_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_CORTEX_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_cortex.h"
|
||||||
|
#endif /* HAL_CORTEX_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_ADC_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_adc.h"
|
||||||
|
#endif /* HAL_ADC_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_FDCAN_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_fdcan.h"
|
||||||
|
#endif /* HAL_FDCAN_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_CEC_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_cec.h"
|
||||||
|
#endif /* HAL_CEC_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_COMP_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_comp.h"
|
||||||
|
#endif /* HAL_COMP_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_CORDIC_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_cordic.h"
|
||||||
|
#endif /* HAL_CORDIC_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_CRC_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_crc.h"
|
||||||
|
#endif /* HAL_CRC_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_CRYP_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_cryp.h"
|
||||||
|
#endif /* HAL_CRYP_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_DAC_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_dac.h"
|
||||||
|
#endif /* HAL_DAC_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_FLASH_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_flash.h"
|
||||||
|
#endif /* HAL_FLASH_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_GFXMMU_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_gfxmmu.h"
|
||||||
|
#endif /* HAL_GFXMMU_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_FMAC_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_fmac.h"
|
||||||
|
#endif /* HAL_FMAC_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_HRTIM_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_hrtim.h"
|
||||||
|
#endif /* HAL_HRTIM_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_HSEM_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_hsem.h"
|
||||||
|
#endif /* HAL_HSEM_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_SRAM_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_sram.h"
|
||||||
|
#endif /* HAL_SRAM_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_NOR_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_nor.h"
|
||||||
|
#endif /* HAL_NOR_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_NAND_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_nand.h"
|
||||||
|
#endif /* HAL_NAND_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_I2C_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_i2c.h"
|
||||||
|
#endif /* HAL_I2C_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_I2S_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_i2s.h"
|
||||||
|
#endif /* HAL_I2S_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_IWDG_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_iwdg.h"
|
||||||
|
#endif /* HAL_IWDG_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_JPEG_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_jpeg.h"
|
||||||
|
#endif /* HAL_JPEG_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_MDIOS_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_mdios.h"
|
||||||
|
#endif /* HAL_MDIOS_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_MMC_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_mmc.h"
|
||||||
|
#endif /* HAL_MMC_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_LPTIM_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_lptim.h"
|
||||||
|
#endif /* HAL_LPTIM_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_LTDC_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_ltdc.h"
|
||||||
|
#endif /* HAL_LTDC_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_OPAMP_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_opamp.h"
|
||||||
|
#endif /* HAL_OPAMP_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_OSPI_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_ospi.h"
|
||||||
|
#endif /* HAL_OSPI_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_OTFDEC_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_otfdec.h"
|
||||||
|
#endif /* HAL_OTFDEC_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_PSSI_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_pssi.h"
|
||||||
|
#endif /* HAL_PSSI_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_PWR_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_pwr.h"
|
||||||
|
#endif /* HAL_PWR_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_QSPI_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_qspi.h"
|
||||||
|
#endif /* HAL_QSPI_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_RAMECC_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_ramecc.h"
|
||||||
|
#endif /* HAL_RAMECC_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_RNG_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_rng.h"
|
||||||
|
#endif /* HAL_RNG_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_RTC_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_rtc.h"
|
||||||
|
#endif /* HAL_RTC_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_SAI_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_sai.h"
|
||||||
|
#endif /* HAL_SAI_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_SD_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_sd.h"
|
||||||
|
#endif /* HAL_SD_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_SDRAM_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_sdram.h"
|
||||||
|
#endif /* HAL_SDRAM_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_SPI_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_spi.h"
|
||||||
|
#endif /* HAL_SPI_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_SPDIFRX_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_spdifrx.h"
|
||||||
|
#endif /* HAL_SPDIFRX_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_SWPMI_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_swpmi.h"
|
||||||
|
#endif /* HAL_SWPMI_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_TIM_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_tim.h"
|
||||||
|
#endif /* HAL_TIM_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_UART_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_uart.h"
|
||||||
|
#endif /* HAL_UART_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_USART_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_usart.h"
|
||||||
|
#endif /* HAL_USART_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_IRDA_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_irda.h"
|
||||||
|
#endif /* HAL_IRDA_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_SMARTCARD_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_smartcard.h"
|
||||||
|
#endif /* HAL_SMARTCARD_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_SMBUS_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_smbus.h"
|
||||||
|
#endif /* HAL_SMBUS_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_WWDG_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_wwdg.h"
|
||||||
|
#endif /* HAL_WWDG_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_PCD_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_pcd.h"
|
||||||
|
#endif /* HAL_PCD_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_HCD_MODULE_ENABLED
|
||||||
|
#include "stm32h7xx_hal_hcd.h"
|
||||||
|
#endif /* HAL_HCD_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 /* STM32H7xx_HAL_CONF_H */
|
||||||
|
|
||||||
|
|
||||||
|
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user