git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@2850 35acf78f-673a-0410-8e92-d51de3d6d3f4

master
gdisirio 2011-03-29 14:51:08 +00:00
parent 94d34da7f1
commit f5ae255230
32 changed files with 525 additions and 138 deletions

View File

@ -1,4 +1,4 @@
# Doxyfile 1.7.3 # Doxyfile 1.7.4
# This file describes the settings to be used by the documentation system # This file describes the settings to be used by the documentation system
# doxygen (www.doxygen.org) for a project. # doxygen (www.doxygen.org) for a project.
@ -33,7 +33,9 @@ PROJECT_NAME = ChibiOS/RT
PROJECT_NUMBER = 2.3.1 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 = PROJECT_BRIEF =
@ -304,6 +306,13 @@ DISTRIBUTE_GROUP_DOC = NO
SUBGROUPING = YES 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 # 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 # 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 # 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 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 # If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to
# 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 # 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. # will still accept a match between prototype and implementation in such cases.
STRICT_PROTO_MATCHING = NO 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 # 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 # 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 HTML_HEADER = ./rsc/header_chm.html
@ -943,6 +961,15 @@ HTML_FOOTER = ./rsc/footer_chm.html
HTML_STYLESHEET = 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. # The HTML_COLORSTYLE_HUE tag controls the color of the HTML output.
# Doxygen will adjust the colors in the stylesheet and background images # Doxygen will adjust the colors in the stylesheet and background images
# according to this color. Hue is specified as an angle on a colorwheel, # 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 DISABLE_INDEX = NO
# This tag can be used to set the number of enum values (range [0,1..20]) # The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values
# that doxygen will group on one line in the generated HTML documentation. # (range [0,1..20]) that doxygen will group on one line in the generated HTML
# Note that a value of 0 will completely suppress the enum values from appearing in the overview section. # documentation. Note that a value of 0 will completely suppress the enum
# values from appearing in the overview section.
ENUM_VALUES_PER_LINE = 4 ENUM_VALUES_PER_LINE = 4
@ -1206,7 +1234,8 @@ USE_MATHJAX = NO
# HTML output directory using the MATHJAX_RELPATH option. The destination # HTML output directory using the MATHJAX_RELPATH option. The destination
# directory should contain the MathJax.js script. For instance, if the mathjax # 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 # 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 # MathJax, but it is strongly recommended to install a local copy of MathJax
# before deployment. # before deployment.
@ -1285,6 +1314,13 @@ EXTRA_PACKAGES =
LATEX_HEADER = 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 # 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 # is prepared for conversion to pdf (using ps2pdf). The pdf file will
# contain links (just like the HTML output) instead of page references # contain links (just like the HTML output) instead of page references
@ -1494,7 +1530,7 @@ MACRO_EXPANSION = YES
EXPAND_ONLY_PREDEF = YES EXPAND_ONLY_PREDEF = YES
# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files # 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 SEARCH_INCLUDES = YES
@ -1524,7 +1560,8 @@ PREDEFINED = __DOXYGEN__
# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then # 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. # 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. # 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 = EXPAND_AS_DEFINED =
@ -1717,7 +1754,7 @@ GRAPHICAL_HIERARCHY = YES
DIRECTORY_GRAPH = NO DIRECTORY_GRAPH = NO
# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images # 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. # If left blank png will be used.
DOT_IMAGE_FORMAT = png DOT_IMAGE_FORMAT = png

View File

@ -1,4 +1,4 @@
# Doxyfile 1.7.3 # Doxyfile 1.7.4
# This file describes the settings to be used by the documentation system # This file describes the settings to be used by the documentation system
# doxygen (www.doxygen.org) for a project. # doxygen (www.doxygen.org) for a project.
@ -33,7 +33,9 @@ PROJECT_NAME = ChibiOS/RT
PROJECT_NUMBER = 2.3.1 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 = PROJECT_BRIEF =
@ -304,6 +306,13 @@ DISTRIBUTE_GROUP_DOC = NO
SUBGROUPING = YES 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 # 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 # 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 # 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 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 # If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to
# 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 # 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. # will still accept a match between prototype and implementation in such cases.
STRICT_PROTO_MATCHING = NO 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 # 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 # 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 HTML_HEADER = ./rsc/header_html.html
@ -943,6 +961,15 @@ HTML_FOOTER = ./rsc/footer_html.html
HTML_STYLESHEET = 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. # The HTML_COLORSTYLE_HUE tag controls the color of the HTML output.
# Doxygen will adjust the colors in the stylesheet and background images # Doxygen will adjust the colors in the stylesheet and background images
# according to this color. Hue is specified as an angle on a colorwheel, # 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 DISABLE_INDEX = NO
# This tag can be used to set the number of enum values (range [0,1..20]) # The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values
# that doxygen will group on one line in the generated HTML documentation. # (range [0,1..20]) that doxygen will group on one line in the generated HTML
# Note that a value of 0 will completely suppress the enum values from appearing in the overview section. # documentation. Note that a value of 0 will completely suppress the enum
# values from appearing in the overview section.
ENUM_VALUES_PER_LINE = 4 ENUM_VALUES_PER_LINE = 4
@ -1206,7 +1234,8 @@ USE_MATHJAX = NO
# HTML output directory using the MATHJAX_RELPATH option. The destination # HTML output directory using the MATHJAX_RELPATH option. The destination
# directory should contain the MathJax.js script. For instance, if the mathjax # 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 # 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 # MathJax, but it is strongly recommended to install a local copy of MathJax
# before deployment. # before deployment.
@ -1285,6 +1314,13 @@ EXTRA_PACKAGES =
LATEX_HEADER = 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 # 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 # is prepared for conversion to pdf (using ps2pdf). The pdf file will
# contain links (just like the HTML output) instead of page references # contain links (just like the HTML output) instead of page references
@ -1494,7 +1530,7 @@ MACRO_EXPANSION = YES
EXPAND_ONLY_PREDEF = YES EXPAND_ONLY_PREDEF = YES
# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files # 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 SEARCH_INCLUDES = YES
@ -1524,7 +1560,8 @@ PREDEFINED = __DOXYGEN__
# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then # 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. # 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. # 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 = EXPAND_AS_DEFINED =
@ -1717,7 +1754,7 @@ GRAPHICAL_HIERARCHY = YES
DIRECTORY_GRAPH = NO DIRECTORY_GRAPH = NO
# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images # 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. # If left blank png will be used.
DOT_IMAGE_FORMAT = png DOT_IMAGE_FORMAT = png

