git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@2850 35acf78f-673a-0410-8e92-d51de3d6d3f4
parent
94d34da7f1
commit
f5ae255230
|
@ -1,4 +1,4 @@
|
|||
# Doxyfile 1.7.3
|
||||
# Doxyfile 1.7.4
|
||||
|
||||
# This file describes the settings to be used by the documentation system
|
||||
# doxygen (www.doxygen.org) for a project.
|
||||
|
@ -33,7 +33,9 @@ PROJECT_NAME = ChibiOS/RT
|
|||
|
||||
PROJECT_NUMBER = 2.3.1
|
||||
|
||||
# Using the PROJECT_BRIEF tag one can provide an optional one line description for a project that appears at the top of each page and should give viewer a quick idea about the purpose of the project. Keep the description short.
|
||||
# Using the PROJECT_BRIEF tag one can provide an optional one line description
|
||||
# for a project that appears at the top of each page and should give viewer
|
||||
# a quick idea about the purpose of the project. Keep the description short.
|
||||
|
||||
PROJECT_BRIEF =
|
||||
|
||||
|
@ -304,6 +306,13 @@ DISTRIBUTE_GROUP_DOC = NO
|
|||
|
||||
SUBGROUPING = YES
|
||||
|
||||
# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and
|
||||
# unions are shown inside the group in which they are included (e.g. using
|
||||
# @ingroup) instead of on a separate page (for HTML and Man pages) or
|
||||
# section (for LaTeX and RTF).
|
||||
|
||||
INLINE_GROUPED_CLASSES = NO
|
||||
|
||||
# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum
|
||||
# is documented as struct, union, or enum with the name of the typedef. So
|
||||
# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
|
||||
|
@ -479,8 +488,11 @@ SORT_GROUP_NAMES = NO
|
|||
|
||||
SORT_BY_SCOPE_NAME = NO
|
||||
|
||||
# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper type resolution of all parameters of a function it will reject a
|
||||
# match between the prototype and the implementation of a member function even if there is only one candidate or it is obvious which candidate to choose by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen
|
||||
# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to
|
||||
# do proper type resolution of all parameters of a function it will reject a
|
||||
# match between the prototype and the implementation of a member function even
|
||||
# if there is only one candidate or it is obvious which candidate to choose
|
||||
# by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen
|
||||
# will still accept a match between prototype and implementation in such cases.
|
||||
|
||||
STRICT_PROTO_MATCHING = NO
|
||||
|
@ -924,7 +936,13 @@ HTML_FILE_EXTENSION = .html
|
|||
|
||||
# The HTML_HEADER tag can be used to specify a personal HTML header for
|
||||
# each generated HTML page. If it is left blank doxygen will generate a
|
||||
# standard header.
|
||||
# standard header. Note that when using a custom header you are responsible
|
||||
# for the proper inclusion of any scripts and style sheets that doxygen
|
||||
# needs, which is dependent on the configuration options used.
|
||||
# It is adviced to generate a default header using "doxygen -w html
|
||||
# header.html footer.html stylesheet.css YourConfigFile" and then modify
|
||||
# that header. Note that the header is subject to change so you typically
|
||||
# have to redo this when upgrading to a newer version of doxygen or when changing the value of configuration settings such as GENERATE_TREEVIEW!
|
||||
|
||||
HTML_HEADER = ./rsc/header_chm.html
|
||||
|
||||
|
@ -943,6 +961,15 @@ HTML_FOOTER = ./rsc/footer_chm.html
|
|||
|
||||
HTML_STYLESHEET =
|
||||
|
||||
# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
|
||||
# other source files which should be copied to the HTML output directory. Note
|
||||
# that these files will be copied to the base HTML output directory. Use the
|
||||
# $relpath$ marker in the HTML_HEADER and/or HTML_FOOTER files to load these
|
||||
# files. In the HTML_STYLESHEET file, use the file name only. Also note that
|
||||
# the files will be copied as-is; there are no commands or markers available.
|
||||
|
||||
HTML_EXTRA_FILES =
|
||||
|
||||
# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output.
|
||||
# Doxygen will adjust the colors in the stylesheet and background images
|
||||
# according to this color. Hue is specified as an angle on a colorwheel,
|
||||
|
@ -1145,9 +1172,10 @@ ECLIPSE_DOC_ID = org.doxygen.Project
|
|||
|
||||
DISABLE_INDEX = NO
|
||||
|
||||
# This tag can be used to set the number of enum values (range [0,1..20])
|
||||
# that doxygen will group on one line in the generated HTML documentation.
|
||||
# Note that a value of 0 will completely suppress the enum values from appearing in the overview section.
|
||||
# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values
|
||||
# (range [0,1..20]) that doxygen will group on one line in the generated HTML
|
||||
# documentation. Note that a value of 0 will completely suppress the enum
|
||||
# values from appearing in the overview section.
|
||||
|
||||
ENUM_VALUES_PER_LINE = 4
|
||||
|
||||
|
@ -1206,7 +1234,8 @@ USE_MATHJAX = NO
|
|||
# HTML output directory using the MATHJAX_RELPATH option. The destination
|
||||
# directory should contain the MathJax.js script. For instance, if the mathjax
|
||||
# directory is located at the same level as the HTML output directory, then
|
||||
# MATHJAX_RELPATH should be ../mathjax. The default value points to the mathjax.org site, so you can quickly see the result without installing
|
||||
# MATHJAX_RELPATH should be ../mathjax. The default value points to the
|
||||
# mathjax.org site, so you can quickly see the result without installing
|
||||
# MathJax, but it is strongly recommended to install a local copy of MathJax
|
||||
# before deployment.
|
||||
|
||||
|
@ -1285,6 +1314,13 @@ EXTRA_PACKAGES =
|
|||
|
||||
LATEX_HEADER =
|
||||
|
||||
# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for
|
||||
# the generated latex document. The footer should contain everything after
|
||||
# the last chapter. If it is left blank doxygen will generate a
|
||||
# standard footer. Notice: only use this tag if you know what you are doing!
|
||||
|
||||
LATEX_FOOTER =
|
||||
|
||||
# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
|
||||
# is prepared for conversion to pdf (using ps2pdf). The pdf file will
|
||||
# contain links (just like the HTML output) instead of page references
|
||||
|
@ -1494,7 +1530,7 @@ MACRO_EXPANSION = YES
|
|||
EXPAND_ONLY_PREDEF = YES
|
||||
|
||||
# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
|
||||
# in the INCLUDE_PATH (see below) will be search if a #include is found.
|
||||
# pointed to by INCLUDE_PATH will be searched when a #include is found.
|
||||
|
||||
SEARCH_INCLUDES = YES
|
||||
|
||||
|
@ -1524,7 +1560,8 @@ PREDEFINED = __DOXYGEN__
|
|||
# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
|
||||
# this tag can be used to specify a list of macro names that should be expanded.
|
||||
# The macro definition that is found in the sources will be used.
|
||||
# Use the PREDEFINED tag if you want to use a different macro definition that overrules the definition found in the source code.
|
||||
# Use the PREDEFINED tag if you want to use a different macro definition that
|
||||
# overrules the definition found in the source code.
|
||||
|
||||
EXPAND_AS_DEFINED =
|
||||
|
||||
|
@ -1717,7 +1754,7 @@ GRAPHICAL_HIERARCHY = YES
|
|||
DIRECTORY_GRAPH = NO
|
||||
|
||||
# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
|
||||
# generated by dot. Possible values are png, svg, gif or svg.
|
||||
# generated by dot. Possible values are svg, png, jpg, or gif.
|
||||
# If left blank png will be used.
|
||||
|
||||
DOT_IMAGE_FORMAT = png
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# Doxyfile 1.7.3
|
||||
# Doxyfile 1.7.4
|
||||
|
||||
# This file describes the settings to be used by the documentation system
|
||||
# doxygen (www.doxygen.org) for a project.
|
||||
|
@ -33,7 +33,9 @@ PROJECT_NAME = ChibiOS/RT
|
|||
|
||||
PROJECT_NUMBER = 2.3.1
|
||||
|
||||
# Using the PROJECT_BRIEF tag one can provide an optional one line description for a project that appears at the top of each page and should give viewer a quick idea about the purpose of the project. Keep the description short.
|
||||
# Using the PROJECT_BRIEF tag one can provide an optional one line description
|
||||
# for a project that appears at the top of each page and should give viewer
|
||||
# a quick idea about the purpose of the project. Keep the description short.
|
||||
|
||||
PROJECT_BRIEF =
|
||||
|
||||
|
@ -304,6 +306,13 @@ DISTRIBUTE_GROUP_DOC = NO
|
|||
|
||||
SUBGROUPING = YES
|
||||
|
||||
# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and
|
||||
# unions are shown inside the group in which they are included (e.g. using
|
||||
# @ingroup) instead of on a separate page (for HTML and Man pages) or
|
||||
# section (for LaTeX and RTF).
|
||||
|
||||
INLINE_GROUPED_CLASSES = NO
|
||||
|
||||
# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum
|
||||
# is documented as struct, union, or enum with the name of the typedef. So
|
||||
# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
|
||||
|
@ -479,8 +488,11 @@ SORT_GROUP_NAMES = NO
|
|||
|
||||
SORT_BY_SCOPE_NAME = NO
|
||||
|
||||
# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper type resolution of all parameters of a function it will reject a
|
||||
# match between the prototype and the implementation of a member function even if there is only one candidate or it is obvious which candidate to choose by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen
|
||||
# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to
|
||||
# do proper type resolution of all parameters of a function it will reject a
|
||||
# match between the prototype and the implementation of a member function even
|
||||
# if there is only one candidate or it is obvious which candidate to choose
|
||||
# by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen
|
||||
# will still accept a match between prototype and implementation in such cases.
|
||||
|
||||
STRICT_PROTO_MATCHING = NO
|
||||
|
@ -924,7 +936,13 @@ HTML_FILE_EXTENSION = .html
|
|||
|
||||
# The HTML_HEADER tag can be used to specify a personal HTML header for
|
||||
# each generated HTML page. If it is left blank doxygen will generate a
|
||||
# standard header.
|
||||
# standard header. Note that when using a custom header you are responsible
|
||||
# for the proper inclusion of any scripts and style sheets that doxygen
|
||||
# needs, which is dependent on the configuration options used.
|
||||
# It is adviced to generate a default header using "doxygen -w html
|
||||
# header.html footer.html stylesheet.css YourConfigFile" and then modify
|
||||
# that header. Note that the header is subject to change so you typically
|
||||
# have to redo this when upgrading to a newer version of doxygen or when changing the value of configuration settings such as GENERATE_TREEVIEW!
|
||||
|
||||
HTML_HEADER = ./rsc/header_html.html
|
||||
|
||||
|
@ -943,6 +961,15 @@ HTML_FOOTER = ./rsc/footer_html.html
|
|||
|
||||
HTML_STYLESHEET =
|
||||
|
||||
# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
|
||||
# other source files which should be copied to the HTML output directory. Note
|
||||
# that these files will be copied to the base HTML output directory. Use the
|
||||
# $relpath$ marker in the HTML_HEADER and/or HTML_FOOTER files to load these
|
||||
# files. In the HTML_STYLESHEET file, use the file name only. Also note that
|
||||
# the files will be copied as-is; there are no commands or markers available.
|
||||
|
||||
HTML_EXTRA_FILES =
|
||||
|
||||
# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output.
|
||||
# Doxygen will adjust the colors in the stylesheet and background images
|
||||
# according to this color. Hue is specified as an angle on a colorwheel,
|
||||
|
@ -1145,9 +1172,10 @@ ECLIPSE_DOC_ID = org.doxygen.Project
|
|||
|
||||
DISABLE_INDEX = NO
|
||||
|
||||
# This tag can be used to set the number of enum values (range [0,1..20])
|
||||
# that doxygen will group on one line in the generated HTML documentation.
|
||||
# Note that a value of 0 will completely suppress the enum values from appearing in the overview section.
|
||||
# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values
|
||||
# (range [0,1..20]) that doxygen will group on one line in the generated HTML
|
||||
# documentation. Note that a value of 0 will completely suppress the enum
|
||||
# values from appearing in the overview section.
|
||||
|
||||
ENUM_VALUES_PER_LINE = 4
|
||||
|
||||
|
@ -1206,7 +1234,8 @@ USE_MATHJAX = NO
|
|||
# HTML output directory using the MATHJAX_RELPATH option. The destination
|
||||
# directory should contain the MathJax.js script. For instance, if the mathjax
|
||||
# directory is located at the same level as the HTML output directory, then
|
||||
# MATHJAX_RELPATH should be ../mathjax. The default value points to the mathjax.org site, so you can quickly see the result without installing
|
||||
# MATHJAX_RELPATH should be ../mathjax. The default value points to the
|
||||
# mathjax.org site, so you can quickly see the result without installing
|
||||
# MathJax, but it is strongly recommended to install a local copy of MathJax
|
||||
# before deployment.
|
||||
|
||||
|
@ -1285,6 +1314,13 @@ EXTRA_PACKAGES =
|
|||
|
||||
LATEX_HEADER =
|
||||
|
||||
# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for
|
||||
# the generated latex document. The footer should contain everything after
|
||||
# the last chapter. If it is left blank doxygen will generate a
|
||||
# standard footer. Notice: only use this tag if you know what you are doing!
|
||||
|
||||
LATEX_FOOTER =
|
||||
|
||||
# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
|
||||
# is prepared for conversion to pdf (using ps2pdf). The pdf file will
|
||||
# contain links (just like the HTML output) instead of page references
|
||||
|
@ -1494,7 +1530,7 @@ MACRO_EXPANSION = YES
|
|||
EXPAND_ONLY_PREDEF = YES
|
||||
|
||||
# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
|
||||
# in the INCLUDE_PATH (see below) will be search if a #include is found.
|
||||
# pointed to by INCLUDE_PATH will be searched when a #include is found.
|
||||
|
||||
SEARCH_INCLUDES = YES
|
||||
|
||||
|
@ -1524,7 +1560,8 @@ PREDEFINED = __DOXYGEN__
|
|||
# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
|
||||
# this tag can be used to specify a list of macro names that should be expanded.
|
||||
# The macro definition that is found in the sources will be used.
|
||||
# Use the PREDEFINED tag if you want to use a different macro definition that overrules the definition found in the source code.
|
||||
# Use the PREDEFINED tag if you want to use a different macro definition that
|
||||
# overrules the definition found in the source code.
|
||||
|
||||
EXPAND_AS_DEFINED =
|
||||
|
||||
|
@ -1717,7 +1754,7 @@ GRAPHICAL_HIERARCHY = YES
|
|||
DIRECTORY_GRAPH = NO
|
||||
|
||||
# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
|
||||
# generated by dot. Possible values are png, svg, gif or svg.
|
||||
# generated by dot. Possible values are svg, png, jpg, or gif.
|
||||
# If left blank png will be used.
|
||||
|
||||
DOT_IMAGE_FORMAT = png
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
*** Documentation build procedure ***
|
||||
|
||||
The following software must be installed:
|
||||
- Doxygen 1.7.3 or later.
|
||||
- Doxygen 1.7.4 or later.
|
||||
- Graphviz 2.26.3 or later. The ./bin directory must be specified in the path
|
||||
in order to make Graphviz accessible by Doxygen.
|
||||
|
||||
|
|
|
@ -24,7 +24,8 @@
|
|||
|
||||
<!-- Layout definition for a class page -->
|
||||
<class>
|
||||
<briefdescription visible="yes"/>
|
||||
<briefdescription visible="no"/>
|
||||
<detaileddescription title=""/>
|
||||
<includes visible="$SHOW_INCLUDE_FILES"/>
|
||||
<inheritancegraph visible="$CLASS_GRAPH"/>
|
||||
<collaborationgraph visible="$COLLABORATION_GRAPH"/>
|
||||
|
@ -61,7 +62,6 @@
|
|||
<related title="" subtitle=""/>
|
||||
<membergroups visible="yes"/>
|
||||
</memberdecl>
|
||||
<detaileddescription title=""/>
|
||||
<memberdef>
|
||||
<typedefs title=""/>
|
||||
<enums title=""/>
|
||||
|
@ -78,7 +78,8 @@
|
|||
|
||||
<!-- Layout definition for a namespace page -->
|
||||
<namespace>
|
||||
<briefdescription visible="yes"/>
|
||||
<briefdescription visible="no"/>
|
||||
<detaileddescription title=""/>
|
||||
<memberdecl>
|
||||
<nestednamespaces visible="yes" title=""/>
|
||||
<classes visible="yes" title=""/>
|
||||
|
@ -88,7 +89,6 @@
|
|||
<variables title=""/>
|
||||
<membergroups visible="yes"/>
|
||||
</memberdecl>
|
||||
<detaileddescription title=""/>
|
||||
<memberdef>
|
||||
<typedefs title=""/>
|
||||
<enums title=""/>
|
||||
|
@ -100,7 +100,8 @@
|
|||
|
||||
<!-- Layout definition for a file page -->
|
||||
<file>
|
||||
<briefdescription visible="yes"/>
|
||||
<briefdescription visible="no"/>
|
||||
<detaileddescription title=""/>
|
||||
<includes visible="$SHOW_INCLUDE_FILES"/>
|
||||
<includegraph visible="$INCLUDE_GRAPH"/>
|
||||
<includedbygraph visible="$INCLUDED_BY_GRAPH"/>
|
||||
|
@ -115,7 +116,6 @@
|
|||
<enums title=""/>
|
||||
<membergroups visible="yes"/>
|
||||
</memberdecl>
|
||||
<detaileddescription title=""/>
|
||||
<memberdef>
|
||||
<functions title=""/>
|
||||
<variables title=""/>
|
||||
|
@ -128,8 +128,9 @@
|
|||
|
||||
<!-- Layout definition for a group page -->
|
||||
<group>
|
||||
<briefdescription visible="yes"/>
|
||||
<briefdescription visible="no"/>
|
||||
<groupgraph visible="$GROUP_GRAPHS"/>
|
||||
<detaileddescription title=""/>
|
||||
<memberdecl>
|
||||
<classes visible="yes" title=""/>
|
||||
<namespaces visible="yes" title=""/>
|
||||
|
@ -151,7 +152,6 @@
|
|||
<friends title=""/>
|
||||
<membergroups visible="yes"/>
|
||||
</memberdecl>
|
||||
<detaileddescription title=""/>
|
||||
<memberdef>
|
||||
<pagedocs/>
|
||||
<functions title=""/>
|
||||
|
@ -173,12 +173,12 @@
|
|||
|
||||
<!-- Layout definition for a directory page -->
|
||||
<directory>
|
||||
<briefdescription visible="yes"/>
|
||||
<briefdescription visible="no"/>
|
||||
<directorygraph visible="yes"/>
|
||||
<detaileddescription title=""/>
|
||||
<memberdecl>
|
||||
<dirs visible="yes"/>
|
||||
<files visible="yes"/>
|
||||
</memberdecl>
|
||||
<detaileddescription title=""/>
|
||||
</directory>
|
||||
</doxygenlayout>
|
||||
|
|
|
@ -5,6 +5,7 @@ HALSRC = ${CHIBIOS}/os/hal/src/hal.c \
|
|||
${CHIBIOS}/os/hal/src/can.c \
|
||||
${CHIBIOS}/os/hal/src/gpt.c \
|
||||
${CHIBIOS}/os/hal/src/i2c.c \
|
||||
${CHIBIOS}/os/hal/src/icu.c \
|
||||
${CHIBIOS}/os/hal/src/mac.c \
|
||||
${CHIBIOS}/os/hal/src/pal.c \
|
||||
${CHIBIOS}/os/hal/src/pwm.c \
|
||||
|
|
|
@ -39,6 +39,7 @@
|
|||
#include "can.h"
|
||||
#include "gpt.h"
|
||||
#include "i2c.h"
|
||||
#include "icu.h"
|
||||
#include "mac.h"
|
||||
#include "pwm.h"
|
||||
#include "serial.h"
|
||||
|
|
|
@ -48,40 +48,40 @@
|
|||
/*===========================================================================*/
|
||||
|
||||
/**
|
||||
* @brief GPT1 driver identifier.
|
||||
* @note The driver GPT1 allocates the complex timer TIM1 when enabled.
|
||||
* @brief GPTD1 driver identifier.
|
||||
* @note The driver GPTD1 allocates the complex timer TIM1 when enabled.
|
||||
*/
|
||||
#if STM32_GPT_USE_TIM1 || defined(__DOXYGEN__)
|
||||
GPTDriver GPTD1;
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief GPT2 driver identifier.
|
||||
* @note The driver GPT2 allocates the timer TIM2 when enabled.
|
||||
* @brief GPTD2 driver identifier.
|
||||
* @note The driver GPTD2 allocates the timer TIM2 when enabled.
|
||||
*/
|
||||
#if STM32_GPT_USE_TIM2 || defined(__DOXYGEN__)
|
||||
GPTDriver GPTD2;
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief GPT3 driver identifier.
|
||||
* @note The driver GPT3 allocates the timer TIM3 when enabled.
|
||||
* @brief GPTD3 driver identifier.
|
||||
* @note The driver GPTD3 allocates the timer TIM3 when enabled.
|
||||
*/
|
||||
#if STM32_GPT_USE_TIM3 || defined(__DOXYGEN__)
|
||||
GPTDriver GPTD3;
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief GPT4 driver identifier.
|
||||
* @note The driver GPT4 allocates the timer TIM4 when enabled.
|
||||
* @brief GPTD4 driver identifier.
|
||||
* @note The driver GPTD4 allocates the timer TIM4 when enabled.
|
||||
*/
|
||||
#if STM32_GPT_USE_TIM4 || defined(__DOXYGEN__)
|
||||
GPTDriver GPTD4;
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief GPT5 driver identifier.
|
||||
* @note The driver GPT5 allocates the timer TIM5 when enabled.
|
||||
* @brief GPTD5 driver identifier.
|
||||
* @note The driver GPTD5 allocates the timer TIM5 when enabled.
|
||||
*/
|
||||
#if STM32_GPT_USE_TIM5 || defined(__DOXYGEN__)
|
||||
GPTDriver GPTD5;
|
||||
|
|
|
@ -40,8 +40,8 @@
|
|||
/*===========================================================================*/
|
||||
|
||||
/**
|
||||
* @brief GPT1 driver enable switch.
|
||||
* @details If set to @p TRUE the support for GPT1 is included.
|
||||
* @brief GPTD1 driver enable switch.
|
||||
* @details If set to @p TRUE the support for GPTD1 is included.
|
||||
* @note The default is @p TRUE.
|
||||
*/
|
||||
#if !defined(STM32_GPT_USE_TIM1) || defined(__DOXYGEN__)
|
||||
|
@ -49,8 +49,8 @@
|
|||
#endif
|
||||
|
||||
/**
|
||||
* @brief GPT2 driver enable switch.
|
||||
* @details If set to @p TRUE the support for GPT2 is included.
|
||||
* @brief GPTD2 driver enable switch.
|
||||
* @details If set to @p TRUE the support for GPTD2 is included.
|
||||
* @note The default is @p TRUE.
|
||||
*/
|
||||
#if !defined(STM32_GPT_USE_TIM2) || defined(__DOXYGEN__)
|
||||
|
@ -58,8 +58,8 @@
|
|||
#endif
|
||||
|
||||
/**
|
||||
* @brief GPT3 driver enable switch.
|
||||
* @details If set to @p TRUE the support for GPT3 is included.
|
||||
* @brief GPTD3 driver enable switch.
|
||||
* @details If set to @p TRUE the support for GPTD3 is included.
|
||||
* @note The default is @p TRUE.
|
||||
*/
|
||||
#if !defined(STM32_GPT_USE_TIM3) || defined(__DOXYGEN__)
|
||||
|
@ -67,8 +67,8 @@
|
|||
#endif
|
||||
|
||||
/**
|
||||
* @brief GPT4 driver enable switch.
|
||||
* @details If set to @p TRUE the support for GPT4 is included.
|
||||
* @brief GPTD4 driver enable switch.
|
||||
* @details If set to @p TRUE the support for GPTD4 is included.
|
||||
* @note The default is @p TRUE.
|
||||
*/
|
||||
#if !defined(STM32_GPT_USE_TIM4) || defined(__DOXYGEN__)
|
||||
|
@ -76,8 +76,8 @@
|
|||
#endif
|
||||
|
||||
/**
|
||||
* @brief GPT5 driver enable switch.
|
||||
* @details If set to @p TRUE the support for GPT5 is included.
|
||||
* @brief GPTD5 driver enable switch.
|
||||
* @details If set to @p TRUE the support for GPTD5 is included.
|
||||
* @note The default is @p TRUE.
|
||||
*/
|
||||
#if !defined(STM32_GPT_USE_TIM5) || defined(__DOXYGEN__)
|
||||
|
@ -85,35 +85,35 @@
|
|||
#endif
|
||||
|
||||
/**
|
||||
* @brief GPT1 interrupt priority level setting.
|
||||
* @brief GPTD1 interrupt priority level setting.
|
||||
*/
|
||||
#if !defined(STM32_GPT_TIM1_IRQ_PRIORITY) || defined(__DOXYGEN__)
|
||||
#define STM32_GPT_TIM1_IRQ_PRIORITY 7
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief GPT2 interrupt priority level setting.
|
||||
* @brief GPTD2 interrupt priority level setting.
|
||||
*/
|
||||
#if !defined(STM32_GPT_TIM2_IRQ_PRIORITY) || defined(__DOXYGEN__)
|
||||
#define STM32_GPT_TIM2_IRQ_PRIORITY 7
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief GPT3 interrupt priority level setting.
|
||||
* @brief GPTD3 interrupt priority level setting.
|
||||
*/
|
||||
#if !defined(STM32_GPT_TIM3_IRQ_PRIORITY) || defined(__DOXYGEN__)
|
||||
#define STM32_GPT_TIM3_IRQ_PRIORITY 7
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief GPT4 interrupt priority level setting.
|
||||
* @brief GPTD4 interrupt priority level setting.
|
||||
*/
|
||||
#if !defined(STM32_GPT_TIM4_IRQ_PRIORITY) || defined(__DOXYGEN__)
|
||||
#define STM32_GPT_TIM4_IRQ_PRIORITY 7
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief GPT5 interrupt priority level setting.
|
||||
* @brief GPTD5 interrupt priority level setting.
|
||||
*/
|
||||
#if !defined(STM32_GPT_TIM5_IRQ_PRIORITY) || defined(__DOXYGEN__)
|
||||
#define STM32_GPT_TIM5_IRQ_PRIORITY 7
|
||||
|
@ -206,6 +206,9 @@ struct GPTDriver {
|
|||
* @brief Current configuration data.
|
||||
*/
|
||||
const GPTConfig *config;
|
||||
#if defined(GPT_DRIVER_EXT_FIELDS)
|
||||
GPT_DRIVER_EXT_FIELDS
|
||||
#endif
|
||||
/* End of the mandatory fields.*/
|
||||
/**
|
||||
* @brief Timer base clock.
|
||||
|
|
|
@ -36,13 +36,45 @@
|
|||
/*===========================================================================*/
|
||||
|
||||
/**
|
||||
* @brief ICU1 driver identifier.
|
||||
* @brief ICUD1 driver identifier.
|
||||
* @note The driver ICUD1 allocates the complex timer TIM1 when enabled.
|
||||
*/
|
||||
#if STM32_ICU_USE_TIM1 || defined(__DOXYGEN__)
|
||||
ICUDriver ICUD1;
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief ICUD2 driver identifier.
|
||||
* @note The driver ICUD1 allocates the timer TIM2 when enabled.
|
||||
*/
|
||||
#if STM32_ICU_USE_TIM2 || defined(__DOXYGEN__)
|
||||
ICUDriver ICUD2;
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief ICUD3 driver identifier.
|
||||
* @note The driver ICUD1 allocates the timer TIM3 when enabled.
|
||||
*/
|
||||
#if STM32_ICU_USE_TIM3 || defined(__DOXYGEN__)
|
||||
ICUDriver ICUD3;
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief ICUD4 driver identifier.
|
||||
* @note The driver ICUD4 allocates the timer TIM4 when enabled.
|
||||
*/
|
||||
#if STM32_ICU_USE_TIM4 || defined(__DOXYGEN__)
|
||||
ICUDriver ICUD4;
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief ICUD5 driver identifier.
|
||||
* @note The driver ICUD5 allocates the timer TIM5 when enabled.
|
||||
*/
|
||||
#if STM32_ICU_USE_TIM5 || defined(__DOXYGEN__)
|
||||
ICUDriver ICUD5;
|
||||
#endif
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Driver local variables. */
|
||||
/*===========================================================================*/
|
||||
|
@ -51,29 +83,27 @@ ICUDriver ICUD1;
|
|||
/* Driver local functions. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/**
|
||||
* @brief Shared IRQ handler.
|
||||
*
|
||||
* @param[in] icup pointer to the @p ICUDriver object
|
||||
*/
|
||||
static void icu_lld_serve_interrupt(ICUDriver *icup) {
|
||||
uint16_t sr;
|
||||
|
||||
sr = TIM1->SR & TIM1->DIER;
|
||||
icup->tim->SR = 0;
|
||||
if ((sr & TIM_SR_CC1IF) != 0)
|
||||
icup->config->period_cb(icup);
|
||||
if ((sr & TIM_SR_CC2IF) != 0)
|
||||
icup->config->width_cb(icup);
|
||||
}
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Driver interrupt handlers. */
|
||||
/*===========================================================================*/
|
||||
|
||||
#if STM32_ICU_USE_TIM1
|
||||
/**
|
||||
* @brief TIM1 update interrupt handler.
|
||||
* @note It is assumed that this interrupt is only activated if the callback
|
||||
* pointer is not equal to @p NULL in order to not perform an extra
|
||||
* check in a potentially critical interrupt handler.
|
||||
*
|
||||
* @isr
|
||||
*/
|
||||
CH_IRQ_HANDLER(TIM1_UP_IRQHandler) {
|
||||
|
||||
CH_IRQ_PROLOGUE();
|
||||
|
||||
TIM1->SR = ~TIM_SR_UIF;
|
||||
ICUD1.config->callback(&ICUD1);
|
||||
|
||||
CH_IRQ_EPILOGUE();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief TIM1 compare interrupt handler.
|
||||
* @note It is assumed that the various sources are only activated if the
|
||||
|
@ -83,21 +113,91 @@ CH_IRQ_HANDLER(TIM1_UP_IRQHandler) {
|
|||
* @isr
|
||||
*/
|
||||
CH_IRQ_HANDLER(TIM1_CC_IRQHandler) {
|
||||
uint16_t sr;
|
||||
|
||||
CH_IRQ_PROLOGUE();
|
||||
|
||||
sr = TIM1->SR & TIM1->DIER;
|
||||
TIM1->SR = ~(TIM_SR_CC1IF | TIM_SR_CC2IF | TIM_SR_CC3IF | TIM_SR_CC4IF);
|
||||
if ((sr & TIM_SR_CC1IF) != 0)
|
||||
ICUD1.config->channels[0].callback(&ICUD1);
|
||||
if ((sr & TIM_SR_CC2IF) != 0)
|
||||
ICUD1.config->channels[1].callback(&ICUD1);
|
||||
icu_lld_serve_interrupt(&ICUD1);
|
||||
|
||||
CH_IRQ_EPILOGUE();
|
||||
}
|
||||
#endif /* STM32_ICU_USE_TIM1 */
|
||||
|
||||
#if STM32_ICU_USE_TIM2
|
||||
/**
|
||||
* @brief TIM2 compare interrupt handler.
|
||||
* @note It is assumed that the various sources are only activated if the
|
||||
* associated callback pointer is not equal to @p NULL in order to not
|
||||
* perform an extra check in a potentially critical interrupt handler.
|
||||
*
|
||||
* @isr
|
||||
*/
|
||||
CH_IRQ_HANDLER(TIM2_IRQHandler) {
|
||||
|
||||
CH_IRQ_PROLOGUE();
|
||||
|
||||
icu_lld_serve_interrupt(&ICUD2);
|
||||
|
||||
CH_IRQ_EPILOGUE();
|
||||
}
|
||||
#endif /* STM32_ICU_USE_TIM2 */
|
||||
|
||||
#if STM32_ICU_USE_TIM3
|
||||
/**
|
||||
* @brief TIM3 compare interrupt handler.
|
||||
* @note It is assumed that the various sources are only activated if the
|
||||
* associated callback pointer is not equal to @p NULL in order to not
|
||||
* perform an extra check in a potentially critical interrupt handler.
|
||||
*
|
||||
* @isr
|
||||
*/
|
||||
CH_IRQ_HANDLER(TIM3_IRQHandler) {
|
||||
|
||||
CH_IRQ_PROLOGUE();
|
||||
|
||||
icu_lld_serve_interrupt(&ICUD3);
|
||||
|
||||
CH_IRQ_EPILOGUE();
|
||||
}
|
||||
#endif /* STM32_ICU_USE_TIM3 */
|
||||
|
||||
#if STM32_ICU_USE_TIM4
|
||||
/**
|
||||
* @brief TIM4 compare interrupt handler.
|
||||
* @note It is assumed that the various sources are only activated if the
|
||||
* associated callback pointer is not equal to @p NULL in order to not
|
||||
* perform an extra check in a potentially critical interrupt handler.
|
||||
*
|
||||
* @isr
|
||||
*/
|
||||
CH_IRQ_HANDLER(TIM4_IRQHandler) {
|
||||
|
||||
CH_IRQ_PROLOGUE();
|
||||
|
||||
icu_lld_serve_interrupt(&ICUD4);
|
||||
|
||||
CH_IRQ_EPILOGUE();
|
||||
}
|
||||
#endif /* STM32_ICU_USE_TIM4 */
|
||||
|
||||
#if STM32_ICU_USE_TIM5
|
||||
/**
|
||||
* @brief TIM5 compare interrupt handler.
|
||||
* @note It is assumed that the various sources are only activated if the
|
||||
* associated callback pointer is not equal to @p NULL in order to not
|
||||
* perform an extra check in a potentially critical interrupt handler.
|
||||
*
|
||||
* @isr
|
||||
*/
|
||||
CH_IRQ_HANDLER(TIM5_IRQHandler) {
|
||||
|
||||
CH_IRQ_PROLOGUE();
|
||||
|
||||
icu_lld_serve_interrupt(&ICUD5);
|
||||
|
||||
CH_IRQ_EPILOGUE();
|
||||
}
|
||||
#endif /* STM32_ICU_USE_TIM5 */
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Driver exported functions. */
|
||||
/*===========================================================================*/
|
||||
|
@ -114,6 +214,30 @@ void icu_lld_init(void) {
|
|||
icuObjectInit(&ICUD1);
|
||||
ICUD1.tim = TIM1;
|
||||
#endif
|
||||
|
||||
#if STM32_ICU_USE_TIM2
|
||||
/* Driver initialization.*/
|
||||
icuObjectInit(&ICUD2);
|
||||
ICUD2.tim = TIM2;
|
||||
#endif
|
||||
|
||||
#if STM32_ICU_USE_TIM3
|
||||
/* Driver initialization.*/
|
||||
icuObjectInit(&ICUD3);
|
||||
ICUD3.tim = TIM3;
|
||||
#endif
|
||||
|
||||
#if STM32_ICU_USE_TIM4
|
||||
/* Driver initialization.*/
|
||||
icuObjectInit(&ICUD4);
|
||||
ICUD4.tim = TIM4;
|
||||
#endif
|
||||
|
||||
#if STM32_ICU_USE_TIM5
|
||||
/* Driver initialization.*/
|
||||
icuObjectInit(&ICUD5);
|
||||
ICUD5.tim = TIM5;
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -132,11 +256,46 @@ void icu_lld_start(ICUDriver *icup) {
|
|||
RCC->APB2ENR |= RCC_APB2ENR_TIM1EN;
|
||||
RCC->APB2RSTR = RCC_APB2RSTR_TIM1RST;
|
||||
RCC->APB2RSTR = 0;
|
||||
NVICEnableVector(TIM1_UP_IRQn,
|
||||
CORTEX_PRIORITY_MASK(STM32_ICU_TIM1_IRQ_PRIORITY));
|
||||
NVICEnableVector(TIM1_CC_IRQn,
|
||||
CORTEX_PRIORITY_MASK(STM32_ICU_TIM1_IRQ_PRIORITY));
|
||||
}
|
||||
#endif
|
||||
#if STM32_ICU_USE_TIM2
|
||||
if (&ICUD2 == icup) {
|
||||
RCC->APB1ENR |= RCC_APB1ENR_TIM2EN;
|
||||
RCC->APB1RSTR = RCC_APB1RSTR_TIM2RST;
|
||||
RCC->APB1RSTR = 0;
|
||||
NVICEnableVector(TIM2_IRQn,
|
||||
CORTEX_PRIORITY_MASK(STM32_ICU_TIM2_IRQ_PRIORITY));
|
||||
}
|
||||
#endif
|
||||
#if STM32_ICU_USE_TIM3
|
||||
if (&ICUD3 == icup) {
|
||||
RCC->APB1ENR |= RCC_APB1ENR_TIM3EN;
|
||||
RCC->APB1RSTR = RCC_APB1RSTR_TIM3RST;
|
||||
RCC->APB1RSTR = 0;
|
||||
NVICEnableVector(TIM3_IRQn,
|
||||
CORTEX_PRIORITY_MASK(STM32_ICU_TIM3_IRQ_PRIORITY));
|
||||
}
|
||||
#endif
|
||||
#if STM32_ICU_USE_TIM4
|
||||
if (&ICUD4 == icup) {
|
||||
RCC->APB1ENR |= RCC_APB1ENR_TIM4EN;
|
||||
RCC->APB1RSTR = RCC_APB1RSTR_TIM4RST;
|
||||
RCC->APB1RSTR = 0;
|
||||
NVICEnableVector(TIM4_IRQn,
|
||||
CORTEX_PRIORITY_MASK(STM32_ICU_TIM4_IRQ_PRIORITY));
|
||||
}
|
||||
#endif
|
||||
|
||||
#if STM32_ICU_USE_TIM5
|
||||
if (&ICUD5 == icup) {
|
||||
RCC->APB1ENR |= RCC_APB1ENR_TIM5EN;
|
||||
RCC->APB1RSTR = RCC_APB1RSTR_TIM5RST;
|
||||
RCC->APB1RSTR = 0;
|
||||
NVICEnableVector(TIM5_IRQn,
|
||||
CORTEX_PRIORITY_MASK(STM32_ICU_TIM5_IRQ_PRIORITY));
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -153,7 +312,7 @@ void icu_lld_start(ICUDriver *icup) {
|
|||
/* SMCR_TS = 101, input is TI1FP1.
|
||||
SMCR_SMS = 100, reset on rising edge.*/
|
||||
icup->tim->SMCR = TIM_SMCR_TS_2 | TIM_SMCR_TS_0 |
|
||||
TIM_SMCR_SMS_2.
|
||||
TIM_SMCR_SMS_2;
|
||||
/* The CCER settings depend on the selected trigger mode.
|
||||
ICU_INPUT_ACTIVE_HIGH: Active on rising edge, idle on falling edge.
|
||||
ICU_INPUT_ACTIVE_LOW: Active on falling edge, idle on rising edge.*/
|
||||
|
@ -161,7 +320,7 @@ void icu_lld_start(ICUDriver *icup) {
|
|||
icup->tim->CCER = TIM_CCER_CC1E |
|
||||
TIM_CCER_CC2E | TIM_CCER_CC2P;
|
||||
else
|
||||
icup->tim->CCER = TIM_CCER_CC1E | TIM_CCER_CC1P
|
||||
icup->tim->CCER = TIM_CCER_CC1E | TIM_CCER_CC1P |
|
||||
TIM_CCER_CC2E;
|
||||
}
|
||||
|
||||
|
@ -181,11 +340,35 @@ void icu_lld_stop(ICUDriver *icup) {
|
|||
|
||||
#if STM32_ICU_USE_TIM1
|
||||
if (&ICUD1 == icup) {
|
||||
NVICDisableVector(TIM1_UP_IRQn);
|
||||
NVICDisableVector(TIM1_CC_IRQn);
|
||||
RCC->APB2ENR &= ~RCC_APB2ENR_TIM1EN;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
#if STM32_ICU_USE_TIM2
|
||||
if (&ICUD2 == icup) {
|
||||
NVICDisableVector(TIM2_IRQn);
|
||||
RCC->APB1ENR &= ~RCC_APB1ENR_TIM2EN;
|
||||
}
|
||||
#endif
|
||||
#if STM32_ICU_USE_TIM3
|
||||
if (&ICUD3 == icup) {
|
||||
NVICDisableVector(TIM3_IRQn);
|
||||
RCC->APB1ENR &= ~RCC_APB1ENR_TIM3EN;
|
||||
}
|
||||
#endif
|
||||
#if STM32_ICU_USE_TIM4
|
||||
if (&ICUD4 == icup) {
|
||||
NVICDisableVector(TIM4_IRQn);
|
||||
RCC->APB1ENR &= ~RCC_APB1ENR_TIM4EN;
|
||||
}
|
||||
#endif
|
||||
#if STM32_ICU_USE_TIM5
|
||||
if (&ICUD5 == icup) {
|
||||
NVICDisableVector(TIM5_IRQn);
|
||||
RCC->APB1ENR &= ~RCC_APB1ENR_TIM5EN;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -198,7 +381,10 @@ void icu_lld_stop(ICUDriver *icup) {
|
|||
void icu_lld_enable(ICUDriver *icup) {
|
||||
|
||||
icup->tim->SR = 0; /* Clear pending IRQs (if any). */
|
||||
icup->tim->DIER = TIM_DIER_CC1IE | TIM_DIER_CC2IE;
|
||||
if (icup->config->period_cb != NULL)
|
||||
icup->tim->DIER |= TIM_DIER_CC1IE;
|
||||
if (icup->config->width_cb != NULL)
|
||||
icup->tim->DIER |= TIM_DIER_CC2IE;
|
||||
icup->tim->CR1 = TIM_CR1_URS | TIM_CR1_CEN;
|
||||
}
|
||||
|
||||
|
|
|
@ -48,6 +48,77 @@
|
|||
#define STM32_ICU_USE_TIM1 TRUE
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief ICUD2 driver enable switch.
|
||||
* @details If set to @p TRUE the support for ICUD2 is included.
|
||||
* @note The default is @p TRUE.
|
||||
*/
|
||||
#if !defined(STM32_ICU_USE_TIM2) || defined(__DOXYGEN__)
|
||||
#define STM32_ICU_USE_TIM2 TRUE
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief ICUD3 driver enable switch.
|
||||
* @details If set to @p TRUE the support for ICUD3 is included.
|
||||
* @note The default is @p TRUE.
|
||||
*/
|
||||
#if !defined(STM32_ICU_USE_TIM3) || defined(__DOXYGEN__)
|
||||
#define STM32_ICU_USE_TIM3 TRUE
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief ICUD4 driver enable switch.
|
||||
* @details If set to @p TRUE the support for ICUD4 is included.
|
||||
* @note The default is @p TRUE.
|
||||
*/
|
||||
#if !defined(STM32_ICU_USE_TIM4) || defined(__DOXYGEN__)
|
||||
#define STM32_ICU_USE_TIM4 TRUE
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief ICUD5 driver enable switch.
|
||||
* @details If set to @p TRUE the support for ICUD5 is included.
|
||||
* @note The default is @p TRUE.
|
||||
*/
|
||||
#if !defined(STM32_ICU_USE_TIM5) || defined(__DOXYGEN__)
|
||||
#define STM32_ICU_USE_TIM5 TRUE
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief ICUD1 interrupt priority level setting.
|
||||
*/
|
||||
#if !defined(STM32_ICU_TIM1_IRQ_PRIORITY) || defined(__DOXYGEN__)
|
||||
#define STM32_ICU_TIM1_IRQ_PRIORITY 7
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief ICUD2 interrupt priority level setting.
|
||||
*/
|
||||
#if !defined(STM32_ICU_TIM2_IRQ_PRIORITY) || defined(__DOXYGEN__)
|
||||
#define STM32_ICU_TIM2_IRQ_PRIORITY 7
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief ICUD3 interrupt priority level setting.
|
||||
*/
|
||||
#if !defined(STM32_ICU_TIM3_IRQ_PRIORITY) || defined(__DOXYGEN__)
|
||||
#define STM32_ICU_TIM3_IRQ_PRIORITY 7
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief ICUD4 interrupt priority level setting.
|
||||
*/
|
||||
#if !defined(STM32_ICU_TIM4_IRQ_PRIORITY) || defined(__DOXYGEN__)
|
||||
#define STM32_ICU_TIM4_IRQ_PRIORITY 7
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief ICUD5 interrupt priority level setting.
|
||||
*/
|
||||
#if !defined(STM32_ICU_TIM5_IRQ_PRIORITY) || defined(__DOXYGEN__)
|
||||
#define STM32_ICU_TIM5_IRQ_PRIORITY 7
|
||||
#endif
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Derived constants and error checks. */
|
||||
/*===========================================================================*/
|
||||
|
@ -143,6 +214,9 @@ struct ICUDriver {
|
|||
* @brief Current configuration data.
|
||||
*/
|
||||
const ICUConfig *config;
|
||||
#if defined(ICU_DRIVER_EXT_FIELDS)
|
||||
ICU_DRIVER_EXT_FIELDS
|
||||
#endif
|
||||
/* End of the mandatory fields.*/
|
||||
/**
|
||||
* @brief Pointer to the TIMx registers block.
|
||||
|
@ -209,6 +283,22 @@ struct ICUDriver {
|
|||
extern ICUDriver ICUD1;
|
||||
#endif
|
||||
|
||||
#if STM32_ICU_USE_TIM2 && !defined(__DOXYGEN__)
|
||||
extern ICUDriver ICUD2;
|
||||
#endif
|
||||
|
||||
#if STM32_ICU_USE_TIM3 && !defined(__DOXYGEN__)
|
||||
extern ICUDriver ICUD3;
|
||||
#endif
|
||||
|
||||
#if STM32_ICU_USE_TIM4 && !defined(__DOXYGEN__)
|
||||
extern ICUDriver ICUD4;
|
||||
#endif
|
||||
|
||||
#if STM32_ICU_USE_TIM5 && !defined(__DOXYGEN__)
|
||||
extern ICUDriver ICUD5;
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
@ -217,8 +307,6 @@ extern "C" {
|
|||
void icu_lld_stop(ICUDriver *icup);
|
||||
void icu_lld_enable(ICUDriver *icup);
|
||||
void icu_lld_disable(ICUDriver *icup);
|
||||
icucnt_t icu_lld_get_width(ICUDriver *icup);
|
||||
icucnt_t icu_lld_get_period(ICUDriver *icup);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -3,6 +3,7 @@ PLATFORMSRC = ${CHIBIOS}/os/hal/platforms/STM32/hal_lld.c \
|
|||
${CHIBIOS}/os/hal/platforms/STM32/adc_lld.c \
|
||||
${CHIBIOS}/os/hal/platforms/STM32/can_lld.c \
|
||||
${CHIBIOS}/os/hal/platforms/STM32/gpt_lld.c \
|
||||
${CHIBIOS}/os/hal/platforms/STM32/icu_lld.c \
|
||||
${CHIBIOS}/os/hal/platforms/STM32/pal_lld.c \
|
||||
${CHIBIOS}/os/hal/platforms/STM32/pwm_lld.c \
|
||||
${CHIBIOS}/os/hal/platforms/STM32/serial_lld.c \
|
||||
|
|
|
@ -48,40 +48,40 @@
|
|||
/*===========================================================================*/
|
||||
|
||||
/**
|
||||
* @brief PWM1 driver identifier.
|
||||
* @note The driver PWM1 allocates the complex timer TIM1 when enabled.
|
||||
* @brief PWMD1 driver identifier.
|
||||
* @note The driver PWMD1 allocates the complex timer TIM1 when enabled.
|
||||
*/
|
||||
#if STM32_PWM_USE_TIM1 || defined(__DOXYGEN__)
|
||||
PWMDriver PWMD1;
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief PWM2 driver identifier.
|
||||
* @note The driver PWM2 allocates the timer TIM2 when enabled.
|
||||
* @brief PWMD2 driver identifier.
|
||||
* @note The driver PWMD2 allocates the timer TIM2 when enabled.
|
||||
*/
|
||||
#if STM32_PWM_USE_TIM2 || defined(__DOXYGEN__)
|
||||
PWMDriver PWMD2;
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief PWM3 driver identifier.
|
||||
* @note The driver PWM3 allocates the timer TIM3 when enabled.
|
||||
* @brief PWMD3 driver identifier.
|
||||
* @note The driver PWMD3 allocates the timer TIM3 when enabled.
|
||||
*/
|
||||
#if STM32_PWM_USE_TIM3 || defined(__DOXYGEN__)
|
||||
PWMDriver PWMD3;
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief PWM4 driver identifier.
|
||||
* @note The driver PWM4 allocates the timer TIM4 when enabled.
|
||||
* @brief PWMD4 driver identifier.
|
||||
* @note The driver PWMD4 allocates the timer TIM4 when enabled.
|
||||
*/
|
||||
#if STM32_PWM_USE_TIM4 || defined(__DOXYGEN__)
|
||||
PWMDriver PWMD4;
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief PWM5 driver identifier.
|
||||
* @note The driver PWM5 allocates the timer TIM5 when enabled.
|
||||
* @brief PWMD5 driver identifier.
|
||||
* @note The driver PWMD5 allocates the timer TIM5 when enabled.
|
||||
*/
|
||||
#if STM32_PWM_USE_TIM5 || defined(__DOXYGEN__)
|
||||
PWMDriver PWMD5;
|
||||
|
|
|
@ -45,8 +45,8 @@
|
|||
/*===========================================================================*/
|
||||
|
||||
/**
|
||||
* @brief PWM1 driver enable switch.
|
||||
* @details If set to @p TRUE the support for PWM1 is included.
|
||||
* @brief PWMD1 driver enable switch.
|
||||
* @details If set to @p TRUE the support for PWMD1 is included.
|
||||
* @note The default is @p TRUE.
|
||||
*/
|
||||
#if !defined(STM32_PWM_USE_TIM1) || defined(__DOXYGEN__)
|
||||
|
@ -54,8 +54,8 @@
|
|||
#endif
|
||||
|
||||
/**
|
||||
* @brief PWM2 driver enable switch.
|
||||
* @details If set to @p TRUE the support for PWM2 is included.
|
||||
* @brief PWMD2 driver enable switch.
|
||||
* @details If set to @p TRUE the support for PWMD2 is included.
|
||||
* @note The default is @p TRUE.
|
||||
*/
|
||||
#if !defined(STM32_PWM_USE_TIM2) || defined(__DOXYGEN__)
|
||||
|
@ -63,8 +63,8 @@
|
|||
#endif
|
||||
|
||||
/**
|
||||
* @brief PWM3 driver enable switch.
|
||||
* @details If set to @p TRUE the support for PWM3 is included.
|
||||
* @brief PWMD3 driver enable switch.
|
||||
* @details If set to @p TRUE the support for PWMD3 is included.
|
||||
* @note The default is @p TRUE.
|
||||
*/
|
||||
#if !defined(STM32_PWM_USE_TIM3) || defined(__DOXYGEN__)
|
||||
|
@ -72,8 +72,8 @@
|
|||
#endif
|
||||
|
||||
/**
|
||||
* @brief PWM4 driver enable switch.
|
||||
* @details If set to @p TRUE the support for PWM4 is included.
|
||||
* @brief PWMD4 driver enable switch.
|
||||
* @details If set to @p TRUE the support for PWMD4 is included.
|
||||
* @note The default is @p TRUE.
|
||||
*/
|
||||
#if !defined(STM32_PWM_USE_TIM4) || defined(__DOXYGEN__)
|
||||
|
@ -81,8 +81,8 @@
|
|||
#endif
|
||||
|
||||
/**
|
||||
* @brief PWM5 driver enable switch.
|
||||
* @details If set to @p TRUE the support for PWM5 is included.
|
||||
* @brief PWMD5 driver enable switch.
|
||||
* @details If set to @p TRUE the support for PWMD5 is included.
|
||||
* @note The default is @p TRUE.
|
||||
*/
|
||||
#if !defined(STM32_PWM_USE_TIM5) || defined(__DOXYGEN__)
|
||||
|
@ -90,35 +90,35 @@
|
|||
#endif
|
||||
|
||||
/**
|
||||
* @brief PWM1 interrupt priority level setting.
|
||||
* @brief PWMD1 interrupt priority level setting.
|
||||
*/
|
||||
#if !defined(STM32_PWM_TIM1_IRQ_PRIORITY) || defined(__DOXYGEN__)
|
||||
#define STM32_PWM_TIM1_IRQ_PRIORITY 7
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief PWM2 interrupt priority level setting.
|
||||
* @brief PWMD2 interrupt priority level setting.
|
||||
*/
|
||||
#if !defined(STM32_PWM_TIM2_IRQ_PRIORITY) || defined(__DOXYGEN__)
|
||||
#define STM32_PWM_TIM2_IRQ_PRIORITY 7
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief PWM3 interrupt priority level setting.
|
||||
* @brief PWMD3 interrupt priority level setting.
|
||||
*/
|
||||
#if !defined(STM32_PWM_TIM3_IRQ_PRIORITY) || defined(__DOXYGEN__)
|
||||
#define STM32_PWM_TIM3_IRQ_PRIORITY 7
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief PWM4 interrupt priority level setting.
|
||||
* @brief PWMD4 interrupt priority level setting.
|
||||
*/
|
||||
#if !defined(STM32_PWM_TIM4_IRQ_PRIORITY) || defined(__DOXYGEN__)
|
||||
#define STM32_PWM_TIM4_IRQ_PRIORITY 7
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief PWM5 interrupt priority level setting.
|
||||
* @brief PWMD5 interrupt priority level setting.
|
||||
*/
|
||||
#if !defined(STM32_PWM_TIM5_IRQ_PRIORITY) || defined(__DOXYGEN__)
|
||||
#define STM32_PWM_TIM5_IRQ_PRIORITY 7
|
||||
|
|
|
@ -290,6 +290,9 @@ struct USBDriver {
|
|||
* @brief Current USB device configuration.
|
||||
*/
|
||||
uint8_t configuration;
|
||||
#if defined(USB_DRIVER_EXT_FIELDS)
|
||||
USB_DRIVER_EXT_FIELDS
|
||||
#endif
|
||||
/* End of the mandatory fields.*/
|
||||
/**
|
||||
* @brief Pointer to the next address in the packet memory.
|
||||
|
|
|
@ -100,6 +100,9 @@ struct GPTDriver {
|
|||
* @brief Current configuration data.
|
||||
*/
|
||||
const GPTConfig *config;
|
||||
#if defined(GPT_DRIVER_EXT_FIELDS)
|
||||
GPT_DRIVER_EXT_FIELDS
|
||||
#endif
|
||||
/* End of the mandatory fields.*/
|
||||
};
|
||||
|
||||
|
|
|
@ -104,6 +104,9 @@ struct ICUDriver {
|
|||
* @brief Current configuration data.
|
||||
*/
|
||||
const ICUConfig *config;
|
||||
#if defined(ICU_DRIVER_EXT_FIELDS)
|
||||
ICU_DRIVER_EXT_FIELDS
|
||||
#endif
|
||||
/* End of the mandatory fields.*/
|
||||
};
|
||||
|
||||
|
|
|
@ -212,6 +212,9 @@ struct USBDriver {
|
|||
* @brief Current USB device configuration.
|
||||
*/
|
||||
uint8_t configuration;
|
||||
#if defined(USB_DRIVER_EXT_FIELDS)
|
||||
USB_DRIVER_EXT_FIELDS
|
||||
#endif
|
||||
/* End of the mandatory fields.*/
|
||||
};
|
||||
|
||||
|
|
|
@ -151,7 +151,7 @@ extern "C" {
|
|||
#endif
|
||||
#if CH_DBG_ENABLE_TRACE || defined(__DOXYGEN__)
|
||||
extern TraceBuffer trace_buffer;
|
||||
void trace_init(void);
|
||||
void _trace_init(void);
|
||||
void chDbgTrace(Thread *otp);
|
||||
#endif
|
||||
#if CH_DBG_ENABLE_ASSERTS || CH_DBG_ENABLE_CHECKS || CH_DBG_ENABLE_STACK_CHECK
|
||||
|
|
|
@ -75,7 +75,7 @@ struct memory_heap {
|
|||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
void heap_init(void);
|
||||
void _heap_init(void);
|
||||
void chHeapInit(MemoryHeap *heapp, void *buf, size_t size);
|
||||
void *chHeapAlloc(MemoryHeap *heapp, size_t size);
|
||||
void chHeapFree(void *p);
|
||||
|
|
|
@ -67,7 +67,7 @@ typedef void *(*memgetfunc_t)(size_t size);
|
|||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
void core_init(void);
|
||||
void _core_init(void);
|
||||
void *chCoreAlloc(size_t size);
|
||||
void *chCoreAllocI(size_t size);
|
||||
size_t chCoreStatus(void);
|
||||
|
|
|
@ -127,7 +127,7 @@ register Thread *currp asm(CH_CURRP_REGISTER_CACHE);
|
|||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
void scheduler_init(void);
|
||||
void _scheduler_init(void);
|
||||
#if !defined(PORT_OPTIMIZED_READYI)
|
||||
Thread *chSchReadyI(Thread *tp);
|
||||
#endif
|
||||
|
|
|
@ -121,7 +121,7 @@ extern VTList vtlist;
|
|||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
void vt_init(void);
|
||||
void _vt_init(void);
|
||||
void chVTSetI(VirtualTimer *vtp, systime_t time, vtfunc_t vtfunc, void *par);
|
||||
void chVTResetI(VirtualTimer *vtp);
|
||||
bool_t chTimeIsWithin(systime_t start, systime_t end);
|
||||
|
|
|
@ -46,7 +46,7 @@ TraceBuffer trace_buffer;
|
|||
* @brief Trace circular buffer subsystem initialization.
|
||||
* @note Internal use only.
|
||||
*/
|
||||
void trace_init(void) {
|
||||
void _trace_init(void) {
|
||||
|
||||
trace_buffer.tb_size = TRACE_BUFFER_SIZE;
|
||||
trace_buffer.tb_ptr = &trace_buffer.tb_buffer[0];
|
||||
|
|
|
@ -65,7 +65,7 @@ static MemoryHeap default_heap;
|
|||
*
|
||||
* @notapi
|
||||
*/
|
||||
void heap_init(void) {
|
||||
void _heap_init(void) {
|
||||
default_heap.h_provider = chCoreAlloc;
|
||||
default_heap.h_free.h.u.next = (union heap_header *)NULL;
|
||||
default_heap.h_free.h.size = 0;
|
||||
|
|
|
@ -56,7 +56,7 @@ static uint8_t *endmem;
|
|||
*
|
||||
* @notapi
|
||||
*/
|
||||
void core_init(void) {
|
||||
void _core_init(void) {
|
||||
#if CH_MEMCORE_SIZE == 0
|
||||
extern uint8_t __heap_base__[];
|
||||
extern uint8_t __heap_end__[];
|
||||
|
|
|
@ -45,7 +45,7 @@ ReadyList rlist;
|
|||
*
|
||||
* @notapi
|
||||
*/
|
||||
void scheduler_init(void) {
|
||||
void _scheduler_init(void) {
|
||||
|
||||
queue_init(&rlist.r_queue);
|
||||
rlist.r_prio = NOPRIO;
|
||||
|
|
|
@ -76,16 +76,16 @@ void chSysInit(void) {
|
|||
static Thread mainthread;
|
||||
|
||||
port_init();
|
||||
scheduler_init();
|
||||
vt_init();
|
||||
_scheduler_init();
|
||||
_vt_init();
|
||||
#if CH_USE_MEMCORE
|
||||
core_init();
|
||||
_core_init();
|
||||
#endif
|
||||
#if CH_USE_HEAP
|
||||
heap_init();
|
||||
_heap_init();
|
||||
#endif
|
||||
#if CH_DBG_ENABLE_TRACE
|
||||
trace_init();
|
||||
_trace_init();
|
||||
#endif
|
||||
|
||||
/* Now this instructions flow becomes the main thread.*/
|
||||
|
|
|
@ -40,7 +40,7 @@ VTList vtlist;
|
|||
*
|
||||
* @notapi
|
||||
*/
|
||||
void vt_init(void) {
|
||||
void _vt_init(void) {
|
||||
|
||||
vtlist.vt_next = vtlist.vt_prev = (void *)&vtlist;
|
||||
vtlist.vt_time = (systime_t)-1;
|
||||
|
|
|
@ -95,10 +95,10 @@
|
|||
as default.
|
||||
- CHANGE: Removed all the prefixes from the structure/union field names
|
||||
in the HAL subsystem.
|
||||
- CHANGE: Updated the documentation to use Doxygen 1.7.3 which produces a much
|
||||
- CHANGE: Updated the documentation to use Doxygen 1.7.4 which produces a much
|
||||
more readable output. Also modified the documentation layout to put functions
|
||||
and variables ahead of everything else in the group pages.
|
||||
Doxygen version below 1.7.3 cannot be used anymore because differences in
|
||||
Doxygen version below 1.7.4 cannot be used anymore because differences in
|
||||
templates. Note that now there are two Doxygen projects, one for generating
|
||||
the CHM file the other for plain HTML.
|
||||
|
||||
|
|
|
@ -69,6 +69,13 @@
|
|||
#define HAL_USE_I2C FALSE
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Enables the I2C subsystem.
|
||||
*/
|
||||
#if !defined(HAL_USE_ICU) || defined(__DOXYGEN__)
|
||||
#define HAL_USE_ICU TRUE
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Enables the MAC subsystem.
|
||||
*/
|
||||
|
|
|
@ -74,6 +74,20 @@
|
|||
#define STM32_GPT_TIM4_IRQ_PRIORITY 7
|
||||
#define STM32_GPT_TIM5_IRQ_PRIORITY 7
|
||||
|
||||
/*
|
||||
* ICU driver system settings.
|
||||
*/
|
||||
#define STM32_ICU_USE_TIM1 FALSE
|
||||
#define STM32_ICU_USE_TIM2 TRUE
|
||||
#define STM32_ICU_USE_TIM3 FALSE
|
||||
#define STM32_ICU_USE_TIM4 FALSE
|
||||
#define STM32_ICU_USE_TIM5 FALSE
|
||||
#define STM32_ICU_TIM1_IRQ_PRIORITY 7
|
||||
#define STM32_ICU_TIM2_IRQ_PRIORITY 7
|
||||
#define STM32_ICU_TIM3_IRQ_PRIORITY 7
|
||||
#define STM32_ICU_TIM4_IRQ_PRIORITY 7
|
||||
#define STM32_ICU_TIM5_IRQ_PRIORITY 7
|
||||
|
||||
/*
|
||||
* PWM driver system settings.
|
||||
*/
|
||||
|
|
4
todo.txt
4
todo.txt
|
@ -18,7 +18,7 @@ Within 2.3.x (hopefully)
|
|||
* Swap TIME_IMMEDIATE and TIME_INFINITE values.
|
||||
* Improvements to the message passing mechanism in order to allow "delayed,
|
||||
out of order, responses".
|
||||
* New device driver models: GPT.
|
||||
* New device driver models: GPT, ICU.
|
||||
X GPT implementation and long duration "IRQ storm" stress test applications
|
||||
for all the supported critical platforms.
|
||||
- Add UART4 support to the STM32 UART driver (CL line only, HD has a nasty
|
||||
|
@ -40,7 +40,7 @@ X File System infrastructure.
|
|||
X Transactional flash file system implementation.
|
||||
X I2C device driver class support and at least one implementation.
|
||||
X Shared DMA channels support in the STM32/STM8L HALs.
|
||||
X RAM ISR vectors support in the STM32 HAL.
|
||||
? RAM ISR vectors support in the STM32 HAL.
|
||||
- New device driver models: Clock, Systick, RTC, WDG, DAC, Power Monitor.
|
||||
|
||||
Later but within 2.x.x
|
||||
|
|
Loading…
Reference in New Issue