View File

@ -1,7 +1,7 @@
*** Documentation build procedure *** *** Documentation build procedure ***
The following software must be installed: 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 - Graphviz 2.26.3 or later. The ./bin directory must be specified in the path
in order to make Graphviz accessible by Doxygen. in order to make Graphviz accessible by Doxygen.

View File

@ -24,7 +24,8 @@
<!-- Layout definition for a class page --> <!-- Layout definition for a class page -->
<class> <class>
<briefdescription visible="yes"/> <briefdescription visible="no"/>
<detaileddescription title=""/>
<includes visible="$SHOW_INCLUDE_FILES"/> <includes visible="$SHOW_INCLUDE_FILES"/>
<inheritancegraph visible="$CLASS_GRAPH"/> <inheritancegraph visible="$CLASS_GRAPH"/>
<collaborationgraph visible="$COLLABORATION_GRAPH"/> <collaborationgraph visible="$COLLABORATION_GRAPH"/>
@ -61,7 +62,6 @@
<related title="" subtitle=""/> <related title="" subtitle=""/>
<membergroups visible="yes"/> <membergroups visible="yes"/>
</memberdecl> </memberdecl>
<detaileddescription title=""/>
<memberdef> <memberdef>
<typedefs title=""/> <typedefs title=""/>
<enums title=""/> <enums title=""/>
@ -78,7 +78,8 @@
<!-- Layout definition for a namespace page --> <!-- Layout definition for a namespace page -->
<namespace> <namespace>
<briefdescription visible="yes"/> <briefdescription visible="no"/>
<detaileddescription title=""/>
<memberdecl> <memberdecl>
<nestednamespaces visible="yes" title=""/> <nestednamespaces visible="yes" title=""/>
<classes visible="yes" title=""/> <classes visible="yes" title=""/>
@ -88,7 +89,6 @@
<variables title=""/> <variables title=""/>
<membergroups visible="yes"/> <membergroups visible="yes"/>
</memberdecl> </memberdecl>
<detaileddescription title=""/>
<memberdef> <memberdef>
<typedefs title=""/> <typedefs title=""/>
<enums title=""/> <enums title=""/>
@ -100,7 +100,8 @@
<!-- Layout definition for a file page --> <!-- Layout definition for a file page -->
<file> <file>
<briefdescription visible="yes"/> <briefdescription visible="no"/>
<detaileddescription title=""/>
<includes visible="$SHOW_INCLUDE_FILES"/> <includes visible="$SHOW_INCLUDE_FILES"/>
<includegraph visible="$INCLUDE_GRAPH"/> <includegraph visible="$INCLUDE_GRAPH"/>
<includedbygraph visible="$INCLUDED_BY_GRAPH"/> <includedbygraph visible="$INCLUDED_BY_GRAPH"/>
@ -115,7 +116,6 @@
<enums title=""/> <enums title=""/>
<membergroups visible="yes"/> <membergroups visible="yes"/>
</memberdecl> </memberdecl>
<detaileddescription title=""/>
<memberdef> <memberdef>
<functions title=""/> <functions title=""/>
<variables title=""/> <variables title=""/>
@ -128,8 +128,9 @@
<!-- Layout definition for a group page --> <!-- Layout definition for a group page -->
<group> <group>
<briefdescription visible="yes"/> <briefdescription visible="no"/>
<groupgraph visible="$GROUP_GRAPHS"/> <groupgraph visible="$GROUP_GRAPHS"/>
<detaileddescription title=""/>
<memberdecl> <memberdecl>
<classes visible="yes" title=""/> <classes visible="yes" title=""/>
<namespaces visible="yes" title=""/> <namespaces visible="yes" title=""/>
@ -151,7 +152,6 @@
<friends title=""/> <friends title=""/>
<membergroups visible="yes"/> <membergroups visible="yes"/>
</memberdecl> </memberdecl>
<detaileddescription title=""/>
<memberdef> <memberdef>
<pagedocs/> <pagedocs/>
<functions title=""/> <functions title=""/>
@ -173,12 +173,12 @@
<!-- Layout definition for a directory page --> <!-- Layout definition for a directory page -->
<directory> <directory>
<briefdescription visible="yes"/> <briefdescription visible="no"/>
<directorygraph visible="yes"/> <directorygraph visible="yes"/>
<detaileddescription title=""/>
<memberdecl> <memberdecl>
<dirs visible="yes"/> <dirs visible="yes"/>
<files visible="yes"/> <files visible="yes"/>
</memberdecl> </memberdecl>
<detaileddescription title=""/>
</directory> </directory>
</doxygenlayout> </doxygenlayout>

View File

@ -5,6 +5,7 @@ HALSRC = ${CHIBIOS}/os/hal/src/hal.c \
${CHIBIOS}/os/hal/src/can.c \ ${CHIBIOS}/os/hal/src/can.c \
${CHIBIOS}/os/hal/src/gpt.c \ ${CHIBIOS}/os/hal/src/gpt.c \
${CHIBIOS}/os/hal/src/i2c.c \ ${CHIBIOS}/os/hal/src/i2c.c \
${CHIBIOS}/os/hal/src/icu.c \
${CHIBIOS}/os/hal/src/mac.c \ ${CHIBIOS}/os/hal/src/mac.c \
${CHIBIOS}/os/hal/src/pal.c \ ${CHIBIOS}/os/hal/src/pal.c \
${CHIBIOS}/os/hal/src/pwm.c \ ${CHIBIOS}/os/hal/src/pwm.c \

View File

@ -39,6 +39,7 @@
#include "can.h" #include "can.h"
#include "gpt.h" #include "gpt.h"
#include "i2c.h" #include "i2c.h"
#include "icu.h"
#include "mac.h" #include "mac.h"
#include "pwm.h" #include "pwm.h"
#include "serial.h" #include "serial.h"

View File

@ -48,40 +48,40 @@
/*===========================================================================*/ /*===========================================================================*/
/** /**
* @brief GPT1 driver identifier. * @brief GPTD1 driver identifier.
* @note The driver GPT1 allocates the complex timer TIM1 when enabled. * @note The driver GPTD1 allocates the complex timer TIM1 when enabled.
*/ */
#if STM32_GPT_USE_TIM1 || defined(__DOXYGEN__) #if STM32_GPT_USE_TIM1 || defined(__DOXYGEN__)
GPTDriver GPTD1; GPTDriver GPTD1;
#endif #endif
/** /**
* @brief GPT2 driver identifier. * @brief GPTD2 driver identifier.
* @note The driver GPT2 allocates the timer TIM2 when enabled. * @note The driver GPTD2 allocates the timer TIM2 when enabled.
*/ */
#if STM32_GPT_USE_TIM2 || defined(__DOXYGEN__) #if STM32_GPT_USE_TIM2 || defined(__DOXYGEN__)
GPTDriver GPTD2; GPTDriver GPTD2;
#endif #endif
/** /**
* @brief GPT3 driver identifier. * @brief GPTD3 driver identifier.
* @note The driver GPT3 allocates the timer TIM3 when enabled. * @note The driver GPTD3 allocates the timer TIM3 when enabled.
*/ */
#if STM32_GPT_USE_TIM3 || defined(__DOXYGEN__) #if STM32_GPT_USE_TIM3 || defined(__DOXYGEN__)
GPTDriver GPTD3; GPTDriver GPTD3;
#endif #endif
/** /**
* @brief GPT4 driver identifier. * @brief GPTD4 driver identifier.
* @note The driver GPT4 allocates the timer TIM4 when enabled. * @note The driver GPTD4 allocates the timer TIM4 when enabled.
*/ */
#if STM32_GPT_USE_TIM4 || defined(__DOXYGEN__) #if STM32_GPT_USE_TIM4 || defined(__DOXYGEN__)
GPTDriver GPTD4; GPTDriver GPTD4;
#endif #endif
/** /**
* @brief GPT5 driver identifier. * @brief GPTD5 driver identifier.
* @note The driver GPT5 allocates the timer TIM5 when enabled. * @note The driver GPTD5 allocates the timer TIM5 when enabled.
*/ */
#if STM32_GPT_USE_TIM5 || defined(__DOXYGEN__) #if STM32_GPT_USE_TIM5 || defined(__DOXYGEN__)
GPTDriver GPTD5; GPTDriver GPTD5;

View File

@ -40,8 +40,8 @@
/*===========================================================================*/ /*===========================================================================*/
/** /**
* @brief GPT1 driver enable switch. * @brief GPTD1 driver enable switch.
* @details If set to @p TRUE the support for GPT1 is included. * @details If set to @p TRUE the support for GPTD1 is included.
* @note The default is @p TRUE. * @note The default is @p TRUE.
*/ */
#if !defined(STM32_GPT_USE_TIM1) || defined(__DOXYGEN__) #if !defined(STM32_GPT_USE_TIM1) || defined(__DOXYGEN__)
@ -49,8 +49,8 @@
#endif #endif
/** /**
* @brief GPT2 driver enable switch. * @brief GPTD2 driver enable switch.
* @details If set to @p TRUE the support for GPT2 is included. * @details If set to @p TRUE the support for GPTD2 is included.
* @note The default is @p TRUE. * @note The default is @p TRUE.
*/ */
#if !defined(STM32_GPT_USE_TIM2) || defined(__DOXYGEN__) #if !defined(STM32_GPT_USE_TIM2) || defined(__DOXYGEN__)
@ -58,8 +58,8 @@
#endif #endif
/** /**
* @brief GPT3 driver enable switch. * @brief GPTD3 driver enable switch.
* @details If set to @p TRUE the support for GPT3 is included. * @details If set to @p TRUE the support for GPTD3 is included.
* @note The default is @p TRUE. * @note The default is @p TRUE.
*/ */
#if !defined(STM32_GPT_USE_TIM3) || defined(__DOXYGEN__) #if !defined(STM32_GPT_USE_TIM3) || defined(__DOXYGEN__)
@ -67,8 +67,8 @@
#endif #endif
/** /**
* @brief GPT4 driver enable switch. * @brief GPTD4 driver enable switch.
* @details If set to @p TRUE the support for GPT4 is included. * @details If set to @p TRUE the support for GPTD4 is included.
* @note The default is @p TRUE. * @note The default is @p TRUE.
*/ */
#if !defined(STM32_GPT_USE_TIM4) || defined(__DOXYGEN__) #if !defined(STM32_GPT_USE_TIM4) || defined(__DOXYGEN__)
@ -76,8 +76,8 @@
#endif #endif
/** /**
* @brief GPT5 driver enable switch. * @brief GPTD5 driver enable switch.
* @details If set to @p TRUE the support for GPT5 is included. * @details If set to @p TRUE the support for GPTD5 is included.
* @note The default is @p TRUE. * @note The default is @p TRUE.
*/ */
#if !defined(STM32_GPT_USE_TIM5) || defined(__DOXYGEN__) #if !defined(STM32_GPT_USE_TIM5) || defined(__DOXYGEN__)
@ -85,35 +85,35 @@
#endif #endif
/** /**
* @brief GPT1 interrupt priority level setting. * @brief GPTD1 interrupt priority level setting.
*/ */
#if !defined(STM32_GPT_TIM1_IRQ_PRIORITY) || defined(__DOXYGEN__) #if !defined(STM32_GPT_TIM1_IRQ_PRIORITY) || defined(__DOXYGEN__)
#define STM32_GPT_TIM1_IRQ_PRIORITY 7 #define STM32_GPT_TIM1_IRQ_PRIORITY 7
#endif #endif
/** /**
* @brief GPT2 interrupt priority level setting. * @brief GPTD2 interrupt priority level setting.
*/ */
#if !defined(STM32_GPT_TIM2_IRQ_PRIORITY) || defined(__DOXYGEN__) #if !defined(STM32_GPT_TIM2_IRQ_PRIORITY) || defined(__DOXYGEN__)
#define STM32_GPT_TIM2_IRQ_PRIORITY 7 #define STM32_GPT_TIM2_IRQ_PRIORITY 7
#endif #endif
/** /**
* @brief GPT3 interrupt priority level setting. * @brief GPTD3 interrupt priority level setting.
*/ */
#if !defined(STM32_GPT_TIM3_IRQ_PRIORITY) || defined(__DOXYGEN__) #if !defined(STM32_GPT_TIM3_IRQ_PRIORITY) || defined(__DOXYGEN__)
#define STM32_GPT_TIM3_IRQ_PRIORITY 7 #define STM32_GPT_TIM3_IRQ_PRIORITY 7
#endif #endif
/** /**
* @brief GPT4 interrupt priority level setting. * @brief GPTD4 interrupt priority level setting.
*/ */
#if !defined(STM32_GPT_TIM4_IRQ_PRIORITY) || defined(__DOXYGEN__) #if !defined(STM32_GPT_TIM4_IRQ_PRIORITY) || defined(__DOXYGEN__)
#define STM32_GPT_TIM4_IRQ_PRIORITY 7 #define STM32_GPT_TIM4_IRQ_PRIORITY 7
#endif #endif
/** /**
* @brief GPT5 interrupt priority level setting. * @brief GPTD5 interrupt priority level setting.
*/ */
#if !defined(STM32_GPT_TIM5_IRQ_PRIORITY) || defined(__DOXYGEN__) #if !defined(STM32_GPT_TIM5_IRQ_PRIORITY) || defined(__DOXYGEN__)
#define STM32_GPT_TIM5_IRQ_PRIORITY 7 #define STM32_GPT_TIM5_IRQ_PRIORITY 7
@ -206,6 +206,9 @@ struct GPTDriver {
* @brief Current configuration data. * @brief Current configuration data.
*/ */
const GPTConfig *config; const GPTConfig *config;
#if defined(GPT_DRIVER_EXT_FIELDS)
GPT_DRIVER_EXT_FIELDS
#endif
/* End of the mandatory fields.*/ /* End of the mandatory fields.*/
/** /**
* @brief Timer base clock. * @brief Timer base clock.

View File

@ -36,13 +36,45 @@
/*===========================================================================*/ /*===========================================================================*/
/** /**
* @brief ICU1 driver identifier. * @brief ICUD1 driver identifier.
* @note The driver ICUD1 allocates the complex timer TIM1 when enabled. * @note The driver ICUD1 allocates the complex timer TIM1 when enabled.
*/ */
#if STM32_ICU_USE_TIM1 || defined(__DOXYGEN__) #if STM32_ICU_USE_TIM1 || defined(__DOXYGEN__)
ICUDriver ICUD1; ICUDriver ICUD1;
#endif #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. */ /* Driver local variables. */
/*===========================================================================*/ /*===========================================================================*/
@ -51,29 +83,27 @@ ICUDriver ICUD1;
/* Driver local functions. */ /* 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. */ /* Driver interrupt handlers. */
/*===========================================================================*/ /*===========================================================================*/
#if STM32_ICU_USE_TIM1 #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. * @brief TIM1 compare interrupt handler.
* @note It is assumed that the various sources are only activated if the * @note It is assumed that the various sources are only activated if the
@ -83,21 +113,91 @@ CH_IRQ_HANDLER(TIM1_UP_IRQHandler) {
* @isr * @isr
*/ */
CH_IRQ_HANDLER(TIM1_CC_IRQHandler) { CH_IRQ_HANDLER(TIM1_CC_IRQHandler) {
uint16_t sr;
CH_IRQ_PROLOGUE(); CH_IRQ_PROLOGUE();
sr = TIM1->SR & TIM1->DIER; icu_lld_serve_interrupt(&ICUD1);
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);
CH_IRQ_EPILOGUE(); CH_IRQ_EPILOGUE();
} }
#endif /* STM32_ICU_USE_TIM1 */ #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. */ /* Driver exported functions. */
/*===========================================================================*/ /*===========================================================================*/
@ -114,6 +214,30 @@ void icu_lld_init(void) {
icuObjectInit(&ICUD1); icuObjectInit(&ICUD1);
ICUD1.tim = TIM1; ICUD1.tim = TIM1;
#endif #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->APB2ENR |= RCC_APB2ENR_TIM1EN;
RCC->APB2RSTR = RCC_APB2RSTR_TIM1RST; RCC->APB2RSTR = RCC_APB2RSTR_TIM1RST;
RCC->APB2RSTR = 0; RCC->APB2RSTR = 0;
NVICEnableVector(TIM1_UP_IRQn,
CORTEX_PRIORITY_MASK(STM32_ICU_TIM1_IRQ_PRIORITY));
NVICEnableVector(TIM1_CC_IRQn, NVICEnableVector(TIM1_CC_IRQn,
CORTEX_PRIORITY_MASK(STM32_ICU_TIM1_IRQ_PRIORITY)); 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 #endif
} }
@ -153,7 +312,7 @@ void icu_lld_start(ICUDriver *icup) {
/* SMCR_TS = 101, input is TI1FP1. /* SMCR_TS = 101, input is TI1FP1.
SMCR_SMS = 100, reset on rising edge.*/ SMCR_SMS = 100, reset on rising edge.*/
icup->tim->SMCR = TIM_SMCR_TS_2 | TIM_SMCR_TS_0 | 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. /* The CCER settings depend on the selected trigger mode.
ICU_INPUT_ACTIVE_HIGH: Active on rising edge, idle on falling edge. ICU_INPUT_ACTIVE_HIGH: Active on rising edge, idle on falling edge.
ICU_INPUT_ACTIVE_LOW: Active on falling edge, idle on rising 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 | icup->tim->CCER = TIM_CCER_CC1E |
TIM_CCER_CC2E | TIM_CCER_CC2P; TIM_CCER_CC2E | TIM_CCER_CC2P;
else else
icup->tim->CCER = TIM_CCER_CC1E | TIM_CCER_CC1P icup->tim->CCER = TIM_CCER_CC1E | TIM_CCER_CC1P |
TIM_CCER_CC2E; TIM_CCER_CC2E;
} }
@ -181,11 +340,35 @@ void icu_lld_stop(ICUDriver *icup) {
#if STM32_ICU_USE_TIM1 #if STM32_ICU_USE_TIM1
if (&ICUD1 == icup) { if (&ICUD1 == icup) {
NVICDisableVector(TIM1_UP_IRQn); NVICDisableVector(TIM1_CC_IRQn);
RCC->APB2ENR &= ~RCC_APB2ENR_TIM1EN; RCC->APB2ENR &= ~RCC_APB2ENR_TIM1EN;
} }
#endif #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) { void icu_lld_enable(ICUDriver *icup) {
icup->tim->SR = 0; /* Clear pending IRQs (if any). */ 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; icup->tim->CR1 = TIM_CR1_URS | TIM_CR1_CEN;
} }

View File

@ -48,6 +48,77 @@
#define STM32_ICU_USE_TIM1 TRUE #define STM32_ICU_USE_TIM1 TRUE
#endif #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. */ /* Derived constants and error checks. */
/*===========================================================================*/ /*===========================================================================*/
@ -143,6 +214,9 @@ struct ICUDriver {
* @brief Current configuration data. * @brief Current configuration data.
*/ */
const ICUConfig *config; const ICUConfig *config;
#if defined(ICU_DRIVER_EXT_FIELDS)
ICU_DRIVER_EXT_FIELDS
#endif
/* End of the mandatory fields.*/ /* End of the mandatory fields.*/
/** /**
* @brief Pointer to the TIMx registers block. * @brief Pointer to the TIMx registers block.
@ -209,6 +283,22 @@ struct ICUDriver {
extern ICUDriver ICUD1; extern ICUDriver ICUD1;
#endif #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 #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
@ -217,8 +307,6 @@ extern "C" {
void icu_lld_stop(ICUDriver *icup); void icu_lld_stop(ICUDriver *icup);
void icu_lld_enable(ICUDriver *icup); void icu_lld_enable(ICUDriver *icup);
void icu_lld_disable(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 #ifdef __cplusplus
} }
#endif #endif

View File

@ -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/adc_lld.c \
${CHIBIOS}/os/hal/platforms/STM32/can_lld.c \ ${CHIBIOS}/os/hal/platforms/STM32/can_lld.c \
${CHIBIOS}/os/hal/platforms/STM32/gpt_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/pal_lld.c \
${CHIBIOS}/os/hal/platforms/STM32/pwm_lld.c \ ${CHIBIOS}/os/hal/platforms/STM32/pwm_lld.c \
${CHIBIOS}/os/hal/platforms/STM32/serial_lld.c \ ${CHIBIOS}/os/hal/platforms/STM32/serial_lld.c \

View File

@ -48,40 +48,40 @@
/*===========================================================================*/ /*===========================================================================*/
/** /**
* @brief PWM1 driver identifier. * @brief PWMD1 driver identifier.
* @note The driver PWM1 allocates the complex timer TIM1 when enabled. * @note The driver PWMD1 allocates the complex timer TIM1 when enabled.
*/ */
#if STM32_PWM_USE_TIM1 || defined(__DOXYGEN__) #if STM32_PWM_USE_TIM1 || defined(__DOXYGEN__)
PWMDriver PWMD1; PWMDriver PWMD1;
#endif #endif
/** /**
* @brief PWM2 driver identifier. * @brief PWMD2 driver identifier.
* @note The driver PWM2 allocates the timer TIM2 when enabled. * @note The driver PWMD2 allocates the timer TIM2 when enabled.
*/ */
#if STM32_PWM_USE_TIM2 || defined(__DOXYGEN__) #if STM32_PWM_USE_TIM2 || defined(__DOXYGEN__)
PWMDriver PWMD2; PWMDriver PWMD2;
#endif #endif
/** /**
* @brief PWM3 driver identifier. * @brief PWMD3 driver identifier.
* @note The driver PWM3 allocates the timer TIM3 when enabled. * @note The driver PWMD3 allocates the timer TIM3 when enabled.
*/ */
#if STM32_PWM_USE_TIM3 || defined(__DOXYGEN__) #if STM32_PWM_USE_TIM3 || defined(__DOXYGEN__)
PWMDriver PWMD3; PWMDriver PWMD3;
#endif #endif
/** /**
* @brief PWM4 driver identifier. * @brief PWMD4 driver identifier.
* @note The driver PWM4 allocates the timer TIM4 when enabled. * @note The driver PWMD4 allocates the timer TIM4 when enabled.
*/ */
#if STM32_PWM_USE_TIM4 || defined(__DOXYGEN__) #if STM32_PWM_USE_TIM4 || defined(__DOXYGEN__)
PWMDriver PWMD4; PWMDriver PWMD4;
#endif #endif
/** /**
* @brief PWM5 driver identifier. * @brief PWMD5 driver identifier.
* @note The driver PWM5 allocates the timer TIM5 when enabled. * @note The driver PWMD5 allocates the timer TIM5 when enabled.
*/ */
#if STM32_PWM_USE_TIM5 || defined(__DOXYGEN__) #if STM32_PWM_USE_TIM5 || defined(__DOXYGEN__)
PWMDriver PWMD5; PWMDriver PWMD5;

View File

@ -45,8 +45,8 @@
/*===========================================================================*/ /*===========================================================================*/
/** /**
* @brief PWM1 driver enable switch. * @brief PWMD1 driver enable switch.
* @details If set to @p TRUE the support for PWM1 is included. * @details If set to @p TRUE the support for PWMD1 is included.
* @note The default is @p TRUE. * @note The default is @p TRUE.
*/ */
#if !defined(STM32_PWM_USE_TIM1) || defined(__DOXYGEN__) #if !defined(STM32_PWM_USE_TIM1) || defined(__DOXYGEN__)
@ -54,8 +54,8 @@
#endif #endif
/** /**
* @brief PWM2 driver enable switch. * @brief PWMD2 driver enable switch.
* @details If set to @p TRUE the support for PWM2 is included. * @details If set to @p TRUE the support for PWMD2 is included.
* @note The default is @p TRUE. * @note The default is @p TRUE.
*/ */
#if !defined(STM32_PWM_USE_TIM2) || defined(__DOXYGEN__) #if !defined(STM32_PWM_USE_TIM2) || defined(__DOXYGEN__)
@ -63,8 +63,8 @@
#endif #endif
/** /**
* @brief PWM3 driver enable switch. * @brief PWMD3 driver enable switch.
* @details If set to @p TRUE the support for PWM3 is included. * @details If set to @p TRUE the support for PWMD3 is included.
* @note The default is @p TRUE. * @note The default is @p TRUE.
*/ */
#if !defined(STM32_PWM_USE_TIM3) || defined(__DOXYGEN__) #if !defined(STM32_PWM_USE_TIM3) || defined(__DOXYGEN__)
@ -72,8 +72,8 @@
#endif #endif
/** /**
* @brief PWM4 driver enable switch. * @brief PWMD4 driver enable switch.
* @details If set to @p TRUE the support for PWM4 is included. * @details If set to @p TRUE the support for PWMD4 is included.
* @note The default is @p TRUE. * @note The default is @p TRUE.
*/ */
#if !defined(STM32_PWM_USE_TIM4) || defined(__DOXYGEN__) #if !defined(STM32_PWM_USE_TIM4) || defined(__DOXYGEN__)
@ -81,8 +81,8 @@
#endif #endif
/** /**
* @brief PWM5 driver enable switch. * @brief PWMD5 driver enable switch.
* @details If set to @p TRUE the support for PWM5 is included. * @details If set to @p TRUE the support for PWMD5 is included.
* @note The default is @p TRUE. * @note The default is @p TRUE.
*/ */
#if !defined(STM32_PWM_USE_TIM5) || defined(__DOXYGEN__) #if !defined(STM32_PWM_USE_TIM5) || defined(__DOXYGEN__)
@ -90,35 +90,35 @@
#endif #endif
/** /**
* @brief PWM1 interrupt priority level setting. * @brief PWMD1 interrupt priority level setting.
*/ */
#if !defined(STM32_PWM_TIM1_IRQ_PRIORITY) || defined(__DOXYGEN__) #if !defined(STM32_PWM_TIM1_IRQ_PRIORITY) || defined(__DOXYGEN__)
#define STM32_PWM_TIM1_IRQ_PRIORITY 7 #define STM32_PWM_TIM1_IRQ_PRIORITY 7
#endif #endif
/** /**
* @brief PWM2 interrupt priority level setting. * @brief PWMD2 interrupt priority level setting.
*/ */
#if !defined(STM32_PWM_TIM2_IRQ_PRIORITY) || defined(__DOXYGEN__) #if !defined(STM32_PWM_TIM2_IRQ_PRIORITY) || defined(__DOXYGEN__)
#define STM32_PWM_TIM2_IRQ_PRIORITY 7 #define STM32_PWM_TIM2_IRQ_PRIORITY 7
#endif #endif
/** /**
* @brief PWM3 interrupt priority level setting. * @brief PWMD3 interrupt priority level setting.
*/ */
#if !defined(STM32_PWM_TIM3_IRQ_PRIORITY) || defined(__DOXYGEN__) #if !defined(STM32_PWM_TIM3_IRQ_PRIORITY) || defined(__DOXYGEN__)
#define STM32_PWM_TIM3_IRQ_PRIORITY 7 #define STM32_PWM_TIM3_IRQ_PRIORITY 7
#endif #endif
/** /**
* @brief PWM4 interrupt priority level setting. * @brief PWMD4 interrupt priority level setting.
*/ */
#if !defined(STM32_PWM_TIM4_IRQ_PRIORITY) || defined(__DOXYGEN__) #if !defined(STM32_PWM_TIM4_IRQ_PRIORITY) || defined(__DOXYGEN__)
#define STM32_PWM_TIM4_IRQ_PRIORITY 7 #define STM32_PWM_TIM4_IRQ_PRIORITY 7
#endif #endif
/** /**
* @brief PWM5 interrupt priority level setting. * @brief PWMD5 interrupt priority level setting.
*/ */
#if !defined(STM32_PWM_TIM5_IRQ_PRIORITY) || defined(__DOXYGEN__) #if !defined(STM32_PWM_TIM5_IRQ_PRIORITY) || defined(__DOXYGEN__)
#define STM32_PWM_TIM5_IRQ_PRIORITY 7 #define STM32_PWM_TIM5_IRQ_PRIORITY 7

View File

@ -290,6 +290,9 @@ struct USBDriver {
* @brief Current USB device configuration. * @brief Current USB device configuration.
*/ */
uint8_t configuration; uint8_t configuration;
#if defined(USB_DRIVER_EXT_FIELDS)
USB_DRIVER_EXT_FIELDS
#endif
/* End of the mandatory fields.*/ /* End of the mandatory fields.*/
/** /**
* @brief Pointer to the next address in the packet memory. * @brief Pointer to the next address in the packet memory.

View File

@ -100,6 +100,9 @@ struct GPTDriver {
* @brief Current configuration data. * @brief Current configuration data.
*/ */
const GPTConfig *config; const GPTConfig *config;
#if defined(GPT_DRIVER_EXT_FIELDS)
GPT_DRIVER_EXT_FIELDS
#endif
/* End of the mandatory fields.*/ /* End of the mandatory fields.*/
}; };

View File

@ -104,6 +104,9 @@ struct ICUDriver {
* @brief Current configuration data. * @brief Current configuration data.
*/ */
const ICUConfig *config; const ICUConfig *config;
#if defined(ICU_DRIVER_EXT_FIELDS)
ICU_DRIVER_EXT_FIELDS
#endif
/* End of the mandatory fields.*/ /* End of the mandatory fields.*/
}; };

View File

@ -212,6 +212,9 @@ struct USBDriver {
* @brief Current USB device configuration. * @brief Current USB device configuration.
*/ */
uint8_t configuration; uint8_t configuration;
#if defined(USB_DRIVER_EXT_FIELDS)
USB_DRIVER_EXT_FIELDS
#endif
/* End of the mandatory fields.*/ /* End of the mandatory fields.*/
}; };

View File

@ -151,7 +151,7 @@ extern "C" {
#endif #endif
#if CH_DBG_ENABLE_TRACE || defined(__DOXYGEN__) #if CH_DBG_ENABLE_TRACE || defined(__DOXYGEN__)
extern TraceBuffer trace_buffer; extern TraceBuffer trace_buffer;
void trace_init(void); void _trace_init(void);
void chDbgTrace(Thread *otp); void chDbgTrace(Thread *otp);
#endif #endif
#if CH_DBG_ENABLE_ASSERTS || CH_DBG_ENABLE_CHECKS || CH_DBG_ENABLE_STACK_CHECK #if CH_DBG_ENABLE_ASSERTS || CH_DBG_ENABLE_CHECKS || CH_DBG_ENABLE_STACK_CHECK

View File

@ -75,7 +75,7 @@ struct memory_heap {
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
void heap_init(void); void _heap_init(void);
void chHeapInit(MemoryHeap *heapp, void *buf, size_t size); void chHeapInit(MemoryHeap *heapp, void *buf, size_t size);
void *chHeapAlloc(MemoryHeap *heapp, size_t size); void *chHeapAlloc(MemoryHeap *heapp, size_t size);
void chHeapFree(void *p); void chHeapFree(void *p);

View File

@ -67,7 +67,7 @@ typedef void *(*memgetfunc_t)(size_t size);
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
void core_init(void); void _core_init(void);
void *chCoreAlloc(size_t size); void *chCoreAlloc(size_t size);
void *chCoreAllocI(size_t size); void *chCoreAllocI(size_t size);
size_t chCoreStatus(void); size_t chCoreStatus(void);

View File

@ -127,7 +127,7 @@ register Thread *currp asm(CH_CURRP_REGISTER_CACHE);
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
void scheduler_init(void); void _scheduler_init(void);
#if !defined(PORT_OPTIMIZED_READYI) #if !defined(PORT_OPTIMIZED_READYI)
Thread *chSchReadyI(Thread *tp); Thread *chSchReadyI(Thread *tp);
#endif #endif

View File

@ -121,7 +121,7 @@ extern VTList vtlist;
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
void vt_init(void); void _vt_init(void);
void chVTSetI(VirtualTimer *vtp, systime_t time, vtfunc_t vtfunc, void *par); void chVTSetI(VirtualTimer *vtp, systime_t time, vtfunc_t vtfunc, void *par);
void chVTResetI(VirtualTimer *vtp); void chVTResetI(VirtualTimer *vtp);
bool_t chTimeIsWithin(systime_t start, systime_t end); bool_t chTimeIsWithin(systime_t start, systime_t end);

View File

@ -46,7 +46,7 @@ TraceBuffer trace_buffer;
* @brief Trace circular buffer subsystem initialization. * @brief Trace circular buffer subsystem initialization.
* @note Internal use only. * @note Internal use only.
*/ */
void trace_init(void) { void _trace_init(void) {
trace_buffer.tb_size = TRACE_BUFFER_SIZE; trace_buffer.tb_size = TRACE_BUFFER_SIZE;
trace_buffer.tb_ptr = &trace_buffer.tb_buffer[0]; trace_buffer.tb_ptr = &trace_buffer.tb_buffer[0];

View File

@ -65,7 +65,7 @@ static MemoryHeap default_heap;
* *
* @notapi * @notapi
*/ */
void heap_init(void) { void _heap_init(void) {
default_heap.h_provider = chCoreAlloc; default_heap.h_provider = chCoreAlloc;
default_heap.h_free.h.u.next = (union heap_header *)NULL; default_heap.h_free.h.u.next = (union heap_header *)NULL;
default_heap.h_free.h.size = 0; default_heap.h_free.h.size = 0;

View File

@ -56,7 +56,7 @@ static uint8_t *endmem;
* *
* @notapi * @notapi
*/ */
void core_init(void) { void _core_init(void) {
#if CH_MEMCORE_SIZE == 0 #if CH_MEMCORE_SIZE == 0
extern uint8_t __heap_base__[]; extern uint8_t __heap_base__[];
extern uint8_t __heap_end__[]; extern uint8_t __heap_end__[];

View File

@ -45,7 +45,7 @@ ReadyList rlist;
* *
* @notapi * @notapi
*/ */
void scheduler_init(void) { void _scheduler_init(void) {
queue_init(&rlist.r_queue); queue_init(&rlist.r_queue);
rlist.r_prio = NOPRIO; rlist.r_prio = NOPRIO;

View File

@ -76,16 +76,16 @@ void chSysInit(void) {
static Thread mainthread; static Thread mainthread;
port_init(); port_init();
scheduler_init(); _scheduler_init();
vt_init(); _vt_init();
#if CH_USE_MEMCORE #if CH_USE_MEMCORE
core_init(); _core_init();
#endif #endif
#if CH_USE_HEAP #if CH_USE_HEAP
heap_init(); _heap_init();
#endif #endif
#if CH_DBG_ENABLE_TRACE #if CH_DBG_ENABLE_TRACE
trace_init(); _trace_init();
#endif #endif
/* Now this instructions flow becomes the main thread.*/ /* Now this instructions flow becomes the main thread.*/

View File

@ -40,7 +40,7 @@ VTList vtlist;
* *
* @notapi * @notapi
*/ */
void vt_init(void) { void _vt_init(void) {
vtlist.vt_next = vtlist.vt_prev = (void *)&vtlist; vtlist.vt_next = vtlist.vt_prev = (void *)&vtlist;
vtlist.vt_time = (systime_t)-1; vtlist.vt_time = (systime_t)-1;

View File

@ -95,10 +95,10 @@
as default. as default.
- CHANGE: Removed all the prefixes from the structure/union field names - CHANGE: Removed all the prefixes from the structure/union field names
in the HAL subsystem. 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 more readable output. Also modified the documentation layout to put functions
and variables ahead of everything else in the group pages. 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 templates. Note that now there are two Doxygen projects, one for generating
the CHM file the other for plain HTML. the CHM file the other for plain HTML.

View File

@ -69,6 +69,13 @@
#define HAL_USE_I2C FALSE #define HAL_USE_I2C FALSE
#endif #endif
/**
* @brief Enables the I2C subsystem.
*/
#if !defined(HAL_USE_ICU) || defined(__DOXYGEN__)
#define HAL_USE_ICU TRUE
#endif
/** /**
* @brief Enables the MAC subsystem. * @brief Enables the MAC subsystem.
*/ */

View File

@ -74,6 +74,20 @@
#define STM32_GPT_TIM4_IRQ_PRIORITY 7 #define STM32_GPT_TIM4_IRQ_PRIORITY 7
#define STM32_GPT_TIM5_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. * PWM driver system settings.
*/ */

View File

@ -18,7 +18,7 @@ Within 2.3.x (hopefully)
* Swap TIME_IMMEDIATE and TIME_INFINITE values. * Swap TIME_IMMEDIATE and TIME_INFINITE values.
* Improvements to the message passing mechanism in order to allow "delayed, * Improvements to the message passing mechanism in order to allow "delayed,
out of order, responses". 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 X GPT implementation and long duration "IRQ storm" stress test applications
for all the supported critical platforms. for all the supported critical platforms.
- Add UART4 support to the STM32 UART driver (CL line only, HD has a nasty - 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 Transactional flash file system implementation.
X I2C device driver class support and at least one implementation. X I2C device driver class support and at least one implementation.
X Shared DMA channels support in the STM32/STM8L HALs. 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. - New device driver models: Clock, Systick, RTC, WDG, DAC, Power Monitor.
Later but within 2.x.x Later but within 2.x.x