diff options
Diffstat (limited to 'testhal/STM32F4xx')
127 files changed, 32092 insertions, 0 deletions
diff --git a/testhal/STM32F4xx/ADC/.cproject b/testhal/STM32F4xx/ADC/.cproject new file mode 100644 index 000000000..b279459f3 --- /dev/null +++ b/testhal/STM32F4xx/ADC/.cproject @@ -0,0 +1,51 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?>
 +<?fileVersion 4.0.0?>
 +
 +<cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
 +	<storageModule moduleId="org.eclipse.cdt.core.settings">
 +		<cconfiguration id="0.865376734">
 +			<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="0.865376734" moduleId="org.eclipse.cdt.core.settings" name="Default">
 +				<externalSettings/>
 +				<extensions>
 +					<extension id="org.eclipse.cdt.core.VCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 +					<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 +					<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
 +					<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 +					<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 +					<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 +				</extensions>
 +			</storageModule>
 +			<storageModule moduleId="cdtBuildSystem" version="4.0.0">
 +				<configuration artifactName="${ProjName}" buildProperties="" description="" id="0.865376734" name="Default" parent="org.eclipse.cdt.build.core.prefbase.cfg">
 +					<folderInfo id="0.865376734." name="/" resourcePath="">
 +						<toolChain id="org.eclipse.cdt.build.core.prefbase.toolchain.2119429182" name="No ToolChain" resourceTypeBasedDiscovery="false" superClass="org.eclipse.cdt.build.core.prefbase.toolchain">
 +							<targetPlatform id="org.eclipse.cdt.build.core.prefbase.toolchain.2119429182.1255666130" name=""/>
 +							<builder id="org.eclipse.cdt.build.core.settings.default.builder.343686597" keepEnvironmentInBuildfile="false" managedBuildOn="false" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="org.eclipse.cdt.build.core.settings.default.builder"/>
 +							<tool id="org.eclipse.cdt.build.core.settings.holder.libs.1389077403" name="holder for library settings" superClass="org.eclipse.cdt.build.core.settings.holder.libs"/>
 +							<tool id="org.eclipse.cdt.build.core.settings.holder.1240252522" name="Assembly" superClass="org.eclipse.cdt.build.core.settings.holder">
 +								<inputType id="org.eclipse.cdt.build.core.settings.holder.inType.165861246" languageId="org.eclipse.cdt.core.assembly" languageName="Assembly" sourceContentType="org.eclipse.cdt.core.asmSource" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
 +							</tool>
 +							<tool id="org.eclipse.cdt.build.core.settings.holder.1264168416" name="GNU C++" superClass="org.eclipse.cdt.build.core.settings.holder">
 +								<inputType id="org.eclipse.cdt.build.core.settings.holder.inType.585503638" languageId="org.eclipse.cdt.core.g++" languageName="GNU C++" sourceContentType="org.eclipse.cdt.core.cxxSource,org.eclipse.cdt.core.cxxHeader" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
 +							</tool>
 +							<tool id="org.eclipse.cdt.build.core.settings.holder.1888673637" name="GNU C" superClass="org.eclipse.cdt.build.core.settings.holder">
 +								<inputType id="org.eclipse.cdt.build.core.settings.holder.inType.661561306" languageId="org.eclipse.cdt.core.gcc" languageName="GNU C" sourceContentType="org.eclipse.cdt.core.cSource,org.eclipse.cdt.core.cHeader" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
 +							</tool>
 +						</toolChain>
 +					</folderInfo>
 +				</configuration>
 +			</storageModule>
 +			<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
 +		</cconfiguration>
 +	</storageModule>
 +	<storageModule moduleId="cdtBuildSystem" version="4.0.0">
 +		<project id="STM32F4xx-ADC.null.435717221" name="STM32F4xx-ADC"/>
 +	</storageModule>
 +	<storageModule moduleId="scannerConfiguration">
 +		<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
 +		<scannerConfigBuildInfo instanceId="0.865376734">
 +			<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile"/>
 +		</scannerConfigBuildInfo>
 +	</storageModule>
 +	<storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
 +</cproject>
 diff --git a/testhal/STM32F4xx/ADC/.project b/testhal/STM32F4xx/ADC/.project new file mode 100644 index 000000000..eafa4d503 --- /dev/null +++ b/testhal/STM32F4xx/ADC/.project @@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="UTF-8"?>
 +<projectDescription>
 +	<name>STM32F4xx-ADC</name>
 +	<comment></comment>
 +	<projects>
 +	</projects>
 +	<buildSpec>
 +		<buildCommand>
 +			<name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
 +			<triggers>clean,full,incremental,</triggers>
 +			<arguments>
 +			</arguments>
 +		</buildCommand>
 +		<buildCommand>
 +			<name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
 +			<triggers>full,incremental,</triggers>
 +			<arguments>
 +			</arguments>
 +		</buildCommand>
 +	</buildSpec>
 +	<natures>
 +		<nature>org.eclipse.cdt.core.cnature</nature>
 +		<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
 +		<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
 +	</natures>
 +	<linkedResources>
 +		<link>
 +			<name>board</name>
 +			<type>2</type>
 +			<locationURI>CHIBIOS/boards/ST_STM32F4_DISCOVERY</locationURI>
 +		</link>
 +		<link>
 +			<name>os</name>
 +			<type>2</type>
 +			<locationURI>CHIBIOS/os</locationURI>
 +		</link>
 +	</linkedResources>
 +</projectDescription>
 diff --git a/testhal/STM32F4xx/ADC/Makefile b/testhal/STM32F4xx/ADC/Makefile new file mode 100644 index 000000000..86de6d81c --- /dev/null +++ b/testhal/STM32F4xx/ADC/Makefile @@ -0,0 +1,222 @@ +##############################################################################
 +# Build global options
 +# NOTE: Can be overridden externally.
 +#
 +
 +# Compiler options here.
 +ifeq ($(USE_OPT),)
 +  USE_OPT = -O2 -ggdb -fomit-frame-pointer -falign-functions=16
 +endif
 +
 +# C specific options here (added to USE_OPT).
 +ifeq ($(USE_COPT),)
 +  USE_COPT = 
 +endif
 +
 +# C++ specific options here (added to USE_OPT).
 +ifeq ($(USE_CPPOPT),)
 +  USE_CPPOPT = -fno-rtti
 +endif
 +
 +# Enable this if you want the linker to remove unused code and data
 +ifeq ($(USE_LINK_GC),)
 +  USE_LINK_GC = yes
 +endif
 +
 +# If enabled, this option allows to compile the application in THUMB mode.
 +ifeq ($(USE_THUMB),)
 +  USE_THUMB = yes
 +endif
 +
 +# Enable this if you want to see the full log while compiling.
 +ifeq ($(USE_VERBOSE_COMPILE),)
 +  USE_VERBOSE_COMPILE = no
 +endif
 +
 +#
 +# Build global options
 +##############################################################################
 +
 +##############################################################################
 +# Architecture or project specific options
 +#
 +
 +# Enables the use of FPU on Cortex-M4.
 +# Enable this if you really want to use the STM FWLib.
 +ifeq ($(USE_FPU),)
 +  USE_FPU = no
 +endif
 +
 +# Enable this if you really want to use the STM FWLib.
 +ifeq ($(USE_FWLIB),)
 +  USE_FWLIB = no
 +endif
 +
 +#
 +# Architecture or project specific options
 +##############################################################################
 +
 +##############################################################################
 +# Project, sources and paths
 +#
 +
 +# Define project name here
 +PROJECT = ch
 +
 +# Imported source files and paths
 +CHIBIOS = ../../..
 +include $(CHIBIOS)/boards/ST_STM32F4_DISCOVERY/board.mk
 +include $(CHIBIOS)/os/hal/platforms/STM32F4xx/platform.mk
 +include $(CHIBIOS)/os/hal/hal.mk
 +include $(CHIBIOS)/os/ports/GCC/ARMCMx/STM32F4xx/port.mk
 +include $(CHIBIOS)/os/kernel/kernel.mk
 +include $(CHIBIOS)/test/test.mk
 +
 +# Define linker script file here
 +LDSCRIPT= $(PORTLD)/STM32F407xG.ld
 +#LDSCRIPT= $(PORTLD)/STM32F407xG_CCM.ld
 +
 +# C sources that can be compiled in ARM or THUMB mode depending on the global
 +# setting.
 +CSRC = $(PORTSRC) \
 +       $(KERNSRC) \
 +       $(TESTSRC) \
 +       $(HALSRC) \
 +       $(PLATFORMSRC) \
 +       $(BOARDSRC) \
 +       $(CHIBIOS)/os/various/chprintf.c \
 +       main.c
 +
 +# C++ sources that can be compiled in ARM or THUMB mode depending on the global
 +# setting.
 +CPPSRC =
 +
 +# C sources to be compiled in ARM mode regardless of the global setting.
 +# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler
 +#       option that results in lower performance and larger code size.
 +ACSRC =
 +
 +# C++ sources to be compiled in ARM mode regardless of the global setting.
 +# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler
 +#       option that results in lower performance and larger code size.
 +ACPPSRC =
 +
 +# C sources to be compiled in THUMB mode regardless of the global setting.
 +# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler
 +#       option that results in lower performance and larger code size.
 +TCSRC =
 +
 +# C sources to be compiled in THUMB mode regardless of the global setting.
 +# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler
 +#       option that results in lower performance and larger code size.
 +TCPPSRC =
 +
 +# List ASM source files here
 +ASMSRC = $(PORTASM)
 +
 +INCDIR = $(PORTINC) $(KERNINC) $(TESTINC) \
 +         $(HALINC) $(PLATFORMINC) $(BOARDINC) \
 +         $(CHIBIOS)/os/various
 +
 +#
 +# Project, sources and paths
 +##############################################################################
 +
 +##############################################################################
 +# Compiler settings
 +#
 +
 +MCU  = cortex-m4
 +
 +#TRGT = arm-elf-
 +TRGT = arm-none-eabi-
 +CC   = $(TRGT)gcc
 +CPPC = $(TRGT)g++
 +# Enable loading with g++ only if you need C++ runtime support.
 +# NOTE: You can use C++ even without C++ support if you are careful. C++
 +#       runtime support makes code size explode.
 +LD   = $(TRGT)gcc
 +#LD   = $(TRGT)g++
 +CP   = $(TRGT)objcopy
 +AS   = $(TRGT)gcc -x assembler-with-cpp
 +OD   = $(TRGT)objdump
 +HEX  = $(CP) -O ihex
 +BIN  = $(CP) -O binary
 +
 +# ARM-specific options here
 +AOPT =
 +
 +# THUMB-specific options here
 +TOPT = -mthumb -DTHUMB
 +
 +# Define C warning options here
 +CWARN = -Wall -Wextra -Wstrict-prototypes
 +
 +# Define C++ warning options here
 +CPPWARN = -Wall -Wextra
 +
 +#
 +# Compiler settings
 +##############################################################################
 +
 +##############################################################################
 +# Start of default section
 +#
 +
 +# List all default C defines here, like -D_DEBUG=1
 +DDEFS =
 +
 +# List all default ASM defines here, like -D_DEBUG=1
 +DADEFS =
 +
 +# List all default directories to look for include files here
 +DINCDIR =
 +
 +# List the default directory to look for the libraries here
 +DLIBDIR =
 +
 +# List all default libraries here
 +DLIBS =
 +
 +#
 +# End of default section
 +##############################################################################
 +
 +##############################################################################
 +# Start of user section
 +#
 +
 +# List all user C define here, like -D_DEBUG=1
 +UDEFS =
 +
 +# Define ASM defines here
 +UADEFS =
 +
 +# List all user directories here
 +UINCDIR =
 +
 +# List the user directory to look for the libraries here
 +ULIBDIR =
 +
 +# List all user libraries here
 +ULIBS =
 +
 +#
 +# End of user defines
 +##############################################################################
 +
 +ifeq ($(USE_FPU),yes)
 +  USE_OPT += -mfloat-abi=softfp -mfpu=fpv4-sp-d16 -fsingle-precision-constant
 +  DDEFS += -DCORTEX_USE_FPU=TRUE
 +else
 +  DDEFS += -DCORTEX_USE_FPU=FALSE
 +endif
 +
 +ifeq ($(USE_FWLIB),yes)
 +  include $(CHIBIOS)/ext/stm32lib/stm32lib.mk
 +  CSRC += $(STM32SRC)
 +  INCDIR += $(STM32INC)
 +  USE_OPT += -DUSE_STDPERIPH_DRIVER
 +endif
 +
 +include $(CHIBIOS)/os/ports/GCC/ARMCMx/rules.mk
 diff --git a/testhal/STM32F4xx/ADC/chconf.h b/testhal/STM32F4xx/ADC/chconf.h new file mode 100644 index 000000000..2e6fcc6ee --- /dev/null +++ b/testhal/STM32F4xx/ADC/chconf.h @@ -0,0 +1,531 @@ +/*
 +    ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio
 +
 +    Licensed under the Apache License, Version 2.0 (the "License");
 +    you may not use this file except in compliance with the License.
 +    You may obtain a copy of the License at
 +
 +        http://www.apache.org/licenses/LICENSE-2.0
 +
 +    Unless required by applicable law or agreed to in writing, software
 +    distributed under the License is distributed on an "AS IS" BASIS,
 +    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 +    See the License for the specific language governing permissions and
 +    limitations under the License.
 +*/
 +
 +/**
 + * @file    templates/chconf.h
 + * @brief   Configuration file template.
 + * @details A copy of this file must be placed in each project directory, it
 + *          contains the application specific kernel settings.
 + *
 + * @addtogroup config
 + * @details Kernel related settings and hooks.
 + * @{
 + */
 +
 +#ifndef _CHCONF_H_
 +#define _CHCONF_H_
 +
 +/*===========================================================================*/
 +/**
 + * @name Kernel parameters and options
 + * @{
 + */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   System tick frequency.
 + * @details Frequency of the system timer that drives the system ticks. This
 + *          setting also defines the system tick time unit.
 + */
 +#if !defined(CH_FREQUENCY) || defined(__DOXYGEN__)
 +#define CH_FREQUENCY                    1000
 +#endif
 +
 +/**
 + * @brief   Round robin interval.
 + * @details This constant is the number of system ticks allowed for the
 + *          threads before preemption occurs. Setting this value to zero
 + *          disables the preemption for threads with equal priority and the
 + *          round robin becomes cooperative. Note that higher priority
 + *          threads can still preempt, the kernel is always preemptive.
 + *
 + * @note    Disabling the round robin preemption makes the kernel more compact
 + *          and generally faster.
 + */
 +#if !defined(CH_TIME_QUANTUM) || defined(__DOXYGEN__)
 +#define CH_TIME_QUANTUM                 20
 +#endif
 +
 +/**
 + * @brief   Managed RAM size.
 + * @details Size of the RAM area to be managed by the OS. If set to zero
 + *          then the whole available RAM is used. The core memory is made
 + *          available to the heap allocator and/or can be used directly through
 + *          the simplified core memory allocator.
 + *
 + * @note    In order to let the OS manage the whole RAM the linker script must
 + *          provide the @p __heap_base__ and @p __heap_end__ symbols.
 + * @note    Requires @p CH_USE_MEMCORE.
 + */
 +#if !defined(CH_MEMCORE_SIZE) || defined(__DOXYGEN__)
 +#define CH_MEMCORE_SIZE                 0
 +#endif
 +
 +/**
 + * @brief   Idle thread automatic spawn suppression.
 + * @details When this option is activated the function @p chSysInit()
 + *          does not spawn the idle thread automatically. The application has
 + *          then the responsibility to do one of the following:
 + *          - Spawn a custom idle thread at priority @p IDLEPRIO.
 + *          - Change the main() thread priority to @p IDLEPRIO then enter
 + *            an endless loop. In this scenario the @p main() thread acts as
 + *            the idle thread.
 + *          .
 + * @note    Unless an idle thread is spawned the @p main() thread must not
 + *          enter a sleep state.
 + */
 +#if !defined(CH_NO_IDLE_THREAD) || defined(__DOXYGEN__)
 +#define CH_NO_IDLE_THREAD               FALSE
 +#endif
 +
 +/** @} */
 +
 +/*===========================================================================*/
 +/**
 + * @name Performance options
 + * @{
 + */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   OS optimization.
 + * @details If enabled then time efficient rather than space efficient code
 + *          is used when two possible implementations exist.
 + *
 + * @note    This is not related to the compiler optimization options.
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_OPTIMIZE_SPEED) || defined(__DOXYGEN__)
 +#define CH_OPTIMIZE_SPEED               TRUE
 +#endif
 +
 +/** @} */
 +
 +/*===========================================================================*/
 +/**
 + * @name Subsystem options
 + * @{
 + */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Threads registry APIs.
 + * @details If enabled then the registry APIs are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_REGISTRY) || defined(__DOXYGEN__)
 +#define CH_USE_REGISTRY                 TRUE
 +#endif
 +
 +/**
 + * @brief   Threads synchronization APIs.
 + * @details If enabled then the @p chThdWait() function is included in
 + *          the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_WAITEXIT) || defined(__DOXYGEN__)
 +#define CH_USE_WAITEXIT                 TRUE
 +#endif
 +
 +/**
 + * @brief   Semaphores APIs.
 + * @details If enabled then the Semaphores APIs are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_SEMAPHORES) || defined(__DOXYGEN__)
 +#define CH_USE_SEMAPHORES               TRUE
 +#endif
 +
 +/**
 + * @brief   Semaphores queuing mode.
 + * @details If enabled then the threads are enqueued on semaphores by
 + *          priority rather than in FIFO order.
 + *
 + * @note    The default is @p FALSE. Enable this if you have special requirements.
 + * @note    Requires @p CH_USE_SEMAPHORES.
 + */
 +#if !defined(CH_USE_SEMAPHORES_PRIORITY) || defined(__DOXYGEN__)
 +#define CH_USE_SEMAPHORES_PRIORITY      FALSE
 +#endif
 +
 +/**
 + * @brief   Atomic semaphore API.
 + * @details If enabled then the semaphores the @p chSemSignalWait() API
 + *          is included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_SEMAPHORES.
 + */
 +#if !defined(CH_USE_SEMSW) || defined(__DOXYGEN__)
 +#define CH_USE_SEMSW                    TRUE
 +#endif
 +
 +/**
 + * @brief   Mutexes APIs.
 + * @details If enabled then the mutexes APIs are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_MUTEXES) || defined(__DOXYGEN__)
 +#define CH_USE_MUTEXES                  TRUE
 +#endif
 +
 +/**
 + * @brief   Conditional Variables APIs.
 + * @details If enabled then the conditional variables APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_MUTEXES.
 + */
 +#if !defined(CH_USE_CONDVARS) || defined(__DOXYGEN__)
 +#define CH_USE_CONDVARS                 TRUE
 +#endif
 +
 +/**
 + * @brief   Conditional Variables APIs with timeout.
 + * @details If enabled then the conditional variables APIs with timeout
 + *          specification are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_CONDVARS.
 + */
 +#if !defined(CH_USE_CONDVARS_TIMEOUT) || defined(__DOXYGEN__)
 +#define CH_USE_CONDVARS_TIMEOUT         TRUE
 +#endif
 +
 +/**
 + * @brief   Events Flags APIs.
 + * @details If enabled then the event flags APIs are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_EVENTS) || defined(__DOXYGEN__)
 +#define CH_USE_EVENTS                   TRUE
 +#endif
 +
 +/**
 + * @brief   Events Flags APIs with timeout.
 + * @details If enabled then the events APIs with timeout specification
 + *          are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_EVENTS.
 + */
 +#if !defined(CH_USE_EVENTS_TIMEOUT) || defined(__DOXYGEN__)
 +#define CH_USE_EVENTS_TIMEOUT           TRUE
 +#endif
 +
 +/**
 + * @brief   Synchronous Messages APIs.
 + * @details If enabled then the synchronous messages APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_MESSAGES) || defined(__DOXYGEN__)
 +#define CH_USE_MESSAGES                 TRUE
 +#endif
 +
 +/**
 + * @brief   Synchronous Messages queuing mode.
 + * @details If enabled then messages are served by priority rather than in
 + *          FIFO order.
 + *
 + * @note    The default is @p FALSE. Enable this if you have special requirements.
 + * @note    Requires @p CH_USE_MESSAGES.
 + */
 +#if !defined(CH_USE_MESSAGES_PRIORITY) || defined(__DOXYGEN__)
 +#define CH_USE_MESSAGES_PRIORITY        FALSE
 +#endif
 +
 +/**
 + * @brief   Mailboxes APIs.
 + * @details If enabled then the asynchronous messages (mailboxes) APIs are
 + *          included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_SEMAPHORES.
 + */
 +#if !defined(CH_USE_MAILBOXES) || defined(__DOXYGEN__)
 +#define CH_USE_MAILBOXES                TRUE
 +#endif
 +
 +/**
 + * @brief   I/O Queues APIs.
 + * @details If enabled then the I/O queues APIs are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_QUEUES) || defined(__DOXYGEN__)
 +#define CH_USE_QUEUES                   TRUE
 +#endif
 +
 +/**
 + * @brief   Core Memory Manager APIs.
 + * @details If enabled then the core memory manager APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_MEMCORE) || defined(__DOXYGEN__)
 +#define CH_USE_MEMCORE                  TRUE
 +#endif
 +
 +/**
 + * @brief   Heap Allocator APIs.
 + * @details If enabled then the memory heap allocator APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_MEMCORE and either @p CH_USE_MUTEXES or
 + *          @p CH_USE_SEMAPHORES.
 + * @note    Mutexes are recommended.
 + */
 +#if !defined(CH_USE_HEAP) || defined(__DOXYGEN__)
 +#define CH_USE_HEAP                     TRUE
 +#endif
 +
 +/**
 + * @brief   C-runtime allocator.
 + * @details If enabled the the heap allocator APIs just wrap the C-runtime
 + *          @p malloc() and @p free() functions.
 + *
 + * @note    The default is @p FALSE.
 + * @note    Requires @p CH_USE_HEAP.
 + * @note    The C-runtime may or may not require @p CH_USE_MEMCORE, see the
 + *          appropriate documentation.
 + */
 +#if !defined(CH_USE_MALLOC_HEAP) || defined(__DOXYGEN__)
 +#define CH_USE_MALLOC_HEAP              FALSE
 +#endif
 +
 +/**
 + * @brief   Memory Pools Allocator APIs.
 + * @details If enabled then the memory pools allocator APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_MEMPOOLS) || defined(__DOXYGEN__)
 +#define CH_USE_MEMPOOLS                 TRUE
 +#endif
 +
 +/**
 + * @brief   Dynamic Threads APIs.
 + * @details If enabled then the dynamic threads creation APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_WAITEXIT.
 + * @note    Requires @p CH_USE_HEAP and/or @p CH_USE_MEMPOOLS.
 + */
 +#if !defined(CH_USE_DYNAMIC) || defined(__DOXYGEN__)
 +#define CH_USE_DYNAMIC                  TRUE
 +#endif
 +
 +/** @} */
 +
 +/*===========================================================================*/
 +/**
 + * @name Debug options
 + * @{
 + */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Debug option, system state check.
 + * @details If enabled the correct call protocol for system APIs is checked
 + *          at runtime.
 + *
 + * @note    The default is @p FALSE.
 + */
 +#if !defined(CH_DBG_SYSTEM_STATE_CHECK) || defined(__DOXYGEN__)
 +#define CH_DBG_SYSTEM_STATE_CHECK       TRUE
 +#endif
 +
 +/**
 + * @brief   Debug option, parameters checks.
 + * @details If enabled then the checks on the API functions input
 + *          parameters are activated.
 + *
 + * @note    The default is @p FALSE.
 + */
 +#if !defined(CH_DBG_ENABLE_CHECKS) || defined(__DOXYGEN__)
 +#define CH_DBG_ENABLE_CHECKS            TRUE
 +#endif
 +
 +/**
 + * @brief   Debug option, consistency checks.
 + * @details If enabled then all the assertions in the kernel code are
 + *          activated. This includes consistency checks inside the kernel,
 + *          runtime anomalies and port-defined checks.
 + *
 + * @note    The default is @p FALSE.
 + */
 +#if !defined(CH_DBG_ENABLE_ASSERTS) || defined(__DOXYGEN__)
 +#define CH_DBG_ENABLE_ASSERTS           TRUE
 +#endif
 +
 +/**
 + * @brief   Debug option, trace buffer.
 + * @details If enabled then the context switch circular trace buffer is
 + *          activated.
 + *
 + * @note    The default is @p FALSE.
 + */
 +#if !defined(CH_DBG_ENABLE_TRACE) || defined(__DOXYGEN__)
 +#define CH_DBG_ENABLE_TRACE             TRUE
 +#endif
 +
 +/**
 + * @brief   Debug option, stack checks.
 + * @details If enabled then a runtime stack check is performed.
 + *
 + * @note    The default is @p FALSE.
 + * @note    The stack check is performed in a architecture/port dependent way.
 + *          It may not be implemented or some ports.
 + * @note    The default failure mode is to halt the system with the global
 + *          @p panic_msg variable set to @p NULL.
 + */
 +#if !defined(CH_DBG_ENABLE_STACK_CHECK) || defined(__DOXYGEN__)
 +#define CH_DBG_ENABLE_STACK_CHECK       TRUE
 +#endif
 +
 +/**
 + * @brief   Debug option, stacks initialization.
 + * @details If enabled then the threads working area is filled with a byte
 + *          value when a thread is created. This can be useful for the
 + *          runtime measurement of the used stack.
 + *
 + * @note    The default is @p FALSE.
 + */
 +#if !defined(CH_DBG_FILL_THREADS) || defined(__DOXYGEN__)
 +#define CH_DBG_FILL_THREADS             TRUE
 +#endif
 +
 +/**
 + * @brief   Debug option, threads profiling.
 + * @details If enabled then a field is added to the @p Thread structure that
 + *          counts the system ticks occurred while executing the thread.
 + *
 + * @note    The default is @p TRUE.
 + * @note    This debug option is defaulted to TRUE because it is required by
 + *          some test cases into the test suite.
 + */
 +#if !defined(CH_DBG_THREADS_PROFILING) || defined(__DOXYGEN__)
 +#define CH_DBG_THREADS_PROFILING        TRUE
 +#endif
 +
 +/** @} */
 +
 +/*===========================================================================*/
 +/**
 + * @name Kernel hooks
 + * @{
 + */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Threads descriptor structure extension.
 + * @details User fields added to the end of the @p Thread structure.
 + */
 +#if !defined(THREAD_EXT_FIELDS) || defined(__DOXYGEN__)
 +#define THREAD_EXT_FIELDS                                                   \
 +  /* Add threads custom fields here.*/
 +#endif
 +
 +/**
 + * @brief   Threads initialization hook.
 + * @details User initialization code added to the @p chThdInit() API.
 + *
 + * @note    It is invoked from within @p chThdInit() and implicitly from all
 + *          the threads creation APIs.
 + */
 +#if !defined(THREAD_EXT_INIT_HOOK) || defined(__DOXYGEN__)
 +#define THREAD_EXT_INIT_HOOK(tp) {                                          \
 +  /* Add threads initialization code here.*/                                \
 +}
 +#endif
 +
 +/**
 + * @brief   Threads finalization hook.
 + * @details User finalization code added to the @p chThdExit() API.
 + *
 + * @note    It is inserted into lock zone.
 + * @note    It is also invoked when the threads simply return in order to
 + *          terminate.
 + */
 +#if !defined(THREAD_EXT_EXIT_HOOK) || defined(__DOXYGEN__)
 +#define THREAD_EXT_EXIT_HOOK(tp) {                                          \
 +  /* Add threads finalization code here.*/                                  \
 +}
 +#endif
 +
 +/**
 + * @brief   Context switch hook.
 + * @details This hook is invoked just before switching between threads.
 + */
 +#if !defined(THREAD_CONTEXT_SWITCH_HOOK) || defined(__DOXYGEN__)
 +#define THREAD_CONTEXT_SWITCH_HOOK(ntp, otp) {                              \
 +  /* System halt code here.*/                                               \
 +}
 +#endif
 +
 +/**
 + * @brief   Idle Loop hook.
 + * @details This hook is continuously invoked by the idle thread loop.
 + */
 +#if !defined(IDLE_LOOP_HOOK) || defined(__DOXYGEN__)
 +#define IDLE_LOOP_HOOK() {                                                  \
 +  /* Idle loop code here.*/                                                 \
 +}
 +#endif
 +
 +/**
 + * @brief   System tick event hook.
 + * @details This hook is invoked in the system tick handler immediately
 + *          after processing the virtual timers queue.
 + */
 +#if !defined(SYSTEM_TICK_EVENT_HOOK) || defined(__DOXYGEN__)
 +#define SYSTEM_TICK_EVENT_HOOK() {                                          \
 +  /* System tick event code here.*/                                         \
 +}
 +#endif
 +
 +/**
 + * @brief   System halt hook.
 + * @details This hook is invoked in case to a system halting error before
 + *          the system is halted.
 + */
 +#if !defined(SYSTEM_HALT_HOOK) || defined(__DOXYGEN__)
 +#define SYSTEM_HALT_HOOK() {                                                \
 +  /* System halt code here.*/                                               \
 +}
 +#endif
 +
 +/** @} */
 +
 +/*===========================================================================*/
 +/* Port-specific settings (override port settings defaulted in chcore.h).    */
 +/*===========================================================================*/
 +
 +#endif  /* _CHCONF_H_ */
 +
 +/** @} */
 diff --git a/testhal/STM32F4xx/ADC/halconf.h b/testhal/STM32F4xx/ADC/halconf.h new file mode 100644 index 000000000..85a5dbd3b --- /dev/null +++ b/testhal/STM32F4xx/ADC/halconf.h @@ -0,0 +1,312 @@ +/*
 +    ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio
 +
 +    Licensed under the Apache License, Version 2.0 (the "License");
 +    you may not use this file except in compliance with the License.
 +    You may obtain a copy of the License at
 +
 +        http://www.apache.org/licenses/LICENSE-2.0
 +
 +    Unless required by applicable law or agreed to in writing, software
 +    distributed under the License is distributed on an "AS IS" BASIS,
 +    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 +    See the License for the specific language governing permissions and
 +    limitations under the License.
 +*/
 +
 +/**
 + * @file    templates/halconf.h
 + * @brief   HAL configuration header.
 + * @details HAL configuration file, this file allows to enable or disable the
 + *          various device drivers from your application. You may also use
 + *          this file in order to override the device drivers default settings.
 + *
 + * @addtogroup HAL_CONF
 + * @{
 + */
 +
 +#ifndef _HALCONF_H_
 +#define _HALCONF_H_
 +
 +#include "mcuconf.h"
 +
 +/**
 + * @brief   Enables the TM subsystem.
 + */
 +#if !defined(HAL_USE_TM) || defined(__DOXYGEN__)
 +#define HAL_USE_TM                  TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the PAL subsystem.
 + */
 +#if !defined(HAL_USE_PAL) || defined(__DOXYGEN__)
 +#define HAL_USE_PAL                 TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the ADC subsystem.
 + */
 +#if !defined(HAL_USE_ADC) || defined(__DOXYGEN__)
 +#define HAL_USE_ADC                 TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the CAN subsystem.
 + */
 +#if !defined(HAL_USE_CAN) || defined(__DOXYGEN__)
 +#define HAL_USE_CAN                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the EXT subsystem.
 + */
 +#if !defined(HAL_USE_EXT) || defined(__DOXYGEN__)
 +#define HAL_USE_EXT                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the GPT subsystem.
 + */
 +#if !defined(HAL_USE_GPT) || defined(__DOXYGEN__)
 +#define HAL_USE_GPT                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the I2C subsystem.
 + */
 +#if !defined(HAL_USE_I2C) || defined(__DOXYGEN__)
 +#define HAL_USE_I2C                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the ICU subsystem.
 + */
 +#if !defined(HAL_USE_ICU) || defined(__DOXYGEN__)
 +#define HAL_USE_ICU                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the MAC subsystem.
 + */
 +#if !defined(HAL_USE_MAC) || defined(__DOXYGEN__)
 +#define HAL_USE_MAC                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the MMC_SPI subsystem.
 + */
 +#if !defined(HAL_USE_MMC_SPI) || defined(__DOXYGEN__)
 +#define HAL_USE_MMC_SPI             FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the PWM subsystem.
 + */
 +#if !defined(HAL_USE_PWM) || defined(__DOXYGEN__)
 +#define HAL_USE_PWM                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the RTC subsystem.
 + */
 +#if !defined(HAL_USE_RTC) || defined(__DOXYGEN__)
 +#define HAL_USE_RTC                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the SDC subsystem.
 + */
 +#if !defined(HAL_USE_SDC) || defined(__DOXYGEN__)
 +#define HAL_USE_SDC                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the SERIAL subsystem.
 + */
 +#if !defined(HAL_USE_SERIAL) || defined(__DOXYGEN__)
 +#define HAL_USE_SERIAL              FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the SERIAL over USB subsystem.
 + */
 +#if !defined(HAL_USE_SERIAL_USB) || defined(__DOXYGEN__)
 +#define HAL_USE_SERIAL_USB          FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the SPI subsystem.
 + */
 +#if !defined(HAL_USE_SPI) || defined(__DOXYGEN__)
 +#define HAL_USE_SPI                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the UART subsystem.
 + */
 +#if !defined(HAL_USE_UART) || defined(__DOXYGEN__)
 +#define HAL_USE_UART                FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the USB subsystem.
 + */
 +#if !defined(HAL_USE_USB) || defined(__DOXYGEN__)
 +#define HAL_USE_USB                 FALSE
 +#endif
 +
 +/*===========================================================================*/
 +/* ADC driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Enables synchronous APIs.
 + * @note    Disabling this option saves both code and data space.
 + */
 +#if !defined(ADC_USE_WAIT) || defined(__DOXYGEN__)
 +#define ADC_USE_WAIT                TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the @p adcAcquireBus() and @p adcReleaseBus() APIs.
 + * @note    Disabling this option saves both code and data space.
 + */
 +#if !defined(ADC_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
 +#define ADC_USE_MUTUAL_EXCLUSION    TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* CAN driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Sleep mode related APIs inclusion switch.
 + */
 +#if !defined(CAN_USE_SLEEP_MODE) || defined(__DOXYGEN__)
 +#define CAN_USE_SLEEP_MODE          TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* I2C driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Enables the mutual exclusion APIs on the I2C bus.
 + */
 +#if !defined(I2C_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
 +#define I2C_USE_MUTUAL_EXCLUSION    TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* MAC driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Enables an event sources for incoming packets.
 + */
 +#if !defined(MAC_USE_ZERO_COPY) || defined(__DOXYGEN__)
 +#define MAC_USE_ZERO_COPY           FALSE
 +#endif
 +
 +/**
 + * @brief   Enables an event sources for incoming packets.
 + */
 +#if !defined(MAC_USE_EVENTS) || defined(__DOXYGEN__)
 +#define MAC_USE_EVENTS              TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* MMC_SPI driver related settings.                                          */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Delays insertions.
 + * @details If enabled this options inserts delays into the MMC waiting
 + *          routines releasing some extra CPU time for the threads with
 + *          lower priority, this may slow down the driver a bit however.
 + *          This option is recommended also if the SPI driver does not
 + *          use a DMA channel and heavily loads the CPU.
 + */
 +#if !defined(MMC_NICE_WAITING) || defined(__DOXYGEN__)
 +#define MMC_NICE_WAITING            TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* SDC driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Number of initialization attempts before rejecting the card.
 + * @note    Attempts are performed at 10mS intervals.
 + */
 +#if !defined(SDC_INIT_RETRY) || defined(__DOXYGEN__)
 +#define SDC_INIT_RETRY              100
 +#endif
 +
 +/**
 + * @brief   Include support for MMC cards.
 + * @note    MMC support is not yet implemented so this option must be kept
 + *          at @p FALSE.
 + */
 +#if !defined(SDC_MMC_SUPPORT) || defined(__DOXYGEN__)
 +#define SDC_MMC_SUPPORT             FALSE
 +#endif
 +
 +/**
 + * @brief   Delays insertions.
 + * @details If enabled this options inserts delays into the MMC waiting
 + *          routines releasing some extra CPU time for the threads with
 + *          lower priority, this may slow down the driver a bit however.
 + */
 +#if !defined(SDC_NICE_WAITING) || defined(__DOXYGEN__)
 +#define SDC_NICE_WAITING            TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* SERIAL driver related settings.                                           */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Default bit rate.
 + * @details Configuration parameter, this is the baud rate selected for the
 + *          default configuration.
 + */
 +#if !defined(SERIAL_DEFAULT_BITRATE) || defined(__DOXYGEN__)
 +#define SERIAL_DEFAULT_BITRATE      38400
 +#endif
 +
 +/**
 + * @brief   Serial buffers size.
 + * @details Configuration parameter, you can change the depth of the queue
 + *          buffers depending on the requirements of your application.
 + * @note    The default is 64 bytes for both the transmission and receive
 + *          buffers.
 + */
 +#if !defined(SERIAL_BUFFERS_SIZE) || defined(__DOXYGEN__)
 +#define SERIAL_BUFFERS_SIZE         16
 +#endif
 +
 +/*===========================================================================*/
 +/* SPI driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Enables synchronous APIs.
 + * @note    Disabling this option saves both code and data space.
 + */
 +#if !defined(SPI_USE_WAIT) || defined(__DOXYGEN__)
 +#define SPI_USE_WAIT                TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the @p spiAcquireBus() and @p spiReleaseBus() APIs.
 + * @note    Disabling this option saves both code and data space.
 + */
 +#if !defined(SPI_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
 +#define SPI_USE_MUTUAL_EXCLUSION    TRUE
 +#endif
 +
 +#endif /* _HALCONF_H_ */
 +
 +/** @} */
 diff --git a/testhal/STM32F4xx/ADC/main.c b/testhal/STM32F4xx/ADC/main.c new file mode 100644 index 000000000..650347f76 --- /dev/null +++ b/testhal/STM32F4xx/ADC/main.c @@ -0,0 +1,160 @@ +/*
 +    ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio
 +
 +    Licensed under the Apache License, Version 2.0 (the "License");
 +    you may not use this file except in compliance with the License.
 +    You may obtain a copy of the License at
 +
 +        http://www.apache.org/licenses/LICENSE-2.0
 +
 +    Unless required by applicable law or agreed to in writing, software
 +    distributed under the License is distributed on an "AS IS" BASIS,
 +    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 +    See the License for the specific language governing permissions and
 +    limitations under the License.
 +*/
 +
 +#include "ch.h"
 +#include "hal.h"
 +
 +#define ADC_GRP1_NUM_CHANNELS   1
 +#define ADC_GRP1_BUF_DEPTH      8
 +
 +#define ADC_GRP2_NUM_CHANNELS   8
 +#define ADC_GRP2_BUF_DEPTH      16
 +
 +static adcsample_t samples1[ADC_GRP1_NUM_CHANNELS * ADC_GRP1_BUF_DEPTH];
 +static adcsample_t samples2[ADC_GRP2_NUM_CHANNELS * ADC_GRP2_BUF_DEPTH];
 +
 +/*
 + * ADC streaming callback.
 + */
 +size_t nx = 0, ny = 0;
 +static void adccallback(ADCDriver *adcp, adcsample_t *buffer, size_t n) {
 +
 +  (void)adcp;
 +  if (samples2 == buffer) {
 +    nx += n;
 +  }
 +  else {
 +    ny += n;
 +  }
 +}
 +
 +static void adcerrorcallback(ADCDriver *adcp, adcerror_t err) {
 +
 +  (void)adcp;
 +  (void)err;
 +}
 +
 +/*
 + * ADC conversion group.
 + * Mode:        Linear buffer, 8 samples of 1 channel, SW triggered.
 + * Channels:    IN11.
 + */
 +static const ADCConversionGroup adcgrpcfg1 = {
 +  FALSE,
 +  ADC_GRP1_NUM_CHANNELS,
 +  NULL,
 +  adcerrorcallback,
 +  0,                        /* CR1 */
 +  ADC_CR2_SWSTART,          /* CR2 */
 +  ADC_SMPR1_SMP_AN11(ADC_SAMPLE_3),
 +  0,                        /* SMPR2 */
 +  ADC_SQR1_NUM_CH(ADC_GRP1_NUM_CHANNELS),
 +  0,                        /* SQR2 */
 +  ADC_SQR3_SQ1_N(ADC_CHANNEL_IN11)
 +};
 +
 +/*
 + * ADC conversion group.
 + * Mode:        Continuous, 16 samples of 8 channels, SW triggered.
 + * Channels:    IN11, IN12, IN11, IN12, IN11, IN12, Sensor, VRef.
 + */
 +static const ADCConversionGroup adcgrpcfg2 = {
 +  TRUE,
 +  ADC_GRP2_NUM_CHANNELS,
 +  adccallback,
 +  adcerrorcallback,
 +  0,                        /* CR1 */
 +  ADC_CR2_SWSTART,          /* CR2 */
 +  ADC_SMPR1_SMP_AN12(ADC_SAMPLE_56) | ADC_SMPR1_SMP_AN11(ADC_SAMPLE_56) |
 +  ADC_SMPR1_SMP_SENSOR(ADC_SAMPLE_144) | ADC_SMPR1_SMP_VREF(ADC_SAMPLE_144),
 +  0,                        /* SMPR2 */
 +  ADC_SQR1_NUM_CH(ADC_GRP2_NUM_CHANNELS),
 +  ADC_SQR2_SQ8_N(ADC_CHANNEL_SENSOR) | ADC_SQR2_SQ7_N(ADC_CHANNEL_VREFINT),
 +  ADC_SQR3_SQ6_N(ADC_CHANNEL_IN12)   | ADC_SQR3_SQ5_N(ADC_CHANNEL_IN11) |
 +  ADC_SQR3_SQ4_N(ADC_CHANNEL_IN12)   | ADC_SQR3_SQ3_N(ADC_CHANNEL_IN11) |
 +  ADC_SQR3_SQ2_N(ADC_CHANNEL_IN12)   | ADC_SQR3_SQ1_N(ADC_CHANNEL_IN11)
 +};
 +
 +/*
 + * Red LEDs blinker thread, times are in milliseconds.
 + */
 +static WORKING_AREA(waThread1, 128);
 +static msg_t Thread1(void *arg) {
 +
 +  (void)arg;
 +  chRegSetThreadName("blinker");
 +  while (TRUE) {
 +    palSetPad(GPIOD, GPIOD_LED5);
 +    chThdSleepMilliseconds(500);
 +    palClearPad(GPIOD, GPIOD_LED5);
 +    chThdSleepMilliseconds(500);
 +  }
 +}
 +
 +/*
 + * Application entry point.
 + */
 +int main(void) {
 +
 +  /*
 +   * System initializations.
 +   * - HAL initialization, this also initializes the configured device drivers
 +   *   and performs the board-specific initializations.
 +   * - Kernel initialization, the main() function becomes a thread and the
 +   *   RTOS is active.
 +   */
 +  halInit();
 +  chSysInit();
 +
 +  /*
 +   * Setting up analog inputs used by the demo.
 +   */
 +  palSetGroupMode(GPIOC, PAL_PORT_BIT(1) | PAL_PORT_BIT(2),
 +                  0, PAL_MODE_INPUT_ANALOG);
 +
 +  /*
 +   * Creates the blinker thread.
 +   */
 +  chThdCreateStatic(waThread1, sizeof(waThread1), NORMALPRIO, Thread1, NULL);
 +
 +  /*
 +   * Activates the ADC1 driver and the temperature sensor.
 +   */
 +  adcStart(&ADCD1, NULL);
 +  adcSTM32EnableTSVREFE();
 +
 +  /*
 +   * Linear conversion.
 +   */
 +  adcConvert(&ADCD1, &adcgrpcfg1, samples1, ADC_GRP1_BUF_DEPTH);
 +  chThdSleepMilliseconds(1000);
 +
 +  /*
 +   * Starts an ADC continuous conversion.
 +   */
 +  adcStartConversion(&ADCD1, &adcgrpcfg2, samples2, ADC_GRP2_BUF_DEPTH);
 +
 +  /*
 +   * Normal main() thread activity, in this demo it does nothing.
 +   */
 +  while (TRUE) {
 +    if (palReadPad(GPIOA, GPIOA_BUTTON)) {
 +      adcStopConversion(&ADCD1);
 +      adcSTM32DisableTSVREFE();
 +    }
 +    chThdSleepMilliseconds(500);
 +  }
 +}
 diff --git a/testhal/STM32F4xx/ADC/mcuconf.h b/testhal/STM32F4xx/ADC/mcuconf.h new file mode 100644 index 000000000..10e1fae6c --- /dev/null +++ b/testhal/STM32F4xx/ADC/mcuconf.h @@ -0,0 +1,278 @@ +/*
 +    ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio
 +
 +    Licensed under the Apache License, Version 2.0 (the "License");
 +    you may not use this file except in compliance with the License.
 +    You may obtain a copy of the License at
 +
 +        http://www.apache.org/licenses/LICENSE-2.0
 +
 +    Unless required by applicable law or agreed to in writing, software
 +    distributed under the License is distributed on an "AS IS" BASIS,
 +    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 +    See the License for the specific language governing permissions and
 +    limitations under the License.
 +*/
 +
 +/*
 + * STM32F4xx drivers configuration.
 + * The following settings override the default settings present in
 + * the various device driver implementation headers.
 + * Note that the settings for each driver only have effect if the whole
 + * driver is enabled in halconf.h.
 + *
 + * IRQ priorities:
 + * 15...0       Lowest...Highest.
 + *
 + * DMA priorities:
 + * 0...3        Lowest...Highest.
 + */
 +
 +#define STM32F4xx_MCUCONF
 +
 +/*
 + * HAL driver system settings.
 + */
 +#define STM32_NO_INIT                       FALSE
 +#define STM32_HSI_ENABLED                   TRUE
 +#define STM32_LSI_ENABLED                   TRUE
 +#define STM32_HSE_ENABLED                   TRUE
 +#define STM32_LSE_ENABLED                   FALSE
 +#define STM32_CLOCK48_REQUIRED              TRUE
 +#define STM32_SW                            STM32_SW_PLL
 +#define STM32_PLLSRC                        STM32_PLLSRC_HSE
 +#define STM32_PLLM_VALUE                    8
 +#define STM32_PLLN_VALUE                    336
 +#define STM32_PLLP_VALUE                    2
 +#define STM32_PLLQ_VALUE                    7
 +#define STM32_HPRE                          STM32_HPRE_DIV1
 +#define STM32_PPRE1                         STM32_PPRE1_DIV4
 +#define STM32_PPRE2                         STM32_PPRE2_DIV2
 +#define STM32_RTCSEL                        STM32_RTCSEL_LSI
 +#define STM32_RTCPRE_VALUE                  8
 +#define STM32_MCO1SEL                       STM32_MCO1SEL_HSI
 +#define STM32_MCO1PRE                       STM32_MCO1PRE_DIV1
 +#define STM32_MCO2SEL                       STM32_MCO2SEL_SYSCLK
 +#define STM32_MCO2PRE                       STM32_MCO2PRE_DIV5
 +#define STM32_I2SSRC                        STM32_I2SSRC_CKIN
 +#define STM32_PLLI2SN_VALUE                 192
 +#define STM32_PLLI2SR_VALUE                 5
 +#define STM32_VOS                           STM32_VOS_HIGH
 +#define STM32_PVD_ENABLE                    FALSE
 +#define STM32_PLS                           STM32_PLS_LEV0
 +
 +/*
 + * ADC driver system settings.
 + */
 +#define STM32_ADC_ADCPRE                    ADC_CCR_ADCPRE_DIV4
 +#define STM32_ADC_USE_ADC1                  TRUE
 +#define STM32_ADC_USE_ADC2                  TRUE
 +#define STM32_ADC_USE_ADC3                  TRUE
 +#define STM32_ADC_ADC1_DMA_STREAM           STM32_DMA_STREAM_ID(2, 4)
 +#define STM32_ADC_ADC2_DMA_STREAM           STM32_DMA_STREAM_ID(2, 2)
 +#define STM32_ADC_ADC3_DMA_STREAM           STM32_DMA_STREAM_ID(2, 1)
 +#define STM32_ADC_ADC1_DMA_PRIORITY         2
 +#define STM32_ADC_ADC2_DMA_PRIORITY         2
 +#define STM32_ADC_ADC3_DMA_PRIORITY         2
 +#define STM32_ADC_IRQ_PRIORITY              6
 +#define STM32_ADC_ADC1_DMA_IRQ_PRIORITY     6
 +#define STM32_ADC_ADC2_DMA_IRQ_PRIORITY     6
 +#define STM32_ADC_ADC3_DMA_IRQ_PRIORITY     6
 +
 +/*
 + * CAN driver system settings.
 + */
 +#define STM32_CAN_USE_CAN1                  FALSE
 +#define STM32_CAN_USE_CAN2                  FALSE
 +#define STM32_CAN_CAN1_IRQ_PRIORITY         11
 +#define STM32_CAN_CAN2_IRQ_PRIORITY         11
 +
 +/*
 + * EXT driver system settings.
 + */
 +#define STM32_EXT_EXTI0_IRQ_PRIORITY        6
 +#define STM32_EXT_EXTI1_IRQ_PRIORITY        6
 +#define STM32_EXT_EXTI2_IRQ_PRIORITY        6
 +#define STM32_EXT_EXTI3_IRQ_PRIORITY        6
 +#define STM32_EXT_EXTI4_IRQ_PRIORITY        6
 +#define STM32_EXT_EXTI5_9_IRQ_PRIORITY      6
 +#define STM32_EXT_EXTI10_15_IRQ_PRIORITY    6
 +#define STM32_EXT_EXTI16_IRQ_PRIORITY       6
 +#define STM32_EXT_EXTI17_IRQ_PRIORITY       15
 +#define STM32_EXT_EXTI18_IRQ_PRIORITY       6
 +#define STM32_EXT_EXTI19_IRQ_PRIORITY       6
 +#define STM32_EXT_EXTI20_IRQ_PRIORITY       6
 +#define STM32_EXT_EXTI21_IRQ_PRIORITY       15
 +#define STM32_EXT_EXTI22_IRQ_PRIORITY       15
 +
 +/*
 + * GPT driver system settings.
 + */
 +#define STM32_GPT_USE_TIM1                  FALSE
 +#define STM32_GPT_USE_TIM2                  FALSE
 +#define STM32_GPT_USE_TIM3                  FALSE
 +#define STM32_GPT_USE_TIM4                  FALSE
 +#define STM32_GPT_USE_TIM5                  FALSE
 +#define STM32_GPT_USE_TIM6                  FALSE
 +#define STM32_GPT_USE_TIM7                  FALSE
 +#define STM32_GPT_USE_TIM8                  FALSE
 +#define STM32_GPT_USE_TIM9                  FALSE
 +#define STM32_GPT_USE_TIM11                 FALSE
 +#define STM32_GPT_USE_TIM12                 FALSE
 +#define STM32_GPT_USE_TIM14                 FALSE
 +#define STM32_GPT_TIM1_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM2_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM3_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM4_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM5_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM6_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM7_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM8_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM9_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM11_IRQ_PRIORITY        7
 +#define STM32_GPT_TIM12_IRQ_PRIORITY        7
 +#define STM32_GPT_TIM14_IRQ_PRIORITY        7
 +
 +/*
 + * I2C driver system settings.
 + */
 +#define STM32_I2C_USE_I2C1                  FALSE
 +#define STM32_I2C_USE_I2C2                  FALSE
 +#define STM32_I2C_USE_I2C3                  FALSE
 +#define STM32_I2C_I2C1_RX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 0)
 +#define STM32_I2C_I2C1_TX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 6)
 +#define STM32_I2C_I2C2_RX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 2)
 +#define STM32_I2C_I2C2_TX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 7)
 +#define STM32_I2C_I2C3_RX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 2)
 +#define STM32_I2C_I2C3_TX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 4)
 +#define STM32_I2C_I2C1_IRQ_PRIORITY         5
 +#define STM32_I2C_I2C2_IRQ_PRIORITY         5
 +#define STM32_I2C_I2C3_IRQ_PRIORITY         5
 +#define STM32_I2C_I2C1_DMA_PRIORITY         3
 +#define STM32_I2C_I2C2_DMA_PRIORITY         3
 +#define STM32_I2C_I2C3_DMA_PRIORITY         3
 +#define STM32_I2C_I2C1_DMA_ERROR_HOOK()     chSysHalt()
 +#define STM32_I2C_I2C2_DMA_ERROR_HOOK()     chSysHalt()
 +#define STM32_I2C_I2C3_DMA_ERROR_HOOK()     chSysHalt()
 +
 +/*
 + * ICU driver system settings.
 + */
 +#define STM32_ICU_USE_TIM1                  FALSE
 +#define STM32_ICU_USE_TIM2                  FALSE
 +#define STM32_ICU_USE_TIM3                  FALSE
 +#define STM32_ICU_USE_TIM4                  FALSE
 +#define STM32_ICU_USE_TIM5                  FALSE
 +#define STM32_ICU_USE_TIM8                  FALSE
 +#define STM32_ICU_USE_TIM9                  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
 +#define STM32_ICU_TIM8_IRQ_PRIORITY         7
 +#define STM32_ICU_TIM9_IRQ_PRIORITY         7
 +
 +/*
 + * MAC driver system settings.
 + */
 +#define STM32_MAC_TRANSMIT_BUFFERS          2
 +#define STM32_MAC_RECEIVE_BUFFERS           4
 +#define STM32_MAC_BUFFERS_SIZE              1522
 +#define STM32_MAC_PHY_TIMEOUT               100
 +#define STM32_MAC_ETH1_CHANGE_PHY_STATE     TRUE
 +#define STM32_MAC_ETH1_IRQ_PRIORITY         13
 +#define STM32_MAC_IP_CHECKSUM_OFFLOAD       0
 +
 +/*
 + * PWM driver system settings.
 + */
 +#define STM32_PWM_USE_ADVANCED              FALSE
 +#define STM32_PWM_USE_TIM1                  FALSE
 +#define STM32_PWM_USE_TIM2                  FALSE
 +#define STM32_PWM_USE_TIM3                  FALSE
 +#define STM32_PWM_USE_TIM4                  FALSE
 +#define STM32_PWM_USE_TIM5                  FALSE
 +#define STM32_PWM_USE_TIM8                  FALSE
 +#define STM32_PWM_USE_TIM9                  FALSE
 +#define STM32_PWM_TIM1_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM2_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM3_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM4_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM5_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM8_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM9_IRQ_PRIORITY         7
 +
 +/*
 + * SERIAL driver system settings.
 + */
 +#define STM32_SERIAL_USE_USART1             FALSE
 +#define STM32_SERIAL_USE_USART2             FALSE
 +#define STM32_SERIAL_USE_USART3             FALSE
 +#define STM32_SERIAL_USE_UART4              FALSE
 +#define STM32_SERIAL_USE_UART5              FALSE
 +#define STM32_SERIAL_USE_USART6             FALSE
 +#define STM32_SERIAL_USART1_PRIORITY        12
 +#define STM32_SERIAL_USART2_PRIORITY        12
 +#define STM32_SERIAL_USART3_PRIORITY        12
 +#define STM32_SERIAL_UART4_PRIORITY         12
 +#define STM32_SERIAL_UART5_PRIORITY         12
 +#define STM32_SERIAL_USART6_PRIORITY        12
 +
 +/*
 + * SPI driver system settings.
 + */
 +#define STM32_SPI_USE_SPI1                  FALSE
 +#define STM32_SPI_USE_SPI2                  FALSE
 +#define STM32_SPI_USE_SPI3                  FALSE
 +#define STM32_SPI_SPI1_RX_DMA_STREAM        STM32_DMA_STREAM_ID(2, 0)
 +#define STM32_SPI_SPI1_TX_DMA_STREAM        STM32_DMA_STREAM_ID(2, 3)
 +#define STM32_SPI_SPI2_RX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 3)
 +#define STM32_SPI_SPI2_TX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 4)
 +#define STM32_SPI_SPI3_RX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 0)
 +#define STM32_SPI_SPI3_TX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 7)
 +#define STM32_SPI_SPI1_DMA_PRIORITY         1
 +#define STM32_SPI_SPI2_DMA_PRIORITY         1
 +#define STM32_SPI_SPI3_DMA_PRIORITY         1
 +#define STM32_SPI_SPI1_IRQ_PRIORITY         10
 +#define STM32_SPI_SPI2_IRQ_PRIORITY         10
 +#define STM32_SPI_SPI3_IRQ_PRIORITY         10
 +#define STM32_SPI_DMA_ERROR_HOOK(spip)      chSysHalt()
 +
 +/*
 + * UART driver system settings.
 + */
 +#define STM32_UART_USE_USART1               FALSE
 +#define STM32_UART_USE_USART2               FALSE
 +#define STM32_UART_USE_USART3               FALSE
 +#define STM32_UART_USE_USART6               FALSE
 +#define STM32_UART_USART1_RX_DMA_STREAM     STM32_DMA_STREAM_ID(2, 5)
 +#define STM32_UART_USART1_TX_DMA_STREAM     STM32_DMA_STREAM_ID(2, 7)
 +#define STM32_UART_USART2_RX_DMA_STREAM     STM32_DMA_STREAM_ID(1, 5)
 +#define STM32_UART_USART2_TX_DMA_STREAM     STM32_DMA_STREAM_ID(1, 6)
 +#define STM32_UART_USART3_RX_DMA_STREAM     STM32_DMA_STREAM_ID(1, 1)
 +#define STM32_UART_USART3_TX_DMA_STREAM     STM32_DMA_STREAM_ID(1, 3)
 +#define STM32_UART_USART6_RX_DMA_STREAM     STM32_DMA_STREAM_ID(2, 2)
 +#define STM32_UART_USART6_TX_DMA_STREAM     STM32_DMA_STREAM_ID(2, 7)
 +#define STM32_UART_USART1_IRQ_PRIORITY      12
 +#define STM32_UART_USART2_IRQ_PRIORITY      12
 +#define STM32_UART_USART3_IRQ_PRIORITY      12
 +#define STM32_UART_USART6_IRQ_PRIORITY      12
 +#define STM32_UART_USART1_DMA_PRIORITY      0
 +#define STM32_UART_USART2_DMA_PRIORITY      0
 +#define STM32_UART_USART3_DMA_PRIORITY      0
 +#define STM32_UART_USART6_DMA_PRIORITY      0
 +#define STM32_UART_DMA_ERROR_HOOK(uartp)    chSysHalt()
 +
 +/*
 + * USB driver system settings.
 + */
 +#define STM32_USB_USE_OTG1                  FALSE
 +#define STM32_USB_USE_OTG2                  FALSE
 +#define STM32_USB_OTG1_IRQ_PRIORITY         14
 +#define STM32_USB_OTG2_IRQ_PRIORITY         14
 +#define STM32_USB_OTG1_RX_FIFO_SIZE         512
 +#define STM32_USB_OTG2_RX_FIFO_SIZE         1024
 +#define STM32_USB_OTG_THREAD_PRIO           LOWPRIO
 +#define STM32_USB_OTG_THREAD_STACK_SIZE     128
 +#define STM32_USB_OTGFIFO_FILL_BASEPRI      0
 diff --git a/testhal/STM32F4xx/ADC/readme.txt b/testhal/STM32F4xx/ADC/readme.txt new file mode 100644 index 000000000..af029649b --- /dev/null +++ b/testhal/STM32F4xx/ADC/readme.txt @@ -0,0 +1,30 @@ +*****************************************************************************
 +** ChibiOS/RT HAL - ADC driver demo for STM32F4xx.                         **
 +*****************************************************************************
 +
 +** TARGET **
 +
 +The demo runs on an STMicroelectronics STM32F4-Discovery board.
 +
 +** The Demo **
 +
 +The application demonstrates the use of the STM32F4xx ADC driver.
 +
 +** Board Setup **
 +
 +- Connect PC1 to 3.3V and PC2 to GND for analog measurements.
 +
 +** Build Procedure **
 +
 +The demo has been tested using the free Codesourcery GCC-based toolchain
 +and YAGARTO.
 +Just modify the TRGT line in the makefile in order to use different GCC ports.
 +
 +** Notes **
 +
 +Some files used by the demo are not part of ChibiOS/RT but are copyright of
 +ST Microelectronics and are licensed under a different license.
 +Also note that not all the files present in the ST library are distributed
 +with ChibiOS/RT, you can find the whole library on the ST web site:
 +
 +                             http://www.st.com
 diff --git a/testhal/STM32F4xx/CAN/.cproject b/testhal/STM32F4xx/CAN/.cproject new file mode 100644 index 000000000..41abe3d02 --- /dev/null +++ b/testhal/STM32F4xx/CAN/.cproject @@ -0,0 +1,51 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?>
 +<?fileVersion 4.0.0?>
 +
 +<cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
 +	<storageModule moduleId="org.eclipse.cdt.core.settings">
 +		<cconfiguration id="0.365230168">
 +			<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="0.365230168" moduleId="org.eclipse.cdt.core.settings" name="Default">
 +				<externalSettings/>
 +				<extensions>
 +					<extension id="org.eclipse.cdt.core.VCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 +					<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 +					<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
 +					<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 +					<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 +					<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 +				</extensions>
 +			</storageModule>
 +			<storageModule moduleId="cdtBuildSystem" version="4.0.0">
 +				<configuration artifactName="${ProjName}" buildProperties="" description="" id="0.365230168" name="Default" parent="org.eclipse.cdt.build.core.prefbase.cfg">
 +					<folderInfo id="0.365230168." name="/" resourcePath="">
 +						<toolChain id="org.eclipse.cdt.build.core.prefbase.toolchain.1592595440" name="No ToolChain" resourceTypeBasedDiscovery="false" superClass="org.eclipse.cdt.build.core.prefbase.toolchain">
 +							<targetPlatform id="org.eclipse.cdt.build.core.prefbase.toolchain.1592595440.637356496" name=""/>
 +							<builder autoBuildTarget="all" cleanBuildTarget="clean" enableAutoBuild="false" enableCleanBuild="true" enabledIncrementalBuild="true" id="org.eclipse.cdt.build.core.settings.default.builder.1732344953" incrementalBuildTarget="all" keepEnvironmentInBuildfile="false" managedBuildOn="false" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="org.eclipse.cdt.build.core.settings.default.builder"/>
 +							<tool id="org.eclipse.cdt.build.core.settings.holder.libs.1315058086" name="holder for library settings" superClass="org.eclipse.cdt.build.core.settings.holder.libs"/>
 +							<tool id="org.eclipse.cdt.build.core.settings.holder.825931904" name="Assembly" superClass="org.eclipse.cdt.build.core.settings.holder">
 +								<inputType id="org.eclipse.cdt.build.core.settings.holder.inType.1011311385" languageId="org.eclipse.cdt.core.assembly" languageName="Assembly" sourceContentType="org.eclipse.cdt.core.asmSource" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
 +							</tool>
 +							<tool id="org.eclipse.cdt.build.core.settings.holder.337458123" name="GNU C++" superClass="org.eclipse.cdt.build.core.settings.holder">
 +								<inputType id="org.eclipse.cdt.build.core.settings.holder.inType.262921049" languageId="org.eclipse.cdt.core.g++" languageName="GNU C++" sourceContentType="org.eclipse.cdt.core.cxxSource,org.eclipse.cdt.core.cxxHeader" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
 +							</tool>
 +							<tool id="org.eclipse.cdt.build.core.settings.holder.907816742" name="GNU C" superClass="org.eclipse.cdt.build.core.settings.holder">
 +								<inputType id="org.eclipse.cdt.build.core.settings.holder.inType.480793473" languageId="org.eclipse.cdt.core.gcc" languageName="GNU C" sourceContentType="org.eclipse.cdt.core.cSource,org.eclipse.cdt.core.cHeader" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
 +							</tool>
 +						</toolChain>
 +					</folderInfo>
 +				</configuration>
 +			</storageModule>
 +			<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
 +		</cconfiguration>
 +	</storageModule>
 +	<storageModule moduleId="cdtBuildSystem" version="4.0.0">
 +		<project id="STM32F4xx-CAN.null.1829068891" name="STM32F4xx-CAN"/>
 +	</storageModule>
 +	<storageModule moduleId="scannerConfiguration">
 +		<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
 +		<scannerConfigBuildInfo instanceId="0.365230168">
 +			<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile"/>
 +		</scannerConfigBuildInfo>
 +	</storageModule>
 +	<storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
 +</cproject>
 diff --git a/testhal/STM32F4xx/CAN/.project b/testhal/STM32F4xx/CAN/.project new file mode 100644 index 000000000..3c1df9502 --- /dev/null +++ b/testhal/STM32F4xx/CAN/.project @@ -0,0 +1,90 @@ +<?xml version="1.0" encoding="UTF-8"?>
 +<projectDescription>
 +	<name>STM32F4xx-CAN</name>
 +	<comment></comment>
 +	<projects>
 +	</projects>
 +	<buildSpec>
 +		<buildCommand>
 +			<name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
 +			<triggers>clean,full,incremental,</triggers>
 +			<arguments>
 +				<dictionary>
 +					<key>?name?</key>
 +					<value></value>
 +				</dictionary>
 +				<dictionary>
 +					<key>org.eclipse.cdt.make.core.append_environment</key>
 +					<value>true</value>
 +				</dictionary>
 +				<dictionary>
 +					<key>org.eclipse.cdt.make.core.autoBuildTarget</key>
 +					<value>all</value>
 +				</dictionary>
 +				<dictionary>
 +					<key>org.eclipse.cdt.make.core.buildArguments</key>
 +					<value>-j1</value>
 +				</dictionary>
 +				<dictionary>
 +					<key>org.eclipse.cdt.make.core.buildCommand</key>
 +					<value>make</value>
 +				</dictionary>
 +				<dictionary>
 +					<key>org.eclipse.cdt.make.core.cleanBuildTarget</key>
 +					<value>clean</value>
 +				</dictionary>
 +				<dictionary>
 +					<key>org.eclipse.cdt.make.core.contents</key>
 +					<value>org.eclipse.cdt.make.core.activeConfigSettings</value>
 +				</dictionary>
 +				<dictionary>
 +					<key>org.eclipse.cdt.make.core.enableAutoBuild</key>
 +					<value>false</value>
 +				</dictionary>
 +				<dictionary>
 +					<key>org.eclipse.cdt.make.core.enableCleanBuild</key>
 +					<value>true</value>
 +				</dictionary>
 +				<dictionary>
 +					<key>org.eclipse.cdt.make.core.enableFullBuild</key>
 +					<value>true</value>
 +				</dictionary>
 +				<dictionary>
 +					<key>org.eclipse.cdt.make.core.fullBuildTarget</key>
 +					<value>all</value>
 +				</dictionary>
 +				<dictionary>
 +					<key>org.eclipse.cdt.make.core.stopOnError</key>
 +					<value>true</value>
 +				</dictionary>
 +				<dictionary>
 +					<key>org.eclipse.cdt.make.core.useDefaultBuildCmd</key>
 +					<value>true</value>
 +				</dictionary>
 +			</arguments>
 +		</buildCommand>
 +		<buildCommand>
 +			<name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
 +			<triggers>full,incremental,</triggers>
 +			<arguments>
 +			</arguments>
 +		</buildCommand>
 +	</buildSpec>
 +	<natures>
 +		<nature>org.eclipse.cdt.core.cnature</nature>
 +		<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
 +		<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
 +	</natures>
 +	<linkedResources>
 +		<link>
 +			<name>board</name>
 +			<type>2</type>
 +			<locationURI>CHIBIOS/boards/ST_STM32F4_DISCOVERY</locationURI>
 +		</link>
 +		<link>
 +			<name>os</name>
 +			<type>2</type>
 +			<locationURI>CHIBIOS/os</locationURI>
 +		</link>
 +	</linkedResources>
 +</projectDescription>
 diff --git a/testhal/STM32F4xx/CAN/Makefile b/testhal/STM32F4xx/CAN/Makefile new file mode 100644 index 000000000..62d0516f0 --- /dev/null +++ b/testhal/STM32F4xx/CAN/Makefile @@ -0,0 +1,221 @@ +##############################################################################
 +# Build global options
 +# NOTE: Can be overridden externally.
 +#
 +
 +# Compiler options here.
 +ifeq ($(USE_OPT),)
 +  USE_OPT = -O2 -ggdb -fomit-frame-pointer -falign-functions=16
 +endif
 +
 +# C specific options here (added to USE_OPT).
 +ifeq ($(USE_COPT),)
 +  USE_COPT = 
 +endif
 +
 +# C++ specific options here (added to USE_OPT).
 +ifeq ($(USE_CPPOPT),)
 +  USE_CPPOPT = -fno-rtti
 +endif
 +
 +# Enable this if you want the linker to remove unused code and data
 +ifeq ($(USE_LINK_GC),)
 +  USE_LINK_GC = yes
 +endif
 +
 +# If enabled, this option allows to compile the application in THUMB mode.
 +ifeq ($(USE_THUMB),)
 +  USE_THUMB = yes
 +endif
 +
 +# Enable this if you want to see the full log while compiling.
 +ifeq ($(USE_VERBOSE_COMPILE),)
 +  USE_VERBOSE_COMPILE = no
 +endif
 +
 +#
 +# Build global options
 +##############################################################################
 +
 +##############################################################################
 +# Architecture or project specific options
 +#
 +
 +# Enables the use of FPU on Cortex-M4.
 +# Enable this if you really want to use the STM FWLib.
 +ifeq ($(USE_FPU),)
 +  USE_FPU = no
 +endif
 +
 +# Enable this if you really want to use the STM FWLib.
 +ifeq ($(USE_FWLIB),)
 +  USE_FWLIB = no
 +endif
 +
 +#
 +# Architecture or project specific options
 +##############################################################################
 +
 +##############################################################################
 +# Project, sources and paths
 +#
 +
 +# Define project name here
 +PROJECT = ch
 +
 +# Imported source files and paths
 +CHIBIOS = ../../..
 +include $(CHIBIOS)/boards/ST_STM32F4_DISCOVERY/board.mk
 +include $(CHIBIOS)/os/hal/platforms/STM32F4xx/platform.mk
 +include $(CHIBIOS)/os/hal/hal.mk
 +include $(CHIBIOS)/os/ports/GCC/ARMCMx/STM32F4xx/port.mk
 +include $(CHIBIOS)/os/kernel/kernel.mk
 +include $(CHIBIOS)/test/test.mk
 +
 +# Define linker script file here
 +LDSCRIPT= $(PORTLD)/STM32F407xG.ld
 +#LDSCRIPT= $(PORTLD)/STM32F407xG_CCM.ld
 +
 +# C sources that can be compiled in ARM or THUMB mode depending on the global
 +# setting.
 +CSRC = $(PORTSRC) \
 +       $(KERNSRC) \
 +       $(TESTSRC) \
 +       $(HALSRC) \
 +       $(PLATFORMSRC) \
 +       $(BOARDSRC) \
 +       main.c
 +
 +# C++ sources that can be compiled in ARM or THUMB mode depending on the global
 +# setting.
 +CPPSRC =
 +
 +# C sources to be compiled in ARM mode regardless of the global setting.
 +# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler
 +#       option that results in lower performance and larger code size.
 +ACSRC =
 +
 +# C++ sources to be compiled in ARM mode regardless of the global setting.
 +# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler
 +#       option that results in lower performance and larger code size.
 +ACPPSRC =
 +
 +# C sources to be compiled in THUMB mode regardless of the global setting.
 +# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler
 +#       option that results in lower performance and larger code size.
 +TCSRC =
 +
 +# C sources to be compiled in THUMB mode regardless of the global setting.
 +# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler
 +#       option that results in lower performance and larger code size.
 +TCPPSRC =
 +
 +# List ASM source files here
 +ASMSRC = $(PORTASM)
 +
 +INCDIR = $(PORTINC) $(KERNINC) $(TESTINC) \
 +         $(HALINC) $(PLATFORMINC) $(BOARDINC) \
 +         $(CHIBIOS)/os/various
 +
 +#
 +# Project, sources and paths
 +##############################################################################
 +
 +##############################################################################
 +# Compiler settings
 +#
 +
 +MCU  = cortex-m4
 +
 +#TRGT = arm-elf-
 +TRGT = arm-none-eabi-
 +CC   = $(TRGT)gcc
 +CPPC = $(TRGT)g++
 +# Enable loading with g++ only if you need C++ runtime support.
 +# NOTE: You can use C++ even without C++ support if you are careful. C++
 +#       runtime support makes code size explode.
 +LD   = $(TRGT)gcc
 +#LD   = $(TRGT)g++
 +CP   = $(TRGT)objcopy
 +AS   = $(TRGT)gcc -x assembler-with-cpp
 +OD   = $(TRGT)objdump
 +HEX  = $(CP) -O ihex
 +BIN  = $(CP) -O binary
 +
 +# ARM-specific options here
 +AOPT =
 +
 +# THUMB-specific options here
 +TOPT = -mthumb -DTHUMB
 +
 +# Define C warning options here
 +CWARN = -Wall -Wextra -Wstrict-prototypes
 +
 +# Define C++ warning options here
 +CPPWARN = -Wall -Wextra
 +
 +#
 +# Compiler settings
 +##############################################################################
 +
 +##############################################################################
 +# Start of default section
 +#
 +
 +# List all default C defines here, like -D_DEBUG=1
 +DDEFS =
 +
 +# List all default ASM defines here, like -D_DEBUG=1
 +DADEFS =
 +
 +# List all default directories to look for include files here
 +DINCDIR =
 +
 +# List the default directory to look for the libraries here
 +DLIBDIR =
 +
 +# List all default libraries here
 +DLIBS =
 +
 +#
 +# End of default section
 +##############################################################################
 +
 +##############################################################################
 +# Start of user section
 +#
 +
 +# List all user C define here, like -D_DEBUG=1
 +UDEFS =
 +
 +# Define ASM defines here
 +UADEFS =
 +
 +# List all user directories here
 +UINCDIR =
 +
 +# List the user directory to look for the libraries here
 +ULIBDIR =
 +
 +# List all user libraries here
 +ULIBS =
 +
 +#
 +# End of user defines
 +##############################################################################
 +
 +ifeq ($(USE_FPU),yes)
 +  USE_OPT += -mfloat-abi=softfp -mfpu=fpv4-sp-d16 -fsingle-precision-constant
 +  DDEFS += -DCORTEX_USE_FPU=TRUE
 +else
 +  DDEFS += -DCORTEX_USE_FPU=FALSE
 +endif
 +
 +ifeq ($(USE_FWLIB),yes)
 +  include $(CHIBIOS)/ext/stm32lib/stm32lib.mk
 +  CSRC += $(STM32SRC)
 +  INCDIR += $(STM32INC)
 +  USE_OPT += -DUSE_STDPERIPH_DRIVER
 +endif
 +
 +include $(CHIBIOS)/os/ports/GCC/ARMCMx/rules.mk
 diff --git a/testhal/STM32F4xx/CAN/chconf.h b/testhal/STM32F4xx/CAN/chconf.h new file mode 100644 index 000000000..f943ea80c --- /dev/null +++ b/testhal/STM32F4xx/CAN/chconf.h @@ -0,0 +1,531 @@ +/*
 +    ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio
 +
 +    Licensed under the Apache License, Version 2.0 (the "License");
 +    you may not use this file except in compliance with the License.
 +    You may obtain a copy of the License at
 +
 +        http://www.apache.org/licenses/LICENSE-2.0
 +
 +    Unless required by applicable law or agreed to in writing, software
 +    distributed under the License is distributed on an "AS IS" BASIS,
 +    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 +    See the License for the specific language governing permissions and
 +    limitations under the License.
 +*/
 +
 +/**
 + * @file    templates/chconf.h
 + * @brief   Configuration file template.
 + * @details A copy of this file must be placed in each project directory, it
 + *          contains the application specific kernel settings.
 + *
 + * @addtogroup config
 + * @details Kernel related settings and hooks.
 + * @{
 + */
 +
 +#ifndef _CHCONF_H_
 +#define _CHCONF_H_
 +
 +/*===========================================================================*/
 +/**
 + * @name Kernel parameters and options
 + * @{
 + */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   System tick frequency.
 + * @details Frequency of the system timer that drives the system ticks. This
 + *          setting also defines the system tick time unit.
 + */
 +#if !defined(CH_FREQUENCY) || defined(__DOXYGEN__)
 +#define CH_FREQUENCY                    1000
 +#endif
 +
 +/**
 + * @brief   Round robin interval.
 + * @details This constant is the number of system ticks allowed for the
 + *          threads before preemption occurs. Setting this value to zero
 + *          disables the preemption for threads with equal priority and the
 + *          round robin becomes cooperative. Note that higher priority
 + *          threads can still preempt, the kernel is always preemptive.
 + *
 + * @note    Disabling the round robin preemption makes the kernel more compact
 + *          and generally faster.
 + */
 +#if !defined(CH_TIME_QUANTUM) || defined(__DOXYGEN__)
 +#define CH_TIME_QUANTUM                 20
 +#endif
 +
 +/**
 + * @brief   Managed RAM size.
 + * @details Size of the RAM area to be managed by the OS. If set to zero
 + *          then the whole available RAM is used. The core memory is made
 + *          available to the heap allocator and/or can be used directly through
 + *          the simplified core memory allocator.
 + *
 + * @note    In order to let the OS manage the whole RAM the linker script must
 + *          provide the @p __heap_base__ and @p __heap_end__ symbols.
 + * @note    Requires @p CH_USE_MEMCORE.
 + */
 +#if !defined(CH_MEMCORE_SIZE) || defined(__DOXYGEN__)
 +#define CH_MEMCORE_SIZE                 0
 +#endif
 +
 +/**
 + * @brief   Idle thread automatic spawn suppression.
 + * @details When this option is activated the function @p chSysInit()
 + *          does not spawn the idle thread automatically. The application has
 + *          then the responsibility to do one of the following:
 + *          - Spawn a custom idle thread at priority @p IDLEPRIO.
 + *          - Change the main() thread priority to @p IDLEPRIO then enter
 + *            an endless loop. In this scenario the @p main() thread acts as
 + *            the idle thread.
 + *          .
 + * @note    Unless an idle thread is spawned the @p main() thread must not
 + *          enter a sleep state.
 + */
 +#if !defined(CH_NO_IDLE_THREAD) || defined(__DOXYGEN__)
 +#define CH_NO_IDLE_THREAD               FALSE
 +#endif
 +
 +/** @} */
 +
 +/*===========================================================================*/
 +/**
 + * @name Performance options
 + * @{
 + */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   OS optimization.
 + * @details If enabled then time efficient rather than space efficient code
 + *          is used when two possible implementations exist.
 + *
 + * @note    This is not related to the compiler optimization options.
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_OPTIMIZE_SPEED) || defined(__DOXYGEN__)
 +#define CH_OPTIMIZE_SPEED               TRUE
 +#endif
 +
 +/** @} */
 +
 +/*===========================================================================*/
 +/**
 + * @name Subsystem options
 + * @{
 + */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Threads registry APIs.
 + * @details If enabled then the registry APIs are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_REGISTRY) || defined(__DOXYGEN__)
 +#define CH_USE_REGISTRY                 TRUE
 +#endif
 +
 +/**
 + * @brief   Threads synchronization APIs.
 + * @details If enabled then the @p chThdWait() function is included in
 + *          the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_WAITEXIT) || defined(__DOXYGEN__)
 +#define CH_USE_WAITEXIT                 TRUE
 +#endif
 +
 +/**
 + * @brief   Semaphores APIs.
 + * @details If enabled then the Semaphores APIs are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_SEMAPHORES) || defined(__DOXYGEN__)
 +#define CH_USE_SEMAPHORES               TRUE
 +#endif
 +
 +/**
 + * @brief   Semaphores queuing mode.
 + * @details If enabled then the threads are enqueued on semaphores by
 + *          priority rather than in FIFO order.
 + *
 + * @note    The default is @p FALSE. Enable this if you have special requirements.
 + * @note    Requires @p CH_USE_SEMAPHORES.
 + */
 +#if !defined(CH_USE_SEMAPHORES_PRIORITY) || defined(__DOXYGEN__)
 +#define CH_USE_SEMAPHORES_PRIORITY      FALSE
 +#endif
 +
 +/**
 + * @brief   Atomic semaphore API.
 + * @details If enabled then the semaphores the @p chSemSignalWait() API
 + *          is included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_SEMAPHORES.
 + */
 +#if !defined(CH_USE_SEMSW) || defined(__DOXYGEN__)
 +#define CH_USE_SEMSW                    TRUE
 +#endif
 +
 +/**
 + * @brief   Mutexes APIs.
 + * @details If enabled then the mutexes APIs are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_MUTEXES) || defined(__DOXYGEN__)
 +#define CH_USE_MUTEXES                  TRUE
 +#endif
 +
 +/**
 + * @brief   Conditional Variables APIs.
 + * @details If enabled then the conditional variables APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_MUTEXES.
 + */
 +#if !defined(CH_USE_CONDVARS) || defined(__DOXYGEN__)
 +#define CH_USE_CONDVARS                 TRUE
 +#endif
 +
 +/**
 + * @brief   Conditional Variables APIs with timeout.
 + * @details If enabled then the conditional variables APIs with timeout
 + *          specification are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_CONDVARS.
 + */
 +#if !defined(CH_USE_CONDVARS_TIMEOUT) || defined(__DOXYGEN__)
 +#define CH_USE_CONDVARS_TIMEOUT         TRUE
 +#endif
 +
 +/**
 + * @brief   Events Flags APIs.
 + * @details If enabled then the event flags APIs are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_EVENTS) || defined(__DOXYGEN__)
 +#define CH_USE_EVENTS                   TRUE
 +#endif
 +
 +/**
 + * @brief   Events Flags APIs with timeout.
 + * @details If enabled then the events APIs with timeout specification
 + *          are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_EVENTS.
 + */
 +#if !defined(CH_USE_EVENTS_TIMEOUT) || defined(__DOXYGEN__)
 +#define CH_USE_EVENTS_TIMEOUT           TRUE
 +#endif
 +
 +/**
 + * @brief   Synchronous Messages APIs.
 + * @details If enabled then the synchronous messages APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_MESSAGES) || defined(__DOXYGEN__)
 +#define CH_USE_MESSAGES                 TRUE
 +#endif
 +
 +/**
 + * @brief   Synchronous Messages queuing mode.
 + * @details If enabled then messages are served by priority rather than in
 + *          FIFO order.
 + *
 + * @note    The default is @p FALSE. Enable this if you have special requirements.
 + * @note    Requires @p CH_USE_MESSAGES.
 + */
 +#if !defined(CH_USE_MESSAGES_PRIORITY) || defined(__DOXYGEN__)
 +#define CH_USE_MESSAGES_PRIORITY        FALSE
 +#endif
 +
 +/**
 + * @brief   Mailboxes APIs.
 + * @details If enabled then the asynchronous messages (mailboxes) APIs are
 + *          included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_SEMAPHORES.
 + */
 +#if !defined(CH_USE_MAILBOXES) || defined(__DOXYGEN__)
 +#define CH_USE_MAILBOXES                TRUE
 +#endif
 +
 +/**
 + * @brief   I/O Queues APIs.
 + * @details If enabled then the I/O queues APIs are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_QUEUES) || defined(__DOXYGEN__)
 +#define CH_USE_QUEUES                   TRUE
 +#endif
 +
 +/**
 + * @brief   Core Memory Manager APIs.
 + * @details If enabled then the core memory manager APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_MEMCORE) || defined(__DOXYGEN__)
 +#define CH_USE_MEMCORE                  TRUE
 +#endif
 +
 +/**
 + * @brief   Heap Allocator APIs.
 + * @details If enabled then the memory heap allocator APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_MEMCORE and either @p CH_USE_MUTEXES or
 + *          @p CH_USE_SEMAPHORES.
 + * @note    Mutexes are recommended.
 + */
 +#if !defined(CH_USE_HEAP) || defined(__DOXYGEN__)
 +#define CH_USE_HEAP                     TRUE
 +#endif
 +
 +/**
 + * @brief   C-runtime allocator.
 + * @details If enabled the the heap allocator APIs just wrap the C-runtime
 + *          @p malloc() and @p free() functions.
 + *
 + * @note    The default is @p FALSE.
 + * @note    Requires @p CH_USE_HEAP.
 + * @note    The C-runtime may or may not require @p CH_USE_MEMCORE, see the
 + *          appropriate documentation.
 + */
 +#if !defined(CH_USE_MALLOC_HEAP) || defined(__DOXYGEN__)
 +#define CH_USE_MALLOC_HEAP              FALSE
 +#endif
 +
 +/**
 + * @brief   Memory Pools Allocator APIs.
 + * @details If enabled then the memory pools allocator APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_MEMPOOLS) || defined(__DOXYGEN__)
 +#define CH_USE_MEMPOOLS                 TRUE
 +#endif
 +
 +/**
 + * @brief   Dynamic Threads APIs.
 + * @details If enabled then the dynamic threads creation APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_WAITEXIT.
 + * @note    Requires @p CH_USE_HEAP and/or @p CH_USE_MEMPOOLS.
 + */
 +#if !defined(CH_USE_DYNAMIC) || defined(__DOXYGEN__)
 +#define CH_USE_DYNAMIC                  TRUE
 +#endif
 +
 +/** @} */
 +
 +/*===========================================================================*/
 +/**
 + * @name Debug options
 + * @{
 + */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Debug option, system state check.
 + * @details If enabled the correct call protocol for system APIs is checked
 + *          at runtime.
 + *
 + * @note    The default is @p FALSE.
 + */
 +#if !defined(CH_DBG_SYSTEM_STATE_CHECK) || defined(__DOXYGEN__)
 +#define CH_DBG_SYSTEM_STATE_CHECK       FALSE
 +#endif
 +
 +/**
 + * @brief   Debug option, parameters checks.
 + * @details If enabled then the checks on the API functions input
 + *          parameters are activated.
 + *
 + * @note    The default is @p FALSE.
 + */
 +#if !defined(CH_DBG_ENABLE_CHECKS) || defined(__DOXYGEN__)
 +#define CH_DBG_ENABLE_CHECKS            FALSE
 +#endif
 +
 +/**
 + * @brief   Debug option, consistency checks.
 + * @details If enabled then all the assertions in the kernel code are
 + *          activated. This includes consistency checks inside the kernel,
 + *          runtime anomalies and port-defined checks.
 + *
 + * @note    The default is @p FALSE.
 + */
 +#if !defined(CH_DBG_ENABLE_ASSERTS) || defined(__DOXYGEN__)
 +#define CH_DBG_ENABLE_ASSERTS           FALSE
 +#endif
 +
 +/**
 + * @brief   Debug option, trace buffer.
 + * @details If enabled then the context switch circular trace buffer is
 + *          activated.
 + *
 + * @note    The default is @p FALSE.
 + */
 +#if !defined(CH_DBG_ENABLE_TRACE) || defined(__DOXYGEN__)
 +#define CH_DBG_ENABLE_TRACE             FALSE
 +#endif
 +
 +/**
 + * @brief   Debug option, stack checks.
 + * @details If enabled then a runtime stack check is performed.
 + *
 + * @note    The default is @p FALSE.
 + * @note    The stack check is performed in a architecture/port dependent way.
 + *          It may not be implemented or some ports.
 + * @note    The default failure mode is to halt the system with the global
 + *          @p panic_msg variable set to @p NULL.
 + */
 +#if !defined(CH_DBG_ENABLE_STACK_CHECK) || defined(__DOXYGEN__)
 +#define CH_DBG_ENABLE_STACK_CHECK       FALSE
 +#endif
 +
 +/**
 + * @brief   Debug option, stacks initialization.
 + * @details If enabled then the threads working area is filled with a byte
 + *          value when a thread is created. This can be useful for the
 + *          runtime measurement of the used stack.
 + *
 + * @note    The default is @p FALSE.
 + */
 +#if !defined(CH_DBG_FILL_THREADS) || defined(__DOXYGEN__)
 +#define CH_DBG_FILL_THREADS             FALSE
 +#endif
 +
 +/**
 + * @brief   Debug option, threads profiling.
 + * @details If enabled then a field is added to the @p Thread structure that
 + *          counts the system ticks occurred while executing the thread.
 + *
 + * @note    The default is @p TRUE.
 + * @note    This debug option is defaulted to TRUE because it is required by
 + *          some test cases into the test suite.
 + */
 +#if !defined(CH_DBG_THREADS_PROFILING) || defined(__DOXYGEN__)
 +#define CH_DBG_THREADS_PROFILING        TRUE
 +#endif
 +
 +/** @} */
 +
 +/*===========================================================================*/
 +/**
 + * @name Kernel hooks
 + * @{
 + */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Threads descriptor structure extension.
 + * @details User fields added to the end of the @p Thread structure.
 + */
 +#if !defined(THREAD_EXT_FIELDS) || defined(__DOXYGEN__)
 +#define THREAD_EXT_FIELDS                                                   \
 +  /* Add threads custom fields here.*/
 +#endif
 +
 +/**
 + * @brief   Threads initialization hook.
 + * @details User initialization code added to the @p chThdInit() API.
 + *
 + * @note    It is invoked from within @p chThdInit() and implicitly from all
 + *          the threads creation APIs.
 + */
 +#if !defined(THREAD_EXT_INIT_HOOK) || defined(__DOXYGEN__)
 +#define THREAD_EXT_INIT_HOOK(tp) {                                          \
 +  /* Add threads initialization code here.*/                                \
 +}
 +#endif
 +
 +/**
 + * @brief   Threads finalization hook.
 + * @details User finalization code added to the @p chThdExit() API.
 + *
 + * @note    It is inserted into lock zone.
 + * @note    It is also invoked when the threads simply return in order to
 + *          terminate.
 + */
 +#if !defined(THREAD_EXT_EXIT_HOOK) || defined(__DOXYGEN__)
 +#define THREAD_EXT_EXIT_HOOK(tp) {                                          \
 +  /* Add threads finalization code here.*/                                  \
 +}
 +#endif
 +
 +/**
 + * @brief   Context switch hook.
 + * @details This hook is invoked just before switching between threads.
 + */
 +#if !defined(THREAD_CONTEXT_SWITCH_HOOK) || defined(__DOXYGEN__)
 +#define THREAD_CONTEXT_SWITCH_HOOK(ntp, otp) {                              \
 +  /* System halt code here.*/                                               \
 +}
 +#endif
 +
 +/**
 + * @brief   Idle Loop hook.
 + * @details This hook is continuously invoked by the idle thread loop.
 + */
 +#if !defined(IDLE_LOOP_HOOK) || defined(__DOXYGEN__)
 +#define IDLE_LOOP_HOOK() {                                                  \
 +  /* Idle loop code here.*/                                                 \
 +}
 +#endif
 +
 +/**
 + * @brief   System tick event hook.
 + * @details This hook is invoked in the system tick handler immediately
 + *          after processing the virtual timers queue.
 + */
 +#if !defined(SYSTEM_TICK_EVENT_HOOK) || defined(__DOXYGEN__)
 +#define SYSTEM_TICK_EVENT_HOOK() {                                          \
 +  /* System tick event code here.*/                                         \
 +}
 +#endif
 +
 +/**
 + * @brief   System halt hook.
 + * @details This hook is invoked in case to a system halting error before
 + *          the system is halted.
 + */
 +#if !defined(SYSTEM_HALT_HOOK) || defined(__DOXYGEN__)
 +#define SYSTEM_HALT_HOOK() {                                                \
 +  /* System halt code here.*/                                               \
 +}
 +#endif
 +
 +/** @} */
 +
 +/*===========================================================================*/
 +/* Port-specific settings (override port settings defaulted in chcore.h).    */
 +/*===========================================================================*/
 +
 +#endif  /* _CHCONF_H_ */
 +
 +/** @} */
 diff --git a/testhal/STM32F4xx/CAN/halconf.h b/testhal/STM32F4xx/CAN/halconf.h new file mode 100644 index 000000000..5b6535967 --- /dev/null +++ b/testhal/STM32F4xx/CAN/halconf.h @@ -0,0 +1,312 @@ +/*
 +    ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio
 +
 +    Licensed under the Apache License, Version 2.0 (the "License");
 +    you may not use this file except in compliance with the License.
 +    You may obtain a copy of the License at
 +
 +        http://www.apache.org/licenses/LICENSE-2.0
 +
 +    Unless required by applicable law or agreed to in writing, software
 +    distributed under the License is distributed on an "AS IS" BASIS,
 +    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 +    See the License for the specific language governing permissions and
 +    limitations under the License.
 +*/
 +
 +/**
 + * @file    templates/halconf.h
 + * @brief   HAL configuration header.
 + * @details HAL configuration file, this file allows to enable or disable the
 + *          various device drivers from your application. You may also use
 + *          this file in order to override the device drivers default settings.
 + *
 + * @addtogroup HAL_CONF
 + * @{
 + */
 +
 +#ifndef _HALCONF_H_
 +#define _HALCONF_H_
 +
 +#include "mcuconf.h"
 +
 +/**
 + * @brief   Enables the TM subsystem.
 + */
 +#if !defined(HAL_USE_TM) || defined(__DOXYGEN__)
 +#define HAL_USE_TM                  TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the PAL subsystem.
 + */
 +#if !defined(HAL_USE_PAL) || defined(__DOXYGEN__)
 +#define HAL_USE_PAL                 TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the ADC subsystem.
 + */
 +#if !defined(HAL_USE_ADC) || defined(__DOXYGEN__)
 +#define HAL_USE_ADC                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the CAN subsystem.
 + */
 +#if !defined(HAL_USE_CAN) || defined(__DOXYGEN__)
 +#define HAL_USE_CAN                 TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the EXT subsystem.
 + */
 +#if !defined(HAL_USE_EXT) || defined(__DOXYGEN__)
 +#define HAL_USE_EXT                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the GPT subsystem.
 + */
 +#if !defined(HAL_USE_GPT) || defined(__DOXYGEN__)
 +#define HAL_USE_GPT                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the I2C subsystem.
 + */
 +#if !defined(HAL_USE_I2C) || defined(__DOXYGEN__)
 +#define HAL_USE_I2C                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the ICU subsystem.
 + */
 +#if !defined(HAL_USE_ICU) || defined(__DOXYGEN__)
 +#define HAL_USE_ICU                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the MAC subsystem.
 + */
 +#if !defined(HAL_USE_MAC) || defined(__DOXYGEN__)
 +#define HAL_USE_MAC                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the MMC_SPI subsystem.
 + */
 +#if !defined(HAL_USE_MMC_SPI) || defined(__DOXYGEN__)
 +#define HAL_USE_MMC_SPI             FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the PWM subsystem.
 + */
 +#if !defined(HAL_USE_PWM) || defined(__DOXYGEN__)
 +#define HAL_USE_PWM                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the RTC subsystem.
 + */
 +#if !defined(HAL_USE_RTC) || defined(__DOXYGEN__)
 +#define HAL_USE_RTC                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the SDC subsystem.
 + */
 +#if !defined(HAL_USE_SDC) || defined(__DOXYGEN__)
 +#define HAL_USE_SDC                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the SERIAL subsystem.
 + */
 +#if !defined(HAL_USE_SERIAL) || defined(__DOXYGEN__)
 +#define HAL_USE_SERIAL              FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the SERIAL over USB subsystem.
 + */
 +#if !defined(HAL_USE_SERIAL_USB) || defined(__DOXYGEN__)
 +#define HAL_USE_SERIAL_USB          FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the SPI subsystem.
 + */
 +#if !defined(HAL_USE_SPI) || defined(__DOXYGEN__)
 +#define HAL_USE_SPI                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the UART subsystem.
 + */
 +#if !defined(HAL_USE_UART) || defined(__DOXYGEN__)
 +#define HAL_USE_UART                FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the USB subsystem.
 + */
 +#if !defined(HAL_USE_USB) || defined(__DOXYGEN__)
 +#define HAL_USE_USB                 FALSE
 +#endif
 +
 +/*===========================================================================*/
 +/* ADC driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Enables synchronous APIs.
 + * @note    Disabling this option saves both code and data space.
 + */
 +#if !defined(ADC_USE_WAIT) || defined(__DOXYGEN__)
 +#define ADC_USE_WAIT                TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the @p adcAcquireBus() and @p adcReleaseBus() APIs.
 + * @note    Disabling this option saves both code and data space.
 + */
 +#if !defined(ADC_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
 +#define ADC_USE_MUTUAL_EXCLUSION    TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* CAN driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Sleep mode related APIs inclusion switch.
 + */
 +#if !defined(CAN_USE_SLEEP_MODE) || defined(__DOXYGEN__)
 +#define CAN_USE_SLEEP_MODE          TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* I2C driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Enables the mutual exclusion APIs on the I2C bus.
 + */
 +#if !defined(I2C_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
 +#define I2C_USE_MUTUAL_EXCLUSION    TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* MAC driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Enables an event sources for incoming packets.
 + */
 +#if !defined(MAC_USE_ZERO_COPY) || defined(__DOXYGEN__)
 +#define MAC_USE_ZERO_COPY           FALSE
 +#endif
 +
 +/**
 + * @brief   Enables an event sources for incoming packets.
 + */
 +#if !defined(MAC_USE_EVENTS) || defined(__DOXYGEN__)
 +#define MAC_USE_EVENTS              TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* MMC_SPI driver related settings.                                          */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Delays insertions.
 + * @details If enabled this options inserts delays into the MMC waiting
 + *          routines releasing some extra CPU time for the threads with
 + *          lower priority, this may slow down the driver a bit however.
 + *          This option is recommended also if the SPI driver does not
 + *          use a DMA channel and heavily loads the CPU.
 + */
 +#if !defined(MMC_NICE_WAITING) || defined(__DOXYGEN__)
 +#define MMC_NICE_WAITING            TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* SDC driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Number of initialization attempts before rejecting the card.
 + * @note    Attempts are performed at 10mS intervals.
 + */
 +#if !defined(SDC_INIT_RETRY) || defined(__DOXYGEN__)
 +#define SDC_INIT_RETRY              100
 +#endif
 +
 +/**
 + * @brief   Include support for MMC cards.
 + * @note    MMC support is not yet implemented so this option must be kept
 + *          at @p FALSE.
 + */
 +#if !defined(SDC_MMC_SUPPORT) || defined(__DOXYGEN__)
 +#define SDC_MMC_SUPPORT             FALSE
 +#endif
 +
 +/**
 + * @brief   Delays insertions.
 + * @details If enabled this options inserts delays into the MMC waiting
 + *          routines releasing some extra CPU time for the threads with
 + *          lower priority, this may slow down the driver a bit however.
 + */
 +#if !defined(SDC_NICE_WAITING) || defined(__DOXYGEN__)
 +#define SDC_NICE_WAITING            TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* SERIAL driver related settings.                                           */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Default bit rate.
 + * @details Configuration parameter, this is the baud rate selected for the
 + *          default configuration.
 + */
 +#if !defined(SERIAL_DEFAULT_BITRATE) || defined(__DOXYGEN__)
 +#define SERIAL_DEFAULT_BITRATE      38400
 +#endif
 +
 +/**
 + * @brief   Serial buffers size.
 + * @details Configuration parameter, you can change the depth of the queue
 + *          buffers depending on the requirements of your application.
 + * @note    The default is 64 bytes for both the transmission and receive
 + *          buffers.
 + */
 +#if !defined(SERIAL_BUFFERS_SIZE) || defined(__DOXYGEN__)
 +#define SERIAL_BUFFERS_SIZE         16
 +#endif
 +
 +/*===========================================================================*/
 +/* SPI driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Enables synchronous APIs.
 + * @note    Disabling this option saves both code and data space.
 + */
 +#if !defined(SPI_USE_WAIT) || defined(__DOXYGEN__)
 +#define SPI_USE_WAIT                TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the @p spiAcquireBus() and @p spiReleaseBus() APIs.
 + * @note    Disabling this option saves both code and data space.
 + */
 +#if !defined(SPI_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
 +#define SPI_USE_MUTUAL_EXCLUSION    TRUE
 +#endif
 +
 +#endif /* _HALCONF_H_ */
 +
 +/** @} */
 diff --git a/testhal/STM32F4xx/CAN/main.c b/testhal/STM32F4xx/CAN/main.c new file mode 100644 index 000000000..8202afe1e --- /dev/null +++ b/testhal/STM32F4xx/CAN/main.c @@ -0,0 +1,127 @@ +/*
 +    ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio
 +
 +    Licensed under the Apache License, Version 2.0 (the "License");
 +    you may not use this file except in compliance with the License.
 +    You may obtain a copy of the License at
 +
 +        http://www.apache.org/licenses/LICENSE-2.0
 +
 +    Unless required by applicable law or agreed to in writing, software
 +    distributed under the License is distributed on an "AS IS" BASIS,
 +    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 +    See the License for the specific language governing permissions and
 +    limitations under the License.
 +*/
 +
 +#include "ch.h"
 +#include "hal.h"
 +
 +struct can_instance {
 +  CANDriver     *canp;
 +  uint32_t      led;
 +};
 +
 +static const struct can_instance can1 = {&CAND1, GPIOD_LED5};
 +static const struct can_instance can2 = {&CAND2, GPIOD_LED3};
 +
 +/*
 + * Internal loopback mode, 500KBaud, automatic wakeup, automatic recover
 + * from abort mode.
 + * See section 22.7.7 on the STM32 reference manual.
 + */
 +static const CANConfig cancfg = {
 +  CAN_MCR_ABOM | CAN_MCR_AWUM | CAN_MCR_TXFP,
 +  CAN_BTR_LBKM | CAN_BTR_SJW(0) | CAN_BTR_TS2(1) |
 +  CAN_BTR_TS1(8) | CAN_BTR_BRP(6)
 +};
 +
 +/*
 + * Receiver thread.
 + */
 +static WORKING_AREA(can_rx1_wa, 256);
 +static WORKING_AREA(can_rx2_wa, 256);
 +static msg_t can_rx(void *p) {
 +  struct can_instance *cip = p;
 +  EventListener el;
 +  CANRxFrame rxmsg;
 +
 +  (void)p;
 +  chRegSetThreadName("receiver");
 +  chEvtRegister(&cip->canp->rxfull_event, &el, 0);
 +  while(!chThdShouldTerminate()) {
 +    if (chEvtWaitAnyTimeout(ALL_EVENTS, MS2ST(100)) == 0)
 +      continue;
 +    while (canReceive(cip->canp, CAN_ANY_MAILBOX,
 +                      &rxmsg, TIME_IMMEDIATE) == RDY_OK) {
 +      /* Process message.*/
 +      palTogglePad(GPIOD, cip->led);
 +    }
 +  }
 +  chEvtUnregister(&CAND1.rxfull_event, &el);
 +  return 0;
 +}
 +
 +/*
 + * Transmitter thread.
 + */
 +static WORKING_AREA(can_tx_wa, 256);
 +static msg_t can_tx(void * p) {
 +  CANTxFrame txmsg;
 +
 +  (void)p;
 +  chRegSetThreadName("transmitter");
 +  txmsg.IDE = CAN_IDE_EXT;
 +  txmsg.EID = 0x01234567;
 +  txmsg.RTR = CAN_RTR_DATA;
 +  txmsg.DLC = 8;
 +  txmsg.data32[0] = 0x55AA55AA;
 +  txmsg.data32[1] = 0x00FF00FF;
 +
 +  while (!chThdShouldTerminate()) {
 +    canTransmit(&CAND1, CAN_ANY_MAILBOX, &txmsg, MS2ST(100));
 +    canTransmit(&CAND2, CAN_ANY_MAILBOX, &txmsg, MS2ST(100));
 +    chThdSleepMilliseconds(500);
 +  }
 +  return 0;
 +}
 +
 +/*
 + * Application entry point.
 + */
 +int main(void) {
 +
 +  /*
 +   * System initializations.
 +   * - HAL initialization, this also initializes the configured device drivers
 +   *   and performs the board-specific initializations.
 +   * - Kernel initialization, the main() function becomes a thread and the
 +   *   RTOS is active.
 +   */
 +  halInit();
 +  chSysInit();
 +
 +  /*
 +   * Activates the CAN drivers 1 and 2.
 +   */
 +  canStart(&CAND1, &cancfg);
 +  canStart(&CAND2, &cancfg);
 +
 +  /*
 +   * Starting the transmitter and receiver threads.
 +   */
 +  chThdCreateStatic(can_rx1_wa, sizeof(can_rx1_wa), NORMALPRIO + 7,
 +                    can_rx, (void *)&can1);
 +  chThdCreateStatic(can_rx2_wa, sizeof(can_rx2_wa), NORMALPRIO + 7,
 +                    can_rx, (void *)&can2);
 +  chThdCreateStatic(can_tx_wa, sizeof(can_tx_wa), NORMALPRIO + 7,
 +                    can_tx, NULL);
 +
 +  /*
 +   * Normal main() thread activity, in this demo it does nothing.
 +   */
 +  while (TRUE) {
 +    chThdSleepMilliseconds(500);
 +  }
 +  return 0;
 +}
 diff --git a/testhal/STM32F4xx/CAN/mcuconf.h b/testhal/STM32F4xx/CAN/mcuconf.h new file mode 100644 index 000000000..e0dffb5de --- /dev/null +++ b/testhal/STM32F4xx/CAN/mcuconf.h @@ -0,0 +1,278 @@ +/*
 +    ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio
 +
 +    Licensed under the Apache License, Version 2.0 (the "License");
 +    you may not use this file except in compliance with the License.
 +    You may obtain a copy of the License at
 +
 +        http://www.apache.org/licenses/LICENSE-2.0
 +
 +    Unless required by applicable law or agreed to in writing, software
 +    distributed under the License is distributed on an "AS IS" BASIS,
 +    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 +    See the License for the specific language governing permissions and
 +    limitations under the License.
 +*/
 +
 +/*
 + * STM32F4xx drivers configuration.
 + * The following settings override the default settings present in
 + * the various device driver implementation headers.
 + * Note that the settings for each driver only have effect if the whole
 + * driver is enabled in halconf.h.
 + *
 + * IRQ priorities:
 + * 15...0       Lowest...Highest.
 + *
 + * DMA priorities:
 + * 0...3        Lowest...Highest.
 + */
 +
 +#define STM32F4xx_MCUCONF
 +
 +/*
 + * HAL driver system settings.
 + */
 +#define STM32_NO_INIT                       FALSE
 +#define STM32_HSI_ENABLED                   TRUE
 +#define STM32_LSI_ENABLED                   TRUE
 +#define STM32_HSE_ENABLED                   TRUE
 +#define STM32_LSE_ENABLED                   FALSE
 +#define STM32_CLOCK48_REQUIRED              TRUE
 +#define STM32_SW                            STM32_SW_PLL
 +#define STM32_PLLSRC                        STM32_PLLSRC_HSE
 +#define STM32_PLLM_VALUE                    8
 +#define STM32_PLLN_VALUE                    336
 +#define STM32_PLLP_VALUE                    2
 +#define STM32_PLLQ_VALUE                    7
 +#define STM32_HPRE                          STM32_HPRE_DIV1
 +#define STM32_PPRE1                         STM32_PPRE1_DIV4
 +#define STM32_PPRE2                         STM32_PPRE2_DIV2
 +#define STM32_RTCSEL                        STM32_RTCSEL_LSI
 +#define STM32_RTCPRE_VALUE                  8
 +#define STM32_MCO1SEL                       STM32_MCO1SEL_HSI
 +#define STM32_MCO1PRE                       STM32_MCO1PRE_DIV1
 +#define STM32_MCO2SEL                       STM32_MCO2SEL_SYSCLK
 +#define STM32_MCO2PRE                       STM32_MCO2PRE_DIV5
 +#define STM32_I2SSRC                        STM32_I2SSRC_CKIN
 +#define STM32_PLLI2SN_VALUE                 192
 +#define STM32_PLLI2SR_VALUE                 5
 +#define STM32_VOS                           STM32_VOS_HIGH
 +#define STM32_PVD_ENABLE                    FALSE
 +#define STM32_PLS                           STM32_PLS_LEV0
 +
 +/*
 + * ADC driver system settings.
 + */
 +#define STM32_ADC_ADCPRE                    ADC_CCR_ADCPRE_DIV4
 +#define STM32_ADC_USE_ADC1                  FALSE
 +#define STM32_ADC_USE_ADC2                  FALSE
 +#define STM32_ADC_USE_ADC3                  FALSE
 +#define STM32_ADC_ADC1_DMA_STREAM           STM32_DMA_STREAM_ID(2, 4)
 +#define STM32_ADC_ADC2_DMA_STREAM           STM32_DMA_STREAM_ID(2, 2)
 +#define STM32_ADC_ADC3_DMA_STREAM           STM32_DMA_STREAM_ID(2, 1)
 +#define STM32_ADC_ADC1_DMA_PRIORITY         2
 +#define STM32_ADC_ADC2_DMA_PRIORITY         2
 +#define STM32_ADC_ADC3_DMA_PRIORITY         2
 +#define STM32_ADC_IRQ_PRIORITY              6
 +#define STM32_ADC_ADC1_DMA_IRQ_PRIORITY     6
 +#define STM32_ADC_ADC2_DMA_IRQ_PRIORITY     6
 +#define STM32_ADC_ADC3_DMA_IRQ_PRIORITY     6
 +
 +/*
 + * CAN driver system settings.
 + */
 +#define STM32_CAN_USE_CAN1                  TRUE
 +#define STM32_CAN_USE_CAN2                  TRUE
 +#define STM32_CAN_CAN1_IRQ_PRIORITY         11
 +#define STM32_CAN_CAN2_IRQ_PRIORITY         11
 +
 +/*
 + * EXT driver system settings.
 + */
 +#define STM32_EXT_EXTI0_IRQ_PRIORITY        6
 +#define STM32_EXT_EXTI1_IRQ_PRIORITY        6
 +#define STM32_EXT_EXTI2_IRQ_PRIORITY        6
 +#define STM32_EXT_EXTI3_IRQ_PRIORITY        6
 +#define STM32_EXT_EXTI4_IRQ_PRIORITY        6
 +#define STM32_EXT_EXTI5_9_IRQ_PRIORITY      6
 +#define STM32_EXT_EXTI10_15_IRQ_PRIORITY    6
 +#define STM32_EXT_EXTI16_IRQ_PRIORITY       6
 +#define STM32_EXT_EXTI17_IRQ_PRIORITY       15
 +#define STM32_EXT_EXTI18_IRQ_PRIORITY       6
 +#define STM32_EXT_EXTI19_IRQ_PRIORITY       6
 +#define STM32_EXT_EXTI20_IRQ_PRIORITY       6
 +#define STM32_EXT_EXTI21_IRQ_PRIORITY       15
 +#define STM32_EXT_EXTI22_IRQ_PRIORITY       15
 +
 +/*
 + * GPT driver system settings.
 + */
 +#define STM32_GPT_USE_TIM1                  FALSE
 +#define STM32_GPT_USE_TIM2                  FALSE
 +#define STM32_GPT_USE_TIM3                  FALSE
 +#define STM32_GPT_USE_TIM4                  FALSE
 +#define STM32_GPT_USE_TIM5                  FALSE
 +#define STM32_GPT_USE_TIM6                  FALSE
 +#define STM32_GPT_USE_TIM7                  FALSE
 +#define STM32_GPT_USE_TIM8                  FALSE
 +#define STM32_GPT_USE_TIM9                  FALSE
 +#define STM32_GPT_USE_TIM11                 FALSE
 +#define STM32_GPT_USE_TIM12                 FALSE
 +#define STM32_GPT_USE_TIM14                 FALSE
 +#define STM32_GPT_TIM1_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM2_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM3_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM4_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM5_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM6_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM7_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM8_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM9_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM11_IRQ_PRIORITY        7
 +#define STM32_GPT_TIM12_IRQ_PRIORITY        7
 +#define STM32_GPT_TIM14_IRQ_PRIORITY        7
 +
 +/*
 + * I2C driver system settings.
 + */
 +#define STM32_I2C_USE_I2C1                  FALSE
 +#define STM32_I2C_USE_I2C2                  FALSE
 +#define STM32_I2C_USE_I2C3                  FALSE
 +#define STM32_I2C_I2C1_RX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 0)
 +#define STM32_I2C_I2C1_TX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 6)
 +#define STM32_I2C_I2C2_RX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 2)
 +#define STM32_I2C_I2C2_TX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 7)
 +#define STM32_I2C_I2C3_RX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 2)
 +#define STM32_I2C_I2C3_TX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 4)
 +#define STM32_I2C_I2C1_IRQ_PRIORITY         5
 +#define STM32_I2C_I2C2_IRQ_PRIORITY         5
 +#define STM32_I2C_I2C3_IRQ_PRIORITY         5
 +#define STM32_I2C_I2C1_DMA_PRIORITY         3
 +#define STM32_I2C_I2C2_DMA_PRIORITY         3
 +#define STM32_I2C_I2C3_DMA_PRIORITY         3
 +#define STM32_I2C_I2C1_DMA_ERROR_HOOK()     chSysHalt()
 +#define STM32_I2C_I2C2_DMA_ERROR_HOOK()     chSysHalt()
 +#define STM32_I2C_I2C3_DMA_ERROR_HOOK()     chSysHalt()
 +
 +/*
 + * ICU driver system settings.
 + */
 +#define STM32_ICU_USE_TIM1                  FALSE
 +#define STM32_ICU_USE_TIM2                  FALSE
 +#define STM32_ICU_USE_TIM3                  FALSE
 +#define STM32_ICU_USE_TIM4                  FALSE
 +#define STM32_ICU_USE_TIM5                  FALSE
 +#define STM32_ICU_USE_TIM8                  FALSE
 +#define STM32_ICU_USE_TIM9                  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
 +#define STM32_ICU_TIM8_IRQ_PRIORITY         7
 +#define STM32_ICU_TIM9_IRQ_PRIORITY         7
 +
 +/*
 + * MAC driver system settings.
 + */
 +#define STM32_MAC_TRANSMIT_BUFFERS          2
 +#define STM32_MAC_RECEIVE_BUFFERS           4
 +#define STM32_MAC_BUFFERS_SIZE              1522
 +#define STM32_MAC_PHY_TIMEOUT               100
 +#define STM32_MAC_ETH1_CHANGE_PHY_STATE     TRUE
 +#define STM32_MAC_ETH1_IRQ_PRIORITY         13
 +#define STM32_MAC_IP_CHECKSUM_OFFLOAD       0
 +
 +/*
 + * PWM driver system settings.
 + */
 +#define STM32_PWM_USE_ADVANCED              FALSE
 +#define STM32_PWM_USE_TIM1                  FALSE
 +#define STM32_PWM_USE_TIM2                  FALSE
 +#define STM32_PWM_USE_TIM3                  FALSE
 +#define STM32_PWM_USE_TIM4                  FALSE
 +#define STM32_PWM_USE_TIM5                  FALSE
 +#define STM32_PWM_USE_TIM8                  FALSE
 +#define STM32_PWM_USE_TIM9                  FALSE
 +#define STM32_PWM_TIM1_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM2_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM3_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM4_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM5_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM8_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM9_IRQ_PRIORITY         7
 +
 +/*
 + * SERIAL driver system settings.
 + */
 +#define STM32_SERIAL_USE_USART1             FALSE
 +#define STM32_SERIAL_USE_USART2             FALSE
 +#define STM32_SERIAL_USE_USART3             FALSE
 +#define STM32_SERIAL_USE_UART4              FALSE
 +#define STM32_SERIAL_USE_UART5              FALSE
 +#define STM32_SERIAL_USE_USART6             FALSE
 +#define STM32_SERIAL_USART1_PRIORITY        12
 +#define STM32_SERIAL_USART2_PRIORITY        12
 +#define STM32_SERIAL_USART3_PRIORITY        12
 +#define STM32_SERIAL_UART4_PRIORITY         12
 +#define STM32_SERIAL_UART5_PRIORITY         12
 +#define STM32_SERIAL_USART6_PRIORITY        12
 +
 +/*
 + * SPI driver system settings.
 + */
 +#define STM32_SPI_USE_SPI1                  FALSE
 +#define STM32_SPI_USE_SPI2                  FALSE
 +#define STM32_SPI_USE_SPI3                  FALSE
 +#define STM32_SPI_SPI1_RX_DMA_STREAM        STM32_DMA_STREAM_ID(2, 0)
 +#define STM32_SPI_SPI1_TX_DMA_STREAM        STM32_DMA_STREAM_ID(2, 3)
 +#define STM32_SPI_SPI2_RX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 3)
 +#define STM32_SPI_SPI2_TX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 4)
 +#define STM32_SPI_SPI3_RX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 0)
 +#define STM32_SPI_SPI3_TX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 7)
 +#define STM32_SPI_SPI1_DMA_PRIORITY         1
 +#define STM32_SPI_SPI2_DMA_PRIORITY         1
 +#define STM32_SPI_SPI3_DMA_PRIORITY         1
 +#define STM32_SPI_SPI1_IRQ_PRIORITY         10
 +#define STM32_SPI_SPI2_IRQ_PRIORITY         10
 +#define STM32_SPI_SPI3_IRQ_PRIORITY         10
 +#define STM32_SPI_DMA_ERROR_HOOK(spip)      chSysHalt()
 +
 +/*
 + * UART driver system settings.
 + */
 +#define STM32_UART_USE_USART1               FALSE
 +#define STM32_UART_USE_USART2               FALSE
 +#define STM32_UART_USE_USART3               FALSE
 +#define STM32_UART_USE_USART6               FALSE
 +#define STM32_UART_USART1_RX_DMA_STREAM     STM32_DMA_STREAM_ID(2, 5)
 +#define STM32_UART_USART1_TX_DMA_STREAM     STM32_DMA_STREAM_ID(2, 7)
 +#define STM32_UART_USART2_RX_DMA_STREAM     STM32_DMA_STREAM_ID(1, 5)
 +#define STM32_UART_USART2_TX_DMA_STREAM     STM32_DMA_STREAM_ID(1, 6)
 +#define STM32_UART_USART3_RX_DMA_STREAM     STM32_DMA_STREAM_ID(1, 1)
 +#define STM32_UART_USART3_TX_DMA_STREAM     STM32_DMA_STREAM_ID(1, 3)
 +#define STM32_UART_USART6_RX_DMA_STREAM     STM32_DMA_STREAM_ID(2, 2)
 +#define STM32_UART_USART6_TX_DMA_STREAM     STM32_DMA_STREAM_ID(2, 7)
 +#define STM32_UART_USART1_IRQ_PRIORITY      12
 +#define STM32_UART_USART2_IRQ_PRIORITY      12
 +#define STM32_UART_USART3_IRQ_PRIORITY      12
 +#define STM32_UART_USART6_IRQ_PRIORITY      12
 +#define STM32_UART_USART1_DMA_PRIORITY      0
 +#define STM32_UART_USART2_DMA_PRIORITY      0
 +#define STM32_UART_USART3_DMA_PRIORITY      0
 +#define STM32_UART_USART6_DMA_PRIORITY      0
 +#define STM32_UART_DMA_ERROR_HOOK(uartp)    chSysHalt()
 +
 +/*
 + * USB driver system settings.
 + */
 +#define STM32_USB_USE_OTG1                  FALSE
 +#define STM32_USB_USE_OTG2                  FALSE
 +#define STM32_USB_OTG1_IRQ_PRIORITY         14
 +#define STM32_USB_OTG2_IRQ_PRIORITY         14
 +#define STM32_USB_OTG1_RX_FIFO_SIZE         512
 +#define STM32_USB_OTG2_RX_FIFO_SIZE         1024
 +#define STM32_USB_OTG_THREAD_PRIO           LOWPRIO
 +#define STM32_USB_OTG_THREAD_STACK_SIZE     128
 +#define STM32_USB_OTGFIFO_FILL_BASEPRI      0
 diff --git a/testhal/STM32F4xx/CAN/readme.txt b/testhal/STM32F4xx/CAN/readme.txt new file mode 100644 index 000000000..5884567ac --- /dev/null +++ b/testhal/STM32F4xx/CAN/readme.txt @@ -0,0 +1,26 @@ +*****************************************************************************
 +** ChibiOS/RT HAL - CAN driver demo for STM32.                             **
 +*****************************************************************************
 +
 +** TARGET **
 +
 +The demo runs on an STMicroelectronics STM32F4-Discovery board.
 +
 +** The Demo **
 +
 +The application demonstrates the use of the STM32 CAN driver.
 +
 +** Build Procedure **
 +
 +The demo has been tested using the free Codesourcery GCC-based toolchain
 +and YAGARTO.
 +Just modify the TRGT line in the makefile in order to use different GCC ports.
 +
 +** Notes **
 +
 +Some files used by the demo are not part of ChibiOS/RT but are copyright of
 +ST Microelectronics and are licensed under a different license.
 +Also note that not all the files present in the ST library are distributed
 +with ChibiOS/RT, you can find the whole library on the ST web site:
 +
 +                             http://www.st.com
 diff --git a/testhal/STM32F4xx/DMA_STORM/.cproject b/testhal/STM32F4xx/DMA_STORM/.cproject new file mode 100644 index 000000000..4b78ef53c --- /dev/null +++ b/testhal/STM32F4xx/DMA_STORM/.cproject @@ -0,0 +1,51 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?>
 +<?fileVersion 4.0.0?>
 +
 +<cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
 +	<storageModule moduleId="org.eclipse.cdt.core.settings">
 +		<cconfiguration id="0.603715936">
 +			<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="0.603715936" moduleId="org.eclipse.cdt.core.settings" name="Default">
 +				<externalSettings/>
 +				<extensions>
 +					<extension id="org.eclipse.cdt.core.VCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 +					<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 +					<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
 +					<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 +					<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 +					<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 +				</extensions>
 +			</storageModule>
 +			<storageModule moduleId="cdtBuildSystem" version="4.0.0">
 +				<configuration artifactName="${ProjName}" buildProperties="" description="" id="0.603715936" name="Default" parent="org.eclipse.cdt.build.core.prefbase.cfg">
 +					<folderInfo id="0.603715936." name="/" resourcePath="">
 +						<toolChain id="org.eclipse.cdt.build.core.prefbase.toolchain.1423136404" name="No ToolChain" resourceTypeBasedDiscovery="false" superClass="org.eclipse.cdt.build.core.prefbase.toolchain">
 +							<targetPlatform id="org.eclipse.cdt.build.core.prefbase.toolchain.1423136404.2135309778" name=""/>
 +							<builder id="org.eclipse.cdt.build.core.settings.default.builder.1115397442" keepEnvironmentInBuildfile="false" managedBuildOn="false" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="org.eclipse.cdt.build.core.settings.default.builder"/>
 +							<tool id="org.eclipse.cdt.build.core.settings.holder.libs.792846724" name="holder for library settings" superClass="org.eclipse.cdt.build.core.settings.holder.libs"/>
 +							<tool id="org.eclipse.cdt.build.core.settings.holder.1251189042" name="Assembly" superClass="org.eclipse.cdt.build.core.settings.holder">
 +								<inputType id="org.eclipse.cdt.build.core.settings.holder.inType.671957217" languageId="org.eclipse.cdt.core.assembly" languageName="Assembly" sourceContentType="org.eclipse.cdt.core.asmSource" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
 +							</tool>
 +							<tool id="org.eclipse.cdt.build.core.settings.holder.75880517" name="GNU C++" superClass="org.eclipse.cdt.build.core.settings.holder">
 +								<inputType id="org.eclipse.cdt.build.core.settings.holder.inType.699777837" languageId="org.eclipse.cdt.core.g++" languageName="GNU C++" sourceContentType="org.eclipse.cdt.core.cxxSource,org.eclipse.cdt.core.cxxHeader" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
 +							</tool>
 +							<tool id="org.eclipse.cdt.build.core.settings.holder.338158254" name="GNU C" superClass="org.eclipse.cdt.build.core.settings.holder">
 +								<inputType id="org.eclipse.cdt.build.core.settings.holder.inType.482881652" languageId="org.eclipse.cdt.core.gcc" languageName="GNU C" sourceContentType="org.eclipse.cdt.core.cSource,org.eclipse.cdt.core.cHeader" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
 +							</tool>
 +						</toolChain>
 +					</folderInfo>
 +				</configuration>
 +			</storageModule>
 +			<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
 +		</cconfiguration>
 +	</storageModule>
 +	<storageModule moduleId="cdtBuildSystem" version="4.0.0">
 +		<project id="STM32F4xx-DMA_STORM.null.969247798" name="STM32F4xx-DMA_STORM"/>
 +	</storageModule>
 +	<storageModule moduleId="scannerConfiguration">
 +		<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
 +		<scannerConfigBuildInfo instanceId="0.603715936">
 +			<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile"/>
 +		</scannerConfigBuildInfo>
 +	</storageModule>
 +	<storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
 +</cproject>
 diff --git a/testhal/STM32F4xx/DMA_STORM/.project b/testhal/STM32F4xx/DMA_STORM/.project new file mode 100644 index 000000000..fdacc2794 --- /dev/null +++ b/testhal/STM32F4xx/DMA_STORM/.project @@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="UTF-8"?>
 +<projectDescription>
 +	<name>STM32F4xx-DMA_STORM</name>
 +	<comment></comment>
 +	<projects>
 +	</projects>
 +	<buildSpec>
 +		<buildCommand>
 +			<name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
 +			<triggers>clean,full,incremental,</triggers>
 +			<arguments>
 +			</arguments>
 +		</buildCommand>
 +		<buildCommand>
 +			<name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
 +			<triggers>full,incremental,</triggers>
 +			<arguments>
 +			</arguments>
 +		</buildCommand>
 +	</buildSpec>
 +	<natures>
 +		<nature>org.eclipse.cdt.core.cnature</nature>
 +		<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
 +		<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
 +	</natures>
 +	<linkedResources>
 +		<link>
 +			<name>board</name>
 +			<type>2</type>
 +			<locationURI>CHIBIOS/boards/ST_STM32F4_DISCOVERY</locationURI>
 +		</link>
 +		<link>
 +			<name>os</name>
 +			<type>2</type>
 +			<locationURI>CHIBIOS/os</locationURI>
 +		</link>
 +	</linkedResources>
 +</projectDescription>
 diff --git a/testhal/STM32F4xx/DMA_STORM/Makefile b/testhal/STM32F4xx/DMA_STORM/Makefile new file mode 100644 index 000000000..86de6d81c --- /dev/null +++ b/testhal/STM32F4xx/DMA_STORM/Makefile @@ -0,0 +1,222 @@ +##############################################################################
 +# Build global options
 +# NOTE: Can be overridden externally.
 +#
 +
 +# Compiler options here.
 +ifeq ($(USE_OPT),)
 +  USE_OPT = -O2 -ggdb -fomit-frame-pointer -falign-functions=16
 +endif
 +
 +# C specific options here (added to USE_OPT).
 +ifeq ($(USE_COPT),)
 +  USE_COPT = 
 +endif
 +
 +# C++ specific options here (added to USE_OPT).
 +ifeq ($(USE_CPPOPT),)
 +  USE_CPPOPT = -fno-rtti
 +endif
 +
 +# Enable this if you want the linker to remove unused code and data
 +ifeq ($(USE_LINK_GC),)
 +  USE_LINK_GC = yes
 +endif
 +
 +# If enabled, this option allows to compile the application in THUMB mode.
 +ifeq ($(USE_THUMB),)
 +  USE_THUMB = yes
 +endif
 +
 +# Enable this if you want to see the full log while compiling.
 +ifeq ($(USE_VERBOSE_COMPILE),)
 +  USE_VERBOSE_COMPILE = no
 +endif
 +
 +#
 +# Build global options
 +##############################################################################
 +
 +##############################################################################
 +# Architecture or project specific options
 +#
 +
 +# Enables the use of FPU on Cortex-M4.
 +# Enable this if you really want to use the STM FWLib.
 +ifeq ($(USE_FPU),)
 +  USE_FPU = no
 +endif
 +
 +# Enable this if you really want to use the STM FWLib.
 +ifeq ($(USE_FWLIB),)
 +  USE_FWLIB = no
 +endif
 +
 +#
 +# Architecture or project specific options
 +##############################################################################
 +
 +##############################################################################
 +# Project, sources and paths
 +#
 +
 +# Define project name here
 +PROJECT = ch
 +
 +# Imported source files and paths
 +CHIBIOS = ../../..
 +include $(CHIBIOS)/boards/ST_STM32F4_DISCOVERY/board.mk
 +include $(CHIBIOS)/os/hal/platforms/STM32F4xx/platform.mk
 +include $(CHIBIOS)/os/hal/hal.mk
 +include $(CHIBIOS)/os/ports/GCC/ARMCMx/STM32F4xx/port.mk
 +include $(CHIBIOS)/os/kernel/kernel.mk
 +include $(CHIBIOS)/test/test.mk
 +
 +# Define linker script file here
 +LDSCRIPT= $(PORTLD)/STM32F407xG.ld
 +#LDSCRIPT= $(PORTLD)/STM32F407xG_CCM.ld
 +
 +# C sources that can be compiled in ARM or THUMB mode depending on the global
 +# setting.
 +CSRC = $(PORTSRC) \
 +       $(KERNSRC) \
 +       $(TESTSRC) \
 +       $(HALSRC) \
 +       $(PLATFORMSRC) \
 +       $(BOARDSRC) \
 +       $(CHIBIOS)/os/various/chprintf.c \
 +       main.c
 +
 +# C++ sources that can be compiled in ARM or THUMB mode depending on the global
 +# setting.
 +CPPSRC =
 +
 +# C sources to be compiled in ARM mode regardless of the global setting.
 +# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler
 +#       option that results in lower performance and larger code size.
 +ACSRC =
 +
 +# C++ sources to be compiled in ARM mode regardless of the global setting.
 +# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler
 +#       option that results in lower performance and larger code size.
 +ACPPSRC =
 +
 +# C sources to be compiled in THUMB mode regardless of the global setting.
 +# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler
 +#       option that results in lower performance and larger code size.
 +TCSRC =
 +
 +# C sources to be compiled in THUMB mode regardless of the global setting.
 +# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler
 +#       option that results in lower performance and larger code size.
 +TCPPSRC =
 +
 +# List ASM source files here
 +ASMSRC = $(PORTASM)
 +
 +INCDIR = $(PORTINC) $(KERNINC) $(TESTINC) \
 +         $(HALINC) $(PLATFORMINC) $(BOARDINC) \
 +         $(CHIBIOS)/os/various
 +
 +#
 +# Project, sources and paths
 +##############################################################################
 +
 +##############################################################################
 +# Compiler settings
 +#
 +
 +MCU  = cortex-m4
 +
 +#TRGT = arm-elf-
 +TRGT = arm-none-eabi-
 +CC   = $(TRGT)gcc
 +CPPC = $(TRGT)g++
 +# Enable loading with g++ only if you need C++ runtime support.
 +# NOTE: You can use C++ even without C++ support if you are careful. C++
 +#       runtime support makes code size explode.
 +LD   = $(TRGT)gcc
 +#LD   = $(TRGT)g++
 +CP   = $(TRGT)objcopy
 +AS   = $(TRGT)gcc -x assembler-with-cpp
 +OD   = $(TRGT)objdump
 +HEX  = $(CP) -O ihex
 +BIN  = $(CP) -O binary
 +
 +# ARM-specific options here
 +AOPT =
 +
 +# THUMB-specific options here
 +TOPT = -mthumb -DTHUMB
 +
 +# Define C warning options here
 +CWARN = -Wall -Wextra -Wstrict-prototypes
 +
 +# Define C++ warning options here
 +CPPWARN = -Wall -Wextra
 +
 +#
 +# Compiler settings
 +##############################################################################
 +
 +##############################################################################
 +# Start of default section
 +#
 +
 +# List all default C defines here, like -D_DEBUG=1
 +DDEFS =
 +
 +# List all default ASM defines here, like -D_DEBUG=1
 +DADEFS =
 +
 +# List all default directories to look for include files here
 +DINCDIR =
 +
 +# List the default directory to look for the libraries here
 +DLIBDIR =
 +
 +# List all default libraries here
 +DLIBS =
 +
 +#
 +# End of default section
 +##############################################################################
 +
 +##############################################################################
 +# Start of user section
 +#
 +
 +# List all user C define here, like -D_DEBUG=1
 +UDEFS =
 +
 +# Define ASM defines here
 +UADEFS =
 +
 +# List all user directories here
 +UINCDIR =
 +
 +# List the user directory to look for the libraries here
 +ULIBDIR =
 +
 +# List all user libraries here
 +ULIBS =
 +
 +#
 +# End of user defines
 +##############################################################################
 +
 +ifeq ($(USE_FPU),yes)
 +  USE_OPT += -mfloat-abi=softfp -mfpu=fpv4-sp-d16 -fsingle-precision-constant
 +  DDEFS += -DCORTEX_USE_FPU=TRUE
 +else
 +  DDEFS += -DCORTEX_USE_FPU=FALSE
 +endif
 +
 +ifeq ($(USE_FWLIB),yes)
 +  include $(CHIBIOS)/ext/stm32lib/stm32lib.mk
 +  CSRC += $(STM32SRC)
 +  INCDIR += $(STM32INC)
 +  USE_OPT += -DUSE_STDPERIPH_DRIVER
 +endif
 +
 +include $(CHIBIOS)/os/ports/GCC/ARMCMx/rules.mk
 diff --git a/testhal/STM32F4xx/DMA_STORM/chconf.h b/testhal/STM32F4xx/DMA_STORM/chconf.h new file mode 100644 index 000000000..2e6fcc6ee --- /dev/null +++ b/testhal/STM32F4xx/DMA_STORM/chconf.h @@ -0,0 +1,531 @@ +/*
 +    ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio
 +
 +    Licensed under the Apache License, Version 2.0 (the "License");
 +    you may not use this file except in compliance with the License.
 +    You may obtain a copy of the License at
 +
 +        http://www.apache.org/licenses/LICENSE-2.0
 +
 +    Unless required by applicable law or agreed to in writing, software
 +    distributed under the License is distributed on an "AS IS" BASIS,
 +    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 +    See the License for the specific language governing permissions and
 +    limitations under the License.
 +*/
 +
 +/**
 + * @file    templates/chconf.h
 + * @brief   Configuration file template.
 + * @details A copy of this file must be placed in each project directory, it
 + *          contains the application specific kernel settings.
 + *
 + * @addtogroup config
 + * @details Kernel related settings and hooks.
 + * @{
 + */
 +
 +#ifndef _CHCONF_H_
 +#define _CHCONF_H_
 +
 +/*===========================================================================*/
 +/**
 + * @name Kernel parameters and options
 + * @{
 + */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   System tick frequency.
 + * @details Frequency of the system timer that drives the system ticks. This
 + *          setting also defines the system tick time unit.
 + */
 +#if !defined(CH_FREQUENCY) || defined(__DOXYGEN__)
 +#define CH_FREQUENCY                    1000
 +#endif
 +
 +/**
 + * @brief   Round robin interval.
 + * @details This constant is the number of system ticks allowed for the
 + *          threads before preemption occurs. Setting this value to zero
 + *          disables the preemption for threads with equal priority and the
 + *          round robin becomes cooperative. Note that higher priority
 + *          threads can still preempt, the kernel is always preemptive.
 + *
 + * @note    Disabling the round robin preemption makes the kernel more compact
 + *          and generally faster.
 + */
 +#if !defined(CH_TIME_QUANTUM) || defined(__DOXYGEN__)
 +#define CH_TIME_QUANTUM                 20
 +#endif
 +
 +/**
 + * @brief   Managed RAM size.
 + * @details Size of the RAM area to be managed by the OS. If set to zero
 + *          then the whole available RAM is used. The core memory is made
 + *          available to the heap allocator and/or can be used directly through
 + *          the simplified core memory allocator.
 + *
 + * @note    In order to let the OS manage the whole RAM the linker script must
 + *          provide the @p __heap_base__ and @p __heap_end__ symbols.
 + * @note    Requires @p CH_USE_MEMCORE.
 + */
 +#if !defined(CH_MEMCORE_SIZE) || defined(__DOXYGEN__)
 +#define CH_MEMCORE_SIZE                 0
 +#endif
 +
 +/**
 + * @brief   Idle thread automatic spawn suppression.
 + * @details When this option is activated the function @p chSysInit()
 + *          does not spawn the idle thread automatically. The application has
 + *          then the responsibility to do one of the following:
 + *          - Spawn a custom idle thread at priority @p IDLEPRIO.
 + *          - Change the main() thread priority to @p IDLEPRIO then enter
 + *            an endless loop. In this scenario the @p main() thread acts as
 + *            the idle thread.
 + *          .
 + * @note    Unless an idle thread is spawned the @p main() thread must not
 + *          enter a sleep state.
 + */
 +#if !defined(CH_NO_IDLE_THREAD) || defined(__DOXYGEN__)
 +#define CH_NO_IDLE_THREAD               FALSE
 +#endif
 +
 +/** @} */
 +
 +/*===========================================================================*/
 +/**
 + * @name Performance options
 + * @{
 + */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   OS optimization.
 + * @details If enabled then time efficient rather than space efficient code
 + *          is used when two possible implementations exist.
 + *
 + * @note    This is not related to the compiler optimization options.
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_OPTIMIZE_SPEED) || defined(__DOXYGEN__)
 +#define CH_OPTIMIZE_SPEED               TRUE
 +#endif
 +
 +/** @} */
 +
 +/*===========================================================================*/
 +/**
 + * @name Subsystem options
 + * @{
 + */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Threads registry APIs.
 + * @details If enabled then the registry APIs are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_REGISTRY) || defined(__DOXYGEN__)
 +#define CH_USE_REGISTRY                 TRUE
 +#endif
 +
 +/**
 + * @brief   Threads synchronization APIs.
 + * @details If enabled then the @p chThdWait() function is included in
 + *          the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_WAITEXIT) || defined(__DOXYGEN__)
 +#define CH_USE_WAITEXIT                 TRUE
 +#endif
 +
 +/**
 + * @brief   Semaphores APIs.
 + * @details If enabled then the Semaphores APIs are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_SEMAPHORES) || defined(__DOXYGEN__)
 +#define CH_USE_SEMAPHORES               TRUE
 +#endif
 +
 +/**
 + * @brief   Semaphores queuing mode.
 + * @details If enabled then the threads are enqueued on semaphores by
 + *          priority rather than in FIFO order.
 + *
 + * @note    The default is @p FALSE. Enable this if you have special requirements.
 + * @note    Requires @p CH_USE_SEMAPHORES.
 + */
 +#if !defined(CH_USE_SEMAPHORES_PRIORITY) || defined(__DOXYGEN__)
 +#define CH_USE_SEMAPHORES_PRIORITY      FALSE
 +#endif
 +
 +/**
 + * @brief   Atomic semaphore API.
 + * @details If enabled then the semaphores the @p chSemSignalWait() API
 + *          is included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_SEMAPHORES.
 + */
 +#if !defined(CH_USE_SEMSW) || defined(__DOXYGEN__)
 +#define CH_USE_SEMSW                    TRUE
 +#endif
 +
 +/**
 + * @brief   Mutexes APIs.
 + * @details If enabled then the mutexes APIs are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_MUTEXES) || defined(__DOXYGEN__)
 +#define CH_USE_MUTEXES                  TRUE
 +#endif
 +
 +/**
 + * @brief   Conditional Variables APIs.
 + * @details If enabled then the conditional variables APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_MUTEXES.
 + */
 +#if !defined(CH_USE_CONDVARS) || defined(__DOXYGEN__)
 +#define CH_USE_CONDVARS                 TRUE
 +#endif
 +
 +/**
 + * @brief   Conditional Variables APIs with timeout.
 + * @details If enabled then the conditional variables APIs with timeout
 + *          specification are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_CONDVARS.
 + */
 +#if !defined(CH_USE_CONDVARS_TIMEOUT) || defined(__DOXYGEN__)
 +#define CH_USE_CONDVARS_TIMEOUT         TRUE
 +#endif
 +
 +/**
 + * @brief   Events Flags APIs.
 + * @details If enabled then the event flags APIs are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_EVENTS) || defined(__DOXYGEN__)
 +#define CH_USE_EVENTS                   TRUE
 +#endif
 +
 +/**
 + * @brief   Events Flags APIs with timeout.
 + * @details If enabled then the events APIs with timeout specification
 + *          are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_EVENTS.
 + */
 +#if !defined(CH_USE_EVENTS_TIMEOUT) || defined(__DOXYGEN__)
 +#define CH_USE_EVENTS_TIMEOUT           TRUE
 +#endif
 +
 +/**
 + * @brief   Synchronous Messages APIs.
 + * @details If enabled then the synchronous messages APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_MESSAGES) || defined(__DOXYGEN__)
 +#define CH_USE_MESSAGES                 TRUE
 +#endif
 +
 +/**
 + * @brief   Synchronous Messages queuing mode.
 + * @details If enabled then messages are served by priority rather than in
 + *          FIFO order.
 + *
 + * @note    The default is @p FALSE. Enable this if you have special requirements.
 + * @note    Requires @p CH_USE_MESSAGES.
 + */
 +#if !defined(CH_USE_MESSAGES_PRIORITY) || defined(__DOXYGEN__)
 +#define CH_USE_MESSAGES_PRIORITY        FALSE
 +#endif
 +
 +/**
 + * @brief   Mailboxes APIs.
 + * @details If enabled then the asynchronous messages (mailboxes) APIs are
 + *          included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_SEMAPHORES.
 + */
 +#if !defined(CH_USE_MAILBOXES) || defined(__DOXYGEN__)
 +#define CH_USE_MAILBOXES                TRUE
 +#endif
 +
 +/**
 + * @brief   I/O Queues APIs.
 + * @details If enabled then the I/O queues APIs are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_QUEUES) || defined(__DOXYGEN__)
 +#define CH_USE_QUEUES                   TRUE
 +#endif
 +
 +/**
 + * @brief   Core Memory Manager APIs.
 + * @details If enabled then the core memory manager APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_MEMCORE) || defined(__DOXYGEN__)
 +#define CH_USE_MEMCORE                  TRUE
 +#endif
 +
 +/**
 + * @brief   Heap Allocator APIs.
 + * @details If enabled then the memory heap allocator APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_MEMCORE and either @p CH_USE_MUTEXES or
 + *          @p CH_USE_SEMAPHORES.
 + * @note    Mutexes are recommended.
 + */
 +#if !defined(CH_USE_HEAP) || defined(__DOXYGEN__)
 +#define CH_USE_HEAP                     TRUE
 +#endif
 +
 +/**
 + * @brief   C-runtime allocator.
 + * @details If enabled the the heap allocator APIs just wrap the C-runtime
 + *          @p malloc() and @p free() functions.
 + *
 + * @note    The default is @p FALSE.
 + * @note    Requires @p CH_USE_HEAP.
 + * @note    The C-runtime may or may not require @p CH_USE_MEMCORE, see the
 + *          appropriate documentation.
 + */
 +#if !defined(CH_USE_MALLOC_HEAP) || defined(__DOXYGEN__)
 +#define CH_USE_MALLOC_HEAP              FALSE
 +#endif
 +
 +/**
 + * @brief   Memory Pools Allocator APIs.
 + * @details If enabled then the memory pools allocator APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_MEMPOOLS) || defined(__DOXYGEN__)
 +#define CH_USE_MEMPOOLS                 TRUE
 +#endif
 +
 +/**
 + * @brief   Dynamic Threads APIs.
 + * @details If enabled then the dynamic threads creation APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_WAITEXIT.
 + * @note    Requires @p CH_USE_HEAP and/or @p CH_USE_MEMPOOLS.
 + */
 +#if !defined(CH_USE_DYNAMIC) || defined(__DOXYGEN__)
 +#define CH_USE_DYNAMIC                  TRUE
 +#endif
 +
 +/** @} */
 +
 +/*===========================================================================*/
 +/**
 + * @name Debug options
 + * @{
 + */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Debug option, system state check.
 + * @details If enabled the correct call protocol for system APIs is checked
 + *          at runtime.
 + *
 + * @note    The default is @p FALSE.
 + */
 +#if !defined(CH_DBG_SYSTEM_STATE_CHECK) || defined(__DOXYGEN__)
 +#define CH_DBG_SYSTEM_STATE_CHECK       TRUE
 +#endif
 +
 +/**
 + * @brief   Debug option, parameters checks.
 + * @details If enabled then the checks on the API functions input
 + *          parameters are activated.
 + *
 + * @note    The default is @p FALSE.
 + */
 +#if !defined(CH_DBG_ENABLE_CHECKS) || defined(__DOXYGEN__)
 +#define CH_DBG_ENABLE_CHECKS            TRUE
 +#endif
 +
 +/**
 + * @brief   Debug option, consistency checks.
 + * @details If enabled then all the assertions in the kernel code are
 + *          activated. This includes consistency checks inside the kernel,
 + *          runtime anomalies and port-defined checks.
 + *
 + * @note    The default is @p FALSE.
 + */
 +#if !defined(CH_DBG_ENABLE_ASSERTS) || defined(__DOXYGEN__)
 +#define CH_DBG_ENABLE_ASSERTS           TRUE
 +#endif
 +
 +/**
 + * @brief   Debug option, trace buffer.
 + * @details If enabled then the context switch circular trace buffer is
 + *          activated.
 + *
 + * @note    The default is @p FALSE.
 + */
 +#if !defined(CH_DBG_ENABLE_TRACE) || defined(__DOXYGEN__)
 +#define CH_DBG_ENABLE_TRACE             TRUE
 +#endif
 +
 +/**
 + * @brief   Debug option, stack checks.
 + * @details If enabled then a runtime stack check is performed.
 + *
 + * @note    The default is @p FALSE.
 + * @note    The stack check is performed in a architecture/port dependent way.
 + *          It may not be implemented or some ports.
 + * @note    The default failure mode is to halt the system with the global
 + *          @p panic_msg variable set to @p NULL.
 + */
 +#if !defined(CH_DBG_ENABLE_STACK_CHECK) || defined(__DOXYGEN__)
 +#define CH_DBG_ENABLE_STACK_CHECK       TRUE
 +#endif
 +
 +/**
 + * @brief   Debug option, stacks initialization.
 + * @details If enabled then the threads working area is filled with a byte
 + *          value when a thread is created. This can be useful for the
 + *          runtime measurement of the used stack.
 + *
 + * @note    The default is @p FALSE.
 + */
 +#if !defined(CH_DBG_FILL_THREADS) || defined(__DOXYGEN__)
 +#define CH_DBG_FILL_THREADS             TRUE
 +#endif
 +
 +/**
 + * @brief   Debug option, threads profiling.
 + * @details If enabled then a field is added to the @p Thread structure that
 + *          counts the system ticks occurred while executing the thread.
 + *
 + * @note    The default is @p TRUE.
 + * @note    This debug option is defaulted to TRUE because it is required by
 + *          some test cases into the test suite.
 + */
 +#if !defined(CH_DBG_THREADS_PROFILING) || defined(__DOXYGEN__)
 +#define CH_DBG_THREADS_PROFILING        TRUE
 +#endif
 +
 +/** @} */
 +
 +/*===========================================================================*/
 +/**
 + * @name Kernel hooks
 + * @{
 + */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Threads descriptor structure extension.
 + * @details User fields added to the end of the @p Thread structure.
 + */
 +#if !defined(THREAD_EXT_FIELDS) || defined(__DOXYGEN__)
 +#define THREAD_EXT_FIELDS                                                   \
 +  /* Add threads custom fields here.*/
 +#endif
 +
 +/**
 + * @brief   Threads initialization hook.
 + * @details User initialization code added to the @p chThdInit() API.
 + *
 + * @note    It is invoked from within @p chThdInit() and implicitly from all
 + *          the threads creation APIs.
 + */
 +#if !defined(THREAD_EXT_INIT_HOOK) || defined(__DOXYGEN__)
 +#define THREAD_EXT_INIT_HOOK(tp) {                                          \
 +  /* Add threads initialization code here.*/                                \
 +}
 +#endif
 +
 +/**
 + * @brief   Threads finalization hook.
 + * @details User finalization code added to the @p chThdExit() API.
 + *
 + * @note    It is inserted into lock zone.
 + * @note    It is also invoked when the threads simply return in order to
 + *          terminate.
 + */
 +#if !defined(THREAD_EXT_EXIT_HOOK) || defined(__DOXYGEN__)
 +#define THREAD_EXT_EXIT_HOOK(tp) {                                          \
 +  /* Add threads finalization code here.*/                                  \
 +}
 +#endif
 +
 +/**
 + * @brief   Context switch hook.
 + * @details This hook is invoked just before switching between threads.
 + */
 +#if !defined(THREAD_CONTEXT_SWITCH_HOOK) || defined(__DOXYGEN__)
 +#define THREAD_CONTEXT_SWITCH_HOOK(ntp, otp) {                              \
 +  /* System halt code here.*/                                               \
 +}
 +#endif
 +
 +/**
 + * @brief   Idle Loop hook.
 + * @details This hook is continuously invoked by the idle thread loop.
 + */
 +#if !defined(IDLE_LOOP_HOOK) || defined(__DOXYGEN__)
 +#define IDLE_LOOP_HOOK() {                                                  \
 +  /* Idle loop code here.*/                                                 \
 +}
 +#endif
 +
 +/**
 + * @brief   System tick event hook.
 + * @details This hook is invoked in the system tick handler immediately
 + *          after processing the virtual timers queue.
 + */
 +#if !defined(SYSTEM_TICK_EVENT_HOOK) || defined(__DOXYGEN__)
 +#define SYSTEM_TICK_EVENT_HOOK() {                                          \
 +  /* System tick event code here.*/                                         \
 +}
 +#endif
 +
 +/**
 + * @brief   System halt hook.
 + * @details This hook is invoked in case to a system halting error before
 + *          the system is halted.
 + */
 +#if !defined(SYSTEM_HALT_HOOK) || defined(__DOXYGEN__)
 +#define SYSTEM_HALT_HOOK() {                                                \
 +  /* System halt code here.*/                                               \
 +}
 +#endif
 +
 +/** @} */
 +
 +/*===========================================================================*/
 +/* Port-specific settings (override port settings defaulted in chcore.h).    */
 +/*===========================================================================*/
 +
 +#endif  /* _CHCONF_H_ */
 +
 +/** @} */
 diff --git a/testhal/STM32F4xx/DMA_STORM/halconf.h b/testhal/STM32F4xx/DMA_STORM/halconf.h new file mode 100644 index 000000000..e2b440694 --- /dev/null +++ b/testhal/STM32F4xx/DMA_STORM/halconf.h @@ -0,0 +1,312 @@ +/*
 +    ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio
 +
 +    Licensed under the Apache License, Version 2.0 (the "License");
 +    you may not use this file except in compliance with the License.
 +    You may obtain a copy of the License at
 +
 +        http://www.apache.org/licenses/LICENSE-2.0
 +
 +    Unless required by applicable law or agreed to in writing, software
 +    distributed under the License is distributed on an "AS IS" BASIS,
 +    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 +    See the License for the specific language governing permissions and
 +    limitations under the License.
 +*/
 +
 +/**
 + * @file    templates/halconf.h
 + * @brief   HAL configuration header.
 + * @details HAL configuration file, this file allows to enable or disable the
 + *          various device drivers from your application. You may also use
 + *          this file in order to override the device drivers default settings.
 + *
 + * @addtogroup HAL_CONF
 + * @{
 + */
 +
 +#ifndef _HALCONF_H_
 +#define _HALCONF_H_
 +
 +#include "mcuconf.h"
 +
 +/**
 + * @brief   Enables the TM subsystem.
 + */
 +#if !defined(HAL_USE_TM) || defined(__DOXYGEN__)
 +#define HAL_USE_TM                  TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the PAL subsystem.
 + */
 +#if !defined(HAL_USE_PAL) || defined(__DOXYGEN__)
 +#define HAL_USE_PAL                 TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the ADC subsystem.
 + */
 +#if !defined(HAL_USE_ADC) || defined(__DOXYGEN__)
 +#define HAL_USE_ADC                 TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the CAN subsystem.
 + */
 +#if !defined(HAL_USE_CAN) || defined(__DOXYGEN__)
 +#define HAL_USE_CAN                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the EXT subsystem.
 + */
 +#if !defined(HAL_USE_EXT) || defined(__DOXYGEN__)
 +#define HAL_USE_EXT                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the GPT subsystem.
 + */
 +#if !defined(HAL_USE_GPT) || defined(__DOXYGEN__)
 +#define HAL_USE_GPT                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the I2C subsystem.
 + */
 +#if !defined(HAL_USE_I2C) || defined(__DOXYGEN__)
 +#define HAL_USE_I2C                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the ICU subsystem.
 + */
 +#if !defined(HAL_USE_ICU) || defined(__DOXYGEN__)
 +#define HAL_USE_ICU                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the MAC subsystem.
 + */
 +#if !defined(HAL_USE_MAC) || defined(__DOXYGEN__)
 +#define HAL_USE_MAC                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the MMC_SPI subsystem.
 + */
 +#if !defined(HAL_USE_MMC_SPI) || defined(__DOXYGEN__)
 +#define HAL_USE_MMC_SPI             FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the PWM subsystem.
 + */
 +#if !defined(HAL_USE_PWM) || defined(__DOXYGEN__)
 +#define HAL_USE_PWM                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the RTC subsystem.
 + */
 +#if !defined(HAL_USE_RTC) || defined(__DOXYGEN__)
 +#define HAL_USE_RTC                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the SDC subsystem.
 + */
 +#if !defined(HAL_USE_SDC) || defined(__DOXYGEN__)
 +#define HAL_USE_SDC                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the SERIAL subsystem.
 + */
 +#if !defined(HAL_USE_SERIAL) || defined(__DOXYGEN__)
 +#define HAL_USE_SERIAL              FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the SERIAL over USB subsystem.
 + */
 +#if !defined(HAL_USE_SERIAL_USB) || defined(__DOXYGEN__)
 +#define HAL_USE_SERIAL_USB          FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the SPI subsystem.
 + */
 +#if !defined(HAL_USE_SPI) || defined(__DOXYGEN__)
 +#define HAL_USE_SPI                 TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the UART subsystem.
 + */
 +#if !defined(HAL_USE_UART) || defined(__DOXYGEN__)
 +#define HAL_USE_UART                FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the USB subsystem.
 + */
 +#if !defined(HAL_USE_USB) || defined(__DOXYGEN__)
 +#define HAL_USE_USB                 FALSE
 +#endif
 +
 +/*===========================================================================*/
 +/* ADC driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Enables synchronous APIs.
 + * @note    Disabling this option saves both code and data space.
 + */
 +#if !defined(ADC_USE_WAIT) || defined(__DOXYGEN__)
 +#define ADC_USE_WAIT                TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the @p adcAcquireBus() and @p adcReleaseBus() APIs.
 + * @note    Disabling this option saves both code and data space.
 + */
 +#if !defined(ADC_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
 +#define ADC_USE_MUTUAL_EXCLUSION    TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* CAN driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Sleep mode related APIs inclusion switch.
 + */
 +#if !defined(CAN_USE_SLEEP_MODE) || defined(__DOXYGEN__)
 +#define CAN_USE_SLEEP_MODE          TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* I2C driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Enables the mutual exclusion APIs on the I2C bus.
 + */
 +#if !defined(I2C_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
 +#define I2C_USE_MUTUAL_EXCLUSION    TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* MAC driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Enables an event sources for incoming packets.
 + */
 +#if !defined(MAC_USE_ZERO_COPY) || defined(__DOXYGEN__)
 +#define MAC_USE_ZERO_COPY           FALSE
 +#endif
 +
 +/**
 + * @brief   Enables an event sources for incoming packets.
 + */
 +#if !defined(MAC_USE_EVENTS) || defined(__DOXYGEN__)
 +#define MAC_USE_EVENTS              TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* MMC_SPI driver related settings.                                          */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Delays insertions.
 + * @details If enabled this options inserts delays into the MMC waiting
 + *          routines releasing some extra CPU time for the threads with
 + *          lower priority, this may slow down the driver a bit however.
 + *          This option is recommended also if the SPI driver does not
 + *          use a DMA channel and heavily loads the CPU.
 + */
 +#if !defined(MMC_NICE_WAITING) || defined(__DOXYGEN__)
 +#define MMC_NICE_WAITING            TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* SDC driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Number of initialization attempts before rejecting the card.
 + * @note    Attempts are performed at 10mS intervals.
 + */
 +#if !defined(SDC_INIT_RETRY) || defined(__DOXYGEN__)
 +#define SDC_INIT_RETRY              100
 +#endif
 +
 +/**
 + * @brief   Include support for MMC cards.
 + * @note    MMC support is not yet implemented so this option must be kept
 + *          at @p FALSE.
 + */
 +#if !defined(SDC_MMC_SUPPORT) || defined(__DOXYGEN__)
 +#define SDC_MMC_SUPPORT             FALSE
 +#endif
 +
 +/**
 + * @brief   Delays insertions.
 + * @details If enabled this options inserts delays into the MMC waiting
 + *          routines releasing some extra CPU time for the threads with
 + *          lower priority, this may slow down the driver a bit however.
 + */
 +#if !defined(SDC_NICE_WAITING) || defined(__DOXYGEN__)
 +#define SDC_NICE_WAITING            TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* SERIAL driver related settings.                                           */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Default bit rate.
 + * @details Configuration parameter, this is the baud rate selected for the
 + *          default configuration.
 + */
 +#if !defined(SERIAL_DEFAULT_BITRATE) || defined(__DOXYGEN__)
 +#define SERIAL_DEFAULT_BITRATE      38400
 +#endif
 +
 +/**
 + * @brief   Serial buffers size.
 + * @details Configuration parameter, you can change the depth of the queue
 + *          buffers depending on the requirements of your application.
 + * @note    The default is 64 bytes for both the transmission and receive
 + *          buffers.
 + */
 +#if !defined(SERIAL_BUFFERS_SIZE) || defined(__DOXYGEN__)
 +#define SERIAL_BUFFERS_SIZE         16
 +#endif
 +
 +/*===========================================================================*/
 +/* SPI driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Enables synchronous APIs.
 + * @note    Disabling this option saves both code and data space.
 + */
 +#if !defined(SPI_USE_WAIT) || defined(__DOXYGEN__)
 +#define SPI_USE_WAIT                TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the @p spiAcquireBus() and @p spiReleaseBus() APIs.
 + * @note    Disabling this option saves both code and data space.
 + */
 +#if !defined(SPI_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
 +#define SPI_USE_MUTUAL_EXCLUSION    TRUE
 +#endif
 +
 +#endif /* _HALCONF_H_ */
 +
 +/** @} */
 diff --git a/testhal/STM32F4xx/DMA_STORM/main.c b/testhal/STM32F4xx/DMA_STORM/main.c new file mode 100644 index 000000000..a3193fcc1 --- /dev/null +++ b/testhal/STM32F4xx/DMA_STORM/main.c @@ -0,0 +1,229 @@ +/*
 +    ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio
 +
 +    Licensed under the Apache License, Version 2.0 (the "License");
 +    you may not use this file except in compliance with the License.
 +    You may obtain a copy of the License at
 +
 +        http://www.apache.org/licenses/LICENSE-2.0
 +
 +    Unless required by applicable law or agreed to in writing, software
 +    distributed under the License is distributed on an "AS IS" BASIS,
 +    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 +    See the License for the specific language governing permissions and
 +    limitations under the License.
 +*/
 +
 +#include <string.h>
 +
 +#include "ch.h"
 +#include "hal.h"
 +
 +#define ADC_GRP2_NUM_CHANNELS   8
 +#define ADC_GRP2_BUF_DEPTH      16
 +
 +static adcsample_t samples2[ADC_GRP2_NUM_CHANNELS * ADC_GRP2_BUF_DEPTH];
 +
 +static void adccallback(ADCDriver *adcp, adcsample_t *buffer, size_t n) {
 +
 +  (void)adcp;
 +  (void)buffer;
 +  (void)n;
 +}
 +
 +static void adcerrorcallback(ADCDriver *adcp, adcerror_t err) {
 +
 +  (void)adcp;
 +  (void)err;
 +  chSysHalt();
 +}
 +
 +/*
 + * ADC conversion group.
 + * Mode:        Continuous, 16 samples of 8 channels, SW triggered.
 + * Channels:    IN11, IN12, IN11, IN12, IN11, IN12, Sensor, VRef.
 + */
 +static const ADCConversionGroup adcgrpcfg2 = {
 +  TRUE,
 +  ADC_GRP2_NUM_CHANNELS,
 +  adccallback,
 +  adcerrorcallback,
 +  0,                        /* CR1 */
 +  ADC_CR2_SWSTART,          /* CR2 */
 +  ADC_SMPR1_SMP_AN12(ADC_SAMPLE_56) | ADC_SMPR1_SMP_AN11(ADC_SAMPLE_56) |
 +  ADC_SMPR1_SMP_SENSOR(ADC_SAMPLE_144) | ADC_SMPR1_SMP_VREF(ADC_SAMPLE_144),
 +  0,                        /* SMPR2 */
 +  ADC_SQR1_NUM_CH(ADC_GRP2_NUM_CHANNELS),
 +  ADC_SQR2_SQ8_N(ADC_CHANNEL_SENSOR) | ADC_SQR2_SQ7_N(ADC_CHANNEL_VREFINT),
 +  ADC_SQR3_SQ6_N(ADC_CHANNEL_IN12)   | ADC_SQR3_SQ5_N(ADC_CHANNEL_IN11) |
 +  ADC_SQR3_SQ4_N(ADC_CHANNEL_IN12)   | ADC_SQR3_SQ3_N(ADC_CHANNEL_IN11) |
 +  ADC_SQR3_SQ2_N(ADC_CHANNEL_IN12)   | ADC_SQR3_SQ1_N(ADC_CHANNEL_IN11)
 +};
 +
 +/*
 + * Maximum speed SPI configuration (21MHz, CPHA=0, CPOL=0, MSb first).
 + */
 +static const SPIConfig hs_spicfg = {
 +  NULL,
 +  GPIOB,
 +  12,
 +  0
 +};
 +
 +static void tmo(void *p) {
 +
 +  (void)p;
 +  chSysHalt();
 +}
 +
 +/*
 + * SPI thread.
 + */
 +static WORKING_AREA(waSPI1, 1024);
 +static WORKING_AREA(waSPI2, 1024);
 +static WORKING_AREA(waSPI3, 1024);
 +static msg_t spi_thread(void *p) {
 +  unsigned i;
 +  SPIDriver *spip = (SPIDriver *)p;
 +  VirtualTimer vt;
 +  uint8_t txbuf[256];
 +  uint8_t rxbuf[256];
 +
 +  /* Prepare transmit pattern.*/
 +  for (i = 0; i < sizeof(txbuf); i++)
 +    txbuf[i] = (uint8_t)i;
 +
 +  /* Continuous transmission.*/
 +  while (TRUE) {
 +    /* Starts a VT working as watchdog to catch a malfunction in the SPI
 +       driver.*/
 +    chSysLock();
 +    chVTSetI(&vt, MS2ST(10), tmo, NULL);
 +    chSysUnlock();
 +
 +    spiExchange(spip, sizeof(txbuf), txbuf, rxbuf);
 +
 +    /* Stops the watchdog.*/
 +    chSysLock();
 +    if (chVTIsArmedI(&vt))
 +      chVTResetI(&vt);
 +    chSysUnlock();
 +  }
 +}
 +
 +/*
 + * This is a periodic thread that does absolutely nothing except flashing
 + * a LED.
 + */
 +static WORKING_AREA(waThread1, 128);
 +static msg_t Thread1(void *arg) {
 +
 +  (void)arg;
 +  chRegSetThreadName("blinker");
 +  while (TRUE) {
 +    palSetPad(GPIOD, GPIOD_LED3);       /* Orange.  */
 +    chThdSleepMilliseconds(500);
 +    palClearPad(GPIOD, GPIOD_LED3);     /* Orange.  */
 +    chThdSleepMilliseconds(500);
 +  }
 +}
 +
 +/*
 + * Application entry point.
 + */
 +int main(void) {
 +  unsigned i;
 +  static uint8_t patterns1[4096], patterns2[4096], buf1[4096], buf2[4096];
 +
 +  /* System initializations.
 +     - HAL initialization, this also initializes the configured device drivers
 +       and performs the board-specific initializations.
 +     - Kernel initialization, the main() function becomes a thread and the
 +       RTOS is active.*/
 +  halInit();
 +  chSysInit();
 +
 +  /* Creates the blinker thread.*/
 +  chThdCreateStatic(waThread1, sizeof(waThread1), NORMALPRIO + 10,
 +                    Thread1, NULL);
 +
 +  /* Activates the ADC1 driver and the temperature sensor.*/
 +  adcStart(&ADCD1, NULL);
 +  adcSTM32EnableTSVREFE();
 +
 +  /* Starts an ADC continuous conversion.*/
 +  adcStartConversion(&ADCD1, &adcgrpcfg2, samples2, ADC_GRP2_BUF_DEPTH);
 +
 +  /* Activating SPI drivers.*/
 +  spiStart(&SPID1, &hs_spicfg);
 +  spiStart(&SPID2, &hs_spicfg);
 +  spiStart(&SPID3, &hs_spicfg);
 +
 +  /* Starting SPI threads instances.*/
 +  chThdCreateStatic(waSPI1, sizeof(waSPI1), NORMALPRIO + 1, spi_thread, &SPID1);
 +  chThdCreateStatic(waSPI2, sizeof(waSPI2), NORMALPRIO + 1, spi_thread, &SPID2);
 +  chThdCreateStatic(waSPI3, sizeof(waSPI3), NORMALPRIO + 1, spi_thread, &SPID3);
 +
 +  /* Allocating two DMA2 streams for memory copy operations.*/
 +  if (dmaStreamAllocate(STM32_DMA2_STREAM6, 0, NULL, NULL))
 +    chSysHalt();
 +  if (dmaStreamAllocate(STM32_DMA2_STREAM7, 0, NULL, NULL))
 +    chSysHalt();
 +  for (i = 0; i < sizeof (patterns1); i++)
 +    patterns1[i] = (uint8_t)i;
 +  for (i = 0; i < sizeof (patterns2); i++)
 +    patterns2[i] = (uint8_t)(i ^ 0xAA);
 +
 +  /* Normal main() thread activity, it does continues memory copy operations
 +     using 2 DMA streams at the lowest priority.*/
 +  while (TRUE) {
 +    VirtualTimer vt;
 +
 +    /* Starts a VT working as watchdog to catch a malfunction in the DMA
 +       driver.*/
 +    chSysLock();
 +    chVTSetI(&vt, MS2ST(10), tmo, NULL);
 +    chSysUnlock();
 +
 +    /* Copy pattern 1.*/
 +    dmaStartMemCopy(STM32_DMA2_STREAM6,
 +                    STM32_DMA_CR_PL(0) | STM32_DMA_CR_PSIZE_BYTE |
 +                                         STM32_DMA_CR_MSIZE_BYTE,
 +                    patterns1, buf1, sizeof (patterns1));
 +    dmaStartMemCopy(STM32_DMA2_STREAM7,
 +                    STM32_DMA_CR_PL(0) | STM32_DMA_CR_PSIZE_BYTE |
 +                                         STM32_DMA_CR_MSIZE_BYTE,
 +                    patterns1, buf2, sizeof (patterns1));
 +    dmaWaitCompletion(STM32_DMA2_STREAM6);
 +    dmaWaitCompletion(STM32_DMA2_STREAM7);
 +    if (memcmp(patterns1, buf1, sizeof (patterns1)))
 +      chSysHalt();
 +    if (memcmp(patterns1, buf2, sizeof (patterns1)))
 +      chSysHalt();
 +
 +    /* Copy pattern 2.*/
 +    dmaStartMemCopy(STM32_DMA2_STREAM6,
 +                    STM32_DMA_CR_PL(0) | STM32_DMA_CR_PSIZE_BYTE |
 +                                         STM32_DMA_CR_MSIZE_BYTE,
 +                    patterns2, buf1, sizeof (patterns2));
 +    dmaStartMemCopy(STM32_DMA2_STREAM7,
 +                    STM32_DMA_CR_PL(0) | STM32_DMA_CR_PSIZE_BYTE |
 +                                         STM32_DMA_CR_MSIZE_BYTE,
 +                    patterns2, buf2, sizeof (patterns2));
 +    dmaWaitCompletion(STM32_DMA2_STREAM6);
 +    dmaWaitCompletion(STM32_DMA2_STREAM7);
 +    if (memcmp(patterns2, buf1, sizeof (patterns2)))
 +      chSysHalt();
 +    if (memcmp(patterns2, buf2, sizeof (patterns2)))
 +      chSysHalt();
 +
 +    /* Stops the watchdog.*/
 +    chSysLock();
 +    if (chVTIsArmedI(&vt))
 +      chVTResetI(&vt);
 +    chSysUnlock();
 +
 +    chThdSleepMilliseconds(2);
 +  }
 +  return 0;
 +}
 diff --git a/testhal/STM32F4xx/DMA_STORM/mcuconf.h b/testhal/STM32F4xx/DMA_STORM/mcuconf.h new file mode 100644 index 000000000..84cd9a0f1 --- /dev/null +++ b/testhal/STM32F4xx/DMA_STORM/mcuconf.h @@ -0,0 +1,278 @@ +/*
 +    ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio
 +
 +    Licensed under the Apache License, Version 2.0 (the "License");
 +    you may not use this file except in compliance with the License.
 +    You may obtain a copy of the License at
 +
 +        http://www.apache.org/licenses/LICENSE-2.0
 +
 +    Unless required by applicable law or agreed to in writing, software
 +    distributed under the License is distributed on an "AS IS" BASIS,
 +    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 +    See the License for the specific language governing permissions and
 +    limitations under the License.
 +*/
 +
 +/*
 + * STM32F4xx drivers configuration.
 + * The following settings override the default settings present in
 + * the various device driver implementation headers.
 + * Note that the settings for each driver only have effect if the whole
 + * driver is enabled in halconf.h.
 + *
 + * IRQ priorities:
 + * 15...0       Lowest...Highest.
 + *
 + * DMA priorities:
 + * 0...3        Lowest...Highest.
 + */
 +
 +#define STM32F4xx_MCUCONF
 +
 +/*
 + * HAL driver system settings.
 + */
 +#define STM32_NO_INIT                       FALSE
 +#define STM32_HSI_ENABLED                   TRUE
 +#define STM32_LSI_ENABLED                   TRUE
 +#define STM32_HSE_ENABLED                   TRUE
 +#define STM32_LSE_ENABLED                   FALSE
 +#define STM32_CLOCK48_REQUIRED              TRUE
 +#define STM32_SW                            STM32_SW_PLL
 +#define STM32_PLLSRC                        STM32_PLLSRC_HSE
 +#define STM32_PLLM_VALUE                    8
 +#define STM32_PLLN_VALUE                    336
 +#define STM32_PLLP_VALUE                    2
 +#define STM32_PLLQ_VALUE                    7
 +#define STM32_HPRE                          STM32_HPRE_DIV1
 +#define STM32_PPRE1                         STM32_PPRE1_DIV4
 +#define STM32_PPRE2                         STM32_PPRE2_DIV2
 +#define STM32_RTCSEL                        STM32_RTCSEL_LSI
 +#define STM32_RTCPRE_VALUE                  8
 +#define STM32_MCO1SEL                       STM32_MCO1SEL_HSI
 +#define STM32_MCO1PRE                       STM32_MCO1PRE_DIV1
 +#define STM32_MCO2SEL                       STM32_MCO2SEL_SYSCLK
 +#define STM32_MCO2PRE                       STM32_MCO2PRE_DIV5
 +#define STM32_I2SSRC                        STM32_I2SSRC_CKIN
 +#define STM32_PLLI2SN_VALUE                 192
 +#define STM32_PLLI2SR_VALUE                 5
 +#define STM32_VOS                           STM32_VOS_HIGH
 +#define STM32_PVD_ENABLE                    FALSE
 +#define STM32_PLS                           STM32_PLS_LEV0
 +
 +/*
 + * ADC driver system settings.
 + */
 +#define STM32_ADC_ADCPRE                    ADC_CCR_ADCPRE_DIV4
 +#define STM32_ADC_USE_ADC1                  TRUE
 +#define STM32_ADC_USE_ADC2                  FALSE
 +#define STM32_ADC_USE_ADC3                  FALSE
 +#define STM32_ADC_ADC1_DMA_STREAM           STM32_DMA_STREAM_ID(2, 4)
 +#define STM32_ADC_ADC2_DMA_STREAM           STM32_DMA_STREAM_ID(2, 2)
 +#define STM32_ADC_ADC3_DMA_STREAM           STM32_DMA_STREAM_ID(2, 1)
 +#define STM32_ADC_ADC1_DMA_PRIORITY         2
 +#define STM32_ADC_ADC2_DMA_PRIORITY         2
 +#define STM32_ADC_ADC3_DMA_PRIORITY         2
 +#define STM32_ADC_IRQ_PRIORITY              6
 +#define STM32_ADC_ADC1_DMA_IRQ_PRIORITY     6
 +#define STM32_ADC_ADC2_DMA_IRQ_PRIORITY     6
 +#define STM32_ADC_ADC3_DMA_IRQ_PRIORITY     6
 +
 +/*
 + * CAN driver system settings.
 + */
 +#define STM32_CAN_USE_CAN1                  FALSE
 +#define STM32_CAN_USE_CAN2                  FALSE
 +#define STM32_CAN_CAN1_IRQ_PRIORITY         11
 +#define STM32_CAN_CAN2_IRQ_PRIORITY         11
 +
 +/*
 + * EXT driver system settings.
 + */
 +#define STM32_EXT_EXTI0_IRQ_PRIORITY        6
 +#define STM32_EXT_EXTI1_IRQ_PRIORITY        6
 +#define STM32_EXT_EXTI2_IRQ_PRIORITY        6
 +#define STM32_EXT_EXTI3_IRQ_PRIORITY        6
 +#define STM32_EXT_EXTI4_IRQ_PRIORITY        6
 +#define STM32_EXT_EXTI5_9_IRQ_PRIORITY      6
 +#define STM32_EXT_EXTI10_15_IRQ_PRIORITY    6
 +#define STM32_EXT_EXTI16_IRQ_PRIORITY       6
 +#define STM32_EXT_EXTI17_IRQ_PRIORITY       15
 +#define STM32_EXT_EXTI18_IRQ_PRIORITY       6
 +#define STM32_EXT_EXTI19_IRQ_PRIORITY       6
 +#define STM32_EXT_EXTI20_IRQ_PRIORITY       6
 +#define STM32_EXT_EXTI21_IRQ_PRIORITY       15
 +#define STM32_EXT_EXTI22_IRQ_PRIORITY       15
 +
 +/*
 + * GPT driver system settings.
 + */
 +#define STM32_GPT_USE_TIM1                  FALSE
 +#define STM32_GPT_USE_TIM2                  FALSE
 +#define STM32_GPT_USE_TIM3                  FALSE
 +#define STM32_GPT_USE_TIM4                  FALSE
 +#define STM32_GPT_USE_TIM5                  FALSE
 +#define STM32_GPT_USE_TIM6                  FALSE
 +#define STM32_GPT_USE_TIM7                  FALSE
 +#define STM32_GPT_USE_TIM8                  FALSE
 +#define STM32_GPT_USE_TIM9                  FALSE
 +#define STM32_GPT_USE_TIM11                 FALSE
 +#define STM32_GPT_USE_TIM12                 FALSE
 +#define STM32_GPT_USE_TIM14                 FALSE
 +#define STM32_GPT_TIM1_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM2_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM3_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM4_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM5_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM6_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM7_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM8_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM9_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM11_IRQ_PRIORITY        7
 +#define STM32_GPT_TIM12_IRQ_PRIORITY        7
 +#define STM32_GPT_TIM14_IRQ_PRIORITY        7
 +
 +/*
 + * I2C driver system settings.
 + */
 +#define STM32_I2C_USE_I2C1                  FALSE
 +#define STM32_I2C_USE_I2C2                  FALSE
 +#define STM32_I2C_USE_I2C3                  FALSE
 +#define STM32_I2C_I2C1_RX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 0)
 +#define STM32_I2C_I2C1_TX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 6)
 +#define STM32_I2C_I2C2_RX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 2)
 +#define STM32_I2C_I2C2_TX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 7)
 +#define STM32_I2C_I2C3_RX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 2)
 +#define STM32_I2C_I2C3_TX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 4)
 +#define STM32_I2C_I2C1_IRQ_PRIORITY         5
 +#define STM32_I2C_I2C2_IRQ_PRIORITY         5
 +#define STM32_I2C_I2C3_IRQ_PRIORITY         5
 +#define STM32_I2C_I2C1_DMA_PRIORITY         3
 +#define STM32_I2C_I2C2_DMA_PRIORITY         3
 +#define STM32_I2C_I2C3_DMA_PRIORITY         3
 +#define STM32_I2C_I2C1_DMA_ERROR_HOOK()     chSysHalt()
 +#define STM32_I2C_I2C2_DMA_ERROR_HOOK()     chSysHalt()
 +#define STM32_I2C_I2C3_DMA_ERROR_HOOK()     chSysHalt()
 +
 +/*
 + * ICU driver system settings.
 + */
 +#define STM32_ICU_USE_TIM1                  FALSE
 +#define STM32_ICU_USE_TIM2                  FALSE
 +#define STM32_ICU_USE_TIM3                  FALSE
 +#define STM32_ICU_USE_TIM4                  FALSE
 +#define STM32_ICU_USE_TIM5                  FALSE
 +#define STM32_ICU_USE_TIM8                  FALSE
 +#define STM32_ICU_USE_TIM9                  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
 +#define STM32_ICU_TIM8_IRQ_PRIORITY         7
 +#define STM32_ICU_TIM9_IRQ_PRIORITY         7
 +
 +/*
 + * MAC driver system settings.
 + */
 +#define STM32_MAC_TRANSMIT_BUFFERS          2
 +#define STM32_MAC_RECEIVE_BUFFERS           4
 +#define STM32_MAC_BUFFERS_SIZE              1522
 +#define STM32_MAC_PHY_TIMEOUT               100
 +#define STM32_MAC_ETH1_CHANGE_PHY_STATE     TRUE
 +#define STM32_MAC_ETH1_IRQ_PRIORITY         13
 +#define STM32_MAC_IP_CHECKSUM_OFFLOAD       0
 +
 +/*
 + * PWM driver system settings.
 + */
 +#define STM32_PWM_USE_ADVANCED              FALSE
 +#define STM32_PWM_USE_TIM1                  FALSE
 +#define STM32_PWM_USE_TIM2                  FALSE
 +#define STM32_PWM_USE_TIM3                  FALSE
 +#define STM32_PWM_USE_TIM4                  FALSE
 +#define STM32_PWM_USE_TIM5                  FALSE
 +#define STM32_PWM_USE_TIM8                  FALSE
 +#define STM32_PWM_USE_TIM9                  FALSE
 +#define STM32_PWM_TIM1_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM2_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM3_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM4_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM5_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM8_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM9_IRQ_PRIORITY         7
 +
 +/*
 + * SERIAL driver system settings.
 + */
 +#define STM32_SERIAL_USE_USART1             FALSE
 +#define STM32_SERIAL_USE_USART2             FALSE
 +#define STM32_SERIAL_USE_USART3             FALSE
 +#define STM32_SERIAL_USE_UART4              FALSE
 +#define STM32_SERIAL_USE_UART5              FALSE
 +#define STM32_SERIAL_USE_USART6             FALSE
 +#define STM32_SERIAL_USART1_PRIORITY        12
 +#define STM32_SERIAL_USART2_PRIORITY        12
 +#define STM32_SERIAL_USART3_PRIORITY        12
 +#define STM32_SERIAL_UART4_PRIORITY         12
 +#define STM32_SERIAL_UART5_PRIORITY         12
 +#define STM32_SERIAL_USART6_PRIORITY        12
 +
 +/*
 + * SPI driver system settings.
 + */
 +#define STM32_SPI_USE_SPI1                  TRUE
 +#define STM32_SPI_USE_SPI2                  TRUE
 +#define STM32_SPI_USE_SPI3                  TRUE
 +#define STM32_SPI_SPI1_RX_DMA_STREAM        STM32_DMA_STREAM_ID(2, 0)
 +#define STM32_SPI_SPI1_TX_DMA_STREAM        STM32_DMA_STREAM_ID(2, 3)
 +#define STM32_SPI_SPI2_RX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 3)
 +#define STM32_SPI_SPI2_TX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 4)
 +#define STM32_SPI_SPI3_RX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 0)
 +#define STM32_SPI_SPI3_TX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 7)
 +#define STM32_SPI_SPI1_DMA_PRIORITY         1
 +#define STM32_SPI_SPI2_DMA_PRIORITY         1
 +#define STM32_SPI_SPI3_DMA_PRIORITY         1
 +#define STM32_SPI_SPI1_IRQ_PRIORITY         10
 +#define STM32_SPI_SPI2_IRQ_PRIORITY         10
 +#define STM32_SPI_SPI3_IRQ_PRIORITY         10
 +#define STM32_SPI_DMA_ERROR_HOOK(spip)      chSysHalt()
 +
 +/*
 + * UART driver system settings.
 + */
 +#define STM32_UART_USE_USART1               FALSE
 +#define STM32_UART_USE_USART2               FALSE
 +#define STM32_UART_USE_USART3               FALSE
 +#define STM32_UART_USE_USART6               FALSE
 +#define STM32_UART_USART1_RX_DMA_STREAM     STM32_DMA_STREAM_ID(2, 5)
 +#define STM32_UART_USART1_TX_DMA_STREAM     STM32_DMA_STREAM_ID(2, 7)
 +#define STM32_UART_USART2_RX_DMA_STREAM     STM32_DMA_STREAM_ID(1, 5)
 +#define STM32_UART_USART2_TX_DMA_STREAM     STM32_DMA_STREAM_ID(1, 6)
 +#define STM32_UART_USART3_RX_DMA_STREAM     STM32_DMA_STREAM_ID(1, 1)
 +#define STM32_UART_USART3_TX_DMA_STREAM     STM32_DMA_STREAM_ID(1, 3)
 +#define STM32_UART_USART6_RX_DMA_STREAM     STM32_DMA_STREAM_ID(2, 2)
 +#define STM32_UART_USART6_TX_DMA_STREAM     STM32_DMA_STREAM_ID(2, 7)
 +#define STM32_UART_USART1_IRQ_PRIORITY      12
 +#define STM32_UART_USART2_IRQ_PRIORITY      12
 +#define STM32_UART_USART3_IRQ_PRIORITY      12
 +#define STM32_UART_USART6_IRQ_PRIORITY      12
 +#define STM32_UART_USART1_DMA_PRIORITY      0
 +#define STM32_UART_USART2_DMA_PRIORITY      0
 +#define STM32_UART_USART3_DMA_PRIORITY      0
 +#define STM32_UART_USART6_DMA_PRIORITY      0
 +#define STM32_UART_DMA_ERROR_HOOK(uartp)    chSysHalt()
 +
 +/*
 + * USB driver system settings.
 + */
 +#define STM32_USB_USE_OTG1                  FALSE
 +#define STM32_USB_USE_OTG2                  FALSE
 +#define STM32_USB_OTG1_IRQ_PRIORITY         14
 +#define STM32_USB_OTG2_IRQ_PRIORITY         14
 +#define STM32_USB_OTG1_RX_FIFO_SIZE         512
 +#define STM32_USB_OTG2_RX_FIFO_SIZE         1024
 +#define STM32_USB_OTG_THREAD_PRIO           LOWPRIO
 +#define STM32_USB_OTG_THREAD_STACK_SIZE     128
 +#define STM32_USB_OTGFIFO_FILL_BASEPRI      0
 diff --git a/testhal/STM32F4xx/EXT/.cproject b/testhal/STM32F4xx/EXT/.cproject new file mode 100644 index 000000000..59e262be9 --- /dev/null +++ b/testhal/STM32F4xx/EXT/.cproject @@ -0,0 +1,51 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?>
 +<?fileVersion 4.0.0?>
 +
 +<cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
 +	<storageModule moduleId="org.eclipse.cdt.core.settings">
 +		<cconfiguration id="0.1606155520">
 +			<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="0.1606155520" moduleId="org.eclipse.cdt.core.settings" name="Default">
 +				<externalSettings/>
 +				<extensions>
 +					<extension id="org.eclipse.cdt.core.VCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 +					<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 +					<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
 +					<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 +					<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 +					<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 +				</extensions>
 +			</storageModule>
 +			<storageModule moduleId="cdtBuildSystem" version="4.0.0">
 +				<configuration artifactName="${ProjName}" buildProperties="" description="" id="0.1606155520" name="Default" parent="org.eclipse.cdt.build.core.prefbase.cfg">
 +					<folderInfo id="0.1606155520." name="/" resourcePath="">
 +						<toolChain id="org.eclipse.cdt.build.core.prefbase.toolchain.242897507" name="No ToolChain" resourceTypeBasedDiscovery="false" superClass="org.eclipse.cdt.build.core.prefbase.toolchain">
 +							<targetPlatform id="org.eclipse.cdt.build.core.prefbase.toolchain.242897507.2146631494" name=""/>
 +							<builder id="org.eclipse.cdt.build.core.settings.default.builder.419767910" keepEnvironmentInBuildfile="false" managedBuildOn="false" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="org.eclipse.cdt.build.core.settings.default.builder"/>
 +							<tool id="org.eclipse.cdt.build.core.settings.holder.libs.1249252172" name="holder for library settings" superClass="org.eclipse.cdt.build.core.settings.holder.libs"/>
 +							<tool id="org.eclipse.cdt.build.core.settings.holder.839939978" name="Assembly" superClass="org.eclipse.cdt.build.core.settings.holder">
 +								<inputType id="org.eclipse.cdt.build.core.settings.holder.inType.947583973" languageId="org.eclipse.cdt.core.assembly" languageName="Assembly" sourceContentType="org.eclipse.cdt.core.asmSource" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
 +							</tool>
 +							<tool id="org.eclipse.cdt.build.core.settings.holder.163855055" name="GNU C++" superClass="org.eclipse.cdt.build.core.settings.holder">
 +								<inputType id="org.eclipse.cdt.build.core.settings.holder.inType.252468395" languageId="org.eclipse.cdt.core.g++" languageName="GNU C++" sourceContentType="org.eclipse.cdt.core.cxxSource,org.eclipse.cdt.core.cxxHeader" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
 +							</tool>
 +							<tool id="org.eclipse.cdt.build.core.settings.holder.1373333725" name="GNU C" superClass="org.eclipse.cdt.build.core.settings.holder">
 +								<inputType id="org.eclipse.cdt.build.core.settings.holder.inType.401218830" languageId="org.eclipse.cdt.core.gcc" languageName="GNU C" sourceContentType="org.eclipse.cdt.core.cSource,org.eclipse.cdt.core.cHeader" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
 +							</tool>
 +						</toolChain>
 +					</folderInfo>
 +				</configuration>
 +			</storageModule>
 +			<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
 +		</cconfiguration>
 +	</storageModule>
 +	<storageModule moduleId="cdtBuildSystem" version="4.0.0">
 +		<project id="STM32F4xx-EXT.null.2105691622" name="STM32F4xx-EXT"/>
 +	</storageModule>
 +	<storageModule moduleId="scannerConfiguration">
 +		<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
 +		<scannerConfigBuildInfo instanceId="0.1606155520">
 +			<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile"/>
 +		</scannerConfigBuildInfo>
 +	</storageModule>
 +	<storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
 +</cproject>
 diff --git a/testhal/STM32F4xx/EXT/.project b/testhal/STM32F4xx/EXT/.project new file mode 100644 index 000000000..b4ae995c3 --- /dev/null +++ b/testhal/STM32F4xx/EXT/.project @@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="UTF-8"?>
 +<projectDescription>
 +	<name>STM32F4xx-EXT</name>
 +	<comment></comment>
 +	<projects>
 +	</projects>
 +	<buildSpec>
 +		<buildCommand>
 +			<name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
 +			<triggers>clean,full,incremental,</triggers>
 +			<arguments>
 +			</arguments>
 +		</buildCommand>
 +		<buildCommand>
 +			<name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
 +			<triggers>full,incremental,</triggers>
 +			<arguments>
 +			</arguments>
 +		</buildCommand>
 +	</buildSpec>
 +	<natures>
 +		<nature>org.eclipse.cdt.core.cnature</nature>
 +		<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
 +		<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
 +	</natures>
 +	<linkedResources>
 +		<link>
 +			<name>board</name>
 +			<type>2</type>
 +			<locationURI>CHIBIOS/boards/ST_STM32F4_DISCOVERY</locationURI>
 +		</link>
 +		<link>
 +			<name>os</name>
 +			<type>2</type>
 +			<locationURI>CHIBIOS/os</locationURI>
 +		</link>
 +	</linkedResources>
 +</projectDescription>
 diff --git a/testhal/STM32F4xx/EXT/Makefile b/testhal/STM32F4xx/EXT/Makefile new file mode 100644 index 000000000..86de6d81c --- /dev/null +++ b/testhal/STM32F4xx/EXT/Makefile @@ -0,0 +1,222 @@ +##############################################################################
 +# Build global options
 +# NOTE: Can be overridden externally.
 +#
 +
 +# Compiler options here.
 +ifeq ($(USE_OPT),)
 +  USE_OPT = -O2 -ggdb -fomit-frame-pointer -falign-functions=16
 +endif
 +
 +# C specific options here (added to USE_OPT).
 +ifeq ($(USE_COPT),)
 +  USE_COPT = 
 +endif
 +
 +# C++ specific options here (added to USE_OPT).
 +ifeq ($(USE_CPPOPT),)
 +  USE_CPPOPT = -fno-rtti
 +endif
 +
 +# Enable this if you want the linker to remove unused code and data
 +ifeq ($(USE_LINK_GC),)
 +  USE_LINK_GC = yes
 +endif
 +
 +# If enabled, this option allows to compile the application in THUMB mode.
 +ifeq ($(USE_THUMB),)
 +  USE_THUMB = yes
 +endif
 +
 +# Enable this if you want to see the full log while compiling.
 +ifeq ($(USE_VERBOSE_COMPILE),)
 +  USE_VERBOSE_COMPILE = no
 +endif
 +
 +#
 +# Build global options
 +##############################################################################
 +
 +##############################################################################
 +# Architecture or project specific options
 +#
 +
 +# Enables the use of FPU on Cortex-M4.
 +# Enable this if you really want to use the STM FWLib.
 +ifeq ($(USE_FPU),)
 +  USE_FPU = no
 +endif
 +
 +# Enable this if you really want to use the STM FWLib.
 +ifeq ($(USE_FWLIB),)
 +  USE_FWLIB = no
 +endif
 +
 +#
 +# Architecture or project specific options
 +##############################################################################
 +
 +##############################################################################
 +# Project, sources and paths
 +#
 +
 +# Define project name here
 +PROJECT = ch
 +
 +# Imported source files and paths
 +CHIBIOS = ../../..
 +include $(CHIBIOS)/boards/ST_STM32F4_DISCOVERY/board.mk
 +include $(CHIBIOS)/os/hal/platforms/STM32F4xx/platform.mk
 +include $(CHIBIOS)/os/hal/hal.mk
 +include $(CHIBIOS)/os/ports/GCC/ARMCMx/STM32F4xx/port.mk
 +include $(CHIBIOS)/os/kernel/kernel.mk
 +include $(CHIBIOS)/test/test.mk
 +
 +# Define linker script file here
 +LDSCRIPT= $(PORTLD)/STM32F407xG.ld
 +#LDSCRIPT= $(PORTLD)/STM32F407xG_CCM.ld
 +
 +# C sources that can be compiled in ARM or THUMB mode depending on the global
 +# setting.
 +CSRC = $(PORTSRC) \
 +       $(KERNSRC) \
 +       $(TESTSRC) \
 +       $(HALSRC) \
 +       $(PLATFORMSRC) \
 +       $(BOARDSRC) \
 +       $(CHIBIOS)/os/various/chprintf.c \
 +       main.c
 +
 +# C++ sources that can be compiled in ARM or THUMB mode depending on the global
 +# setting.
 +CPPSRC =
 +
 +# C sources to be compiled in ARM mode regardless of the global setting.
 +# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler
 +#       option that results in lower performance and larger code size.
 +ACSRC =
 +
 +# C++ sources to be compiled in ARM mode regardless of the global setting.
 +# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler
 +#       option that results in lower performance and larger code size.
 +ACPPSRC =
 +
 +# C sources to be compiled in THUMB mode regardless of the global setting.
 +# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler
 +#       option that results in lower performance and larger code size.
 +TCSRC =
 +
 +# C sources to be compiled in THUMB mode regardless of the global setting.
 +# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler
 +#       option that results in lower performance and larger code size.
 +TCPPSRC =
 +
 +# List ASM source files here
 +ASMSRC = $(PORTASM)
 +
 +INCDIR = $(PORTINC) $(KERNINC) $(TESTINC) \
 +         $(HALINC) $(PLATFORMINC) $(BOARDINC) \
 +         $(CHIBIOS)/os/various
 +
 +#
 +# Project, sources and paths
 +##############################################################################
 +
 +##############################################################################
 +# Compiler settings
 +#
 +
 +MCU  = cortex-m4
 +
 +#TRGT = arm-elf-
 +TRGT = arm-none-eabi-
 +CC   = $(TRGT)gcc
 +CPPC = $(TRGT)g++
 +# Enable loading with g++ only if you need C++ runtime support.
 +# NOTE: You can use C++ even without C++ support if you are careful. C++
 +#       runtime support makes code size explode.
 +LD   = $(TRGT)gcc
 +#LD   = $(TRGT)g++
 +CP   = $(TRGT)objcopy
 +AS   = $(TRGT)gcc -x assembler-with-cpp
 +OD   = $(TRGT)objdump
 +HEX  = $(CP) -O ihex
 +BIN  = $(CP) -O binary
 +
 +# ARM-specific options here
 +AOPT =
 +
 +# THUMB-specific options here
 +TOPT = -mthumb -DTHUMB
 +
 +# Define C warning options here
 +CWARN = -Wall -Wextra -Wstrict-prototypes
 +
 +# Define C++ warning options here
 +CPPWARN = -Wall -Wextra
 +
 +#
 +# Compiler settings
 +##############################################################################
 +
 +##############################################################################
 +# Start of default section
 +#
 +
 +# List all default C defines here, like -D_DEBUG=1
 +DDEFS =
 +
 +# List all default ASM defines here, like -D_DEBUG=1
 +DADEFS =
 +
 +# List all default directories to look for include files here
 +DINCDIR =
 +
 +# List the default directory to look for the libraries here
 +DLIBDIR =
 +
 +# List all default libraries here
 +DLIBS =
 +
 +#
 +# End of default section
 +##############################################################################
 +
 +##############################################################################
 +# Start of user section
 +#
 +
 +# List all user C define here, like -D_DEBUG=1
 +UDEFS =
 +
 +# Define ASM defines here
 +UADEFS =
 +
 +# List all user directories here
 +UINCDIR =
 +
 +# List the user directory to look for the libraries here
 +ULIBDIR =
 +
 +# List all user libraries here
 +ULIBS =
 +
 +#
 +# End of user defines
 +##############################################################################
 +
 +ifeq ($(USE_FPU),yes)
 +  USE_OPT += -mfloat-abi=softfp -mfpu=fpv4-sp-d16 -fsingle-precision-constant
 +  DDEFS += -DCORTEX_USE_FPU=TRUE
 +else
 +  DDEFS += -DCORTEX_USE_FPU=FALSE
 +endif
 +
 +ifeq ($(USE_FWLIB),yes)
 +  include $(CHIBIOS)/ext/stm32lib/stm32lib.mk
 +  CSRC += $(STM32SRC)
 +  INCDIR += $(STM32INC)
 +  USE_OPT += -DUSE_STDPERIPH_DRIVER
 +endif
 +
 +include $(CHIBIOS)/os/ports/GCC/ARMCMx/rules.mk
 diff --git a/testhal/STM32F4xx/EXT/chconf.h b/testhal/STM32F4xx/EXT/chconf.h new file mode 100644 index 000000000..2e6fcc6ee --- /dev/null +++ b/testhal/STM32F4xx/EXT/chconf.h @@ -0,0 +1,531 @@ +/*
 +    ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio
 +
 +    Licensed under the Apache License, Version 2.0 (the "License");
 +    you may not use this file except in compliance with the License.
 +    You may obtain a copy of the License at
 +
 +        http://www.apache.org/licenses/LICENSE-2.0
 +
 +    Unless required by applicable law or agreed to in writing, software
 +    distributed under the License is distributed on an "AS IS" BASIS,
 +    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 +    See the License for the specific language governing permissions and
 +    limitations under the License.
 +*/
 +
 +/**
 + * @file    templates/chconf.h
 + * @brief   Configuration file template.
 + * @details A copy of this file must be placed in each project directory, it
 + *          contains the application specific kernel settings.
 + *
 + * @addtogroup config
 + * @details Kernel related settings and hooks.
 + * @{
 + */
 +
 +#ifndef _CHCONF_H_
 +#define _CHCONF_H_
 +
 +/*===========================================================================*/
 +/**
 + * @name Kernel parameters and options
 + * @{
 + */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   System tick frequency.
 + * @details Frequency of the system timer that drives the system ticks. This
 + *          setting also defines the system tick time unit.
 + */
 +#if !defined(CH_FREQUENCY) || defined(__DOXYGEN__)
 +#define CH_FREQUENCY                    1000
 +#endif
 +
 +/**
 + * @brief   Round robin interval.
 + * @details This constant is the number of system ticks allowed for the
 + *          threads before preemption occurs. Setting this value to zero
 + *          disables the preemption for threads with equal priority and the
 + *          round robin becomes cooperative. Note that higher priority
 + *          threads can still preempt, the kernel is always preemptive.
 + *
 + * @note    Disabling the round robin preemption makes the kernel more compact
 + *          and generally faster.
 + */
 +#if !defined(CH_TIME_QUANTUM) || defined(__DOXYGEN__)
 +#define CH_TIME_QUANTUM                 20
 +#endif
 +
 +/**
 + * @brief   Managed RAM size.
 + * @details Size of the RAM area to be managed by the OS. If set to zero
 + *          then the whole available RAM is used. The core memory is made
 + *          available to the heap allocator and/or can be used directly through
 + *          the simplified core memory allocator.
 + *
 + * @note    In order to let the OS manage the whole RAM the linker script must
 + *          provide the @p __heap_base__ and @p __heap_end__ symbols.
 + * @note    Requires @p CH_USE_MEMCORE.
 + */
 +#if !defined(CH_MEMCORE_SIZE) || defined(__DOXYGEN__)
 +#define CH_MEMCORE_SIZE                 0
 +#endif
 +
 +/**
 + * @brief   Idle thread automatic spawn suppression.
 + * @details When this option is activated the function @p chSysInit()
 + *          does not spawn the idle thread automatically. The application has
 + *          then the responsibility to do one of the following:
 + *          - Spawn a custom idle thread at priority @p IDLEPRIO.
 + *          - Change the main() thread priority to @p IDLEPRIO then enter
 + *            an endless loop. In this scenario the @p main() thread acts as
 + *            the idle thread.
 + *          .
 + * @note    Unless an idle thread is spawned the @p main() thread must not
 + *          enter a sleep state.
 + */
 +#if !defined(CH_NO_IDLE_THREAD) || defined(__DOXYGEN__)
 +#define CH_NO_IDLE_THREAD               FALSE
 +#endif
 +
 +/** @} */
 +
 +/*===========================================================================*/
 +/**
 + * @name Performance options
 + * @{
 + */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   OS optimization.
 + * @details If enabled then time efficient rather than space efficient code
 + *          is used when two possible implementations exist.
 + *
 + * @note    This is not related to the compiler optimization options.
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_OPTIMIZE_SPEED) || defined(__DOXYGEN__)
 +#define CH_OPTIMIZE_SPEED               TRUE
 +#endif
 +
 +/** @} */
 +
 +/*===========================================================================*/
 +/**
 + * @name Subsystem options
 + * @{
 + */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Threads registry APIs.
 + * @details If enabled then the registry APIs are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_REGISTRY) || defined(__DOXYGEN__)
 +#define CH_USE_REGISTRY                 TRUE
 +#endif
 +
 +/**
 + * @brief   Threads synchronization APIs.
 + * @details If enabled then the @p chThdWait() function is included in
 + *          the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_WAITEXIT) || defined(__DOXYGEN__)
 +#define CH_USE_WAITEXIT                 TRUE
 +#endif
 +
 +/**
 + * @brief   Semaphores APIs.
 + * @details If enabled then the Semaphores APIs are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_SEMAPHORES) || defined(__DOXYGEN__)
 +#define CH_USE_SEMAPHORES               TRUE
 +#endif
 +
 +/**
 + * @brief   Semaphores queuing mode.
 + * @details If enabled then the threads are enqueued on semaphores by
 + *          priority rather than in FIFO order.
 + *
 + * @note    The default is @p FALSE. Enable this if you have special requirements.
 + * @note    Requires @p CH_USE_SEMAPHORES.
 + */
 +#if !defined(CH_USE_SEMAPHORES_PRIORITY) || defined(__DOXYGEN__)
 +#define CH_USE_SEMAPHORES_PRIORITY      FALSE
 +#endif
 +
 +/**
 + * @brief   Atomic semaphore API.
 + * @details If enabled then the semaphores the @p chSemSignalWait() API
 + *          is included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_SEMAPHORES.
 + */
 +#if !defined(CH_USE_SEMSW) || defined(__DOXYGEN__)
 +#define CH_USE_SEMSW                    TRUE
 +#endif
 +
 +/**
 + * @brief   Mutexes APIs.
 + * @details If enabled then the mutexes APIs are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_MUTEXES) || defined(__DOXYGEN__)
 +#define CH_USE_MUTEXES                  TRUE
 +#endif
 +
 +/**
 + * @brief   Conditional Variables APIs.
 + * @details If enabled then the conditional variables APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_MUTEXES.
 + */
 +#if !defined(CH_USE_CONDVARS) || defined(__DOXYGEN__)
 +#define CH_USE_CONDVARS                 TRUE
 +#endif
 +
 +/**
 + * @brief   Conditional Variables APIs with timeout.
 + * @details If enabled then the conditional variables APIs with timeout
 + *          specification are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_CONDVARS.
 + */
 +#if !defined(CH_USE_CONDVARS_TIMEOUT) || defined(__DOXYGEN__)
 +#define CH_USE_CONDVARS_TIMEOUT         TRUE
 +#endif
 +
 +/**
 + * @brief   Events Flags APIs.
 + * @details If enabled then the event flags APIs are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_EVENTS) || defined(__DOXYGEN__)
 +#define CH_USE_EVENTS                   TRUE
 +#endif
 +
 +/**
 + * @brief   Events Flags APIs with timeout.
 + * @details If enabled then the events APIs with timeout specification
 + *          are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_EVENTS.
 + */
 +#if !defined(CH_USE_EVENTS_TIMEOUT) || defined(__DOXYGEN__)
 +#define CH_USE_EVENTS_TIMEOUT           TRUE
 +#endif
 +
 +/**
 + * @brief   Synchronous Messages APIs.
 + * @details If enabled then the synchronous messages APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_MESSAGES) || defined(__DOXYGEN__)
 +#define CH_USE_MESSAGES                 TRUE
 +#endif
 +
 +/**
 + * @brief   Synchronous Messages queuing mode.
 + * @details If enabled then messages are served by priority rather than in
 + *          FIFO order.
 + *
 + * @note    The default is @p FALSE. Enable this if you have special requirements.
 + * @note    Requires @p CH_USE_MESSAGES.
 + */
 +#if !defined(CH_USE_MESSAGES_PRIORITY) || defined(__DOXYGEN__)
 +#define CH_USE_MESSAGES_PRIORITY        FALSE
 +#endif
 +
 +/**
 + * @brief   Mailboxes APIs.
 + * @details If enabled then the asynchronous messages (mailboxes) APIs are
 + *          included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_SEMAPHORES.
 + */
 +#if !defined(CH_USE_MAILBOXES) || defined(__DOXYGEN__)
 +#define CH_USE_MAILBOXES                TRUE
 +#endif
 +
 +/**
 + * @brief   I/O Queues APIs.
 + * @details If enabled then the I/O queues APIs are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_QUEUES) || defined(__DOXYGEN__)
 +#define CH_USE_QUEUES                   TRUE
 +#endif
 +
 +/**
 + * @brief   Core Memory Manager APIs.
 + * @details If enabled then the core memory manager APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_MEMCORE) || defined(__DOXYGEN__)
 +#define CH_USE_MEMCORE                  TRUE
 +#endif
 +
 +/**
 + * @brief   Heap Allocator APIs.
 + * @details If enabled then the memory heap allocator APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_MEMCORE and either @p CH_USE_MUTEXES or
 + *          @p CH_USE_SEMAPHORES.
 + * @note    Mutexes are recommended.
 + */
 +#if !defined(CH_USE_HEAP) || defined(__DOXYGEN__)
 +#define CH_USE_HEAP                     TRUE
 +#endif
 +
 +/**
 + * @brief   C-runtime allocator.
 + * @details If enabled the the heap allocator APIs just wrap the C-runtime
 + *          @p malloc() and @p free() functions.
 + *
 + * @note    The default is @p FALSE.
 + * @note    Requires @p CH_USE_HEAP.
 + * @note    The C-runtime may or may not require @p CH_USE_MEMCORE, see the
 + *          appropriate documentation.
 + */
 +#if !defined(CH_USE_MALLOC_HEAP) || defined(__DOXYGEN__)
 +#define CH_USE_MALLOC_HEAP              FALSE
 +#endif
 +
 +/**
 + * @brief   Memory Pools Allocator APIs.
 + * @details If enabled then the memory pools allocator APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_MEMPOOLS) || defined(__DOXYGEN__)
 +#define CH_USE_MEMPOOLS                 TRUE
 +#endif
 +
 +/**
 + * @brief   Dynamic Threads APIs.
 + * @details If enabled then the dynamic threads creation APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_WAITEXIT.
 + * @note    Requires @p CH_USE_HEAP and/or @p CH_USE_MEMPOOLS.
 + */
 +#if !defined(CH_USE_DYNAMIC) || defined(__DOXYGEN__)
 +#define CH_USE_DYNAMIC                  TRUE
 +#endif
 +
 +/** @} */
 +
 +/*===========================================================================*/
 +/**
 + * @name Debug options
 + * @{
 + */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Debug option, system state check.
 + * @details If enabled the correct call protocol for system APIs is checked
 + *          at runtime.
 + *
 + * @note    The default is @p FALSE.
 + */
 +#if !defined(CH_DBG_SYSTEM_STATE_CHECK) || defined(__DOXYGEN__)
 +#define CH_DBG_SYSTEM_STATE_CHECK       TRUE
 +#endif
 +
 +/**
 + * @brief   Debug option, parameters checks.
 + * @details If enabled then the checks on the API functions input
 + *          parameters are activated.
 + *
 + * @note    The default is @p FALSE.
 + */
 +#if !defined(CH_DBG_ENABLE_CHECKS) || defined(__DOXYGEN__)
 +#define CH_DBG_ENABLE_CHECKS            TRUE
 +#endif
 +
 +/**
 + * @brief   Debug option, consistency checks.
 + * @details If enabled then all the assertions in the kernel code are
 + *          activated. This includes consistency checks inside the kernel,
 + *          runtime anomalies and port-defined checks.
 + *
 + * @note    The default is @p FALSE.
 + */
 +#if !defined(CH_DBG_ENABLE_ASSERTS) || defined(__DOXYGEN__)
 +#define CH_DBG_ENABLE_ASSERTS           TRUE
 +#endif
 +
 +/**
 + * @brief   Debug option, trace buffer.
 + * @details If enabled then the context switch circular trace buffer is
 + *          activated.
 + *
 + * @note    The default is @p FALSE.
 + */
 +#if !defined(CH_DBG_ENABLE_TRACE) || defined(__DOXYGEN__)
 +#define CH_DBG_ENABLE_TRACE             TRUE
 +#endif
 +
 +/**
 + * @brief   Debug option, stack checks.
 + * @details If enabled then a runtime stack check is performed.
 + *
 + * @note    The default is @p FALSE.
 + * @note    The stack check is performed in a architecture/port dependent way.
 + *          It may not be implemented or some ports.
 + * @note    The default failure mode is to halt the system with the global
 + *          @p panic_msg variable set to @p NULL.
 + */
 +#if !defined(CH_DBG_ENABLE_STACK_CHECK) || defined(__DOXYGEN__)
 +#define CH_DBG_ENABLE_STACK_CHECK       TRUE
 +#endif
 +
 +/**
 + * @brief   Debug option, stacks initialization.
 + * @details If enabled then the threads working area is filled with a byte
 + *          value when a thread is created. This can be useful for the
 + *          runtime measurement of the used stack.
 + *
 + * @note    The default is @p FALSE.
 + */
 +#if !defined(CH_DBG_FILL_THREADS) || defined(__DOXYGEN__)
 +#define CH_DBG_FILL_THREADS             TRUE
 +#endif
 +
 +/**
 + * @brief   Debug option, threads profiling.
 + * @details If enabled then a field is added to the @p Thread structure that
 + *          counts the system ticks occurred while executing the thread.
 + *
 + * @note    The default is @p TRUE.
 + * @note    This debug option is defaulted to TRUE because it is required by
 + *          some test cases into the test suite.
 + */
 +#if !defined(CH_DBG_THREADS_PROFILING) || defined(__DOXYGEN__)
 +#define CH_DBG_THREADS_PROFILING        TRUE
 +#endif
 +
 +/** @} */
 +
 +/*===========================================================================*/
 +/**
 + * @name Kernel hooks
 + * @{
 + */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Threads descriptor structure extension.
 + * @details User fields added to the end of the @p Thread structure.
 + */
 +#if !defined(THREAD_EXT_FIELDS) || defined(__DOXYGEN__)
 +#define THREAD_EXT_FIELDS                                                   \
 +  /* Add threads custom fields here.*/
 +#endif
 +
 +/**
 + * @brief   Threads initialization hook.
 + * @details User initialization code added to the @p chThdInit() API.
 + *
 + * @note    It is invoked from within @p chThdInit() and implicitly from all
 + *          the threads creation APIs.
 + */
 +#if !defined(THREAD_EXT_INIT_HOOK) || defined(__DOXYGEN__)
 +#define THREAD_EXT_INIT_HOOK(tp) {                                          \
 +  /* Add threads initialization code here.*/                                \
 +}
 +#endif
 +
 +/**
 + * @brief   Threads finalization hook.
 + * @details User finalization code added to the @p chThdExit() API.
 + *
 + * @note    It is inserted into lock zone.
 + * @note    It is also invoked when the threads simply return in order to
 + *          terminate.
 + */
 +#if !defined(THREAD_EXT_EXIT_HOOK) || defined(__DOXYGEN__)
 +#define THREAD_EXT_EXIT_HOOK(tp) {                                          \
 +  /* Add threads finalization code here.*/                                  \
 +}
 +#endif
 +
 +/**
 + * @brief   Context switch hook.
 + * @details This hook is invoked just before switching between threads.
 + */
 +#if !defined(THREAD_CONTEXT_SWITCH_HOOK) || defined(__DOXYGEN__)
 +#define THREAD_CONTEXT_SWITCH_HOOK(ntp, otp) {                              \
 +  /* System halt code here.*/                                               \
 +}
 +#endif
 +
 +/**
 + * @brief   Idle Loop hook.
 + * @details This hook is continuously invoked by the idle thread loop.
 + */
 +#if !defined(IDLE_LOOP_HOOK) || defined(__DOXYGEN__)
 +#define IDLE_LOOP_HOOK() {                                                  \
 +  /* Idle loop code here.*/                                                 \
 +}
 +#endif
 +
 +/**
 + * @brief   System tick event hook.
 + * @details This hook is invoked in the system tick handler immediately
 + *          after processing the virtual timers queue.
 + */
 +#if !defined(SYSTEM_TICK_EVENT_HOOK) || defined(__DOXYGEN__)
 +#define SYSTEM_TICK_EVENT_HOOK() {                                          \
 +  /* System tick event code here.*/                                         \
 +}
 +#endif
 +
 +/**
 + * @brief   System halt hook.
 + * @details This hook is invoked in case to a system halting error before
 + *          the system is halted.
 + */
 +#if !defined(SYSTEM_HALT_HOOK) || defined(__DOXYGEN__)
 +#define SYSTEM_HALT_HOOK() {                                                \
 +  /* System halt code here.*/                                               \
 +}
 +#endif
 +
 +/** @} */
 +
 +/*===========================================================================*/
 +/* Port-specific settings (override port settings defaulted in chcore.h).    */
 +/*===========================================================================*/
 +
 +#endif  /* _CHCONF_H_ */
 +
 +/** @} */
 diff --git a/testhal/STM32F4xx/EXT/halconf.h b/testhal/STM32F4xx/EXT/halconf.h new file mode 100644 index 000000000..e0e0c38ff --- /dev/null +++ b/testhal/STM32F4xx/EXT/halconf.h @@ -0,0 +1,312 @@ +/*
 +    ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio
 +
 +    Licensed under the Apache License, Version 2.0 (the "License");
 +    you may not use this file except in compliance with the License.
 +    You may obtain a copy of the License at
 +
 +        http://www.apache.org/licenses/LICENSE-2.0
 +
 +    Unless required by applicable law or agreed to in writing, software
 +    distributed under the License is distributed on an "AS IS" BASIS,
 +    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 +    See the License for the specific language governing permissions and
 +    limitations under the License.
 +*/
 +
 +/**
 + * @file    templates/halconf.h
 + * @brief   HAL configuration header.
 + * @details HAL configuration file, this file allows to enable or disable the
 + *          various device drivers from your application. You may also use
 + *          this file in order to override the device drivers default settings.
 + *
 + * @addtogroup HAL_CONF
 + * @{
 + */
 +
 +#ifndef _HALCONF_H_
 +#define _HALCONF_H_
 +
 +#include "mcuconf.h"
 +
 +/**
 + * @brief   Enables the TM subsystem.
 + */
 +#if !defined(HAL_USE_TM) || defined(__DOXYGEN__)
 +#define HAL_USE_TM                  TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the PAL subsystem.
 + */
 +#if !defined(HAL_USE_PAL) || defined(__DOXYGEN__)
 +#define HAL_USE_PAL                 TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the ADC subsystem.
 + */
 +#if !defined(HAL_USE_ADC) || defined(__DOXYGEN__)
 +#define HAL_USE_ADC                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the CAN subsystem.
 + */
 +#if !defined(HAL_USE_CAN) || defined(__DOXYGEN__)
 +#define HAL_USE_CAN                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the EXT subsystem.
 + */
 +#if !defined(HAL_USE_EXT) || defined(__DOXYGEN__)
 +#define HAL_USE_EXT                 TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the GPT subsystem.
 + */
 +#if !defined(HAL_USE_GPT) || defined(__DOXYGEN__)
 +#define HAL_USE_GPT                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the I2C subsystem.
 + */
 +#if !defined(HAL_USE_I2C) || defined(__DOXYGEN__)
 +#define HAL_USE_I2C                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the ICU subsystem.
 + */
 +#if !defined(HAL_USE_ICU) || defined(__DOXYGEN__)
 +#define HAL_USE_ICU                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the MAC subsystem.
 + */
 +#if !defined(HAL_USE_MAC) || defined(__DOXYGEN__)
 +#define HAL_USE_MAC                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the MMC_SPI subsystem.
 + */
 +#if !defined(HAL_USE_MMC_SPI) || defined(__DOXYGEN__)
 +#define HAL_USE_MMC_SPI             FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the PWM subsystem.
 + */
 +#if !defined(HAL_USE_PWM) || defined(__DOXYGEN__)
 +#define HAL_USE_PWM                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the RTC subsystem.
 + */
 +#if !defined(HAL_USE_RTC) || defined(__DOXYGEN__)
 +#define HAL_USE_RTC                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the SDC subsystem.
 + */
 +#if !defined(HAL_USE_SDC) || defined(__DOXYGEN__)
 +#define HAL_USE_SDC                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the SERIAL subsystem.
 + */
 +#if !defined(HAL_USE_SERIAL) || defined(__DOXYGEN__)
 +#define HAL_USE_SERIAL              FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the SERIAL over USB subsystem.
 + */
 +#if !defined(HAL_USE_SERIAL_USB) || defined(__DOXYGEN__)
 +#define HAL_USE_SERIAL_USB          FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the SPI subsystem.
 + */
 +#if !defined(HAL_USE_SPI) || defined(__DOXYGEN__)
 +#define HAL_USE_SPI                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the UART subsystem.
 + */
 +#if !defined(HAL_USE_UART) || defined(__DOXYGEN__)
 +#define HAL_USE_UART                FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the USB subsystem.
 + */
 +#if !defined(HAL_USE_USB) || defined(__DOXYGEN__)
 +#define HAL_USE_USB                 FALSE
 +#endif
 +
 +/*===========================================================================*/
 +/* ADC driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Enables synchronous APIs.
 + * @note    Disabling this option saves both code and data space.
 + */
 +#if !defined(ADC_USE_WAIT) || defined(__DOXYGEN__)
 +#define ADC_USE_WAIT                TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the @p adcAcquireBus() and @p adcReleaseBus() APIs.
 + * @note    Disabling this option saves both code and data space.
 + */
 +#if !defined(ADC_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
 +#define ADC_USE_MUTUAL_EXCLUSION    TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* CAN driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Sleep mode related APIs inclusion switch.
 + */
 +#if !defined(CAN_USE_SLEEP_MODE) || defined(__DOXYGEN__)
 +#define CAN_USE_SLEEP_MODE          TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* I2C driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Enables the mutual exclusion APIs on the I2C bus.
 + */
 +#if !defined(I2C_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
 +#define I2C_USE_MUTUAL_EXCLUSION    TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* MAC driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Enables an event sources for incoming packets.
 + */
 +#if !defined(MAC_USE_ZERO_COPY) || defined(__DOXYGEN__)
 +#define MAC_USE_ZERO_COPY           FALSE
 +#endif
 +
 +/**
 + * @brief   Enables an event sources for incoming packets.
 + */
 +#if !defined(MAC_USE_EVENTS) || defined(__DOXYGEN__)
 +#define MAC_USE_EVENTS              TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* MMC_SPI driver related settings.                                          */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Delays insertions.
 + * @details If enabled this options inserts delays into the MMC waiting
 + *          routines releasing some extra CPU time for the threads with
 + *          lower priority, this may slow down the driver a bit however.
 + *          This option is recommended also if the SPI driver does not
 + *          use a DMA channel and heavily loads the CPU.
 + */
 +#if !defined(MMC_NICE_WAITING) || defined(__DOXYGEN__)
 +#define MMC_NICE_WAITING            TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* SDC driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Number of initialization attempts before rejecting the card.
 + * @note    Attempts are performed at 10mS intervals.
 + */
 +#if !defined(SDC_INIT_RETRY) || defined(__DOXYGEN__)
 +#define SDC_INIT_RETRY              100
 +#endif
 +
 +/**
 + * @brief   Include support for MMC cards.
 + * @note    MMC support is not yet implemented so this option must be kept
 + *          at @p FALSE.
 + */
 +#if !defined(SDC_MMC_SUPPORT) || defined(__DOXYGEN__)
 +#define SDC_MMC_SUPPORT             FALSE
 +#endif
 +
 +/**
 + * @brief   Delays insertions.
 + * @details If enabled this options inserts delays into the MMC waiting
 + *          routines releasing some extra CPU time for the threads with
 + *          lower priority, this may slow down the driver a bit however.
 + */
 +#if !defined(SDC_NICE_WAITING) || defined(__DOXYGEN__)
 +#define SDC_NICE_WAITING            TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* SERIAL driver related settings.                                           */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Default bit rate.
 + * @details Configuration parameter, this is the baud rate selected for the
 + *          default configuration.
 + */
 +#if !defined(SERIAL_DEFAULT_BITRATE) || defined(__DOXYGEN__)
 +#define SERIAL_DEFAULT_BITRATE      38400
 +#endif
 +
 +/**
 + * @brief   Serial buffers size.
 + * @details Configuration parameter, you can change the depth of the queue
 + *          buffers depending on the requirements of your application.
 + * @note    The default is 64 bytes for both the transmission and receive
 + *          buffers.
 + */
 +#if !defined(SERIAL_BUFFERS_SIZE) || defined(__DOXYGEN__)
 +#define SERIAL_BUFFERS_SIZE         16
 +#endif
 +
 +/*===========================================================================*/
 +/* SPI driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Enables synchronous APIs.
 + * @note    Disabling this option saves both code and data space.
 + */
 +#if !defined(SPI_USE_WAIT) || defined(__DOXYGEN__)
 +#define SPI_USE_WAIT                TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the @p spiAcquireBus() and @p spiReleaseBus() APIs.
 + * @note    Disabling this option saves both code and data space.
 + */
 +#if !defined(SPI_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
 +#define SPI_USE_MUTUAL_EXCLUSION    TRUE
 +#endif
 +
 +#endif /* _HALCONF_H_ */
 +
 +/** @} */
 diff --git a/testhal/STM32F4xx/EXT/main.c b/testhal/STM32F4xx/EXT/main.c new file mode 100644 index 000000000..1bdce5a09 --- /dev/null +++ b/testhal/STM32F4xx/EXT/main.c @@ -0,0 +1,101 @@ +/*
 +    ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio
 +
 +    Licensed under the Apache License, Version 2.0 (the "License");
 +    you may not use this file except in compliance with the License.
 +    You may obtain a copy of the License at
 +
 +        http://www.apache.org/licenses/LICENSE-2.0
 +
 +    Unless required by applicable law or agreed to in writing, software
 +    distributed under the License is distributed on an "AS IS" BASIS,
 +    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 +    See the License for the specific language governing permissions and
 +    limitations under the License.
 +*/
 +
 +#include "ch.h"
 +#include "hal.h"
 +
 +static void led5off(void *arg) {
 +
 +  (void)arg;
 +  palClearPad(GPIOD, GPIOD_LED5);
 +}
 +
 +/* Triggered when the button is pressed or released. The LED5 is set to ON.*/
 +static void extcb1(EXTDriver *extp, expchannel_t channel) {
 +  static VirtualTimer vt4;
 +
 +  (void)extp;
 +  (void)channel;
 +
 +  palSetPad(GPIOD, GPIOD_LED5);
 +  chSysLockFromIsr();
 +  if (chVTIsArmedI(&vt4))
 +    chVTResetI(&vt4);
 +
 +  /* LED4 set to OFF after 200mS.*/
 +  chVTSetI(&vt4, MS2ST(200), led5off, NULL);
 +  chSysUnlockFromIsr();
 +}
 +
 +static const EXTConfig extcfg = {
 +  {
 +    {EXT_CH_MODE_BOTH_EDGES | EXT_CH_MODE_AUTOSTART | EXT_MODE_GPIOA, extcb1},
 +    {EXT_CH_MODE_DISABLED, NULL},
 +    {EXT_CH_MODE_DISABLED, NULL},
 +    {EXT_CH_MODE_DISABLED, NULL},
 +    {EXT_CH_MODE_DISABLED, NULL},
 +    {EXT_CH_MODE_DISABLED, NULL},
 +    {EXT_CH_MODE_DISABLED, NULL},
 +    {EXT_CH_MODE_DISABLED, NULL},
 +    {EXT_CH_MODE_DISABLED, NULL},
 +    {EXT_CH_MODE_DISABLED, NULL},
 +    {EXT_CH_MODE_DISABLED, NULL},
 +    {EXT_CH_MODE_DISABLED, NULL},
 +    {EXT_CH_MODE_DISABLED, NULL},
 +    {EXT_CH_MODE_DISABLED, NULL},
 +    {EXT_CH_MODE_DISABLED, NULL},
 +    {EXT_CH_MODE_DISABLED, NULL},
 +    {EXT_CH_MODE_DISABLED, NULL},
 +    {EXT_CH_MODE_DISABLED, NULL},
 +    {EXT_CH_MODE_DISABLED, NULL},
 +    {EXT_CH_MODE_DISABLED, NULL},
 +    {EXT_CH_MODE_DISABLED, NULL},
 +    {EXT_CH_MODE_DISABLED, NULL},
 +    {EXT_CH_MODE_DISABLED, NULL}
 +  }
 +};
 +
 +/*
 + * Application entry point.
 + */
 +int main(void) {
 +
 +  /*
 +   * System initializations.
 +   * - HAL initialization, this also initializes the configured device drivers
 +   *   and performs the board-specific initializations.
 +   * - Kernel initialization, the main() function becomes a thread and the
 +   *   RTOS is active.
 +   */
 +  halInit();
 +  chSysInit();
 +
 +  /*
 +   * Activates the EXT driver 1.
 +   */
 +  extStart(&EXTD1, &extcfg);
 +
 +  /*
 +   * Normal main() thread activity, in this demo it enables and disables the
 +   * button EXT channel using 5 seconds intervals.
 +   */
 +  while (TRUE) {
 +    chThdSleepMilliseconds(5000);
 +    extChannelDisable(&EXTD1, 0);
 +    chThdSleepMilliseconds(5000);
 +    extChannelEnable(&EXTD1, 0);
 +  }
 +}
 diff --git a/testhal/STM32F4xx/EXT/mcuconf.h b/testhal/STM32F4xx/EXT/mcuconf.h new file mode 100644 index 000000000..172f90b30 --- /dev/null +++ b/testhal/STM32F4xx/EXT/mcuconf.h @@ -0,0 +1,278 @@ +/*
 +    ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio
 +
 +    Licensed under the Apache License, Version 2.0 (the "License");
 +    you may not use this file except in compliance with the License.
 +    You may obtain a copy of the License at
 +
 +        http://www.apache.org/licenses/LICENSE-2.0
 +
 +    Unless required by applicable law or agreed to in writing, software
 +    distributed under the License is distributed on an "AS IS" BASIS,
 +    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 +    See the License for the specific language governing permissions and
 +    limitations under the License.
 +*/
 +
 +/*
 + * STM32F4xx drivers configuration.
 + * The following settings override the default settings present in
 + * the various device driver implementation headers.
 + * Note that the settings for each driver only have effect if the whole
 + * driver is enabled in halconf.h.
 + *
 + * IRQ priorities:
 + * 15...0       Lowest...Highest.
 + *
 + * DMA priorities:
 + * 0...3        Lowest...Highest.
 + */
 +
 +#define STM32F4xx_MCUCONF
 +
 +/*
 + * HAL driver system settings.
 + */
 +#define STM32_NO_INIT                       FALSE
 +#define STM32_HSI_ENABLED                   TRUE
 +#define STM32_LSI_ENABLED                   TRUE
 +#define STM32_HSE_ENABLED                   TRUE
 +#define STM32_LSE_ENABLED                   FALSE
 +#define STM32_CLOCK48_REQUIRED              TRUE
 +#define STM32_SW                            STM32_SW_PLL
 +#define STM32_PLLSRC                        STM32_PLLSRC_HSE
 +#define STM32_PLLM_VALUE                    8
 +#define STM32_PLLN_VALUE                    336
 +#define STM32_PLLP_VALUE                    2
 +#define STM32_PLLQ_VALUE                    7
 +#define STM32_HPRE                          STM32_HPRE_DIV1
 +#define STM32_PPRE1                         STM32_PPRE1_DIV4
 +#define STM32_PPRE2                         STM32_PPRE2_DIV2
 +#define STM32_RTCSEL                        STM32_RTCSEL_LSI
 +#define STM32_RTCPRE_VALUE                  8
 +#define STM32_MCO1SEL                       STM32_MCO1SEL_HSI
 +#define STM32_MCO1PRE                       STM32_MCO1PRE_DIV1
 +#define STM32_MCO2SEL                       STM32_MCO2SEL_SYSCLK
 +#define STM32_MCO2PRE                       STM32_MCO2PRE_DIV5
 +#define STM32_I2SSRC                        STM32_I2SSRC_CKIN
 +#define STM32_PLLI2SN_VALUE                 192
 +#define STM32_PLLI2SR_VALUE                 5
 +#define STM32_VOS                           STM32_VOS_HIGH
 +#define STM32_PVD_ENABLE                    FALSE
 +#define STM32_PLS                           STM32_PLS_LEV0
 +
 +/*
 + * ADC driver system settings.
 + */
 +#define STM32_ADC_ADCPRE                    ADC_CCR_ADCPRE_DIV4
 +#define STM32_ADC_USE_ADC1                  FALSE
 +#define STM32_ADC_USE_ADC2                  FALSE
 +#define STM32_ADC_USE_ADC3                  FALSE
 +#define STM32_ADC_ADC1_DMA_STREAM           STM32_DMA_STREAM_ID(2, 4)
 +#define STM32_ADC_ADC2_DMA_STREAM           STM32_DMA_STREAM_ID(2, 2)
 +#define STM32_ADC_ADC3_DMA_STREAM           STM32_DMA_STREAM_ID(2, 1)
 +#define STM32_ADC_ADC1_DMA_PRIORITY         2
 +#define STM32_ADC_ADC2_DMA_PRIORITY         2
 +#define STM32_ADC_ADC3_DMA_PRIORITY         2
 +#define STM32_ADC_IRQ_PRIORITY              6
 +#define STM32_ADC_ADC1_DMA_IRQ_PRIORITY     6
 +#define STM32_ADC_ADC2_DMA_IRQ_PRIORITY     6
 +#define STM32_ADC_ADC3_DMA_IRQ_PRIORITY     6
 +
 +/*
 + * CAN driver system settings.
 + */
 +#define STM32_CAN_USE_CAN1                  FALSE
 +#define STM32_CAN_USE_CAN2                  FALSE
 +#define STM32_CAN_CAN1_IRQ_PRIORITY         11
 +#define STM32_CAN_CAN2_IRQ_PRIORITY         11
 +
 +/*
 + * EXT driver system settings.
 + */
 +#define STM32_EXT_EXTI0_IRQ_PRIORITY        6
 +#define STM32_EXT_EXTI1_IRQ_PRIORITY        6
 +#define STM32_EXT_EXTI2_IRQ_PRIORITY        6
 +#define STM32_EXT_EXTI3_IRQ_PRIORITY        6
 +#define STM32_EXT_EXTI4_IRQ_PRIORITY        6
 +#define STM32_EXT_EXTI5_9_IRQ_PRIORITY      6
 +#define STM32_EXT_EXTI10_15_IRQ_PRIORITY    6
 +#define STM32_EXT_EXTI16_IRQ_PRIORITY       6
 +#define STM32_EXT_EXTI17_IRQ_PRIORITY       15
 +#define STM32_EXT_EXTI18_IRQ_PRIORITY       6
 +#define STM32_EXT_EXTI19_IRQ_PRIORITY       6
 +#define STM32_EXT_EXTI20_IRQ_PRIORITY       6
 +#define STM32_EXT_EXTI21_IRQ_PRIORITY       15
 +#define STM32_EXT_EXTI22_IRQ_PRIORITY       15
 +
 +/*
 + * GPT driver system settings.
 + */
 +#define STM32_GPT_USE_TIM1                  FALSE
 +#define STM32_GPT_USE_TIM2                  FALSE
 +#define STM32_GPT_USE_TIM3                  FALSE
 +#define STM32_GPT_USE_TIM4                  FALSE
 +#define STM32_GPT_USE_TIM5                  FALSE
 +#define STM32_GPT_USE_TIM6                  FALSE
 +#define STM32_GPT_USE_TIM7                  FALSE
 +#define STM32_GPT_USE_TIM8                  FALSE
 +#define STM32_GPT_USE_TIM9                  FALSE
 +#define STM32_GPT_USE_TIM11                 FALSE
 +#define STM32_GPT_USE_TIM12                 FALSE
 +#define STM32_GPT_USE_TIM14                 FALSE
 +#define STM32_GPT_TIM1_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM2_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM3_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM4_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM5_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM6_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM7_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM8_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM9_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM11_IRQ_PRIORITY        7
 +#define STM32_GPT_TIM12_IRQ_PRIORITY        7
 +#define STM32_GPT_TIM14_IRQ_PRIORITY        7
 +
 +/*
 + * I2C driver system settings.
 + */
 +#define STM32_I2C_USE_I2C1                  FALSE
 +#define STM32_I2C_USE_I2C2                  FALSE
 +#define STM32_I2C_USE_I2C3                  FALSE
 +#define STM32_I2C_I2C1_RX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 0)
 +#define STM32_I2C_I2C1_TX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 6)
 +#define STM32_I2C_I2C2_RX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 2)
 +#define STM32_I2C_I2C2_TX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 7)
 +#define STM32_I2C_I2C3_RX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 2)
 +#define STM32_I2C_I2C3_TX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 4)
 +#define STM32_I2C_I2C1_IRQ_PRIORITY         5
 +#define STM32_I2C_I2C2_IRQ_PRIORITY         5
 +#define STM32_I2C_I2C3_IRQ_PRIORITY         5
 +#define STM32_I2C_I2C1_DMA_PRIORITY         3
 +#define STM32_I2C_I2C2_DMA_PRIORITY         3
 +#define STM32_I2C_I2C3_DMA_PRIORITY         3
 +#define STM32_I2C_I2C1_DMA_ERROR_HOOK()     chSysHalt()
 +#define STM32_I2C_I2C2_DMA_ERROR_HOOK()     chSysHalt()
 +#define STM32_I2C_I2C3_DMA_ERROR_HOOK()     chSysHalt()
 +
 +/*
 + * ICU driver system settings.
 + */
 +#define STM32_ICU_USE_TIM1                  FALSE
 +#define STM32_ICU_USE_TIM2                  FALSE
 +#define STM32_ICU_USE_TIM3                  FALSE
 +#define STM32_ICU_USE_TIM4                  FALSE
 +#define STM32_ICU_USE_TIM5                  FALSE
 +#define STM32_ICU_USE_TIM8                  FALSE
 +#define STM32_ICU_USE_TIM9                  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
 +#define STM32_ICU_TIM8_IRQ_PRIORITY         7
 +#define STM32_ICU_TIM9_IRQ_PRIORITY         7
 +
 +/*
 + * MAC driver system settings.
 + */
 +#define STM32_MAC_TRANSMIT_BUFFERS          2
 +#define STM32_MAC_RECEIVE_BUFFERS           4
 +#define STM32_MAC_BUFFERS_SIZE              1522
 +#define STM32_MAC_PHY_TIMEOUT               100
 +#define STM32_MAC_ETH1_CHANGE_PHY_STATE     TRUE
 +#define STM32_MAC_ETH1_IRQ_PRIORITY         13
 +#define STM32_MAC_IP_CHECKSUM_OFFLOAD       0
 +
 +/*
 + * PWM driver system settings.
 + */
 +#define STM32_PWM_USE_ADVANCED              FALSE
 +#define STM32_PWM_USE_TIM1                  FALSE
 +#define STM32_PWM_USE_TIM2                  FALSE
 +#define STM32_PWM_USE_TIM3                  FALSE
 +#define STM32_PWM_USE_TIM4                  FALSE
 +#define STM32_PWM_USE_TIM5                  FALSE
 +#define STM32_PWM_USE_TIM8                  FALSE
 +#define STM32_PWM_USE_TIM9                  FALSE
 +#define STM32_PWM_TIM1_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM2_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM3_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM4_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM5_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM8_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM9_IRQ_PRIORITY         7
 +
 +/*
 + * SERIAL driver system settings.
 + */
 +#define STM32_SERIAL_USE_USART1             FALSE
 +#define STM32_SERIAL_USE_USART2             FALSE
 +#define STM32_SERIAL_USE_USART3             FALSE
 +#define STM32_SERIAL_USE_UART4              FALSE
 +#define STM32_SERIAL_USE_UART5              FALSE
 +#define STM32_SERIAL_USE_USART6             FALSE
 +#define STM32_SERIAL_USART1_PRIORITY        12
 +#define STM32_SERIAL_USART2_PRIORITY        12
 +#define STM32_SERIAL_USART3_PRIORITY        12
 +#define STM32_SERIAL_UART4_PRIORITY         12
 +#define STM32_SERIAL_UART5_PRIORITY         12
 +#define STM32_SERIAL_USART6_PRIORITY        12
 +
 +/*
 + * SPI driver system settings.
 + */
 +#define STM32_SPI_USE_SPI1                  FALSE
 +#define STM32_SPI_USE_SPI2                  FALSE
 +#define STM32_SPI_USE_SPI3                  FALSE
 +#define STM32_SPI_SPI1_RX_DMA_STREAM        STM32_DMA_STREAM_ID(2, 0)
 +#define STM32_SPI_SPI1_TX_DMA_STREAM        STM32_DMA_STREAM_ID(2, 3)
 +#define STM32_SPI_SPI2_RX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 3)
 +#define STM32_SPI_SPI2_TX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 4)
 +#define STM32_SPI_SPI3_RX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 0)
 +#define STM32_SPI_SPI3_TX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 7)
 +#define STM32_SPI_SPI1_DMA_PRIORITY         1
 +#define STM32_SPI_SPI2_DMA_PRIORITY         1
 +#define STM32_SPI_SPI3_DMA_PRIORITY         1
 +#define STM32_SPI_SPI1_IRQ_PRIORITY         10
 +#define STM32_SPI_SPI2_IRQ_PRIORITY         10
 +#define STM32_SPI_SPI3_IRQ_PRIORITY         10
 +#define STM32_SPI_DMA_ERROR_HOOK(spip)      chSysHalt()
 +
 +/*
 + * UART driver system settings.
 + */
 +#define STM32_UART_USE_USART1               FALSE
 +#define STM32_UART_USE_USART2               FALSE
 +#define STM32_UART_USE_USART3               FALSE
 +#define STM32_UART_USE_USART6               FALSE
 +#define STM32_UART_USART1_RX_DMA_STREAM     STM32_DMA_STREAM_ID(2, 5)
 +#define STM32_UART_USART1_TX_DMA_STREAM     STM32_DMA_STREAM_ID(2, 7)
 +#define STM32_UART_USART2_RX_DMA_STREAM     STM32_DMA_STREAM_ID(1, 5)
 +#define STM32_UART_USART2_TX_DMA_STREAM     STM32_DMA_STREAM_ID(1, 6)
 +#define STM32_UART_USART3_RX_DMA_STREAM     STM32_DMA_STREAM_ID(1, 1)
 +#define STM32_UART_USART3_TX_DMA_STREAM     STM32_DMA_STREAM_ID(1, 3)
 +#define STM32_UART_USART6_RX_DMA_STREAM     STM32_DMA_STREAM_ID(2, 2)
 +#define STM32_UART_USART6_TX_DMA_STREAM     STM32_DMA_STREAM_ID(2, 7)
 +#define STM32_UART_USART1_IRQ_PRIORITY      12
 +#define STM32_UART_USART2_IRQ_PRIORITY      12
 +#define STM32_UART_USART3_IRQ_PRIORITY      12
 +#define STM32_UART_USART6_IRQ_PRIORITY      12
 +#define STM32_UART_USART1_DMA_PRIORITY      0
 +#define STM32_UART_USART2_DMA_PRIORITY      0
 +#define STM32_UART_USART3_DMA_PRIORITY      0
 +#define STM32_UART_USART6_DMA_PRIORITY      0
 +#define STM32_UART_DMA_ERROR_HOOK(uartp)    chSysHalt()
 +
 +/*
 + * USB driver system settings.
 + */
 +#define STM32_USB_USE_OTG1                  FALSE
 +#define STM32_USB_USE_OTG2                  FALSE
 +#define STM32_USB_OTG1_IRQ_PRIORITY         14
 +#define STM32_USB_OTG2_IRQ_PRIORITY         14
 +#define STM32_USB_OTG1_RX_FIFO_SIZE         512
 +#define STM32_USB_OTG2_RX_FIFO_SIZE         1024
 +#define STM32_USB_OTG_THREAD_PRIO           LOWPRIO
 +#define STM32_USB_OTG_THREAD_STACK_SIZE     128
 +#define STM32_USB_OTGFIFO_FILL_BASEPRI      0
 diff --git a/testhal/STM32F4xx/EXT/readme.txt b/testhal/STM32F4xx/EXT/readme.txt new file mode 100644 index 000000000..1105f431e --- /dev/null +++ b/testhal/STM32F4xx/EXT/readme.txt @@ -0,0 +1,30 @@ +*****************************************************************************
 +** ChibiOS/RT HAL - EXT driver demo for STM32F4xx.                         **
 +*****************************************************************************
 +
 +** TARGET **
 +
 +The demo runs on an STMicroelectronics STM32F4-Discovery board.
 +
 +** The Demo **
 +
 +The application demonstrates the use of the STM32F4xx EXT driver.
 +
 +** Board Setup **
 +
 +None required.
 +
 +** Build Procedure **
 +
 +The demo has been tested using the free Codesourcery GCC-based toolchain
 +and YAGARTO.
 +Just modify the TRGT line in the makefile in order to use different GCC ports.
 +
 +** Notes **
 +
 +Some files used by the demo are not part of ChibiOS/RT but are copyright of
 +ST Microelectronics and are licensed under a different license.
 +Also note that not all the files present in the ST library are distributed
 +with ChibiOS/RT, you can find the whole library on the ST web site:
 +
 +                             http://www.st.com
 diff --git a/testhal/STM32F4xx/GPT/.cproject b/testhal/STM32F4xx/GPT/.cproject new file mode 100644 index 000000000..4933adfbb --- /dev/null +++ b/testhal/STM32F4xx/GPT/.cproject @@ -0,0 +1,51 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?>
 +<?fileVersion 4.0.0?>
 +
 +<cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
 +	<storageModule moduleId="org.eclipse.cdt.core.settings">
 +		<cconfiguration id="0.1570569554">
 +			<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="0.1570569554" moduleId="org.eclipse.cdt.core.settings" name="Default">
 +				<externalSettings/>
 +				<extensions>
 +					<extension id="org.eclipse.cdt.core.VCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 +					<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 +					<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
 +					<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 +					<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 +					<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 +				</extensions>
 +			</storageModule>
 +			<storageModule moduleId="cdtBuildSystem" version="4.0.0">
 +				<configuration artifactName="${ProjName}" buildProperties="" description="" id="0.1570569554" name="Default" parent="org.eclipse.cdt.build.core.prefbase.cfg">
 +					<folderInfo id="0.1570569554." name="/" resourcePath="">
 +						<toolChain id="org.eclipse.cdt.build.core.prefbase.toolchain.2051275125" name="No ToolChain" resourceTypeBasedDiscovery="false" superClass="org.eclipse.cdt.build.core.prefbase.toolchain">
 +							<targetPlatform id="org.eclipse.cdt.build.core.prefbase.toolchain.2051275125.1235631892" name=""/>
 +							<builder id="org.eclipse.cdt.build.core.settings.default.builder.681215945" keepEnvironmentInBuildfile="false" managedBuildOn="false" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="org.eclipse.cdt.build.core.settings.default.builder"/>
 +							<tool id="org.eclipse.cdt.build.core.settings.holder.libs.1913618182" name="holder for library settings" superClass="org.eclipse.cdt.build.core.settings.holder.libs"/>
 +							<tool id="org.eclipse.cdt.build.core.settings.holder.1359024970" name="Assembly" superClass="org.eclipse.cdt.build.core.settings.holder">
 +								<inputType id="org.eclipse.cdt.build.core.settings.holder.inType.865562104" languageId="org.eclipse.cdt.core.assembly" languageName="Assembly" sourceContentType="org.eclipse.cdt.core.asmSource" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
 +							</tool>
 +							<tool id="org.eclipse.cdt.build.core.settings.holder.321395526" name="GNU C++" superClass="org.eclipse.cdt.build.core.settings.holder">
 +								<inputType id="org.eclipse.cdt.build.core.settings.holder.inType.1168908150" languageId="org.eclipse.cdt.core.g++" languageName="GNU C++" sourceContentType="org.eclipse.cdt.core.cxxSource,org.eclipse.cdt.core.cxxHeader" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
 +							</tool>
 +							<tool id="org.eclipse.cdt.build.core.settings.holder.1390938668" name="GNU C" superClass="org.eclipse.cdt.build.core.settings.holder">
 +								<inputType id="org.eclipse.cdt.build.core.settings.holder.inType.645908401" languageId="org.eclipse.cdt.core.gcc" languageName="GNU C" sourceContentType="org.eclipse.cdt.core.cSource,org.eclipse.cdt.core.cHeader" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
 +							</tool>
 +						</toolChain>
 +					</folderInfo>
 +				</configuration>
 +			</storageModule>
 +			<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
 +		</cconfiguration>
 +	</storageModule>
 +	<storageModule moduleId="cdtBuildSystem" version="4.0.0">
 +		<project id="STM32F4xx-GPT.null.188687308" name="STM32F4xx-GPT"/>
 +	</storageModule>
 +	<storageModule moduleId="scannerConfiguration">
 +		<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
 +		<scannerConfigBuildInfo instanceId="0.1570569554">
 +			<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile"/>
 +		</scannerConfigBuildInfo>
 +	</storageModule>
 +	<storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
 +</cproject>
 diff --git a/testhal/STM32F4xx/GPT/.project b/testhal/STM32F4xx/GPT/.project new file mode 100644 index 000000000..90014959c --- /dev/null +++ b/testhal/STM32F4xx/GPT/.project @@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="UTF-8"?>
 +<projectDescription>
 +	<name>STM32F4xx-GPT</name>
 +	<comment></comment>
 +	<projects>
 +	</projects>
 +	<buildSpec>
 +		<buildCommand>
 +			<name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
 +			<triggers>clean,full,incremental,</triggers>
 +			<arguments>
 +			</arguments>
 +		</buildCommand>
 +		<buildCommand>
 +			<name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
 +			<triggers>full,incremental,</triggers>
 +			<arguments>
 +			</arguments>
 +		</buildCommand>
 +	</buildSpec>
 +	<natures>
 +		<nature>org.eclipse.cdt.core.cnature</nature>
 +		<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
 +		<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
 +	</natures>
 +	<linkedResources>
 +		<link>
 +			<name>board</name>
 +			<type>2</type>
 +			<locationURI>CHIBIOS/boards/ST_STM32F4_DISCOVERY</locationURI>
 +		</link>
 +		<link>
 +			<name>os</name>
 +			<type>2</type>
 +			<locationURI>CHIBIOS/os</locationURI>
 +		</link>
 +	</linkedResources>
 +</projectDescription>
 diff --git a/testhal/STM32F4xx/GPT/Makefile b/testhal/STM32F4xx/GPT/Makefile new file mode 100644 index 000000000..86de6d81c --- /dev/null +++ b/testhal/STM32F4xx/GPT/Makefile @@ -0,0 +1,222 @@ +##############################################################################
 +# Build global options
 +# NOTE: Can be overridden externally.
 +#
 +
 +# Compiler options here.
 +ifeq ($(USE_OPT),)
 +  USE_OPT = -O2 -ggdb -fomit-frame-pointer -falign-functions=16
 +endif
 +
 +# C specific options here (added to USE_OPT).
 +ifeq ($(USE_COPT),)
 +  USE_COPT = 
 +endif
 +
 +# C++ specific options here (added to USE_OPT).
 +ifeq ($(USE_CPPOPT),)
 +  USE_CPPOPT = -fno-rtti
 +endif
 +
 +# Enable this if you want the linker to remove unused code and data
 +ifeq ($(USE_LINK_GC),)
 +  USE_LINK_GC = yes
 +endif
 +
 +# If enabled, this option allows to compile the application in THUMB mode.
 +ifeq ($(USE_THUMB),)
 +  USE_THUMB = yes
 +endif
 +
 +# Enable this if you want to see the full log while compiling.
 +ifeq ($(USE_VERBOSE_COMPILE),)
 +  USE_VERBOSE_COMPILE = no
 +endif
 +
 +#
 +# Build global options
 +##############################################################################
 +
 +##############################################################################
 +# Architecture or project specific options
 +#
 +
 +# Enables the use of FPU on Cortex-M4.
 +# Enable this if you really want to use the STM FWLib.
 +ifeq ($(USE_FPU),)
 +  USE_FPU = no
 +endif
 +
 +# Enable this if you really want to use the STM FWLib.
 +ifeq ($(USE_FWLIB),)
 +  USE_FWLIB = no
 +endif
 +
 +#
 +# Architecture or project specific options
 +##############################################################################
 +
 +##############################################################################
 +# Project, sources and paths
 +#
 +
 +# Define project name here
 +PROJECT = ch
 +
 +# Imported source files and paths
 +CHIBIOS = ../../..
 +include $(CHIBIOS)/boards/ST_STM32F4_DISCOVERY/board.mk
 +include $(CHIBIOS)/os/hal/platforms/STM32F4xx/platform.mk
 +include $(CHIBIOS)/os/hal/hal.mk
 +include $(CHIBIOS)/os/ports/GCC/ARMCMx/STM32F4xx/port.mk
 +include $(CHIBIOS)/os/kernel/kernel.mk
 +include $(CHIBIOS)/test/test.mk
 +
 +# Define linker script file here
 +LDSCRIPT= $(PORTLD)/STM32F407xG.ld
 +#LDSCRIPT= $(PORTLD)/STM32F407xG_CCM.ld
 +
 +# C sources that can be compiled in ARM or THUMB mode depending on the global
 +# setting.
 +CSRC = $(PORTSRC) \
 +       $(KERNSRC) \
 +       $(TESTSRC) \
 +       $(HALSRC) \
 +       $(PLATFORMSRC) \
 +       $(BOARDSRC) \
 +       $(CHIBIOS)/os/various/chprintf.c \
 +       main.c
 +
 +# C++ sources that can be compiled in ARM or THUMB mode depending on the global
 +# setting.
 +CPPSRC =
 +
 +# C sources to be compiled in ARM mode regardless of the global setting.
 +# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler
 +#       option that results in lower performance and larger code size.
 +ACSRC =
 +
 +# C++ sources to be compiled in ARM mode regardless of the global setting.
 +# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler
 +#       option that results in lower performance and larger code size.
 +ACPPSRC =
 +
 +# C sources to be compiled in THUMB mode regardless of the global setting.
 +# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler
 +#       option that results in lower performance and larger code size.
 +TCSRC =
 +
 +# C sources to be compiled in THUMB mode regardless of the global setting.
 +# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler
 +#       option that results in lower performance and larger code size.
 +TCPPSRC =
 +
 +# List ASM source files here
 +ASMSRC = $(PORTASM)
 +
 +INCDIR = $(PORTINC) $(KERNINC) $(TESTINC) \
 +         $(HALINC) $(PLATFORMINC) $(BOARDINC) \
 +         $(CHIBIOS)/os/various
 +
 +#
 +# Project, sources and paths
 +##############################################################################
 +
 +##############################################################################
 +# Compiler settings
 +#
 +
 +MCU  = cortex-m4
 +
 +#TRGT = arm-elf-
 +TRGT = arm-none-eabi-
 +CC   = $(TRGT)gcc
 +CPPC = $(TRGT)g++
 +# Enable loading with g++ only if you need C++ runtime support.
 +# NOTE: You can use C++ even without C++ support if you are careful. C++
 +#       runtime support makes code size explode.
 +LD   = $(TRGT)gcc
 +#LD   = $(TRGT)g++
 +CP   = $(TRGT)objcopy
 +AS   = $(TRGT)gcc -x assembler-with-cpp
 +OD   = $(TRGT)objdump
 +HEX  = $(CP) -O ihex
 +BIN  = $(CP) -O binary
 +
 +# ARM-specific options here
 +AOPT =
 +
 +# THUMB-specific options here
 +TOPT = -mthumb -DTHUMB
 +
 +# Define C warning options here
 +CWARN = -Wall -Wextra -Wstrict-prototypes
 +
 +# Define C++ warning options here
 +CPPWARN = -Wall -Wextra
 +
 +#
 +# Compiler settings
 +##############################################################################
 +
 +##############################################################################
 +# Start of default section
 +#
 +
 +# List all default C defines here, like -D_DEBUG=1
 +DDEFS =
 +
 +# List all default ASM defines here, like -D_DEBUG=1
 +DADEFS =
 +
 +# List all default directories to look for include files here
 +DINCDIR =
 +
 +# List the default directory to look for the libraries here
 +DLIBDIR =
 +
 +# List all default libraries here
 +DLIBS =
 +
 +#
 +# End of default section
 +##############################################################################
 +
 +##############################################################################
 +# Start of user section
 +#
 +
 +# List all user C define here, like -D_DEBUG=1
 +UDEFS =
 +
 +# Define ASM defines here
 +UADEFS =
 +
 +# List all user directories here
 +UINCDIR =
 +
 +# List the user directory to look for the libraries here
 +ULIBDIR =
 +
 +# List all user libraries here
 +ULIBS =
 +
 +#
 +# End of user defines
 +##############################################################################
 +
 +ifeq ($(USE_FPU),yes)
 +  USE_OPT += -mfloat-abi=softfp -mfpu=fpv4-sp-d16 -fsingle-precision-constant
 +  DDEFS += -DCORTEX_USE_FPU=TRUE
 +else
 +  DDEFS += -DCORTEX_USE_FPU=FALSE
 +endif
 +
 +ifeq ($(USE_FWLIB),yes)
 +  include $(CHIBIOS)/ext/stm32lib/stm32lib.mk
 +  CSRC += $(STM32SRC)
 +  INCDIR += $(STM32INC)
 +  USE_OPT += -DUSE_STDPERIPH_DRIVER
 +endif
 +
 +include $(CHIBIOS)/os/ports/GCC/ARMCMx/rules.mk
 diff --git a/testhal/STM32F4xx/GPT/chconf.h b/testhal/STM32F4xx/GPT/chconf.h new file mode 100644 index 000000000..2e6fcc6ee --- /dev/null +++ b/testhal/STM32F4xx/GPT/chconf.h @@ -0,0 +1,531 @@ +/*
 +    ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio
 +
 +    Licensed under the Apache License, Version 2.0 (the "License");
 +    you may not use this file except in compliance with the License.
 +    You may obtain a copy of the License at
 +
 +        http://www.apache.org/licenses/LICENSE-2.0
 +
 +    Unless required by applicable law or agreed to in writing, software
 +    distributed under the License is distributed on an "AS IS" BASIS,
 +    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 +    See the License for the specific language governing permissions and
 +    limitations under the License.
 +*/
 +
 +/**
 + * @file    templates/chconf.h
 + * @brief   Configuration file template.
 + * @details A copy of this file must be placed in each project directory, it
 + *          contains the application specific kernel settings.
 + *
 + * @addtogroup config
 + * @details Kernel related settings and hooks.
 + * @{
 + */
 +
 +#ifndef _CHCONF_H_
 +#define _CHCONF_H_
 +
 +/*===========================================================================*/
 +/**
 + * @name Kernel parameters and options
 + * @{
 + */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   System tick frequency.
 + * @details Frequency of the system timer that drives the system ticks. This
 + *          setting also defines the system tick time unit.
 + */
 +#if !defined(CH_FREQUENCY) || defined(__DOXYGEN__)
 +#define CH_FREQUENCY                    1000
 +#endif
 +
 +/**
 + * @brief   Round robin interval.
 + * @details This constant is the number of system ticks allowed for the
 + *          threads before preemption occurs. Setting this value to zero
 + *          disables the preemption for threads with equal priority and the
 + *          round robin becomes cooperative. Note that higher priority
 + *          threads can still preempt, the kernel is always preemptive.
 + *
 + * @note    Disabling the round robin preemption makes the kernel more compact
 + *          and generally faster.
 + */
 +#if !defined(CH_TIME_QUANTUM) || defined(__DOXYGEN__)
 +#define CH_TIME_QUANTUM                 20
 +#endif
 +
 +/**
 + * @brief   Managed RAM size.
 + * @details Size of the RAM area to be managed by the OS. If set to zero
 + *          then the whole available RAM is used. The core memory is made
 + *          available to the heap allocator and/or can be used directly through
 + *          the simplified core memory allocator.
 + *
 + * @note    In order to let the OS manage the whole RAM the linker script must
 + *          provide the @p __heap_base__ and @p __heap_end__ symbols.
 + * @note    Requires @p CH_USE_MEMCORE.
 + */
 +#if !defined(CH_MEMCORE_SIZE) || defined(__DOXYGEN__)
 +#define CH_MEMCORE_SIZE                 0
 +#endif
 +
 +/**
 + * @brief   Idle thread automatic spawn suppression.
 + * @details When this option is activated the function @p chSysInit()
 + *          does not spawn the idle thread automatically. The application has
 + *          then the responsibility to do one of the following:
 + *          - Spawn a custom idle thread at priority @p IDLEPRIO.
 + *          - Change the main() thread priority to @p IDLEPRIO then enter
 + *            an endless loop. In this scenario the @p main() thread acts as
 + *            the idle thread.
 + *          .
 + * @note    Unless an idle thread is spawned the @p main() thread must not
 + *          enter a sleep state.
 + */
 +#if !defined(CH_NO_IDLE_THREAD) || defined(__DOXYGEN__)
 +#define CH_NO_IDLE_THREAD               FALSE
 +#endif
 +
 +/** @} */
 +
 +/*===========================================================================*/
 +/**
 + * @name Performance options
 + * @{
 + */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   OS optimization.
 + * @details If enabled then time efficient rather than space efficient code
 + *          is used when two possible implementations exist.
 + *
 + * @note    This is not related to the compiler optimization options.
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_OPTIMIZE_SPEED) || defined(__DOXYGEN__)
 +#define CH_OPTIMIZE_SPEED               TRUE
 +#endif
 +
 +/** @} */
 +
 +/*===========================================================================*/
 +/**
 + * @name Subsystem options
 + * @{
 + */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Threads registry APIs.
 + * @details If enabled then the registry APIs are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_REGISTRY) || defined(__DOXYGEN__)
 +#define CH_USE_REGISTRY                 TRUE
 +#endif
 +
 +/**
 + * @brief   Threads synchronization APIs.
 + * @details If enabled then the @p chThdWait() function is included in
 + *          the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_WAITEXIT) || defined(__DOXYGEN__)
 +#define CH_USE_WAITEXIT                 TRUE
 +#endif
 +
 +/**
 + * @brief   Semaphores APIs.
 + * @details If enabled then the Semaphores APIs are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_SEMAPHORES) || defined(__DOXYGEN__)
 +#define CH_USE_SEMAPHORES               TRUE
 +#endif
 +
 +/**
 + * @brief   Semaphores queuing mode.
 + * @details If enabled then the threads are enqueued on semaphores by
 + *          priority rather than in FIFO order.
 + *
 + * @note    The default is @p FALSE. Enable this if you have special requirements.
 + * @note    Requires @p CH_USE_SEMAPHORES.
 + */
 +#if !defined(CH_USE_SEMAPHORES_PRIORITY) || defined(__DOXYGEN__)
 +#define CH_USE_SEMAPHORES_PRIORITY      FALSE
 +#endif
 +
 +/**
 + * @brief   Atomic semaphore API.
 + * @details If enabled then the semaphores the @p chSemSignalWait() API
 + *          is included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_SEMAPHORES.
 + */
 +#if !defined(CH_USE_SEMSW) || defined(__DOXYGEN__)
 +#define CH_USE_SEMSW                    TRUE
 +#endif
 +
 +/**
 + * @brief   Mutexes APIs.
 + * @details If enabled then the mutexes APIs are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_MUTEXES) || defined(__DOXYGEN__)
 +#define CH_USE_MUTEXES                  TRUE
 +#endif
 +
 +/**
 + * @brief   Conditional Variables APIs.
 + * @details If enabled then the conditional variables APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_MUTEXES.
 + */
 +#if !defined(CH_USE_CONDVARS) || defined(__DOXYGEN__)
 +#define CH_USE_CONDVARS                 TRUE
 +#endif
 +
 +/**
 + * @brief   Conditional Variables APIs with timeout.
 + * @details If enabled then the conditional variables APIs with timeout
 + *          specification are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_CONDVARS.
 + */
 +#if !defined(CH_USE_CONDVARS_TIMEOUT) || defined(__DOXYGEN__)
 +#define CH_USE_CONDVARS_TIMEOUT         TRUE
 +#endif
 +
 +/**
 + * @brief   Events Flags APIs.
 + * @details If enabled then the event flags APIs are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_EVENTS) || defined(__DOXYGEN__)
 +#define CH_USE_EVENTS                   TRUE
 +#endif
 +
 +/**
 + * @brief   Events Flags APIs with timeout.
 + * @details If enabled then the events APIs with timeout specification
 + *          are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_EVENTS.
 + */
 +#if !defined(CH_USE_EVENTS_TIMEOUT) || defined(__DOXYGEN__)
 +#define CH_USE_EVENTS_TIMEOUT           TRUE
 +#endif
 +
 +/**
 + * @brief   Synchronous Messages APIs.
 + * @details If enabled then the synchronous messages APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_MESSAGES) || defined(__DOXYGEN__)
 +#define CH_USE_MESSAGES                 TRUE
 +#endif
 +
 +/**
 + * @brief   Synchronous Messages queuing mode.
 + * @details If enabled then messages are served by priority rather than in
 + *          FIFO order.
 + *
 + * @note    The default is @p FALSE. Enable this if you have special requirements.
 + * @note    Requires @p CH_USE_MESSAGES.
 + */
 +#if !defined(CH_USE_MESSAGES_PRIORITY) || defined(__DOXYGEN__)
 +#define CH_USE_MESSAGES_PRIORITY        FALSE
 +#endif
 +
 +/**
 + * @brief   Mailboxes APIs.
 + * @details If enabled then the asynchronous messages (mailboxes) APIs are
 + *          included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_SEMAPHORES.
 + */
 +#if !defined(CH_USE_MAILBOXES) || defined(__DOXYGEN__)
 +#define CH_USE_MAILBOXES                TRUE
 +#endif
 +
 +/**
 + * @brief   I/O Queues APIs.
 + * @details If enabled then the I/O queues APIs are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_QUEUES) || defined(__DOXYGEN__)
 +#define CH_USE_QUEUES                   TRUE
 +#endif
 +
 +/**
 + * @brief   Core Memory Manager APIs.
 + * @details If enabled then the core memory manager APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_MEMCORE) || defined(__DOXYGEN__)
 +#define CH_USE_MEMCORE                  TRUE
 +#endif
 +
 +/**
 + * @brief   Heap Allocator APIs.
 + * @details If enabled then the memory heap allocator APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_MEMCORE and either @p CH_USE_MUTEXES or
 + *          @p CH_USE_SEMAPHORES.
 + * @note    Mutexes are recommended.
 + */
 +#if !defined(CH_USE_HEAP) || defined(__DOXYGEN__)
 +#define CH_USE_HEAP                     TRUE
 +#endif
 +
 +/**
 + * @brief   C-runtime allocator.
 + * @details If enabled the the heap allocator APIs just wrap the C-runtime
 + *          @p malloc() and @p free() functions.
 + *
 + * @note    The default is @p FALSE.
 + * @note    Requires @p CH_USE_HEAP.
 + * @note    The C-runtime may or may not require @p CH_USE_MEMCORE, see the
 + *          appropriate documentation.
 + */
 +#if !defined(CH_USE_MALLOC_HEAP) || defined(__DOXYGEN__)
 +#define CH_USE_MALLOC_HEAP              FALSE
 +#endif
 +
 +/**
 + * @brief   Memory Pools Allocator APIs.
 + * @details If enabled then the memory pools allocator APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_MEMPOOLS) || defined(__DOXYGEN__)
 +#define CH_USE_MEMPOOLS                 TRUE
 +#endif
 +
 +/**
 + * @brief   Dynamic Threads APIs.
 + * @details If enabled then the dynamic threads creation APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_WAITEXIT.
 + * @note    Requires @p CH_USE_HEAP and/or @p CH_USE_MEMPOOLS.
 + */
 +#if !defined(CH_USE_DYNAMIC) || defined(__DOXYGEN__)
 +#define CH_USE_DYNAMIC                  TRUE
 +#endif
 +
 +/** @} */
 +
 +/*===========================================================================*/
 +/**
 + * @name Debug options
 + * @{
 + */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Debug option, system state check.
 + * @details If enabled the correct call protocol for system APIs is checked
 + *          at runtime.
 + *
 + * @note    The default is @p FALSE.
 + */
 +#if !defined(CH_DBG_SYSTEM_STATE_CHECK) || defined(__DOXYGEN__)
 +#define CH_DBG_SYSTEM_STATE_CHECK       TRUE
 +#endif
 +
 +/**
 + * @brief   Debug option, parameters checks.
 + * @details If enabled then the checks on the API functions input
 + *          parameters are activated.
 + *
 + * @note    The default is @p FALSE.
 + */
 +#if !defined(CH_DBG_ENABLE_CHECKS) || defined(__DOXYGEN__)
 +#define CH_DBG_ENABLE_CHECKS            TRUE
 +#endif
 +
 +/**
 + * @brief   Debug option, consistency checks.
 + * @details If enabled then all the assertions in the kernel code are
 + *          activated. This includes consistency checks inside the kernel,
 + *          runtime anomalies and port-defined checks.
 + *
 + * @note    The default is @p FALSE.
 + */
 +#if !defined(CH_DBG_ENABLE_ASSERTS) || defined(__DOXYGEN__)
 +#define CH_DBG_ENABLE_ASSERTS           TRUE
 +#endif
 +
 +/**
 + * @brief   Debug option, trace buffer.
 + * @details If enabled then the context switch circular trace buffer is
 + *          activated.
 + *
 + * @note    The default is @p FALSE.
 + */
 +#if !defined(CH_DBG_ENABLE_TRACE) || defined(__DOXYGEN__)
 +#define CH_DBG_ENABLE_TRACE             TRUE
 +#endif
 +
 +/**
 + * @brief   Debug option, stack checks.
 + * @details If enabled then a runtime stack check is performed.
 + *
 + * @note    The default is @p FALSE.
 + * @note    The stack check is performed in a architecture/port dependent way.
 + *          It may not be implemented or some ports.
 + * @note    The default failure mode is to halt the system with the global
 + *          @p panic_msg variable set to @p NULL.
 + */
 +#if !defined(CH_DBG_ENABLE_STACK_CHECK) || defined(__DOXYGEN__)
 +#define CH_DBG_ENABLE_STACK_CHECK       TRUE
 +#endif
 +
 +/**
 + * @brief   Debug option, stacks initialization.
 + * @details If enabled then the threads working area is filled with a byte
 + *          value when a thread is created. This can be useful for the
 + *          runtime measurement of the used stack.
 + *
 + * @note    The default is @p FALSE.
 + */
 +#if !defined(CH_DBG_FILL_THREADS) || defined(__DOXYGEN__)
 +#define CH_DBG_FILL_THREADS             TRUE
 +#endif
 +
 +/**
 + * @brief   Debug option, threads profiling.
 + * @details If enabled then a field is added to the @p Thread structure that
 + *          counts the system ticks occurred while executing the thread.
 + *
 + * @note    The default is @p TRUE.
 + * @note    This debug option is defaulted to TRUE because it is required by
 + *          some test cases into the test suite.
 + */
 +#if !defined(CH_DBG_THREADS_PROFILING) || defined(__DOXYGEN__)
 +#define CH_DBG_THREADS_PROFILING        TRUE
 +#endif
 +
 +/** @} */
 +
 +/*===========================================================================*/
 +/**
 + * @name Kernel hooks
 + * @{
 + */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Threads descriptor structure extension.
 + * @details User fields added to the end of the @p Thread structure.
 + */
 +#if !defined(THREAD_EXT_FIELDS) || defined(__DOXYGEN__)
 +#define THREAD_EXT_FIELDS                                                   \
 +  /* Add threads custom fields here.*/
 +#endif
 +
 +/**
 + * @brief   Threads initialization hook.
 + * @details User initialization code added to the @p chThdInit() API.
 + *
 + * @note    It is invoked from within @p chThdInit() and implicitly from all
 + *          the threads creation APIs.
 + */
 +#if !defined(THREAD_EXT_INIT_HOOK) || defined(__DOXYGEN__)
 +#define THREAD_EXT_INIT_HOOK(tp) {                                          \
 +  /* Add threads initialization code here.*/                                \
 +}
 +#endif
 +
 +/**
 + * @brief   Threads finalization hook.
 + * @details User finalization code added to the @p chThdExit() API.
 + *
 + * @note    It is inserted into lock zone.
 + * @note    It is also invoked when the threads simply return in order to
 + *          terminate.
 + */
 +#if !defined(THREAD_EXT_EXIT_HOOK) || defined(__DOXYGEN__)
 +#define THREAD_EXT_EXIT_HOOK(tp) {                                          \
 +  /* Add threads finalization code here.*/                                  \
 +}
 +#endif
 +
 +/**
 + * @brief   Context switch hook.
 + * @details This hook is invoked just before switching between threads.
 + */
 +#if !defined(THREAD_CONTEXT_SWITCH_HOOK) || defined(__DOXYGEN__)
 +#define THREAD_CONTEXT_SWITCH_HOOK(ntp, otp) {                              \
 +  /* System halt code here.*/                                               \
 +}
 +#endif
 +
 +/**
 + * @brief   Idle Loop hook.
 + * @details This hook is continuously invoked by the idle thread loop.
 + */
 +#if !defined(IDLE_LOOP_HOOK) || defined(__DOXYGEN__)
 +#define IDLE_LOOP_HOOK() {                                                  \
 +  /* Idle loop code here.*/                                                 \
 +}
 +#endif
 +
 +/**
 + * @brief   System tick event hook.
 + * @details This hook is invoked in the system tick handler immediately
 + *          after processing the virtual timers queue.
 + */
 +#if !defined(SYSTEM_TICK_EVENT_HOOK) || defined(__DOXYGEN__)
 +#define SYSTEM_TICK_EVENT_HOOK() {                                          \
 +  /* System tick event code here.*/                                         \
 +}
 +#endif
 +
 +/**
 + * @brief   System halt hook.
 + * @details This hook is invoked in case to a system halting error before
 + *          the system is halted.
 + */
 +#if !defined(SYSTEM_HALT_HOOK) || defined(__DOXYGEN__)
 +#define SYSTEM_HALT_HOOK() {                                                \
 +  /* System halt code here.*/                                               \
 +}
 +#endif
 +
 +/** @} */
 +
 +/*===========================================================================*/
 +/* Port-specific settings (override port settings defaulted in chcore.h).    */
 +/*===========================================================================*/
 +
 +#endif  /* _CHCONF_H_ */
 +
 +/** @} */
 diff --git a/testhal/STM32F4xx/GPT/halconf.h b/testhal/STM32F4xx/GPT/halconf.h new file mode 100644 index 000000000..554b4e9ca --- /dev/null +++ b/testhal/STM32F4xx/GPT/halconf.h @@ -0,0 +1,312 @@ +/*
 +    ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio
 +
 +    Licensed under the Apache License, Version 2.0 (the "License");
 +    you may not use this file except in compliance with the License.
 +    You may obtain a copy of the License at
 +
 +        http://www.apache.org/licenses/LICENSE-2.0
 +
 +    Unless required by applicable law or agreed to in writing, software
 +    distributed under the License is distributed on an "AS IS" BASIS,
 +    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 +    See the License for the specific language governing permissions and
 +    limitations under the License.
 +*/
 +
 +/**
 + * @file    templates/halconf.h
 + * @brief   HAL configuration header.
 + * @details HAL configuration file, this file allows to enable or disable the
 + *          various device drivers from your application. You may also use
 + *          this file in order to override the device drivers default settings.
 + *
 + * @addtogroup HAL_CONF
 + * @{
 + */
 +
 +#ifndef _HALCONF_H_
 +#define _HALCONF_H_
 +
 +#include "mcuconf.h"
 +
 +/**
 + * @brief   Enables the TM subsystem.
 + */
 +#if !defined(HAL_USE_TM) || defined(__DOXYGEN__)
 +#define HAL_USE_TM                  TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the PAL subsystem.
 + */
 +#if !defined(HAL_USE_PAL) || defined(__DOXYGEN__)
 +#define HAL_USE_PAL                 TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the ADC subsystem.
 + */
 +#if !defined(HAL_USE_ADC) || defined(__DOXYGEN__)
 +#define HAL_USE_ADC                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the CAN subsystem.
 + */
 +#if !defined(HAL_USE_CAN) || defined(__DOXYGEN__)
 +#define HAL_USE_CAN                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the EXT subsystem.
 + */
 +#if !defined(HAL_USE_EXT) || defined(__DOXYGEN__)
 +#define HAL_USE_EXT                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the GPT subsystem.
 + */
 +#if !defined(HAL_USE_GPT) || defined(__DOXYGEN__)
 +#define HAL_USE_GPT                 TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the I2C subsystem.
 + */
 +#if !defined(HAL_USE_I2C) || defined(__DOXYGEN__)
 +#define HAL_USE_I2C                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the ICU subsystem.
 + */
 +#if !defined(HAL_USE_ICU) || defined(__DOXYGEN__)
 +#define HAL_USE_ICU                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the MAC subsystem.
 + */
 +#if !defined(HAL_USE_MAC) || defined(__DOXYGEN__)
 +#define HAL_USE_MAC                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the MMC_SPI subsystem.
 + */
 +#if !defined(HAL_USE_MMC_SPI) || defined(__DOXYGEN__)
 +#define HAL_USE_MMC_SPI             FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the PWM subsystem.
 + */
 +#if !defined(HAL_USE_PWM) || defined(__DOXYGEN__)
 +#define HAL_USE_PWM                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the RTC subsystem.
 + */
 +#if !defined(HAL_USE_RTC) || defined(__DOXYGEN__)
 +#define HAL_USE_RTC                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the SDC subsystem.
 + */
 +#if !defined(HAL_USE_SDC) || defined(__DOXYGEN__)
 +#define HAL_USE_SDC                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the SERIAL subsystem.
 + */
 +#if !defined(HAL_USE_SERIAL) || defined(__DOXYGEN__)
 +#define HAL_USE_SERIAL              FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the SERIAL over USB subsystem.
 + */
 +#if !defined(HAL_USE_SERIAL_USB) || defined(__DOXYGEN__)
 +#define HAL_USE_SERIAL_USB          FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the SPI subsystem.
 + */
 +#if !defined(HAL_USE_SPI) || defined(__DOXYGEN__)
 +#define HAL_USE_SPI                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the UART subsystem.
 + */
 +#if !defined(HAL_USE_UART) || defined(__DOXYGEN__)
 +#define HAL_USE_UART                FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the USB subsystem.
 + */
 +#if !defined(HAL_USE_USB) || defined(__DOXYGEN__)
 +#define HAL_USE_USB                 FALSE
 +#endif
 +
 +/*===========================================================================*/
 +/* ADC driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Enables synchronous APIs.
 + * @note    Disabling this option saves both code and data space.
 + */
 +#if !defined(ADC_USE_WAIT) || defined(__DOXYGEN__)
 +#define ADC_USE_WAIT                TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the @p adcAcquireBus() and @p adcReleaseBus() APIs.
 + * @note    Disabling this option saves both code and data space.
 + */
 +#if !defined(ADC_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
 +#define ADC_USE_MUTUAL_EXCLUSION    TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* CAN driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Sleep mode related APIs inclusion switch.
 + */
 +#if !defined(CAN_USE_SLEEP_MODE) || defined(__DOXYGEN__)
 +#define CAN_USE_SLEEP_MODE          TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* I2C driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Enables the mutual exclusion APIs on the I2C bus.
 + */
 +#if !defined(I2C_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
 +#define I2C_USE_MUTUAL_EXCLUSION    TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* MAC driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Enables an event sources for incoming packets.
 + */
 +#if !defined(MAC_USE_ZERO_COPY) || defined(__DOXYGEN__)
 +#define MAC_USE_ZERO_COPY           FALSE
 +#endif
 +
 +/**
 + * @brief   Enables an event sources for incoming packets.
 + */
 +#if !defined(MAC_USE_EVENTS) || defined(__DOXYGEN__)
 +#define MAC_USE_EVENTS              TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* MMC_SPI driver related settings.                                          */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Delays insertions.
 + * @details If enabled this options inserts delays into the MMC waiting
 + *          routines releasing some extra CPU time for the threads with
 + *          lower priority, this may slow down the driver a bit however.
 + *          This option is recommended also if the SPI driver does not
 + *          use a DMA channel and heavily loads the CPU.
 + */
 +#if !defined(MMC_NICE_WAITING) || defined(__DOXYGEN__)
 +#define MMC_NICE_WAITING            TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* SDC driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Number of initialization attempts before rejecting the card.
 + * @note    Attempts are performed at 10mS intervals.
 + */
 +#if !defined(SDC_INIT_RETRY) || defined(__DOXYGEN__)
 +#define SDC_INIT_RETRY              100
 +#endif
 +
 +/**
 + * @brief   Include support for MMC cards.
 + * @note    MMC support is not yet implemented so this option must be kept
 + *          at @p FALSE.
 + */
 +#if !defined(SDC_MMC_SUPPORT) || defined(__DOXYGEN__)
 +#define SDC_MMC_SUPPORT             FALSE
 +#endif
 +
 +/**
 + * @brief   Delays insertions.
 + * @details If enabled this options inserts delays into the MMC waiting
 + *          routines releasing some extra CPU time for the threads with
 + *          lower priority, this may slow down the driver a bit however.
 + */
 +#if !defined(SDC_NICE_WAITING) || defined(__DOXYGEN__)
 +#define SDC_NICE_WAITING            TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* SERIAL driver related settings.                                           */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Default bit rate.
 + * @details Configuration parameter, this is the baud rate selected for the
 + *          default configuration.
 + */
 +#if !defined(SERIAL_DEFAULT_BITRATE) || defined(__DOXYGEN__)
 +#define SERIAL_DEFAULT_BITRATE      38400
 +#endif
 +
 +/**
 + * @brief   Serial buffers size.
 + * @details Configuration parameter, you can change the depth of the queue
 + *          buffers depending on the requirements of your application.
 + * @note    The default is 64 bytes for both the transmission and receive
 + *          buffers.
 + */
 +#if !defined(SERIAL_BUFFERS_SIZE) || defined(__DOXYGEN__)
 +#define SERIAL_BUFFERS_SIZE         16
 +#endif
 +
 +/*===========================================================================*/
 +/* SPI driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Enables synchronous APIs.
 + * @note    Disabling this option saves both code and data space.
 + */
 +#if !defined(SPI_USE_WAIT) || defined(__DOXYGEN__)
 +#define SPI_USE_WAIT                TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the @p spiAcquireBus() and @p spiReleaseBus() APIs.
 + * @note    Disabling this option saves both code and data space.
 + */
 +#if !defined(SPI_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
 +#define SPI_USE_MUTUAL_EXCLUSION    TRUE
 +#endif
 +
 +#endif /* _HALCONF_H_ */
 +
 +/** @} */
 diff --git a/testhal/STM32F4xx/GPT/main.c b/testhal/STM32F4xx/GPT/main.c new file mode 100644 index 000000000..4b0031dc3 --- /dev/null +++ b/testhal/STM32F4xx/GPT/main.c @@ -0,0 +1,94 @@ +/*
 +    ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio
 +
 +    Licensed under the Apache License, Version 2.0 (the "License");
 +    you may not use this file except in compliance with the License.
 +    You may obtain a copy of the License at
 +
 +        http://www.apache.org/licenses/LICENSE-2.0
 +
 +    Unless required by applicable law or agreed to in writing, software
 +    distributed under the License is distributed on an "AS IS" BASIS,
 +    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 +    See the License for the specific language governing permissions and
 +    limitations under the License.
 +*/
 +
 +#include "ch.h"
 +#include "hal.h"
 +
 +/*
 + * GPT2 callback.
 + */
 +static void gpt2cb(GPTDriver *gptp) {
 +
 +  (void)gptp;
 +  palSetPad(GPIOD, GPIOD_LED5);
 +  chSysLockFromIsr();
 +  gptStartOneShotI(&GPTD3, 1000);   /* 0.1 second pulse.*/
 +  chSysUnlockFromIsr();
 +}
 +
 +/*
 + * GPT3 callback.
 + */
 +static void gpt3cb(GPTDriver *gptp) {
 +
 +  (void)gptp;
 +  palClearPad(GPIOD, GPIOD_LED5);
 +}
 +
 +/*
 + * GPT2 configuration.
 + */
 +static const GPTConfig gpt2cfg = {
 +  10000,    /* 10kHz timer clock.*/
 +  gpt2cb    /* Timer callback.*/
 +};
 +
 +/*
 + * GPT3 configuration.
 + */
 +static const GPTConfig gpt3cfg = {
 +  10000,    /* 10kHz timer clock.*/
 +  gpt3cb    /* Timer callback.*/
 +};
 +
 +/*
 + * Application entry point.
 + */
 +int main(void) {
 +
 +  /*
 +   * System initializations.
 +   * - HAL initialization, this also initializes the configured device drivers
 +   *   and performs the board-specific initializations.
 +   * - Kernel initialization, the main() function becomes a thread and the
 +   *   RTOS is active.
 +   */
 +  halInit();
 +  chSysInit();
 +
 +  /*
 +   * Initializes the GPT drivers 2 and 3.
 +   */
 +  gptStart(&GPTD2, &gpt2cfg);
 +  gptPolledDelay(&GPTD2, 10); /* Small delay.*/
 +  gptStart(&GPTD3, &gpt3cfg);
 +  gptPolledDelay(&GPTD3, 10); /* Small delay.*/
 +
 +  /*
 +   * Normal main() thread activity, it changes the GPT1 period every
 +   * five seconds.
 +   */
 +  while (TRUE) {
 +    palSetPad(GPIOD, GPIOD_LED4);
 +    gptStartContinuous(&GPTD2, 5000);
 +    chThdSleepMilliseconds(5000);
 +    gptStopTimer(&GPTD2);
 +    palClearPad(GPIOD, GPIOD_LED4);
 +    gptStartContinuous(&GPTD2, 2500);
 +    chThdSleepMilliseconds(5000);
 +    gptStopTimer(&GPTD2);
 +  }
 +}
 diff --git a/testhal/STM32F4xx/GPT/mcuconf.h b/testhal/STM32F4xx/GPT/mcuconf.h new file mode 100644 index 000000000..ffc39aa31 --- /dev/null +++ b/testhal/STM32F4xx/GPT/mcuconf.h @@ -0,0 +1,278 @@ +/*
 +    ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio
 +
 +    Licensed under the Apache License, Version 2.0 (the "License");
 +    you may not use this file except in compliance with the License.
 +    You may obtain a copy of the License at
 +
 +        http://www.apache.org/licenses/LICENSE-2.0
 +
 +    Unless required by applicable law or agreed to in writing, software
 +    distributed under the License is distributed on an "AS IS" BASIS,
 +    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 +    See the License for the specific language governing permissions and
 +    limitations under the License.
 +*/
 +
 +/*
 + * STM32F4xx drivers configuration.
 + * The following settings override the default settings present in
 + * the various device driver implementation headers.
 + * Note that the settings for each driver only have effect if the whole
 + * driver is enabled in halconf.h.
 + *
 + * IRQ priorities:
 + * 15...0       Lowest...Highest.
 + *
 + * DMA priorities:
 + * 0...3        Lowest...Highest.
 + */
 +
 +#define STM32F4xx_MCUCONF
 +
 +/*
 + * HAL driver system settings.
 + */
 +#define STM32_NO_INIT                       FALSE
 +#define STM32_HSI_ENABLED                   TRUE
 +#define STM32_LSI_ENABLED                   TRUE
 +#define STM32_HSE_ENABLED                   TRUE
 +#define STM32_LSE_ENABLED                   FALSE
 +#define STM32_CLOCK48_REQUIRED              TRUE
 +#define STM32_SW                            STM32_SW_PLL
 +#define STM32_PLLSRC                        STM32_PLLSRC_HSE
 +#define STM32_PLLM_VALUE                    8
 +#define STM32_PLLN_VALUE                    336
 +#define STM32_PLLP_VALUE                    2
 +#define STM32_PLLQ_VALUE                    7
 +#define STM32_HPRE                          STM32_HPRE_DIV1
 +#define STM32_PPRE1                         STM32_PPRE1_DIV4
 +#define STM32_PPRE2                         STM32_PPRE2_DIV2
 +#define STM32_RTCSEL                        STM32_RTCSEL_LSI
 +#define STM32_RTCPRE_VALUE                  8
 +#define STM32_MCO1SEL                       STM32_MCO1SEL_HSI
 +#define STM32_MCO1PRE                       STM32_MCO1PRE_DIV1
 +#define STM32_MCO2SEL                       STM32_MCO2SEL_SYSCLK
 +#define STM32_MCO2PRE                       STM32_MCO2PRE_DIV5
 +#define STM32_I2SSRC                        STM32_I2SSRC_CKIN
 +#define STM32_PLLI2SN_VALUE                 192
 +#define STM32_PLLI2SR_VALUE                 5
 +#define STM32_VOS                           STM32_VOS_HIGH
 +#define STM32_PVD_ENABLE                    FALSE
 +#define STM32_PLS                           STM32_PLS_LEV0
 +
 +/*
 + * ADC driver system settings.
 + */
 +#define STM32_ADC_ADCPRE                    ADC_CCR_ADCPRE_DIV4
 +#define STM32_ADC_USE_ADC1                  FALSE
 +#define STM32_ADC_USE_ADC2                  FALSE
 +#define STM32_ADC_USE_ADC3                  FALSE
 +#define STM32_ADC_ADC1_DMA_STREAM           STM32_DMA_STREAM_ID(2, 4)
 +#define STM32_ADC_ADC2_DMA_STREAM           STM32_DMA_STREAM_ID(2, 2)
 +#define STM32_ADC_ADC3_DMA_STREAM           STM32_DMA_STREAM_ID(2, 1)
 +#define STM32_ADC_ADC1_DMA_PRIORITY         2
 +#define STM32_ADC_ADC2_DMA_PRIORITY         2
 +#define STM32_ADC_ADC3_DMA_PRIORITY         2
 +#define STM32_ADC_IRQ_PRIORITY              6
 +#define STM32_ADC_ADC1_DMA_IRQ_PRIORITY     6
 +#define STM32_ADC_ADC2_DMA_IRQ_PRIORITY     6
 +#define STM32_ADC_ADC3_DMA_IRQ_PRIORITY     6
 +
 +/*
 + * CAN driver system settings.
 + */
 +#define STM32_CAN_USE_CAN1                  FALSE
 +#define STM32_CAN_USE_CAN2                  FALSE
 +#define STM32_CAN_CAN1_IRQ_PRIORITY         11
 +#define STM32_CAN_CAN2_IRQ_PRIORITY         11
 +
 +/*
 + * EXT driver system settings.
 + */
 +#define STM32_EXT_EXTI0_IRQ_PRIORITY        6
 +#define STM32_EXT_EXTI1_IRQ_PRIORITY        6
 +#define STM32_EXT_EXTI2_IRQ_PRIORITY        6
 +#define STM32_EXT_EXTI3_IRQ_PRIORITY        6
 +#define STM32_EXT_EXTI4_IRQ_PRIORITY        6
 +#define STM32_EXT_EXTI5_9_IRQ_PRIORITY      6
 +#define STM32_EXT_EXTI10_15_IRQ_PRIORITY    6
 +#define STM32_EXT_EXTI16_IRQ_PRIORITY       6
 +#define STM32_EXT_EXTI17_IRQ_PRIORITY       15
 +#define STM32_EXT_EXTI18_IRQ_PRIORITY       6
 +#define STM32_EXT_EXTI19_IRQ_PRIORITY       6
 +#define STM32_EXT_EXTI20_IRQ_PRIORITY       6
 +#define STM32_EXT_EXTI21_IRQ_PRIORITY       15
 +#define STM32_EXT_EXTI22_IRQ_PRIORITY       15
 +
 +/*
 + * GPT driver system settings.
 + */
 +#define STM32_GPT_USE_TIM1                  TRUE
 +#define STM32_GPT_USE_TIM2                  TRUE
 +#define STM32_GPT_USE_TIM3                  TRUE
 +#define STM32_GPT_USE_TIM4                  TRUE
 +#define STM32_GPT_USE_TIM5                  TRUE
 +#define STM32_GPT_USE_TIM8                  TRUE
 +#define STM32_GPT_USE_TIM7                  TRUE
 +#define STM32_GPT_USE_TIM8                  TRUE
 +#define STM32_GPT_USE_TIM9                  TRUE
 +#define STM32_GPT_USE_TIM11                 TRUE
 +#define STM32_GPT_USE_TIM12                 TRUE
 +#define STM32_GPT_USE_TIM14                 TRUE
 +#define STM32_GPT_TIM1_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM2_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM3_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM4_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM5_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM6_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM7_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM8_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM9_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM11_IRQ_PRIORITY        7
 +#define STM32_GPT_TIM12_IRQ_PRIORITY        7
 +#define STM32_GPT_TIM14_IRQ_PRIORITY        7
 +
 +/*
 + * I2C driver system settings.
 + */
 +#define STM32_I2C_USE_I2C1                  FALSE
 +#define STM32_I2C_USE_I2C2                  FALSE
 +#define STM32_I2C_USE_I2C3                  FALSE
 +#define STM32_I2C_I2C1_RX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 0)
 +#define STM32_I2C_I2C1_TX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 6)
 +#define STM32_I2C_I2C2_RX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 2)
 +#define STM32_I2C_I2C2_TX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 7)
 +#define STM32_I2C_I2C3_RX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 2)
 +#define STM32_I2C_I2C3_TX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 4)
 +#define STM32_I2C_I2C1_IRQ_PRIORITY         5
 +#define STM32_I2C_I2C2_IRQ_PRIORITY         5
 +#define STM32_I2C_I2C3_IRQ_PRIORITY         5
 +#define STM32_I2C_I2C1_DMA_PRIORITY         3
 +#define STM32_I2C_I2C2_DMA_PRIORITY         3
 +#define STM32_I2C_I2C3_DMA_PRIORITY         3
 +#define STM32_I2C_I2C1_DMA_ERROR_HOOK()     chSysHalt()
 +#define STM32_I2C_I2C2_DMA_ERROR_HOOK()     chSysHalt()
 +#define STM32_I2C_I2C3_DMA_ERROR_HOOK()     chSysHalt()
 +
 +/*
 + * ICU driver system settings.
 + */
 +#define STM32_ICU_USE_TIM1                  FALSE
 +#define STM32_ICU_USE_TIM2                  FALSE
 +#define STM32_ICU_USE_TIM3                  FALSE
 +#define STM32_ICU_USE_TIM4                  FALSE
 +#define STM32_ICU_USE_TIM5                  FALSE
 +#define STM32_ICU_USE_TIM8                  FALSE
 +#define STM32_ICU_USE_TIM9                  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
 +#define STM32_ICU_TIM8_IRQ_PRIORITY         7
 +#define STM32_ICU_TIM9_IRQ_PRIORITY         7
 +
 +/*
 + * MAC driver system settings.
 + */
 +#define STM32_MAC_TRANSMIT_BUFFERS          2
 +#define STM32_MAC_RECEIVE_BUFFERS           4
 +#define STM32_MAC_BUFFERS_SIZE              1522
 +#define STM32_MAC_PHY_TIMEOUT               100
 +#define STM32_MAC_ETH1_CHANGE_PHY_STATE     TRUE
 +#define STM32_MAC_ETH1_IRQ_PRIORITY         13
 +#define STM32_MAC_IP_CHECKSUM_OFFLOAD       0
 +
 +/*
 + * PWM driver system settings.
 + */
 +#define STM32_PWM_USE_ADVANCED              FALSE
 +#define STM32_PWM_USE_TIM1                  FALSE
 +#define STM32_PWM_USE_TIM2                  FALSE
 +#define STM32_PWM_USE_TIM3                  FALSE
 +#define STM32_PWM_USE_TIM4                  FALSE
 +#define STM32_PWM_USE_TIM5                  FALSE
 +#define STM32_PWM_USE_TIM8                  FALSE
 +#define STM32_PWM_USE_TIM9                  FALSE
 +#define STM32_PWM_TIM1_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM2_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM3_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM4_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM5_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM8_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM9_IRQ_PRIORITY         7
 +
 +/*
 + * SERIAL driver system settings.
 + */
 +#define STM32_SERIAL_USE_USART1             FALSE
 +#define STM32_SERIAL_USE_USART2             FALSE
 +#define STM32_SERIAL_USE_USART3             FALSE
 +#define STM32_SERIAL_USE_UART4              FALSE
 +#define STM32_SERIAL_USE_UART5              FALSE
 +#define STM32_SERIAL_USE_USART6             FALSE
 +#define STM32_SERIAL_USART1_PRIORITY        12
 +#define STM32_SERIAL_USART2_PRIORITY        12
 +#define STM32_SERIAL_USART3_PRIORITY        12
 +#define STM32_SERIAL_UART4_PRIORITY         12
 +#define STM32_SERIAL_UART5_PRIORITY         12
 +#define STM32_SERIAL_USART6_PRIORITY        12
 +
 +/*
 + * SPI driver system settings.
 + */
 +#define STM32_SPI_USE_SPI1                  FALSE
 +#define STM32_SPI_USE_SPI2                  FALSE
 +#define STM32_SPI_USE_SPI3                  FALSE
 +#define STM32_SPI_SPI1_RX_DMA_STREAM        STM32_DMA_STREAM_ID(2, 0)
 +#define STM32_SPI_SPI1_TX_DMA_STREAM        STM32_DMA_STREAM_ID(2, 3)
 +#define STM32_SPI_SPI2_RX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 3)
 +#define STM32_SPI_SPI2_TX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 4)
 +#define STM32_SPI_SPI3_RX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 0)
 +#define STM32_SPI_SPI3_TX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 7)
 +#define STM32_SPI_SPI1_DMA_PRIORITY         1
 +#define STM32_SPI_SPI2_DMA_PRIORITY         1
 +#define STM32_SPI_SPI3_DMA_PRIORITY         1
 +#define STM32_SPI_SPI1_IRQ_PRIORITY         10
 +#define STM32_SPI_SPI2_IRQ_PRIORITY         10
 +#define STM32_SPI_SPI3_IRQ_PRIORITY         10
 +#define STM32_SPI_DMA_ERROR_HOOK(spip)      chSysHalt()
 +
 +/*
 + * UART driver system settings.
 + */
 +#define STM32_UART_USE_USART1               FALSE
 +#define STM32_UART_USE_USART2               FALSE
 +#define STM32_UART_USE_USART3               FALSE
 +#define STM32_UART_USE_USART6               FALSE
 +#define STM32_UART_USART1_RX_DMA_STREAM     STM32_DMA_STREAM_ID(2, 5)
 +#define STM32_UART_USART1_TX_DMA_STREAM     STM32_DMA_STREAM_ID(2, 7)
 +#define STM32_UART_USART2_RX_DMA_STREAM     STM32_DMA_STREAM_ID(1, 5)
 +#define STM32_UART_USART2_TX_DMA_STREAM     STM32_DMA_STREAM_ID(1, 6)
 +#define STM32_UART_USART3_RX_DMA_STREAM     STM32_DMA_STREAM_ID(1, 1)
 +#define STM32_UART_USART3_TX_DMA_STREAM     STM32_DMA_STREAM_ID(1, 3)
 +#define STM32_UART_USART6_RX_DMA_STREAM     STM32_DMA_STREAM_ID(2, 2)
 +#define STM32_UART_USART6_TX_DMA_STREAM     STM32_DMA_STREAM_ID(2, 7)
 +#define STM32_UART_USART1_IRQ_PRIORITY      12
 +#define STM32_UART_USART2_IRQ_PRIORITY      12
 +#define STM32_UART_USART3_IRQ_PRIORITY      12
 +#define STM32_UART_USART6_IRQ_PRIORITY      12
 +#define STM32_UART_USART1_DMA_PRIORITY      0
 +#define STM32_UART_USART2_DMA_PRIORITY      0
 +#define STM32_UART_USART3_DMA_PRIORITY      0
 +#define STM32_UART_USART6_DMA_PRIORITY      0
 +#define STM32_UART_DMA_ERROR_HOOK(uartp)    chSysHalt()
 +
 +/*
 + * USB driver system settings.
 + */
 +#define STM32_USB_USE_OTG1                  FALSE
 +#define STM32_USB_USE_OTG2                  FALSE
 +#define STM32_USB_OTG1_IRQ_PRIORITY         14
 +#define STM32_USB_OTG2_IRQ_PRIORITY         14
 +#define STM32_USB_OTG1_RX_FIFO_SIZE         512
 +#define STM32_USB_OTG2_RX_FIFO_SIZE         1024
 +#define STM32_USB_OTG_THREAD_PRIO           LOWPRIO
 +#define STM32_USB_OTG_THREAD_STACK_SIZE     128
 +#define STM32_USB_OTGFIFO_FILL_BASEPRI      0
 diff --git a/testhal/STM32F4xx/GPT/readme.txt b/testhal/STM32F4xx/GPT/readme.txt new file mode 100644 index 000000000..1508a8233 --- /dev/null +++ b/testhal/STM32F4xx/GPT/readme.txt @@ -0,0 +1,30 @@ +*****************************************************************************
 +** ChibiOS/RT HAL - GPT driver demo for STM32F4xx.                         **
 +*****************************************************************************
 +
 +** TARGET **
 +
 +The demo runs on an STMicroelectronics STM32F4-Discovery board.
 +
 +** The Demo **
 +
 +The application demonstrates the use of the STM32F4xx GPT driver.
 +
 +** Board Setup **
 +
 +None required.
 +
 +** Build Procedure **
 +
 +The demo has been tested using the free Codesourcery GCC-based toolchain
 +and YAGARTO.
 +Just modify the TRGT line in the makefile in order to use different GCC ports.
 +
 +** Notes **
 +
 +Some files used by the demo are not part of ChibiOS/RT but are copyright of
 +ST Microelectronics and are licensed under a different license.
 +Also note that not all the files present in the ST library are distributed
 +with ChibiOS/RT, you can find the whole library on the ST web site:
 +
 +                             http://www.st.com
 diff --git a/testhal/STM32F4xx/I2C/.cproject b/testhal/STM32F4xx/I2C/.cproject new file mode 100644 index 000000000..5effe9a53 --- /dev/null +++ b/testhal/STM32F4xx/I2C/.cproject @@ -0,0 +1,51 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?>
 +<?fileVersion 4.0.0?>
 +
 +<cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
 +	<storageModule moduleId="org.eclipse.cdt.core.settings">
 +		<cconfiguration id="0.1409855743">
 +			<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="0.1409855743" moduleId="org.eclipse.cdt.core.settings" name="Default">
 +				<externalSettings/>
 +				<extensions>
 +					<extension id="org.eclipse.cdt.core.VCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 +					<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 +					<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
 +					<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 +					<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 +					<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 +				</extensions>
 +			</storageModule>
 +			<storageModule moduleId="cdtBuildSystem" version="4.0.0">
 +				<configuration artifactName="${ProjName}" buildProperties="" description="" id="0.1409855743" name="Default" parent="org.eclipse.cdt.build.core.prefbase.cfg">
 +					<folderInfo id="0.1409855743." name="/" resourcePath="">
 +						<toolChain id="org.eclipse.cdt.build.core.prefbase.toolchain.716842810" name="No ToolChain" resourceTypeBasedDiscovery="false" superClass="org.eclipse.cdt.build.core.prefbase.toolchain">
 +							<targetPlatform id="org.eclipse.cdt.build.core.prefbase.toolchain.716842810.56395106" name=""/>
 +							<builder id="org.eclipse.cdt.build.core.settings.default.builder.1110804780" keepEnvironmentInBuildfile="false" managedBuildOn="false" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="org.eclipse.cdt.build.core.settings.default.builder"/>
 +							<tool id="org.eclipse.cdt.build.core.settings.holder.libs.1274446924" name="holder for library settings" superClass="org.eclipse.cdt.build.core.settings.holder.libs"/>
 +							<tool id="org.eclipse.cdt.build.core.settings.holder.1969541236" name="Assembly" superClass="org.eclipse.cdt.build.core.settings.holder">
 +								<inputType id="org.eclipse.cdt.build.core.settings.holder.inType.519472696" languageId="org.eclipse.cdt.core.assembly" languageName="Assembly" sourceContentType="org.eclipse.cdt.core.asmSource" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
 +							</tool>
 +							<tool id="org.eclipse.cdt.build.core.settings.holder.293050667" name="GNU C++" superClass="org.eclipse.cdt.build.core.settings.holder">
 +								<inputType id="org.eclipse.cdt.build.core.settings.holder.inType.1428705419" languageId="org.eclipse.cdt.core.g++" languageName="GNU C++" sourceContentType="org.eclipse.cdt.core.cxxSource,org.eclipse.cdt.core.cxxHeader" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
 +							</tool>
 +							<tool id="org.eclipse.cdt.build.core.settings.holder.1183987745" name="GNU C" superClass="org.eclipse.cdt.build.core.settings.holder">
 +								<inputType id="org.eclipse.cdt.build.core.settings.holder.inType.406659526" languageId="org.eclipse.cdt.core.gcc" languageName="GNU C" sourceContentType="org.eclipse.cdt.core.cSource,org.eclipse.cdt.core.cHeader" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
 +							</tool>
 +						</toolChain>
 +					</folderInfo>
 +				</configuration>
 +			</storageModule>
 +			<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
 +		</cconfiguration>
 +	</storageModule>
 +	<storageModule moduleId="cdtBuildSystem" version="4.0.0">
 +		<project id="STM32F4xx-I2C.null.1012994794" name="STM32F4xx-I2C"/>
 +	</storageModule>
 +	<storageModule moduleId="scannerConfiguration">
 +		<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
 +		<scannerConfigBuildInfo instanceId="0.1409855743">
 +			<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile"/>
 +		</scannerConfigBuildInfo>
 +	</storageModule>
 +	<storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
 +</cproject>
 diff --git a/testhal/STM32F4xx/I2C/.project b/testhal/STM32F4xx/I2C/.project new file mode 100644 index 000000000..c506abb10 --- /dev/null +++ b/testhal/STM32F4xx/I2C/.project @@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="UTF-8"?>
 +<projectDescription>
 +	<name>STM32F4xx-I2C</name>
 +	<comment></comment>
 +	<projects>
 +	</projects>
 +	<buildSpec>
 +		<buildCommand>
 +			<name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
 +			<triggers>clean,full,incremental,</triggers>
 +			<arguments>
 +			</arguments>
 +		</buildCommand>
 +		<buildCommand>
 +			<name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
 +			<triggers>full,incremental,</triggers>
 +			<arguments>
 +			</arguments>
 +		</buildCommand>
 +	</buildSpec>
 +	<natures>
 +		<nature>org.eclipse.cdt.core.cnature</nature>
 +		<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
 +		<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
 +	</natures>
 +	<linkedResources>
 +		<link>
 +			<name>board</name>
 +			<type>2</type>
 +			<locationURI>CHIBIOS/boards/NONSTANDARD_STM32F4_BARTHESS1</locationURI>
 +		</link>
 +		<link>
 +			<name>os</name>
 +			<type>2</type>
 +			<locationURI>CHIBIOS/os</locationURI>
 +		</link>
 +	</linkedResources>
 +</projectDescription>
 diff --git a/testhal/STM32F4xx/I2C/Makefile b/testhal/STM32F4xx/I2C/Makefile new file mode 100644 index 000000000..d52f5d4e8 --- /dev/null +++ b/testhal/STM32F4xx/I2C/Makefile @@ -0,0 +1,222 @@ +##############################################################################
 +# Build global options
 +# NOTE: Can be overridden externally.
 +#
 +
 +# Compiler options here.
 +ifeq ($(USE_OPT),)
 +  USE_OPT = -O2 -ggdb -fomit-frame-pointer -falign-functions=16
 +endif
 +
 +# C specific options here (added to USE_OPT).
 +ifeq ($(USE_COPT),)
 +  USE_COPT = 
 +endif
 +
 +# C++ specific options here (added to USE_OPT).
 +ifeq ($(USE_CPPOPT),)
 +  USE_CPPOPT = -fno-rtti
 +endif
 +
 +# Enable this if you want the linker to remove unused code and data
 +ifeq ($(USE_LINK_GC),)
 +  USE_LINK_GC = yes
 +endif
 +
 +# If enabled, this option allows to compile the application in THUMB mode.
 +ifeq ($(USE_THUMB),)
 +  USE_THUMB = yes
 +endif
 +
 +# Enable this if you want to see the full log while compiling.
 +ifeq ($(USE_VERBOSE_COMPILE),)
 +  USE_VERBOSE_COMPILE = no
 +endif
 +
 +#
 +# Build global options
 +##############################################################################
 +
 +##############################################################################
 +# Architecture or project specific options
 +#
 +
 +# Enables the use of FPU on Cortex-M4.
 +# Enable this if you really want to use the STM FWLib.
 +ifeq ($(USE_FPU),)
 +  USE_FPU = no
 +endif
 +
 +# Enable this if you really want to use the STM FWLib.
 +ifeq ($(USE_FWLIB),)
 +  USE_FWLIB = no
 +endif
 +
 +#
 +# Architecture or project specific options
 +##############################################################################
 +
 +##############################################################################
 +# Project, sources and paths
 +#
 +
 +# Define project name here
 +PROJECT = ch
 +
 +# Imported source files and paths
 +CHIBIOS = ../../..
 +include $(CHIBIOS)/boards/NONSTANDARD_STM32F4_BARTHESS1/board.mk
 +include $(CHIBIOS)/os/hal/platforms/STM32F4xx/platform.mk
 +include $(CHIBIOS)/os/hal/hal.mk
 +include $(CHIBIOS)/os/ports/GCC/ARMCMx/STM32F4xx/port.mk
 +include $(CHIBIOS)/os/kernel/kernel.mk
 +include $(CHIBIOS)/test/test.mk
 +
 +# Define linker script file here
 +LDSCRIPT= $(PORTLD)/STM32F407xG.ld
 +#LDSCRIPT= $(PORTLD)/STM32F407xG_CCM.ld
 +
 +# C sources that can be compiled in ARM or THUMB mode depending on the global
 +# setting.
 +CSRC = $(PORTSRC) \
 +       $(KERNSRC) \
 +       $(TESTSRC) \
 +       $(HALSRC) \
 +       $(PLATFORMSRC) \
 +       $(BOARDSRC) \
 +       $(CHIBIOS)/os/various/chprintf.c \
 +       main.c
 +
 +# C++ sources that can be compiled in ARM or THUMB mode depending on the global
 +# setting.
 +CPPSRC =
 +
 +# C sources to be compiled in ARM mode regardless of the global setting.
 +# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler
 +#       option that results in lower performance and larger code size.
 +ACSRC =
 +
 +# C++ sources to be compiled in ARM mode regardless of the global setting.
 +# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler
 +#       option that results in lower performance and larger code size.
 +ACPPSRC =
 +
 +# C sources to be compiled in THUMB mode regardless of the global setting.
 +# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler
 +#       option that results in lower performance and larger code size.
 +TCSRC =
 +
 +# C sources to be compiled in THUMB mode regardless of the global setting.
 +# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler
 +#       option that results in lower performance and larger code size.
 +TCPPSRC =
 +
 +# List ASM source files here
 +ASMSRC = $(PORTASM)
 +
 +INCDIR = $(PORTINC) $(KERNINC) $(TESTINC) \
 +         $(HALINC) $(PLATFORMINC) $(BOARDINC) \
 +         $(CHIBIOS)/os/various
 +
 +#
 +# Project, sources and paths
 +##############################################################################
 +
 +##############################################################################
 +# Compiler settings
 +#
 +
 +MCU  = cortex-m4
 +
 +#TRGT = arm-elf-
 +TRGT = arm-none-eabi-
 +CC   = $(TRGT)gcc
 +CPPC = $(TRGT)g++
 +# Enable loading with g++ only if you need C++ runtime support.
 +# NOTE: You can use C++ even without C++ support if you are careful. C++
 +#       runtime support makes code size explode.
 +LD   = $(TRGT)gcc
 +#LD   = $(TRGT)g++
 +CP   = $(TRGT)objcopy
 +AS   = $(TRGT)gcc -x assembler-with-cpp
 +OD   = $(TRGT)objdump
 +HEX  = $(CP) -O ihex
 +BIN  = $(CP) -O binary
 +
 +# ARM-specific options here
 +AOPT =
 +
 +# THUMB-specific options here
 +TOPT = -mthumb -DTHUMB
 +
 +# Define C warning options here
 +CWARN = -Wall -Wextra -Wstrict-prototypes
 +
 +# Define C++ warning options here
 +CPPWARN = -Wall -Wextra
 +
 +#
 +# Compiler settings
 +##############################################################################
 +
 +##############################################################################
 +# Start of default section
 +#
 +
 +# List all default C defines here, like -D_DEBUG=1
 +DDEFS =
 +
 +# List all default ASM defines here, like -D_DEBUG=1
 +DADEFS =
 +
 +# List all default directories to look for include files here
 +DINCDIR =
 +
 +# List the default directory to look for the libraries here
 +DLIBDIR =
 +
 +# List all default libraries here
 +DLIBS =
 +
 +#
 +# End of default section
 +##############################################################################
 +
 +##############################################################################
 +# Start of user section
 +#
 +
 +# List all user C define here, like -D_DEBUG=1
 +UDEFS =
 +
 +# Define ASM defines here
 +UADEFS =
 +
 +# List all user directories here
 +UINCDIR =
 +
 +# List the user directory to look for the libraries here
 +ULIBDIR =
 +
 +# List all user libraries here
 +ULIBS =
 +
 +#
 +# End of user defines
 +##############################################################################
 +
 +ifeq ($(USE_FPU),yes)
 +  USE_OPT += -mfloat-abi=softfp -mfpu=fpv4-sp-d16 -fsingle-precision-constant
 +  DDEFS += -DCORTEX_USE_FPU=TRUE
 +else
 +  DDEFS += -DCORTEX_USE_FPU=FALSE
 +endif
 +
 +ifeq ($(USE_FWLIB),yes)
 +  include $(CHIBIOS)/ext/stm32lib/stm32lib.mk
 +  CSRC += $(STM32SRC)
 +  INCDIR += $(STM32INC)
 +  USE_OPT += -DUSE_STDPERIPH_DRIVER
 +endif
 +
 +include $(CHIBIOS)/os/ports/GCC/ARMCMx/rules.mk
 diff --git a/testhal/STM32F4xx/I2C/chconf.h b/testhal/STM32F4xx/I2C/chconf.h new file mode 100644 index 000000000..9357b698c --- /dev/null +++ b/testhal/STM32F4xx/I2C/chconf.h @@ -0,0 +1,508 @@ +/*
 +    ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio
 +
 +    Licensed under the Apache License, Version 2.0 (the "License");
 +    you may not use this file except in compliance with the License.
 +    You may obtain a copy of the License at
 +
 +        http://www.apache.org/licenses/LICENSE-2.0
 +
 +    Unless required by applicable law or agreed to in writing, software
 +    distributed under the License is distributed on an "AS IS" BASIS,
 +    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 +    See the License for the specific language governing permissions and
 +    limitations under the License.
 +*/
 +
 +/**
 + * @file    templates/chconf.h
 + * @brief   Configuration file template.
 + * @details A copy of this file must be placed in each project directory, it
 + *          contains the application specific kernel settings.
 + *
 + * @addtogroup config
 + * @details Kernel related settings and hooks.
 + * @{
 + */
 +
 +#ifndef _CHCONF_H_
 +#define _CHCONF_H_
 +
 +//#define CORTEX_VTOR_INIT       0x000E0000
 +#define CORTEX_VTOR_INIT  0x00000000
 +
 +/*===========================================================================*/
 +/* Kernel parameters.                                                        */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   System tick frequency.
 + * @details Frequency of the system timer that drives the system ticks. This
 + *          setting also defines the system tick time unit.
 + */
 +#if !defined(CH_FREQUENCY) || defined(__DOXYGEN__)
 +#define CH_FREQUENCY                    1000
 +#endif
 +
 +/**
 + * @brief   Round robin interval.
 + * @details This constant is the number of system ticks allowed for the
 + *          threads before preemption occurs. Setting this value to zero
 + *          disables the preemption for threads with equal priority and the
 + *          round robin becomes cooperative. Note that higher priority
 + *          threads can still preempt, the kernel is always preemptive.
 + *
 + * @note    Disabling the round robin preemption makes the kernel more compact
 + *          and generally faster.
 + */
 +#if !defined(CH_TIME_QUANTUM) || defined(__DOXYGEN__)
 +#define CH_TIME_QUANTUM                 0//20
 +#endif
 +
 +/**
 + * @brief   Managed RAM size.
 + * @details Size of the RAM area to be managed by the OS. If set to zero
 + *          then the whole available RAM is used. The core memory is made
 + *          available to the heap allocator and/or can be used directly through
 + *          the simplified core memory allocator.
 + *
 + * @note    In order to let the OS manage the whole RAM the linker script must
 + *          provide the @p __heap_base__ and @p __heap_end__ symbols.
 + * @note    Requires @p CH_USE_MEMCORE.
 + */
 +#if !defined(CH_MEMCORE_SIZE) || defined(__DOXYGEN__)
 +#define CH_MEMCORE_SIZE                 0
 +#endif
 +
 +/**
 + * @brief   Idle thread automatic spawn suppression.
 + * @details When this option is activated the function @p chSysInit()
 + *          does not spawn the idle thread automatically. The application has
 + *          then the responsibility to do one of the following:
 + *          - Spawn a custom idle thread at priority @p IDLEPRIO.
 + *          - Change the main() thread priority to @p IDLEPRIO then enter
 + *            an endless loop. In this scenario the @p main() thread acts as
 + *            the idle thread.
 + *          .
 + * @note    Unless an idle thread is spawned the @p main() thread must not
 + *          enter a sleep state.
 + */
 +#if !defined(CH_NO_IDLE_THREAD) || defined(__DOXYGEN__)
 +#define CH_NO_IDLE_THREAD               FALSE
 +#endif
 +
 +/*===========================================================================*/
 +/* Performance options.                                                      */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   OS optimization.
 + * @details If enabled then time efficient rather than space efficient code
 + *          is used when two possible implementations exist.
 + *
 + * @note    This is not related to the compiler optimization options.
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_OPTIMIZE_SPEED) || defined(__DOXYGEN__)
 +#define CH_OPTIMIZE_SPEED               FALSE
 +#endif
 +
 +/*===========================================================================*/
 +/* Subsystem options.                                                        */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Threads registry APIs.
 + * @details If enabled then the registry APIs are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_REGISTRY) || defined(__DOXYGEN__)
 +#define CH_USE_REGISTRY                 TRUE
 +#endif
 +
 +/**
 + * @brief   Threads synchronization APIs.
 + * @details If enabled then the @p chThdWait() function is included in
 + *          the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_WAITEXIT) || defined(__DOXYGEN__)
 +#define CH_USE_WAITEXIT                 TRUE
 +#endif
 +
 +/**
 + * @brief   Semaphores APIs.
 + * @details If enabled then the Semaphores APIs are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_SEMAPHORES) || defined(__DOXYGEN__)
 +#define CH_USE_SEMAPHORES               TRUE
 +#endif
 +
 +/**
 + * @brief   Semaphores queuing mode.
 + * @details If enabled then the threads are enqueued on semaphores by
 + *          priority rather than in FIFO order.
 + *
 + * @note    The default is @p FALSE. Enable this if you have special requirements.
 + * @note    Requires @p CH_USE_SEMAPHORES.
 + */
 +#if !defined(CH_USE_SEMAPHORES_PRIORITY) || defined(__DOXYGEN__)
 +#define CH_USE_SEMAPHORES_PRIORITY      FALSE
 +#endif
 +
 +/**
 + * @brief   Atomic semaphore API.
 + * @details If enabled then the semaphores the @p chSemSignalWait() API
 + *          is included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_SEMAPHORES.
 + */
 +#if !defined(CH_USE_SEMSW) || defined(__DOXYGEN__)
 +#define CH_USE_SEMSW                    TRUE
 +#endif
 +
 +/**
 + * @brief   Mutexes APIs.
 + * @details If enabled then the mutexes APIs are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_MUTEXES) || defined(__DOXYGEN__)
 +#define CH_USE_MUTEXES                  TRUE
 +#endif
 +
 +/**
 + * @brief   Conditional Variables APIs.
 + * @details If enabled then the conditional variables APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_MUTEXES.
 + */
 +#if !defined(CH_USE_CONDVARS) || defined(__DOXYGEN__)
 +#define CH_USE_CONDVARS                 FALSE
 +#endif
 +
 +/**
 + * @brief   Conditional Variables APIs with timeout.
 + * @details If enabled then the conditional variables APIs with timeout
 + *          specification are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_CONDVARS.
 + */
 +#if !defined(CH_USE_CONDVARS_TIMEOUT) || defined(__DOXYGEN__)
 +#define CH_USE_CONDVARS_TIMEOUT         TRUE
 +#endif
 +
 +/**
 + * @brief   Events Flags APIs.
 + * @details If enabled then the event flags APIs are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_EVENTS) || defined(__DOXYGEN__)
 +#define CH_USE_EVENTS                   TRUE
 +#endif
 +
 +/**
 + * @brief   Events Flags APIs with timeout.
 + * @details If enabled then the events APIs with timeout specification
 + *          are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_EVENTS.
 + */
 +#if !defined(CH_USE_EVENTS_TIMEOUT) || defined(__DOXYGEN__)
 +#define CH_USE_EVENTS_TIMEOUT           FALSE
 +#endif
 +
 +/**
 + * @brief   Synchronous Messages APIs.
 + * @details If enabled then the synchronous messages APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_MESSAGES) || defined(__DOXYGEN__)
 +#define CH_USE_MESSAGES                 TRUE
 +#endif
 +
 +/**
 + * @brief   Synchronous Messages queuing mode.
 + * @details If enabled then messages are served by priority rather than in
 + *          FIFO order.
 + *
 + * @note    The default is @p FALSE. Enable this if you have special requirements.
 + * @note    Requires @p CH_USE_MESSAGES.
 + */
 +#if !defined(CH_USE_MESSAGES_PRIORITY) || defined(__DOXYGEN__)
 +#define CH_USE_MESSAGES_PRIORITY        FALSE
 +#endif
 +
 +/**
 + * @brief   Mailboxes APIs.
 + * @details If enabled then the asynchronous messages (mailboxes) APIs are
 + *          included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_SEMAPHORES.
 + */
 +#if !defined(CH_USE_MAILBOXES) || defined(__DOXYGEN__)
 +#define CH_USE_MAILBOXES                TRUE
 +#endif
 +
 +/**
 + * @brief   I/O Queues APIs.
 + * @details If enabled then the I/O queues APIs are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_QUEUES) || defined(__DOXYGEN__)
 +#define CH_USE_QUEUES                   TRUE
 +#endif
 +
 +/**
 + * @brief   Core Memory Manager APIs.
 + * @details If enabled then the core memory manager APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_MEMCORE) || defined(__DOXYGEN__)
 +#define CH_USE_MEMCORE                  TRUE
 +#endif
 +
 +/**
 + * @brief   Heap Allocator APIs.
 + * @details If enabled then the memory heap allocator APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_MEMCORE and either @p CH_USE_MUTEXES or
 + *          @p CH_USE_SEMAPHORES.
 + * @note    Mutexes are recommended.
 + */
 +#if !defined(CH_USE_HEAP) || defined(__DOXYGEN__)
 +#define CH_USE_HEAP                     FALSE
 +#endif
 +
 +/**
 + * @brief   C-runtime allocator.
 + * @details If enabled the the heap allocator APIs just wrap the C-runtime
 + *          @p malloc() and @p free() functions.
 + *
 + * @note    The default is @p FALSE.
 + * @note    Requires @p CH_USE_HEAP.
 + * @note    The C-runtime may or may not require @p CH_USE_MEMCORE, see the
 + *          appropriate documentation.
 + */
 +#if !defined(CH_USE_MALLOC_HEAP) || defined(__DOXYGEN__)
 +#define CH_USE_MALLOC_HEAP              FALSE
 +#endif
 +
 +/**
 + * @brief   Memory Pools Allocator APIs.
 + * @details If enabled then the memory pools allocator APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_MEMPOOLS) || defined(__DOXYGEN__)
 +#define CH_USE_MEMPOOLS                 TRUE
 +#endif
 +
 +/**
 + * @brief   Dynamic Threads APIs.
 + * @details If enabled then the dynamic threads creation APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_WAITEXIT.
 + * @note    Requires @p CH_USE_HEAP and/or @p CH_USE_MEMPOOLS.
 + */
 +#if !defined(CH_USE_DYNAMIC) || defined(__DOXYGEN__)
 +#define CH_USE_DYNAMIC                  FALSE
 +#endif
 +
 +/*===========================================================================*/
 +/* Debug options.                                                            */
 +/*===========================================================================*/
 +/**
 + * @brief   Debug option, system state check.
 + * @details If enabled the correct call protocol for system APIs is checked
 + *          at runtime.
 + *
 + * @note    The default is @p FALSE.
 + */
 +#if !defined(CH_DBG_SYSTEM_STATE_CHECK) || defined(__DOXYGEN__)
 +#define CH_DBG_SYSTEM_STATE_CHECK       TRUE
 +#endif
 +
 +/**
 + * @brief   Debug option, parameters checks.
 + * @details If enabled then the checks on the API functions input
 + *          parameters are activated.
 + *
 + * @note    The default is @p FALSE.
 + */
 +#if !defined(CH_DBG_ENABLE_CHECKS) || defined(__DOXYGEN__)
 +#define CH_DBG_ENABLE_CHECKS            TRUE
 +#endif
 +
 +/**
 + * @brief   Debug option, consistency checks.
 + * @details If enabled then all the assertions in the kernel code are
 + *          activated. This includes consistency checks inside the kernel,
 + *          runtime anomalies and port-defined checks.
 + *
 + * @note    The default is @p FALSE.
 + */
 +#if !defined(CH_DBG_ENABLE_ASSERTS) || defined(__DOXYGEN__)
 +#define CH_DBG_ENABLE_ASSERTS           TRUE
 +#endif
 +
 +/**
 + * @brief   Debug option, trace buffer.
 + * @details If enabled then the context switch circular trace buffer is
 + *          activated.
 + *
 + * @note    The default is @p FALSE.
 + */
 +#if !defined(CH_DBG_ENABLE_TRACE) || defined(__DOXYGEN__)
 +#define CH_DBG_ENABLE_TRACE             TRUE
 +#endif
 +
 +/**
 + * @brief   Debug option, stack checks.
 + * @details If enabled then a runtime stack check is performed.
 + *
 + * @note    The default is @p FALSE.
 + * @note    The stack check is performed in a architecture/port dependent way.
 + *          It may not be implemented or some ports.
 + * @note    The default failure mode is to halt the system with the global
 + *          @p panic_msg variable set to @p NULL.
 + */
 +#if !defined(CH_DBG_ENABLE_STACK_CHECK) || defined(__DOXYGEN__)
 +#define CH_DBG_ENABLE_STACK_CHECK       TRUE
 +#endif
 +
 +/**
 + * @brief   Debug option, stacks initialization.
 + * @details If enabled then the threads working area is filled with a byte
 + *          value when a thread is created. This can be useful for the
 + *          runtime measurement of the used stack.
 + *
 + * @note    The default is @p FALSE.
 + */
 +#if !defined(CH_DBG_FILL_THREADS) || defined(__DOXYGEN__)
 +#define CH_DBG_FILL_THREADS             TRUE
 +#endif
 +
 +/**
 + * @brief   Debug option, threads profiling.
 + * @details If enabled then a field is added to the @p Thread structure that
 + *          counts the system ticks occurred while executing the thread.
 + *
 + * @note    The default is @p TRUE.
 + * @note    This debug option is defaulted to TRUE because it is required by
 + *          some test cases into the test suite.
 + */
 +#if !defined(CH_DBG_THREADS_PROFILING) || defined(__DOXYGEN__)
 +#define CH_DBG_THREADS_PROFILING        TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* Kernel hooks.                                                             */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Threads descriptor structure extension.
 + * @details User fields added to the end of the @p Thread structure.
 + */
 +#if !defined(THREAD_EXT_FIELDS) || defined(__DOXYGEN__)
 +#define THREAD_EXT_FIELDS                                                   \
 +  /* Add threads custom fields here.*/
 +#endif
 +
 +/**
 + * @brief   Threads initialization hook.
 + * @details User initialization code added to the @p chThdInit() API.
 + *
 + * @note    It is invoked from within @p chThdInit() and implicitly from all
 + *          the threads creation APIs.
 + */
 +#if !defined(THREAD_EXT_INIT_HOOK) || defined(__DOXYGEN__)
 +#define THREAD_EXT_INIT_HOOK(tp) {                                          \
 +  /* Add threads initialization code here.*/                                \
 +}
 +#endif
 +
 +/**
 + * @brief   Threads finalization hook.
 + * @details User finalization code added to the @p chThdExit() API.
 + *
 + * @note    It is inserted into lock zone.
 + * @note    It is also invoked when the threads simply return in order to
 + *          terminate.
 + */
 +#if !defined(THREAD_EXT_EXIT_HOOK) || defined(__DOXYGEN__)
 +#define THREAD_EXT_EXIT_HOOK(tp) {                                          \
 +  /* Add threads finalization code here.*/                                  \
 +}
 +#endif
 +
 +/**
 + * @brief   Context switch hook.
 + * @details This hook is invoked just before switching between threads.
 + */
 +#if !defined(THREAD_CONTEXT_SWITCH_HOOK) || defined(__DOXYGEN__)
 +#define THREAD_CONTEXT_SWITCH_HOOK(ntp, otp) {                              \
 +  /* System halt code here.*/                                               \
 +}
 +#endif
 +
 +/**
 + * @brief   Idle Loop hook.
 + * @details This hook is continuously invoked by the idle thread loop.
 + */
 +#if !defined(IDLE_LOOP_HOOK) || defined(__DOXYGEN__)
 +#define IDLE_LOOP_HOOK() {                                                  \
 +  /* Idle loop code here.*/                                                 \
 +}
 +#endif
 +
 +/**
 + * @brief   System tick event hook.
 + * @details This hook is invoked in the system tick handler immediately
 + *          after processing the virtual timers queue.
 + */
 +#if !defined(SYSTEM_TICK_EVENT_HOOK) || defined(__DOXYGEN__)
 +#define SYSTEM_TICK_EVENT_HOOK() {                                          \
 +  /* System tick event code here.*/                                         \
 +}
 +#endif
 +
 +/**
 + * @brief   System halt hook.
 + * @details This hook is invoked in case to a system halting error before
 + *          the system is halted.
 + */
 +#if !defined(SYSTEM_HALT_HOOK) || defined(__DOXYGEN__)
 +#define SYSTEM_HALT_HOOK() {                                                \
 +  /* System halt code here.*/                                               \
 +}
 +#endif
 +
 +/*===========================================================================*/
 +/* Port-specific settings (override port settings defaulted in chcore.h).    */
 +/*===========================================================================*/
 +
 +#endif  /* _CHCONF_H_ */
 +
 +/** @} */
 diff --git a/testhal/STM32F4xx/I2C/halconf.h b/testhal/STM32F4xx/I2C/halconf.h new file mode 100644 index 000000000..8f77e1d4a --- /dev/null +++ b/testhal/STM32F4xx/I2C/halconf.h @@ -0,0 +1,312 @@ +/*
 +    ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio
 +
 +    Licensed under the Apache License, Version 2.0 (the "License");
 +    you may not use this file except in compliance with the License.
 +    You may obtain a copy of the License at
 +
 +        http://www.apache.org/licenses/LICENSE-2.0
 +
 +    Unless required by applicable law or agreed to in writing, software
 +    distributed under the License is distributed on an "AS IS" BASIS,
 +    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 +    See the License for the specific language governing permissions and
 +    limitations under the License.
 +*/
 +
 +/**
 + * @file    templates/halconf.h
 + * @brief   HAL configuration header.
 + * @details HAL configuration file, this file allows to enable or disable the
 + *          various device drivers from your application. You may also use
 + *          this file in order to override the device drivers default settings.
 + *
 + * @addtogroup HAL_CONF
 + * @{
 + */
 +
 +#ifndef _HALCONF_H_
 +#define _HALCONF_H_
 +
 +#include "mcuconf.h"
 +
 +/**
 + * @brief   Enables the TM subsystem.
 + */
 +#if !defined(HAL_USE_TM) || defined(__DOXYGEN__)
 +#define HAL_USE_TM                  TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the PAL subsystem.
 + */
 +#if !defined(HAL_USE_PAL) || defined(__DOXYGEN__)
 +#define HAL_USE_PAL                 TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the ADC subsystem.
 + */
 +#if !defined(HAL_USE_ADC) || defined(__DOXYGEN__)
 +#define HAL_USE_ADC                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the CAN subsystem.
 + */
 +#if !defined(HAL_USE_CAN) || defined(__DOXYGEN__)
 +#define HAL_USE_CAN                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the EXT subsystem.
 + */
 +#if !defined(HAL_USE_EXT) || defined(__DOXYGEN__)
 +#define HAL_USE_EXT                 TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the GPT subsystem.
 + */
 +#if !defined(HAL_USE_GPT) || defined(__DOXYGEN__)
 +#define HAL_USE_GPT                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the I2C subsystem.
 + */
 +#if !defined(HAL_USE_I2C) || defined(__DOXYGEN__)
 +#define HAL_USE_I2C                 TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the ICU subsystem.
 + */
 +#if !defined(HAL_USE_ICU) || defined(__DOXYGEN__)
 +#define HAL_USE_ICU                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the MAC subsystem.
 + */
 +#if !defined(HAL_USE_MAC) || defined(__DOXYGEN__)
 +#define HAL_USE_MAC                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the MMC_SPI subsystem.
 + */
 +#if !defined(HAL_USE_MMC_SPI) || defined(__DOXYGEN__)
 +#define HAL_USE_MMC_SPI             FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the PWM subsystem.
 + */
 +#if !defined(HAL_USE_PWM) || defined(__DOXYGEN__)
 +#define HAL_USE_PWM                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the RTC subsystem.
 + */
 +#if !defined(HAL_USE_RTC) || defined(__DOXYGEN__)
 +#define HAL_USE_RTC                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the SDC subsystem.
 + */
 +#if !defined(HAL_USE_SDC) || defined(__DOXYGEN__)
 +#define HAL_USE_SDC                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the SERIAL subsystem.
 + */
 +#if !defined(HAL_USE_SERIAL) || defined(__DOXYGEN__)
 +#define HAL_USE_SERIAL              TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the SERIAL over USB subsystem.
 + */
 +#if !defined(HAL_USE_SERIAL_USB) || defined(__DOXYGEN__)
 +#define HAL_USE_SERIAL_USB          FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the SPI subsystem.
 + */
 +#if !defined(HAL_USE_SPI) || defined(__DOXYGEN__)
 +#define HAL_USE_SPI                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the UART subsystem.
 + */
 +#if !defined(HAL_USE_UART) || defined(__DOXYGEN__)
 +#define HAL_USE_UART                FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the USB subsystem.
 + */
 +#if !defined(HAL_USE_USB) || defined(__DOXYGEN__)
 +#define HAL_USE_USB                 FALSE
 +#endif
 +
 +/*===========================================================================*/
 +/* ADC driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Enables synchronous APIs.
 + * @note    Disabling this option saves both code and data space.
 + */
 +#if !defined(ADC_USE_WAIT) || defined(__DOXYGEN__)
 +#define ADC_USE_WAIT                TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the @p adcAcquireBus() and @p adcReleaseBus() APIs.
 + * @note    Disabling this option saves both code and data space.
 + */
 +#if !defined(ADC_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
 +#define ADC_USE_MUTUAL_EXCLUSION    TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* CAN driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Sleep mode related APIs inclusion switch.
 + */
 +#if !defined(CAN_USE_SLEEP_MODE) || defined(__DOXYGEN__)
 +#define CAN_USE_SLEEP_MODE          TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* I2C driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Enables the mutual exclusion APIs on the I2C bus.
 + */
 +#if !defined(I2C_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
 +#define I2C_USE_MUTUAL_EXCLUSION    TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* MAC driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Enables an event sources for incoming packets.
 + */
 +#if !defined(MAC_USE_ZERO_COPY) || defined(__DOXYGEN__)
 +#define MAC_USE_ZERO_COPY           FALSE
 +#endif
 +
 +/**
 + * @brief   Enables an event sources for incoming packets.
 + */
 +#if !defined(MAC_USE_EVENTS) || defined(__DOXYGEN__)
 +#define MAC_USE_EVENTS              TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* MMC_SPI driver related settings.                                          */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Delays insertions.
 + * @details If enabled this options inserts delays into the MMC waiting
 + *          routines releasing some extra CPU time for the threads with
 + *          lower priority, this may slow down the driver a bit however.
 + *          This option is recommended also if the SPI driver does not
 + *          use a DMA channel and heavily loads the CPU.
 + */
 +#if !defined(MMC_NICE_WAITING) || defined(__DOXYGEN__)
 +#define MMC_NICE_WAITING            TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* SDC driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Number of initialization attempts before rejecting the card.
 + * @note    Attempts are performed at 10mS intervals.
 + */
 +#if !defined(SDC_INIT_RETRY) || defined(__DOXYGEN__)
 +#define SDC_INIT_RETRY              100
 +#endif
 +
 +/**
 + * @brief   Include support for MMC cards.
 + * @note    MMC support is not yet implemented so this option must be kept
 + *          at @p FALSE.
 + */
 +#if !defined(SDC_MMC_SUPPORT) || defined(__DOXYGEN__)
 +#define SDC_MMC_SUPPORT             FALSE
 +#endif
 +
 +/**
 + * @brief   Delays insertions.
 + * @details If enabled this options inserts delays into the MMC waiting
 + *          routines releasing some extra CPU time for the threads with
 + *          lower priority, this may slow down the driver a bit however.
 + */
 +#if !defined(SDC_NICE_WAITING) || defined(__DOXYGEN__)
 +#define SDC_NICE_WAITING            TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* SERIAL driver related settings.                                           */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Default bit rate.
 + * @details Configuration parameter, this is the baud rate selected for the
 + *          default configuration.
 + */
 +#if !defined(SERIAL_DEFAULT_BITRATE) || defined(__DOXYGEN__)
 +#define SERIAL_DEFAULT_BITRATE      38400
 +#endif
 +
 +/**
 + * @brief   Serial buffers size.
 + * @details Configuration parameter, you can change the depth of the queue
 + *          buffers depending on the requirements of your application.
 + * @note    The default is 64 bytes for both the transmission and receive
 + *          buffers.
 + */
 +#if !defined(SERIAL_BUFFERS_SIZE) || defined(__DOXYGEN__)
 +#define SERIAL_BUFFERS_SIZE         16
 +#endif
 +
 +/*===========================================================================*/
 +/* SPI driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Enables synchronous APIs.
 + * @note    Disabling this option saves both code and data space.
 + */
 +#if !defined(SPI_USE_WAIT) || defined(__DOXYGEN__)
 +#define SPI_USE_WAIT                TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the @p spiAcquireBus() and @p spiReleaseBus() APIs.
 + * @note    Disabling this option saves both code and data space.
 + */
 +#if !defined(SPI_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
 +#define SPI_USE_MUTUAL_EXCLUSION    TRUE
 +#endif
 +
 +#endif /* _HALCONF_H_ */
 +
 +/** @} */
 diff --git a/testhal/STM32F4xx/I2C/main.c b/testhal/STM32F4xx/I2C/main.c new file mode 100644 index 000000000..e83a98ffd --- /dev/null +++ b/testhal/STM32F4xx/I2C/main.c @@ -0,0 +1,181 @@ +/*
 +    ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio
 +
 +    Licensed under the Apache License, Version 2.0 (the "License");
 +    you may not use this file except in compliance with the License.
 +    You may obtain a copy of the License at
 +
 +        http://www.apache.org/licenses/LICENSE-2.0
 +
 +    Unless required by applicable law or agreed to in writing, software
 +    distributed under the License is distributed on an "AS IS" BASIS,
 +    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 +    See the License for the specific language governing permissions and
 +    limitations under the License.
 +*/
 +/*
 +   Concepts and parts of this file have been contributed by Uladzimir Pylinsky
 +   aka barthess.
 + */
 +
 +/**
 + * This demo acquire data from accelerometer and prints it in shell.
 + */
 +
 +#include <stdlib.h>
 +
 +#include "ch.h"
 +#include "hal.h"
 +
 +/* buffers depth */
 +#define ACCEL_RX_DEPTH 6
 +#define ACCEL_TX_DEPTH 4
 +
 +/* mma8451q specific addresses */
 +#define ACCEL_OUT_DATA    0x01
 +#define ACCEL_CTRL_REG1   0x2A
 +
 +static uint8_t rxbuf[ACCEL_RX_DEPTH];
 +static uint8_t txbuf[ACCEL_TX_DEPTH];
 +static i2cflags_t errors = 0;
 +static int16_t acceleration_x, acceleration_y, acceleration_z;
 +#define mma8451_addr 0b0011100
 +
 +/**
 + *
 + */
 +static void print(char *p) {
 +
 +  while (*p) {
 +    sdPut(&SD2, *p++);
 +  }
 +}
 +
 +/**
 + *
 + */
 +static void println(char *p) {
 +
 +  while (*p) {
 +    sdPut(&SD2, *p++);
 +  }
 +  sdWriteTimeout(&SD2, (uint8_t *)"\r\n", 2, TIME_INFINITE);
 +}
 +
 +/**
 + *
 + */
 +static void printn(int16_t n) {
 +  char buf[16], *p;
 +
 +  if (n > 0)
 +    sdPut(&SD2, '+');
 +  else{
 +    sdPut(&SD2, '-');
 +    n = abs(n);
 +  }
 +
 +  if (!n)
 +    sdPut(&SD2, '0');
 +  else {
 +    p = buf;
 +    while (n)
 +      *p++ = (n % 10) + '0', n /= 10;
 +    while (p > buf)
 +      sdPut(&SD2, *--p);
 +  }
 +}
 +
 +/**
 + * Converts data from 2complemented representation to signed integer
 + */
 +int16_t complement2signed(uint8_t msb, uint8_t lsb){
 +  uint16_t word = 0;
 +  word = (msb << 8) + lsb;
 +  if (msb > 0x7F){
 +    return -1 * ((int16_t)((~word) + 1));
 +  }
 +  return (int16_t)word;
 +}
 +
 +/* I2C interface #2 */
 +static const I2CConfig i2cfg2 = {
 +    OPMODE_I2C,
 +    400000,
 +    FAST_DUTY_CYCLE_2,
 +};
 +
 +/*
 + * Application entry point.
 + */
 +int main(void) {
 +  msg_t status = RDY_OK;
 +  systime_t tmo = MS2ST(4);
 +
 +  /*
 +   * System initializations.
 +   * - HAL initialization, this also initializes the configured device drivers
 +   *   and performs the board-specific initializations.
 +   * - Kernel initialization, the main() function becomes a thread and the
 +   *   RTOS is active.
 +   */
 +  halInit();
 +  chSysInit();
 +
 +  /*
 +   * Starts I2C
 +   */
 +  i2cStart(&I2CD2, &i2cfg2);
 +
 +  /*
 +   * Prepares the Serial driver 2
 +   */
 +  sdStart(&SD2, NULL);          /* Default is 38400-8-N-1.*/
 +  palSetPadMode(GPIOA, 2, PAL_MODE_ALTERNATE(7));
 +  palSetPadMode(GPIOA, 3, PAL_MODE_ALTERNATE(7));
 +
 +  /**
 +   * Prepares the accelerometer
 +   */
 +  txbuf[0] = ACCEL_CTRL_REG1; /* register address */
 +  txbuf[1] = 0x1;
 +  i2cAcquireBus(&I2CD2);
 +  status = i2cMasterTransmitTimeout(&I2CD2, mma8451_addr, txbuf, 2, rxbuf, 0, tmo);
 +  i2cReleaseBus(&I2CD2);
 +
 +  if (status != RDY_OK){
 +    errors = i2cGetErrors(&I2CD2);
 +  }
 +
 +  /*
 +   * Normal main() thread activity, nothing in this test.
 +   */
 +  while (TRUE) {
 +    palTogglePad(GPIOB, GPIOB_LED_B);
 +    chThdSleepMilliseconds(100);
 +
 +    txbuf[0] = ACCEL_OUT_DATA; /* register address */
 +    i2cAcquireBus(&I2CD2);
 +    status = i2cMasterTransmitTimeout(&I2CD2, mma8451_addr, txbuf, 1, rxbuf, 6, tmo);
 +    i2cReleaseBus(&I2CD2);
 +
 +    if (status != RDY_OK){
 +      errors = i2cGetErrors(&I2CD2);
 +    }
 +
 +    acceleration_x = complement2signed(rxbuf[0], rxbuf[1]);
 +    acceleration_y = complement2signed(rxbuf[2], rxbuf[3]);
 +    acceleration_z = complement2signed(rxbuf[4], rxbuf[5]);
 +
 +    print("x: ");
 +    printn(acceleration_x);
 +    print(" y: ");
 +    printn(acceleration_y);
 +    print(" z: ");
 +    printn(acceleration_z);
 +    println("");
 +  }
 +}
 +
 +
 +
 diff --git a/testhal/STM32F4xx/I2C/mcuconf.h b/testhal/STM32F4xx/I2C/mcuconf.h new file mode 100644 index 000000000..da3dba336 --- /dev/null +++ b/testhal/STM32F4xx/I2C/mcuconf.h @@ -0,0 +1,278 @@ +/*
 +    ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio
 +
 +    Licensed under the Apache License, Version 2.0 (the "License");
 +    you may not use this file except in compliance with the License.
 +    You may obtain a copy of the License at
 +
 +        http://www.apache.org/licenses/LICENSE-2.0
 +
 +    Unless required by applicable law or agreed to in writing, software
 +    distributed under the License is distributed on an "AS IS" BASIS,
 +    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 +    See the License for the specific language governing permissions and
 +    limitations under the License.
 +*/
 +
 +/*
 + * STM32F4xx drivers configuration.
 + * The following settings override the default settings present in
 + * the various device driver implementation headers.
 + * Note that the settings for each driver only have effect if the whole
 + * driver is enabled in halconf.h.
 + *
 + * IRQ priorities:
 + * 15...0       Lowest...Highest.
 + *
 + * DMA priorities:
 + * 0...3        Lowest...Highest.
 + */
 +
 +#define STM32F4xx_MCUCONF
 +
 +/*
 + * HAL driver system settings.
 + */
 +#define STM32_NO_INIT                       FALSE
 +#define STM32_HSI_ENABLED                   TRUE
 +#define STM32_LSI_ENABLED                   TRUE
 +#define STM32_HSE_ENABLED                   TRUE
 +#define STM32_LSE_ENABLED                   FALSE
 +#define STM32_CLOCK48_REQUIRED              TRUE
 +#define STM32_SW                            STM32_SW_PLL
 +#define STM32_PLLSRC                        STM32_PLLSRC_HSE
 +#define STM32_PLLM_VALUE                    8
 +#define STM32_PLLN_VALUE                    336
 +#define STM32_PLLP_VALUE                    2
 +#define STM32_PLLQ_VALUE                    7
 +#define STM32_HPRE                          STM32_HPRE_DIV1
 +#define STM32_PPRE1                         STM32_PPRE1_DIV4
 +#define STM32_PPRE2                         STM32_PPRE2_DIV2
 +#define STM32_RTCSEL                        STM32_RTCSEL_LSI
 +#define STM32_RTCPRE_VALUE                  8
 +#define STM32_MCO1SEL                       STM32_MCO1SEL_HSI
 +#define STM32_MCO1PRE                       STM32_MCO1PRE_DIV1
 +#define STM32_MCO2SEL                       STM32_MCO2SEL_SYSCLK
 +#define STM32_MCO2PRE                       STM32_MCO2PRE_DIV5
 +#define STM32_I2SSRC                        STM32_I2SSRC_CKIN
 +#define STM32_PLLI2SN_VALUE                 192
 +#define STM32_PLLI2SR_VALUE                 5
 +#define STM32_VOS                           STM32_VOS_HIGH
 +#define STM32_PVD_ENABLE                    FALSE
 +#define STM32_PLS                           STM32_PLS_LEV0
 +
 +/*
 + * ADC driver system settings.
 + */
 +#define STM32_ADC_ADCPRE                    ADC_CCR_ADCPRE_DIV4
 +#define STM32_ADC_USE_ADC1                  FALSE
 +#define STM32_ADC_USE_ADC2                  FALSE
 +#define STM32_ADC_USE_ADC3                  FALSE
 +#define STM32_ADC_ADC1_DMA_STREAM           STM32_DMA_STREAM_ID(2, 4)
 +#define STM32_ADC_ADC2_DMA_STREAM           STM32_DMA_STREAM_ID(2, 2)
 +#define STM32_ADC_ADC3_DMA_STREAM           STM32_DMA_STREAM_ID(2, 1)
 +#define STM32_ADC_ADC1_DMA_PRIORITY         2
 +#define STM32_ADC_ADC2_DMA_PRIORITY         2
 +#define STM32_ADC_ADC3_DMA_PRIORITY         2
 +#define STM32_ADC_IRQ_PRIORITY              6
 +#define STM32_ADC_ADC1_DMA_IRQ_PRIORITY     6
 +#define STM32_ADC_ADC2_DMA_IRQ_PRIORITY     6
 +#define STM32_ADC_ADC3_DMA_IRQ_PRIORITY     6
 +
 +/*
 + * CAN driver system settings.
 + */
 +#define STM32_CAN_USE_CAN1                  FALSE
 +#define STM32_CAN_USE_CAN2                  FALSE
 +#define STM32_CAN_CAN1_IRQ_PRIORITY         11
 +#define STM32_CAN_CAN2_IRQ_PRIORITY         11
 +
 +/*
 + * EXT driver system settings.
 + */
 +#define STM32_EXT_EXTI0_IRQ_PRIORITY        6
 +#define STM32_EXT_EXTI1_IRQ_PRIORITY        6
 +#define STM32_EXT_EXTI2_IRQ_PRIORITY        6
 +#define STM32_EXT_EXTI3_IRQ_PRIORITY        6
 +#define STM32_EXT_EXTI4_IRQ_PRIORITY        6
 +#define STM32_EXT_EXTI5_9_IRQ_PRIORITY      6
 +#define STM32_EXT_EXTI10_15_IRQ_PRIORITY    6
 +#define STM32_EXT_EXTI16_IRQ_PRIORITY       6
 +#define STM32_EXT_EXTI17_IRQ_PRIORITY       15
 +#define STM32_EXT_EXTI18_IRQ_PRIORITY       6
 +#define STM32_EXT_EXTI19_IRQ_PRIORITY       6
 +#define STM32_EXT_EXTI20_IRQ_PRIORITY       6
 +#define STM32_EXT_EXTI21_IRQ_PRIORITY       15
 +#define STM32_EXT_EXTI22_IRQ_PRIORITY       15
 +
 +/*
 + * GPT driver system settings.
 + */
 +#define STM32_GPT_USE_TIM1                  FALSE
 +#define STM32_GPT_USE_TIM2                  FALSE
 +#define STM32_GPT_USE_TIM3                  FALSE
 +#define STM32_GPT_USE_TIM4                  FALSE
 +#define STM32_GPT_USE_TIM5                  FALSE
 +#define STM32_GPT_USE_TIM6                  FALSE
 +#define STM32_GPT_USE_TIM7                  FALSE
 +#define STM32_GPT_USE_TIM8                  FALSE
 +#define STM32_GPT_USE_TIM9                  FALSE
 +#define STM32_GPT_USE_TIM11                 FALSE
 +#define STM32_GPT_USE_TIM12                 FALSE
 +#define STM32_GPT_USE_TIM14                 FALSE
 +#define STM32_GPT_TIM1_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM2_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM3_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM4_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM5_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM6_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM7_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM8_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM9_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM11_IRQ_PRIORITY        7
 +#define STM32_GPT_TIM12_IRQ_PRIORITY        7
 +#define STM32_GPT_TIM14_IRQ_PRIORITY        7
 +
 +/*
 + * I2C driver system settings.
 + */
 +#define STM32_I2C_USE_I2C1                  TRUE
 +#define STM32_I2C_USE_I2C2                  TRUE
 +#define STM32_I2C_USE_I2C3                  TRUE
 +#define STM32_I2C_I2C1_RX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 0)
 +#define STM32_I2C_I2C1_TX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 6)
 +#define STM32_I2C_I2C2_RX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 2)
 +#define STM32_I2C_I2C2_TX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 7)
 +#define STM32_I2C_I2C3_RX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 2)
 +#define STM32_I2C_I2C3_TX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 4)
 +#define STM32_I2C_I2C1_IRQ_PRIORITY         5
 +#define STM32_I2C_I2C2_IRQ_PRIORITY         5
 +#define STM32_I2C_I2C3_IRQ_PRIORITY         5
 +#define STM32_I2C_I2C1_DMA_PRIORITY         3
 +#define STM32_I2C_I2C2_DMA_PRIORITY         3
 +#define STM32_I2C_I2C3_DMA_PRIORITY         3
 +#define STM32_I2C_I2C1_DMA_ERROR_HOOK()     chSysHalt()
 +#define STM32_I2C_I2C2_DMA_ERROR_HOOK()     chSysHalt()
 +#define STM32_I2C_I2C3_DMA_ERROR_HOOK()     chSysHalt()
 +
 +/*
 + * ICU driver system settings.
 + */
 +#define STM32_ICU_USE_TIM1                  FALSE
 +#define STM32_ICU_USE_TIM2                  FALSE
 +#define STM32_ICU_USE_TIM3                  FALSE
 +#define STM32_ICU_USE_TIM4                  FALSE
 +#define STM32_ICU_USE_TIM5                  FALSE
 +#define STM32_ICU_USE_TIM8                  FALSE
 +#define STM32_ICU_USE_TIM9                  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
 +#define STM32_ICU_TIM8_IRQ_PRIORITY         7
 +#define STM32_ICU_TIM9_IRQ_PRIORITY         7
 +
 +/*
 + * MAC driver system settings.
 + */
 +#define STM32_MAC_TRANSMIT_BUFFERS          2
 +#define STM32_MAC_RECEIVE_BUFFERS           4
 +#define STM32_MAC_BUFFERS_SIZE              1522
 +#define STM32_MAC_PHY_TIMEOUT               100
 +#define STM32_MAC_ETH1_CHANGE_PHY_STATE     TRUE
 +#define STM32_MAC_ETH1_IRQ_PRIORITY         13
 +#define STM32_MAC_IP_CHECKSUM_OFFLOAD       0
 +
 +/*
 + * PWM driver system settings.
 + */
 +#define STM32_PWM_USE_ADVANCED              FALSE
 +#define STM32_PWM_USE_TIM1                  FALSE
 +#define STM32_PWM_USE_TIM2                  FALSE
 +#define STM32_PWM_USE_TIM3                  FALSE
 +#define STM32_PWM_USE_TIM4                  FALSE
 +#define STM32_PWM_USE_TIM5                  FALSE
 +#define STM32_PWM_USE_TIM8                  FALSE
 +#define STM32_PWM_USE_TIM9                  FALSE
 +#define STM32_PWM_TIM1_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM2_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM3_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM4_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM5_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM8_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM9_IRQ_PRIORITY         7
 +
 +/*
 + * SERIAL driver system settings.
 + */
 +#define STM32_SERIAL_USE_USART1             FALSE
 +#define STM32_SERIAL_USE_USART2             TRUE
 +#define STM32_SERIAL_USE_USART3             FALSE
 +#define STM32_SERIAL_USE_UART4              FALSE
 +#define STM32_SERIAL_USE_UART5              FALSE
 +#define STM32_SERIAL_USE_USART6             FALSE
 +#define STM32_SERIAL_USART1_PRIORITY        12
 +#define STM32_SERIAL_USART2_PRIORITY        12
 +#define STM32_SERIAL_USART3_PRIORITY        12
 +#define STM32_SERIAL_UART4_PRIORITY         12
 +#define STM32_SERIAL_UART5_PRIORITY         12
 +#define STM32_SERIAL_USART6_PRIORITY        12
 +
 +/*
 + * SPI driver system settings.
 + */
 +#define STM32_SPI_USE_SPI1                  FALSE
 +#define STM32_SPI_USE_SPI2                  FALSE
 +#define STM32_SPI_USE_SPI3                  FALSE
 +#define STM32_SPI_SPI1_RX_DMA_STREAM        STM32_DMA_STREAM_ID(2, 0)
 +#define STM32_SPI_SPI1_TX_DMA_STREAM        STM32_DMA_STREAM_ID(2, 3)
 +#define STM32_SPI_SPI2_RX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 3)
 +#define STM32_SPI_SPI2_TX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 4)
 +#define STM32_SPI_SPI3_RX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 0)
 +#define STM32_SPI_SPI3_TX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 7)
 +#define STM32_SPI_SPI1_DMA_PRIORITY         1
 +#define STM32_SPI_SPI2_DMA_PRIORITY         1
 +#define STM32_SPI_SPI3_DMA_PRIORITY         1
 +#define STM32_SPI_SPI1_IRQ_PRIORITY         10
 +#define STM32_SPI_SPI2_IRQ_PRIORITY         10
 +#define STM32_SPI_SPI3_IRQ_PRIORITY         10
 +#define STM32_SPI_DMA_ERROR_HOOK(spip)      chSysHalt()
 +
 +/*
 + * UART driver system settings.
 + */
 +#define STM32_UART_USE_USART1               FALSE
 +#define STM32_UART_USE_USART2               FALSE
 +#define STM32_UART_USE_USART3               FALSE
 +#define STM32_UART_USE_USART6               FALSE
 +#define STM32_UART_USART1_RX_DMA_STREAM     STM32_DMA_STREAM_ID(2, 5)
 +#define STM32_UART_USART1_TX_DMA_STREAM     STM32_DMA_STREAM_ID(2, 7)
 +#define STM32_UART_USART2_RX_DMA_STREAM     STM32_DMA_STREAM_ID(1, 5)
 +#define STM32_UART_USART2_TX_DMA_STREAM     STM32_DMA_STREAM_ID(1, 6)
 +#define STM32_UART_USART3_RX_DMA_STREAM     STM32_DMA_STREAM_ID(1, 1)
 +#define STM32_UART_USART3_TX_DMA_STREAM     STM32_DMA_STREAM_ID(1, 3)
 +#define STM32_UART_USART6_RX_DMA_STREAM     STM32_DMA_STREAM_ID(2, 2)
 +#define STM32_UART_USART6_TX_DMA_STREAM     STM32_DMA_STREAM_ID(2, 7)
 +#define STM32_UART_USART1_IRQ_PRIORITY      12
 +#define STM32_UART_USART2_IRQ_PRIORITY      12
 +#define STM32_UART_USART3_IRQ_PRIORITY      12
 +#define STM32_UART_USART6_IRQ_PRIORITY      12
 +#define STM32_UART_USART1_DMA_PRIORITY      0
 +#define STM32_UART_USART2_DMA_PRIORITY      0
 +#define STM32_UART_USART3_DMA_PRIORITY      0
 +#define STM32_UART_USART6_DMA_PRIORITY      0
 +#define STM32_UART_DMA_ERROR_HOOK(uartp)    chSysHalt()
 +
 +/*
 + * USB driver system settings.
 + */
 +#define STM32_USB_USE_OTG1                  FALSE
 +#define STM32_USB_USE_OTG2                  FALSE
 +#define STM32_USB_OTG1_IRQ_PRIORITY         14
 +#define STM32_USB_OTG2_IRQ_PRIORITY         14
 +#define STM32_USB_OTG1_RX_FIFO_SIZE         512
 +#define STM32_USB_OTG2_RX_FIFO_SIZE         1024
 +#define STM32_USB_OTG_THREAD_PRIO           LOWPRIO
 +#define STM32_USB_OTG_THREAD_STACK_SIZE     128
 +#define STM32_USB_OTGFIFO_FILL_BASEPRI      0
 diff --git a/testhal/STM32F4xx/IRQ_STORM/.cproject b/testhal/STM32F4xx/IRQ_STORM/.cproject new file mode 100644 index 000000000..1e9c4518b --- /dev/null +++ b/testhal/STM32F4xx/IRQ_STORM/.cproject @@ -0,0 +1,51 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?>
 +<?fileVersion 4.0.0?>
 +
 +<cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
 +	<storageModule moduleId="org.eclipse.cdt.core.settings">
 +		<cconfiguration id="0.415508998">
 +			<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="0.415508998" moduleId="org.eclipse.cdt.core.settings" name="Default">
 +				<externalSettings/>
 +				<extensions>
 +					<extension id="org.eclipse.cdt.core.VCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 +					<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 +					<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
 +					<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 +					<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 +					<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 +				</extensions>
 +			</storageModule>
 +			<storageModule moduleId="cdtBuildSystem" version="4.0.0">
 +				<configuration artifactName="${ProjName}" buildProperties="" description="" id="0.415508998" name="Default" parent="org.eclipse.cdt.build.core.prefbase.cfg">
 +					<folderInfo id="0.415508998." name="/" resourcePath="">
 +						<toolChain id="org.eclipse.cdt.build.core.prefbase.toolchain.80815107" name="No ToolChain" resourceTypeBasedDiscovery="false" superClass="org.eclipse.cdt.build.core.prefbase.toolchain">
 +							<targetPlatform id="org.eclipse.cdt.build.core.prefbase.toolchain.80815107.1895270004" name=""/>
 +							<builder autoBuildTarget="all" cleanBuildTarget="clean" enableAutoBuild="false" enableCleanBuild="true" enabledIncrementalBuild="true" id="org.eclipse.cdt.build.core.settings.default.builder.728148619" incrementalBuildTarget="all" keepEnvironmentInBuildfile="false" managedBuildOn="false" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="org.eclipse.cdt.build.core.settings.default.builder"/>
 +							<tool id="org.eclipse.cdt.build.core.settings.holder.libs.951102547" name="holder for library settings" superClass="org.eclipse.cdt.build.core.settings.holder.libs"/>
 +							<tool id="org.eclipse.cdt.build.core.settings.holder.662656837" name="Assembly" superClass="org.eclipse.cdt.build.core.settings.holder">
 +								<inputType id="org.eclipse.cdt.build.core.settings.holder.inType.1748846528" languageId="org.eclipse.cdt.core.assembly" languageName="Assembly" sourceContentType="org.eclipse.cdt.core.asmSource" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
 +							</tool>
 +							<tool id="org.eclipse.cdt.build.core.settings.holder.1036788610" name="GNU C++" superClass="org.eclipse.cdt.build.core.settings.holder">
 +								<inputType id="org.eclipse.cdt.build.core.settings.holder.inType.555497518" languageId="org.eclipse.cdt.core.g++" languageName="GNU C++" sourceContentType="org.eclipse.cdt.core.cxxSource,org.eclipse.cdt.core.cxxHeader" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
 +							</tool>
 +							<tool id="org.eclipse.cdt.build.core.settings.holder.1968480594" name="GNU C" superClass="org.eclipse.cdt.build.core.settings.holder">
 +								<inputType id="org.eclipse.cdt.build.core.settings.holder.inType.1745911775" languageId="org.eclipse.cdt.core.gcc" languageName="GNU C" sourceContentType="org.eclipse.cdt.core.cSource,org.eclipse.cdt.core.cHeader" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
 +							</tool>
 +						</toolChain>
 +					</folderInfo>
 +				</configuration>
 +			</storageModule>
 +			<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
 +		</cconfiguration>
 +	</storageModule>
 +	<storageModule moduleId="cdtBuildSystem" version="4.0.0">
 +		<project id="STM32F4xx-IRQ_STORM.null.256587885" name="STM32F4xx-IRQ_STORM"/>
 +	</storageModule>
 +	<storageModule moduleId="scannerConfiguration">
 +		<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
 +		<scannerConfigBuildInfo instanceId="0.415508998">
 +			<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile"/>
 +		</scannerConfigBuildInfo>
 +	</storageModule>
 +	<storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
 +</cproject>
 diff --git a/testhal/STM32F4xx/IRQ_STORM/.project b/testhal/STM32F4xx/IRQ_STORM/.project new file mode 100644 index 000000000..6f3b0385f --- /dev/null +++ b/testhal/STM32F4xx/IRQ_STORM/.project @@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="UTF-8"?>
 +<projectDescription>
 +	<name>STM32F4xx-IRQ_STORM</name>
 +	<comment></comment>
 +	<projects>
 +	</projects>
 +	<buildSpec>
 +		<buildCommand>
 +			<name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
 +			<triggers>clean,full,incremental,</triggers>
 +			<arguments>
 +			</arguments>
 +		</buildCommand>
 +		<buildCommand>
 +			<name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
 +			<triggers>full,incremental,</triggers>
 +			<arguments>
 +			</arguments>
 +		</buildCommand>
 +	</buildSpec>
 +	<natures>
 +		<nature>org.eclipse.cdt.core.cnature</nature>
 +		<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
 +		<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
 +	</natures>
 +	<linkedResources>
 +		<link>
 +			<name>board</name>
 +			<type>2</type>
 +			<locationURI>CHIBIOS/boards/ST_STM32F4_DISCOVERY</locationURI>
 +		</link>
 +		<link>
 +			<name>os</name>
 +			<type>2</type>
 +			<locationURI>CHIBIOS/os</locationURI>
 +		</link>
 +	</linkedResources>
 +</projectDescription>
 diff --git a/testhal/STM32F4xx/IRQ_STORM/Makefile b/testhal/STM32F4xx/IRQ_STORM/Makefile new file mode 100644 index 000000000..86de6d81c --- /dev/null +++ b/testhal/STM32F4xx/IRQ_STORM/Makefile @@ -0,0 +1,222 @@ +##############################################################################
 +# Build global options
 +# NOTE: Can be overridden externally.
 +#
 +
 +# Compiler options here.
 +ifeq ($(USE_OPT),)
 +  USE_OPT = -O2 -ggdb -fomit-frame-pointer -falign-functions=16
 +endif
 +
 +# C specific options here (added to USE_OPT).
 +ifeq ($(USE_COPT),)
 +  USE_COPT = 
 +endif
 +
 +# C++ specific options here (added to USE_OPT).
 +ifeq ($(USE_CPPOPT),)
 +  USE_CPPOPT = -fno-rtti
 +endif
 +
 +# Enable this if you want the linker to remove unused code and data
 +ifeq ($(USE_LINK_GC),)
 +  USE_LINK_GC = yes
 +endif
 +
 +# If enabled, this option allows to compile the application in THUMB mode.
 +ifeq ($(USE_THUMB),)
 +  USE_THUMB = yes
 +endif
 +
 +# Enable this if you want to see the full log while compiling.
 +ifeq ($(USE_VERBOSE_COMPILE),)
 +  USE_VERBOSE_COMPILE = no
 +endif
 +
 +#
 +# Build global options
 +##############################################################################
 +
 +##############################################################################
 +# Architecture or project specific options
 +#
 +
 +# Enables the use of FPU on Cortex-M4.
 +# Enable this if you really want to use the STM FWLib.
 +ifeq ($(USE_FPU),)
 +  USE_FPU = no
 +endif
 +
 +# Enable this if you really want to use the STM FWLib.
 +ifeq ($(USE_FWLIB),)
 +  USE_FWLIB = no
 +endif
 +
 +#
 +# Architecture or project specific options
 +##############################################################################
 +
 +##############################################################################
 +# Project, sources and paths
 +#
 +
 +# Define project name here
 +PROJECT = ch
 +
 +# Imported source files and paths
 +CHIBIOS = ../../..
 +include $(CHIBIOS)/boards/ST_STM32F4_DISCOVERY/board.mk
 +include $(CHIBIOS)/os/hal/platforms/STM32F4xx/platform.mk
 +include $(CHIBIOS)/os/hal/hal.mk
 +include $(CHIBIOS)/os/ports/GCC/ARMCMx/STM32F4xx/port.mk
 +include $(CHIBIOS)/os/kernel/kernel.mk
 +include $(CHIBIOS)/test/test.mk
 +
 +# Define linker script file here
 +LDSCRIPT= $(PORTLD)/STM32F407xG.ld
 +#LDSCRIPT= $(PORTLD)/STM32F407xG_CCM.ld
 +
 +# C sources that can be compiled in ARM or THUMB mode depending on the global
 +# setting.
 +CSRC = $(PORTSRC) \
 +       $(KERNSRC) \
 +       $(TESTSRC) \
 +       $(HALSRC) \
 +       $(PLATFORMSRC) \
 +       $(BOARDSRC) \
 +       $(CHIBIOS)/os/various/chprintf.c \
 +       main.c
 +
 +# C++ sources that can be compiled in ARM or THUMB mode depending on the global
 +# setting.
 +CPPSRC =
 +
 +# C sources to be compiled in ARM mode regardless of the global setting.
 +# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler
 +#       option that results in lower performance and larger code size.
 +ACSRC =
 +
 +# C++ sources to be compiled in ARM mode regardless of the global setting.
 +# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler
 +#       option that results in lower performance and larger code size.
 +ACPPSRC =
 +
 +# C sources to be compiled in THUMB mode regardless of the global setting.
 +# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler
 +#       option that results in lower performance and larger code size.
 +TCSRC =
 +
 +# C sources to be compiled in THUMB mode regardless of the global setting.
 +# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler
 +#       option that results in lower performance and larger code size.
 +TCPPSRC =
 +
 +# List ASM source files here
 +ASMSRC = $(PORTASM)
 +
 +INCDIR = $(PORTINC) $(KERNINC) $(TESTINC) \
 +         $(HALINC) $(PLATFORMINC) $(BOARDINC) \
 +         $(CHIBIOS)/os/various
 +
 +#
 +# Project, sources and paths
 +##############################################################################
 +
 +##############################################################################
 +# Compiler settings
 +#
 +
 +MCU  = cortex-m4
 +
 +#TRGT = arm-elf-
 +TRGT = arm-none-eabi-
 +CC   = $(TRGT)gcc
 +CPPC = $(TRGT)g++
 +# Enable loading with g++ only if you need C++ runtime support.
 +# NOTE: You can use C++ even without C++ support if you are careful. C++
 +#       runtime support makes code size explode.
 +LD   = $(TRGT)gcc
 +#LD   = $(TRGT)g++
 +CP   = $(TRGT)objcopy
 +AS   = $(TRGT)gcc -x assembler-with-cpp
 +OD   = $(TRGT)objdump
 +HEX  = $(CP) -O ihex
 +BIN  = $(CP) -O binary
 +
 +# ARM-specific options here
 +AOPT =
 +
 +# THUMB-specific options here
 +TOPT = -mthumb -DTHUMB
 +
 +# Define C warning options here
 +CWARN = -Wall -Wextra -Wstrict-prototypes
 +
 +# Define C++ warning options here
 +CPPWARN = -Wall -Wextra
 +
 +#
 +# Compiler settings
 +##############################################################################
 +
 +##############################################################################
 +# Start of default section
 +#
 +
 +# List all default C defines here, like -D_DEBUG=1
 +DDEFS =
 +
 +# List all default ASM defines here, like -D_DEBUG=1
 +DADEFS =
 +
 +# List all default directories to look for include files here
 +DINCDIR =
 +
 +# List the default directory to look for the libraries here
 +DLIBDIR =
 +
 +# List all default libraries here
 +DLIBS =
 +
 +#
 +# End of default section
 +##############################################################################
 +
 +##############################################################################
 +# Start of user section
 +#
 +
 +# List all user C define here, like -D_DEBUG=1
 +UDEFS =
 +
 +# Define ASM defines here
 +UADEFS =
 +
 +# List all user directories here
 +UINCDIR =
 +
 +# List the user directory to look for the libraries here
 +ULIBDIR =
 +
 +# List all user libraries here
 +ULIBS =
 +
 +#
 +# End of user defines
 +##############################################################################
 +
 +ifeq ($(USE_FPU),yes)
 +  USE_OPT += -mfloat-abi=softfp -mfpu=fpv4-sp-d16 -fsingle-precision-constant
 +  DDEFS += -DCORTEX_USE_FPU=TRUE
 +else
 +  DDEFS += -DCORTEX_USE_FPU=FALSE
 +endif
 +
 +ifeq ($(USE_FWLIB),yes)
 +  include $(CHIBIOS)/ext/stm32lib/stm32lib.mk
 +  CSRC += $(STM32SRC)
 +  INCDIR += $(STM32INC)
 +  USE_OPT += -DUSE_STDPERIPH_DRIVER
 +endif
 +
 +include $(CHIBIOS)/os/ports/GCC/ARMCMx/rules.mk
 diff --git a/testhal/STM32F4xx/IRQ_STORM/chconf.h b/testhal/STM32F4xx/IRQ_STORM/chconf.h new file mode 100644 index 000000000..38242d75d --- /dev/null +++ b/testhal/STM32F4xx/IRQ_STORM/chconf.h @@ -0,0 +1,533 @@ +/*
 +    ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio
 +
 +    Licensed under the Apache License, Version 2.0 (the "License");
 +    you may not use this file except in compliance with the License.
 +    You may obtain a copy of the License at
 +
 +        http://www.apache.org/licenses/LICENSE-2.0
 +
 +    Unless required by applicable law or agreed to in writing, software
 +    distributed under the License is distributed on an "AS IS" BASIS,
 +    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 +    See the License for the specific language governing permissions and
 +    limitations under the License.
 +*/
 +
 +/**
 + * @file    templates/chconf.h
 + * @brief   Configuration file template.
 + * @details A copy of this file must be placed in each project directory, it
 + *          contains the application specific kernel settings.
 + *
 + * @addtogroup config
 + * @details Kernel related settings and hooks.
 + * @{
 + */
 +
 +#ifndef _CHCONF_H_
 +#define _CHCONF_H_
 +
 +/*===========================================================================*/
 +/**
 + * @name Kernel parameters and options
 + * @{
 + */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   System tick frequency.
 + * @details Frequency of the system timer that drives the system ticks. This
 + *          setting also defines the system tick time unit.
 + */
 +#if !defined(CH_FREQUENCY) || defined(__DOXYGEN__)
 +#define CH_FREQUENCY                    1000
 +#endif
 +
 +/**
 + * @brief   Round robin interval.
 + * @details This constant is the number of system ticks allowed for the
 + *          threads before preemption occurs. Setting this value to zero
 + *          disables the preemption for threads with equal priority and the
 + *          round robin becomes cooperative. Note that higher priority
 + *          threads can still preempt, the kernel is always preemptive.
 + *
 + * @note    Disabling the round robin preemption makes the kernel more compact
 + *          and generally faster.
 + */
 +#if !defined(CH_TIME_QUANTUM) || defined(__DOXYGEN__)
 +#define CH_TIME_QUANTUM                 20
 +#endif
 +
 +/**
 + * @brief   Managed RAM size.
 + * @details Size of the RAM area to be managed by the OS. If set to zero
 + *          then the whole available RAM is used. The core memory is made
 + *          available to the heap allocator and/or can be used directly through
 + *          the simplified core memory allocator.
 + *
 + * @note    In order to let the OS manage the whole RAM the linker script must
 + *          provide the @p __heap_base__ and @p __heap_end__ symbols.
 + * @note    Requires @p CH_USE_MEMCORE.
 + */
 +#if !defined(CH_MEMCORE_SIZE) || defined(__DOXYGEN__)
 +#define CH_MEMCORE_SIZE                 0
 +#endif
 +
 +/**
 + * @brief   Idle thread automatic spawn suppression.
 + * @details When this option is activated the function @p chSysInit()
 + *          does not spawn the idle thread automatically. The application has
 + *          then the responsibility to do one of the following:
 + *          - Spawn a custom idle thread at priority @p IDLEPRIO.
 + *          - Change the main() thread priority to @p IDLEPRIO then enter
 + *            an endless loop. In this scenario the @p main() thread acts as
 + *            the idle thread.
 + *          .
 + * @note    Unless an idle thread is spawned the @p main() thread must not
 + *          enter a sleep state.
 + */
 +#if !defined(CH_NO_IDLE_THREAD) || defined(__DOXYGEN__)
 +#define CH_NO_IDLE_THREAD               FALSE
 +#endif
 +
 +/** @} */
 +
 +/*===========================================================================*/
 +/**
 + * @name Performance options
 + * @{
 + */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   OS optimization.
 + * @details If enabled then time efficient rather than space efficient code
 + *          is used when two possible implementations exist.
 + *
 + * @note    This is not related to the compiler optimization options.
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_OPTIMIZE_SPEED) || defined(__DOXYGEN__)
 +#define CH_OPTIMIZE_SPEED               TRUE
 +#endif
 +
 +/** @} */
 +
 +/*===========================================================================*/
 +/**
 + * @name Subsystem options
 + * @{
 + */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Threads registry APIs.
 + * @details If enabled then the registry APIs are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_REGISTRY) || defined(__DOXYGEN__)
 +#define CH_USE_REGISTRY                 TRUE
 +#endif
 +
 +/**
 + * @brief   Threads synchronization APIs.
 + * @details If enabled then the @p chThdWait() function is included in
 + *          the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_WAITEXIT) || defined(__DOXYGEN__)
 +#define CH_USE_WAITEXIT                 TRUE
 +#endif
 +
 +/**
 + * @brief   Semaphores APIs.
 + * @details If enabled then the Semaphores APIs are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_SEMAPHORES) || defined(__DOXYGEN__)
 +#define CH_USE_SEMAPHORES               TRUE
 +#endif
 +
 +/**
 + * @brief   Semaphores queuing mode.
 + * @details If enabled then the threads are enqueued on semaphores by
 + *          priority rather than in FIFO order.
 + *
 + * @note    The default is @p FALSE. Enable this if you have special requirements.
 + * @note    Requires @p CH_USE_SEMAPHORES.
 + */
 +#if !defined(CH_USE_SEMAPHORES_PRIORITY) || defined(__DOXYGEN__)
 +#define CH_USE_SEMAPHORES_PRIORITY      FALSE
 +#endif
 +
 +/**
 + * @brief   Atomic semaphore API.
 + * @details If enabled then the semaphores the @p chSemSignalWait() API
 + *          is included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_SEMAPHORES.
 + */
 +#if !defined(CH_USE_SEMSW) || defined(__DOXYGEN__)
 +#define CH_USE_SEMSW                    TRUE
 +#endif
 +
 +/**
 + * @brief   Mutexes APIs.
 + * @details If enabled then the mutexes APIs are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_MUTEXES) || defined(__DOXYGEN__)
 +#define CH_USE_MUTEXES                  TRUE
 +#endif
 +
 +/**
 + * @brief   Conditional Variables APIs.
 + * @details If enabled then the conditional variables APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_MUTEXES.
 + */
 +#if !defined(CH_USE_CONDVARS) || defined(__DOXYGEN__)
 +#define CH_USE_CONDVARS                 TRUE
 +#endif
 +
 +/**
 + * @brief   Conditional Variables APIs with timeout.
 + * @details If enabled then the conditional variables APIs with timeout
 + *          specification are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_CONDVARS.
 + */
 +#if !defined(CH_USE_CONDVARS_TIMEOUT) || defined(__DOXYGEN__)
 +#define CH_USE_CONDVARS_TIMEOUT         TRUE
 +#endif
 +
 +/**
 + * @brief   Events Flags APIs.
 + * @details If enabled then the event flags APIs are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_EVENTS) || defined(__DOXYGEN__)
 +#define CH_USE_EVENTS                   TRUE
 +#endif
 +
 +/**
 + * @brief   Events Flags APIs with timeout.
 + * @details If enabled then the events APIs with timeout specification
 + *          are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_EVENTS.
 + */
 +#if !defined(CH_USE_EVENTS_TIMEOUT) || defined(__DOXYGEN__)
 +#define CH_USE_EVENTS_TIMEOUT           TRUE
 +#endif
 +
 +/**
 + * @brief   Synchronous Messages APIs.
 + * @details If enabled then the synchronous messages APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_MESSAGES) || defined(__DOXYGEN__)
 +#define CH_USE_MESSAGES                 TRUE
 +#endif
 +
 +/**
 + * @brief   Synchronous Messages queuing mode.
 + * @details If enabled then messages are served by priority rather than in
 + *          FIFO order.
 + *
 + * @note    The default is @p FALSE. Enable this if you have special requirements.
 + * @note    Requires @p CH_USE_MESSAGES.
 + */
 +#if !defined(CH_USE_MESSAGES_PRIORITY) || defined(__DOXYGEN__)
 +#define CH_USE_MESSAGES_PRIORITY        FALSE
 +#endif
 +
 +/**
 + * @brief   Mailboxes APIs.
 + * @details If enabled then the asynchronous messages (mailboxes) APIs are
 + *          included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_SEMAPHORES.
 + */
 +#if !defined(CH_USE_MAILBOXES) || defined(__DOXYGEN__)
 +#define CH_USE_MAILBOXES                TRUE
 +#endif
 +
 +/**
 + * @brief   I/O Queues APIs.
 + * @details If enabled then the I/O queues APIs are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_QUEUES) || defined(__DOXYGEN__)
 +#define CH_USE_QUEUES                   TRUE
 +#endif
 +
 +/**
 + * @brief   Core Memory Manager APIs.
 + * @details If enabled then the core memory manager APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_MEMCORE) || defined(__DOXYGEN__)
 +#define CH_USE_MEMCORE                  TRUE
 +#endif
 +
 +/**
 + * @brief   Heap Allocator APIs.
 + * @details If enabled then the memory heap allocator APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_MEMCORE and either @p CH_USE_MUTEXES or
 + *          @p CH_USE_SEMAPHORES.
 + * @note    Mutexes are recommended.
 + */
 +#if !defined(CH_USE_HEAP) || defined(__DOXYGEN__)
 +#define CH_USE_HEAP                     TRUE
 +#endif
 +
 +/**
 + * @brief   C-runtime allocator.
 + * @details If enabled the the heap allocator APIs just wrap the C-runtime
 + *          @p malloc() and @p free() functions.
 + *
 + * @note    The default is @p FALSE.
 + * @note    Requires @p CH_USE_HEAP.
 + * @note    The C-runtime may or may not require @p CH_USE_MEMCORE, see the
 + *          appropriate documentation.
 + */
 +#if !defined(CH_USE_MALLOC_HEAP) || defined(__DOXYGEN__)
 +#define CH_USE_MALLOC_HEAP              FALSE
 +#endif
 +
 +/**
 + * @brief   Memory Pools Allocator APIs.
 + * @details If enabled then the memory pools allocator APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_MEMPOOLS) || defined(__DOXYGEN__)
 +#define CH_USE_MEMPOOLS                 TRUE
 +#endif
 +
 +/**
 + * @brief   Dynamic Threads APIs.
 + * @details If enabled then the dynamic threads creation APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_WAITEXIT.
 + * @note    Requires @p CH_USE_HEAP and/or @p CH_USE_MEMPOOLS.
 + */
 +#if !defined(CH_USE_DYNAMIC) || defined(__DOXYGEN__)
 +#define CH_USE_DYNAMIC                  TRUE
 +#endif
 +
 +/** @} */
 +
 +/*===========================================================================*/
 +/**
 + * @name Debug options
 + * @{
 + */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Debug option, system state check.
 + * @details If enabled the correct call protocol for system APIs is checked
 + *          at runtime.
 + *
 + * @note    The default is @p FALSE.
 + */
 +#if !defined(CH_DBG_SYSTEM_STATE_CHECK) || defined(__DOXYGEN__)
 +#define CH_DBG_SYSTEM_STATE_CHECK       FALSE
 +#endif
 +
 +/**
 + * @brief   Debug option, parameters checks.
 + * @details If enabled then the checks on the API functions input
 + *          parameters are activated.
 + *
 + * @note    The default is @p FALSE.
 + */
 +#if !defined(CH_DBG_ENABLE_CHECKS) || defined(__DOXYGEN__)
 +#define CH_DBG_ENABLE_CHECKS            FALSE
 +#endif
 +
 +/**
 + * @brief   Debug option, consistency checks.
 + * @details If enabled then all the assertions in the kernel code are
 + *          activated. This includes consistency checks inside the kernel,
 + *          runtime anomalies and port-defined checks.
 + *
 + * @note    The default is @p FALSE.
 + */
 +#if !defined(CH_DBG_ENABLE_ASSERTS) || defined(__DOXYGEN__)
 +#define CH_DBG_ENABLE_ASSERTS           FALSE
 +#endif
 +
 +/**
 + * @brief   Debug option, trace buffer.
 + * @details If enabled then the context switch circular trace buffer is
 + *          activated.
 + *
 + * @note    The default is @p FALSE.
 + */
 +#if !defined(CH_DBG_ENABLE_TRACE) || defined(__DOXYGEN__)
 +#define CH_DBG_ENABLE_TRACE             FALSE
 +#endif
 +
 +/**
 + * @brief   Debug option, stack checks.
 + * @details If enabled then a runtime stack check is performed.
 + *
 + * @note    The default is @p FALSE.
 + * @note    The stack check is performed in a architecture/port dependent way.
 + *          It may not be implemented or some ports.
 + * @note    The default failure mode is to halt the system with the global
 + *          @p panic_msg variable set to @p NULL.
 + */
 +#if !defined(CH_DBG_ENABLE_STACK_CHECK) || defined(__DOXYGEN__)
 +#define CH_DBG_ENABLE_STACK_CHECK       FALSE
 +#endif
 +
 +/**
 + * @brief   Debug option, stacks initialization.
 + * @details If enabled then the threads working area is filled with a byte
 + *          value when a thread is created. This can be useful for the
 + *          runtime measurement of the used stack.
 + *
 + * @note    The default is @p FALSE.
 + */
 +#if !defined(CH_DBG_FILL_THREADS) || defined(__DOXYGEN__)
 +#define CH_DBG_FILL_THREADS             FALSE
 +#endif
 +
 +/**
 + * @brief   Debug option, threads profiling.
 + * @details If enabled then a field is added to the @p Thread structure that
 + *          counts the system ticks occurred while executing the thread.
 + *
 + * @note    The default is @p TRUE.
 + * @note    This debug option is defaulted to TRUE because it is required by
 + *          some test cases into the test suite.
 + */
 +#if !defined(CH_DBG_THREADS_PROFILING) || defined(__DOXYGEN__)
 +#define CH_DBG_THREADS_PROFILING        TRUE
 +#endif
 +
 +/** @} */
 +
 +/*===========================================================================*/
 +/**
 + * @name Kernel hooks
 + * @{
 + */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Threads descriptor structure extension.
 + * @details User fields added to the end of the @p Thread structure.
 + */
 +#if !defined(THREAD_EXT_FIELDS) || defined(__DOXYGEN__)
 +#define THREAD_EXT_FIELDS                                                   \
 +  /* Add threads custom fields here.*/
 +#endif
 +
 +/**
 + * @brief   Threads initialization hook.
 + * @details User initialization code added to the @p chThdInit() API.
 + *
 + * @note    It is invoked from within @p chThdInit() and implicitly from all
 + *          the threads creation APIs.
 + */
 +#if !defined(THREAD_EXT_INIT_HOOK) || defined(__DOXYGEN__)
 +#define THREAD_EXT_INIT_HOOK(tp) {                                          \
 +  /* Add threads initialization code here.*/                                \
 +}
 +#endif
 +
 +/**
 + * @brief   Threads finalization hook.
 + * @details User finalization code added to the @p chThdExit() API.
 + *
 + * @note    It is inserted into lock zone.
 + * @note    It is also invoked when the threads simply return in order to
 + *          terminate.
 + */
 +#if !defined(THREAD_EXT_EXIT_HOOK) || defined(__DOXYGEN__)
 +#define THREAD_EXT_EXIT_HOOK(tp) {                                          \
 +  /* Add threads finalization code here.*/                                  \
 +}
 +#endif
 +
 +/**
 + * @brief   Context switch hook.
 + * @details This hook is invoked just before switching between threads.
 + */
 +#if !defined(THREAD_CONTEXT_SWITCH_HOOK) || defined(__DOXYGEN__)
 +#define THREAD_CONTEXT_SWITCH_HOOK(ntp, otp) {                              \
 +  /* System halt code here.*/                                               \
 +}
 +#endif
 +
 +/**
 + * @brief   Idle Loop hook.
 + * @details This hook is continuously invoked by the idle thread loop.
 + */
 +#if !defined(IDLE_LOOP_HOOK) || defined(__DOXYGEN__)
 +#define IDLE_LOOP_HOOK() {                                                  \
 +  /* Idle loop code here.*/                                                 \
 +}
 +#endif
 +
 +/**
 + * @brief   System tick event hook.
 + * @details This hook is invoked in the system tick handler immediately
 + *          after processing the virtual timers queue.
 + */
 +#if !defined(SYSTEM_TICK_EVENT_HOOK) || defined(__DOXYGEN__)
 +#define SYSTEM_TICK_EVENT_HOOK() {                                          \
 +  /* System tick event code here.*/                                         \
 +}
 +#endif
 +
 +/**
 + * @brief   System halt hook.
 + * @details This hook is invoked in case to a system halting error before
 + *          the system is halted.
 + */
 +#if !defined(SYSTEM_HALT_HOOK) || defined(__DOXYGEN__)
 +#define SYSTEM_HALT_HOOK() {                                                \
 +  /* System halt code here.*/                                               \
 +}
 +#endif
 +
 +/** @} */
 +
 +/*===========================================================================*/
 +/* Port-specific settings (override port settings defaulted in chcore.h).    */
 +/*===========================================================================*/
 +
 +#define CORTEX_USE_FPU                FALSE
 +
 +#endif  /* _CHCONF_H_ */
 +
 +/** @} */
 diff --git a/testhal/STM32F4xx/IRQ_STORM/halconf.h b/testhal/STM32F4xx/IRQ_STORM/halconf.h new file mode 100644 index 000000000..117a5979b --- /dev/null +++ b/testhal/STM32F4xx/IRQ_STORM/halconf.h @@ -0,0 +1,312 @@ +/*
 +    ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio
 +
 +    Licensed under the Apache License, Version 2.0 (the "License");
 +    you may not use this file except in compliance with the License.
 +    You may obtain a copy of the License at
 +
 +        http://www.apache.org/licenses/LICENSE-2.0
 +
 +    Unless required by applicable law or agreed to in writing, software
 +    distributed under the License is distributed on an "AS IS" BASIS,
 +    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 +    See the License for the specific language governing permissions and
 +    limitations under the License.
 +*/
 +
 +/**
 + * @file    templates/halconf.h
 + * @brief   HAL configuration header.
 + * @details HAL configuration file, this file allows to enable or disable the
 + *          various device drivers from your application. You may also use
 + *          this file in order to override the device drivers default settings.
 + *
 + * @addtogroup HAL_CONF
 + * @{
 + */
 +
 +#ifndef _HALCONF_H_
 +#define _HALCONF_H_
 +
 +#include "mcuconf.h"
 +
 +/**
 + * @brief   Enables the TM subsystem.
 + */
 +#if !defined(HAL_USE_TM) || defined(__DOXYGEN__)
 +#define HAL_USE_TM                  TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the PAL subsystem.
 + */
 +#if !defined(HAL_USE_PAL) || defined(__DOXYGEN__)
 +#define HAL_USE_PAL                 TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the ADC subsystem.
 + */
 +#if !defined(HAL_USE_ADC) || defined(__DOXYGEN__)
 +#define HAL_USE_ADC                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the CAN subsystem.
 + */
 +#if !defined(HAL_USE_CAN) || defined(__DOXYGEN__)
 +#define HAL_USE_CAN                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the EXT subsystem.
 + */
 +#if !defined(HAL_USE_EXT) || defined(__DOXYGEN__)
 +#define HAL_USE_EXT                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the GPT subsystem.
 + */
 +#if !defined(HAL_USE_GPT) || defined(__DOXYGEN__)
 +#define HAL_USE_GPT                 TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the I2C subsystem.
 + */
 +#if !defined(HAL_USE_I2C) || defined(__DOXYGEN__)
 +#define HAL_USE_I2C                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the ICU subsystem.
 + */
 +#if !defined(HAL_USE_ICU) || defined(__DOXYGEN__)
 +#define HAL_USE_ICU                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the MAC subsystem.
 + */
 +#if !defined(HAL_USE_MAC) || defined(__DOXYGEN__)
 +#define HAL_USE_MAC                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the MMC_SPI subsystem.
 + */
 +#if !defined(HAL_USE_MMC_SPI) || defined(__DOXYGEN__)
 +#define HAL_USE_MMC_SPI             FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the PWM subsystem.
 + */
 +#if !defined(HAL_USE_PWM) || defined(__DOXYGEN__)
 +#define HAL_USE_PWM                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the RTC subsystem.
 + */
 +#if !defined(HAL_USE_RTC) || defined(__DOXYGEN__)
 +#define HAL_USE_RTC                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the SDC subsystem.
 + */
 +#if !defined(HAL_USE_SDC) || defined(__DOXYGEN__)
 +#define HAL_USE_SDC                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the SERIAL subsystem.
 + */
 +#if !defined(HAL_USE_SERIAL) || defined(__DOXYGEN__)
 +#define HAL_USE_SERIAL              TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the SERIAL over USB subsystem.
 + */
 +#if !defined(HAL_USE_SERIAL_USB) || defined(__DOXYGEN__)
 +#define HAL_USE_SERIAL_USB          FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the SPI subsystem.
 + */
 +#if !defined(HAL_USE_SPI) || defined(__DOXYGEN__)
 +#define HAL_USE_SPI                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the UART subsystem.
 + */
 +#if !defined(HAL_USE_UART) || defined(__DOXYGEN__)
 +#define HAL_USE_UART                FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the USB subsystem.
 + */
 +#if !defined(HAL_USE_USB) || defined(__DOXYGEN__)
 +#define HAL_USE_USB                 FALSE
 +#endif
 +
 +/*===========================================================================*/
 +/* ADC driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Enables synchronous APIs.
 + * @note    Disabling this option saves both code and data space.
 + */
 +#if !defined(ADC_USE_WAIT) || defined(__DOXYGEN__)
 +#define ADC_USE_WAIT                TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the @p adcAcquireBus() and @p adcReleaseBus() APIs.
 + * @note    Disabling this option saves both code and data space.
 + */
 +#if !defined(ADC_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
 +#define ADC_USE_MUTUAL_EXCLUSION    TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* CAN driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Sleep mode related APIs inclusion switch.
 + */
 +#if !defined(CAN_USE_SLEEP_MODE) || defined(__DOXYGEN__)
 +#define CAN_USE_SLEEP_MODE          TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* I2C driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Enables the mutual exclusion APIs on the I2C bus.
 + */
 +#if !defined(I2C_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
 +#define I2C_USE_MUTUAL_EXCLUSION    TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* MAC driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Enables an event sources for incoming packets.
 + */
 +#if !defined(MAC_USE_ZERO_COPY) || defined(__DOXYGEN__)
 +#define MAC_USE_ZERO_COPY           FALSE
 +#endif
 +
 +/**
 + * @brief   Enables an event sources for incoming packets.
 + */
 +#if !defined(MAC_USE_EVENTS) || defined(__DOXYGEN__)
 +#define MAC_USE_EVENTS              TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* MMC_SPI driver related settings.                                          */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Delays insertions.
 + * @details If enabled this options inserts delays into the MMC waiting
 + *          routines releasing some extra CPU time for the threads with
 + *          lower priority, this may slow down the driver a bit however.
 + *          This option is recommended also if the SPI driver does not
 + *          use a DMA channel and heavily loads the CPU.
 + */
 +#if !defined(MMC_NICE_WAITING) || defined(__DOXYGEN__)
 +#define MMC_NICE_WAITING            TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* SDC driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Number of initialization attempts before rejecting the card.
 + * @note    Attempts are performed at 10mS intervals.
 + */
 +#if !defined(SDC_INIT_RETRY) || defined(__DOXYGEN__)
 +#define SDC_INIT_RETRY              100
 +#endif
 +
 +/**
 + * @brief   Include support for MMC cards.
 + * @note    MMC support is not yet implemented so this option must be kept
 + *          at @p FALSE.
 + */
 +#if !defined(SDC_MMC_SUPPORT) || defined(__DOXYGEN__)
 +#define SDC_MMC_SUPPORT             FALSE
 +#endif
 +
 +/**
 + * @brief   Delays insertions.
 + * @details If enabled this options inserts delays into the MMC waiting
 + *          routines releasing some extra CPU time for the threads with
 + *          lower priority, this may slow down the driver a bit however.
 + */
 +#if !defined(SDC_NICE_WAITING) || defined(__DOXYGEN__)
 +#define SDC_NICE_WAITING            TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* SERIAL driver related settings.                                           */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Default bit rate.
 + * @details Configuration parameter, this is the baud rate selected for the
 + *          default configuration.
 + */
 +#if !defined(SERIAL_DEFAULT_BITRATE) || defined(__DOXYGEN__)
 +#define SERIAL_DEFAULT_BITRATE      38400
 +#endif
 +
 +/**
 + * @brief   Serial buffers size.
 + * @details Configuration parameter, you can change the depth of the queue
 + *          buffers depending on the requirements of your application.
 + * @note    The default is 64 bytes for both the transmission and receive
 + *          buffers.
 + */
 +#if !defined(SERIAL_BUFFERS_SIZE) || defined(__DOXYGEN__)
 +#define SERIAL_BUFFERS_SIZE         16
 +#endif
 +
 +/*===========================================================================*/
 +/* SPI driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Enables synchronous APIs.
 + * @note    Disabling this option saves both code and data space.
 + */
 +#if !defined(SPI_USE_WAIT) || defined(__DOXYGEN__)
 +#define SPI_USE_WAIT                TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the @p spiAcquireBus() and @p spiReleaseBus() APIs.
 + * @note    Disabling this option saves both code and data space.
 + */
 +#if !defined(SPI_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
 +#define SPI_USE_MUTUAL_EXCLUSION    TRUE
 +#endif
 +
 +#endif /* _HALCONF_H_ */
 +
 +/** @} */
 diff --git a/testhal/STM32F4xx/IRQ_STORM/iar/ch.ewp b/testhal/STM32F4xx/IRQ_STORM/iar/ch.ewp new file mode 100644 index 000000000..ffd2532c1 --- /dev/null +++ b/testhal/STM32F4xx/IRQ_STORM/iar/ch.ewp @@ -0,0 +1,2289 @@ +<?xml version="1.0" encoding="iso-8859-1"?>
 +
 +<project>
 +  <fileVersion>2</fileVersion>
 +  <configuration>
 +    <name>Debug</name>
 +    <toolchain>
 +      <name>ARM</name>
 +    </toolchain>
 +    <debug>1</debug>
 +    <settings>
 +      <name>General</name>
 +      <archiveVersion>3</archiveVersion>
 +      <data>
 +        <version>21</version>
 +        <wantNonLocal>1</wantNonLocal>
 +        <debug>1</debug>
 +        <option>
 +          <name>ExePath</name>
 +          <state>Debug\Exe</state>
 +        </option>
 +        <option>
 +          <name>ObjPath</name>
 +          <state>Debug\Obj</state>
 +        </option>
 +        <option>
 +          <name>ListPath</name>
 +          <state>Debug\List</state>
 +        </option>
 +        <option>
 +          <name>Variant</name>
 +          <version>19</version>
 +          <state>38</state>
 +        </option>
 +        <option>
 +          <name>GEndianMode</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>Input variant</name>
 +          <version>3</version>
 +          <state>6</state>
 +        </option>
 +        <option>
 +          <name>Input description</name>
 +          <state>No specifier n, no float nor long long, no scan set, no assignment suppressing.</state>
 +        </option>
 +        <option>
 +          <name>Output variant</name>
 +          <version>2</version>
 +          <state>7</state>
 +        </option>
 +        <option>
 +          <name>Output description</name>
 +          <state>No specifier a, A, no specifier n, no float nor long long, no flags.</state>
 +        </option>
 +        <option>
 +          <name>GOutputBinary</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>FPU</name>
 +          <version>2</version>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>OGCoreOrChip</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>GRuntimeLibSelect</name>
 +          <version>0</version>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>GRuntimeLibSelectSlave</name>
 +          <version>0</version>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>RTDescription</name>
 +          <state>Use the normal configuration of the C/C++ runtime library. No locale interface, C locale, no file descriptor support, no multibytes in printf and scanf, and no hex floats in strtod.</state>
 +        </option>
 +        <option>
 +          <name>OGProductVersion</name>
 +          <state>5.10.0.159</state>
 +        </option>
 +        <option>
 +          <name>OGLastSavedByProductVersion</name>
 +          <state>6.30.3.53229</state>
 +        </option>
 +        <option>
 +          <name>GeneralEnableMisra</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>GeneralMisraVerbose</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>OGChipSelectEditMenu</name>
 +          <state>STM32F4xxx	ST STM32F4xxx</state>
 +        </option>
 +        <option>
 +          <name>GenLowLevelInterface</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>GEndianModeBE</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>OGBufferedTerminalOutput</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>GenStdoutInterface</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>GeneralMisraRules98</name>
 +          <version>0</version>
 +          <state>1000111110110101101110011100111111101110011011000101110111101101100111111111111100110011111001110111001111111111111111111111111</state>
 +        </option>
 +        <option>
 +          <name>GeneralMisraVer</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>GeneralMisraRules04</name>
 +          <version>0</version>
 +          <state>111101110010111111111000110111111111111111111111111110010111101111010101111111111111111111111111101111111011111001111011111011111111111111111</state>
 +        </option>
 +        <option>
 +          <name>RTConfigPath2</name>
 +          <state>$TOOLKIT_DIR$\INC\c\DLib_Config_Normal.h</state>
 +        </option>
 +        <option>
 +          <name>GFPUCoreSlave</name>
 +          <version>19</version>
 +          <state>38</state>
 +        </option>
 +        <option>
 +          <name>GBECoreSlave</name>
 +          <version>19</version>
 +          <state>38</state>
 +        </option>
 +        <option>
 +          <name>OGUseCmsis</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>OGUseCmsisDspLib</name>
 +          <state>0</state>
 +        </option>
 +      </data>
 +    </settings>
 +    <settings>
 +      <name>ICCARM</name>
 +      <archiveVersion>2</archiveVersion>
 +      <data>
 +        <version>28</version>
 +        <wantNonLocal>1</wantNonLocal>
 +        <debug>1</debug>
 +        <option>
 +          <name>CCDefines</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>CCPreprocFile</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>CCPreprocComments</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>CCPreprocLine</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>CCListCFile</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>CCListCMnemonics</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>CCListCMessages</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>CCListAssFile</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>CCListAssSource</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>CCEnableRemarks</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>CCDiagSuppress</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>CCDiagRemark</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>CCDiagWarning</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>CCDiagError</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>CCObjPrefix</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>CCAllowList</name>
 +          <version>1</version>
 +          <state>0000000</state>
 +        </option>
 +        <option>
 +          <name>CCDebugInfo</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IEndianMode</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IProcessor</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IExtraOptionsCheck</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IExtraOptions</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>CCLangConformance</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>CCSignedPlainChar</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>CCRequirePrototypes</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>CCMultibyteSupport</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>CCDiagWarnAreErr</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>CCCompilerRuntimeInfo</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IFpuProcessor</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>OutputFile</name>
 +          <state>$FILE_BNAME$.o</state>
 +        </option>
 +        <option>
 +          <name>CCLibConfigHeader</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>PreInclude</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>CompilerMisraOverride</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>CCIncludePath2</name>
 +          <state>$PROJ_DIR$\..\</state>
 +          <state>$PROJ_DIR$\..\..\..\..\os\kernel\include</state>
 +          <state>$PROJ_DIR$\..\..\..\..\os\ports\common\ARMCMx</state>
 +          <state>$PROJ_DIR$\..\..\..\..\os\ports\common\ARMCMx\CMSIS\include</state>
 +          <state>$PROJ_DIR$\..\..\..\..\os\ports\IAR\ARMCMx</state>
 +          <state>$PROJ_DIR$\..\..\..\..\os\ports\IAR\ARMCMx\STM32f4xx</state>
 +          <state>$PROJ_DIR$\..\..\..\..\os\hal\include</state>
 +          <state>$PROJ_DIR$\..\..\..\..\os\hal\platforms\STM32</state>
 +          <state>$PROJ_DIR$\..\..\..\..\os\hal\platforms\STM32\DMAv2</state>
 +          <state>$PROJ_DIR$\..\..\..\..\os\hal\platforms\STM32\GPIOv2</state>
 +          <state>$PROJ_DIR$\..\..\..\..\os\hal\platforms\STM32\SPIv1</state>
 +          <state>$PROJ_DIR$\..\..\..\..\os\hal\platforms\STM32\USARTv1</state>
 +          <state>$PROJ_DIR$\..\..\..\..\os\hal\platforms\STM32f4xx</state>
 +          <state>$PROJ_DIR$\..\..\..\..\boards\ST_STM32f4_DISCOVERY</state>
 +          <state>$PROJ_DIR$\..\..\..\..\test</state>
 +        </option>
 +        <option>
 +          <name>CCStdIncCheck</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>CCCodeSection</name>
 +          <state>.text</state>
 +        </option>
 +        <option>
 +          <name>IInterwork2</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IProcessorMode2</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>CCOptLevel</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>CCOptStrategy</name>
 +          <version>0</version>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>CCOptLevelSlave</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>CompilerMisraRules98</name>
 +          <version>0</version>
 +          <state>1000111110110101101110011100111111101110011011000101110111101101100111111111111100110011111001110111001111111111111111111111111</state>
 +        </option>
 +        <option>
 +          <name>CompilerMisraRules04</name>
 +          <version>0</version>
 +          <state>111101110010111111111000110111111111111111111111111110010111101111010101111111111111111111111111101111111011111001111011111011111111111111111</state>
 +        </option>
 +        <option>
 +          <name>CCPosIndRopi</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>CCPosIndRwpi</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>CCPosIndNoDynInit</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IccLang</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IccCDialect</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IccAllowVLA</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IccCppDialect</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IccExceptions</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IccRTTI</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IccStaticDestr</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IccCppInlineSemantics</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IccCmsis</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IccFloatSemantics</name>
 +          <state>0</state>
 +        </option>
 +      </data>
 +    </settings>
 +    <settings>
 +      <name>AARM</name>
 +      <archiveVersion>2</archiveVersion>
 +      <data>
 +        <version>8</version>
 +        <wantNonLocal>1</wantNonLocal>
 +        <debug>1</debug>
 +        <option>
 +          <name>AObjPrefix</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>AEndian</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>ACaseSensitivity</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>MacroChars</name>
 +          <version>0</version>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>AWarnEnable</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>AWarnWhat</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>AWarnOne</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>AWarnRange1</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>AWarnRange2</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>ADebug</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>AltRegisterNames</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>ADefines</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>AList</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>AListHeader</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>AListing</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>Includes</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>MacDefs</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>MacExps</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>MacExec</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>OnlyAssed</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>MultiLine</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>PageLengthCheck</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>PageLength</name>
 +          <state>80</state>
 +        </option>
 +        <option>
 +          <name>TabSpacing</name>
 +          <state>8</state>
 +        </option>
 +        <option>
 +          <name>AXRef</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>AXRefDefines</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>AXRefInternal</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>AXRefDual</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>AProcessor</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>AFpuProcessor</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>AOutputFile</name>
 +          <state>$FILE_BNAME$.o</state>
 +        </option>
 +        <option>
 +          <name>AMultibyteSupport</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>ALimitErrorsCheck</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>ALimitErrorsEdit</name>
 +          <state>100</state>
 +        </option>
 +        <option>
 +          <name>AIgnoreStdInclude</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>AUserIncludes</name>
 +          <state>$PROJ_DIR$\..</state>
 +          <state>$PROJ_DIR$\..\..\..\..\os\ports\IAR\ARMCMx\STM32f4xx</state>
 +          <state>$PROJ_DIR$\..\..\..\..\boards\ST_STM32f4_DISCOVERY</state>
 +        </option>
 +        <option>
 +          <name>AExtraOptionsCheckV2</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>AExtraOptionsV2</name>
 +          <state></state>
 +        </option>
 +      </data>
 +    </settings>
 +    <settings>
 +      <name>OBJCOPY</name>
 +      <archiveVersion>0</archiveVersion>
 +      <data>
 +        <version>1</version>
 +        <wantNonLocal>1</wantNonLocal>
 +        <debug>1</debug>
 +        <option>
 +          <name>OOCOutputFormat</name>
 +          <version>2</version>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>OCOutputOverride</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>OOCOutputFile</name>
 +          <state>ch.srec</state>
 +        </option>
 +        <option>
 +          <name>OOCCommandLineProducer</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>OOCObjCopyEnable</name>
 +          <state>0</state>
 +        </option>
 +      </data>
 +    </settings>
 +    <settings>
 +      <name>CUSTOM</name>
 +      <archiveVersion>3</archiveVersion>
 +      <data>
 +        <extensions></extensions>
 +        <cmdline></cmdline>
 +      </data>
 +    </settings>
 +    <settings>
 +      <name>BICOMP</name>
 +      <archiveVersion>0</archiveVersion>
 +      <data/>
 +    </settings>
 +    <settings>
 +      <name>BUILDACTION</name>
 +      <archiveVersion>1</archiveVersion>
 +      <data>
 +        <prebuild></prebuild>
 +        <postbuild></postbuild>
 +      </data>
 +    </settings>
 +    <settings>
 +      <name>ILINK</name>
 +      <archiveVersion>0</archiveVersion>
 +      <data>
 +        <version>14</version>
 +        <wantNonLocal>1</wantNonLocal>
 +        <debug>1</debug>
 +        <option>
 +          <name>IlinkOutputFile</name>
 +          <state>ch.out</state>
 +        </option>
 +        <option>
 +          <name>IlinkLibIOConfig</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>XLinkMisraHandler</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IlinkInputFileSlave</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IlinkDebugInfoEnable</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IlinkKeepSymbols</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>IlinkRawBinaryFile</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>IlinkRawBinarySymbol</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>IlinkRawBinarySegment</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>IlinkRawBinaryAlign</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>IlinkDefines</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>IlinkConfigDefines</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>IlinkMapFile</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IlinkLogFile</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IlinkLogInitialization</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IlinkLogModule</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IlinkLogSection</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IlinkLogVeneer</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IlinkIcfOverride</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IlinkIcfFile</name>
 +          <state>$PROJ_DIR$\ch.icf</state>
 +        </option>
 +        <option>
 +          <name>IlinkIcfFileSlave</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>IlinkEnableRemarks</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IlinkSuppressDiags</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>IlinkTreatAsRem</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>IlinkTreatAsWarn</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>IlinkTreatAsErr</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>IlinkWarningsAreErrors</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IlinkUseExtraOptions</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IlinkExtraOptions</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>IlinkLowLevelInterfaceSlave</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IlinkAutoLibEnable</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IlinkAdditionalLibs</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>IlinkOverrideProgramEntryLabel</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IlinkProgramEntryLabelSelect</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IlinkProgramEntryLabel</name>
 +          <state>__iar_program_start</state>
 +        </option>
 +        <option>
 +          <name>DoFill</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>FillerByte</name>
 +          <state>0xFF</state>
 +        </option>
 +        <option>
 +          <name>FillerStart</name>
 +          <state>0x0</state>
 +        </option>
 +        <option>
 +          <name>FillerEnd</name>
 +          <state>0x0</state>
 +        </option>
 +        <option>
 +          <name>CrcSize</name>
 +          <version>0</version>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>CrcAlign</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>CrcAlgo</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>CrcPoly</name>
 +          <state>0x11021</state>
 +        </option>
 +        <option>
 +          <name>CrcCompl</name>
 +          <version>0</version>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>CrcBitOrder</name>
 +          <version>0</version>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>CrcInitialValue</name>
 +          <state>0x0</state>
 +        </option>
 +        <option>
 +          <name>DoCrc</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IlinkBE8Slave</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IlinkBufferedTerminalOutput</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IlinkStdoutInterfaceSlave</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>CrcFullSize</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IlinkIElfToolPostProcess</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IlinkLogAutoLibSelect</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IlinkLogRedirSymbols</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IlinkLogUnusedFragments</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IlinkCrcReverseByteOrder</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IlinkCrcUseAsInput</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IlinkOptInline</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IlinkOptExceptionsAllow</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IlinkOptExceptionsForce</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IlinkCmsis</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IlinkOptMergeDuplSections</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IlinkOptUseVfe</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IlinkOptForceVfe</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IlinkStackAnalysisEnable</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IlinkStackControlFile</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>IlinkStackCallGraphFile</name>
 +          <state></state>
 +        </option>
 +      </data>
 +    </settings>
 +    <settings>
 +      <name>IARCHIVE</name>
 +      <archiveVersion>0</archiveVersion>
 +      <data>
 +        <version>0</version>
 +        <wantNonLocal>1</wantNonLocal>
 +        <debug>1</debug>
 +        <option>
 +          <name>IarchiveInputs</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>IarchiveOverride</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IarchiveOutput</name>
 +          <state>###Unitialized###</state>
 +        </option>
 +      </data>
 +    </settings>
 +    <settings>
 +      <name>BILINK</name>
 +      <archiveVersion>0</archiveVersion>
 +      <data/>
 +    </settings>
 +  </configuration>
 +  <configuration>
 +    <name>Release</name>
 +    <toolchain>
 +      <name>ARM</name>
 +    </toolchain>
 +    <debug>0</debug>
 +    <settings>
 +      <name>General</name>
 +      <archiveVersion>3</archiveVersion>
 +      <data>
 +        <version>21</version>
 +        <wantNonLocal>1</wantNonLocal>
 +        <debug>0</debug>
 +        <option>
 +          <name>ExePath</name>
 +          <state>Release\Exe</state>
 +        </option>
 +        <option>
 +          <name>ObjPath</name>
 +          <state>Release\Obj</state>
 +        </option>
 +        <option>
 +          <name>ListPath</name>
 +          <state>Release\List</state>
 +        </option>
 +        <option>
 +          <name>Variant</name>
 +          <version>19</version>
 +          <state>38</state>
 +        </option>
 +        <option>
 +          <name>GEndianMode</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>Input variant</name>
 +          <version>3</version>
 +          <state>6</state>
 +        </option>
 +        <option>
 +          <name>Input description</name>
 +          <state>No specifier n, no float nor long long, no scan set, no assignment suppressing.</state>
 +        </option>
 +        <option>
 +          <name>Output variant</name>
 +          <version>2</version>
 +          <state>7</state>
 +        </option>
 +        <option>
 +          <name>Output description</name>
 +          <state>No specifier a, A, no specifier n, no float nor long long, no flags.</state>
 +        </option>
 +        <option>
 +          <name>GOutputBinary</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>FPU</name>
 +          <version>2</version>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>OGCoreOrChip</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>GRuntimeLibSelect</name>
 +          <version>0</version>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>GRuntimeLibSelectSlave</name>
 +          <version>0</version>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>RTDescription</name>
 +          <state>Use the normal configuration of the C/C++ runtime library. No locale interface, C locale, no file descriptor support, no multibytes in printf and scanf, and no hex floats in strtod.</state>
 +        </option>
 +        <option>
 +          <name>OGProductVersion</name>
 +          <state>5.10.0.159</state>
 +        </option>
 +        <option>
 +          <name>OGLastSavedByProductVersion</name>
 +          <state>6.30.3.53229</state>
 +        </option>
 +        <option>
 +          <name>GeneralEnableMisra</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>GeneralMisraVerbose</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>OGChipSelectEditMenu</name>
 +          <state>STM32F4xxx	ST STM32F4xxx</state>
 +        </option>
 +        <option>
 +          <name>GenLowLevelInterface</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>GEndianModeBE</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>OGBufferedTerminalOutput</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>GenStdoutInterface</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>GeneralMisraRules98</name>
 +          <version>0</version>
 +          <state>1000111110110101101110011100111111101110011011000101110111101101100111111111111100110011111001110111001111111111111111111111111</state>
 +        </option>
 +        <option>
 +          <name>GeneralMisraVer</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>GeneralMisraRules04</name>
 +          <version>0</version>
 +          <state>111101110010111111111000110111111111111111111111111110010111101111010101111111111111111111111111101111111011111001111011111011111111111111111</state>
 +        </option>
 +        <option>
 +          <name>RTConfigPath2</name>
 +          <state>$TOOLKIT_DIR$\INC\c\DLib_Config_Normal.h</state>
 +        </option>
 +        <option>
 +          <name>GFPUCoreSlave</name>
 +          <version>19</version>
 +          <state>38</state>
 +        </option>
 +        <option>
 +          <name>GBECoreSlave</name>
 +          <version>19</version>
 +          <state>38</state>
 +        </option>
 +        <option>
 +          <name>OGUseCmsis</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>OGUseCmsisDspLib</name>
 +          <state>0</state>
 +        </option>
 +      </data>
 +    </settings>
 +    <settings>
 +      <name>ICCARM</name>
 +      <archiveVersion>2</archiveVersion>
 +      <data>
 +        <version>28</version>
 +        <wantNonLocal>1</wantNonLocal>
 +        <debug>0</debug>
 +        <option>
 +          <name>CCDefines</name>
 +          <state>NDEBUG</state>
 +        </option>
 +        <option>
 +          <name>CCPreprocFile</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>CCPreprocComments</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>CCPreprocLine</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>CCListCFile</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>CCListCMnemonics</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>CCListCMessages</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>CCListAssFile</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>CCListAssSource</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>CCEnableRemarks</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>CCDiagSuppress</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>CCDiagRemark</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>CCDiagWarning</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>CCDiagError</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>CCObjPrefix</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>CCAllowList</name>
 +          <version>1</version>
 +          <state>1111111</state>
 +        </option>
 +        <option>
 +          <name>CCDebugInfo</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IEndianMode</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IProcessor</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IExtraOptionsCheck</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IExtraOptions</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>CCLangConformance</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>CCSignedPlainChar</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>CCRequirePrototypes</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>CCMultibyteSupport</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>CCDiagWarnAreErr</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>CCCompilerRuntimeInfo</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IFpuProcessor</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>OutputFile</name>
 +          <state>$FILE_BNAME$.o</state>
 +        </option>
 +        <option>
 +          <name>CCLibConfigHeader</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>PreInclude</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>CompilerMisraOverride</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>CCIncludePath2</name>
 +          <state>$PROJ_DIR$\..\</state>
 +          <state>$PROJ_DIR$\..\..\..\..\os\kernel\include</state>
 +          <state>$PROJ_DIR$\..\..\..\..\os\ports\common\ARMCMx</state>
 +          <state>$PROJ_DIR$\..\..\..\..\os\ports\common\ARMCMx\CMSIS\include</state>
 +          <state>$PROJ_DIR$\..\..\..\..\os\ports\IAR\ARMCMx</state>
 +          <state>$PROJ_DIR$\..\..\..\..\os\ports\IAR\ARMCMx\STM32f4xx</state>
 +          <state>$PROJ_DIR$\..\..\..\..\os\hal\include</state>
 +          <state>$PROJ_DIR$\..\..\..\..\os\hal\platforms\STM32</state>
 +          <state>$PROJ_DIR$\..\..\..\..\os\hal\platforms\STM32\DMAv2</state>
 +          <state>$PROJ_DIR$\..\..\..\..\os\hal\platforms\STM32\GPIOv2</state>
 +          <state>$PROJ_DIR$\..\..\..\..\os\hal\platforms\STM32\SPIv1</state>
 +          <state>$PROJ_DIR$\..\..\..\..\os\hal\platforms\STM32\USARTv1</state>
 +          <state>$PROJ_DIR$\..\..\..\..\os\hal\platforms\STM32f4xx</state>
 +          <state>$PROJ_DIR$\..\..\..\..\boards\ST_STM32f4_DISCOVERY</state>
 +          <state>$PROJ_DIR$\..\..\..\..\test</state>
 +        </option>
 +        <option>
 +          <name>CCStdIncCheck</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>CCCodeSection</name>
 +          <state>.text</state>
 +        </option>
 +        <option>
 +          <name>IInterwork2</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IProcessorMode2</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>CCOptLevel</name>
 +          <state>3</state>
 +        </option>
 +        <option>
 +          <name>CCOptStrategy</name>
 +          <version>0</version>
 +          <state>2</state>
 +        </option>
 +        <option>
 +          <name>CCOptLevelSlave</name>
 +          <state>3</state>
 +        </option>
 +        <option>
 +          <name>CompilerMisraRules98</name>
 +          <version>0</version>
 +          <state>1000111110110101101110011100111111101110011011000101110111101101100111111111111100110011111001110111001111111111111111111111111</state>
 +        </option>
 +        <option>
 +          <name>CompilerMisraRules04</name>
 +          <version>0</version>
 +          <state>111101110010111111111000110111111111111111111111111110010111101111010101111111111111111111111111101111111011111001111011111011111111111111111</state>
 +        </option>
 +        <option>
 +          <name>CCPosIndRopi</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>CCPosIndRwpi</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>CCPosIndNoDynInit</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IccLang</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IccCDialect</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IccAllowVLA</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IccCppDialect</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IccExceptions</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IccRTTI</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IccStaticDestr</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IccCppInlineSemantics</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IccCmsis</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IccFloatSemantics</name>
 +          <state>0</state>
 +        </option>
 +      </data>
 +    </settings>
 +    <settings>
 +      <name>AARM</name>
 +      <archiveVersion>2</archiveVersion>
 +      <data>
 +        <version>8</version>
 +        <wantNonLocal>1</wantNonLocal>
 +        <debug>0</debug>
 +        <option>
 +          <name>AObjPrefix</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>AEndian</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>ACaseSensitivity</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>MacroChars</name>
 +          <version>0</version>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>AWarnEnable</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>AWarnWhat</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>AWarnOne</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>AWarnRange1</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>AWarnRange2</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>ADebug</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>AltRegisterNames</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>ADefines</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>AList</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>AListHeader</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>AListing</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>Includes</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>MacDefs</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>MacExps</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>MacExec</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>OnlyAssed</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>MultiLine</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>PageLengthCheck</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>PageLength</name>
 +          <state>80</state>
 +        </option>
 +        <option>
 +          <name>TabSpacing</name>
 +          <state>8</state>
 +        </option>
 +        <option>
 +          <name>AXRef</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>AXRefDefines</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>AXRefInternal</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>AXRefDual</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>AProcessor</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>AFpuProcessor</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>AOutputFile</name>
 +          <state>$FILE_BNAME$.o</state>
 +        </option>
 +        <option>
 +          <name>AMultibyteSupport</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>ALimitErrorsCheck</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>ALimitErrorsEdit</name>
 +          <state>100</state>
 +        </option>
 +        <option>
 +          <name>AIgnoreStdInclude</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>AUserIncludes</name>
 +          <state>$PROJ_DIR$\..</state>
 +          <state>$PROJ_DIR$\..\..\..\..\os\ports\IAR\ARMCMx\STM32f4xx</state>
 +          <state>$PROJ_DIR$\..\..\..\..\boards\ST_STM32f4_DISCOVERY</state>
 +        </option>
 +        <option>
 +          <name>AExtraOptionsCheckV2</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>AExtraOptionsV2</name>
 +          <state></state>
 +        </option>
 +      </data>
 +    </settings>
 +    <settings>
 +      <name>OBJCOPY</name>
 +      <archiveVersion>0</archiveVersion>
 +      <data>
 +        <version>1</version>
 +        <wantNonLocal>1</wantNonLocal>
 +        <debug>0</debug>
 +        <option>
 +          <name>OOCOutputFormat</name>
 +          <version>2</version>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>OCOutputOverride</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>OOCOutputFile</name>
 +          <state>ch.hex</state>
 +        </option>
 +        <option>
 +          <name>OOCCommandLineProducer</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>OOCObjCopyEnable</name>
 +          <state>1</state>
 +        </option>
 +      </data>
 +    </settings>
 +    <settings>
 +      <name>CUSTOM</name>
 +      <archiveVersion>3</archiveVersion>
 +      <data>
 +        <extensions></extensions>
 +        <cmdline></cmdline>
 +      </data>
 +    </settings>
 +    <settings>
 +      <name>BICOMP</name>
 +      <archiveVersion>0</archiveVersion>
 +      <data/>
 +    </settings>
 +    <settings>
 +      <name>BUILDACTION</name>
 +      <archiveVersion>1</archiveVersion>
 +      <data>
 +        <prebuild></prebuild>
 +        <postbuild></postbuild>
 +      </data>
 +    </settings>
 +    <settings>
 +      <name>ILINK</name>
 +      <archiveVersion>0</archiveVersion>
 +      <data>
 +        <version>14</version>
 +        <wantNonLocal>1</wantNonLocal>
 +        <debug>0</debug>
 +        <option>
 +          <name>IlinkOutputFile</name>
 +          <state>ch.out</state>
 +        </option>
 +        <option>
 +          <name>IlinkLibIOConfig</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>XLinkMisraHandler</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IlinkInputFileSlave</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IlinkDebugInfoEnable</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IlinkKeepSymbols</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>IlinkRawBinaryFile</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>IlinkRawBinarySymbol</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>IlinkRawBinarySegment</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>IlinkRawBinaryAlign</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>IlinkDefines</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>IlinkConfigDefines</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>IlinkMapFile</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IlinkLogFile</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IlinkLogInitialization</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IlinkLogModule</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IlinkLogSection</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IlinkLogVeneer</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IlinkIcfOverride</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IlinkIcfFile</name>
 +          <state>$PROJ_DIR$\ch.icf</state>
 +        </option>
 +        <option>
 +          <name>IlinkIcfFileSlave</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>IlinkEnableRemarks</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IlinkSuppressDiags</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>IlinkTreatAsRem</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>IlinkTreatAsWarn</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>IlinkTreatAsErr</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>IlinkWarningsAreErrors</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IlinkUseExtraOptions</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IlinkExtraOptions</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>IlinkLowLevelInterfaceSlave</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IlinkAutoLibEnable</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IlinkAdditionalLibs</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>IlinkOverrideProgramEntryLabel</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IlinkProgramEntryLabelSelect</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IlinkProgramEntryLabel</name>
 +          <state>__iar_program_start</state>
 +        </option>
 +        <option>
 +          <name>DoFill</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>FillerByte</name>
 +          <state>0xFF</state>
 +        </option>
 +        <option>
 +          <name>FillerStart</name>
 +          <state>0x0</state>
 +        </option>
 +        <option>
 +          <name>FillerEnd</name>
 +          <state>0x0</state>
 +        </option>
 +        <option>
 +          <name>CrcSize</name>
 +          <version>0</version>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>CrcAlign</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>CrcAlgo</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>CrcPoly</name>
 +          <state>0x11021</state>
 +        </option>
 +        <option>
 +          <name>CrcCompl</name>
 +          <version>0</version>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>CrcBitOrder</name>
 +          <version>0</version>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>CrcInitialValue</name>
 +          <state>0x0</state>
 +        </option>
 +        <option>
 +          <name>DoCrc</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IlinkBE8Slave</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IlinkBufferedTerminalOutput</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IlinkStdoutInterfaceSlave</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>CrcFullSize</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IlinkIElfToolPostProcess</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IlinkLogAutoLibSelect</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IlinkLogRedirSymbols</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IlinkLogUnusedFragments</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IlinkCrcReverseByteOrder</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IlinkCrcUseAsInput</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IlinkOptInline</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IlinkOptExceptionsAllow</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IlinkOptExceptionsForce</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IlinkCmsis</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IlinkOptMergeDuplSections</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IlinkOptUseVfe</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IlinkOptForceVfe</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IlinkStackAnalysisEnable</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IlinkStackControlFile</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>IlinkStackCallGraphFile</name>
 +          <state></state>
 +        </option>
 +      </data>
 +    </settings>
 +    <settings>
 +      <name>IARCHIVE</name>
 +      <archiveVersion>0</archiveVersion>
 +      <data>
 +        <version>0</version>
 +        <wantNonLocal>1</wantNonLocal>
 +        <debug>0</debug>
 +        <option>
 +          <name>IarchiveInputs</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>IarchiveOverride</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IarchiveOutput</name>
 +          <state>###Unitialized###</state>
 +        </option>
 +      </data>
 +    </settings>
 +    <settings>
 +      <name>BILINK</name>
 +      <archiveVersion>0</archiveVersion>
 +      <data/>
 +    </settings>
 +  </configuration>
 +  <group>
 +    <name>board</name>
 +    <file>
 +      <name>$PROJ_DIR$\..\..\..\..\boards\ST_STM32f4_DISCOVERY\board.c</name>
 +    </file>
 +    <file>
 +      <name>$PROJ_DIR$\..\..\..\..\boards\ST_STM32f4_DISCOVERY\board.h</name>
 +    </file>
 +  </group>
 +  <group>
 +    <name>os</name>
 +    <group>
 +      <name>hal</name>
 +      <group>
 +        <name>include</name>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\hal\include\adc.h</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\hal\include\can.h</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\hal\include\ext.h</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\hal\include\gpt.h</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\hal\include\hal.h</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\hal\include\i2c.h</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\hal\include\icu.h</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\hal\include\mac.h</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\hal\include\mii.h</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\hal\include\mmc_spi.h</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\hal\include\pal.h</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\hal\include\pwm.h</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\hal\include\rtc.h</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\hal\include\sdc.h</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\hal\include\serial.h</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\hal\include\serial_usb.h</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\hal\include\spi.h</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\hal\include\tm.h</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\hal\include\uart.h</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\hal\include\usb.h</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\hal\include\usb_cdc.h</name>
 +        </file>
 +      </group>
 +      <group>
 +        <name>src</name>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\hal\src\adc.c</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\hal\src\can.c</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\hal\src\ext.c</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\hal\src\gpt.c</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\hal\src\hal.c</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\hal\src\i2c.c</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\hal\src\icu.c</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\hal\src\mac.c</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\hal\src\mmc_spi.c</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\hal\src\pal.c</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\hal\src\pwm.c</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\hal\src\rtc.c</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\hal\src\sdc.c</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\hal\src\serial.c</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\hal\src\serial_usb.c</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\hal\src\spi.c</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\hal\src\tm.c</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\hal\src\uart.c</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\hal\src\usb.c</name>
 +        </file>
 +      </group>
 +    </group>
 +    <group>
 +      <name>kernel</name>
 +      <group>
 +        <name>include</name>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\kernel\include\ch.h</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\kernel\include\chcond.h</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\kernel\include\chdebug.h</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\kernel\include\chdynamic.h</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\kernel\include\chevents.h</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\kernel\include\chheap.h</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\kernel\include\chinline.h</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\kernel\include\chioch.h</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\kernel\include\chlists.h</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\kernel\include\chmboxes.h</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\kernel\include\chmemcore.h</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\kernel\include\chmempools.h</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\kernel\include\chmsg.h</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\kernel\include\chmtx.h</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\kernel\include\chqueues.h</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\kernel\include\chregistry.h</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\kernel\include\chschd.h</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\kernel\include\chsem.h</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\kernel\include\chstreams.h</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\kernel\include\chsys.h</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\kernel\include\chthreads.h</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\kernel\include\chvt.h</name>
 +        </file>
 +      </group>
 +      <group>
 +        <name>src</name>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\kernel\src\chcond.c</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\kernel\src\chdebug.c</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\kernel\src\chdynamic.c</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\kernel\src\chevents.c</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\kernel\src\chheap.c</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\kernel\src\chlists.c</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\kernel\src\chmboxes.c</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\kernel\src\chmemcore.c</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\kernel\src\chmempools.c</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\kernel\src\chmsg.c</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\kernel\src\chmtx.c</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\kernel\src\chqueues.c</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\kernel\src\chregistry.c</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\kernel\src\chschd.c</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\kernel\src\chsem.c</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\kernel\src\chsys.c</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\kernel\src\chthreads.c</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\kernel\src\chvt.c</name>
 +        </file>
 +      </group>
 +    </group>
 +    <group>
 +      <name>platform</name>
 +      <file>
 +        <name>$PROJ_DIR$\..\..\..\..\os\hal\platforms\STM32\gpt_lld.c</name>
 +      </file>
 +      <file>
 +        <name>$PROJ_DIR$\..\..\..\..\os\hal\platforms\STM32\gpt_lld.h</name>
 +      </file>
 +      <file>
 +        <name>$PROJ_DIR$\..\..\..\..\os\hal\platforms\STM32f4xx\hal_lld.c</name>
 +      </file>
 +      <file>
 +        <name>$PROJ_DIR$\..\..\..\..\os\hal\platforms\STM32f4xx\hal_lld.h</name>
 +      </file>
 +      <file>
 +        <name>$PROJ_DIR$\..\..\..\..\os\hal\platforms\STM32\GPIOv2\pal_lld.c</name>
 +      </file>
 +      <file>
 +        <name>$PROJ_DIR$\..\..\..\..\os\hal\platforms\STM32\GPIOv2\pal_lld.h</name>
 +      </file>
 +      <file>
 +        <name>$PROJ_DIR$\..\..\..\..\os\hal\platforms\STM32\USARTv1\serial_lld.c</name>
 +      </file>
 +      <file>
 +        <name>$PROJ_DIR$\..\..\..\..\os\hal\platforms\STM32\USARTv1\serial_lld.h</name>
 +      </file>
 +      <file>
 +        <name>$PROJ_DIR$\..\..\..\..\os\hal\platforms\STM32\SPIv1\spi_lld.c</name>
 +      </file>
 +      <file>
 +        <name>$PROJ_DIR$\..\..\..\..\os\hal\platforms\STM32\SPIv1\spi_lld.h</name>
 +      </file>
 +      <file>
 +        <name>$PROJ_DIR$\..\..\..\..\os\hal\platforms\STM32f4xx\stm32_dma.c</name>
 +      </file>
 +      <file>
 +        <name>$PROJ_DIR$\..\..\..\..\os\hal\platforms\STM32f4xx\stm32_dma.h</name>
 +      </file>
 +      <file>
 +        <name>$PROJ_DIR$\..\..\..\..\os\hal\platforms\STM32f4xx\stm32f4xx.h</name>
 +      </file>
 +    </group>
 +    <group>
 +      <name>port</name>
 +      <group>
 +        <name>STM32F4xx</name>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\ports\IAR\ARMCMx\STM32f4xx\cmparams.h</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\ports\IAR\ARMCMx\STM32f4xx\vectors.s</name>
 +        </file>
 +      </group>
 +      <file>
 +        <name>$PROJ_DIR$\..\..\..\..\os\ports\IAR\ARMCMx\chcore.c</name>
 +      </file>
 +      <file>
 +        <name>$PROJ_DIR$\..\..\..\..\os\ports\IAR\ARMCMx\chcore.h</name>
 +      </file>
 +      <file>
 +        <name>$PROJ_DIR$\..\..\..\..\os\ports\IAR\ARMCMx\chcore_v7m.c</name>
 +      </file>
 +      <file>
 +        <name>$PROJ_DIR$\..\..\..\..\os\ports\IAR\ARMCMx\chcore_v7m.h</name>
 +      </file>
 +      <file>
 +        <name>$PROJ_DIR$\..\..\..\..\os\ports\IAR\ARMCMx\chcoreasm_v7m.s</name>
 +      </file>
 +      <file>
 +        <name>$PROJ_DIR$\..\..\..\..\os\ports\IAR\ARMCMx\chtypes.h</name>
 +      </file>
 +      <file>
 +        <name>$PROJ_DIR$\..\..\..\..\os\ports\IAR\ARMCMx\cstartup.s</name>
 +      </file>
 +      <file>
 +        <name>$PROJ_DIR$\..\..\..\..\os\ports\common\ARMCMx\nvic.c</name>
 +      </file>
 +      <file>
 +        <name>$PROJ_DIR$\..\..\..\..\os\ports\common\ARMCMx\nvic.h</name>
 +      </file>
 +    </group>
 +  </group>
 +  <group>
 +    <name>test</name>
 +    <file>
 +      <name>$PROJ_DIR$\..\..\..\..\test\test.c</name>
 +    </file>
 +    <file>
 +      <name>$PROJ_DIR$\..\..\..\..\test\test.h</name>
 +    </file>
 +    <file>
 +      <name>$PROJ_DIR$\..\..\..\..\test\testbmk.c</name>
 +    </file>
 +    <file>
 +      <name>$PROJ_DIR$\..\..\..\..\test\testbmk.h</name>
 +    </file>
 +    <file>
 +      <name>$PROJ_DIR$\..\..\..\..\test\testdyn.c</name>
 +    </file>
 +    <file>
 +      <name>$PROJ_DIR$\..\..\..\..\test\testdyn.h</name>
 +    </file>
 +    <file>
 +      <name>$PROJ_DIR$\..\..\..\..\test\testevt.c</name>
 +    </file>
 +    <file>
 +      <name>$PROJ_DIR$\..\..\..\..\test\testevt.h</name>
 +    </file>
 +    <file>
 +      <name>$PROJ_DIR$\..\..\..\..\test\testheap.c</name>
 +    </file>
 +    <file>
 +      <name>$PROJ_DIR$\..\..\..\..\test\testheap.h</name>
 +    </file>
 +    <file>
 +      <name>$PROJ_DIR$\..\..\..\..\test\testmbox.c</name>
 +    </file>
 +    <file>
 +      <name>$PROJ_DIR$\..\..\..\..\test\testmbox.h</name>
 +    </file>
 +    <file>
 +      <name>$PROJ_DIR$\..\..\..\..\test\testmsg.c</name>
 +    </file>
 +    <file>
 +      <name>$PROJ_DIR$\..\..\..\..\test\testmsg.h</name>
 +    </file>
 +    <file>
 +      <name>$PROJ_DIR$\..\..\..\..\test\testmtx.c</name>
 +    </file>
 +    <file>
 +      <name>$PROJ_DIR$\..\..\..\..\test\testmtx.h</name>
 +    </file>
 +    <file>
 +      <name>$PROJ_DIR$\..\..\..\..\test\testpools.c</name>
 +    </file>
 +    <file>
 +      <name>$PROJ_DIR$\..\..\..\..\test\testpools.h</name>
 +    </file>
 +    <file>
 +      <name>$PROJ_DIR$\..\..\..\..\test\testqueues.c</name>
 +    </file>
 +    <file>
 +      <name>$PROJ_DIR$\..\..\..\..\test\testqueues.h</name>
 +    </file>
 +    <file>
 +      <name>$PROJ_DIR$\..\..\..\..\test\testsem.c</name>
 +    </file>
 +    <file>
 +      <name>$PROJ_DIR$\..\..\..\..\test\testsem.h</name>
 +    </file>
 +    <file>
 +      <name>$PROJ_DIR$\..\..\..\..\test\testthd.c</name>
 +    </file>
 +    <file>
 +      <name>$PROJ_DIR$\..\..\..\..\test\testthd.h</name>
 +    </file>
 +  </group>
 +  <file>
 +    <name>$PROJ_DIR$\..\chconf.h</name>
 +  </file>
 +  <file>
 +    <name>$PROJ_DIR$\..\halconf.h</name>
 +  </file>
 +  <file>
 +    <name>$PROJ_DIR$\..\main.c</name>
 +  </file>
 +  <file>
 +    <name>$PROJ_DIR$\..\mcuconf.h</name>
 +  </file>
 +</project>
 +
 +
 diff --git a/testhal/STM32F4xx/IRQ_STORM/iar/ch.eww b/testhal/STM32F4xx/IRQ_STORM/iar/ch.eww new file mode 100644 index 000000000..f9b3b2000 --- /dev/null +++ b/testhal/STM32F4xx/IRQ_STORM/iar/ch.eww @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="iso-8859-1"?>
 +
 +<workspace>
 +  <project>
 +    <path>$WS_DIR$\ch.ewp</path>
 +  </project>
 +  <batchBuild/>
 +</workspace>
 +
 +
 diff --git a/testhal/STM32F4xx/IRQ_STORM/iar/ch.icf b/testhal/STM32F4xx/IRQ_STORM/iar/ch.icf new file mode 100644 index 000000000..c0a51f44c --- /dev/null +++ b/testhal/STM32F4xx/IRQ_STORM/iar/ch.icf @@ -0,0 +1,39 @@ +/*###ICF### Section handled by ICF editor, don't touch! ****/
 +/*-Editor annotation file-*/
 +/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */
 +/*-Specials-*/
 +define symbol __ICFEDIT_intvec_start__ = 0x08000000;
 +/*-Memory Regions-*/
 +define symbol __ICFEDIT_region_ROM_start__ = 0x08000000;
 +define symbol __ICFEDIT_region_ROM_end__   = 0x0801FFFF;
 +define symbol __ICFEDIT_region_RAM_start__ = 0x20000000;
 +define symbol __ICFEDIT_region_RAM_end__   = 0x2001FFFF;
 +/*-Sizes-*/
 +define symbol __ICFEDIT_size_cstack__ = 0x400;
 +define symbol __ICFEDIT_size_heap__   = 0x400;
 +/**** End of ICF editor section. ###ICF###*/
 +
 +/* Size of the IRQ Stack (Main Stack).*/
 +define symbol __ICFEDIT_size_irqstack__   = 0x400;
 +
 +define memory mem with size = 4G;
 +define region ROM_region   = mem:[from __ICFEDIT_region_ROM_start__   to __ICFEDIT_region_ROM_end__];
 +define region RAM_region   = mem:[from __ICFEDIT_region_RAM_start__   to __ICFEDIT_region_RAM_end__];
 +
 +define block CSTACK    with alignment = 8, size = __ICFEDIT_size_cstack__   {section CSTACK};
 +define block IRQSTACK  with alignment = 8, size = __ICFEDIT_size_irqstack__ {};
 +define block HEAP      with alignment = 8, size = __ICFEDIT_size_heap__     {};
 +define block SYSHEAP   with alignment = 8                                   {section SYSHEAP};
 +define block DATABSS with alignment = 8 {readwrite, zeroinit};
 +
 +initialize by copy { readwrite };
 +do not initialize  { section .noinit };
 +
 +keep { section .intvec };
 +
 +place at address mem:__ICFEDIT_intvec_start__ {section .intvec};
 +place in ROM_region                           {readonly};
 +place at start of RAM_region                  {block IRQSTACK};
 +place in RAM_region                           {block DATABSS, block HEAP};
 +place in RAM_region                           {block SYSHEAP};
 +place at end of RAM_region                    {block CSTACK};
 diff --git a/testhal/STM32F4xx/IRQ_STORM/keil/ch.uvproj b/testhal/STM32F4xx/IRQ_STORM/keil/ch.uvproj new file mode 100644 index 000000000..b5e042b8a --- /dev/null +++ b/testhal/STM32F4xx/IRQ_STORM/keil/ch.uvproj @@ -0,0 +1,945 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no" ?> +<Project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_proj.xsd"> + +  <SchemaVersion>1.1</SchemaVersion> + +  <Header>### uVision Project, (C) Keil Software</Header> + +  <Targets> +    <Target> +      <TargetName>Demo</TargetName> +      <ToolsetNumber>0x4</ToolsetNumber> +      <ToolsetName>ARM-ADS</ToolsetName> +      <TargetOption> +        <TargetCommonOption> +          <Device>STM32F407VG</Device> +          <Vendor>STMicroelectronics</Vendor> +          <Cpu>IRAM(0x20000000-0x2001FFFF) IRAM2(0x10000000-0x1000FFFF) IROM(0x8000000-0x80FFFFF) CLOCK(25000000) CPUTYPE("Cortex-M4") FPU2</Cpu> +          <FlashUtilSpec></FlashUtilSpec> +          <StartupFile>"Startup\ST\STM32F4xx\startup_stm32f4xx.s" ("STM32F4xx Startup Code")</StartupFile> +          <FlashDriverDll>UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F4xx_1024 -FS08000000 -FL0100000)</FlashDriverDll> +          <DeviceId>6103</DeviceId> +          <RegisterFile>stm32f4xx.h</RegisterFile> +          <MemoryEnv></MemoryEnv> +          <Cmp></Cmp> +          <Asm></Asm> +          <Linker></Linker> +          <OHString></OHString> +          <InfinionOptionDll></InfinionOptionDll> +          <SLE66CMisc></SLE66CMisc> +          <SLE66AMisc></SLE66AMisc> +          <SLE66LinkerMisc></SLE66LinkerMisc> +          <SFDFile>SFD\ST\STM32F4xx\STM32F4xx.sfr</SFDFile> +          <UseEnv>0</UseEnv> +          <BinPath></BinPath> +          <IncludePath></IncludePath> +          <LibPath></LibPath> +          <RegisterFilePath>ST\STM32F4xx\</RegisterFilePath> +          <DBRegisterFilePath>ST\STM32F4xx\</DBRegisterFilePath> +          <TargetStatus> +            <Error>0</Error> +            <ExitCodeStop>0</ExitCodeStop> +            <ButtonStop>0</ButtonStop> +            <NotGenerated>0</NotGenerated> +            <InvalidFlash>1</InvalidFlash> +          </TargetStatus> +          <OutputDirectory>.\obj\</OutputDirectory> +          <OutputName>ch</OutputName> +          <CreateExecutable>1</CreateExecutable> +          <CreateLib>0</CreateLib> +          <CreateHexFile>0</CreateHexFile> +          <DebugInformation>1</DebugInformation> +          <BrowseInformation>1</BrowseInformation> +          <ListingPath>.\lst\</ListingPath> +          <HexFormatSelection>1</HexFormatSelection> +          <Merge32K>0</Merge32K> +          <CreateBatchFile>0</CreateBatchFile> +          <BeforeCompile> +            <RunUserProg1>0</RunUserProg1> +            <RunUserProg2>0</RunUserProg2> +            <UserProg1Name></UserProg1Name> +            <UserProg2Name></UserProg2Name> +            <UserProg1Dos16Mode>0</UserProg1Dos16Mode> +            <UserProg2Dos16Mode>0</UserProg2Dos16Mode> +          </BeforeCompile> +          <BeforeMake> +            <RunUserProg1>0</RunUserProg1> +            <RunUserProg2>0</RunUserProg2> +            <UserProg1Name></UserProg1Name> +            <UserProg2Name></UserProg2Name> +            <UserProg1Dos16Mode>0</UserProg1Dos16Mode> +            <UserProg2Dos16Mode>0</UserProg2Dos16Mode> +          </BeforeMake> +          <AfterMake> +            <RunUserProg1>0</RunUserProg1> +            <RunUserProg2>0</RunUserProg2> +            <UserProg1Name></UserProg1Name> +            <UserProg2Name></UserProg2Name> +            <UserProg1Dos16Mode>0</UserProg1Dos16Mode> +            <UserProg2Dos16Mode>0</UserProg2Dos16Mode> +          </AfterMake> +          <SelectedForBatchBuild>0</SelectedForBatchBuild> +          <SVCSIdString></SVCSIdString> +        </TargetCommonOption> +        <CommonProperty> +          <UseCPPCompiler>0</UseCPPCompiler> +          <RVCTCodeConst>0</RVCTCodeConst> +          <RVCTZI>0</RVCTZI> +          <RVCTOtherData>0</RVCTOtherData> +          <ModuleSelection>0</ModuleSelection> +          <IncludeInBuild>1</IncludeInBuild> +          <AlwaysBuild>0</AlwaysBuild> +          <GenerateAssemblyFile>0</GenerateAssemblyFile> +          <AssembleAssemblyFile>0</AssembleAssemblyFile> +          <PublicsOnly>0</PublicsOnly> +          <StopOnExitCode>3</StopOnExitCode> +          <CustomArgument></CustomArgument> +          <IncludeLibraryModules></IncludeLibraryModules> +        </CommonProperty> +        <DllOption> +          <SimDllName>SARMCM3.DLL</SimDllName> +          <SimDllArguments>-MPU</SimDllArguments> +          <SimDlgDll>DCM.DLL</SimDlgDll> +          <SimDlgDllArguments>-pCM4</SimDlgDllArguments> +          <TargetDllName>SARMCM3.DLL</TargetDllName> +          <TargetDllArguments>-MPU</TargetDllArguments> +          <TargetDlgDll>TCM.DLL</TargetDlgDll> +          <TargetDlgDllArguments>-pCM4</TargetDlgDllArguments> +        </DllOption> +        <DebugOption> +          <OPTHX> +            <HexSelection>1</HexSelection> +            <HexRangeLowAddress>0</HexRangeLowAddress> +            <HexRangeHighAddress>0</HexRangeHighAddress> +            <HexOffset>0</HexOffset> +            <Oh166RecLen>16</Oh166RecLen> +          </OPTHX> +          <Simulator> +            <UseSimulator>0</UseSimulator> +            <LoadApplicationAtStartup>1</LoadApplicationAtStartup> +            <RunToMain>1</RunToMain> +            <RestoreBreakpoints>1</RestoreBreakpoints> +            <RestoreWatchpoints>1</RestoreWatchpoints> +            <RestoreMemoryDisplay>1</RestoreMemoryDisplay> +            <RestoreFunctions>1</RestoreFunctions> +            <RestoreToolbox>1</RestoreToolbox> +            <LimitSpeedToRealTime>0</LimitSpeedToRealTime> +          </Simulator> +          <Target> +            <UseTarget>1</UseTarget> +            <LoadApplicationAtStartup>1</LoadApplicationAtStartup> +            <RunToMain>0</RunToMain> +            <RestoreBreakpoints>1</RestoreBreakpoints> +            <RestoreWatchpoints>1</RestoreWatchpoints> +            <RestoreMemoryDisplay>1</RestoreMemoryDisplay> +            <RestoreFunctions>0</RestoreFunctions> +            <RestoreToolbox>1</RestoreToolbox> +          </Target> +          <RunDebugAfterBuild>0</RunDebugAfterBuild> +          <TargetSelection>8</TargetSelection> +          <SimDlls> +            <CpuDll></CpuDll> +            <CpuDllArguments></CpuDllArguments> +            <PeripheralDll></PeripheralDll> +            <PeripheralDllArguments></PeripheralDllArguments> +            <InitializationFile></InitializationFile> +          </SimDlls> +          <TargetDlls> +            <CpuDll></CpuDll> +            <CpuDllArguments></CpuDllArguments> +            <PeripheralDll></PeripheralDll> +            <PeripheralDllArguments></PeripheralDllArguments> +            <InitializationFile></InitializationFile> +            <Driver>STLink\ST-LINKIII-KEIL.dll</Driver> +          </TargetDlls> +        </DebugOption> +        <Utilities> +          <Flash1> +            <UseTargetDll>1</UseTargetDll> +            <UseExternalTool>0</UseExternalTool> +            <RunIndependent>0</RunIndependent> +            <UpdateFlashBeforeDebugging>1</UpdateFlashBeforeDebugging> +            <Capability>1</Capability> +            <DriverSelection>4100</DriverSelection> +          </Flash1> +          <Flash2>STLink\ST-LINKIII-KEIL.dll</Flash2> +          <Flash3>"" ()</Flash3> +          <Flash4></Flash4> +        </Utilities> +        <TargetArmAds> +          <ArmAdsMisc> +            <GenerateListings>0</GenerateListings> +            <asHll>1</asHll> +            <asAsm>1</asAsm> +            <asMacX>1</asMacX> +            <asSyms>1</asSyms> +            <asFals>1</asFals> +            <asDbgD>1</asDbgD> +            <asForm>1</asForm> +            <ldLst>0</ldLst> +            <ldmm>1</ldmm> +            <ldXref>1</ldXref> +            <BigEnd>0</BigEnd> +            <AdsALst>1</AdsALst> +            <AdsACrf>1</AdsACrf> +            <AdsANop>0</AdsANop> +            <AdsANot>0</AdsANot> +            <AdsLLst>1</AdsLLst> +            <AdsLmap>1</AdsLmap> +            <AdsLcgr>1</AdsLcgr> +            <AdsLsym>1</AdsLsym> +            <AdsLszi>1</AdsLszi> +            <AdsLtoi>1</AdsLtoi> +            <AdsLsun>1</AdsLsun> +            <AdsLven>1</AdsLven> +            <AdsLsxf>1</AdsLsxf> +            <RvctClst>0</RvctClst> +            <GenPPlst>0</GenPPlst> +            <AdsCpuType>"Cortex-M4"</AdsCpuType> +            <RvctDeviceName></RvctDeviceName> +            <mOS>0</mOS> +            <uocRom>0</uocRom> +            <uocRam>0</uocRam> +            <hadIROM>1</hadIROM> +            <hadIRAM>1</hadIRAM> +            <hadXRAM>0</hadXRAM> +            <uocXRam>0</uocXRam> +            <RvdsVP>2</RvdsVP> +            <hadIRAM2>1</hadIRAM2> +            <hadIROM2>0</hadIROM2> +            <StupSel>8</StupSel> +            <useUlib>0</useUlib> +            <EndSel>0</EndSel> +            <uLtcg>0</uLtcg> +            <RoSelD>3</RoSelD> +            <RwSelD>3</RwSelD> +            <CodeSel>0</CodeSel> +            <OptFeed>0</OptFeed> +            <NoZi1>0</NoZi1> +            <NoZi2>0</NoZi2> +            <NoZi3>0</NoZi3> +            <NoZi4>0</NoZi4> +            <NoZi5>0</NoZi5> +            <Ro1Chk>0</Ro1Chk> +            <Ro2Chk>0</Ro2Chk> +            <Ro3Chk>0</Ro3Chk> +            <Ir1Chk>1</Ir1Chk> +            <Ir2Chk>0</Ir2Chk> +            <Ra1Chk>0</Ra1Chk> +            <Ra2Chk>0</Ra2Chk> +            <Ra3Chk>0</Ra3Chk> +            <Im1Chk>1</Im1Chk> +            <Im2Chk>1</Im2Chk> +            <OnChipMemories> +              <Ocm1> +                <Type>0</Type> +                <StartAddress>0x0</StartAddress> +                <Size>0x0</Size> +              </Ocm1> +              <Ocm2> +                <Type>0</Type> +                <StartAddress>0x0</StartAddress> +                <Size>0x0</Size> +              </Ocm2> +              <Ocm3> +                <Type>0</Type> +                <StartAddress>0x0</StartAddress> +                <Size>0x0</Size> +              </Ocm3> +              <Ocm4> +                <Type>0</Type> +                <StartAddress>0x0</StartAddress> +                <Size>0x0</Size> +              </Ocm4> +              <Ocm5> +                <Type>0</Type> +                <StartAddress>0x0</StartAddress> +                <Size>0x0</Size> +              </Ocm5> +              <Ocm6> +                <Type>0</Type> +                <StartAddress>0x0</StartAddress> +                <Size>0x0</Size> +              </Ocm6> +              <IRAM> +                <Type>0</Type> +                <StartAddress>0x20000000</StartAddress> +                <Size>0x20000</Size> +              </IRAM> +              <IROM> +                <Type>1</Type> +                <StartAddress>0x8000000</StartAddress> +                <Size>0x100000</Size> +              </IROM> +              <XRAM> +                <Type>0</Type> +                <StartAddress>0x0</StartAddress> +                <Size>0x0</Size> +              </XRAM> +              <OCR_RVCT1> +                <Type>1</Type> +                <StartAddress>0x0</StartAddress> +                <Size>0x0</Size> +              </OCR_RVCT1> +              <OCR_RVCT2> +                <Type>1</Type> +                <StartAddress>0x0</StartAddress> +                <Size>0x0</Size> +              </OCR_RVCT2> +              <OCR_RVCT3> +                <Type>1</Type> +                <StartAddress>0x0</StartAddress> +                <Size>0x0</Size> +              </OCR_RVCT3> +              <OCR_RVCT4> +                <Type>1</Type> +                <StartAddress>0x8000000</StartAddress> +                <Size>0x100000</Size> +              </OCR_RVCT4> +              <OCR_RVCT5> +                <Type>1</Type> +                <StartAddress>0x0</StartAddress> +                <Size>0x0</Size> +              </OCR_RVCT5> +              <OCR_RVCT6> +                <Type>0</Type> +                <StartAddress>0x0</StartAddress> +                <Size>0x0</Size> +              </OCR_RVCT6> +              <OCR_RVCT7> +                <Type>0</Type> +                <StartAddress>0x0</StartAddress> +                <Size>0x0</Size> +              </OCR_RVCT7> +              <OCR_RVCT8> +                <Type>0</Type> +                <StartAddress>0x0</StartAddress> +                <Size>0x0</Size> +              </OCR_RVCT8> +              <OCR_RVCT9> +                <Type>0</Type> +                <StartAddress>0x20000000</StartAddress> +                <Size>0x20000</Size> +              </OCR_RVCT9> +              <OCR_RVCT10> +                <Type>0</Type> +                <StartAddress>0x20020000</StartAddress> +                <Size>0x1</Size> +              </OCR_RVCT10> +            </OnChipMemories> +            <RvctStartVector></RvctStartVector> +          </ArmAdsMisc> +          <Cads> +            <interw>1</interw> +            <Optim>4</Optim> +            <oTime>1</oTime> +            <SplitLS>0</SplitLS> +            <OneElfS>0</OneElfS> +            <Strict>0</Strict> +            <EnumInt>0</EnumInt> +            <PlainCh>0</PlainCh> +            <Ropi>0</Ropi> +            <Rwpi>0</Rwpi> +            <wLevel>0</wLevel> +            <uThumb>0</uThumb> +            <VariousControls> +              <MiscControls></MiscControls> +              <Define>__heap_base__=Image$$RW_IRAM1$$ZI$$Limit __heap_end__=Image$$RW_IRAM2$$Base</Define> +              <Undefine></Undefine> +              <IncludePath>..\;..\..\..\..\os\kernel\include;..\..\..\..\os\ports\common\ARMCMx;..\..\..\..\os\ports\common\ARMCMx\CMSIS\include;..\..\..\..\os\ports\RVCT\ARMCMx;..\..\..\..\os\ports\RVCT\ARMCMx\STM32F4xx;..\..\..\..\os\hal\include;..\..\..\..\os\hal\platforms\STM32;..\..\..\..\os\hal\platforms\STM32\GPIOv2;..\..\..\..\os\hal\platforms\STM32\USARTv1;..\..\..\..\os\hal\platforms\STM32F4xx;..\..\..\..\boards\ST_STM32F4_DISCOVERY;..\..\..\..\test</IncludePath> +            </VariousControls> +          </Cads> +          <Aads> +            <interw>1</interw> +            <Ropi>0</Ropi> +            <Rwpi>0</Rwpi> +            <thumb>0</thumb> +            <SplitLS>0</SplitLS> +            <SwStkChk>0</SwStkChk> +            <NoWarn>0</NoWarn> +            <VariousControls> +              <MiscControls>--cpreproc</MiscControls> +              <Define></Define> +              <Undefine></Undefine> +              <IncludePath>..\;..\..\..\..\boards\ST_STM32F4_DISCOVERY;..\..\..\..\os\ports\RVCT\ARMCMx\STM32F4xx</IncludePath> +            </VariousControls> +          </Aads> +          <LDads> +            <umfTarg>1</umfTarg> +            <Ropi>0</Ropi> +            <Rwpi>0</Rwpi> +            <noStLib>0</noStLib> +            <RepFail>1</RepFail> +            <useFile>0</useFile> +            <TextAddressRange>0x08000000</TextAddressRange> +            <DataAddressRange>0x20000000</DataAddressRange> +            <ScatterFile></ScatterFile> +            <IncludeLibs></IncludeLibs> +            <IncludeLibsPath></IncludeLibsPath> +            <Misc></Misc> +            <LinkerInputFile></LinkerInputFile> +            <DisabledWarnings></DisabledWarnings> +          </LDads> +        </TargetArmAds> +      </TargetOption> +      <Groups> +        <Group> +          <GroupName>board</GroupName> +          <Files> +            <File> +              <FileName>board.c</FileName> +              <FileType>1</FileType> +              <FilePath>..\..\..\..\boards\ST_STM32F4_DISCOVERY\board.c</FilePath> +            </File> +            <File> +              <FileName>board.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\boards\ST_STM32F4_DISCOVERY\board.h</FilePath> +            </File> +          </Files> +        </Group> +        <Group> +          <GroupName>port</GroupName> +          <Files> +            <File> +              <FileName>cstartup.s</FileName> +              <FileType>2</FileType> +              <FilePath>..\..\..\..\os\ports\RVCT\ARMCMx\cstartup.s</FilePath> +            </File> +            <File> +              <FileName>chcoreasm_v7m.s</FileName> +              <FileType>2</FileType> +              <FilePath>..\..\..\..\os\ports\RVCT\ARMCMx\chcoreasm_v7m.s</FilePath> +            </File> +            <File> +              <FileName>chcore.c</FileName> +              <FileType>1</FileType> +              <FilePath>..\..\..\..\os\ports\RVCT\ARMCMx\chcore.c</FilePath> +            </File> +            <File> +              <FileName>chcore_v7m.c</FileName> +              <FileType>1</FileType> +              <FilePath>..\..\..\..\os\ports\RVCT\ARMCMx\chcore_v7m.c</FilePath> +            </File> +            <File> +              <FileName>chcore.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\os\ports\RVCT\ARMCMx\chcore.h</FilePath> +            </File> +            <File> +              <FileName>chcore_v7m.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\os\ports\RVCT\ARMCMx\chcore_v7m.h</FilePath> +            </File> +            <File> +              <FileName>chtypes.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\os\ports\RVCT\ARMCMx\chtypes.h</FilePath> +            </File> +            <File> +              <FileName>cmparams.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\os\ports\RVCT\ARMCMx\STM32F4xx\cmparams.h</FilePath> +            </File> +            <File> +              <FileName>vectors.s</FileName> +              <FileType>2</FileType> +              <FilePath>..\..\..\..\os\ports\RVCT\ARMCMx\STM32F4xx\vectors.s</FilePath> +            </File> +            <File> +              <FileName>nvic.c</FileName> +              <FileType>1</FileType> +              <FilePath>..\..\..\..\os\ports\common\ARMCMx\nvic.c</FilePath> +            </File> +            <File> +              <FileName>nvic.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\os\ports\common\ARMCMx\nvic.h</FilePath> +            </File> +          </Files> +        </Group> +        <Group> +          <GroupName>kernel</GroupName> +          <Files> +            <File> +              <FileName>chcond.c</FileName> +              <FileType>1</FileType> +              <FilePath>..\..\..\..\os\kernel\src\chcond.c</FilePath> +            </File> +            <File> +              <FileName>chdebug.c</FileName> +              <FileType>1</FileType> +              <FilePath>..\..\..\..\os\kernel\src\chdebug.c</FilePath> +            </File> +            <File> +              <FileName>chdynamic.c</FileName> +              <FileType>1</FileType> +              <FilePath>..\..\..\..\os\kernel\src\chdynamic.c</FilePath> +            </File> +            <File> +              <FileName>chevents.c</FileName> +              <FileType>1</FileType> +              <FilePath>..\..\..\..\os\kernel\src\chevents.c</FilePath> +            </File> +            <File> +              <FileName>chheap.c</FileName> +              <FileType>1</FileType> +              <FilePath>..\..\..\..\os\kernel\src\chheap.c</FilePath> +            </File> +            <File> +              <FileName>chlists.c</FileName> +              <FileType>1</FileType> +              <FilePath>..\..\..\..\os\kernel\src\chlists.c</FilePath> +            </File> +            <File> +              <FileName>chmboxes.c</FileName> +              <FileType>1</FileType> +              <FilePath>..\..\..\..\os\kernel\src\chmboxes.c</FilePath> +            </File> +            <File> +              <FileName>chmemcore.c</FileName> +              <FileType>1</FileType> +              <FilePath>..\..\..\..\os\kernel\src\chmemcore.c</FilePath> +            </File> +            <File> +              <FileName>chmempools.c</FileName> +              <FileType>1</FileType> +              <FilePath>..\..\..\..\os\kernel\src\chmempools.c</FilePath> +            </File> +            <File> +              <FileName>chmsg.c</FileName> +              <FileType>1</FileType> +              <FilePath>..\..\..\..\os\kernel\src\chmsg.c</FilePath> +            </File> +            <File> +              <FileName>chmtx.c</FileName> +              <FileType>1</FileType> +              <FilePath>..\..\..\..\os\kernel\src\chmtx.c</FilePath> +            </File> +            <File> +              <FileName>chqueues.c</FileName> +              <FileType>1</FileType> +              <FilePath>..\..\..\..\os\kernel\src\chqueues.c</FilePath> +            </File> +            <File> +              <FileName>chregistry.c</FileName> +              <FileType>1</FileType> +              <FilePath>..\..\..\..\os\kernel\src\chregistry.c</FilePath> +            </File> +            <File> +              <FileName>chschd.c</FileName> +              <FileType>1</FileType> +              <FilePath>..\..\..\..\os\kernel\src\chschd.c</FilePath> +            </File> +            <File> +              <FileName>chsem.c</FileName> +              <FileType>1</FileType> +              <FilePath>..\..\..\..\os\kernel\src\chsem.c</FilePath> +            </File> +            <File> +              <FileName>chsys.c</FileName> +              <FileType>1</FileType> +              <FilePath>..\..\..\..\os\kernel\src\chsys.c</FilePath> +            </File> +            <File> +              <FileName>chthreads.c</FileName> +              <FileType>1</FileType> +              <FilePath>..\..\..\..\os\kernel\src\chthreads.c</FilePath> +            </File> +            <File> +              <FileName>chvt.c</FileName> +              <FileType>1</FileType> +              <FilePath>..\..\..\..\os\kernel\src\chvt.c</FilePath> +            </File> +            <File> +              <FileName>ch.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\os\kernel\include\ch.h</FilePath> +            </File> +            <File> +              <FileName>chbsem.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\os\kernel\include\chbsem.h</FilePath> +            </File> +            <File> +              <FileName>chcond.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\os\kernel\include\chcond.h</FilePath> +            </File> +            <File> +              <FileName>chdebug.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\os\kernel\include\chdebug.h</FilePath> +            </File> +            <File> +              <FileName>chdynamic.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\os\kernel\include\chdynamic.h</FilePath> +            </File> +            <File> +              <FileName>chevents.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\os\kernel\include\chevents.h</FilePath> +            </File> +            <File> +              <FileName>chfiles.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\os\kernel\include\chfiles.h</FilePath> +            </File> +            <File> +              <FileName>chheap.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\os\kernel\include\chheap.h</FilePath> +            </File> +            <File> +              <FileName>chinline.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\os\kernel\include\chinline.h</FilePath> +            </File> +            <File> +              <FileName>chioch.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\os\kernel\include\chioch.h</FilePath> +            </File> +            <File> +              <FileName>chlists.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\os\kernel\include\chlists.h</FilePath> +            </File> +            <File> +              <FileName>chmboxes.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\os\kernel\include\chmboxes.h</FilePath> +            </File> +            <File> +              <FileName>chmemcore.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\os\kernel\include\chmemcore.h</FilePath> +            </File> +            <File> +              <FileName>chmempools.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\os\kernel\include\chmempools.h</FilePath> +            </File> +            <File> +              <FileName>chmsg.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\os\kernel\include\chmsg.h</FilePath> +            </File> +            <File> +              <FileName>chmtx.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\os\kernel\include\chmtx.h</FilePath> +            </File> +            <File> +              <FileName>chqueues.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\os\kernel\include\chqueues.h</FilePath> +            </File> +            <File> +              <FileName>chregistry.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\os\kernel\include\chregistry.h</FilePath> +            </File> +            <File> +              <FileName>chschd.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\os\kernel\include\chschd.h</FilePath> +            </File> +            <File> +              <FileName>chsem.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\os\kernel\include\chsem.h</FilePath> +            </File> +            <File> +              <FileName>chstreams.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\os\kernel\include\chstreams.h</FilePath> +            </File> +            <File> +              <FileName>chsys.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\os\kernel\include\chsys.h</FilePath> +            </File> +            <File> +              <FileName>chthreads.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\os\kernel\include\chthreads.h</FilePath> +            </File> +            <File> +              <FileName>chvt.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\os\kernel\include\chvt.h</FilePath> +            </File> +          </Files> +        </Group> +        <Group> +          <GroupName>hal</GroupName> +          <Files> +            <File> +              <FileName>hal.c</FileName> +              <FileType>1</FileType> +              <FilePath>..\..\..\..\os\hal\src\hal.c</FilePath> +            </File> +            <File> +              <FileName>pal.c</FileName> +              <FileType>1</FileType> +              <FilePath>..\..\..\..\os\hal\src\pal.c</FilePath> +            </File> +            <File> +              <FileName>serial.c</FileName> +              <FileType>1</FileType> +              <FilePath>..\..\..\..\os\hal\src\serial.c</FilePath> +            </File> +            <File> +              <FileName>hal.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\os\hal\include\hal.h</FilePath> +            </File> +            <File> +              <FileName>pal.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\os\hal\include\pal.h</FilePath> +            </File> +            <File> +              <FileName>serial.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\os\hal\include\serial.h</FilePath> +            </File> +            <File> +              <FileName>gpt.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\os\hal\include\gpt.h</FilePath> +            </File> +            <File> +              <FileName>gpt.c</FileName> +              <FileType>1</FileType> +              <FilePath>..\..\..\..\os\hal\src\gpt.c</FilePath> +            </File> +            <File> +              <FileName>tm.c</FileName> +              <FileType>1</FileType> +              <FilePath>..\..\..\..\os\hal\src\tm.c</FilePath> +            </File> +          </Files> +        </Group> +        <Group> +          <GroupName>platform</GroupName> +          <Files> +            <File> +              <FileName>gpt_lld.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\os\hal\platforms\STM32\gpt_lld.h</FilePath> +            </File> +            <File> +              <FileName>gpt_lld.c</FileName> +              <FileType>1</FileType> +              <FilePath>..\..\..\..\os\hal\platforms\STM32\gpt_lld.c</FilePath> +            </File> +            <File> +              <FileName>hal_lld.c</FileName> +              <FileType>1</FileType> +              <FilePath>..\..\..\..\os\hal\platforms\STM32F4xx\hal_lld.c</FilePath> +            </File> +            <File> +              <FileName>hal_lld.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\os\hal\platforms\STM32F4xx\hal_lld.h</FilePath> +            </File> +            <File> +              <FileName>pal_lld.c</FileName> +              <FileType>1</FileType> +              <FilePath>..\..\..\..\os\hal\platforms\STM32\GPIOv2\pal_lld.c</FilePath> +            </File> +            <File> +              <FileName>pal_lld.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\os\hal\platforms\STM32\GPIOv2\pal_lld.h</FilePath> +            </File> +            <File> +              <FileName>serial_lld.c</FileName> +              <FileType>1</FileType> +              <FilePath>..\..\..\..\os\hal\platforms\STM32\USARTv1\serial_lld.c</FilePath> +            </File> +            <File> +              <FileName>serial_lld.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\os\hal\platforms\STM32\USARTv1\serial_lld.h</FilePath> +            </File> +            <File> +              <FileName>stm32_dma.c</FileName> +              <FileType>1</FileType> +              <FilePath>..\..\..\..\os\hal\platforms\STM32F4xx\stm32_dma.c</FilePath> +            </File> +            <File> +              <FileName>stm32_dma.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\os\hal\platforms\STM32F4xx\stm32_dma.h</FilePath> +            </File> +            <File> +              <FileName>stm32_rcc.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\os\hal\platforms\STM32F4xx\stm32_rcc.h</FilePath> +            </File> +            <File> +              <FileName>stm32l1xx.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\os\hal\platforms\STM32F4xx\stm32l1xx.h</FilePath> +            </File> +          </Files> +        </Group> +        <Group> +          <GroupName>test</GroupName> +          <Files> +            <File> +              <FileName>test.c</FileName> +              <FileType>1</FileType> +              <FilePath>..\..\..\..\test\test.c</FilePath> +            </File> +            <File> +              <FileName>testbmk.c</FileName> +              <FileType>1</FileType> +              <FilePath>..\..\..\..\test\testbmk.c</FilePath> +            </File> +            <File> +              <FileName>testdyn.c</FileName> +              <FileType>1</FileType> +              <FilePath>..\..\..\..\test\testdyn.c</FilePath> +            </File> +            <File> +              <FileName>testevt.c</FileName> +              <FileType>1</FileType> +              <FilePath>..\..\..\..\test\testevt.c</FilePath> +            </File> +            <File> +              <FileName>testheap.c</FileName> +              <FileType>1</FileType> +              <FilePath>..\..\..\..\test\testheap.c</FilePath> +            </File> +            <File> +              <FileName>testmbox.c</FileName> +              <FileType>1</FileType> +              <FilePath>..\..\..\..\test\testmbox.c</FilePath> +            </File> +            <File> +              <FileName>testmsg.c</FileName> +              <FileType>1</FileType> +              <FilePath>..\..\..\..\test\testmsg.c</FilePath> +            </File> +            <File> +              <FileName>testmtx.c</FileName> +              <FileType>1</FileType> +              <FilePath>..\..\..\..\test\testmtx.c</FilePath> +            </File> +            <File> +              <FileName>testpools.c</FileName> +              <FileType>1</FileType> +              <FilePath>..\..\..\..\test\testpools.c</FilePath> +            </File> +            <File> +              <FileName>testqueues.c</FileName> +              <FileType>1</FileType> +              <FilePath>..\..\..\..\test\testqueues.c</FilePath> +            </File> +            <File> +              <FileName>testsem.c</FileName> +              <FileType>1</FileType> +              <FilePath>..\..\..\..\test\testsem.c</FilePath> +            </File> +            <File> +              <FileName>testthd.c</FileName> +              <FileType>1</FileType> +              <FilePath>..\..\..\..\test\testthd.c</FilePath> +            </File> +            <File> +              <FileName>test.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\test\test.h</FilePath> +            </File> +            <File> +              <FileName>testbmk.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\test\testbmk.h</FilePath> +            </File> +            <File> +              <FileName>testdyn.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\test\testdyn.h</FilePath> +            </File> +            <File> +              <FileName>testevt.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\test\testevt.h</FilePath> +            </File> +            <File> +              <FileName>testheap.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\test\testheap.h</FilePath> +            </File> +            <File> +              <FileName>testmbox.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\test\testmbox.h</FilePath> +            </File> +            <File> +              <FileName>testmsg.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\test\testmsg.h</FilePath> +            </File> +            <File> +              <FileName>testmtx.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\test\testmtx.h</FilePath> +            </File> +            <File> +              <FileName>testpools.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\test\testpools.h</FilePath> +            </File> +            <File> +              <FileName>testqueues.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\test\testqueues.h</FilePath> +            </File> +            <File> +              <FileName>testsem.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\test\testsem.h</FilePath> +            </File> +            <File> +              <FileName>testthd.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\test\testthd.h</FilePath> +            </File> +          </Files> +        </Group> +        <Group> +          <GroupName>demo</GroupName> +          <Files> +            <File> +              <FileName>main.c</FileName> +              <FileType>1</FileType> +              <FilePath>..\main.c</FilePath> +            </File> +            <File> +              <FileName>mcuconf.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\mcuconf.h</FilePath> +            </File> +            <File> +              <FileName>chconf.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\chconf.h</FilePath> +            </File> +            <File> +              <FileName>halconf.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\halconf.h</FilePath> +            </File> +          </Files> +        </Group> +      </Groups> +    </Target> +  </Targets> + +</Project> diff --git a/testhal/STM32F4xx/IRQ_STORM/main.c b/testhal/STM32F4xx/IRQ_STORM/main.c new file mode 100644 index 000000000..905af44fe --- /dev/null +++ b/testhal/STM32F4xx/IRQ_STORM/main.c @@ -0,0 +1,327 @@ +/*
 +    ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio
 +
 +    Licensed under the Apache License, Version 2.0 (the "License");
 +    you may not use this file except in compliance with the License.
 +    You may obtain a copy of the License at
 +
 +        http://www.apache.org/licenses/LICENSE-2.0
 +
 +    Unless required by applicable law or agreed to in writing, software
 +    distributed under the License is distributed on an "AS IS" BASIS,
 +    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 +    See the License for the specific language governing permissions and
 +    limitations under the License.
 +*/
 +
 +#include <stdlib.h>
 +
 +#include "ch.h"
 +#include "hal.h"
 +
 +/*===========================================================================*/
 +/* Configurable settings.                                                    */
 +/*===========================================================================*/
 +
 +#ifndef RANDOMIZE
 +#define RANDOMIZE       FALSE
 +#endif
 +
 +#ifndef ITERATIONS
 +#define ITERATIONS      100
 +#endif
 +
 +#ifndef NUM_THREADS
 +#define NUM_THREADS     4
 +#endif
 +
 +#ifndef MAILBOX_SIZE
 +#define MAILBOX_SIZE    4
 +#endif
 +
 +/*===========================================================================*/
 +/* Test related code.                                                        */
 +/*===========================================================================*/
 +
 +#define MSG_SEND_LEFT   0
 +#define MSG_SEND_RIGHT  1
 +
 +static bool_t saturated;
 +
 +/*
 + * Mailboxes and buffers.
 + */
 +static Mailbox mb[NUM_THREADS];
 +static msg_t b[NUM_THREADS][MAILBOX_SIZE];
 +
 +/*
 + * Test worker threads.
 + */
 +static WORKING_AREA(waWorkerThread[NUM_THREADS], 128);
 +static msg_t WorkerThread(void *arg) {
 +  static volatile unsigned x = 0;
 +  static unsigned cnt = 0;
 +  unsigned me = (unsigned)arg;
 +  unsigned target;
 +  unsigned r;
 +  msg_t msg;
 +
 +  chRegSetThreadName("worker");
 +
 +  /* Work loop.*/
 +  while (TRUE) {
 +    /* Waiting for a message.*/
 +   chMBFetch(&mb[me], &msg, TIME_INFINITE);
 +
 +#if RANDOMIZE
 +   /* Pseudo-random delay.*/
 +   {
 +     chSysLock();
 +     r = rand() & 15;
 +     chSysUnlock();
 +     while (r--)
 +       x++;
 +   }
 +#else
 +   /* Fixed delay.*/
 +   {
 +     r = me >> 4;
 +     while (r--)
 +       x++;
 +   }
 +#endif
 +
 +    /* Deciding in which direction to re-send the message.*/
 +    if (msg == MSG_SEND_LEFT)
 +      target = me - 1;
 +    else
 +      target = me + 1;
 +
 +    if (target < NUM_THREADS) {
 +      /* If this thread is not at the end of a chain re-sending the message,
 +         note this check works because the variable target is unsigned.*/
 +      msg = chMBPost(&mb[target], msg, TIME_IMMEDIATE);
 +      if (msg != RDY_OK)
 +        saturated = TRUE;
 +    }
 +    else {
 +      /* Provides a visual feedback about the system.*/
 +      if (++cnt >= 500) {
 +        cnt = 0;
 +        palTogglePad(GPIOD, GPIOD_LED5);
 +      }
 +    }
 +  }
 +}
 +
 +/*
 + * GPT2 callback.
 + */
 +static void gpt2cb(GPTDriver *gptp) {
 +  msg_t msg;
 +
 +  (void)gptp;
 +  chSysLockFromIsr();
 +  msg = chMBPostI(&mb[0], MSG_SEND_RIGHT);
 +  if (msg != RDY_OK)
 +    saturated = TRUE;
 +  chSysUnlockFromIsr();
 +}
 +
 +/*
 + * GPT3 callback.
 + */
 +static void gpt3cb(GPTDriver *gptp) {
 +  msg_t msg;
 +
 +  (void)gptp;
 +  chSysLockFromIsr();
 +  msg = chMBPostI(&mb[NUM_THREADS - 1], MSG_SEND_LEFT);
 +  if (msg != RDY_OK)
 +    saturated = TRUE;
 +  chSysUnlockFromIsr();
 +}
 +
 +/*
 + * GPT2 configuration.
 + */
 +static const GPTConfig gpt2cfg = {
 +  1000000,  /* 1MHz timer clock.*/
 +  gpt2cb    /* Timer callback.*/
 +};
 +
 +/*
 + * GPT3 configuration.
 + */
 +static const GPTConfig gpt3cfg = {
 +  1000000,  /* 1MHz timer clock.*/
 +  gpt3cb    /* Timer callback.*/
 +};
 +
 +
 +/*===========================================================================*/
 +/* Generic demo code.                                                        */
 +/*===========================================================================*/
 +
 +static void print(char *p) {
 +
 +  while (*p) {
 +    chSequentialStreamPut(&SD2, *p++);
 +  }
 +}
 +
 +static void println(char *p) {
 +
 +  while (*p) {
 +    chSequentialStreamPut(&SD2, *p++);
 +  }
 +  chSequentialStreamWrite(&SD2, (uint8_t *)"\r\n", 2);
 +}
 +
 +static void printn(uint32_t n) {
 +  char buf[16], *p;
 +
 +  if (!n)
 +    chSequentialStreamPut(&SD2, '0');
 +  else {
 +    p = buf;
 +    while (n)
 +      *p++ = (n % 10) + '0', n /= 10;
 +    while (p > buf)
 +      chSequentialStreamPut(&SD2, *--p);
 +  }
 +}
 +
 +/*
 + * Application entry point.
 + */
 +int main(void) {
 +  unsigned i;
 +  gptcnt_t interval, threshold, worst;
 +
 +  /*
 +   * System initializations.
 +   * - HAL initialization, this also initializes the configured device drivers
 +   *   and performs the board-specific initializations.
 +   * - Kernel initialization, the main() function becomes a thread and the
 +   *   RTOS is active.
 +   */
 +  halInit();
 +  chSysInit();
 +
 +  /*
 +   * Prepares the Serial driver 2 and GPT drivers 2 and 3.
 +   */
 +  sdStart(&SD2, NULL);          /* Default is 38400-8-N-1.*/
 +  palSetPadMode(GPIOA, 2, PAL_MODE_ALTERNATE(7));
 +  palSetPadMode(GPIOA, 3, PAL_MODE_ALTERNATE(7));
 +  gptStart(&GPTD2, &gpt2cfg);
 +  gptStart(&GPTD3, &gpt3cfg);
 +
 +  /*
 +   * Initializes the mailboxes and creates the worker threads.
 +   */
 +  for (i = 0; i < NUM_THREADS; i++) {
 +    chMBInit(&mb[i], b[i], MAILBOX_SIZE);
 +    chThdCreateStatic(waWorkerThread[i], sizeof waWorkerThread[i],
 +                      NORMALPRIO - 20, WorkerThread, (void *)i);
 +  }
 +
 +  /*
 +   * Test procedure.
 +   */
 +  println("");
 +  println("*** ChibiOS/RT IRQ-STORM long duration test");
 +  println("***");
 +  print("*** Kernel:       ");
 +  println(CH_KERNEL_VERSION);
 +  print("*** Compiled:     ");
 +  println(__DATE__ " - " __TIME__);
 +#ifdef CH_COMPILER_NAME
 +  print("*** Compiler:     ");
 +  println(CH_COMPILER_NAME);
 +#endif
 +  print("*** Architecture: ");
 +  println(CH_ARCHITECTURE_NAME);
 +#ifdef CH_CORE_VARIANT_NAME
 +  print("*** Core Variant: ");
 +  println(CH_CORE_VARIANT_NAME);
 +#endif
 +#ifdef CH_PORT_INFO
 +  print("*** Port Info:    ");
 +  println(CH_PORT_INFO);
 +#endif
 +#ifdef PLATFORM_NAME
 +  print("*** Platform:     ");
 +  println(PLATFORM_NAME);
 +#endif
 +#ifdef BOARD_NAME
 +  print("*** Test Board:   ");
 +  println(BOARD_NAME);
 +#endif
 +  println("***");
 +  print("*** System Clock: ");
 +  printn(STM32_SYSCLK);
 +  println("");
 +  print("*** Iterations:   ");
 +  printn(ITERATIONS);
 +  println("");
 +  print("*** Randomize:    ");
 +  printn(RANDOMIZE);
 +  println("");
 +  print("*** Threads:      ");
 +  printn(NUM_THREADS);
 +  println("");
 +  print("*** Mailbox size: ");
 +  printn(MAILBOX_SIZE);
 +  println("");
 +
 +  println("");
 +  worst = 0;
 +  for (i = 1; i <= ITERATIONS; i++){
 +    print("Iteration ");
 +    printn(i);
 +    println("");
 +    saturated = FALSE;
 +    threshold = 0;
 +    for (interval = 2000; interval >= 10; interval -= interval / 10) {
 +      gptStartContinuous(&GPTD2, interval - 1); /* Slightly out of phase.*/
 +      gptStartContinuous(&GPTD3, interval + 1); /* Slightly out of phase.*/
 +      chThdSleepMilliseconds(1000);
 +      gptStopTimer(&GPTD2);
 +      gptStopTimer(&GPTD3);
 +      if (!saturated)
 +        print(".");
 +      else {
 +        print("#");
 +        if (threshold == 0)
 +          threshold = interval;
 +      }
 +    }
 +    /* Gives the worker threads a chance to empty the mailboxes before next
 +       cycle.*/
 +    chThdSleepMilliseconds(20);
 +    println("");
 +    print("Saturated at ");
 +    printn(threshold);
 +    println(" uS");
 +    println("");
 +    if (threshold > worst)
 +      worst = threshold;
 +  }
 +  gptStopTimer(&GPTD2);
 +  gptStopTimer(&GPTD3);
 +
 +  print("Worst case at ");
 +  printn(worst);
 +  println(" uS");
 +  println("");
 +  println("Test Complete");
 +
 +  /*
 +   * Normal main() thread activity, nothing in this test.
 +   */
 +  while (TRUE) {
 +    chThdSleepMilliseconds(5000);
 +  }
 +}
 diff --git a/testhal/STM32F4xx/IRQ_STORM/mcuconf.h b/testhal/STM32F4xx/IRQ_STORM/mcuconf.h new file mode 100644 index 000000000..dc10c0604 --- /dev/null +++ b/testhal/STM32F4xx/IRQ_STORM/mcuconf.h @@ -0,0 +1,278 @@ +/*
 +    ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio
 +
 +    Licensed under the Apache License, Version 2.0 (the "License");
 +    you may not use this file except in compliance with the License.
 +    You may obtain a copy of the License at
 +
 +        http://www.apache.org/licenses/LICENSE-2.0
 +
 +    Unless required by applicable law or agreed to in writing, software
 +    distributed under the License is distributed on an "AS IS" BASIS,
 +    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 +    See the License for the specific language governing permissions and
 +    limitations under the License.
 +*/
 +
 +/*
 + * STM32F4xx drivers configuration.
 + * The following settings override the default settings present in
 + * the various device driver implementation headers.
 + * Note that the settings for each driver only have effect if the whole
 + * driver is enabled in halconf.h.
 + *
 + * IRQ priorities:
 + * 15...0       Lowest...Highest.
 + *
 + * DMA priorities:
 + * 0...3        Lowest...Highest.
 + */
 +
 +#define STM32F4xx_MCUCONF
 +
 +/*
 + * HAL driver system settings.
 + */
 +#define STM32_NO_INIT                       FALSE
 +#define STM32_HSI_ENABLED                   TRUE
 +#define STM32_LSI_ENABLED                   TRUE
 +#define STM32_HSE_ENABLED                   TRUE
 +#define STM32_LSE_ENABLED                   FALSE
 +#define STM32_CLOCK48_REQUIRED              TRUE
 +#define STM32_SW                            STM32_SW_PLL
 +#define STM32_PLLSRC                        STM32_PLLSRC_HSE
 +#define STM32_PLLM_VALUE                    8
 +#define STM32_PLLN_VALUE                    336
 +#define STM32_PLLP_VALUE                    2
 +#define STM32_PLLQ_VALUE                    7
 +#define STM32_HPRE                          STM32_HPRE_DIV1
 +#define STM32_PPRE1                         STM32_PPRE1_DIV4
 +#define STM32_PPRE2                         STM32_PPRE2_DIV2
 +#define STM32_RTCSEL                        STM32_RTCSEL_LSI
 +#define STM32_RTCPRE_VALUE                  8
 +#define STM32_MCO1SEL                       STM32_MCO1SEL_HSI
 +#define STM32_MCO1PRE                       STM32_MCO1PRE_DIV1
 +#define STM32_MCO2SEL                       STM32_MCO2SEL_SYSCLK
 +#define STM32_MCO2PRE                       STM32_MCO2PRE_DIV5
 +#define STM32_I2SSRC                        STM32_I2SSRC_CKIN
 +#define STM32_PLLI2SN_VALUE                 192
 +#define STM32_PLLI2SR_VALUE                 5
 +#define STM32_VOS                           STM32_VOS_HIGH
 +#define STM32_PVD_ENABLE                    FALSE
 +#define STM32_PLS                           STM32_PLS_LEV0
 +
 +/*
 + * ADC driver system settings.
 + */
 +#define STM32_ADC_ADCPRE                    ADC_CCR_ADCPRE_DIV4
 +#define STM32_ADC_USE_ADC1                  FALSE
 +#define STM32_ADC_USE_ADC2                  FALSE
 +#define STM32_ADC_USE_ADC3                  FALSE
 +#define STM32_ADC_ADC1_DMA_STREAM           STM32_DMA_STREAM_ID(2, 4)
 +#define STM32_ADC_ADC2_DMA_STREAM           STM32_DMA_STREAM_ID(2, 2)
 +#define STM32_ADC_ADC3_DMA_STREAM           STM32_DMA_STREAM_ID(2, 1)
 +#define STM32_ADC_ADC1_DMA_PRIORITY         2
 +#define STM32_ADC_ADC2_DMA_PRIORITY         2
 +#define STM32_ADC_ADC3_DMA_PRIORITY         2
 +#define STM32_ADC_IRQ_PRIORITY              6
 +#define STM32_ADC_ADC1_DMA_IRQ_PRIORITY     6
 +#define STM32_ADC_ADC2_DMA_IRQ_PRIORITY     6
 +#define STM32_ADC_ADC3_DMA_IRQ_PRIORITY     6
 +
 +/*
 + * CAN driver system settings.
 + */
 +#define STM32_CAN_USE_CAN1                  FALSE
 +#define STM32_CAN_USE_CAN2                  FALSE
 +#define STM32_CAN_CAN1_IRQ_PRIORITY         11
 +#define STM32_CAN_CAN2_IRQ_PRIORITY         11
 +
 +/*
 + * EXT driver system settings.
 + */
 +#define STM32_EXT_EXTI0_IRQ_PRIORITY        6
 +#define STM32_EXT_EXTI1_IRQ_PRIORITY        6
 +#define STM32_EXT_EXTI2_IRQ_PRIORITY        6
 +#define STM32_EXT_EXTI3_IRQ_PRIORITY        6
 +#define STM32_EXT_EXTI4_IRQ_PRIORITY        6
 +#define STM32_EXT_EXTI5_9_IRQ_PRIORITY      6
 +#define STM32_EXT_EXTI10_15_IRQ_PRIORITY    6
 +#define STM32_EXT_EXTI16_IRQ_PRIORITY       6
 +#define STM32_EXT_EXTI17_IRQ_PRIORITY       15
 +#define STM32_EXT_EXTI18_IRQ_PRIORITY       6
 +#define STM32_EXT_EXTI19_IRQ_PRIORITY       6
 +#define STM32_EXT_EXTI20_IRQ_PRIORITY       6
 +#define STM32_EXT_EXTI21_IRQ_PRIORITY       15
 +#define STM32_EXT_EXTI22_IRQ_PRIORITY       15
 +
 +/*
 + * GPT driver system settings.
 + */
 +#define STM32_GPT_USE_TIM1                  FALSE
 +#define STM32_GPT_USE_TIM2                  TRUE
 +#define STM32_GPT_USE_TIM3                  TRUE
 +#define STM32_GPT_USE_TIM4                  FALSE
 +#define STM32_GPT_USE_TIM5                  FALSE
 +#define STM32_GPT_USE_TIM6                  FALSE
 +#define STM32_GPT_USE_TIM7                  FALSE
 +#define STM32_GPT_USE_TIM8                  FALSE
 +#define STM32_GPT_USE_TIM9                  FALSE
 +#define STM32_GPT_USE_TIM11                 FALSE
 +#define STM32_GPT_USE_TIM12                 FALSE
 +#define STM32_GPT_USE_TIM14                 FALSE
 +#define STM32_GPT_TIM1_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM2_IRQ_PRIORITY         6
 +#define STM32_GPT_TIM3_IRQ_PRIORITY         10
 +#define STM32_GPT_TIM4_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM5_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM6_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM7_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM8_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM9_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM11_IRQ_PRIORITY        7
 +#define STM32_GPT_TIM12_IRQ_PRIORITY        7
 +#define STM32_GPT_TIM14_IRQ_PRIORITY        7
 +
 +/*
 + * I2C driver system settings.
 + */
 +#define STM32_I2C_USE_I2C1                  FALSE
 +#define STM32_I2C_USE_I2C2                  FALSE
 +#define STM32_I2C_USE_I2C3                  FALSE
 +#define STM32_I2C_I2C1_RX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 0)
 +#define STM32_I2C_I2C1_TX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 6)
 +#define STM32_I2C_I2C2_RX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 2)
 +#define STM32_I2C_I2C2_TX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 7)
 +#define STM32_I2C_I2C3_RX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 2)
 +#define STM32_I2C_I2C3_TX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 4)
 +#define STM32_I2C_I2C1_IRQ_PRIORITY         5
 +#define STM32_I2C_I2C2_IRQ_PRIORITY         5
 +#define STM32_I2C_I2C3_IRQ_PRIORITY         5
 +#define STM32_I2C_I2C1_DMA_PRIORITY         3
 +#define STM32_I2C_I2C2_DMA_PRIORITY         3
 +#define STM32_I2C_I2C3_DMA_PRIORITY         3
 +#define STM32_I2C_I2C1_DMA_ERROR_HOOK()     chSysHalt()
 +#define STM32_I2C_I2C2_DMA_ERROR_HOOK()     chSysHalt()
 +#define STM32_I2C_I2C3_DMA_ERROR_HOOK()     chSysHalt()
 +
 +/*
 + * ICU driver system settings.
 + */
 +#define STM32_ICU_USE_TIM1                  FALSE
 +#define STM32_ICU_USE_TIM2                  FALSE
 +#define STM32_ICU_USE_TIM3                  FALSE
 +#define STM32_ICU_USE_TIM4                  FALSE
 +#define STM32_ICU_USE_TIM5                  FALSE
 +#define STM32_ICU_USE_TIM8                  FALSE
 +#define STM32_ICU_USE_TIM9                  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
 +#define STM32_ICU_TIM8_IRQ_PRIORITY         7
 +#define STM32_ICU_TIM9_IRQ_PRIORITY         7
 +
 +/*
 + * MAC driver system settings.
 + */
 +#define STM32_MAC_TRANSMIT_BUFFERS          2
 +#define STM32_MAC_RECEIVE_BUFFERS           4
 +#define STM32_MAC_BUFFERS_SIZE              1522
 +#define STM32_MAC_PHY_TIMEOUT               100
 +#define STM32_MAC_ETH1_CHANGE_PHY_STATE     TRUE
 +#define STM32_MAC_ETH1_IRQ_PRIORITY         13
 +#define STM32_MAC_IP_CHECKSUM_OFFLOAD       0
 +
 +/*
 + * PWM driver system settings.
 + */
 +#define STM32_PWM_USE_ADVANCED              FALSE
 +#define STM32_PWM_USE_TIM1                  FALSE
 +#define STM32_PWM_USE_TIM2                  FALSE
 +#define STM32_PWM_USE_TIM3                  FALSE
 +#define STM32_PWM_USE_TIM4                  FALSE
 +#define STM32_PWM_USE_TIM5                  FALSE
 +#define STM32_PWM_USE_TIM8                  FALSE
 +#define STM32_PWM_USE_TIM9                  FALSE
 +#define STM32_PWM_TIM1_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM2_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM3_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM4_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM5_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM8_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM9_IRQ_PRIORITY         7
 +
 +/*
 + * SERIAL driver system settings.
 + */
 +#define STM32_SERIAL_USE_USART1             FALSE
 +#define STM32_SERIAL_USE_USART2             TRUE
 +#define STM32_SERIAL_USE_USART3             FALSE
 +#define STM32_SERIAL_USE_UART4              FALSE
 +#define STM32_SERIAL_USE_UART5              FALSE
 +#define STM32_SERIAL_USE_USART6             FALSE
 +#define STM32_SERIAL_USART1_PRIORITY        12
 +#define STM32_SERIAL_USART2_PRIORITY        12
 +#define STM32_SERIAL_USART3_PRIORITY        12
 +#define STM32_SERIAL_UART4_PRIORITY         12
 +#define STM32_SERIAL_UART5_PRIORITY         12
 +#define STM32_SERIAL_USART6_PRIORITY        12
 +
 +/*
 + * SPI driver system settings.
 + */
 +#define STM32_SPI_USE_SPI1                  FALSE
 +#define STM32_SPI_USE_SPI2                  FALSE
 +#define STM32_SPI_USE_SPI3                  FALSE
 +#define STM32_SPI_SPI1_RX_DMA_STREAM        STM32_DMA_STREAM_ID(2, 0)
 +#define STM32_SPI_SPI1_TX_DMA_STREAM        STM32_DMA_STREAM_ID(2, 3)
 +#define STM32_SPI_SPI2_RX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 3)
 +#define STM32_SPI_SPI2_TX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 4)
 +#define STM32_SPI_SPI3_RX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 0)
 +#define STM32_SPI_SPI3_TX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 7)
 +#define STM32_SPI_SPI1_DMA_PRIORITY         1
 +#define STM32_SPI_SPI2_DMA_PRIORITY         1
 +#define STM32_SPI_SPI3_DMA_PRIORITY         1
 +#define STM32_SPI_SPI1_IRQ_PRIORITY         10
 +#define STM32_SPI_SPI2_IRQ_PRIORITY         10
 +#define STM32_SPI_SPI3_IRQ_PRIORITY         10
 +#define STM32_SPI_DMA_ERROR_HOOK(spip)      chSysHalt()
 +
 +/*
 + * UART driver system settings.
 + */
 +#define STM32_UART_USE_USART1               FALSE
 +#define STM32_UART_USE_USART2               FALSE
 +#define STM32_UART_USE_USART3               FALSE
 +#define STM32_UART_USE_USART6               FALSE
 +#define STM32_UART_USART1_RX_DMA_STREAM     STM32_DMA_STREAM_ID(2, 5)
 +#define STM32_UART_USART1_TX_DMA_STREAM     STM32_DMA_STREAM_ID(2, 7)
 +#define STM32_UART_USART2_RX_DMA_STREAM     STM32_DMA_STREAM_ID(1, 5)
 +#define STM32_UART_USART2_TX_DMA_STREAM     STM32_DMA_STREAM_ID(1, 6)
 +#define STM32_UART_USART3_RX_DMA_STREAM     STM32_DMA_STREAM_ID(1, 1)
 +#define STM32_UART_USART3_TX_DMA_STREAM     STM32_DMA_STREAM_ID(1, 3)
 +#define STM32_UART_USART6_RX_DMA_STREAM     STM32_DMA_STREAM_ID(2, 2)
 +#define STM32_UART_USART6_TX_DMA_STREAM     STM32_DMA_STREAM_ID(2, 7)
 +#define STM32_UART_USART1_IRQ_PRIORITY      12
 +#define STM32_UART_USART2_IRQ_PRIORITY      12
 +#define STM32_UART_USART3_IRQ_PRIORITY      12
 +#define STM32_UART_USART6_IRQ_PRIORITY      12
 +#define STM32_UART_USART1_DMA_PRIORITY      0
 +#define STM32_UART_USART2_DMA_PRIORITY      0
 +#define STM32_UART_USART3_DMA_PRIORITY      0
 +#define STM32_UART_USART6_DMA_PRIORITY      0
 +#define STM32_UART_DMA_ERROR_HOOK(uartp)    chSysHalt()
 +
 +/*
 + * USB driver system settings.
 + */
 +#define STM32_USB_USE_OTG1                  FALSE
 +#define STM32_USB_USE_OTG2                  FALSE
 +#define STM32_USB_OTG1_IRQ_PRIORITY         14
 +#define STM32_USB_OTG2_IRQ_PRIORITY         14
 +#define STM32_USB_OTG1_RX_FIFO_SIZE         512
 +#define STM32_USB_OTG2_RX_FIFO_SIZE         1024
 +#define STM32_USB_OTG_THREAD_PRIO           LOWPRIO
 +#define STM32_USB_OTG_THREAD_STACK_SIZE     128
 +#define STM32_USB_OTGFIFO_FILL_BASEPRI      0
 diff --git a/testhal/STM32F4xx/IRQ_STORM/readme.txt b/testhal/STM32F4xx/IRQ_STORM/readme.txt new file mode 100644 index 000000000..2b9f076f5 --- /dev/null +++ b/testhal/STM32F4xx/IRQ_STORM/readme.txt @@ -0,0 +1,31 @@ +*****************************************************************************
 +** ChibiOS/RT HAL - IRQ_STORM stress test demo for STM32F4xx.              **
 +*****************************************************************************
 +
 +** TARGET **
 +
 +The demo runs on an STMicroelectronics STM32F4-Discovery board.
 +
 +** The Demo **
 +
 +The application demonstrates the use of the STM32F4xx GPT, PAL and Serial
 +drivers in order to implement a system stress demo.
 +
 +** Board Setup **
 +
 +None.
 +
 +** Build Procedure **
 +
 +The demo has been tested using the free Codesourcery GCC-based toolchain
 +and YAGARTO.
 +Just modify the TRGT line in the makefile in order to use different GCC ports.
 +
 +** Notes **
 +
 +Some files used by the demo are not part of ChibiOS/RT but are copyright of
 +ST Microelectronics and are licensed under a different license.
 +Also note that not all the files present in the ST library are distributed
 +with ChibiOS/RT, you can find the whole library on the ST web site:
 +
 +                             http://www.st.com
 diff --git a/testhal/STM32F4xx/IRQ_STORM_FPU/.cproject b/testhal/STM32F4xx/IRQ_STORM_FPU/.cproject new file mode 100644 index 000000000..22b5f4d43 --- /dev/null +++ b/testhal/STM32F4xx/IRQ_STORM_FPU/.cproject @@ -0,0 +1,51 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?>
 +<?fileVersion 4.0.0?>
 +
 +<cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
 +	<storageModule moduleId="org.eclipse.cdt.core.settings">
 +		<cconfiguration id="0.588576619">
 +			<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="0.588576619" moduleId="org.eclipse.cdt.core.settings" name="Default">
 +				<externalSettings/>
 +				<extensions>
 +					<extension id="org.eclipse.cdt.core.VCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 +					<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 +					<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
 +					<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 +					<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 +					<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 +				</extensions>
 +			</storageModule>
 +			<storageModule moduleId="cdtBuildSystem" version="4.0.0">
 +				<configuration artifactName="${ProjName}" buildProperties="" description="" id="0.588576619" name="Default" parent="org.eclipse.cdt.build.core.prefbase.cfg">
 +					<folderInfo id="0.588576619." name="/" resourcePath="">
 +						<toolChain id="org.eclipse.cdt.build.core.prefbase.toolchain.1667054953" name="No ToolChain" resourceTypeBasedDiscovery="false" superClass="org.eclipse.cdt.build.core.prefbase.toolchain">
 +							<targetPlatform id="org.eclipse.cdt.build.core.prefbase.toolchain.1667054953.1202223432" name=""/>
 +							<builder id="org.eclipse.cdt.build.core.settings.default.builder.1830989627" keepEnvironmentInBuildfile="false" managedBuildOn="false" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="org.eclipse.cdt.build.core.settings.default.builder"/>
 +							<tool id="org.eclipse.cdt.build.core.settings.holder.libs.284309647" name="holder for library settings" superClass="org.eclipse.cdt.build.core.settings.holder.libs"/>
 +							<tool id="org.eclipse.cdt.build.core.settings.holder.1523239174" name="Assembly" superClass="org.eclipse.cdt.build.core.settings.holder">
 +								<inputType id="org.eclipse.cdt.build.core.settings.holder.inType.1757085528" languageId="org.eclipse.cdt.core.assembly" languageName="Assembly" sourceContentType="org.eclipse.cdt.core.asmSource" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
 +							</tool>
 +							<tool id="org.eclipse.cdt.build.core.settings.holder.1287360316" name="GNU C++" superClass="org.eclipse.cdt.build.core.settings.holder">
 +								<inputType id="org.eclipse.cdt.build.core.settings.holder.inType.1562011625" languageId="org.eclipse.cdt.core.g++" languageName="GNU C++" sourceContentType="org.eclipse.cdt.core.cxxSource,org.eclipse.cdt.core.cxxHeader" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
 +							</tool>
 +							<tool id="org.eclipse.cdt.build.core.settings.holder.386644346" name="GNU C" superClass="org.eclipse.cdt.build.core.settings.holder">
 +								<inputType id="org.eclipse.cdt.build.core.settings.holder.inType.1578356659" languageId="org.eclipse.cdt.core.gcc" languageName="GNU C" sourceContentType="org.eclipse.cdt.core.cSource,org.eclipse.cdt.core.cHeader" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
 +							</tool>
 +						</toolChain>
 +					</folderInfo>
 +				</configuration>
 +			</storageModule>
 +			<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
 +		</cconfiguration>
 +	</storageModule>
 +	<storageModule moduleId="cdtBuildSystem" version="4.0.0">
 +		<project id="STM32F4xx-IRQ_STORM_FPU.null.971130538" name="STM32F4xx-IRQ_STORM_FPU"/>
 +	</storageModule>
 +	<storageModule moduleId="scannerConfiguration">
 +		<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
 +		<scannerConfigBuildInfo instanceId="0.588576619">
 +			<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile"/>
 +		</scannerConfigBuildInfo>
 +	</storageModule>
 +	<storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
 +</cproject>
 diff --git a/testhal/STM32F4xx/IRQ_STORM_FPU/.project b/testhal/STM32F4xx/IRQ_STORM_FPU/.project new file mode 100644 index 000000000..46cb19671 --- /dev/null +++ b/testhal/STM32F4xx/IRQ_STORM_FPU/.project @@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="UTF-8"?>
 +<projectDescription>
 +	<name>STM32F4xx-IRQ_STORM_FPU</name>
 +	<comment></comment>
 +	<projects>
 +	</projects>
 +	<buildSpec>
 +		<buildCommand>
 +			<name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
 +			<triggers>clean,full,incremental,</triggers>
 +			<arguments>
 +			</arguments>
 +		</buildCommand>
 +		<buildCommand>
 +			<name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
 +			<triggers>full,incremental,</triggers>
 +			<arguments>
 +			</arguments>
 +		</buildCommand>
 +	</buildSpec>
 +	<natures>
 +		<nature>org.eclipse.cdt.core.cnature</nature>
 +		<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
 +		<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
 +	</natures>
 +	<linkedResources>
 +		<link>
 +			<name>board</name>
 +			<type>2</type>
 +			<locationURI>CHIBIOS/boards/ST_STM32F4_DISCOVERY</locationURI>
 +		</link>
 +		<link>
 +			<name>os</name>
 +			<type>2</type>
 +			<locationURI>CHIBIOS/os</locationURI>
 +		</link>
 +	</linkedResources>
 +</projectDescription>
 diff --git a/testhal/STM32F4xx/IRQ_STORM_FPU/Makefile b/testhal/STM32F4xx/IRQ_STORM_FPU/Makefile new file mode 100644 index 000000000..8391b78dc --- /dev/null +++ b/testhal/STM32F4xx/IRQ_STORM_FPU/Makefile @@ -0,0 +1,222 @@ +##############################################################################
 +# Build global options
 +# NOTE: Can be overridden externally.
 +#
 +
 +# Compiler options here.
 +ifeq ($(USE_OPT),)
 +  USE_OPT = -O2 -ggdb -fomit-frame-pointer -falign-functions=16
 +endif
 +
 +# C specific options here (added to USE_OPT).
 +ifeq ($(USE_COPT),)
 +  USE_COPT = 
 +endif
 +
 +# C++ specific options here (added to USE_OPT).
 +ifeq ($(USE_CPPOPT),)
 +  USE_CPPOPT = -fno-rtti
 +endif
 +
 +# Enable this if you want the linker to remove unused code and data
 +ifeq ($(USE_LINK_GC),)
 +  USE_LINK_GC = yes
 +endif
 +
 +# If enabled, this option allows to compile the application in THUMB mode.
 +ifeq ($(USE_THUMB),)
 +  USE_THUMB = yes
 +endif
 +
 +# Enable this if you want to see the full log while compiling.
 +ifeq ($(USE_VERBOSE_COMPILE),)
 +  USE_VERBOSE_COMPILE = no
 +endif
 +
 +#
 +# Build global options
 +##############################################################################
 +
 +##############################################################################
 +# Architecture or project specific options
 +#
 +
 +# Enables the use of FPU on Cortex-M4.
 +# Enable this if you really want to use the STM FWLib.
 +ifeq ($(USE_FPU),)
 +  USE_FPU = yes
 +endif
 +
 +# Enable this if you really want to use the STM FWLib.
 +ifeq ($(USE_FWLIB),)
 +  USE_FWLIB = no
 +endif
 +
 +#
 +# Architecture or project specific options
 +##############################################################################
 +
 +##############################################################################
 +# Project, sources and paths
 +#
 +
 +# Define project name here
 +PROJECT = ch
 +
 +# Imported source files and paths
 +CHIBIOS = ../../..
 +include $(CHIBIOS)/boards/ST_STM32F4_DISCOVERY/board.mk
 +include $(CHIBIOS)/os/hal/platforms/STM32F4xx/platform.mk
 +include $(CHIBIOS)/os/hal/hal.mk
 +include $(CHIBIOS)/os/ports/GCC/ARMCMx/STM32F4xx/port.mk
 +include $(CHIBIOS)/os/kernel/kernel.mk
 +include $(CHIBIOS)/test/test.mk
 +
 +# Define linker script file here
 +LDSCRIPT= $(PORTLD)/STM32F407xG.ld
 +#LDSCRIPT= $(PORTLD)/STM32F407xG_CCM.ld
 +
 +# C sources that can be compiled in ARM or THUMB mode depending on the global
 +# setting.
 +CSRC = $(PORTSRC) \
 +       $(KERNSRC) \
 +       $(TESTSRC) \
 +       $(HALSRC) \
 +       $(PLATFORMSRC) \
 +       $(BOARDSRC) \
 +       $(CHIBIOS)/os/various/chprintf.c \
 +       extfunc.c main.c
 +
 +# C++ sources that can be compiled in ARM or THUMB mode depending on the global
 +# setting.
 +CPPSRC =
 +
 +# C sources to be compiled in ARM mode regardless of the global setting.
 +# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler
 +#       option that results in lower performance and larger code size.
 +ACSRC =
 +
 +# C++ sources to be compiled in ARM mode regardless of the global setting.
 +# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler
 +#       option that results in lower performance and larger code size.
 +ACPPSRC =
 +
 +# C sources to be compiled in THUMB mode regardless of the global setting.
 +# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler
 +#       option that results in lower performance and larger code size.
 +TCSRC =
 +
 +# C sources to be compiled in THUMB mode regardless of the global setting.
 +# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler
 +#       option that results in lower performance and larger code size.
 +TCPPSRC =
 +
 +# List ASM source files here
 +ASMSRC = $(PORTASM)
 +
 +INCDIR = $(PORTINC) $(KERNINC) $(TESTINC) \
 +         $(HALINC) $(PLATFORMINC) $(BOARDINC) \
 +         $(CHIBIOS)/os/various
 +
 +#
 +# Project, sources and paths
 +##############################################################################
 +
 +##############################################################################
 +# Compiler settings
 +#
 +
 +MCU  = cortex-m4
 +
 +#TRGT = arm-elf-
 +TRGT = arm-none-eabi-
 +CC   = $(TRGT)gcc
 +CPPC = $(TRGT)g++
 +# Enable loading with g++ only if you need C++ runtime support.
 +# NOTE: You can use C++ even without C++ support if you are careful. C++
 +#       runtime support makes code size explode.
 +LD   = $(TRGT)gcc
 +#LD   = $(TRGT)g++
 +CP   = $(TRGT)objcopy
 +AS   = $(TRGT)gcc -x assembler-with-cpp
 +OD   = $(TRGT)objdump
 +HEX  = $(CP) -O ihex
 +BIN  = $(CP) -O binary
 +
 +# ARM-specific options here
 +AOPT =
 +
 +# THUMB-specific options here
 +TOPT = -mthumb -DTHUMB
 +
 +# Define C warning options here
 +CWARN = -Wall -Wextra -Wstrict-prototypes
 +
 +# Define C++ warning options here
 +CPPWARN = -Wall -Wextra
 +
 +#
 +# Compiler settings
 +##############################################################################
 +
 +##############################################################################
 +# Start of default section
 +#
 +
 +# List all default C defines here, like -D_DEBUG=1
 +DDEFS =
 +
 +# List all default ASM defines here, like -D_DEBUG=1
 +DADEFS =
 +
 +# List all default directories to look for include files here
 +DINCDIR =
 +
 +# List the default directory to look for the libraries here
 +DLIBDIR =
 +
 +# List all default libraries here
 +DLIBS =
 +
 +#
 +# End of default section
 +##############################################################################
 +
 +##############################################################################
 +# Start of user section
 +#
 +
 +# List all user C define here, like -D_DEBUG=1
 +UDEFS =
 +
 +# Define ASM defines here
 +UADEFS =
 +
 +# List all user directories here
 +UINCDIR =
 +
 +# List the user directory to look for the libraries here
 +ULIBDIR =
 +
 +# List all user libraries here
 +ULIBS =
 +
 +#
 +# End of user defines
 +##############################################################################
 +
 +ifeq ($(USE_FPU),yes)
 +  USE_OPT += -mfloat-abi=softfp -mfpu=fpv4-sp-d16 -fsingle-precision-constant
 +  DDEFS += -DCORTEX_USE_FPU=TRUE
 +else
 +  DDEFS += -DCORTEX_USE_FPU=FALSE
 +endif
 +
 +ifeq ($(USE_FWLIB),yes)
 +  include $(CHIBIOS)/ext/stm32lib/stm32lib.mk
 +  CSRC += $(STM32SRC)
 +  INCDIR += $(STM32INC)
 +  USE_OPT += -DUSE_STDPERIPH_DRIVER
 +endif
 +
 +include $(CHIBIOS)/os/ports/GCC/ARMCMx/rules.mk
 diff --git a/testhal/STM32F4xx/IRQ_STORM_FPU/chconf.h b/testhal/STM32F4xx/IRQ_STORM_FPU/chconf.h new file mode 100644 index 000000000..f943ea80c --- /dev/null +++ b/testhal/STM32F4xx/IRQ_STORM_FPU/chconf.h @@ -0,0 +1,531 @@ +/*
 +    ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio
 +
 +    Licensed under the Apache License, Version 2.0 (the "License");
 +    you may not use this file except in compliance with the License.
 +    You may obtain a copy of the License at
 +
 +        http://www.apache.org/licenses/LICENSE-2.0
 +
 +    Unless required by applicable law or agreed to in writing, software
 +    distributed under the License is distributed on an "AS IS" BASIS,
 +    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 +    See the License for the specific language governing permissions and
 +    limitations under the License.
 +*/
 +
 +/**
 + * @file    templates/chconf.h
 + * @brief   Configuration file template.
 + * @details A copy of this file must be placed in each project directory, it
 + *          contains the application specific kernel settings.
 + *
 + * @addtogroup config
 + * @details Kernel related settings and hooks.
 + * @{
 + */
 +
 +#ifndef _CHCONF_H_
 +#define _CHCONF_H_
 +
 +/*===========================================================================*/
 +/**
 + * @name Kernel parameters and options
 + * @{
 + */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   System tick frequency.
 + * @details Frequency of the system timer that drives the system ticks. This
 + *          setting also defines the system tick time unit.
 + */
 +#if !defined(CH_FREQUENCY) || defined(__DOXYGEN__)
 +#define CH_FREQUENCY                    1000
 +#endif
 +
 +/**
 + * @brief   Round robin interval.
 + * @details This constant is the number of system ticks allowed for the
 + *          threads before preemption occurs. Setting this value to zero
 + *          disables the preemption for threads with equal priority and the
 + *          round robin becomes cooperative. Note that higher priority
 + *          threads can still preempt, the kernel is always preemptive.
 + *
 + * @note    Disabling the round robin preemption makes the kernel more compact
 + *          and generally faster.
 + */
 +#if !defined(CH_TIME_QUANTUM) || defined(__DOXYGEN__)
 +#define CH_TIME_QUANTUM                 20
 +#endif
 +
 +/**
 + * @brief   Managed RAM size.
 + * @details Size of the RAM area to be managed by the OS. If set to zero
 + *          then the whole available RAM is used. The core memory is made
 + *          available to the heap allocator and/or can be used directly through
 + *          the simplified core memory allocator.
 + *
 + * @note    In order to let the OS manage the whole RAM the linker script must
 + *          provide the @p __heap_base__ and @p __heap_end__ symbols.
 + * @note    Requires @p CH_USE_MEMCORE.
 + */
 +#if !defined(CH_MEMCORE_SIZE) || defined(__DOXYGEN__)
 +#define CH_MEMCORE_SIZE                 0
 +#endif
 +
 +/**
 + * @brief   Idle thread automatic spawn suppression.
 + * @details When this option is activated the function @p chSysInit()
 + *          does not spawn the idle thread automatically. The application has
 + *          then the responsibility to do one of the following:
 + *          - Spawn a custom idle thread at priority @p IDLEPRIO.
 + *          - Change the main() thread priority to @p IDLEPRIO then enter
 + *            an endless loop. In this scenario the @p main() thread acts as
 + *            the idle thread.
 + *          .
 + * @note    Unless an idle thread is spawned the @p main() thread must not
 + *          enter a sleep state.
 + */
 +#if !defined(CH_NO_IDLE_THREAD) || defined(__DOXYGEN__)
 +#define CH_NO_IDLE_THREAD               FALSE
 +#endif
 +
 +/** @} */
 +
 +/*===========================================================================*/
 +/**
 + * @name Performance options
 + * @{
 + */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   OS optimization.
 + * @details If enabled then time efficient rather than space efficient code
 + *          is used when two possible implementations exist.
 + *
 + * @note    This is not related to the compiler optimization options.
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_OPTIMIZE_SPEED) || defined(__DOXYGEN__)
 +#define CH_OPTIMIZE_SPEED               TRUE
 +#endif
 +
 +/** @} */
 +
 +/*===========================================================================*/
 +/**
 + * @name Subsystem options
 + * @{
 + */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Threads registry APIs.
 + * @details If enabled then the registry APIs are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_REGISTRY) || defined(__DOXYGEN__)
 +#define CH_USE_REGISTRY                 TRUE
 +#endif
 +
 +/**
 + * @brief   Threads synchronization APIs.
 + * @details If enabled then the @p chThdWait() function is included in
 + *          the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_WAITEXIT) || defined(__DOXYGEN__)
 +#define CH_USE_WAITEXIT                 TRUE
 +#endif
 +
 +/**
 + * @brief   Semaphores APIs.
 + * @details If enabled then the Semaphores APIs are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_SEMAPHORES) || defined(__DOXYGEN__)
 +#define CH_USE_SEMAPHORES               TRUE
 +#endif
 +
 +/**
 + * @brief   Semaphores queuing mode.
 + * @details If enabled then the threads are enqueued on semaphores by
 + *          priority rather than in FIFO order.
 + *
 + * @note    The default is @p FALSE. Enable this if you have special requirements.
 + * @note    Requires @p CH_USE_SEMAPHORES.
 + */
 +#if !defined(CH_USE_SEMAPHORES_PRIORITY) || defined(__DOXYGEN__)
 +#define CH_USE_SEMAPHORES_PRIORITY      FALSE
 +#endif
 +
 +/**
 + * @brief   Atomic semaphore API.
 + * @details If enabled then the semaphores the @p chSemSignalWait() API
 + *          is included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_SEMAPHORES.
 + */
 +#if !defined(CH_USE_SEMSW) || defined(__DOXYGEN__)
 +#define CH_USE_SEMSW                    TRUE
 +#endif
 +
 +/**
 + * @brief   Mutexes APIs.
 + * @details If enabled then the mutexes APIs are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_MUTEXES) || defined(__DOXYGEN__)
 +#define CH_USE_MUTEXES                  TRUE
 +#endif
 +
 +/**
 + * @brief   Conditional Variables APIs.
 + * @details If enabled then the conditional variables APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_MUTEXES.
 + */
 +#if !defined(CH_USE_CONDVARS) || defined(__DOXYGEN__)
 +#define CH_USE_CONDVARS                 TRUE
 +#endif
 +
 +/**
 + * @brief   Conditional Variables APIs with timeout.
 + * @details If enabled then the conditional variables APIs with timeout
 + *          specification are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_CONDVARS.
 + */
 +#if !defined(CH_USE_CONDVARS_TIMEOUT) || defined(__DOXYGEN__)
 +#define CH_USE_CONDVARS_TIMEOUT         TRUE
 +#endif
 +
 +/**
 + * @brief   Events Flags APIs.
 + * @details If enabled then the event flags APIs are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_EVENTS) || defined(__DOXYGEN__)
 +#define CH_USE_EVENTS                   TRUE
 +#endif
 +
 +/**
 + * @brief   Events Flags APIs with timeout.
 + * @details If enabled then the events APIs with timeout specification
 + *          are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_EVENTS.
 + */
 +#if !defined(CH_USE_EVENTS_TIMEOUT) || defined(__DOXYGEN__)
 +#define CH_USE_EVENTS_TIMEOUT           TRUE
 +#endif
 +
 +/**
 + * @brief   Synchronous Messages APIs.
 + * @details If enabled then the synchronous messages APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_MESSAGES) || defined(__DOXYGEN__)
 +#define CH_USE_MESSAGES                 TRUE
 +#endif
 +
 +/**
 + * @brief   Synchronous Messages queuing mode.
 + * @details If enabled then messages are served by priority rather than in
 + *          FIFO order.
 + *
 + * @note    The default is @p FALSE. Enable this if you have special requirements.
 + * @note    Requires @p CH_USE_MESSAGES.
 + */
 +#if !defined(CH_USE_MESSAGES_PRIORITY) || defined(__DOXYGEN__)
 +#define CH_USE_MESSAGES_PRIORITY        FALSE
 +#endif
 +
 +/**
 + * @brief   Mailboxes APIs.
 + * @details If enabled then the asynchronous messages (mailboxes) APIs are
 + *          included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_SEMAPHORES.
 + */
 +#if !defined(CH_USE_MAILBOXES) || defined(__DOXYGEN__)
 +#define CH_USE_MAILBOXES                TRUE
 +#endif
 +
 +/**
 + * @brief   I/O Queues APIs.
 + * @details If enabled then the I/O queues APIs are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_QUEUES) || defined(__DOXYGEN__)
 +#define CH_USE_QUEUES                   TRUE
 +#endif
 +
 +/**
 + * @brief   Core Memory Manager APIs.
 + * @details If enabled then the core memory manager APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_MEMCORE) || defined(__DOXYGEN__)
 +#define CH_USE_MEMCORE                  TRUE
 +#endif
 +
 +/**
 + * @brief   Heap Allocator APIs.
 + * @details If enabled then the memory heap allocator APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_MEMCORE and either @p CH_USE_MUTEXES or
 + *          @p CH_USE_SEMAPHORES.
 + * @note    Mutexes are recommended.
 + */
 +#if !defined(CH_USE_HEAP) || defined(__DOXYGEN__)
 +#define CH_USE_HEAP                     TRUE
 +#endif
 +
 +/**
 + * @brief   C-runtime allocator.
 + * @details If enabled the the heap allocator APIs just wrap the C-runtime
 + *          @p malloc() and @p free() functions.
 + *
 + * @note    The default is @p FALSE.
 + * @note    Requires @p CH_USE_HEAP.
 + * @note    The C-runtime may or may not require @p CH_USE_MEMCORE, see the
 + *          appropriate documentation.
 + */
 +#if !defined(CH_USE_MALLOC_HEAP) || defined(__DOXYGEN__)
 +#define CH_USE_MALLOC_HEAP              FALSE
 +#endif
 +
 +/**
 + * @brief   Memory Pools Allocator APIs.
 + * @details If enabled then the memory pools allocator APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_MEMPOOLS) || defined(__DOXYGEN__)
 +#define CH_USE_MEMPOOLS                 TRUE
 +#endif
 +
 +/**
 + * @brief   Dynamic Threads APIs.
 + * @details If enabled then the dynamic threads creation APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_WAITEXIT.
 + * @note    Requires @p CH_USE_HEAP and/or @p CH_USE_MEMPOOLS.
 + */
 +#if !defined(CH_USE_DYNAMIC) || defined(__DOXYGEN__)
 +#define CH_USE_DYNAMIC                  TRUE
 +#endif
 +
 +/** @} */
 +
 +/*===========================================================================*/
 +/**
 + * @name Debug options
 + * @{
 + */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Debug option, system state check.
 + * @details If enabled the correct call protocol for system APIs is checked
 + *          at runtime.
 + *
 + * @note    The default is @p FALSE.
 + */
 +#if !defined(CH_DBG_SYSTEM_STATE_CHECK) || defined(__DOXYGEN__)
 +#define CH_DBG_SYSTEM_STATE_CHECK       FALSE
 +#endif
 +
 +/**
 + * @brief   Debug option, parameters checks.
 + * @details If enabled then the checks on the API functions input
 + *          parameters are activated.
 + *
 + * @note    The default is @p FALSE.
 + */
 +#if !defined(CH_DBG_ENABLE_CHECKS) || defined(__DOXYGEN__)
 +#define CH_DBG_ENABLE_CHECKS            FALSE
 +#endif
 +
 +/**
 + * @brief   Debug option, consistency checks.
 + * @details If enabled then all the assertions in the kernel code are
 + *          activated. This includes consistency checks inside the kernel,
 + *          runtime anomalies and port-defined checks.
 + *
 + * @note    The default is @p FALSE.
 + */
 +#if !defined(CH_DBG_ENABLE_ASSERTS) || defined(__DOXYGEN__)
 +#define CH_DBG_ENABLE_ASSERTS           FALSE
 +#endif
 +
 +/**
 + * @brief   Debug option, trace buffer.
 + * @details If enabled then the context switch circular trace buffer is
 + *          activated.
 + *
 + * @note    The default is @p FALSE.
 + */
 +#if !defined(CH_DBG_ENABLE_TRACE) || defined(__DOXYGEN__)
 +#define CH_DBG_ENABLE_TRACE             FALSE
 +#endif
 +
 +/**
 + * @brief   Debug option, stack checks.
 + * @details If enabled then a runtime stack check is performed.
 + *
 + * @note    The default is @p FALSE.
 + * @note    The stack check is performed in a architecture/port dependent way.
 + *          It may not be implemented or some ports.
 + * @note    The default failure mode is to halt the system with the global
 + *          @p panic_msg variable set to @p NULL.
 + */
 +#if !defined(CH_DBG_ENABLE_STACK_CHECK) || defined(__DOXYGEN__)
 +#define CH_DBG_ENABLE_STACK_CHECK       FALSE
 +#endif
 +
 +/**
 + * @brief   Debug option, stacks initialization.
 + * @details If enabled then the threads working area is filled with a byte
 + *          value when a thread is created. This can be useful for the
 + *          runtime measurement of the used stack.
 + *
 + * @note    The default is @p FALSE.
 + */
 +#if !defined(CH_DBG_FILL_THREADS) || defined(__DOXYGEN__)
 +#define CH_DBG_FILL_THREADS             FALSE
 +#endif
 +
 +/**
 + * @brief   Debug option, threads profiling.
 + * @details If enabled then a field is added to the @p Thread structure that
 + *          counts the system ticks occurred while executing the thread.
 + *
 + * @note    The default is @p TRUE.
 + * @note    This debug option is defaulted to TRUE because it is required by
 + *          some test cases into the test suite.
 + */
 +#if !defined(CH_DBG_THREADS_PROFILING) || defined(__DOXYGEN__)
 +#define CH_DBG_THREADS_PROFILING        TRUE
 +#endif
 +
 +/** @} */
 +
 +/*===========================================================================*/
 +/**
 + * @name Kernel hooks
 + * @{
 + */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Threads descriptor structure extension.
 + * @details User fields added to the end of the @p Thread structure.
 + */
 +#if !defined(THREAD_EXT_FIELDS) || defined(__DOXYGEN__)
 +#define THREAD_EXT_FIELDS                                                   \
 +  /* Add threads custom fields here.*/
 +#endif
 +
 +/**
 + * @brief   Threads initialization hook.
 + * @details User initialization code added to the @p chThdInit() API.
 + *
 + * @note    It is invoked from within @p chThdInit() and implicitly from all
 + *          the threads creation APIs.
 + */
 +#if !defined(THREAD_EXT_INIT_HOOK) || defined(__DOXYGEN__)
 +#define THREAD_EXT_INIT_HOOK(tp) {                                          \
 +  /* Add threads initialization code here.*/                                \
 +}
 +#endif
 +
 +/**
 + * @brief   Threads finalization hook.
 + * @details User finalization code added to the @p chThdExit() API.
 + *
 + * @note    It is inserted into lock zone.
 + * @note    It is also invoked when the threads simply return in order to
 + *          terminate.
 + */
 +#if !defined(THREAD_EXT_EXIT_HOOK) || defined(__DOXYGEN__)
 +#define THREAD_EXT_EXIT_HOOK(tp) {                                          \
 +  /* Add threads finalization code here.*/                                  \
 +}
 +#endif
 +
 +/**
 + * @brief   Context switch hook.
 + * @details This hook is invoked just before switching between threads.
 + */
 +#if !defined(THREAD_CONTEXT_SWITCH_HOOK) || defined(__DOXYGEN__)
 +#define THREAD_CONTEXT_SWITCH_HOOK(ntp, otp) {                              \
 +  /* System halt code here.*/                                               \
 +}
 +#endif
 +
 +/**
 + * @brief   Idle Loop hook.
 + * @details This hook is continuously invoked by the idle thread loop.
 + */
 +#if !defined(IDLE_LOOP_HOOK) || defined(__DOXYGEN__)
 +#define IDLE_LOOP_HOOK() {                                                  \
 +  /* Idle loop code here.*/                                                 \
 +}
 +#endif
 +
 +/**
 + * @brief   System tick event hook.
 + * @details This hook is invoked in the system tick handler immediately
 + *          after processing the virtual timers queue.
 + */
 +#if !defined(SYSTEM_TICK_EVENT_HOOK) || defined(__DOXYGEN__)
 +#define SYSTEM_TICK_EVENT_HOOK() {                                          \
 +  /* System tick event code here.*/                                         \
 +}
 +#endif
 +
 +/**
 + * @brief   System halt hook.
 + * @details This hook is invoked in case to a system halting error before
 + *          the system is halted.
 + */
 +#if !defined(SYSTEM_HALT_HOOK) || defined(__DOXYGEN__)
 +#define SYSTEM_HALT_HOOK() {                                                \
 +  /* System halt code here.*/                                               \
 +}
 +#endif
 +
 +/** @} */
 +
 +/*===========================================================================*/
 +/* Port-specific settings (override port settings defaulted in chcore.h).    */
 +/*===========================================================================*/
 +
 +#endif  /* _CHCONF_H_ */
 +
 +/** @} */
 diff --git a/testhal/STM32F4xx/IRQ_STORM_FPU/extfunc.c b/testhal/STM32F4xx/IRQ_STORM_FPU/extfunc.c new file mode 100644 index 000000000..0418e3124 --- /dev/null +++ b/testhal/STM32F4xx/IRQ_STORM_FPU/extfunc.c @@ -0,0 +1,23 @@ +/*
 +    ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio
 +
 +    Licensed under the Apache License, Version 2.0 (the "License");
 +    you may not use this file except in compliance with the License.
 +    You may obtain a copy of the License at
 +
 +        http://www.apache.org/licenses/LICENSE-2.0
 +
 +    Unless required by applicable law or agreed to in writing, software
 +    distributed under the License is distributed on an "AS IS" BASIS,
 +    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 +    See the License for the specific language governing permissions and
 +    limitations under the License.
 +*/
 +
 +float ff1(float par) {
 +  return par;
 +}
 +
 +float ff2(float par1, float par2, float par3, float par4) {
 +  return (par1 + par2) * (par3 + par4);
 +}
 diff --git a/testhal/STM32F4xx/IRQ_STORM_FPU/halconf.h b/testhal/STM32F4xx/IRQ_STORM_FPU/halconf.h new file mode 100644 index 000000000..d91a792b4 --- /dev/null +++ b/testhal/STM32F4xx/IRQ_STORM_FPU/halconf.h @@ -0,0 +1,312 @@ +/*
 +    ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio
 +
 +    Licensed under the Apache License, Version 2.0 (the "License");
 +    you may not use this file except in compliance with the License.
 +    You may obtain a copy of the License at
 +
 +        http://www.apache.org/licenses/LICENSE-2.0
 +
 +    Unless required by applicable law or agreed to in writing, software
 +    distributed under the License is distributed on an "AS IS" BASIS,
 +    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 +    See the License for the specific language governing permissions and
 +    limitations under the License.
 +*/
 +
 +/**
 + * @file    templates/halconf.h
 + * @brief   HAL configuration header.
 + * @details HAL configuration file, this file allows to enable or disable the
 + *          various device drivers from your application. You may also use
 + *          this file in order to override the device drivers default settings.
 + *
 + * @addtogroup HAL_CONF
 + * @{
 + */
 +
 +#ifndef _HALCONF_H_
 +#define _HALCONF_H_
 +
 +#include "mcuconf.h"
 +
 +/**
 + * @brief   Enables the TM subsystem.
 + */
 +#if !defined(HAL_USE_TM) || defined(__DOXYGEN__)
 +#define HAL_USE_TM                  FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the PAL subsystem.
 + */
 +#if !defined(HAL_USE_PAL) || defined(__DOXYGEN__)
 +#define HAL_USE_PAL                 TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the ADC subsystem.
 + */
 +#if !defined(HAL_USE_ADC) || defined(__DOXYGEN__)
 +#define HAL_USE_ADC                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the CAN subsystem.
 + */
 +#if !defined(HAL_USE_CAN) || defined(__DOXYGEN__)
 +#define HAL_USE_CAN                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the EXT subsystem.
 + */
 +#if !defined(HAL_USE_EXT) || defined(__DOXYGEN__)
 +#define HAL_USE_EXT                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the GPT subsystem.
 + */
 +#if !defined(HAL_USE_GPT) || defined(__DOXYGEN__)
 +#define HAL_USE_GPT                 TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the I2C subsystem.
 + */
 +#if !defined(HAL_USE_I2C) || defined(__DOXYGEN__)
 +#define HAL_USE_I2C                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the ICU subsystem.
 + */
 +#if !defined(HAL_USE_ICU) || defined(__DOXYGEN__)
 +#define HAL_USE_ICU                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the MAC subsystem.
 + */
 +#if !defined(HAL_USE_MAC) || defined(__DOXYGEN__)
 +#define HAL_USE_MAC                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the MMC_SPI subsystem.
 + */
 +#if !defined(HAL_USE_MMC_SPI) || defined(__DOXYGEN__)
 +#define HAL_USE_MMC_SPI             FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the PWM subsystem.
 + */
 +#if !defined(HAL_USE_PWM) || defined(__DOXYGEN__)
 +#define HAL_USE_PWM                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the RTC subsystem.
 + */
 +#if !defined(HAL_USE_RTC) || defined(__DOXYGEN__)
 +#define HAL_USE_RTC                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the SDC subsystem.
 + */
 +#if !defined(HAL_USE_SDC) || defined(__DOXYGEN__)
 +#define HAL_USE_SDC                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the SERIAL subsystem.
 + */
 +#if !defined(HAL_USE_SERIAL) || defined(__DOXYGEN__)
 +#define HAL_USE_SERIAL              TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the SERIAL over USB subsystem.
 + */
 +#if !defined(HAL_USE_SERIAL_USB) || defined(__DOXYGEN__)
 +#define HAL_USE_SERIAL_USB          FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the SPI subsystem.
 + */
 +#if !defined(HAL_USE_SPI) || defined(__DOXYGEN__)
 +#define HAL_USE_SPI                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the UART subsystem.
 + */
 +#if !defined(HAL_USE_UART) || defined(__DOXYGEN__)
 +#define HAL_USE_UART                FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the USB subsystem.
 + */
 +#if !defined(HAL_USE_USB) || defined(__DOXYGEN__)
 +#define HAL_USE_USB                 FALSE
 +#endif
 +
 +/*===========================================================================*/
 +/* ADC driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Enables synchronous APIs.
 + * @note    Disabling this option saves both code and data space.
 + */
 +#if !defined(ADC_USE_WAIT) || defined(__DOXYGEN__)
 +#define ADC_USE_WAIT                TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the @p adcAcquireBus() and @p adcReleaseBus() APIs.
 + * @note    Disabling this option saves both code and data space.
 + */
 +#if !defined(ADC_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
 +#define ADC_USE_MUTUAL_EXCLUSION    TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* CAN driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Sleep mode related APIs inclusion switch.
 + */
 +#if !defined(CAN_USE_SLEEP_MODE) || defined(__DOXYGEN__)
 +#define CAN_USE_SLEEP_MODE          TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* I2C driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Enables the mutual exclusion APIs on the I2C bus.
 + */
 +#if !defined(I2C_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
 +#define I2C_USE_MUTUAL_EXCLUSION    TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* MAC driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Enables an event sources for incoming packets.
 + */
 +#if !defined(MAC_USE_ZERO_COPY) || defined(__DOXYGEN__)
 +#define MAC_USE_ZERO_COPY           FALSE
 +#endif
 +
 +/**
 + * @brief   Enables an event sources for incoming packets.
 + */
 +#if !defined(MAC_USE_EVENTS) || defined(__DOXYGEN__)
 +#define MAC_USE_EVENTS              TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* MMC_SPI driver related settings.                                          */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Delays insertions.
 + * @details If enabled this options inserts delays into the MMC waiting
 + *          routines releasing some extra CPU time for the threads with
 + *          lower priority, this may slow down the driver a bit however.
 + *          This option is recommended also if the SPI driver does not
 + *          use a DMA channel and heavily loads the CPU.
 + */
 +#if !defined(MMC_NICE_WAITING) || defined(__DOXYGEN__)
 +#define MMC_NICE_WAITING            TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* SDC driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Number of initialization attempts before rejecting the card.
 + * @note    Attempts are performed at 10mS intervals.
 + */
 +#if !defined(SDC_INIT_RETRY) || defined(__DOXYGEN__)
 +#define SDC_INIT_RETRY              100
 +#endif
 +
 +/**
 + * @brief   Include support for MMC cards.
 + * @note    MMC support is not yet implemented so this option must be kept
 + *          at @p FALSE.
 + */
 +#if !defined(SDC_MMC_SUPPORT) || defined(__DOXYGEN__)
 +#define SDC_MMC_SUPPORT             FALSE
 +#endif
 +
 +/**
 + * @brief   Delays insertions.
 + * @details If enabled this options inserts delays into the MMC waiting
 + *          routines releasing some extra CPU time for the threads with
 + *          lower priority, this may slow down the driver a bit however.
 + */
 +#if !defined(SDC_NICE_WAITING) || defined(__DOXYGEN__)
 +#define SDC_NICE_WAITING            TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* SERIAL driver related settings.                                           */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Default bit rate.
 + * @details Configuration parameter, this is the baud rate selected for the
 + *          default configuration.
 + */
 +#if !defined(SERIAL_DEFAULT_BITRATE) || defined(__DOXYGEN__)
 +#define SERIAL_DEFAULT_BITRATE      38400
 +#endif
 +
 +/**
 + * @brief   Serial buffers size.
 + * @details Configuration parameter, you can change the depth of the queue
 + *          buffers depending on the requirements of your application.
 + * @note    The default is 64 bytes for both the transmission and receive
 + *          buffers.
 + */
 +#if !defined(SERIAL_BUFFERS_SIZE) || defined(__DOXYGEN__)
 +#define SERIAL_BUFFERS_SIZE         16
 +#endif
 +
 +/*===========================================================================*/
 +/* SPI driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Enables synchronous APIs.
 + * @note    Disabling this option saves both code and data space.
 + */
 +#if !defined(SPI_USE_WAIT) || defined(__DOXYGEN__)
 +#define SPI_USE_WAIT                TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the @p spiAcquireBus() and @p spiReleaseBus() APIs.
 + * @note    Disabling this option saves both code and data space.
 + */
 +#if !defined(SPI_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
 +#define SPI_USE_MUTUAL_EXCLUSION    TRUE
 +#endif
 +
 +#endif /* _HALCONF_H_ */
 +
 +/** @} */
 diff --git a/testhal/STM32F4xx/IRQ_STORM_FPU/iar/ch.ewp b/testhal/STM32F4xx/IRQ_STORM_FPU/iar/ch.ewp new file mode 100644 index 000000000..186319a4c --- /dev/null +++ b/testhal/STM32F4xx/IRQ_STORM_FPU/iar/ch.ewp @@ -0,0 +1,2292 @@ +<?xml version="1.0" encoding="iso-8859-1"?>
 +
 +<project>
 +  <fileVersion>2</fileVersion>
 +  <configuration>
 +    <name>Debug</name>
 +    <toolchain>
 +      <name>ARM</name>
 +    </toolchain>
 +    <debug>1</debug>
 +    <settings>
 +      <name>General</name>
 +      <archiveVersion>3</archiveVersion>
 +      <data>
 +        <version>21</version>
 +        <wantNonLocal>1</wantNonLocal>
 +        <debug>1</debug>
 +        <option>
 +          <name>ExePath</name>
 +          <state>Debug\Exe</state>
 +        </option>
 +        <option>
 +          <name>ObjPath</name>
 +          <state>Debug\Obj</state>
 +        </option>
 +        <option>
 +          <name>ListPath</name>
 +          <state>Debug\List</state>
 +        </option>
 +        <option>
 +          <name>Variant</name>
 +          <version>19</version>
 +          <state>38</state>
 +        </option>
 +        <option>
 +          <name>GEndianMode</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>Input variant</name>
 +          <version>3</version>
 +          <state>6</state>
 +        </option>
 +        <option>
 +          <name>Input description</name>
 +          <state>No specifier n, no float nor long long, no scan set, no assignment suppressing.</state>
 +        </option>
 +        <option>
 +          <name>Output variant</name>
 +          <version>2</version>
 +          <state>7</state>
 +        </option>
 +        <option>
 +          <name>Output description</name>
 +          <state>No specifier a, A, no specifier n, no float nor long long, no flags.</state>
 +        </option>
 +        <option>
 +          <name>GOutputBinary</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>FPU</name>
 +          <version>2</version>
 +          <state>5</state>
 +        </option>
 +        <option>
 +          <name>OGCoreOrChip</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>GRuntimeLibSelect</name>
 +          <version>0</version>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>GRuntimeLibSelectSlave</name>
 +          <version>0</version>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>RTDescription</name>
 +          <state>Use the normal configuration of the C/C++ runtime library. No locale interface, C locale, no file descriptor support, no multibytes in printf and scanf, and no hex floats in strtod.</state>
 +        </option>
 +        <option>
 +          <name>OGProductVersion</name>
 +          <state>5.10.0.159</state>
 +        </option>
 +        <option>
 +          <name>OGLastSavedByProductVersion</name>
 +          <state>6.30.3.53229</state>
 +        </option>
 +        <option>
 +          <name>GeneralEnableMisra</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>GeneralMisraVerbose</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>OGChipSelectEditMenu</name>
 +          <state>STM32F4xxx	ST STM32F4xxx</state>
 +        </option>
 +        <option>
 +          <name>GenLowLevelInterface</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>GEndianModeBE</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>OGBufferedTerminalOutput</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>GenStdoutInterface</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>GeneralMisraRules98</name>
 +          <version>0</version>
 +          <state>1000111110110101101110011100111111101110011011000101110111101101100111111111111100110011111001110111001111111111111111111111111</state>
 +        </option>
 +        <option>
 +          <name>GeneralMisraVer</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>GeneralMisraRules04</name>
 +          <version>0</version>
 +          <state>111101110010111111111000110111111111111111111111111110010111101111010101111111111111111111111111101111111011111001111011111011111111111111111</state>
 +        </option>
 +        <option>
 +          <name>RTConfigPath2</name>
 +          <state>$TOOLKIT_DIR$\INC\c\DLib_Config_Normal.h</state>
 +        </option>
 +        <option>
 +          <name>GFPUCoreSlave</name>
 +          <version>19</version>
 +          <state>38</state>
 +        </option>
 +        <option>
 +          <name>GBECoreSlave</name>
 +          <version>19</version>
 +          <state>38</state>
 +        </option>
 +        <option>
 +          <name>OGUseCmsis</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>OGUseCmsisDspLib</name>
 +          <state>0</state>
 +        </option>
 +      </data>
 +    </settings>
 +    <settings>
 +      <name>ICCARM</name>
 +      <archiveVersion>2</archiveVersion>
 +      <data>
 +        <version>28</version>
 +        <wantNonLocal>1</wantNonLocal>
 +        <debug>1</debug>
 +        <option>
 +          <name>CCDefines</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>CCPreprocFile</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>CCPreprocComments</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>CCPreprocLine</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>CCListCFile</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>CCListCMnemonics</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>CCListCMessages</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>CCListAssFile</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>CCListAssSource</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>CCEnableRemarks</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>CCDiagSuppress</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>CCDiagRemark</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>CCDiagWarning</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>CCDiagError</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>CCObjPrefix</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>CCAllowList</name>
 +          <version>1</version>
 +          <state>0000000</state>
 +        </option>
 +        <option>
 +          <name>CCDebugInfo</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IEndianMode</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IProcessor</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IExtraOptionsCheck</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IExtraOptions</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>CCLangConformance</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>CCSignedPlainChar</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>CCRequirePrototypes</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>CCMultibyteSupport</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>CCDiagWarnAreErr</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>CCCompilerRuntimeInfo</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IFpuProcessor</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>OutputFile</name>
 +          <state>$FILE_BNAME$.o</state>
 +        </option>
 +        <option>
 +          <name>CCLibConfigHeader</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>PreInclude</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>CompilerMisraOverride</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>CCIncludePath2</name>
 +          <state>$PROJ_DIR$\..\</state>
 +          <state>$PROJ_DIR$\..\..\..\..\os\kernel\include</state>
 +          <state>$PROJ_DIR$\..\..\..\..\os\ports\common\ARMCMx</state>
 +          <state>$PROJ_DIR$\..\..\..\..\os\ports\common\ARMCMx\CMSIS\include</state>
 +          <state>$PROJ_DIR$\..\..\..\..\os\ports\IAR\ARMCMx</state>
 +          <state>$PROJ_DIR$\..\..\..\..\os\ports\IAR\ARMCMx\STM32f4xx</state>
 +          <state>$PROJ_DIR$\..\..\..\..\os\hal\include</state>
 +          <state>$PROJ_DIR$\..\..\..\..\os\hal\platforms\STM32</state>
 +          <state>$PROJ_DIR$\..\..\..\..\os\hal\platforms\STM32\DMAv2</state>
 +          <state>$PROJ_DIR$\..\..\..\..\os\hal\platforms\STM32\GPIOv2</state>
 +          <state>$PROJ_DIR$\..\..\..\..\os\hal\platforms\STM32\SPIv1</state>
 +          <state>$PROJ_DIR$\..\..\..\..\os\hal\platforms\STM32\USARTv1</state>
 +          <state>$PROJ_DIR$\..\..\..\..\os\hal\platforms\STM32f4xx</state>
 +          <state>$PROJ_DIR$\..\..\..\..\boards\ST_STM32f4_DISCOVERY</state>
 +          <state>$PROJ_DIR$\..\..\..\..\test</state>
 +        </option>
 +        <option>
 +          <name>CCStdIncCheck</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>CCCodeSection</name>
 +          <state>.text</state>
 +        </option>
 +        <option>
 +          <name>IInterwork2</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IProcessorMode2</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>CCOptLevel</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>CCOptStrategy</name>
 +          <version>0</version>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>CCOptLevelSlave</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>CompilerMisraRules98</name>
 +          <version>0</version>
 +          <state>1000111110110101101110011100111111101110011011000101110111101101100111111111111100110011111001110111001111111111111111111111111</state>
 +        </option>
 +        <option>
 +          <name>CompilerMisraRules04</name>
 +          <version>0</version>
 +          <state>111101110010111111111000110111111111111111111111111110010111101111010101111111111111111111111111101111111011111001111011111011111111111111111</state>
 +        </option>
 +        <option>
 +          <name>CCPosIndRopi</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>CCPosIndRwpi</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>CCPosIndNoDynInit</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IccLang</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IccCDialect</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IccAllowVLA</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IccCppDialect</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IccExceptions</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IccRTTI</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IccStaticDestr</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IccCppInlineSemantics</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IccCmsis</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IccFloatSemantics</name>
 +          <state>0</state>
 +        </option>
 +      </data>
 +    </settings>
 +    <settings>
 +      <name>AARM</name>
 +      <archiveVersion>2</archiveVersion>
 +      <data>
 +        <version>8</version>
 +        <wantNonLocal>1</wantNonLocal>
 +        <debug>1</debug>
 +        <option>
 +          <name>AObjPrefix</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>AEndian</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>ACaseSensitivity</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>MacroChars</name>
 +          <version>0</version>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>AWarnEnable</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>AWarnWhat</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>AWarnOne</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>AWarnRange1</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>AWarnRange2</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>ADebug</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>AltRegisterNames</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>ADefines</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>AList</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>AListHeader</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>AListing</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>Includes</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>MacDefs</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>MacExps</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>MacExec</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>OnlyAssed</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>MultiLine</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>PageLengthCheck</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>PageLength</name>
 +          <state>80</state>
 +        </option>
 +        <option>
 +          <name>TabSpacing</name>
 +          <state>8</state>
 +        </option>
 +        <option>
 +          <name>AXRef</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>AXRefDefines</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>AXRefInternal</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>AXRefDual</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>AProcessor</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>AFpuProcessor</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>AOutputFile</name>
 +          <state>$FILE_BNAME$.o</state>
 +        </option>
 +        <option>
 +          <name>AMultibyteSupport</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>ALimitErrorsCheck</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>ALimitErrorsEdit</name>
 +          <state>100</state>
 +        </option>
 +        <option>
 +          <name>AIgnoreStdInclude</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>AUserIncludes</name>
 +          <state>$PROJ_DIR$\..</state>
 +          <state>$PROJ_DIR$\..\..\..\..\os\ports\IAR\ARMCMx\STM32f4xx</state>
 +          <state>$PROJ_DIR$\..\..\..\..\boards\ST_STM32f4_DISCOVERY</state>
 +        </option>
 +        <option>
 +          <name>AExtraOptionsCheckV2</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>AExtraOptionsV2</name>
 +          <state></state>
 +        </option>
 +      </data>
 +    </settings>
 +    <settings>
 +      <name>OBJCOPY</name>
 +      <archiveVersion>0</archiveVersion>
 +      <data>
 +        <version>1</version>
 +        <wantNonLocal>1</wantNonLocal>
 +        <debug>1</debug>
 +        <option>
 +          <name>OOCOutputFormat</name>
 +          <version>2</version>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>OCOutputOverride</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>OOCOutputFile</name>
 +          <state>ch.srec</state>
 +        </option>
 +        <option>
 +          <name>OOCCommandLineProducer</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>OOCObjCopyEnable</name>
 +          <state>0</state>
 +        </option>
 +      </data>
 +    </settings>
 +    <settings>
 +      <name>CUSTOM</name>
 +      <archiveVersion>3</archiveVersion>
 +      <data>
 +        <extensions></extensions>
 +        <cmdline></cmdline>
 +      </data>
 +    </settings>
 +    <settings>
 +      <name>BICOMP</name>
 +      <archiveVersion>0</archiveVersion>
 +      <data/>
 +    </settings>
 +    <settings>
 +      <name>BUILDACTION</name>
 +      <archiveVersion>1</archiveVersion>
 +      <data>
 +        <prebuild></prebuild>
 +        <postbuild></postbuild>
 +      </data>
 +    </settings>
 +    <settings>
 +      <name>ILINK</name>
 +      <archiveVersion>0</archiveVersion>
 +      <data>
 +        <version>14</version>
 +        <wantNonLocal>1</wantNonLocal>
 +        <debug>1</debug>
 +        <option>
 +          <name>IlinkOutputFile</name>
 +          <state>ch.out</state>
 +        </option>
 +        <option>
 +          <name>IlinkLibIOConfig</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>XLinkMisraHandler</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IlinkInputFileSlave</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IlinkDebugInfoEnable</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IlinkKeepSymbols</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>IlinkRawBinaryFile</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>IlinkRawBinarySymbol</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>IlinkRawBinarySegment</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>IlinkRawBinaryAlign</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>IlinkDefines</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>IlinkConfigDefines</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>IlinkMapFile</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IlinkLogFile</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IlinkLogInitialization</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IlinkLogModule</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IlinkLogSection</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IlinkLogVeneer</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IlinkIcfOverride</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IlinkIcfFile</name>
 +          <state>$PROJ_DIR$\ch.icf</state>
 +        </option>
 +        <option>
 +          <name>IlinkIcfFileSlave</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>IlinkEnableRemarks</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IlinkSuppressDiags</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>IlinkTreatAsRem</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>IlinkTreatAsWarn</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>IlinkTreatAsErr</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>IlinkWarningsAreErrors</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IlinkUseExtraOptions</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IlinkExtraOptions</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>IlinkLowLevelInterfaceSlave</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IlinkAutoLibEnable</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IlinkAdditionalLibs</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>IlinkOverrideProgramEntryLabel</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IlinkProgramEntryLabelSelect</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IlinkProgramEntryLabel</name>
 +          <state>__iar_program_start</state>
 +        </option>
 +        <option>
 +          <name>DoFill</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>FillerByte</name>
 +          <state>0xFF</state>
 +        </option>
 +        <option>
 +          <name>FillerStart</name>
 +          <state>0x0</state>
 +        </option>
 +        <option>
 +          <name>FillerEnd</name>
 +          <state>0x0</state>
 +        </option>
 +        <option>
 +          <name>CrcSize</name>
 +          <version>0</version>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>CrcAlign</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>CrcAlgo</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>CrcPoly</name>
 +          <state>0x11021</state>
 +        </option>
 +        <option>
 +          <name>CrcCompl</name>
 +          <version>0</version>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>CrcBitOrder</name>
 +          <version>0</version>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>CrcInitialValue</name>
 +          <state>0x0</state>
 +        </option>
 +        <option>
 +          <name>DoCrc</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IlinkBE8Slave</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IlinkBufferedTerminalOutput</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IlinkStdoutInterfaceSlave</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>CrcFullSize</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IlinkIElfToolPostProcess</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IlinkLogAutoLibSelect</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IlinkLogRedirSymbols</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IlinkLogUnusedFragments</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IlinkCrcReverseByteOrder</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IlinkCrcUseAsInput</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IlinkOptInline</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IlinkOptExceptionsAllow</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IlinkOptExceptionsForce</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IlinkCmsis</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IlinkOptMergeDuplSections</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IlinkOptUseVfe</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IlinkOptForceVfe</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IlinkStackAnalysisEnable</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IlinkStackControlFile</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>IlinkStackCallGraphFile</name>
 +          <state></state>
 +        </option>
 +      </data>
 +    </settings>
 +    <settings>
 +      <name>IARCHIVE</name>
 +      <archiveVersion>0</archiveVersion>
 +      <data>
 +        <version>0</version>
 +        <wantNonLocal>1</wantNonLocal>
 +        <debug>1</debug>
 +        <option>
 +          <name>IarchiveInputs</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>IarchiveOverride</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IarchiveOutput</name>
 +          <state>###Unitialized###</state>
 +        </option>
 +      </data>
 +    </settings>
 +    <settings>
 +      <name>BILINK</name>
 +      <archiveVersion>0</archiveVersion>
 +      <data/>
 +    </settings>
 +  </configuration>
 +  <configuration>
 +    <name>Release</name>
 +    <toolchain>
 +      <name>ARM</name>
 +    </toolchain>
 +    <debug>0</debug>
 +    <settings>
 +      <name>General</name>
 +      <archiveVersion>3</archiveVersion>
 +      <data>
 +        <version>21</version>
 +        <wantNonLocal>1</wantNonLocal>
 +        <debug>0</debug>
 +        <option>
 +          <name>ExePath</name>
 +          <state>Release\Exe</state>
 +        </option>
 +        <option>
 +          <name>ObjPath</name>
 +          <state>Release\Obj</state>
 +        </option>
 +        <option>
 +          <name>ListPath</name>
 +          <state>Release\List</state>
 +        </option>
 +        <option>
 +          <name>Variant</name>
 +          <version>19</version>
 +          <state>38</state>
 +        </option>
 +        <option>
 +          <name>GEndianMode</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>Input variant</name>
 +          <version>3</version>
 +          <state>6</state>
 +        </option>
 +        <option>
 +          <name>Input description</name>
 +          <state>No specifier n, no float nor long long, no scan set, no assignment suppressing.</state>
 +        </option>
 +        <option>
 +          <name>Output variant</name>
 +          <version>2</version>
 +          <state>7</state>
 +        </option>
 +        <option>
 +          <name>Output description</name>
 +          <state>No specifier a, A, no specifier n, no float nor long long, no flags.</state>
 +        </option>
 +        <option>
 +          <name>GOutputBinary</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>FPU</name>
 +          <version>2</version>
 +          <state>5</state>
 +        </option>
 +        <option>
 +          <name>OGCoreOrChip</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>GRuntimeLibSelect</name>
 +          <version>0</version>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>GRuntimeLibSelectSlave</name>
 +          <version>0</version>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>RTDescription</name>
 +          <state>Use the normal configuration of the C/C++ runtime library. No locale interface, C locale, no file descriptor support, no multibytes in printf and scanf, and no hex floats in strtod.</state>
 +        </option>
 +        <option>
 +          <name>OGProductVersion</name>
 +          <state>5.10.0.159</state>
 +        </option>
 +        <option>
 +          <name>OGLastSavedByProductVersion</name>
 +          <state>6.30.3.53229</state>
 +        </option>
 +        <option>
 +          <name>GeneralEnableMisra</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>GeneralMisraVerbose</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>OGChipSelectEditMenu</name>
 +          <state>STM32F4xxx	ST STM32F4xxx</state>
 +        </option>
 +        <option>
 +          <name>GenLowLevelInterface</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>GEndianModeBE</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>OGBufferedTerminalOutput</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>GenStdoutInterface</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>GeneralMisraRules98</name>
 +          <version>0</version>
 +          <state>1000111110110101101110011100111111101110011011000101110111101101100111111111111100110011111001110111001111111111111111111111111</state>
 +        </option>
 +        <option>
 +          <name>GeneralMisraVer</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>GeneralMisraRules04</name>
 +          <version>0</version>
 +          <state>111101110010111111111000110111111111111111111111111110010111101111010101111111111111111111111111101111111011111001111011111011111111111111111</state>
 +        </option>
 +        <option>
 +          <name>RTConfigPath2</name>
 +          <state>$TOOLKIT_DIR$\INC\c\DLib_Config_Normal.h</state>
 +        </option>
 +        <option>
 +          <name>GFPUCoreSlave</name>
 +          <version>19</version>
 +          <state>38</state>
 +        </option>
 +        <option>
 +          <name>GBECoreSlave</name>
 +          <version>19</version>
 +          <state>38</state>
 +        </option>
 +        <option>
 +          <name>OGUseCmsis</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>OGUseCmsisDspLib</name>
 +          <state>0</state>
 +        </option>
 +      </data>
 +    </settings>
 +    <settings>
 +      <name>ICCARM</name>
 +      <archiveVersion>2</archiveVersion>
 +      <data>
 +        <version>28</version>
 +        <wantNonLocal>1</wantNonLocal>
 +        <debug>0</debug>
 +        <option>
 +          <name>CCDefines</name>
 +          <state>NDEBUG</state>
 +        </option>
 +        <option>
 +          <name>CCPreprocFile</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>CCPreprocComments</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>CCPreprocLine</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>CCListCFile</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>CCListCMnemonics</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>CCListCMessages</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>CCListAssFile</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>CCListAssSource</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>CCEnableRemarks</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>CCDiagSuppress</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>CCDiagRemark</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>CCDiagWarning</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>CCDiagError</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>CCObjPrefix</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>CCAllowList</name>
 +          <version>1</version>
 +          <state>1111111</state>
 +        </option>
 +        <option>
 +          <name>CCDebugInfo</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IEndianMode</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IProcessor</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IExtraOptionsCheck</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IExtraOptions</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>CCLangConformance</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>CCSignedPlainChar</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>CCRequirePrototypes</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>CCMultibyteSupport</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>CCDiagWarnAreErr</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>CCCompilerRuntimeInfo</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IFpuProcessor</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>OutputFile</name>
 +          <state>$FILE_BNAME$.o</state>
 +        </option>
 +        <option>
 +          <name>CCLibConfigHeader</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>PreInclude</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>CompilerMisraOverride</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>CCIncludePath2</name>
 +          <state>$PROJ_DIR$\..\</state>
 +          <state>$PROJ_DIR$\..\..\..\..\os\kernel\include</state>
 +          <state>$PROJ_DIR$\..\..\..\..\os\ports\common\ARMCMx</state>
 +          <state>$PROJ_DIR$\..\..\..\..\os\ports\common\ARMCMx\CMSIS\include</state>
 +          <state>$PROJ_DIR$\..\..\..\..\os\ports\IAR\ARMCMx</state>
 +          <state>$PROJ_DIR$\..\..\..\..\os\ports\IAR\ARMCMx\STM32f4xx</state>
 +          <state>$PROJ_DIR$\..\..\..\..\os\hal\include</state>
 +          <state>$PROJ_DIR$\..\..\..\..\os\hal\platforms\STM32</state>
 +          <state>$PROJ_DIR$\..\..\..\..\os\hal\platforms\STM32\DMAv2</state>
 +          <state>$PROJ_DIR$\..\..\..\..\os\hal\platforms\STM32\GPIOv2</state>
 +          <state>$PROJ_DIR$\..\..\..\..\os\hal\platforms\STM32\SPIv1</state>
 +          <state>$PROJ_DIR$\..\..\..\..\os\hal\platforms\STM32\USARTv1</state>
 +          <state>$PROJ_DIR$\..\..\..\..\os\hal\platforms\STM32f4xx</state>
 +          <state>$PROJ_DIR$\..\..\..\..\boards\ST_STM32f4_DISCOVERY</state>
 +          <state>$PROJ_DIR$\..\..\..\..\test</state>
 +        </option>
 +        <option>
 +          <name>CCStdIncCheck</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>CCCodeSection</name>
 +          <state>.text</state>
 +        </option>
 +        <option>
 +          <name>IInterwork2</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IProcessorMode2</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>CCOptLevel</name>
 +          <state>3</state>
 +        </option>
 +        <option>
 +          <name>CCOptStrategy</name>
 +          <version>0</version>
 +          <state>2</state>
 +        </option>
 +        <option>
 +          <name>CCOptLevelSlave</name>
 +          <state>3</state>
 +        </option>
 +        <option>
 +          <name>CompilerMisraRules98</name>
 +          <version>0</version>
 +          <state>1000111110110101101110011100111111101110011011000101110111101101100111111111111100110011111001110111001111111111111111111111111</state>
 +        </option>
 +        <option>
 +          <name>CompilerMisraRules04</name>
 +          <version>0</version>
 +          <state>111101110010111111111000110111111111111111111111111110010111101111010101111111111111111111111111101111111011111001111011111011111111111111111</state>
 +        </option>
 +        <option>
 +          <name>CCPosIndRopi</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>CCPosIndRwpi</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>CCPosIndNoDynInit</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IccLang</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IccCDialect</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IccAllowVLA</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IccCppDialect</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IccExceptions</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IccRTTI</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IccStaticDestr</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IccCppInlineSemantics</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IccCmsis</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IccFloatSemantics</name>
 +          <state>0</state>
 +        </option>
 +      </data>
 +    </settings>
 +    <settings>
 +      <name>AARM</name>
 +      <archiveVersion>2</archiveVersion>
 +      <data>
 +        <version>8</version>
 +        <wantNonLocal>1</wantNonLocal>
 +        <debug>0</debug>
 +        <option>
 +          <name>AObjPrefix</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>AEndian</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>ACaseSensitivity</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>MacroChars</name>
 +          <version>0</version>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>AWarnEnable</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>AWarnWhat</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>AWarnOne</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>AWarnRange1</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>AWarnRange2</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>ADebug</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>AltRegisterNames</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>ADefines</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>AList</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>AListHeader</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>AListing</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>Includes</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>MacDefs</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>MacExps</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>MacExec</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>OnlyAssed</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>MultiLine</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>PageLengthCheck</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>PageLength</name>
 +          <state>80</state>
 +        </option>
 +        <option>
 +          <name>TabSpacing</name>
 +          <state>8</state>
 +        </option>
 +        <option>
 +          <name>AXRef</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>AXRefDefines</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>AXRefInternal</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>AXRefDual</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>AProcessor</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>AFpuProcessor</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>AOutputFile</name>
 +          <state>$FILE_BNAME$.o</state>
 +        </option>
 +        <option>
 +          <name>AMultibyteSupport</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>ALimitErrorsCheck</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>ALimitErrorsEdit</name>
 +          <state>100</state>
 +        </option>
 +        <option>
 +          <name>AIgnoreStdInclude</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>AUserIncludes</name>
 +          <state>$PROJ_DIR$\..</state>
 +          <state>$PROJ_DIR$\..\..\..\..\os\ports\IAR\ARMCMx\STM32f4xx</state>
 +          <state>$PROJ_DIR$\..\..\..\..\boards\ST_STM32f4_DISCOVERY</state>
 +        </option>
 +        <option>
 +          <name>AExtraOptionsCheckV2</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>AExtraOptionsV2</name>
 +          <state></state>
 +        </option>
 +      </data>
 +    </settings>
 +    <settings>
 +      <name>OBJCOPY</name>
 +      <archiveVersion>0</archiveVersion>
 +      <data>
 +        <version>1</version>
 +        <wantNonLocal>1</wantNonLocal>
 +        <debug>0</debug>
 +        <option>
 +          <name>OOCOutputFormat</name>
 +          <version>2</version>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>OCOutputOverride</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>OOCOutputFile</name>
 +          <state>ch.hex</state>
 +        </option>
 +        <option>
 +          <name>OOCCommandLineProducer</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>OOCObjCopyEnable</name>
 +          <state>1</state>
 +        </option>
 +      </data>
 +    </settings>
 +    <settings>
 +      <name>CUSTOM</name>
 +      <archiveVersion>3</archiveVersion>
 +      <data>
 +        <extensions></extensions>
 +        <cmdline></cmdline>
 +      </data>
 +    </settings>
 +    <settings>
 +      <name>BICOMP</name>
 +      <archiveVersion>0</archiveVersion>
 +      <data/>
 +    </settings>
 +    <settings>
 +      <name>BUILDACTION</name>
 +      <archiveVersion>1</archiveVersion>
 +      <data>
 +        <prebuild></prebuild>
 +        <postbuild></postbuild>
 +      </data>
 +    </settings>
 +    <settings>
 +      <name>ILINK</name>
 +      <archiveVersion>0</archiveVersion>
 +      <data>
 +        <version>14</version>
 +        <wantNonLocal>1</wantNonLocal>
 +        <debug>0</debug>
 +        <option>
 +          <name>IlinkOutputFile</name>
 +          <state>ch.out</state>
 +        </option>
 +        <option>
 +          <name>IlinkLibIOConfig</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>XLinkMisraHandler</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IlinkInputFileSlave</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IlinkDebugInfoEnable</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IlinkKeepSymbols</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>IlinkRawBinaryFile</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>IlinkRawBinarySymbol</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>IlinkRawBinarySegment</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>IlinkRawBinaryAlign</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>IlinkDefines</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>IlinkConfigDefines</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>IlinkMapFile</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IlinkLogFile</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IlinkLogInitialization</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IlinkLogModule</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IlinkLogSection</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IlinkLogVeneer</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IlinkIcfOverride</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IlinkIcfFile</name>
 +          <state>$PROJ_DIR$\ch.icf</state>
 +        </option>
 +        <option>
 +          <name>IlinkIcfFileSlave</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>IlinkEnableRemarks</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IlinkSuppressDiags</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>IlinkTreatAsRem</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>IlinkTreatAsWarn</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>IlinkTreatAsErr</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>IlinkWarningsAreErrors</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IlinkUseExtraOptions</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IlinkExtraOptions</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>IlinkLowLevelInterfaceSlave</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IlinkAutoLibEnable</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IlinkAdditionalLibs</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>IlinkOverrideProgramEntryLabel</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IlinkProgramEntryLabelSelect</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IlinkProgramEntryLabel</name>
 +          <state>__iar_program_start</state>
 +        </option>
 +        <option>
 +          <name>DoFill</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>FillerByte</name>
 +          <state>0xFF</state>
 +        </option>
 +        <option>
 +          <name>FillerStart</name>
 +          <state>0x0</state>
 +        </option>
 +        <option>
 +          <name>FillerEnd</name>
 +          <state>0x0</state>
 +        </option>
 +        <option>
 +          <name>CrcSize</name>
 +          <version>0</version>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>CrcAlign</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>CrcAlgo</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>CrcPoly</name>
 +          <state>0x11021</state>
 +        </option>
 +        <option>
 +          <name>CrcCompl</name>
 +          <version>0</version>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>CrcBitOrder</name>
 +          <version>0</version>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>CrcInitialValue</name>
 +          <state>0x0</state>
 +        </option>
 +        <option>
 +          <name>DoCrc</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IlinkBE8Slave</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IlinkBufferedTerminalOutput</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IlinkStdoutInterfaceSlave</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>CrcFullSize</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IlinkIElfToolPostProcess</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IlinkLogAutoLibSelect</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IlinkLogRedirSymbols</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IlinkLogUnusedFragments</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IlinkCrcReverseByteOrder</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IlinkCrcUseAsInput</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IlinkOptInline</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IlinkOptExceptionsAllow</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IlinkOptExceptionsForce</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IlinkCmsis</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IlinkOptMergeDuplSections</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IlinkOptUseVfe</name>
 +          <state>1</state>
 +        </option>
 +        <option>
 +          <name>IlinkOptForceVfe</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IlinkStackAnalysisEnable</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IlinkStackControlFile</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>IlinkStackCallGraphFile</name>
 +          <state></state>
 +        </option>
 +      </data>
 +    </settings>
 +    <settings>
 +      <name>IARCHIVE</name>
 +      <archiveVersion>0</archiveVersion>
 +      <data>
 +        <version>0</version>
 +        <wantNonLocal>1</wantNonLocal>
 +        <debug>0</debug>
 +        <option>
 +          <name>IarchiveInputs</name>
 +          <state></state>
 +        </option>
 +        <option>
 +          <name>IarchiveOverride</name>
 +          <state>0</state>
 +        </option>
 +        <option>
 +          <name>IarchiveOutput</name>
 +          <state>###Unitialized###</state>
 +        </option>
 +      </data>
 +    </settings>
 +    <settings>
 +      <name>BILINK</name>
 +      <archiveVersion>0</archiveVersion>
 +      <data/>
 +    </settings>
 +  </configuration>
 +  <group>
 +    <name>board</name>
 +    <file>
 +      <name>$PROJ_DIR$\..\..\..\..\boards\ST_STM32f4_DISCOVERY\board.c</name>
 +    </file>
 +    <file>
 +      <name>$PROJ_DIR$\..\..\..\..\boards\ST_STM32f4_DISCOVERY\board.h</name>
 +    </file>
 +  </group>
 +  <group>
 +    <name>os</name>
 +    <group>
 +      <name>hal</name>
 +      <group>
 +        <name>include</name>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\hal\include\adc.h</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\hal\include\can.h</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\hal\include\ext.h</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\hal\include\gpt.h</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\hal\include\hal.h</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\hal\include\i2c.h</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\hal\include\icu.h</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\hal\include\mac.h</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\hal\include\mii.h</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\hal\include\mmc_spi.h</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\hal\include\pal.h</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\hal\include\pwm.h</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\hal\include\rtc.h</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\hal\include\sdc.h</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\hal\include\serial.h</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\hal\include\serial_usb.h</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\hal\include\spi.h</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\hal\include\tm.h</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\hal\include\uart.h</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\hal\include\usb.h</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\hal\include\usb_cdc.h</name>
 +        </file>
 +      </group>
 +      <group>
 +        <name>src</name>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\hal\src\adc.c</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\hal\src\can.c</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\hal\src\ext.c</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\hal\src\gpt.c</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\hal\src\hal.c</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\hal\src\i2c.c</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\hal\src\icu.c</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\hal\src\mac.c</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\hal\src\mmc_spi.c</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\hal\src\pal.c</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\hal\src\pwm.c</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\hal\src\rtc.c</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\hal\src\sdc.c</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\hal\src\serial.c</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\hal\src\serial_usb.c</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\hal\src\spi.c</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\hal\src\tm.c</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\hal\src\uart.c</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\hal\src\usb.c</name>
 +        </file>
 +      </group>
 +    </group>
 +    <group>
 +      <name>kernel</name>
 +      <group>
 +        <name>include</name>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\kernel\include\ch.h</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\kernel\include\chcond.h</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\kernel\include\chdebug.h</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\kernel\include\chdynamic.h</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\kernel\include\chevents.h</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\kernel\include\chheap.h</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\kernel\include\chinline.h</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\kernel\include\chioch.h</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\kernel\include\chlists.h</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\kernel\include\chmboxes.h</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\kernel\include\chmemcore.h</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\kernel\include\chmempools.h</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\kernel\include\chmsg.h</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\kernel\include\chmtx.h</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\kernel\include\chqueues.h</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\kernel\include\chregistry.h</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\kernel\include\chschd.h</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\kernel\include\chsem.h</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\kernel\include\chstreams.h</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\kernel\include\chsys.h</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\kernel\include\chthreads.h</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\kernel\include\chvt.h</name>
 +        </file>
 +      </group>
 +      <group>
 +        <name>src</name>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\kernel\src\chcond.c</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\kernel\src\chdebug.c</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\kernel\src\chdynamic.c</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\kernel\src\chevents.c</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\kernel\src\chheap.c</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\kernel\src\chlists.c</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\kernel\src\chmboxes.c</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\kernel\src\chmemcore.c</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\kernel\src\chmempools.c</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\kernel\src\chmsg.c</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\kernel\src\chmtx.c</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\kernel\src\chqueues.c</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\kernel\src\chregistry.c</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\kernel\src\chschd.c</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\kernel\src\chsem.c</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\kernel\src\chsys.c</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\kernel\src\chthreads.c</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\kernel\src\chvt.c</name>
 +        </file>
 +      </group>
 +    </group>
 +    <group>
 +      <name>platform</name>
 +      <file>
 +        <name>$PROJ_DIR$\..\..\..\..\os\hal\platforms\STM32\gpt_lld.c</name>
 +      </file>
 +      <file>
 +        <name>$PROJ_DIR$\..\..\..\..\os\hal\platforms\STM32\gpt_lld.h</name>
 +      </file>
 +      <file>
 +        <name>$PROJ_DIR$\..\..\..\..\os\hal\platforms\STM32f4xx\hal_lld.c</name>
 +      </file>
 +      <file>
 +        <name>$PROJ_DIR$\..\..\..\..\os\hal\platforms\STM32f4xx\hal_lld.h</name>
 +      </file>
 +      <file>
 +        <name>$PROJ_DIR$\..\..\..\..\os\hal\platforms\STM32\GPIOv2\pal_lld.c</name>
 +      </file>
 +      <file>
 +        <name>$PROJ_DIR$\..\..\..\..\os\hal\platforms\STM32\GPIOv2\pal_lld.h</name>
 +      </file>
 +      <file>
 +        <name>$PROJ_DIR$\..\..\..\..\os\hal\platforms\STM32\USARTv1\serial_lld.c</name>
 +      </file>
 +      <file>
 +        <name>$PROJ_DIR$\..\..\..\..\os\hal\platforms\STM32\USARTv1\serial_lld.h</name>
 +      </file>
 +      <file>
 +        <name>$PROJ_DIR$\..\..\..\..\os\hal\platforms\STM32\SPIv1\spi_lld.c</name>
 +      </file>
 +      <file>
 +        <name>$PROJ_DIR$\..\..\..\..\os\hal\platforms\STM32\SPIv1\spi_lld.h</name>
 +      </file>
 +      <file>
 +        <name>$PROJ_DIR$\..\..\..\..\os\hal\platforms\STM32f4xx\stm32_dma.c</name>
 +      </file>
 +      <file>
 +        <name>$PROJ_DIR$\..\..\..\..\os\hal\platforms\STM32f4xx\stm32_dma.h</name>
 +      </file>
 +      <file>
 +        <name>$PROJ_DIR$\..\..\..\..\os\hal\platforms\STM32f4xx\stm32f4xx.h</name>
 +      </file>
 +    </group>
 +    <group>
 +      <name>port</name>
 +      <group>
 +        <name>STM32F4xx</name>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\ports\IAR\ARMCMx\STM32f4xx\cmparams.h</name>
 +        </file>
 +        <file>
 +          <name>$PROJ_DIR$\..\..\..\..\os\ports\IAR\ARMCMx\STM32f4xx\vectors.s</name>
 +        </file>
 +      </group>
 +      <file>
 +        <name>$PROJ_DIR$\..\..\..\..\os\ports\IAR\ARMCMx\chcore.c</name>
 +      </file>
 +      <file>
 +        <name>$PROJ_DIR$\..\..\..\..\os\ports\IAR\ARMCMx\chcore.h</name>
 +      </file>
 +      <file>
 +        <name>$PROJ_DIR$\..\..\..\..\os\ports\IAR\ARMCMx\chcore_v7m.c</name>
 +      </file>
 +      <file>
 +        <name>$PROJ_DIR$\..\..\..\..\os\ports\IAR\ARMCMx\chcore_v7m.h</name>
 +      </file>
 +      <file>
 +        <name>$PROJ_DIR$\..\..\..\..\os\ports\IAR\ARMCMx\chcoreasm_v7m.s</name>
 +      </file>
 +      <file>
 +        <name>$PROJ_DIR$\..\..\..\..\os\ports\IAR\ARMCMx\chtypes.h</name>
 +      </file>
 +      <file>
 +        <name>$PROJ_DIR$\..\..\..\..\os\ports\IAR\ARMCMx\cstartup.s</name>
 +      </file>
 +      <file>
 +        <name>$PROJ_DIR$\..\..\..\..\os\ports\common\ARMCMx\nvic.c</name>
 +      </file>
 +      <file>
 +        <name>$PROJ_DIR$\..\..\..\..\os\ports\common\ARMCMx\nvic.h</name>
 +      </file>
 +    </group>
 +  </group>
 +  <group>
 +    <name>test</name>
 +    <file>
 +      <name>$PROJ_DIR$\..\..\..\..\test\test.c</name>
 +    </file>
 +    <file>
 +      <name>$PROJ_DIR$\..\..\..\..\test\test.h</name>
 +    </file>
 +    <file>
 +      <name>$PROJ_DIR$\..\..\..\..\test\testbmk.c</name>
 +    </file>
 +    <file>
 +      <name>$PROJ_DIR$\..\..\..\..\test\testbmk.h</name>
 +    </file>
 +    <file>
 +      <name>$PROJ_DIR$\..\..\..\..\test\testdyn.c</name>
 +    </file>
 +    <file>
 +      <name>$PROJ_DIR$\..\..\..\..\test\testdyn.h</name>
 +    </file>
 +    <file>
 +      <name>$PROJ_DIR$\..\..\..\..\test\testevt.c</name>
 +    </file>
 +    <file>
 +      <name>$PROJ_DIR$\..\..\..\..\test\testevt.h</name>
 +    </file>
 +    <file>
 +      <name>$PROJ_DIR$\..\..\..\..\test\testheap.c</name>
 +    </file>
 +    <file>
 +      <name>$PROJ_DIR$\..\..\..\..\test\testheap.h</name>
 +    </file>
 +    <file>
 +      <name>$PROJ_DIR$\..\..\..\..\test\testmbox.c</name>
 +    </file>
 +    <file>
 +      <name>$PROJ_DIR$\..\..\..\..\test\testmbox.h</name>
 +    </file>
 +    <file>
 +      <name>$PROJ_DIR$\..\..\..\..\test\testmsg.c</name>
 +    </file>
 +    <file>
 +      <name>$PROJ_DIR$\..\..\..\..\test\testmsg.h</name>
 +    </file>
 +    <file>
 +      <name>$PROJ_DIR$\..\..\..\..\test\testmtx.c</name>
 +    </file>
 +    <file>
 +      <name>$PROJ_DIR$\..\..\..\..\test\testmtx.h</name>
 +    </file>
 +    <file>
 +      <name>$PROJ_DIR$\..\..\..\..\test\testpools.c</name>
 +    </file>
 +    <file>
 +      <name>$PROJ_DIR$\..\..\..\..\test\testpools.h</name>
 +    </file>
 +    <file>
 +      <name>$PROJ_DIR$\..\..\..\..\test\testqueues.c</name>
 +    </file>
 +    <file>
 +      <name>$PROJ_DIR$\..\..\..\..\test\testqueues.h</name>
 +    </file>
 +    <file>
 +      <name>$PROJ_DIR$\..\..\..\..\test\testsem.c</name>
 +    </file>
 +    <file>
 +      <name>$PROJ_DIR$\..\..\..\..\test\testsem.h</name>
 +    </file>
 +    <file>
 +      <name>$PROJ_DIR$\..\..\..\..\test\testthd.c</name>
 +    </file>
 +    <file>
 +      <name>$PROJ_DIR$\..\..\..\..\test\testthd.h</name>
 +    </file>
 +  </group>
 +  <file>
 +    <name>$PROJ_DIR$\..\chconf.h</name>
 +  </file>
 +  <file>
 +    <name>$PROJ_DIR$\..\extfunc.c</name>
 +  </file>
 +  <file>
 +    <name>$PROJ_DIR$\..\halconf.h</name>
 +  </file>
 +  <file>
 +    <name>$PROJ_DIR$\..\main.c</name>
 +  </file>
 +  <file>
 +    <name>$PROJ_DIR$\..\mcuconf.h</name>
 +  </file>
 +</project>
 +
 +
 diff --git a/testhal/STM32F4xx/IRQ_STORM_FPU/iar/ch.eww b/testhal/STM32F4xx/IRQ_STORM_FPU/iar/ch.eww new file mode 100644 index 000000000..f9b3b2000 --- /dev/null +++ b/testhal/STM32F4xx/IRQ_STORM_FPU/iar/ch.eww @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="iso-8859-1"?>
 +
 +<workspace>
 +  <project>
 +    <path>$WS_DIR$\ch.ewp</path>
 +  </project>
 +  <batchBuild/>
 +</workspace>
 +
 +
 diff --git a/testhal/STM32F4xx/IRQ_STORM_FPU/iar/ch.icf b/testhal/STM32F4xx/IRQ_STORM_FPU/iar/ch.icf new file mode 100644 index 000000000..c0a51f44c --- /dev/null +++ b/testhal/STM32F4xx/IRQ_STORM_FPU/iar/ch.icf @@ -0,0 +1,39 @@ +/*###ICF### Section handled by ICF editor, don't touch! ****/
 +/*-Editor annotation file-*/
 +/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */
 +/*-Specials-*/
 +define symbol __ICFEDIT_intvec_start__ = 0x08000000;
 +/*-Memory Regions-*/
 +define symbol __ICFEDIT_region_ROM_start__ = 0x08000000;
 +define symbol __ICFEDIT_region_ROM_end__   = 0x0801FFFF;
 +define symbol __ICFEDIT_region_RAM_start__ = 0x20000000;
 +define symbol __ICFEDIT_region_RAM_end__   = 0x2001FFFF;
 +/*-Sizes-*/
 +define symbol __ICFEDIT_size_cstack__ = 0x400;
 +define symbol __ICFEDIT_size_heap__   = 0x400;
 +/**** End of ICF editor section. ###ICF###*/
 +
 +/* Size of the IRQ Stack (Main Stack).*/
 +define symbol __ICFEDIT_size_irqstack__   = 0x400;
 +
 +define memory mem with size = 4G;
 +define region ROM_region   = mem:[from __ICFEDIT_region_ROM_start__   to __ICFEDIT_region_ROM_end__];
 +define region RAM_region   = mem:[from __ICFEDIT_region_RAM_start__   to __ICFEDIT_region_RAM_end__];
 +
 +define block CSTACK    with alignment = 8, size = __ICFEDIT_size_cstack__   {section CSTACK};
 +define block IRQSTACK  with alignment = 8, size = __ICFEDIT_size_irqstack__ {};
 +define block HEAP      with alignment = 8, size = __ICFEDIT_size_heap__     {};
 +define block SYSHEAP   with alignment = 8                                   {section SYSHEAP};
 +define block DATABSS with alignment = 8 {readwrite, zeroinit};
 +
 +initialize by copy { readwrite };
 +do not initialize  { section .noinit };
 +
 +keep { section .intvec };
 +
 +place at address mem:__ICFEDIT_intvec_start__ {section .intvec};
 +place in ROM_region                           {readonly};
 +place at start of RAM_region                  {block IRQSTACK};
 +place in RAM_region                           {block DATABSS, block HEAP};
 +place in RAM_region                           {block SYSHEAP};
 +place at end of RAM_region                    {block CSTACK};
 diff --git a/testhal/STM32F4xx/IRQ_STORM_FPU/keil/ch.uvproj b/testhal/STM32F4xx/IRQ_STORM_FPU/keil/ch.uvproj new file mode 100644 index 000000000..0f02f5523 --- /dev/null +++ b/testhal/STM32F4xx/IRQ_STORM_FPU/keil/ch.uvproj @@ -0,0 +1,945 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no" ?> +<Project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_proj.xsd"> + +  <SchemaVersion>1.1</SchemaVersion> + +  <Header>### uVision Project, (C) Keil Software</Header> + +  <Targets> +    <Target> +      <TargetName>Demo</TargetName> +      <ToolsetNumber>0x4</ToolsetNumber> +      <ToolsetName>ARM-ADS</ToolsetName> +      <TargetOption> +        <TargetCommonOption> +          <Device>STM32F407VG</Device> +          <Vendor>STMicroelectronics</Vendor> +          <Cpu>IRAM(0x20000000-0x2001FFFF) IRAM2(0x10000000-0x1000FFFF) IROM(0x8000000-0x80FFFFF) CLOCK(25000000) CPUTYPE("Cortex-M4") FPU2</Cpu> +          <FlashUtilSpec></FlashUtilSpec> +          <StartupFile>"Startup\ST\STM32F4xx\startup_stm32f4xx.s" ("STM32F4xx Startup Code")</StartupFile> +          <FlashDriverDll>UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F4xx_1024 -FS08000000 -FL0100000)</FlashDriverDll> +          <DeviceId>6103</DeviceId> +          <RegisterFile>stm32f4xx.h</RegisterFile> +          <MemoryEnv></MemoryEnv> +          <Cmp></Cmp> +          <Asm></Asm> +          <Linker></Linker> +          <OHString></OHString> +          <InfinionOptionDll></InfinionOptionDll> +          <SLE66CMisc></SLE66CMisc> +          <SLE66AMisc></SLE66AMisc> +          <SLE66LinkerMisc></SLE66LinkerMisc> +          <SFDFile>SFD\ST\STM32F4xx\STM32F4xx.sfr</SFDFile> +          <UseEnv>0</UseEnv> +          <BinPath></BinPath> +          <IncludePath></IncludePath> +          <LibPath></LibPath> +          <RegisterFilePath>ST\STM32F4xx\</RegisterFilePath> +          <DBRegisterFilePath>ST\STM32F4xx\</DBRegisterFilePath> +          <TargetStatus> +            <Error>0</Error> +            <ExitCodeStop>0</ExitCodeStop> +            <ButtonStop>0</ButtonStop> +            <NotGenerated>0</NotGenerated> +            <InvalidFlash>1</InvalidFlash> +          </TargetStatus> +          <OutputDirectory>.\obj\</OutputDirectory> +          <OutputName>ch</OutputName> +          <CreateExecutable>1</CreateExecutable> +          <CreateLib>0</CreateLib> +          <CreateHexFile>0</CreateHexFile> +          <DebugInformation>1</DebugInformation> +          <BrowseInformation>1</BrowseInformation> +          <ListingPath>.\lst\</ListingPath> +          <HexFormatSelection>1</HexFormatSelection> +          <Merge32K>0</Merge32K> +          <CreateBatchFile>0</CreateBatchFile> +          <BeforeCompile> +            <RunUserProg1>0</RunUserProg1> +            <RunUserProg2>0</RunUserProg2> +            <UserProg1Name></UserProg1Name> +            <UserProg2Name></UserProg2Name> +            <UserProg1Dos16Mode>0</UserProg1Dos16Mode> +            <UserProg2Dos16Mode>0</UserProg2Dos16Mode> +          </BeforeCompile> +          <BeforeMake> +            <RunUserProg1>0</RunUserProg1> +            <RunUserProg2>0</RunUserProg2> +            <UserProg1Name></UserProg1Name> +            <UserProg2Name></UserProg2Name> +            <UserProg1Dos16Mode>0</UserProg1Dos16Mode> +            <UserProg2Dos16Mode>0</UserProg2Dos16Mode> +          </BeforeMake> +          <AfterMake> +            <RunUserProg1>0</RunUserProg1> +            <RunUserProg2>0</RunUserProg2> +            <UserProg1Name></UserProg1Name> +            <UserProg2Name></UserProg2Name> +            <UserProg1Dos16Mode>0</UserProg1Dos16Mode> +            <UserProg2Dos16Mode>0</UserProg2Dos16Mode> +          </AfterMake> +          <SelectedForBatchBuild>0</SelectedForBatchBuild> +          <SVCSIdString></SVCSIdString> +        </TargetCommonOption> +        <CommonProperty> +          <UseCPPCompiler>0</UseCPPCompiler> +          <RVCTCodeConst>0</RVCTCodeConst> +          <RVCTZI>0</RVCTZI> +          <RVCTOtherData>0</RVCTOtherData> +          <ModuleSelection>0</ModuleSelection> +          <IncludeInBuild>1</IncludeInBuild> +          <AlwaysBuild>0</AlwaysBuild> +          <GenerateAssemblyFile>0</GenerateAssemblyFile> +          <AssembleAssemblyFile>0</AssembleAssemblyFile> +          <PublicsOnly>0</PublicsOnly> +          <StopOnExitCode>3</StopOnExitCode> +          <CustomArgument></CustomArgument> +          <IncludeLibraryModules></IncludeLibraryModules> +        </CommonProperty> +        <DllOption> +          <SimDllName>SARMCM3.DLL</SimDllName> +          <SimDllArguments>-MPU</SimDllArguments> +          <SimDlgDll>DCM.DLL</SimDlgDll> +          <SimDlgDllArguments>-pCM4</SimDlgDllArguments> +          <TargetDllName>SARMCM3.DLL</TargetDllName> +          <TargetDllArguments>-MPU</TargetDllArguments> +          <TargetDlgDll>TCM.DLL</TargetDlgDll> +          <TargetDlgDllArguments>-pCM4</TargetDlgDllArguments> +        </DllOption> +        <DebugOption> +          <OPTHX> +            <HexSelection>1</HexSelection> +            <HexRangeLowAddress>0</HexRangeLowAddress> +            <HexRangeHighAddress>0</HexRangeHighAddress> +            <HexOffset>0</HexOffset> +            <Oh166RecLen>16</Oh166RecLen> +          </OPTHX> +          <Simulator> +            <UseSimulator>0</UseSimulator> +            <LoadApplicationAtStartup>1</LoadApplicationAtStartup> +            <RunToMain>1</RunToMain> +            <RestoreBreakpoints>1</RestoreBreakpoints> +            <RestoreWatchpoints>1</RestoreWatchpoints> +            <RestoreMemoryDisplay>1</RestoreMemoryDisplay> +            <RestoreFunctions>1</RestoreFunctions> +            <RestoreToolbox>1</RestoreToolbox> +            <LimitSpeedToRealTime>0</LimitSpeedToRealTime> +          </Simulator> +          <Target> +            <UseTarget>1</UseTarget> +            <LoadApplicationAtStartup>1</LoadApplicationAtStartup> +            <RunToMain>0</RunToMain> +            <RestoreBreakpoints>1</RestoreBreakpoints> +            <RestoreWatchpoints>1</RestoreWatchpoints> +            <RestoreMemoryDisplay>1</RestoreMemoryDisplay> +            <RestoreFunctions>0</RestoreFunctions> +            <RestoreToolbox>1</RestoreToolbox> +          </Target> +          <RunDebugAfterBuild>0</RunDebugAfterBuild> +          <TargetSelection>8</TargetSelection> +          <SimDlls> +            <CpuDll></CpuDll> +            <CpuDllArguments></CpuDllArguments> +            <PeripheralDll></PeripheralDll> +            <PeripheralDllArguments></PeripheralDllArguments> +            <InitializationFile></InitializationFile> +          </SimDlls> +          <TargetDlls> +            <CpuDll></CpuDll> +            <CpuDllArguments></CpuDllArguments> +            <PeripheralDll></PeripheralDll> +            <PeripheralDllArguments></PeripheralDllArguments> +            <InitializationFile></InitializationFile> +            <Driver>STLink\ST-LINKIII-KEIL.dll</Driver> +          </TargetDlls> +        </DebugOption> +        <Utilities> +          <Flash1> +            <UseTargetDll>1</UseTargetDll> +            <UseExternalTool>0</UseExternalTool> +            <RunIndependent>0</RunIndependent> +            <UpdateFlashBeforeDebugging>1</UpdateFlashBeforeDebugging> +            <Capability>1</Capability> +            <DriverSelection>4100</DriverSelection> +          </Flash1> +          <Flash2>STLink\ST-LINKIII-KEIL.dll</Flash2> +          <Flash3>"" ()</Flash3> +          <Flash4></Flash4> +        </Utilities> +        <TargetArmAds> +          <ArmAdsMisc> +            <GenerateListings>0</GenerateListings> +            <asHll>1</asHll> +            <asAsm>1</asAsm> +            <asMacX>1</asMacX> +            <asSyms>1</asSyms> +            <asFals>1</asFals> +            <asDbgD>1</asDbgD> +            <asForm>1</asForm> +            <ldLst>0</ldLst> +            <ldmm>1</ldmm> +            <ldXref>1</ldXref> +            <BigEnd>0</BigEnd> +            <AdsALst>1</AdsALst> +            <AdsACrf>1</AdsACrf> +            <AdsANop>0</AdsANop> +            <AdsANot>0</AdsANot> +            <AdsLLst>1</AdsLLst> +            <AdsLmap>1</AdsLmap> +            <AdsLcgr>1</AdsLcgr> +            <AdsLsym>1</AdsLsym> +            <AdsLszi>1</AdsLszi> +            <AdsLtoi>1</AdsLtoi> +            <AdsLsun>1</AdsLsun> +            <AdsLven>1</AdsLven> +            <AdsLsxf>1</AdsLsxf> +            <RvctClst>0</RvctClst> +            <GenPPlst>0</GenPPlst> +            <AdsCpuType>"Cortex-M4"</AdsCpuType> +            <RvctDeviceName></RvctDeviceName> +            <mOS>0</mOS> +            <uocRom>0</uocRom> +            <uocRam>0</uocRam> +            <hadIROM>1</hadIROM> +            <hadIRAM>1</hadIRAM> +            <hadXRAM>0</hadXRAM> +            <uocXRam>0</uocXRam> +            <RvdsVP>2</RvdsVP> +            <hadIRAM2>1</hadIRAM2> +            <hadIROM2>0</hadIROM2> +            <StupSel>8</StupSel> +            <useUlib>0</useUlib> +            <EndSel>0</EndSel> +            <uLtcg>0</uLtcg> +            <RoSelD>3</RoSelD> +            <RwSelD>3</RwSelD> +            <CodeSel>0</CodeSel> +            <OptFeed>0</OptFeed> +            <NoZi1>0</NoZi1> +            <NoZi2>0</NoZi2> +            <NoZi3>0</NoZi3> +            <NoZi4>0</NoZi4> +            <NoZi5>0</NoZi5> +            <Ro1Chk>0</Ro1Chk> +            <Ro2Chk>0</Ro2Chk> +            <Ro3Chk>0</Ro3Chk> +            <Ir1Chk>1</Ir1Chk> +            <Ir2Chk>0</Ir2Chk> +            <Ra1Chk>0</Ra1Chk> +            <Ra2Chk>0</Ra2Chk> +            <Ra3Chk>0</Ra3Chk> +            <Im1Chk>1</Im1Chk> +            <Im2Chk>1</Im2Chk> +            <OnChipMemories> +              <Ocm1> +                <Type>0</Type> +                <StartAddress>0x0</StartAddress> +                <Size>0x0</Size> +              </Ocm1> +              <Ocm2> +                <Type>0</Type> +                <StartAddress>0x0</StartAddress> +                <Size>0x0</Size> +              </Ocm2> +              <Ocm3> +                <Type>0</Type> +                <StartAddress>0x0</StartAddress> +                <Size>0x0</Size> +              </Ocm3> +              <Ocm4> +                <Type>0</Type> +                <StartAddress>0x0</StartAddress> +                <Size>0x0</Size> +              </Ocm4> +              <Ocm5> +                <Type>0</Type> +                <StartAddress>0x0</StartAddress> +                <Size>0x0</Size> +              </Ocm5> +              <Ocm6> +                <Type>0</Type> +                <StartAddress>0x0</StartAddress> +                <Size>0x0</Size> +              </Ocm6> +              <IRAM> +                <Type>0</Type> +                <StartAddress>0x20000000</StartAddress> +                <Size>0x20000</Size> +              </IRAM> +              <IROM> +                <Type>1</Type> +                <StartAddress>0x8000000</StartAddress> +                <Size>0x100000</Size> +              </IROM> +              <XRAM> +                <Type>0</Type> +                <StartAddress>0x0</StartAddress> +                <Size>0x0</Size> +              </XRAM> +              <OCR_RVCT1> +                <Type>1</Type> +                <StartAddress>0x0</StartAddress> +                <Size>0x0</Size> +              </OCR_RVCT1> +              <OCR_RVCT2> +                <Type>1</Type> +                <StartAddress>0x0</StartAddress> +                <Size>0x0</Size> +              </OCR_RVCT2> +              <OCR_RVCT3> +                <Type>1</Type> +                <StartAddress>0x0</StartAddress> +                <Size>0x0</Size> +              </OCR_RVCT3> +              <OCR_RVCT4> +                <Type>1</Type> +                <StartAddress>0x8000000</StartAddress> +                <Size>0x100000</Size> +              </OCR_RVCT4> +              <OCR_RVCT5> +                <Type>1</Type> +                <StartAddress>0x0</StartAddress> +                <Size>0x0</Size> +              </OCR_RVCT5> +              <OCR_RVCT6> +                <Type>0</Type> +                <StartAddress>0x0</StartAddress> +                <Size>0x0</Size> +              </OCR_RVCT6> +              <OCR_RVCT7> +                <Type>0</Type> +                <StartAddress>0x0</StartAddress> +                <Size>0x0</Size> +              </OCR_RVCT7> +              <OCR_RVCT8> +                <Type>0</Type> +                <StartAddress>0x0</StartAddress> +                <Size>0x0</Size> +              </OCR_RVCT8> +              <OCR_RVCT9> +                <Type>0</Type> +                <StartAddress>0x20000000</StartAddress> +                <Size>0x20000</Size> +              </OCR_RVCT9> +              <OCR_RVCT10> +                <Type>0</Type> +                <StartAddress>0x20020000</StartAddress> +                <Size>0x1</Size> +              </OCR_RVCT10> +            </OnChipMemories> +            <RvctStartVector></RvctStartVector> +          </ArmAdsMisc> +          <Cads> +            <interw>1</interw> +            <Optim>4</Optim> +            <oTime>1</oTime> +            <SplitLS>0</SplitLS> +            <OneElfS>0</OneElfS> +            <Strict>0</Strict> +            <EnumInt>0</EnumInt> +            <PlainCh>0</PlainCh> +            <Ropi>0</Ropi> +            <Rwpi>0</Rwpi> +            <wLevel>0</wLevel> +            <uThumb>0</uThumb> +            <VariousControls> +              <MiscControls></MiscControls> +              <Define>__heap_base__=Image$$RW_IRAM1$$ZI$$Limit __heap_end__=Image$$RW_IRAM2$$Base</Define> +              <Undefine></Undefine> +              <IncludePath>..\;..\..\..\..\os\kernel\include;..\..\..\..\os\ports\common\ARMCMx;..\..\..\..\os\ports\common\ARMCMx\CMSIS\include;..\..\..\..\os\ports\RVCT\ARMCMx;..\..\..\..\os\ports\RVCT\ARMCMx\STM32F4xx;..\..\..\..\os\hal\include;..\..\..\..\os\hal\platforms\STM32;..\..\..\..\os\hal\platforms\STM32\GPIOv2;..\..\..\..\os\hal\platforms\STM32\USARTv1;..\..\..\..\os\hal\platforms\STM32F4xx;..\..\..\..\boards\ST_STM32F4_DISCOVERY;..\..\..\..\test</IncludePath> +            </VariousControls> +          </Cads> +          <Aads> +            <interw>1</interw> +            <Ropi>0</Ropi> +            <Rwpi>0</Rwpi> +            <thumb>0</thumb> +            <SplitLS>0</SplitLS> +            <SwStkChk>0</SwStkChk> +            <NoWarn>0</NoWarn> +            <VariousControls> +              <MiscControls>--cpreproc</MiscControls> +              <Define></Define> +              <Undefine></Undefine> +              <IncludePath>..\;..\..\..\..\boards\ST_STM32F4_DISCOVERY;..\..\..\..\os\ports\RVCT\ARMCMx\STM32F4xx</IncludePath> +            </VariousControls> +          </Aads> +          <LDads> +            <umfTarg>1</umfTarg> +            <Ropi>0</Ropi> +            <Rwpi>0</Rwpi> +            <noStLib>0</noStLib> +            <RepFail>1</RepFail> +            <useFile>0</useFile> +            <TextAddressRange>0x08000000</TextAddressRange> +            <DataAddressRange>0x20000000</DataAddressRange> +            <ScatterFile></ScatterFile> +            <IncludeLibs></IncludeLibs> +            <IncludeLibsPath></IncludeLibsPath> +            <Misc></Misc> +            <LinkerInputFile></LinkerInputFile> +            <DisabledWarnings></DisabledWarnings> +          </LDads> +        </TargetArmAds> +      </TargetOption> +      <Groups> +        <Group> +          <GroupName>board</GroupName> +          <Files> +            <File> +              <FileName>board.c</FileName> +              <FileType>1</FileType> +              <FilePath>..\..\..\..\boards\ST_STM32F4_DISCOVERY\board.c</FilePath> +            </File> +            <File> +              <FileName>board.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\boards\ST_STM32F4_DISCOVERY\board.h</FilePath> +            </File> +          </Files> +        </Group> +        <Group> +          <GroupName>port</GroupName> +          <Files> +            <File> +              <FileName>cstartup.s</FileName> +              <FileType>2</FileType> +              <FilePath>..\..\..\..\os\ports\RVCT\ARMCMx\cstartup.s</FilePath> +            </File> +            <File> +              <FileName>chcoreasm_v7m.s</FileName> +              <FileType>2</FileType> +              <FilePath>..\..\..\..\os\ports\RVCT\ARMCMx\chcoreasm_v7m.s</FilePath> +            </File> +            <File> +              <FileName>chcore.c</FileName> +              <FileType>1</FileType> +              <FilePath>..\..\..\..\os\ports\RVCT\ARMCMx\chcore.c</FilePath> +            </File> +            <File> +              <FileName>chcore_v7m.c</FileName> +              <FileType>1</FileType> +              <FilePath>..\..\..\..\os\ports\RVCT\ARMCMx\chcore_v7m.c</FilePath> +            </File> +            <File> +              <FileName>chcore.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\os\ports\RVCT\ARMCMx\chcore.h</FilePath> +            </File> +            <File> +              <FileName>chcore_v7m.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\os\ports\RVCT\ARMCMx\chcore_v7m.h</FilePath> +            </File> +            <File> +              <FileName>chtypes.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\os\ports\RVCT\ARMCMx\chtypes.h</FilePath> +            </File> +            <File> +              <FileName>cmparams.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\os\ports\RVCT\ARMCMx\STM32F4xx\cmparams.h</FilePath> +            </File> +            <File> +              <FileName>vectors.s</FileName> +              <FileType>2</FileType> +              <FilePath>..\..\..\..\os\ports\RVCT\ARMCMx\STM32F4xx\vectors.s</FilePath> +            </File> +            <File> +              <FileName>nvic.c</FileName> +              <FileType>1</FileType> +              <FilePath>..\..\..\..\os\ports\common\ARMCMx\nvic.c</FilePath> +            </File> +            <File> +              <FileName>nvic.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\os\ports\common\ARMCMx\nvic.h</FilePath> +            </File> +          </Files> +        </Group> +        <Group> +          <GroupName>kernel</GroupName> +          <Files> +            <File> +              <FileName>chcond.c</FileName> +              <FileType>1</FileType> +              <FilePath>..\..\..\..\os\kernel\src\chcond.c</FilePath> +            </File> +            <File> +              <FileName>chdebug.c</FileName> +              <FileType>1</FileType> +              <FilePath>..\..\..\..\os\kernel\src\chdebug.c</FilePath> +            </File> +            <File> +              <FileName>chdynamic.c</FileName> +              <FileType>1</FileType> +              <FilePath>..\..\..\..\os\kernel\src\chdynamic.c</FilePath> +            </File> +            <File> +              <FileName>chevents.c</FileName> +              <FileType>1</FileType> +              <FilePath>..\..\..\..\os\kernel\src\chevents.c</FilePath> +            </File> +            <File> +              <FileName>chheap.c</FileName> +              <FileType>1</FileType> +              <FilePath>..\..\..\..\os\kernel\src\chheap.c</FilePath> +            </File> +            <File> +              <FileName>chlists.c</FileName> +              <FileType>1</FileType> +              <FilePath>..\..\..\..\os\kernel\src\chlists.c</FilePath> +            </File> +            <File> +              <FileName>chmboxes.c</FileName> +              <FileType>1</FileType> +              <FilePath>..\..\..\..\os\kernel\src\chmboxes.c</FilePath> +            </File> +            <File> +              <FileName>chmemcore.c</FileName> +              <FileType>1</FileType> +              <FilePath>..\..\..\..\os\kernel\src\chmemcore.c</FilePath> +            </File> +            <File> +              <FileName>chmempools.c</FileName> +              <FileType>1</FileType> +              <FilePath>..\..\..\..\os\kernel\src\chmempools.c</FilePath> +            </File> +            <File> +              <FileName>chmsg.c</FileName> +              <FileType>1</FileType> +              <FilePath>..\..\..\..\os\kernel\src\chmsg.c</FilePath> +            </File> +            <File> +              <FileName>chmtx.c</FileName> +              <FileType>1</FileType> +              <FilePath>..\..\..\..\os\kernel\src\chmtx.c</FilePath> +            </File> +            <File> +              <FileName>chqueues.c</FileName> +              <FileType>1</FileType> +              <FilePath>..\..\..\..\os\kernel\src\chqueues.c</FilePath> +            </File> +            <File> +              <FileName>chregistry.c</FileName> +              <FileType>1</FileType> +              <FilePath>..\..\..\..\os\kernel\src\chregistry.c</FilePath> +            </File> +            <File> +              <FileName>chschd.c</FileName> +              <FileType>1</FileType> +              <FilePath>..\..\..\..\os\kernel\src\chschd.c</FilePath> +            </File> +            <File> +              <FileName>chsem.c</FileName> +              <FileType>1</FileType> +              <FilePath>..\..\..\..\os\kernel\src\chsem.c</FilePath> +            </File> +            <File> +              <FileName>chsys.c</FileName> +              <FileType>1</FileType> +              <FilePath>..\..\..\..\os\kernel\src\chsys.c</FilePath> +            </File> +            <File> +              <FileName>chthreads.c</FileName> +              <FileType>1</FileType> +              <FilePath>..\..\..\..\os\kernel\src\chthreads.c</FilePath> +            </File> +            <File> +              <FileName>chvt.c</FileName> +              <FileType>1</FileType> +              <FilePath>..\..\..\..\os\kernel\src\chvt.c</FilePath> +            </File> +            <File> +              <FileName>ch.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\os\kernel\include\ch.h</FilePath> +            </File> +            <File> +              <FileName>chbsem.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\os\kernel\include\chbsem.h</FilePath> +            </File> +            <File> +              <FileName>chcond.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\os\kernel\include\chcond.h</FilePath> +            </File> +            <File> +              <FileName>chdebug.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\os\kernel\include\chdebug.h</FilePath> +            </File> +            <File> +              <FileName>chdynamic.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\os\kernel\include\chdynamic.h</FilePath> +            </File> +            <File> +              <FileName>chevents.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\os\kernel\include\chevents.h</FilePath> +            </File> +            <File> +              <FileName>chfiles.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\os\kernel\include\chfiles.h</FilePath> +            </File> +            <File> +              <FileName>chheap.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\os\kernel\include\chheap.h</FilePath> +            </File> +            <File> +              <FileName>chinline.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\os\kernel\include\chinline.h</FilePath> +            </File> +            <File> +              <FileName>chioch.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\os\kernel\include\chioch.h</FilePath> +            </File> +            <File> +              <FileName>chlists.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\os\kernel\include\chlists.h</FilePath> +            </File> +            <File> +              <FileName>chmboxes.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\os\kernel\include\chmboxes.h</FilePath> +            </File> +            <File> +              <FileName>chmemcore.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\os\kernel\include\chmemcore.h</FilePath> +            </File> +            <File> +              <FileName>chmempools.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\os\kernel\include\chmempools.h</FilePath> +            </File> +            <File> +              <FileName>chmsg.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\os\kernel\include\chmsg.h</FilePath> +            </File> +            <File> +              <FileName>chmtx.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\os\kernel\include\chmtx.h</FilePath> +            </File> +            <File> +              <FileName>chqueues.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\os\kernel\include\chqueues.h</FilePath> +            </File> +            <File> +              <FileName>chregistry.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\os\kernel\include\chregistry.h</FilePath> +            </File> +            <File> +              <FileName>chschd.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\os\kernel\include\chschd.h</FilePath> +            </File> +            <File> +              <FileName>chsem.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\os\kernel\include\chsem.h</FilePath> +            </File> +            <File> +              <FileName>chstreams.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\os\kernel\include\chstreams.h</FilePath> +            </File> +            <File> +              <FileName>chsys.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\os\kernel\include\chsys.h</FilePath> +            </File> +            <File> +              <FileName>chthreads.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\os\kernel\include\chthreads.h</FilePath> +            </File> +            <File> +              <FileName>chvt.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\os\kernel\include\chvt.h</FilePath> +            </File> +          </Files> +        </Group> +        <Group> +          <GroupName>hal</GroupName> +          <Files> +            <File> +              <FileName>hal.c</FileName> +              <FileType>1</FileType> +              <FilePath>..\..\..\..\os\hal\src\hal.c</FilePath> +            </File> +            <File> +              <FileName>pal.c</FileName> +              <FileType>1</FileType> +              <FilePath>..\..\..\..\os\hal\src\pal.c</FilePath> +            </File> +            <File> +              <FileName>serial.c</FileName> +              <FileType>1</FileType> +              <FilePath>..\..\..\..\os\hal\src\serial.c</FilePath> +            </File> +            <File> +              <FileName>hal.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\os\hal\include\hal.h</FilePath> +            </File> +            <File> +              <FileName>pal.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\os\hal\include\pal.h</FilePath> +            </File> +            <File> +              <FileName>serial.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\os\hal\include\serial.h</FilePath> +            </File> +            <File> +              <FileName>gpt.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\os\hal\include\gpt.h</FilePath> +            </File> +            <File> +              <FileName>gpt.c</FileName> +              <FileType>1</FileType> +              <FilePath>..\..\..\..\os\hal\src\gpt.c</FilePath> +            </File> +          </Files> +        </Group> +        <Group> +          <GroupName>platform</GroupName> +          <Files> +            <File> +              <FileName>gpt_lld.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\os\hal\platforms\STM32\gpt_lld.h</FilePath> +            </File> +            <File> +              <FileName>gpt_lld.c</FileName> +              <FileType>1</FileType> +              <FilePath>..\..\..\..\os\hal\platforms\STM32\gpt_lld.c</FilePath> +            </File> +            <File> +              <FileName>hal_lld.c</FileName> +              <FileType>1</FileType> +              <FilePath>..\..\..\..\os\hal\platforms\STM32F4xx\hal_lld.c</FilePath> +            </File> +            <File> +              <FileName>hal_lld.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\os\hal\platforms\STM32F4xx\hal_lld.h</FilePath> +            </File> +            <File> +              <FileName>pal_lld.c</FileName> +              <FileType>1</FileType> +              <FilePath>..\..\..\..\os\hal\platforms\STM32\GPIOv2\pal_lld.c</FilePath> +            </File> +            <File> +              <FileName>pal_lld.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\os\hal\platforms\STM32\GPIOv2\pal_lld.h</FilePath> +            </File> +            <File> +              <FileName>serial_lld.c</FileName> +              <FileType>1</FileType> +              <FilePath>..\..\..\..\os\hal\platforms\STM32\USARTv1\serial_lld.c</FilePath> +            </File> +            <File> +              <FileName>serial_lld.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\os\hal\platforms\STM32\USARTv1\serial_lld.h</FilePath> +            </File> +            <File> +              <FileName>stm32_dma.c</FileName> +              <FileType>1</FileType> +              <FilePath>..\..\..\..\os\hal\platforms\STM32F4xx\stm32_dma.c</FilePath> +            </File> +            <File> +              <FileName>stm32_dma.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\os\hal\platforms\STM32F4xx\stm32_dma.h</FilePath> +            </File> +            <File> +              <FileName>stm32_rcc.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\os\hal\platforms\STM32F4xx\stm32_rcc.h</FilePath> +            </File> +            <File> +              <FileName>stm32l1xx.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\os\hal\platforms\STM32F4xx\stm32l1xx.h</FilePath> +            </File> +          </Files> +        </Group> +        <Group> +          <GroupName>test</GroupName> +          <Files> +            <File> +              <FileName>test.c</FileName> +              <FileType>1</FileType> +              <FilePath>..\..\..\..\test\test.c</FilePath> +            </File> +            <File> +              <FileName>testbmk.c</FileName> +              <FileType>1</FileType> +              <FilePath>..\..\..\..\test\testbmk.c</FilePath> +            </File> +            <File> +              <FileName>testdyn.c</FileName> +              <FileType>1</FileType> +              <FilePath>..\..\..\..\test\testdyn.c</FilePath> +            </File> +            <File> +              <FileName>testevt.c</FileName> +              <FileType>1</FileType> +              <FilePath>..\..\..\..\test\testevt.c</FilePath> +            </File> +            <File> +              <FileName>testheap.c</FileName> +              <FileType>1</FileType> +              <FilePath>..\..\..\..\test\testheap.c</FilePath> +            </File> +            <File> +              <FileName>testmbox.c</FileName> +              <FileType>1</FileType> +              <FilePath>..\..\..\..\test\testmbox.c</FilePath> +            </File> +            <File> +              <FileName>testmsg.c</FileName> +              <FileType>1</FileType> +              <FilePath>..\..\..\..\test\testmsg.c</FilePath> +            </File> +            <File> +              <FileName>testmtx.c</FileName> +              <FileType>1</FileType> +              <FilePath>..\..\..\..\test\testmtx.c</FilePath> +            </File> +            <File> +              <FileName>testpools.c</FileName> +              <FileType>1</FileType> +              <FilePath>..\..\..\..\test\testpools.c</FilePath> +            </File> +            <File> +              <FileName>testqueues.c</FileName> +              <FileType>1</FileType> +              <FilePath>..\..\..\..\test\testqueues.c</FilePath> +            </File> +            <File> +              <FileName>testsem.c</FileName> +              <FileType>1</FileType> +              <FilePath>..\..\..\..\test\testsem.c</FilePath> +            </File> +            <File> +              <FileName>testthd.c</FileName> +              <FileType>1</FileType> +              <FilePath>..\..\..\..\test\testthd.c</FilePath> +            </File> +            <File> +              <FileName>test.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\test\test.h</FilePath> +            </File> +            <File> +              <FileName>testbmk.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\test\testbmk.h</FilePath> +            </File> +            <File> +              <FileName>testdyn.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\test\testdyn.h</FilePath> +            </File> +            <File> +              <FileName>testevt.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\test\testevt.h</FilePath> +            </File> +            <File> +              <FileName>testheap.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\test\testheap.h</FilePath> +            </File> +            <File> +              <FileName>testmbox.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\test\testmbox.h</FilePath> +            </File> +            <File> +              <FileName>testmsg.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\test\testmsg.h</FilePath> +            </File> +            <File> +              <FileName>testmtx.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\test\testmtx.h</FilePath> +            </File> +            <File> +              <FileName>testpools.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\test\testpools.h</FilePath> +            </File> +            <File> +              <FileName>testqueues.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\test\testqueues.h</FilePath> +            </File> +            <File> +              <FileName>testsem.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\test\testsem.h</FilePath> +            </File> +            <File> +              <FileName>testthd.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\..\..\..\test\testthd.h</FilePath> +            </File> +          </Files> +        </Group> +        <Group> +          <GroupName>demo</GroupName> +          <Files> +            <File> +              <FileName>main.c</FileName> +              <FileType>1</FileType> +              <FilePath>..\main.c</FilePath> +            </File> +            <File> +              <FileName>mcuconf.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\mcuconf.h</FilePath> +            </File> +            <File> +              <FileName>chconf.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\chconf.h</FilePath> +            </File> +            <File> +              <FileName>halconf.h</FileName> +              <FileType>5</FileType> +              <FilePath>..\halconf.h</FilePath> +            </File> +            <File> +              <FileName>extfunc.c</FileName> +              <FileType>1</FileType> +              <FilePath>..\extfunc.c</FilePath> +            </File> +          </Files> +        </Group> +      </Groups> +    </Target> +  </Targets> + +</Project> diff --git a/testhal/STM32F4xx/IRQ_STORM_FPU/main.c b/testhal/STM32F4xx/IRQ_STORM_FPU/main.c new file mode 100644 index 000000000..ad72cc0b9 --- /dev/null +++ b/testhal/STM32F4xx/IRQ_STORM_FPU/main.c @@ -0,0 +1,300 @@ +/*
 +    ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio
 +
 +    Licensed under the Apache License, Version 2.0 (the "License");
 +    you may not use this file except in compliance with the License.
 +    You may obtain a copy of the License at
 +
 +        http://www.apache.org/licenses/LICENSE-2.0
 +
 +    Unless required by applicable law or agreed to in writing, software
 +    distributed under the License is distributed on an "AS IS" BASIS,
 +    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 +    See the License for the specific language governing permissions and
 +    limitations under the License.
 +*/
 +
 +#include <stdlib.h>
 +
 +#include "ch.h"
 +#include "hal.h"
 +
 +float ff1(float par);
 +
 +float ff2(float par1, float par2, float par3, float par4);
 +
 +/*===========================================================================*/
 +/* Configurable settings.                                                    */
 +/*===========================================================================*/
 +
 +#ifndef RANDOMIZE
 +#define RANDOMIZE       FALSE
 +#endif
 +
 +#ifndef ITERATIONS
 +#define ITERATIONS      100
 +#endif
 +
 +/*===========================================================================*/
 +/* Test related code.                                                        */
 +/*===========================================================================*/
 +
 +static bool_t saturated;
 +
 +/*
 + * Test worker thread.
 + */
 +static WORKING_AREA(waWorkerThread, 128);
 +static msg_t WorkerThread(void *arg) {
 +
 +  (void)arg;
 +
 +  while(1) {
 +    float f1, f2, f3, f4, f5;
 +
 +    f1 = ff1(3.0f);
 +    f2 = ff1(4.0f);
 +    f3 = ff1(5.0f);
 +    f5 = f1 + f2 + f3;
 +    f4 = ff1(6.0f);
 +    f5 = ff2(f5, f4, f5, f4);
 +    if (f5 != 324.0f)
 +      chSysHalt();
 +  }
 +}
 +
 +/*
 + * Test periodic thread.
 + */
 +static WORKING_AREA(waPeriodicThread, 128);
 +static msg_t PeriodicThread(void *arg) {
 +
 +  (void)arg;
 +
 +  while(1) {
 +    float f1, f2, f3, f4, f5;
 +
 +    f1 = ff1(4.0f);
 +    f2 = ff1(5.0f);
 +    f3 = ff1(6.0f);
 +    f5 = f1 + f2 + f3;
 +    f4 = ff1(7.0f);
 +    f5 = ff2(f5, f4, f5, f4);
 +    if (f5 != 484.0f)
 +      chSysHalt();
 +    chThdSleepSeconds(1);
 +  }
 +}
 +
 +/*
 + * GPT2 callback.
 + */
 +static void gpt2cb(GPTDriver *gptp) {
 +  float f1, f2, f3, f4, f5;
 +
 +  (void)gptp;
 +
 +  f1 = ff1(2.0f);
 +  f2 = ff1(3.0f);
 +  f3 = ff1(4.0f);
 +  f5 = f1 + f2 + f3;
 +  f4 = ff1(5.0f);
 +  f5 = ff2(f5, f4, f5, f4);
 +  if (f5 != 196.0f)
 +    chSysHalt();
 +}
 +
 +/*
 + * GPT3 callback.
 + */
 +static void gpt3cb(GPTDriver *gptp) {
 +  float f1, f2, f3, f4, f5;
 +
 +  (void)gptp;
 +
 +  f1 = ff1(1.0f);
 +  f2 = ff1(2.0f);
 +  f3 = ff1(3.0f);
 +  f5 = f1 + f2 + f3;
 +  f4 = ff1(4.0f);
 +  f5 = ff2(f5, f4, f5, f4);
 +  if (f5 != 100.0f)
 +    chSysHalt();
 +}
 +
 +/*
 + * GPT2 configuration.
 + */
 +static const GPTConfig gpt2cfg = {
 +  1000000,  /* 1MHz timer clock.*/
 +  gpt2cb    /* Timer callback.*/
 +};
 +
 +/*
 + * GPT3 configuration.
 + */
 +static const GPTConfig gpt3cfg = {
 +  1000000,  /* 1MHz timer clock.*/
 +  gpt3cb    /* Timer callback.*/
 +};
 +
 +
 +/*===========================================================================*/
 +/* Generic demo code.                                                        */
 +/*===========================================================================*/
 +
 +static void print(char *p) {
 +
 +  while (*p) {
 +    chSequentialStreamPut(&SD2, *p++);
 +  }
 +}
 +
 +static void println(char *p) {
 +
 +  while (*p) {
 +    chSequentialStreamPut(&SD2, *p++);
 +  }
 +  chSequentialStreamWrite(&SD2, (uint8_t *)"\r\n", 2);
 +}
 +
 +static void printn(uint32_t n) {
 +  char buf[16], *p;
 +
 +  if (!n)
 +    chSequentialStreamPut(&SD2, '0');
 +  else {
 +    p = buf;
 +    while (n)
 +      *p++ = (n % 10) + '0', n /= 10;
 +    while (p > buf)
 +      chSequentialStreamPut(&SD2, *--p);
 +  }
 +}
 +
 +/*
 + * Application entry point.
 + */
 +int main(void) {
 +  unsigned i;
 +  gptcnt_t interval, threshold, worst;
 +
 +  /*
 +   * System initializations.
 +   * - HAL initialization, this also initializes the configured device drivers
 +   *   and performs the board-specific initializations.
 +   * - Kernel initialization, the main() function becomes a thread and the
 +   *   RTOS is active.
 +   */
 +  halInit();
 +  chSysInit();
 +
 +  /*
 +   * Prepares the Serial driver 2 and GPT drivers 2 and 3.
 +   */
 +  sdStart(&SD2, NULL);          /* Default is 38400-8-N-1.*/
 +  palSetPadMode(GPIOA, 2, PAL_MODE_ALTERNATE(7));
 +  palSetPadMode(GPIOA, 3, PAL_MODE_ALTERNATE(7));
 +  gptStart(&GPTD2, &gpt2cfg);
 +  gptStart(&GPTD3, &gpt3cfg);
 +
 +  /*
 +   * Initializes the worker threads.
 +   */
 +  chThdCreateStatic(waWorkerThread, sizeof waWorkerThread,
 +                    NORMALPRIO - 20, WorkerThread, NULL);
 +  chThdCreateStatic(waPeriodicThread, sizeof waPeriodicThread,
 +                    NORMALPRIO - 10, PeriodicThread, NULL);
 +
 +  /*
 +   * Test procedure.
 +   */
 +  println("");
 +  println("*** ChibiOS/RT IRQ-STORM-FPU long duration test");
 +  println("***");
 +  print("*** Kernel:       ");
 +  println(CH_KERNEL_VERSION);
 +  print("*** Compiled:     ");
 +  println(__DATE__ " - " __TIME__);
 +#ifdef CH_COMPILER_NAME
 +  print("*** Compiler:     ");
 +  println(CH_COMPILER_NAME);
 +#endif
 +  print("*** Architecture: ");
 +  println(CH_ARCHITECTURE_NAME);
 +#ifdef CH_CORE_VARIANT_NAME
 +  print("*** Core Variant: ");
 +  println(CH_CORE_VARIANT_NAME);
 +#endif
 +#ifdef CH_PORT_INFO
 +  print("*** Port Info:    ");
 +  println(CH_PORT_INFO);
 +#endif
 +#ifdef PLATFORM_NAME
 +  print("*** Platform:     ");
 +  println(PLATFORM_NAME);
 +#endif
 +#ifdef BOARD_NAME
 +  print("*** Test Board:   ");
 +  println(BOARD_NAME);
 +#endif
 +  println("***");
 +  print("*** System Clock: ");
 +  printn(STM32_SYSCLK);
 +  println("");
 +  print("*** Iterations:   ");
 +  printn(ITERATIONS);
 +  println("");
 +  print("*** Randomize:    ");
 +  printn(RANDOMIZE);
 +  println("");
 +
 +  println("");
 +  worst = 0;
 +  for (i = 1; i <= ITERATIONS; i++){
 +    print("Iteration ");
 +    printn(i);
 +    println("");
 +    saturated = FALSE;
 +    threshold = 0;
 +    for (interval = 2000; interval >= 10; interval -= interval / 10) {
 +      gptStartContinuous(&GPTD2, interval - 1); /* Slightly out of phase.*/
 +      gptStartContinuous(&GPTD3, interval + 1); /* Slightly out of phase.*/
 +      chThdSleepMilliseconds(1000);
 +      gptStopTimer(&GPTD2);
 +      gptStopTimer(&GPTD3);
 +      if (!saturated)
 +        print(".");
 +      else {
 +        print("#");
 +        if (threshold == 0)
 +          threshold = interval;
 +      }
 +    }
 +    /* Gives the worker threads a chance to empty the mailboxes before next
 +       cycle.*/
 +    chThdSleepMilliseconds(20);
 +    println("");
 +    print("Saturated at ");
 +    printn(threshold);
 +    println(" uS");
 +    println("");
 +    if (threshold > worst)
 +      worst = threshold;
 +  }
 +  gptStopTimer(&GPTD2);
 +  gptStopTimer(&GPTD3);
 +
 +  print("Worst case at ");
 +  printn(worst);
 +  println(" uS");
 +  println("");
 +  println("Test Complete");
 +
 +  /*
 +   * Normal main() thread activity, nothing in this test.
 +   */
 +  while (TRUE) {
 +    chThdSleepMilliseconds(5000);
 +  }
 +}
 diff --git a/testhal/STM32F4xx/IRQ_STORM_FPU/mcuconf.h b/testhal/STM32F4xx/IRQ_STORM_FPU/mcuconf.h new file mode 100644 index 000000000..dc10c0604 --- /dev/null +++ b/testhal/STM32F4xx/IRQ_STORM_FPU/mcuconf.h @@ -0,0 +1,278 @@ +/*
 +    ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio
 +
 +    Licensed under the Apache License, Version 2.0 (the "License");
 +    you may not use this file except in compliance with the License.
 +    You may obtain a copy of the License at
 +
 +        http://www.apache.org/licenses/LICENSE-2.0
 +
 +    Unless required by applicable law or agreed to in writing, software
 +    distributed under the License is distributed on an "AS IS" BASIS,
 +    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 +    See the License for the specific language governing permissions and
 +    limitations under the License.
 +*/
 +
 +/*
 + * STM32F4xx drivers configuration.
 + * The following settings override the default settings present in
 + * the various device driver implementation headers.
 + * Note that the settings for each driver only have effect if the whole
 + * driver is enabled in halconf.h.
 + *
 + * IRQ priorities:
 + * 15...0       Lowest...Highest.
 + *
 + * DMA priorities:
 + * 0...3        Lowest...Highest.
 + */
 +
 +#define STM32F4xx_MCUCONF
 +
 +/*
 + * HAL driver system settings.
 + */
 +#define STM32_NO_INIT                       FALSE
 +#define STM32_HSI_ENABLED                   TRUE
 +#define STM32_LSI_ENABLED                   TRUE
 +#define STM32_HSE_ENABLED                   TRUE
 +#define STM32_LSE_ENABLED                   FALSE
 +#define STM32_CLOCK48_REQUIRED              TRUE
 +#define STM32_SW                            STM32_SW_PLL
 +#define STM32_PLLSRC                        STM32_PLLSRC_HSE
 +#define STM32_PLLM_VALUE                    8
 +#define STM32_PLLN_VALUE                    336
 +#define STM32_PLLP_VALUE                    2
 +#define STM32_PLLQ_VALUE                    7
 +#define STM32_HPRE                          STM32_HPRE_DIV1
 +#define STM32_PPRE1                         STM32_PPRE1_DIV4
 +#define STM32_PPRE2                         STM32_PPRE2_DIV2
 +#define STM32_RTCSEL                        STM32_RTCSEL_LSI
 +#define STM32_RTCPRE_VALUE                  8
 +#define STM32_MCO1SEL                       STM32_MCO1SEL_HSI
 +#define STM32_MCO1PRE                       STM32_MCO1PRE_DIV1
 +#define STM32_MCO2SEL                       STM32_MCO2SEL_SYSCLK
 +#define STM32_MCO2PRE                       STM32_MCO2PRE_DIV5
 +#define STM32_I2SSRC                        STM32_I2SSRC_CKIN
 +#define STM32_PLLI2SN_VALUE                 192
 +#define STM32_PLLI2SR_VALUE                 5
 +#define STM32_VOS                           STM32_VOS_HIGH
 +#define STM32_PVD_ENABLE                    FALSE
 +#define STM32_PLS                           STM32_PLS_LEV0
 +
 +/*
 + * ADC driver system settings.
 + */
 +#define STM32_ADC_ADCPRE                    ADC_CCR_ADCPRE_DIV4
 +#define STM32_ADC_USE_ADC1                  FALSE
 +#define STM32_ADC_USE_ADC2                  FALSE
 +#define STM32_ADC_USE_ADC3                  FALSE
 +#define STM32_ADC_ADC1_DMA_STREAM           STM32_DMA_STREAM_ID(2, 4)
 +#define STM32_ADC_ADC2_DMA_STREAM           STM32_DMA_STREAM_ID(2, 2)
 +#define STM32_ADC_ADC3_DMA_STREAM           STM32_DMA_STREAM_ID(2, 1)
 +#define STM32_ADC_ADC1_DMA_PRIORITY         2
 +#define STM32_ADC_ADC2_DMA_PRIORITY         2
 +#define STM32_ADC_ADC3_DMA_PRIORITY         2
 +#define STM32_ADC_IRQ_PRIORITY              6
 +#define STM32_ADC_ADC1_DMA_IRQ_PRIORITY     6
 +#define STM32_ADC_ADC2_DMA_IRQ_PRIORITY     6
 +#define STM32_ADC_ADC3_DMA_IRQ_PRIORITY     6
 +
 +/*
 + * CAN driver system settings.
 + */
 +#define STM32_CAN_USE_CAN1                  FALSE
 +#define STM32_CAN_USE_CAN2                  FALSE
 +#define STM32_CAN_CAN1_IRQ_PRIORITY         11
 +#define STM32_CAN_CAN2_IRQ_PRIORITY         11
 +
 +/*
 + * EXT driver system settings.
 + */
 +#define STM32_EXT_EXTI0_IRQ_PRIORITY        6
 +#define STM32_EXT_EXTI1_IRQ_PRIORITY        6
 +#define STM32_EXT_EXTI2_IRQ_PRIORITY        6
 +#define STM32_EXT_EXTI3_IRQ_PRIORITY        6
 +#define STM32_EXT_EXTI4_IRQ_PRIORITY        6
 +#define STM32_EXT_EXTI5_9_IRQ_PRIORITY      6
 +#define STM32_EXT_EXTI10_15_IRQ_PRIORITY    6
 +#define STM32_EXT_EXTI16_IRQ_PRIORITY       6
 +#define STM32_EXT_EXTI17_IRQ_PRIORITY       15
 +#define STM32_EXT_EXTI18_IRQ_PRIORITY       6
 +#define STM32_EXT_EXTI19_IRQ_PRIORITY       6
 +#define STM32_EXT_EXTI20_IRQ_PRIORITY       6
 +#define STM32_EXT_EXTI21_IRQ_PRIORITY       15
 +#define STM32_EXT_EXTI22_IRQ_PRIORITY       15
 +
 +/*
 + * GPT driver system settings.
 + */
 +#define STM32_GPT_USE_TIM1                  FALSE
 +#define STM32_GPT_USE_TIM2                  TRUE
 +#define STM32_GPT_USE_TIM3                  TRUE
 +#define STM32_GPT_USE_TIM4                  FALSE
 +#define STM32_GPT_USE_TIM5                  FALSE
 +#define STM32_GPT_USE_TIM6                  FALSE
 +#define STM32_GPT_USE_TIM7                  FALSE
 +#define STM32_GPT_USE_TIM8                  FALSE
 +#define STM32_GPT_USE_TIM9                  FALSE
 +#define STM32_GPT_USE_TIM11                 FALSE
 +#define STM32_GPT_USE_TIM12                 FALSE
 +#define STM32_GPT_USE_TIM14                 FALSE
 +#define STM32_GPT_TIM1_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM2_IRQ_PRIORITY         6
 +#define STM32_GPT_TIM3_IRQ_PRIORITY         10
 +#define STM32_GPT_TIM4_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM5_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM6_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM7_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM8_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM9_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM11_IRQ_PRIORITY        7
 +#define STM32_GPT_TIM12_IRQ_PRIORITY        7
 +#define STM32_GPT_TIM14_IRQ_PRIORITY        7
 +
 +/*
 + * I2C driver system settings.
 + */
 +#define STM32_I2C_USE_I2C1                  FALSE
 +#define STM32_I2C_USE_I2C2                  FALSE
 +#define STM32_I2C_USE_I2C3                  FALSE
 +#define STM32_I2C_I2C1_RX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 0)
 +#define STM32_I2C_I2C1_TX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 6)
 +#define STM32_I2C_I2C2_RX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 2)
 +#define STM32_I2C_I2C2_TX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 7)
 +#define STM32_I2C_I2C3_RX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 2)
 +#define STM32_I2C_I2C3_TX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 4)
 +#define STM32_I2C_I2C1_IRQ_PRIORITY         5
 +#define STM32_I2C_I2C2_IRQ_PRIORITY         5
 +#define STM32_I2C_I2C3_IRQ_PRIORITY         5
 +#define STM32_I2C_I2C1_DMA_PRIORITY         3
 +#define STM32_I2C_I2C2_DMA_PRIORITY         3
 +#define STM32_I2C_I2C3_DMA_PRIORITY         3
 +#define STM32_I2C_I2C1_DMA_ERROR_HOOK()     chSysHalt()
 +#define STM32_I2C_I2C2_DMA_ERROR_HOOK()     chSysHalt()
 +#define STM32_I2C_I2C3_DMA_ERROR_HOOK()     chSysHalt()
 +
 +/*
 + * ICU driver system settings.
 + */
 +#define STM32_ICU_USE_TIM1                  FALSE
 +#define STM32_ICU_USE_TIM2                  FALSE
 +#define STM32_ICU_USE_TIM3                  FALSE
 +#define STM32_ICU_USE_TIM4                  FALSE
 +#define STM32_ICU_USE_TIM5                  FALSE
 +#define STM32_ICU_USE_TIM8                  FALSE
 +#define STM32_ICU_USE_TIM9                  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
 +#define STM32_ICU_TIM8_IRQ_PRIORITY         7
 +#define STM32_ICU_TIM9_IRQ_PRIORITY         7
 +
 +/*
 + * MAC driver system settings.
 + */
 +#define STM32_MAC_TRANSMIT_BUFFERS          2
 +#define STM32_MAC_RECEIVE_BUFFERS           4
 +#define STM32_MAC_BUFFERS_SIZE              1522
 +#define STM32_MAC_PHY_TIMEOUT               100
 +#define STM32_MAC_ETH1_CHANGE_PHY_STATE     TRUE
 +#define STM32_MAC_ETH1_IRQ_PRIORITY         13
 +#define STM32_MAC_IP_CHECKSUM_OFFLOAD       0
 +
 +/*
 + * PWM driver system settings.
 + */
 +#define STM32_PWM_USE_ADVANCED              FALSE
 +#define STM32_PWM_USE_TIM1                  FALSE
 +#define STM32_PWM_USE_TIM2                  FALSE
 +#define STM32_PWM_USE_TIM3                  FALSE
 +#define STM32_PWM_USE_TIM4                  FALSE
 +#define STM32_PWM_USE_TIM5                  FALSE
 +#define STM32_PWM_USE_TIM8                  FALSE
 +#define STM32_PWM_USE_TIM9                  FALSE
 +#define STM32_PWM_TIM1_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM2_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM3_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM4_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM5_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM8_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM9_IRQ_PRIORITY         7
 +
 +/*
 + * SERIAL driver system settings.
 + */
 +#define STM32_SERIAL_USE_USART1             FALSE
 +#define STM32_SERIAL_USE_USART2             TRUE
 +#define STM32_SERIAL_USE_USART3             FALSE
 +#define STM32_SERIAL_USE_UART4              FALSE
 +#define STM32_SERIAL_USE_UART5              FALSE
 +#define STM32_SERIAL_USE_USART6             FALSE
 +#define STM32_SERIAL_USART1_PRIORITY        12
 +#define STM32_SERIAL_USART2_PRIORITY        12
 +#define STM32_SERIAL_USART3_PRIORITY        12
 +#define STM32_SERIAL_UART4_PRIORITY         12
 +#define STM32_SERIAL_UART5_PRIORITY         12
 +#define STM32_SERIAL_USART6_PRIORITY        12
 +
 +/*
 + * SPI driver system settings.
 + */
 +#define STM32_SPI_USE_SPI1                  FALSE
 +#define STM32_SPI_USE_SPI2                  FALSE
 +#define STM32_SPI_USE_SPI3                  FALSE
 +#define STM32_SPI_SPI1_RX_DMA_STREAM        STM32_DMA_STREAM_ID(2, 0)
 +#define STM32_SPI_SPI1_TX_DMA_STREAM        STM32_DMA_STREAM_ID(2, 3)
 +#define STM32_SPI_SPI2_RX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 3)
 +#define STM32_SPI_SPI2_TX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 4)
 +#define STM32_SPI_SPI3_RX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 0)
 +#define STM32_SPI_SPI3_TX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 7)
 +#define STM32_SPI_SPI1_DMA_PRIORITY         1
 +#define STM32_SPI_SPI2_DMA_PRIORITY         1
 +#define STM32_SPI_SPI3_DMA_PRIORITY         1
 +#define STM32_SPI_SPI1_IRQ_PRIORITY         10
 +#define STM32_SPI_SPI2_IRQ_PRIORITY         10
 +#define STM32_SPI_SPI3_IRQ_PRIORITY         10
 +#define STM32_SPI_DMA_ERROR_HOOK(spip)      chSysHalt()
 +
 +/*
 + * UART driver system settings.
 + */
 +#define STM32_UART_USE_USART1               FALSE
 +#define STM32_UART_USE_USART2               FALSE
 +#define STM32_UART_USE_USART3               FALSE
 +#define STM32_UART_USE_USART6               FALSE
 +#define STM32_UART_USART1_RX_DMA_STREAM     STM32_DMA_STREAM_ID(2, 5)
 +#define STM32_UART_USART1_TX_DMA_STREAM     STM32_DMA_STREAM_ID(2, 7)
 +#define STM32_UART_USART2_RX_DMA_STREAM     STM32_DMA_STREAM_ID(1, 5)
 +#define STM32_UART_USART2_TX_DMA_STREAM     STM32_DMA_STREAM_ID(1, 6)
 +#define STM32_UART_USART3_RX_DMA_STREAM     STM32_DMA_STREAM_ID(1, 1)
 +#define STM32_UART_USART3_TX_DMA_STREAM     STM32_DMA_STREAM_ID(1, 3)
 +#define STM32_UART_USART6_RX_DMA_STREAM     STM32_DMA_STREAM_ID(2, 2)
 +#define STM32_UART_USART6_TX_DMA_STREAM     STM32_DMA_STREAM_ID(2, 7)
 +#define STM32_UART_USART1_IRQ_PRIORITY      12
 +#define STM32_UART_USART2_IRQ_PRIORITY      12
 +#define STM32_UART_USART3_IRQ_PRIORITY      12
 +#define STM32_UART_USART6_IRQ_PRIORITY      12
 +#define STM32_UART_USART1_DMA_PRIORITY      0
 +#define STM32_UART_USART2_DMA_PRIORITY      0
 +#define STM32_UART_USART3_DMA_PRIORITY      0
 +#define STM32_UART_USART6_DMA_PRIORITY      0
 +#define STM32_UART_DMA_ERROR_HOOK(uartp)    chSysHalt()
 +
 +/*
 + * USB driver system settings.
 + */
 +#define STM32_USB_USE_OTG1                  FALSE
 +#define STM32_USB_USE_OTG2                  FALSE
 +#define STM32_USB_OTG1_IRQ_PRIORITY         14
 +#define STM32_USB_OTG2_IRQ_PRIORITY         14
 +#define STM32_USB_OTG1_RX_FIFO_SIZE         512
 +#define STM32_USB_OTG2_RX_FIFO_SIZE         1024
 +#define STM32_USB_OTG_THREAD_PRIO           LOWPRIO
 +#define STM32_USB_OTG_THREAD_STACK_SIZE     128
 +#define STM32_USB_OTGFIFO_FILL_BASEPRI      0
 diff --git a/testhal/STM32F4xx/IRQ_STORM_FPU/readme.txt b/testhal/STM32F4xx/IRQ_STORM_FPU/readme.txt new file mode 100644 index 000000000..cb043261f --- /dev/null +++ b/testhal/STM32F4xx/IRQ_STORM_FPU/readme.txt @@ -0,0 +1,30 @@ +*****************************************************************************
 +** ChibiOS/RT HAL - IRQ_STORM_FPU stress test demo for STM32F4xx.          **
 +*****************************************************************************
 +
 +** TARGET **
 +
 +The demo runs on an STMicroelectronics STM32F4-Discovery board.
 +
 +** The Demo **
 +
 +The application demonstrates the use of the STM32F4xx GPT, PAL and Serial
 +drivers in order to implement a system stress demo involving the FPU.
 +
 +** Board Setup **
 +
 +None.
 +
 +** Build Procedure **
 +
 +The demo has been tested using YAGARTO 4.6.2.
 +Just modify the TRGT line in the makefile in order to use different GCC ports.
 +
 +** Notes **
 +
 +Some files used by the demo are not part of ChibiOS/RT but are copyright of
 +ST Microelectronics and are licensed under a different license.
 +Also note that not all the files present in the ST library are distributed
 +with ChibiOS/RT, you can find the whole library on the ST web site:
 +
 +                             http://www.st.com
 diff --git a/testhal/STM32F4xx/PWM-ICU/.cproject b/testhal/STM32F4xx/PWM-ICU/.cproject new file mode 100644 index 000000000..940a1c9d5 --- /dev/null +++ b/testhal/STM32F4xx/PWM-ICU/.cproject @@ -0,0 +1,51 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?>
 +<?fileVersion 4.0.0?>
 +
 +<cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
 +	<storageModule moduleId="org.eclipse.cdt.core.settings">
 +		<cconfiguration id="0.795257592">
 +			<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="0.795257592" moduleId="org.eclipse.cdt.core.settings" name="Default">
 +				<externalSettings/>
 +				<extensions>
 +					<extension id="org.eclipse.cdt.core.VCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 +					<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 +					<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
 +					<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 +					<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 +					<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 +				</extensions>
 +			</storageModule>
 +			<storageModule moduleId="cdtBuildSystem" version="4.0.0">
 +				<configuration artifactName="${ProjName}" buildProperties="" description="" id="0.795257592" name="Default" parent="org.eclipse.cdt.build.core.prefbase.cfg">
 +					<folderInfo id="0.795257592." name="/" resourcePath="">
 +						<toolChain id="org.eclipse.cdt.build.core.prefbase.toolchain.350717805" name="No ToolChain" resourceTypeBasedDiscovery="false" superClass="org.eclipse.cdt.build.core.prefbase.toolchain">
 +							<targetPlatform id="org.eclipse.cdt.build.core.prefbase.toolchain.350717805.462195181" name=""/>
 +							<builder id="org.eclipse.cdt.build.core.settings.default.builder.2135030104" keepEnvironmentInBuildfile="false" managedBuildOn="false" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="org.eclipse.cdt.build.core.settings.default.builder"/>
 +							<tool id="org.eclipse.cdt.build.core.settings.holder.libs.1007294014" name="holder for library settings" superClass="org.eclipse.cdt.build.core.settings.holder.libs"/>
 +							<tool id="org.eclipse.cdt.build.core.settings.holder.1189960550" name="Assembly" superClass="org.eclipse.cdt.build.core.settings.holder">
 +								<inputType id="org.eclipse.cdt.build.core.settings.holder.inType.1988354390" languageId="org.eclipse.cdt.core.assembly" languageName="Assembly" sourceContentType="org.eclipse.cdt.core.asmSource" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
 +							</tool>
 +							<tool id="org.eclipse.cdt.build.core.settings.holder.925604868" name="GNU C++" superClass="org.eclipse.cdt.build.core.settings.holder">
 +								<inputType id="org.eclipse.cdt.build.core.settings.holder.inType.1960726312" languageId="org.eclipse.cdt.core.g++" languageName="GNU C++" sourceContentType="org.eclipse.cdt.core.cxxSource,org.eclipse.cdt.core.cxxHeader" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
 +							</tool>
 +							<tool id="org.eclipse.cdt.build.core.settings.holder.938166859" name="GNU C" superClass="org.eclipse.cdt.build.core.settings.holder">
 +								<inputType id="org.eclipse.cdt.build.core.settings.holder.inType.1412259295" languageId="org.eclipse.cdt.core.gcc" languageName="GNU C" sourceContentType="org.eclipse.cdt.core.cSource,org.eclipse.cdt.core.cHeader" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
 +							</tool>
 +						</toolChain>
 +					</folderInfo>
 +				</configuration>
 +			</storageModule>
 +			<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
 +		</cconfiguration>
 +	</storageModule>
 +	<storageModule moduleId="cdtBuildSystem" version="4.0.0">
 +		<project id="STM32F4xx-PWM-ICU.null.1361492823" name="STM32F4xx-PWM-ICU"/>
 +	</storageModule>
 +	<storageModule moduleId="scannerConfiguration">
 +		<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
 +		<scannerConfigBuildInfo instanceId="0.795257592">
 +			<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile"/>
 +		</scannerConfigBuildInfo>
 +	</storageModule>
 +	<storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
 +</cproject>
 diff --git a/testhal/STM32F4xx/PWM-ICU/.project b/testhal/STM32F4xx/PWM-ICU/.project new file mode 100644 index 000000000..ebfbb62af --- /dev/null +++ b/testhal/STM32F4xx/PWM-ICU/.project @@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="UTF-8"?>
 +<projectDescription>
 +	<name>STM32F4xx-PWM-ICU</name>
 +	<comment></comment>
 +	<projects>
 +	</projects>
 +	<buildSpec>
 +		<buildCommand>
 +			<name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
 +			<triggers>clean,full,incremental,</triggers>
 +			<arguments>
 +			</arguments>
 +		</buildCommand>
 +		<buildCommand>
 +			<name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
 +			<triggers>full,incremental,</triggers>
 +			<arguments>
 +			</arguments>
 +		</buildCommand>
 +	</buildSpec>
 +	<natures>
 +		<nature>org.eclipse.cdt.core.cnature</nature>
 +		<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
 +		<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
 +	</natures>
 +	<linkedResources>
 +		<link>
 +			<name>board</name>
 +			<type>2</type>
 +			<locationURI>CHIBIOS/boards/ST_STM32F4_DISCOVERY</locationURI>
 +		</link>
 +		<link>
 +			<name>os</name>
 +			<type>2</type>
 +			<locationURI>CHIBIOS/os</locationURI>
 +		</link>
 +	</linkedResources>
 +</projectDescription>
 diff --git a/testhal/STM32F4xx/PWM-ICU/Makefile b/testhal/STM32F4xx/PWM-ICU/Makefile new file mode 100644 index 000000000..86de6d81c --- /dev/null +++ b/testhal/STM32F4xx/PWM-ICU/Makefile @@ -0,0 +1,222 @@ +##############################################################################
 +# Build global options
 +# NOTE: Can be overridden externally.
 +#
 +
 +# Compiler options here.
 +ifeq ($(USE_OPT),)
 +  USE_OPT = -O2 -ggdb -fomit-frame-pointer -falign-functions=16
 +endif
 +
 +# C specific options here (added to USE_OPT).
 +ifeq ($(USE_COPT),)
 +  USE_COPT = 
 +endif
 +
 +# C++ specific options here (added to USE_OPT).
 +ifeq ($(USE_CPPOPT),)
 +  USE_CPPOPT = -fno-rtti
 +endif
 +
 +# Enable this if you want the linker to remove unused code and data
 +ifeq ($(USE_LINK_GC),)
 +  USE_LINK_GC = yes
 +endif
 +
 +# If enabled, this option allows to compile the application in THUMB mode.
 +ifeq ($(USE_THUMB),)
 +  USE_THUMB = yes
 +endif
 +
 +# Enable this if you want to see the full log while compiling.
 +ifeq ($(USE_VERBOSE_COMPILE),)
 +  USE_VERBOSE_COMPILE = no
 +endif
 +
 +#
 +# Build global options
 +##############################################################################
 +
 +##############################################################################
 +# Architecture or project specific options
 +#
 +
 +# Enables the use of FPU on Cortex-M4.
 +# Enable this if you really want to use the STM FWLib.
 +ifeq ($(USE_FPU),)
 +  USE_FPU = no
 +endif
 +
 +# Enable this if you really want to use the STM FWLib.
 +ifeq ($(USE_FWLIB),)
 +  USE_FWLIB = no
 +endif
 +
 +#
 +# Architecture or project specific options
 +##############################################################################
 +
 +##############################################################################
 +# Project, sources and paths
 +#
 +
 +# Define project name here
 +PROJECT = ch
 +
 +# Imported source files and paths
 +CHIBIOS = ../../..
 +include $(CHIBIOS)/boards/ST_STM32F4_DISCOVERY/board.mk
 +include $(CHIBIOS)/os/hal/platforms/STM32F4xx/platform.mk
 +include $(CHIBIOS)/os/hal/hal.mk
 +include $(CHIBIOS)/os/ports/GCC/ARMCMx/STM32F4xx/port.mk
 +include $(CHIBIOS)/os/kernel/kernel.mk
 +include $(CHIBIOS)/test/test.mk
 +
 +# Define linker script file here
 +LDSCRIPT= $(PORTLD)/STM32F407xG.ld
 +#LDSCRIPT= $(PORTLD)/STM32F407xG_CCM.ld
 +
 +# C sources that can be compiled in ARM or THUMB mode depending on the global
 +# setting.
 +CSRC = $(PORTSRC) \
 +       $(KERNSRC) \
 +       $(TESTSRC) \
 +       $(HALSRC) \
 +       $(PLATFORMSRC) \
 +       $(BOARDSRC) \
 +       $(CHIBIOS)/os/various/chprintf.c \
 +       main.c
 +
 +# C++ sources that can be compiled in ARM or THUMB mode depending on the global
 +# setting.
 +CPPSRC =
 +
 +# C sources to be compiled in ARM mode regardless of the global setting.
 +# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler
 +#       option that results in lower performance and larger code size.
 +ACSRC =
 +
 +# C++ sources to be compiled in ARM mode regardless of the global setting.
 +# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler
 +#       option that results in lower performance and larger code size.
 +ACPPSRC =
 +
 +# C sources to be compiled in THUMB mode regardless of the global setting.
 +# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler
 +#       option that results in lower performance and larger code size.
 +TCSRC =
 +
 +# C sources to be compiled in THUMB mode regardless of the global setting.
 +# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler
 +#       option that results in lower performance and larger code size.
 +TCPPSRC =
 +
 +# List ASM source files here
 +ASMSRC = $(PORTASM)
 +
 +INCDIR = $(PORTINC) $(KERNINC) $(TESTINC) \
 +         $(HALINC) $(PLATFORMINC) $(BOARDINC) \
 +         $(CHIBIOS)/os/various
 +
 +#
 +# Project, sources and paths
 +##############################################################################
 +
 +##############################################################################
 +# Compiler settings
 +#
 +
 +MCU  = cortex-m4
 +
 +#TRGT = arm-elf-
 +TRGT = arm-none-eabi-
 +CC   = $(TRGT)gcc
 +CPPC = $(TRGT)g++
 +# Enable loading with g++ only if you need C++ runtime support.
 +# NOTE: You can use C++ even without C++ support if you are careful. C++
 +#       runtime support makes code size explode.
 +LD   = $(TRGT)gcc
 +#LD   = $(TRGT)g++
 +CP   = $(TRGT)objcopy
 +AS   = $(TRGT)gcc -x assembler-with-cpp
 +OD   = $(TRGT)objdump
 +HEX  = $(CP) -O ihex
 +BIN  = $(CP) -O binary
 +
 +# ARM-specific options here
 +AOPT =
 +
 +# THUMB-specific options here
 +TOPT = -mthumb -DTHUMB
 +
 +# Define C warning options here
 +CWARN = -Wall -Wextra -Wstrict-prototypes
 +
 +# Define C++ warning options here
 +CPPWARN = -Wall -Wextra
 +
 +#
 +# Compiler settings
 +##############################################################################
 +
 +##############################################################################
 +# Start of default section
 +#
 +
 +# List all default C defines here, like -D_DEBUG=1
 +DDEFS =
 +
 +# List all default ASM defines here, like -D_DEBUG=1
 +DADEFS =
 +
 +# List all default directories to look for include files here
 +DINCDIR =
 +
 +# List the default directory to look for the libraries here
 +DLIBDIR =
 +
 +# List all default libraries here
 +DLIBS =
 +
 +#
 +# End of default section
 +##############################################################################
 +
 +##############################################################################
 +# Start of user section
 +#
 +
 +# List all user C define here, like -D_DEBUG=1
 +UDEFS =
 +
 +# Define ASM defines here
 +UADEFS =
 +
 +# List all user directories here
 +UINCDIR =
 +
 +# List the user directory to look for the libraries here
 +ULIBDIR =
 +
 +# List all user libraries here
 +ULIBS =
 +
 +#
 +# End of user defines
 +##############################################################################
 +
 +ifeq ($(USE_FPU),yes)
 +  USE_OPT += -mfloat-abi=softfp -mfpu=fpv4-sp-d16 -fsingle-precision-constant
 +  DDEFS += -DCORTEX_USE_FPU=TRUE
 +else
 +  DDEFS += -DCORTEX_USE_FPU=FALSE
 +endif
 +
 +ifeq ($(USE_FWLIB),yes)
 +  include $(CHIBIOS)/ext/stm32lib/stm32lib.mk
 +  CSRC += $(STM32SRC)
 +  INCDIR += $(STM32INC)
 +  USE_OPT += -DUSE_STDPERIPH_DRIVER
 +endif
 +
 +include $(CHIBIOS)/os/ports/GCC/ARMCMx/rules.mk
 diff --git a/testhal/STM32F4xx/PWM-ICU/chconf.h b/testhal/STM32F4xx/PWM-ICU/chconf.h new file mode 100644 index 000000000..2e6fcc6ee --- /dev/null +++ b/testhal/STM32F4xx/PWM-ICU/chconf.h @@ -0,0 +1,531 @@ +/*
 +    ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio
 +
 +    Licensed under the Apache License, Version 2.0 (the "License");
 +    you may not use this file except in compliance with the License.
 +    You may obtain a copy of the License at
 +
 +        http://www.apache.org/licenses/LICENSE-2.0
 +
 +    Unless required by applicable law or agreed to in writing, software
 +    distributed under the License is distributed on an "AS IS" BASIS,
 +    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 +    See the License for the specific language governing permissions and
 +    limitations under the License.
 +*/
 +
 +/**
 + * @file    templates/chconf.h
 + * @brief   Configuration file template.
 + * @details A copy of this file must be placed in each project directory, it
 + *          contains the application specific kernel settings.
 + *
 + * @addtogroup config
 + * @details Kernel related settings and hooks.
 + * @{
 + */
 +
 +#ifndef _CHCONF_H_
 +#define _CHCONF_H_
 +
 +/*===========================================================================*/
 +/**
 + * @name Kernel parameters and options
 + * @{
 + */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   System tick frequency.
 + * @details Frequency of the system timer that drives the system ticks. This
 + *          setting also defines the system tick time unit.
 + */
 +#if !defined(CH_FREQUENCY) || defined(__DOXYGEN__)
 +#define CH_FREQUENCY                    1000
 +#endif
 +
 +/**
 + * @brief   Round robin interval.
 + * @details This constant is the number of system ticks allowed for the
 + *          threads before preemption occurs. Setting this value to zero
 + *          disables the preemption for threads with equal priority and the
 + *          round robin becomes cooperative. Note that higher priority
 + *          threads can still preempt, the kernel is always preemptive.
 + *
 + * @note    Disabling the round robin preemption makes the kernel more compact
 + *          and generally faster.
 + */
 +#if !defined(CH_TIME_QUANTUM) || defined(__DOXYGEN__)
 +#define CH_TIME_QUANTUM                 20
 +#endif
 +
 +/**
 + * @brief   Managed RAM size.
 + * @details Size of the RAM area to be managed by the OS. If set to zero
 + *          then the whole available RAM is used. The core memory is made
 + *          available to the heap allocator and/or can be used directly through
 + *          the simplified core memory allocator.
 + *
 + * @note    In order to let the OS manage the whole RAM the linker script must
 + *          provide the @p __heap_base__ and @p __heap_end__ symbols.
 + * @note    Requires @p CH_USE_MEMCORE.
 + */
 +#if !defined(CH_MEMCORE_SIZE) || defined(__DOXYGEN__)
 +#define CH_MEMCORE_SIZE                 0
 +#endif
 +
 +/**
 + * @brief   Idle thread automatic spawn suppression.
 + * @details When this option is activated the function @p chSysInit()
 + *          does not spawn the idle thread automatically. The application has
 + *          then the responsibility to do one of the following:
 + *          - Spawn a custom idle thread at priority @p IDLEPRIO.
 + *          - Change the main() thread priority to @p IDLEPRIO then enter
 + *            an endless loop. In this scenario the @p main() thread acts as
 + *            the idle thread.
 + *          .
 + * @note    Unless an idle thread is spawned the @p main() thread must not
 + *          enter a sleep state.
 + */
 +#if !defined(CH_NO_IDLE_THREAD) || defined(__DOXYGEN__)
 +#define CH_NO_IDLE_THREAD               FALSE
 +#endif
 +
 +/** @} */
 +
 +/*===========================================================================*/
 +/**
 + * @name Performance options
 + * @{
 + */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   OS optimization.
 + * @details If enabled then time efficient rather than space efficient code
 + *          is used when two possible implementations exist.
 + *
 + * @note    This is not related to the compiler optimization options.
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_OPTIMIZE_SPEED) || defined(__DOXYGEN__)
 +#define CH_OPTIMIZE_SPEED               TRUE
 +#endif
 +
 +/** @} */
 +
 +/*===========================================================================*/
 +/**
 + * @name Subsystem options
 + * @{
 + */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Threads registry APIs.
 + * @details If enabled then the registry APIs are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_REGISTRY) || defined(__DOXYGEN__)
 +#define CH_USE_REGISTRY                 TRUE
 +#endif
 +
 +/**
 + * @brief   Threads synchronization APIs.
 + * @details If enabled then the @p chThdWait() function is included in
 + *          the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_WAITEXIT) || defined(__DOXYGEN__)
 +#define CH_USE_WAITEXIT                 TRUE
 +#endif
 +
 +/**
 + * @brief   Semaphores APIs.
 + * @details If enabled then the Semaphores APIs are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_SEMAPHORES) || defined(__DOXYGEN__)
 +#define CH_USE_SEMAPHORES               TRUE
 +#endif
 +
 +/**
 + * @brief   Semaphores queuing mode.
 + * @details If enabled then the threads are enqueued on semaphores by
 + *          priority rather than in FIFO order.
 + *
 + * @note    The default is @p FALSE. Enable this if you have special requirements.
 + * @note    Requires @p CH_USE_SEMAPHORES.
 + */
 +#if !defined(CH_USE_SEMAPHORES_PRIORITY) || defined(__DOXYGEN__)
 +#define CH_USE_SEMAPHORES_PRIORITY      FALSE
 +#endif
 +
 +/**
 + * @brief   Atomic semaphore API.
 + * @details If enabled then the semaphores the @p chSemSignalWait() API
 + *          is included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_SEMAPHORES.
 + */
 +#if !defined(CH_USE_SEMSW) || defined(__DOXYGEN__)
 +#define CH_USE_SEMSW                    TRUE
 +#endif
 +
 +/**
 + * @brief   Mutexes APIs.
 + * @details If enabled then the mutexes APIs are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_MUTEXES) || defined(__DOXYGEN__)
 +#define CH_USE_MUTEXES                  TRUE
 +#endif
 +
 +/**
 + * @brief   Conditional Variables APIs.
 + * @details If enabled then the conditional variables APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_MUTEXES.
 + */
 +#if !defined(CH_USE_CONDVARS) || defined(__DOXYGEN__)
 +#define CH_USE_CONDVARS                 TRUE
 +#endif
 +
 +/**
 + * @brief   Conditional Variables APIs with timeout.
 + * @details If enabled then the conditional variables APIs with timeout
 + *          specification are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_CONDVARS.
 + */
 +#if !defined(CH_USE_CONDVARS_TIMEOUT) || defined(__DOXYGEN__)
 +#define CH_USE_CONDVARS_TIMEOUT         TRUE
 +#endif
 +
 +/**
 + * @brief   Events Flags APIs.
 + * @details If enabled then the event flags APIs are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_EVENTS) || defined(__DOXYGEN__)
 +#define CH_USE_EVENTS                   TRUE
 +#endif
 +
 +/**
 + * @brief   Events Flags APIs with timeout.
 + * @details If enabled then the events APIs with timeout specification
 + *          are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_EVENTS.
 + */
 +#if !defined(CH_USE_EVENTS_TIMEOUT) || defined(__DOXYGEN__)
 +#define CH_USE_EVENTS_TIMEOUT           TRUE
 +#endif
 +
 +/**
 + * @brief   Synchronous Messages APIs.
 + * @details If enabled then the synchronous messages APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_MESSAGES) || defined(__DOXYGEN__)
 +#define CH_USE_MESSAGES                 TRUE
 +#endif
 +
 +/**
 + * @brief   Synchronous Messages queuing mode.
 + * @details If enabled then messages are served by priority rather than in
 + *          FIFO order.
 + *
 + * @note    The default is @p FALSE. Enable this if you have special requirements.
 + * @note    Requires @p CH_USE_MESSAGES.
 + */
 +#if !defined(CH_USE_MESSAGES_PRIORITY) || defined(__DOXYGEN__)
 +#define CH_USE_MESSAGES_PRIORITY        FALSE
 +#endif
 +
 +/**
 + * @brief   Mailboxes APIs.
 + * @details If enabled then the asynchronous messages (mailboxes) APIs are
 + *          included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_SEMAPHORES.
 + */
 +#if !defined(CH_USE_MAILBOXES) || defined(__DOXYGEN__)
 +#define CH_USE_MAILBOXES                TRUE
 +#endif
 +
 +/**
 + * @brief   I/O Queues APIs.
 + * @details If enabled then the I/O queues APIs are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_QUEUES) || defined(__DOXYGEN__)
 +#define CH_USE_QUEUES                   TRUE
 +#endif
 +
 +/**
 + * @brief   Core Memory Manager APIs.
 + * @details If enabled then the core memory manager APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_MEMCORE) || defined(__DOXYGEN__)
 +#define CH_USE_MEMCORE                  TRUE
 +#endif
 +
 +/**
 + * @brief   Heap Allocator APIs.
 + * @details If enabled then the memory heap allocator APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_MEMCORE and either @p CH_USE_MUTEXES or
 + *          @p CH_USE_SEMAPHORES.
 + * @note    Mutexes are recommended.
 + */
 +#if !defined(CH_USE_HEAP) || defined(__DOXYGEN__)
 +#define CH_USE_HEAP                     TRUE
 +#endif
 +
 +/**
 + * @brief   C-runtime allocator.
 + * @details If enabled the the heap allocator APIs just wrap the C-runtime
 + *          @p malloc() and @p free() functions.
 + *
 + * @note    The default is @p FALSE.
 + * @note    Requires @p CH_USE_HEAP.
 + * @note    The C-runtime may or may not require @p CH_USE_MEMCORE, see the
 + *          appropriate documentation.
 + */
 +#if !defined(CH_USE_MALLOC_HEAP) || defined(__DOXYGEN__)
 +#define CH_USE_MALLOC_HEAP              FALSE
 +#endif
 +
 +/**
 + * @brief   Memory Pools Allocator APIs.
 + * @details If enabled then the memory pools allocator APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_MEMPOOLS) || defined(__DOXYGEN__)
 +#define CH_USE_MEMPOOLS                 TRUE
 +#endif
 +
 +/**
 + * @brief   Dynamic Threads APIs.
 + * @details If enabled then the dynamic threads creation APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_WAITEXIT.
 + * @note    Requires @p CH_USE_HEAP and/or @p CH_USE_MEMPOOLS.
 + */
 +#if !defined(CH_USE_DYNAMIC) || defined(__DOXYGEN__)
 +#define CH_USE_DYNAMIC                  TRUE
 +#endif
 +
 +/** @} */
 +
 +/*===========================================================================*/
 +/**
 + * @name Debug options
 + * @{
 + */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Debug option, system state check.
 + * @details If enabled the correct call protocol for system APIs is checked
 + *          at runtime.
 + *
 + * @note    The default is @p FALSE.
 + */
 +#if !defined(CH_DBG_SYSTEM_STATE_CHECK) || defined(__DOXYGEN__)
 +#define CH_DBG_SYSTEM_STATE_CHECK       TRUE
 +#endif
 +
 +/**
 + * @brief   Debug option, parameters checks.
 + * @details If enabled then the checks on the API functions input
 + *          parameters are activated.
 + *
 + * @note    The default is @p FALSE.
 + */
 +#if !defined(CH_DBG_ENABLE_CHECKS) || defined(__DOXYGEN__)
 +#define CH_DBG_ENABLE_CHECKS            TRUE
 +#endif
 +
 +/**
 + * @brief   Debug option, consistency checks.
 + * @details If enabled then all the assertions in the kernel code are
 + *          activated. This includes consistency checks inside the kernel,
 + *          runtime anomalies and port-defined checks.
 + *
 + * @note    The default is @p FALSE.
 + */
 +#if !defined(CH_DBG_ENABLE_ASSERTS) || defined(__DOXYGEN__)
 +#define CH_DBG_ENABLE_ASSERTS           TRUE
 +#endif
 +
 +/**
 + * @brief   Debug option, trace buffer.
 + * @details If enabled then the context switch circular trace buffer is
 + *          activated.
 + *
 + * @note    The default is @p FALSE.
 + */
 +#if !defined(CH_DBG_ENABLE_TRACE) || defined(__DOXYGEN__)
 +#define CH_DBG_ENABLE_TRACE             TRUE
 +#endif
 +
 +/**
 + * @brief   Debug option, stack checks.
 + * @details If enabled then a runtime stack check is performed.
 + *
 + * @note    The default is @p FALSE.
 + * @note    The stack check is performed in a architecture/port dependent way.
 + *          It may not be implemented or some ports.
 + * @note    The default failure mode is to halt the system with the global
 + *          @p panic_msg variable set to @p NULL.
 + */
 +#if !defined(CH_DBG_ENABLE_STACK_CHECK) || defined(__DOXYGEN__)
 +#define CH_DBG_ENABLE_STACK_CHECK       TRUE
 +#endif
 +
 +/**
 + * @brief   Debug option, stacks initialization.
 + * @details If enabled then the threads working area is filled with a byte
 + *          value when a thread is created. This can be useful for the
 + *          runtime measurement of the used stack.
 + *
 + * @note    The default is @p FALSE.
 + */
 +#if !defined(CH_DBG_FILL_THREADS) || defined(__DOXYGEN__)
 +#define CH_DBG_FILL_THREADS             TRUE
 +#endif
 +
 +/**
 + * @brief   Debug option, threads profiling.
 + * @details If enabled then a field is added to the @p Thread structure that
 + *          counts the system ticks occurred while executing the thread.
 + *
 + * @note    The default is @p TRUE.
 + * @note    This debug option is defaulted to TRUE because it is required by
 + *          some test cases into the test suite.
 + */
 +#if !defined(CH_DBG_THREADS_PROFILING) || defined(__DOXYGEN__)
 +#define CH_DBG_THREADS_PROFILING        TRUE
 +#endif
 +
 +/** @} */
 +
 +/*===========================================================================*/
 +/**
 + * @name Kernel hooks
 + * @{
 + */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Threads descriptor structure extension.
 + * @details User fields added to the end of the @p Thread structure.
 + */
 +#if !defined(THREAD_EXT_FIELDS) || defined(__DOXYGEN__)
 +#define THREAD_EXT_FIELDS                                                   \
 +  /* Add threads custom fields here.*/
 +#endif
 +
 +/**
 + * @brief   Threads initialization hook.
 + * @details User initialization code added to the @p chThdInit() API.
 + *
 + * @note    It is invoked from within @p chThdInit() and implicitly from all
 + *          the threads creation APIs.
 + */
 +#if !defined(THREAD_EXT_INIT_HOOK) || defined(__DOXYGEN__)
 +#define THREAD_EXT_INIT_HOOK(tp) {                                          \
 +  /* Add threads initialization code here.*/                                \
 +}
 +#endif
 +
 +/**
 + * @brief   Threads finalization hook.
 + * @details User finalization code added to the @p chThdExit() API.
 + *
 + * @note    It is inserted into lock zone.
 + * @note    It is also invoked when the threads simply return in order to
 + *          terminate.
 + */
 +#if !defined(THREAD_EXT_EXIT_HOOK) || defined(__DOXYGEN__)
 +#define THREAD_EXT_EXIT_HOOK(tp) {                                          \
 +  /* Add threads finalization code here.*/                                  \
 +}
 +#endif
 +
 +/**
 + * @brief   Context switch hook.
 + * @details This hook is invoked just before switching between threads.
 + */
 +#if !defined(THREAD_CONTEXT_SWITCH_HOOK) || defined(__DOXYGEN__)
 +#define THREAD_CONTEXT_SWITCH_HOOK(ntp, otp) {                              \
 +  /* System halt code here.*/                                               \
 +}
 +#endif
 +
 +/**
 + * @brief   Idle Loop hook.
 + * @details This hook is continuously invoked by the idle thread loop.
 + */
 +#if !defined(IDLE_LOOP_HOOK) || defined(__DOXYGEN__)
 +#define IDLE_LOOP_HOOK() {                                                  \
 +  /* Idle loop code here.*/                                                 \
 +}
 +#endif
 +
 +/**
 + * @brief   System tick event hook.
 + * @details This hook is invoked in the system tick handler immediately
 + *          after processing the virtual timers queue.
 + */
 +#if !defined(SYSTEM_TICK_EVENT_HOOK) || defined(__DOXYGEN__)
 +#define SYSTEM_TICK_EVENT_HOOK() {                                          \
 +  /* System tick event code here.*/                                         \
 +}
 +#endif
 +
 +/**
 + * @brief   System halt hook.
 + * @details This hook is invoked in case to a system halting error before
 + *          the system is halted.
 + */
 +#if !defined(SYSTEM_HALT_HOOK) || defined(__DOXYGEN__)
 +#define SYSTEM_HALT_HOOK() {                                                \
 +  /* System halt code here.*/                                               \
 +}
 +#endif
 +
 +/** @} */
 +
 +/*===========================================================================*/
 +/* Port-specific settings (override port settings defaulted in chcore.h).    */
 +/*===========================================================================*/
 +
 +#endif  /* _CHCONF_H_ */
 +
 +/** @} */
 diff --git a/testhal/STM32F4xx/PWM-ICU/halconf.h b/testhal/STM32F4xx/PWM-ICU/halconf.h new file mode 100644 index 000000000..2f74c82c8 --- /dev/null +++ b/testhal/STM32F4xx/PWM-ICU/halconf.h @@ -0,0 +1,312 @@ +/*
 +    ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio
 +
 +    Licensed under the Apache License, Version 2.0 (the "License");
 +    you may not use this file except in compliance with the License.
 +    You may obtain a copy of the License at
 +
 +        http://www.apache.org/licenses/LICENSE-2.0
 +
 +    Unless required by applicable law or agreed to in writing, software
 +    distributed under the License is distributed on an "AS IS" BASIS,
 +    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 +    See the License for the specific language governing permissions and
 +    limitations under the License.
 +*/
 +
 +/**
 + * @file    templates/halconf.h
 + * @brief   HAL configuration header.
 + * @details HAL configuration file, this file allows to enable or disable the
 + *          various device drivers from your application. You may also use
 + *          this file in order to override the device drivers default settings.
 + *
 + * @addtogroup HAL_CONF
 + * @{
 + */
 +
 +#ifndef _HALCONF_H_
 +#define _HALCONF_H_
 +
 +#include "mcuconf.h"
 +
 +/**
 + * @brief   Enables the TM subsystem.
 + */
 +#if !defined(HAL_USE_TM) || defined(__DOXYGEN__)
 +#define HAL_USE_TM                  TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the PAL subsystem.
 + */
 +#if !defined(HAL_USE_PAL) || defined(__DOXYGEN__)
 +#define HAL_USE_PAL                 TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the ADC subsystem.
 + */
 +#if !defined(HAL_USE_ADC) || defined(__DOXYGEN__)
 +#define HAL_USE_ADC                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the CAN subsystem.
 + */
 +#if !defined(HAL_USE_CAN) || defined(__DOXYGEN__)
 +#define HAL_USE_CAN                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the EXT subsystem.
 + */
 +#if !defined(HAL_USE_EXT) || defined(__DOXYGEN__)
 +#define HAL_USE_EXT                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the GPT subsystem.
 + */
 +#if !defined(HAL_USE_GPT) || defined(__DOXYGEN__)
 +#define HAL_USE_GPT                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the I2C subsystem.
 + */
 +#if !defined(HAL_USE_I2C) || defined(__DOXYGEN__)
 +#define HAL_USE_I2C                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the ICU subsystem.
 + */
 +#if !defined(HAL_USE_ICU) || defined(__DOXYGEN__)
 +#define HAL_USE_ICU                 TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the MAC subsystem.
 + */
 +#if !defined(HAL_USE_MAC) || defined(__DOXYGEN__)
 +#define HAL_USE_MAC                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the MMC_SPI subsystem.
 + */
 +#if !defined(HAL_USE_MMC_SPI) || defined(__DOXYGEN__)
 +#define HAL_USE_MMC_SPI             FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the PWM subsystem.
 + */
 +#if !defined(HAL_USE_PWM) || defined(__DOXYGEN__)
 +#define HAL_USE_PWM                 TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the RTC subsystem.
 + */
 +#if !defined(HAL_USE_RTC) || defined(__DOXYGEN__)
 +#define HAL_USE_RTC                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the SDC subsystem.
 + */
 +#if !defined(HAL_USE_SDC) || defined(__DOXYGEN__)
 +#define HAL_USE_SDC                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the SERIAL subsystem.
 + */
 +#if !defined(HAL_USE_SERIAL) || defined(__DOXYGEN__)
 +#define HAL_USE_SERIAL              FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the SERIAL over USB subsystem.
 + */
 +#if !defined(HAL_USE_SERIAL_USB) || defined(__DOXYGEN__)
 +#define HAL_USE_SERIAL_USB          FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the SPI subsystem.
 + */
 +#if !defined(HAL_USE_SPI) || defined(__DOXYGEN__)
 +#define HAL_USE_SPI                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the UART subsystem.
 + */
 +#if !defined(HAL_USE_UART) || defined(__DOXYGEN__)
 +#define HAL_USE_UART                FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the USB subsystem.
 + */
 +#if !defined(HAL_USE_USB) || defined(__DOXYGEN__)
 +#define HAL_USE_USB                 FALSE
 +#endif
 +
 +/*===========================================================================*/
 +/* ADC driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Enables synchronous APIs.
 + * @note    Disabling this option saves both code and data space.
 + */
 +#if !defined(ADC_USE_WAIT) || defined(__DOXYGEN__)
 +#define ADC_USE_WAIT                TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the @p adcAcquireBus() and @p adcReleaseBus() APIs.
 + * @note    Disabling this option saves both code and data space.
 + */
 +#if !defined(ADC_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
 +#define ADC_USE_MUTUAL_EXCLUSION    TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* CAN driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Sleep mode related APIs inclusion switch.
 + */
 +#if !defined(CAN_USE_SLEEP_MODE) || defined(__DOXYGEN__)
 +#define CAN_USE_SLEEP_MODE          TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* I2C driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Enables the mutual exclusion APIs on the I2C bus.
 + */
 +#if !defined(I2C_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
 +#define I2C_USE_MUTUAL_EXCLUSION    TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* MAC driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Enables an event sources for incoming packets.
 + */
 +#if !defined(MAC_USE_ZERO_COPY) || defined(__DOXYGEN__)
 +#define MAC_USE_ZERO_COPY           FALSE
 +#endif
 +
 +/**
 + * @brief   Enables an event sources for incoming packets.
 + */
 +#if !defined(MAC_USE_EVENTS) || defined(__DOXYGEN__)
 +#define MAC_USE_EVENTS              TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* MMC_SPI driver related settings.                                          */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Delays insertions.
 + * @details If enabled this options inserts delays into the MMC waiting
 + *          routines releasing some extra CPU time for the threads with
 + *          lower priority, this may slow down the driver a bit however.
 + *          This option is recommended also if the SPI driver does not
 + *          use a DMA channel and heavily loads the CPU.
 + */
 +#if !defined(MMC_NICE_WAITING) || defined(__DOXYGEN__)
 +#define MMC_NICE_WAITING            TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* SDC driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Number of initialization attempts before rejecting the card.
 + * @note    Attempts are performed at 10mS intervals.
 + */
 +#if !defined(SDC_INIT_RETRY) || defined(__DOXYGEN__)
 +#define SDC_INIT_RETRY              100
 +#endif
 +
 +/**
 + * @brief   Include support for MMC cards.
 + * @note    MMC support is not yet implemented so this option must be kept
 + *          at @p FALSE.
 + */
 +#if !defined(SDC_MMC_SUPPORT) || defined(__DOXYGEN__)
 +#define SDC_MMC_SUPPORT             FALSE
 +#endif
 +
 +/**
 + * @brief   Delays insertions.
 + * @details If enabled this options inserts delays into the MMC waiting
 + *          routines releasing some extra CPU time for the threads with
 + *          lower priority, this may slow down the driver a bit however.
 + */
 +#if !defined(SDC_NICE_WAITING) || defined(__DOXYGEN__)
 +#define SDC_NICE_WAITING            TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* SERIAL driver related settings.                                           */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Default bit rate.
 + * @details Configuration parameter, this is the baud rate selected for the
 + *          default configuration.
 + */
 +#if !defined(SERIAL_DEFAULT_BITRATE) || defined(__DOXYGEN__)
 +#define SERIAL_DEFAULT_BITRATE      38400
 +#endif
 +
 +/**
 + * @brief   Serial buffers size.
 + * @details Configuration parameter, you can change the depth of the queue
 + *          buffers depending on the requirements of your application.
 + * @note    The default is 64 bytes for both the transmission and receive
 + *          buffers.
 + */
 +#if !defined(SERIAL_BUFFERS_SIZE) || defined(__DOXYGEN__)
 +#define SERIAL_BUFFERS_SIZE         16
 +#endif
 +
 +/*===========================================================================*/
 +/* SPI driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Enables synchronous APIs.
 + * @note    Disabling this option saves both code and data space.
 + */
 +#if !defined(SPI_USE_WAIT) || defined(__DOXYGEN__)
 +#define SPI_USE_WAIT                TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the @p spiAcquireBus() and @p spiReleaseBus() APIs.
 + * @note    Disabling this option saves both code and data space.
 + */
 +#if !defined(SPI_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
 +#define SPI_USE_MUTUAL_EXCLUSION    TRUE
 +#endif
 +
 +#endif /* _HALCONF_H_ */
 +
 +/** @} */
 diff --git a/testhal/STM32F4xx/PWM-ICU/main.c b/testhal/STM32F4xx/PWM-ICU/main.c new file mode 100644 index 000000000..dc6287209 --- /dev/null +++ b/testhal/STM32F4xx/PWM-ICU/main.c @@ -0,0 +1,138 @@ +/*
 +    ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio
 +
 +    Licensed under the Apache License, Version 2.0 (the "License");
 +    you may not use this file except in compliance with the License.
 +    You may obtain a copy of the License at
 +
 +        http://www.apache.org/licenses/LICENSE-2.0
 +
 +    Unless required by applicable law or agreed to in writing, software
 +    distributed under the License is distributed on an "AS IS" BASIS,
 +    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 +    See the License for the specific language governing permissions and
 +    limitations under the License.
 +*/
 +
 +#include "ch.h"
 +#include "hal.h"
 +
 +static void pwmpcb(PWMDriver *pwmp) {
 +
 +  (void)pwmp;
 +  palClearPad(GPIOD, GPIOD_LED5);
 +}
 +
 +static void pwmc1cb(PWMDriver *pwmp) {
 +
 +  (void)pwmp;
 +  palSetPad(GPIOD, GPIOD_LED5);
 +}
 +
 +static PWMConfig pwmcfg = {
 +  10000,                                    /* 10kHz PWM clock frequency.   */
 +  10000,                                    /* Initial PWM period 1S.       */
 +  pwmpcb,
 +  {
 +   {PWM_OUTPUT_ACTIVE_HIGH, pwmc1cb},
 +   {PWM_OUTPUT_DISABLED, NULL},
 +   {PWM_OUTPUT_DISABLED, NULL},
 +   {PWM_OUTPUT_DISABLED, NULL}
 +  },
 +  0,
 +};
 +
 +icucnt_t last_width, last_period;
 +
 +static void icuwidthcb(ICUDriver *icup) {
 +
 +  palSetPad(GPIOD, GPIOD_LED4);
 +  last_width = icuGetWidth(icup);
 +}
 +
 +static void icuperiodcb(ICUDriver *icup) {
 +
 +  palClearPad(GPIOD, GPIOD_LED4);
 +  last_period = icuGetPeriod(icup);
 +}
 +
 +static ICUConfig icucfg = {
 +  ICU_INPUT_ACTIVE_HIGH,
 +  10000,                                    /* 10kHz ICU clock frequency.   */
 +  icuwidthcb,
 +  icuperiodcb,
 +  NULL,
 +  ICU_CHANNEL_1
 +};
 +
 +/*
 + * Application entry point.
 + */
 +int main(void) {
 +
 +  /*
 +   * System initializations.
 +   * - HAL initialization, this also initializes the configured device drivers
 +   *   and performs the board-specific initializations.
 +   * - Kernel initialization, the main() function becomes a thread and the
 +   *   RTOS is active.
 +   */
 +  halInit();
 +  chSysInit();
 +
 +  /*
 +   * Initializes the PWM driver 2 and ICU driver 3.
 +   * GPIOA15 is the PWM output.
 +   * GPIOC6 is the ICU input.
 +   * The two pins have to be externally connected together.
 +   */
 +  pwmStart(&PWMD2, &pwmcfg);
 +  palSetPadMode(GPIOA, 15, PAL_MODE_ALTERNATE(1));
 +  icuStart(&ICUD3, &icucfg);
 +  palSetPadMode(GPIOC, 6, PAL_MODE_ALTERNATE(2));
 +  icuEnable(&ICUD3);
 +  chThdSleepMilliseconds(2000);
 +
 +  /*
 +   * Starts the PWM channel 0 using 75% duty cycle.
 +   */
 +  pwmEnableChannel(&PWMD2, 0, PWM_PERCENTAGE_TO_WIDTH(&PWMD2, 7500));
 +  chThdSleepMilliseconds(5000);
 +
 +  /*
 +   * Changes the PWM channel 0 to 50% duty cycle.
 +   */
 +  pwmEnableChannel(&PWMD2, 0, PWM_PERCENTAGE_TO_WIDTH(&PWMD2, 5000));
 +  chThdSleepMilliseconds(5000);
 +
 +  /*
 +   * Changes the PWM channel 0 to 25% duty cycle.
 +   */
 +  pwmEnableChannel(&PWMD2, 0, PWM_PERCENTAGE_TO_WIDTH(&PWMD2, 2500));
 +  chThdSleepMilliseconds(5000);
 +
 +  /*
 +   * Changes PWM period to half second the duty cycle becomes 50%
 +   * implicitly.
 +   */
 +  pwmChangePeriod(&PWMD2, 5000);
 +  chThdSleepMilliseconds(5000);
 +
 +  /*
 +   * Disables channel 0 and stops the drivers.
 +   */
 +  pwmDisableChannel(&PWMD2, 0);
 +  pwmStop(&PWMD2);
 +  icuDisable(&ICUD3);
 +  icuStop(&ICUD3);
 +  palClearPad(GPIOD, GPIOD_LED4);
 +  palClearPad(GPIOD, GPIOD_LED5);
 +
 +  /*
 +   * Normal main() thread activity, in this demo it does nothing.
 +   */
 +  while (TRUE) {
 +    chThdSleepMilliseconds(500);
 +  }
 +  return 0;
 +}
 diff --git a/testhal/STM32F4xx/PWM-ICU/mcuconf.h b/testhal/STM32F4xx/PWM-ICU/mcuconf.h new file mode 100644 index 000000000..e1e2badda --- /dev/null +++ b/testhal/STM32F4xx/PWM-ICU/mcuconf.h @@ -0,0 +1,278 @@ +/*
 +    ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio
 +
 +    Licensed under the Apache License, Version 2.0 (the "License");
 +    you may not use this file except in compliance with the License.
 +    You may obtain a copy of the License at
 +
 +        http://www.apache.org/licenses/LICENSE-2.0
 +
 +    Unless required by applicable law or agreed to in writing, software
 +    distributed under the License is distributed on an "AS IS" BASIS,
 +    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 +    See the License for the specific language governing permissions and
 +    limitations under the License.
 +*/
 +
 +/*
 + * STM32F4xx drivers configuration.
 + * The following settings override the default settings present in
 + * the various device driver implementation headers.
 + * Note that the settings for each driver only have effect if the whole
 + * driver is enabled in halconf.h.
 + *
 + * IRQ priorities:
 + * 15...0       Lowest...Highest.
 + *
 + * DMA priorities:
 + * 0...3        Lowest...Highest.
 + */
 +
 +#define STM32F4xx_MCUCONF
 +
 +/*
 + * HAL driver system settings.
 + */
 +#define STM32_NO_INIT                       FALSE
 +#define STM32_HSI_ENABLED                   TRUE
 +#define STM32_LSI_ENABLED                   TRUE
 +#define STM32_HSE_ENABLED                   TRUE
 +#define STM32_LSE_ENABLED                   FALSE
 +#define STM32_CLOCK48_REQUIRED              TRUE
 +#define STM32_SW                            STM32_SW_PLL
 +#define STM32_PLLSRC                        STM32_PLLSRC_HSE
 +#define STM32_PLLM_VALUE                    8
 +#define STM32_PLLN_VALUE                    336
 +#define STM32_PLLP_VALUE                    2
 +#define STM32_PLLQ_VALUE                    7
 +#define STM32_HPRE                          STM32_HPRE_DIV1
 +#define STM32_PPRE1                         STM32_PPRE1_DIV4
 +#define STM32_PPRE2                         STM32_PPRE2_DIV2
 +#define STM32_RTCSEL                        STM32_RTCSEL_LSI
 +#define STM32_RTCPRE_VALUE                  8
 +#define STM32_MCO1SEL                       STM32_MCO1SEL_HSI
 +#define STM32_MCO1PRE                       STM32_MCO1PRE_DIV1
 +#define STM32_MCO2SEL                       STM32_MCO2SEL_SYSCLK
 +#define STM32_MCO2PRE                       STM32_MCO2PRE_DIV5
 +#define STM32_I2SSRC                        STM32_I2SSRC_CKIN
 +#define STM32_PLLI2SN_VALUE                 192
 +#define STM32_PLLI2SR_VALUE                 5
 +#define STM32_VOS                           STM32_VOS_HIGH
 +#define STM32_PVD_ENABLE                    FALSE
 +#define STM32_PLS                           STM32_PLS_LEV0
 +
 +/*
 + * ADC driver system settings.
 + */
 +#define STM32_ADC_ADCPRE                    ADC_CCR_ADCPRE_DIV4
 +#define STM32_ADC_USE_ADC1                  FALSE
 +#define STM32_ADC_USE_ADC2                  FALSE
 +#define STM32_ADC_USE_ADC3                  FALSE
 +#define STM32_ADC_ADC1_DMA_STREAM           STM32_DMA_STREAM_ID(2, 4)
 +#define STM32_ADC_ADC2_DMA_STREAM           STM32_DMA_STREAM_ID(2, 2)
 +#define STM32_ADC_ADC3_DMA_STREAM           STM32_DMA_STREAM_ID(2, 1)
 +#define STM32_ADC_ADC1_DMA_PRIORITY         2
 +#define STM32_ADC_ADC2_DMA_PRIORITY         2
 +#define STM32_ADC_ADC3_DMA_PRIORITY         2
 +#define STM32_ADC_IRQ_PRIORITY              6
 +#define STM32_ADC_ADC1_DMA_IRQ_PRIORITY     6
 +#define STM32_ADC_ADC2_DMA_IRQ_PRIORITY     6
 +#define STM32_ADC_ADC3_DMA_IRQ_PRIORITY     6
 +
 +/*
 + * CAN driver system settings.
 + */
 +#define STM32_CAN_USE_CAN1                  FALSE
 +#define STM32_CAN_USE_CAN2                  FALSE
 +#define STM32_CAN_CAN1_IRQ_PRIORITY         11
 +#define STM32_CAN_CAN2_IRQ_PRIORITY         11
 +
 +/*
 + * EXT driver system settings.
 + */
 +#define STM32_EXT_EXTI0_IRQ_PRIORITY        6
 +#define STM32_EXT_EXTI1_IRQ_PRIORITY        6
 +#define STM32_EXT_EXTI2_IRQ_PRIORITY        6
 +#define STM32_EXT_EXTI3_IRQ_PRIORITY        6
 +#define STM32_EXT_EXTI4_IRQ_PRIORITY        6
 +#define STM32_EXT_EXTI5_9_IRQ_PRIORITY      6
 +#define STM32_EXT_EXTI10_15_IRQ_PRIORITY    6
 +#define STM32_EXT_EXTI16_IRQ_PRIORITY       6
 +#define STM32_EXT_EXTI17_IRQ_PRIORITY       15
 +#define STM32_EXT_EXTI18_IRQ_PRIORITY       6
 +#define STM32_EXT_EXTI19_IRQ_PRIORITY       6
 +#define STM32_EXT_EXTI20_IRQ_PRIORITY       6
 +#define STM32_EXT_EXTI21_IRQ_PRIORITY       15
 +#define STM32_EXT_EXTI22_IRQ_PRIORITY       15
 +
 +/*
 + * GPT driver system settings.
 + */
 +#define STM32_GPT_USE_TIM1                  FALSE
 +#define STM32_GPT_USE_TIM2                  FALSE
 +#define STM32_GPT_USE_TIM3                  FALSE
 +#define STM32_GPT_USE_TIM4                  FALSE
 +#define STM32_GPT_USE_TIM5                  FALSE
 +#define STM32_GPT_USE_TIM6                  FALSE
 +#define STM32_GPT_USE_TIM7                  FALSE
 +#define STM32_GPT_USE_TIM8                  FALSE
 +#define STM32_GPT_USE_TIM9                  FALSE
 +#define STM32_GPT_USE_TIM11                 FALSE
 +#define STM32_GPT_USE_TIM12                 FALSE
 +#define STM32_GPT_USE_TIM14                 FALSE
 +#define STM32_GPT_TIM1_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM2_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM3_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM4_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM5_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM6_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM7_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM8_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM9_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM11_IRQ_PRIORITY        7
 +#define STM32_GPT_TIM12_IRQ_PRIORITY        7
 +#define STM32_GPT_TIM14_IRQ_PRIORITY        7
 +
 +/*
 + * I2C driver system settings.
 + */
 +#define STM32_I2C_USE_I2C1                  FALSE
 +#define STM32_I2C_USE_I2C2                  FALSE
 +#define STM32_I2C_USE_I2C3                  FALSE
 +#define STM32_I2C_I2C1_RX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 0)
 +#define STM32_I2C_I2C1_TX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 6)
 +#define STM32_I2C_I2C2_RX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 2)
 +#define STM32_I2C_I2C2_TX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 7)
 +#define STM32_I2C_I2C3_RX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 2)
 +#define STM32_I2C_I2C3_TX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 4)
 +#define STM32_I2C_I2C1_IRQ_PRIORITY         5
 +#define STM32_I2C_I2C2_IRQ_PRIORITY         5
 +#define STM32_I2C_I2C3_IRQ_PRIORITY         5
 +#define STM32_I2C_I2C1_DMA_PRIORITY         3
 +#define STM32_I2C_I2C2_DMA_PRIORITY         3
 +#define STM32_I2C_I2C3_DMA_PRIORITY         3
 +#define STM32_I2C_I2C1_DMA_ERROR_HOOK()     chSysHalt()
 +#define STM32_I2C_I2C2_DMA_ERROR_HOOK()     chSysHalt()
 +#define STM32_I2C_I2C3_DMA_ERROR_HOOK()     chSysHalt()
 +
 +/*
 + * ICU driver system settings.
 + */
 +#define STM32_ICU_USE_TIM1                  FALSE
 +#define STM32_ICU_USE_TIM2                  FALSE
 +#define STM32_ICU_USE_TIM3                  TRUE
 +#define STM32_ICU_USE_TIM4                  FALSE
 +#define STM32_ICU_USE_TIM5                  FALSE
 +#define STM32_ICU_USE_TIM8                  FALSE
 +#define STM32_ICU_USE_TIM9                  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
 +#define STM32_ICU_TIM8_IRQ_PRIORITY         7
 +#define STM32_ICU_TIM9_IRQ_PRIORITY         7
 +
 +/*
 + * MAC driver system settings.
 + */
 +#define STM32_MAC_TRANSMIT_BUFFERS          2
 +#define STM32_MAC_RECEIVE_BUFFERS           4
 +#define STM32_MAC_BUFFERS_SIZE              1522
 +#define STM32_MAC_PHY_TIMEOUT               100
 +#define STM32_MAC_ETH1_CHANGE_PHY_STATE     TRUE
 +#define STM32_MAC_ETH1_IRQ_PRIORITY         13
 +#define STM32_MAC_IP_CHECKSUM_OFFLOAD       0
 +
 +/*
 + * PWM driver system settings.
 + */
 +#define STM32_PWM_USE_ADVANCED              FALSE
 +#define STM32_PWM_USE_TIM1                  FALSE
 +#define STM32_PWM_USE_TIM2                  TRUE
 +#define STM32_PWM_USE_TIM3                  FALSE
 +#define STM32_PWM_USE_TIM4                  FALSE
 +#define STM32_PWM_USE_TIM5                  FALSE
 +#define STM32_PWM_USE_TIM8                  FALSE
 +#define STM32_PWM_USE_TIM9                  FALSE
 +#define STM32_PWM_TIM1_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM2_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM3_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM4_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM5_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM8_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM9_IRQ_PRIORITY         7
 +
 +/*
 + * SERIAL driver system settings.
 + */
 +#define STM32_SERIAL_USE_USART1             FALSE
 +#define STM32_SERIAL_USE_USART2             FALSE
 +#define STM32_SERIAL_USE_USART3             FALSE
 +#define STM32_SERIAL_USE_UART4              FALSE
 +#define STM32_SERIAL_USE_UART5              FALSE
 +#define STM32_SERIAL_USE_USART6             FALSE
 +#define STM32_SERIAL_USART1_PRIORITY        12
 +#define STM32_SERIAL_USART2_PRIORITY        12
 +#define STM32_SERIAL_USART3_PRIORITY        12
 +#define STM32_SERIAL_UART4_PRIORITY         12
 +#define STM32_SERIAL_UART5_PRIORITY         12
 +#define STM32_SERIAL_USART6_PRIORITY        12
 +
 +/*
 + * SPI driver system settings.
 + */
 +#define STM32_SPI_USE_SPI1                  FALSE
 +#define STM32_SPI_USE_SPI2                  FALSE
 +#define STM32_SPI_USE_SPI3                  FALSE
 +#define STM32_SPI_SPI1_RX_DMA_STREAM        STM32_DMA_STREAM_ID(2, 0)
 +#define STM32_SPI_SPI1_TX_DMA_STREAM        STM32_DMA_STREAM_ID(2, 3)
 +#define STM32_SPI_SPI2_RX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 3)
 +#define STM32_SPI_SPI2_TX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 4)
 +#define STM32_SPI_SPI3_RX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 0)
 +#define STM32_SPI_SPI3_TX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 7)
 +#define STM32_SPI_SPI1_DMA_PRIORITY         1
 +#define STM32_SPI_SPI2_DMA_PRIORITY         1
 +#define STM32_SPI_SPI3_DMA_PRIORITY         1
 +#define STM32_SPI_SPI1_IRQ_PRIORITY         10
 +#define STM32_SPI_SPI2_IRQ_PRIORITY         10
 +#define STM32_SPI_SPI3_IRQ_PRIORITY         10
 +#define STM32_SPI_DMA_ERROR_HOOK(spip)      chSysHalt()
 +
 +/*
 + * UART driver system settings.
 + */
 +#define STM32_UART_USE_USART1               FALSE
 +#define STM32_UART_USE_USART2               FALSE
 +#define STM32_UART_USE_USART3               FALSE
 +#define STM32_UART_USE_USART6               FALSE
 +#define STM32_UART_USART1_RX_DMA_STREAM     STM32_DMA_STREAM_ID(2, 5)
 +#define STM32_UART_USART1_TX_DMA_STREAM     STM32_DMA_STREAM_ID(2, 7)
 +#define STM32_UART_USART2_RX_DMA_STREAM     STM32_DMA_STREAM_ID(1, 5)
 +#define STM32_UART_USART2_TX_DMA_STREAM     STM32_DMA_STREAM_ID(1, 6)
 +#define STM32_UART_USART3_RX_DMA_STREAM     STM32_DMA_STREAM_ID(1, 1)
 +#define STM32_UART_USART3_TX_DMA_STREAM     STM32_DMA_STREAM_ID(1, 3)
 +#define STM32_UART_USART6_RX_DMA_STREAM     STM32_DMA_STREAM_ID(2, 2)
 +#define STM32_UART_USART6_TX_DMA_STREAM     STM32_DMA_STREAM_ID(2, 7)
 +#define STM32_UART_USART1_IRQ_PRIORITY      12
 +#define STM32_UART_USART2_IRQ_PRIORITY      12
 +#define STM32_UART_USART3_IRQ_PRIORITY      12
 +#define STM32_UART_USART6_IRQ_PRIORITY      12
 +#define STM32_UART_USART1_DMA_PRIORITY      0
 +#define STM32_UART_USART2_DMA_PRIORITY      0
 +#define STM32_UART_USART3_DMA_PRIORITY      0
 +#define STM32_UART_USART6_DMA_PRIORITY      0
 +#define STM32_UART_DMA_ERROR_HOOK(uartp)    chSysHalt()
 +
 +/*
 + * USB driver system settings.
 + */
 +#define STM32_USB_USE_OTG1                  FALSE
 +#define STM32_USB_USE_OTG2                  FALSE
 +#define STM32_USB_OTG1_IRQ_PRIORITY         14
 +#define STM32_USB_OTG2_IRQ_PRIORITY         14
 +#define STM32_USB_OTG1_RX_FIFO_SIZE         512
 +#define STM32_USB_OTG2_RX_FIFO_SIZE         1024
 +#define STM32_USB_OTG_THREAD_PRIO           LOWPRIO
 +#define STM32_USB_OTG_THREAD_STACK_SIZE     128
 +#define STM32_USB_OTGFIFO_FILL_BASEPRI      0
 diff --git a/testhal/STM32F4xx/PWM-ICU/readme.txt b/testhal/STM32F4xx/PWM-ICU/readme.txt new file mode 100644 index 000000000..bd908948f --- /dev/null +++ b/testhal/STM32F4xx/PWM-ICU/readme.txt @@ -0,0 +1,30 @@ +*****************************************************************************
 +** ChibiOS/RT HAL - PWM-ICU drivers demo for STM32F4xx.                    **
 +*****************************************************************************
 +
 +** TARGET **
 +
 +The demo runs on an STMicroelectronics STM32F4-Discovery board.
 +
 +** The Demo **
 +
 +The application demonstrates the use of the STM32F4xx PWM-ICU drivers.
 +
 +** Board Setup **
 +
 +- Connect PA15 and PC6 together.
 +
 +** Build Procedure **
 +
 +The demo has been tested using the free Codesourcery GCC-based toolchain
 +and YAGARTO.
 +Just modify the TRGT line in the makefile in order to use different GCC ports.
 +
 +** Notes **
 +
 +Some files used by the demo are not part of ChibiOS/RT but are copyright of
 +ST Microelectronics and are licensed under a different license.
 +Also note that not all the files present in the ST library are distributed
 +with ChibiOS/RT, you can find the whole library on the ST web site:
 +
 +                             http://www.st.com
 diff --git a/testhal/STM32F4xx/RTC/.cproject b/testhal/STM32F4xx/RTC/.cproject new file mode 100644 index 000000000..685ffe5f1 --- /dev/null +++ b/testhal/STM32F4xx/RTC/.cproject @@ -0,0 +1,51 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?>
 +<?fileVersion 4.0.0?>
 +
 +<cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
 +	<storageModule moduleId="org.eclipse.cdt.core.settings">
 +		<cconfiguration id="0.2012364782">
 +			<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="0.2012364782" moduleId="org.eclipse.cdt.core.settings" name="Default">
 +				<externalSettings/>
 +				<extensions>
 +					<extension id="org.eclipse.cdt.core.VCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 +					<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 +					<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
 +					<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 +					<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 +					<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 +				</extensions>
 +			</storageModule>
 +			<storageModule moduleId="cdtBuildSystem" version="4.0.0">
 +				<configuration artifactName="${ProjName}" buildProperties="" description="" id="0.2012364782" name="Default" parent="org.eclipse.cdt.build.core.prefbase.cfg">
 +					<folderInfo id="0.2012364782." name="/" resourcePath="">
 +						<toolChain id="org.eclipse.cdt.build.core.prefbase.toolchain.292809332" name="No ToolChain" resourceTypeBasedDiscovery="false" superClass="org.eclipse.cdt.build.core.prefbase.toolchain">
 +							<targetPlatform id="org.eclipse.cdt.build.core.prefbase.toolchain.292809332.1534956999" name=""/>
 +							<builder id="org.eclipse.cdt.build.core.settings.default.builder.1955520745" keepEnvironmentInBuildfile="false" managedBuildOn="false" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="org.eclipse.cdt.build.core.settings.default.builder"/>
 +							<tool id="org.eclipse.cdt.build.core.settings.holder.libs.330116911" name="holder for library settings" superClass="org.eclipse.cdt.build.core.settings.holder.libs"/>
 +							<tool id="org.eclipse.cdt.build.core.settings.holder.489327919" name="Assembly" superClass="org.eclipse.cdt.build.core.settings.holder">
 +								<inputType id="org.eclipse.cdt.build.core.settings.holder.inType.169300270" languageId="org.eclipse.cdt.core.assembly" languageName="Assembly" sourceContentType="org.eclipse.cdt.core.asmSource" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
 +							</tool>
 +							<tool id="org.eclipse.cdt.build.core.settings.holder.361488660" name="GNU C++" superClass="org.eclipse.cdt.build.core.settings.holder">
 +								<inputType id="org.eclipse.cdt.build.core.settings.holder.inType.1825495447" languageId="org.eclipse.cdt.core.g++" languageName="GNU C++" sourceContentType="org.eclipse.cdt.core.cxxSource,org.eclipse.cdt.core.cxxHeader" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
 +							</tool>
 +							<tool id="org.eclipse.cdt.build.core.settings.holder.266743095" name="GNU C" superClass="org.eclipse.cdt.build.core.settings.holder">
 +								<inputType id="org.eclipse.cdt.build.core.settings.holder.inType.1187787856" languageId="org.eclipse.cdt.core.gcc" languageName="GNU C" sourceContentType="org.eclipse.cdt.core.cSource,org.eclipse.cdt.core.cHeader" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
 +							</tool>
 +						</toolChain>
 +					</folderInfo>
 +				</configuration>
 +			</storageModule>
 +			<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
 +		</cconfiguration>
 +	</storageModule>
 +	<storageModule moduleId="cdtBuildSystem" version="4.0.0">
 +		<project id="STM32F4xx-RTC.null.1057439081" name="STM32F4xx-RTC"/>
 +	</storageModule>
 +	<storageModule moduleId="scannerConfiguration">
 +		<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
 +		<scannerConfigBuildInfo instanceId="0.2012364782">
 +			<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile"/>
 +		</scannerConfigBuildInfo>
 +	</storageModule>
 +	<storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
 +</cproject>
 diff --git a/testhal/STM32F4xx/RTC/.project b/testhal/STM32F4xx/RTC/.project new file mode 100644 index 000000000..b281eb7d2 --- /dev/null +++ b/testhal/STM32F4xx/RTC/.project @@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="UTF-8"?>
 +<projectDescription>
 +	<name>STM32F4xx-RTC</name>
 +	<comment></comment>
 +	<projects>
 +	</projects>
 +	<buildSpec>
 +		<buildCommand>
 +			<name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
 +			<triggers>clean,full,incremental,</triggers>
 +			<arguments>
 +			</arguments>
 +		</buildCommand>
 +		<buildCommand>
 +			<name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
 +			<triggers>full,incremental,</triggers>
 +			<arguments>
 +			</arguments>
 +		</buildCommand>
 +	</buildSpec>
 +	<natures>
 +		<nature>org.eclipse.cdt.core.cnature</nature>
 +		<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
 +		<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
 +	</natures>
 +	<linkedResources>
 +		<link>
 +			<name>board</name>
 +			<type>2</type>
 +			<locationURI>CHIBIOS/boards/ST_STM32F4_DISCOVERY</locationURI>
 +		</link>
 +		<link>
 +			<name>os</name>
 +			<type>2</type>
 +			<locationURI>CHIBIOS/os</locationURI>
 +		</link>
 +	</linkedResources>
 +</projectDescription>
 diff --git a/testhal/STM32F4xx/RTC/Makefile b/testhal/STM32F4xx/RTC/Makefile new file mode 100644 index 000000000..e383fef85 --- /dev/null +++ b/testhal/STM32F4xx/RTC/Makefile @@ -0,0 +1,226 @@ +##############################################################################
 +# Build global options
 +# NOTE: Can be overridden externally.
 +#
 +
 +# Compiler options here.
 +ifeq ($(USE_OPT),)
 +  USE_OPT = -O2 -ggdb -fomit-frame-pointer -falign-functions=16
 +endif
 +
 +# C specific options here (added to USE_OPT).
 +ifeq ($(USE_COPT),)
 +  USE_COPT = 
 +endif
 +
 +# C++ specific options here (added to USE_OPT).
 +ifeq ($(USE_CPPOPT),)
 +  USE_CPPOPT = -fno-rtti
 +endif
 +
 +# Enable this if you want the linker to remove unused code and data
 +ifeq ($(USE_LINK_GC),)
 +  USE_LINK_GC = yes
 +endif
 +
 +# If enabled, this option allows to compile the application in THUMB mode.
 +ifeq ($(USE_THUMB),)
 +  USE_THUMB = yes
 +endif
 +
 +# Enable this if you want to see the full log while compiling.
 +ifeq ($(USE_VERBOSE_COMPILE),)
 +  USE_VERBOSE_COMPILE = no
 +endif
 +
 +#
 +# Build global options
 +##############################################################################
 +
 +##############################################################################
 +# Architecture or project specific options
 +#
 +
 +# Enables the use of FPU on Cortex-M4.
 +# Enable this if you really want to use the STM FWLib.
 +ifeq ($(USE_FPU),)
 +  USE_FPU = no
 +endif
 +
 +# Enable this if you really want to use the STM FWLib.
 +ifeq ($(USE_FWLIB),)
 +  USE_FWLIB = no
 +endif
 +
 +#
 +# Architecture or project specific options
 +##############################################################################
 +
 +##############################################################################
 +# Project, sources and paths
 +#
 +
 +# Define project name here
 +PROJECT = ch
 +
 +# Imported source files and paths
 +CHIBIOS = ../../..
 +include $(CHIBIOS)/boards/NONSTANDARD_STM32F4_BARTHESS1/board.mk
 +include $(CHIBIOS)/os/hal/platforms/STM32F4xx/platform.mk
 +include $(CHIBIOS)/os/hal/hal.mk
 +include $(CHIBIOS)/os/ports/GCC/ARMCMx/STM32F4xx/port.mk
 +include $(CHIBIOS)/os/kernel/kernel.mk
 +include $(CHIBIOS)/test/test.mk
 +
 +# Define linker script file here
 +LDSCRIPT= $(PORTLD)/STM32F407xG.ld
 +#LDSCRIPT= $(PORTLD)/STM32F407xG_CCM.ld
 +
 +# C sources that can be compiled in ARM or THUMB mode depending on the global
 +# setting.
 +CSRC = $(PORTSRC) \
 +       $(KERNSRC) \
 +       $(TESTSRC) \
 +       $(HALSRC) \
 +       $(PLATFORMSRC) \
 +       $(BOARDSRC) \
 +       $(CHIBIOS)/os/various/evtimer.c \
 +       $(CHIBIOS)/os/various/syscalls.c \
 +       $(CHIBIOS)/os/various/shell.c \
 +       $(CHIBIOS)/os/various/chprintf.c \
 +       $(CHIBIOS)/os/various/chrtclib.c \
 +       main.c
 +
 +# C++ sources that can be compiled in ARM or THUMB mode depending on the global
 +# setting.
 +CPPSRC =
 +
 +# C sources to be compiled in ARM mode regardless of the global setting.
 +# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler
 +#       option that results in lower performance and larger code size.
 +ACSRC =
 +
 +# C++ sources to be compiled in ARM mode regardless of the global setting.
 +# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler
 +#       option that results in lower performance and larger code size.
 +ACPPSRC =
 +
 +# C sources to be compiled in THUMB mode regardless of the global setting.
 +# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler
 +#       option that results in lower performance and larger code size.
 +TCSRC =
 +
 +# C sources to be compiled in THUMB mode regardless of the global setting.
 +# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler
 +#       option that results in lower performance and larger code size.
 +TCPPSRC =
 +
 +# List ASM source files here
 +ASMSRC = $(PORTASM)
 +
 +INCDIR = $(PORTINC) $(KERNINC) $(TESTINC) \
 +         $(HALINC) $(PLATFORMINC) $(BOARDINC) \
 +         $(CHIBIOS)/os/various
 +
 +#
 +# Project, sources and paths
 +##############################################################################
 +
 +##############################################################################
 +# Compiler settings
 +#
 +
 +MCU  = cortex-m4
 +
 +#TRGT = arm-elf-
 +TRGT = arm-none-eabi-
 +CC   = $(TRGT)gcc
 +CPPC = $(TRGT)g++
 +# Enable loading with g++ only if you need C++ runtime support.
 +# NOTE: You can use C++ even without C++ support if you are careful. C++
 +#       runtime support makes code size explode.
 +LD   = $(TRGT)gcc
 +#LD   = $(TRGT)g++
 +CP   = $(TRGT)objcopy
 +AS   = $(TRGT)gcc -x assembler-with-cpp
 +OD   = $(TRGT)objdump
 +HEX  = $(CP) -O ihex
 +BIN  = $(CP) -O binary
 +
 +# ARM-specific options here
 +AOPT =
 +
 +# THUMB-specific options here
 +TOPT = -mthumb -DTHUMB
 +
 +# Define C warning options here
 +CWARN = -Wall -Wextra -Wstrict-prototypes
 +
 +# Define C++ warning options here
 +CPPWARN = -Wall -Wextra
 +
 +#
 +# Compiler settings
 +##############################################################################
 +
 +##############################################################################
 +# Start of default section
 +#
 +
 +# List all default C defines here, like -D_DEBUG=1
 +DDEFS =
 +
 +# List all default ASM defines here, like -D_DEBUG=1
 +DADEFS =
 +
 +# List all default directories to look for include files here
 +DINCDIR =
 +
 +# List the default directory to look for the libraries here
 +DLIBDIR =
 +
 +# List all default libraries here
 +DLIBS =
 +
 +#
 +# End of default section
 +##############################################################################
 +
 +##############################################################################
 +# Start of user section
 +#
 +
 +# List all user C define here, like -D_DEBUG=1
 +UDEFS =
 +
 +# Define ASM defines here
 +UADEFS =
 +
 +# List all user directories here
 +UINCDIR =
 +
 +# List the user directory to look for the libraries here
 +ULIBDIR =
 +
 +# List all user libraries here
 +ULIBS =
 +
 +#
 +# End of user defines
 +##############################################################################
 +
 +ifeq ($(USE_FPU),yes)
 +  USE_OPT += -mfloat-abi=softfp -mfpu=fpv4-sp-d16 -fsingle-precision-constant
 +  DDEFS += -DCORTEX_USE_FPU=TRUE
 +else
 +  DDEFS += -DCORTEX_USE_FPU=FALSE
 +endif
 +
 +ifeq ($(USE_FWLIB),yes)
 +  include $(CHIBIOS)/ext/stm32lib/stm32lib.mk
 +  CSRC += $(STM32SRC)
 +  INCDIR += $(STM32INC)
 +  USE_OPT += -DUSE_STDPERIPH_DRIVER
 +endif
 +
 +include $(CHIBIOS)/os/ports/GCC/ARMCMx/rules.mk
 diff --git a/testhal/STM32F4xx/RTC/chconf.h b/testhal/STM32F4xx/RTC/chconf.h new file mode 100644 index 000000000..0a00640e2 --- /dev/null +++ b/testhal/STM32F4xx/RTC/chconf.h @@ -0,0 +1,508 @@ +/*
 +    ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio
 +
 +    Licensed under the Apache License, Version 2.0 (the "License");
 +    you may not use this file except in compliance with the License.
 +    You may obtain a copy of the License at
 +
 +        http://www.apache.org/licenses/LICENSE-2.0
 +
 +    Unless required by applicable law or agreed to in writing, software
 +    distributed under the License is distributed on an "AS IS" BASIS,
 +    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 +    See the License for the specific language governing permissions and
 +    limitations under the License.
 +*/
 +
 +/**
 + * @file    templates/chconf.h
 + * @brief   Configuration file template.
 + * @details A copy of this file must be placed in each project directory, it
 + *          contains the application specific kernel settings.
 + *
 + * @addtogroup config
 + * @details Kernel related settings and hooks.
 + * @{
 + */
 +
 +#ifndef _CHCONF_H_
 +#define _CHCONF_H_
 +
 +#define PORT_IDLE_THREAD_STACK_SIZE     32
 +#define CORTEX_USE_FPU                  FALSE
 +
 +/*===========================================================================*/
 +/* Kernel parameters.                                                        */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   System tick frequency.
 + * @details Frequency of the system timer that drives the system ticks. This
 + *          setting also defines the system tick time unit.
 + */
 +#if !defined(CH_FREQUENCY) || defined(__DOXYGEN__)
 +#define CH_FREQUENCY                    1000
 +#endif
 +
 +/**
 + * @brief   Round robin interval.
 + * @details This constant is the number of system ticks allowed for the
 + *          threads before preemption occurs. Setting this value to zero
 + *          disables the preemption for threads with equal priority and the
 + *          round robin becomes cooperative. Note that higher priority
 + *          threads can still preempt, the kernel is always preemptive.
 + *
 + * @note    Disabling the round robin preemption makes the kernel more compact
 + *          and generally faster.
 + */
 +#if !defined(CH_TIME_QUANTUM) || defined(__DOXYGEN__)
 +#define CH_TIME_QUANTUM                 0//20
 +#endif
 +
 +/**
 + * @brief   Managed RAM size.
 + * @details Size of the RAM area to be managed by the OS. If set to zero
 + *          then the whole available RAM is used. The core memory is made
 + *          available to the heap allocator and/or can be used directly through
 + *          the simplified core memory allocator.
 + *
 + * @note    In order to let the OS manage the whole RAM the linker script must
 + *          provide the @p __heap_base__ and @p __heap_end__ symbols.
 + * @note    Requires @p CH_USE_MEMCORE.
 + */
 +#if !defined(CH_MEMCORE_SIZE) || defined(__DOXYGEN__)
 +#define CH_MEMCORE_SIZE                 0
 +#endif
 +
 +/**
 + * @brief   Idle thread automatic spawn suppression.
 + * @details When this option is activated the function @p chSysInit()
 + *          does not spawn the idle thread automatically. The application has
 + *          then the responsibility to do one of the following:
 + *          - Spawn a custom idle thread at priority @p IDLEPRIO.
 + *          - Change the main() thread priority to @p IDLEPRIO then enter
 + *            an endless loop. In this scenario the @p main() thread acts as
 + *            the idle thread.
 + *          .
 + * @note    Unless an idle thread is spawned the @p main() thread must not
 + *          enter a sleep state.
 + */
 +#if !defined(CH_NO_IDLE_THREAD) || defined(__DOXYGEN__)
 +#define CH_NO_IDLE_THREAD               FALSE
 +#endif
 +
 +/*===========================================================================*/
 +/* Performance options.                                                      */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   OS optimization.
 + * @details If enabled then time efficient rather than space efficient code
 + *          is used when two possible implementations exist.
 + *
 + * @note    This is not related to the compiler optimization options.
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_OPTIMIZE_SPEED) || defined(__DOXYGEN__)
 +#define CH_OPTIMIZE_SPEED               FALSE
 +#endif
 +
 +/*===========================================================================*/
 +/* Subsystem options.                                                        */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Threads registry APIs.
 + * @details If enabled then the registry APIs are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_REGISTRY) || defined(__DOXYGEN__)
 +#define CH_USE_REGISTRY                 TRUE
 +#endif
 +
 +/**
 + * @brief   Threads synchronization APIs.
 + * @details If enabled then the @p chThdWait() function is included in
 + *          the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_WAITEXIT) || defined(__DOXYGEN__)
 +#define CH_USE_WAITEXIT                 TRUE
 +#endif
 +
 +/**
 + * @brief   Semaphores APIs.
 + * @details If enabled then the Semaphores APIs are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_SEMAPHORES) || defined(__DOXYGEN__)
 +#define CH_USE_SEMAPHORES               TRUE
 +#endif
 +
 +/**
 + * @brief   Semaphores queuing mode.
 + * @details If enabled then the threads are enqueued on semaphores by
 + *          priority rather than in FIFO order.
 + *
 + * @note    The default is @p FALSE. Enable this if you have special requirements.
 + * @note    Requires @p CH_USE_SEMAPHORES.
 + */
 +#if !defined(CH_USE_SEMAPHORES_PRIORITY) || defined(__DOXYGEN__)
 +#define CH_USE_SEMAPHORES_PRIORITY      FALSE
 +#endif
 +
 +/**
 + * @brief   Atomic semaphore API.
 + * @details If enabled then the semaphores the @p chSemSignalWait() API
 + *          is included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_SEMAPHORES.
 + */
 +#if !defined(CH_USE_SEMSW) || defined(__DOXYGEN__)
 +#define CH_USE_SEMSW                    TRUE
 +#endif
 +
 +/**
 + * @brief   Mutexes APIs.
 + * @details If enabled then the mutexes APIs are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_MUTEXES) || defined(__DOXYGEN__)
 +#define CH_USE_MUTEXES                  TRUE
 +#endif
 +
 +/**
 + * @brief   Conditional Variables APIs.
 + * @details If enabled then the conditional variables APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_MUTEXES.
 + */
 +#if !defined(CH_USE_CONDVARS) || defined(__DOXYGEN__)
 +#define CH_USE_CONDVARS                 FALSE
 +#endif
 +
 +/**
 + * @brief   Conditional Variables APIs with timeout.
 + * @details If enabled then the conditional variables APIs with timeout
 + *          specification are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_CONDVARS.
 + */
 +#if !defined(CH_USE_CONDVARS_TIMEOUT) || defined(__DOXYGEN__)
 +#define CH_USE_CONDVARS_TIMEOUT         TRUE
 +#endif
 +
 +/**
 + * @brief   Events Flags APIs.
 + * @details If enabled then the event flags APIs are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_EVENTS) || defined(__DOXYGEN__)
 +#define CH_USE_EVENTS                   TRUE
 +#endif
 +
 +/**
 + * @brief   Events Flags APIs with timeout.
 + * @details If enabled then the events APIs with timeout specification
 + *          are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_EVENTS.
 + */
 +#if !defined(CH_USE_EVENTS_TIMEOUT) || defined(__DOXYGEN__)
 +#define CH_USE_EVENTS_TIMEOUT           FALSE
 +#endif
 +
 +/**
 + * @brief   Synchronous Messages APIs.
 + * @details If enabled then the synchronous messages APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_MESSAGES) || defined(__DOXYGEN__)
 +#define CH_USE_MESSAGES                 TRUE
 +#endif
 +
 +/**
 + * @brief   Synchronous Messages queuing mode.
 + * @details If enabled then messages are served by priority rather than in
 + *          FIFO order.
 + *
 + * @note    The default is @p FALSE. Enable this if you have special requirements.
 + * @note    Requires @p CH_USE_MESSAGES.
 + */
 +#if !defined(CH_USE_MESSAGES_PRIORITY) || defined(__DOXYGEN__)
 +#define CH_USE_MESSAGES_PRIORITY        FALSE
 +#endif
 +
 +/**
 + * @brief   Mailboxes APIs.
 + * @details If enabled then the asynchronous messages (mailboxes) APIs are
 + *          included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_SEMAPHORES.
 + */
 +#if !defined(CH_USE_MAILBOXES) || defined(__DOXYGEN__)
 +#define CH_USE_MAILBOXES                TRUE
 +#endif
 +
 +/**
 + * @brief   I/O Queues APIs.
 + * @details If enabled then the I/O queues APIs are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_QUEUES) || defined(__DOXYGEN__)
 +#define CH_USE_QUEUES                   TRUE
 +#endif
 +
 +/**
 + * @brief   Core Memory Manager APIs.
 + * @details If enabled then the core memory manager APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_MEMCORE) || defined(__DOXYGEN__)
 +#define CH_USE_MEMCORE                  TRUE
 +#endif
 +
 +/**
 + * @brief   Heap Allocator APIs.
 + * @details If enabled then the memory heap allocator APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_MEMCORE and either @p CH_USE_MUTEXES or
 + *          @p CH_USE_SEMAPHORES.
 + * @note    Mutexes are recommended.
 + */
 +#if !defined(CH_USE_HEAP) || defined(__DOXYGEN__)
 +#define CH_USE_HEAP                     FALSE
 +#endif
 +
 +/**
 + * @brief   C-runtime allocator.
 + * @details If enabled the the heap allocator APIs just wrap the C-runtime
 + *          @p malloc() and @p free() functions.
 + *
 + * @note    The default is @p FALSE.
 + * @note    Requires @p CH_USE_HEAP.
 + * @note    The C-runtime may or may not require @p CH_USE_MEMCORE, see the
 + *          appropriate documentation.
 + */
 +#if !defined(CH_USE_MALLOC_HEAP) || defined(__DOXYGEN__)
 +#define CH_USE_MALLOC_HEAP              FALSE
 +#endif
 +
 +/**
 + * @brief   Memory Pools Allocator APIs.
 + * @details If enabled then the memory pools allocator APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_MEMPOOLS) || defined(__DOXYGEN__)
 +#define CH_USE_MEMPOOLS                 TRUE
 +#endif
 +
 +/**
 + * @brief   Dynamic Threads APIs.
 + * @details If enabled then the dynamic threads creation APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_WAITEXIT.
 + * @note    Requires @p CH_USE_HEAP and/or @p CH_USE_MEMPOOLS.
 + */
 +#if !defined(CH_USE_DYNAMIC) || defined(__DOXYGEN__)
 +#define CH_USE_DYNAMIC                  FALSE
 +#endif
 +
 +/*===========================================================================*/
 +/* Debug options.                                                            */
 +/*===========================================================================*/
 +/**
 + * @brief   Debug option, system state check.
 + * @details If enabled the correct call protocol for system APIs is checked
 + *          at runtime.
 + *
 + * @note    The default is @p FALSE.
 + */
 +#if !defined(CH_DBG_SYSTEM_STATE_CHECK) || defined(__DOXYGEN__)
 +#define CH_DBG_SYSTEM_STATE_CHECK       TRUE
 +#endif
 +
 +/**
 + * @brief   Debug option, parameters checks.
 + * @details If enabled then the checks on the API functions input
 + *          parameters are activated.
 + *
 + * @note    The default is @p FALSE.
 + */
 +#if !defined(CH_DBG_ENABLE_CHECKS) || defined(__DOXYGEN__)
 +#define CH_DBG_ENABLE_CHECKS            TRUE
 +#endif
 +
 +/**
 + * @brief   Debug option, consistency checks.
 + * @details If enabled then all the assertions in the kernel code are
 + *          activated. This includes consistency checks inside the kernel,
 + *          runtime anomalies and port-defined checks.
 + *
 + * @note    The default is @p FALSE.
 + */
 +#if !defined(CH_DBG_ENABLE_ASSERTS) || defined(__DOXYGEN__)
 +#define CH_DBG_ENABLE_ASSERTS           TRUE
 +#endif
 +
 +/**
 + * @brief   Debug option, trace buffer.
 + * @details If enabled then the context switch circular trace buffer is
 + *          activated.
 + *
 + * @note    The default is @p FALSE.
 + */
 +#if !defined(CH_DBG_ENABLE_TRACE) || defined(__DOXYGEN__)
 +#define CH_DBG_ENABLE_TRACE             TRUE
 +#endif
 +
 +/**
 + * @brief   Debug option, stack checks.
 + * @details If enabled then a runtime stack check is performed.
 + *
 + * @note    The default is @p FALSE.
 + * @note    The stack check is performed in a architecture/port dependent way.
 + *          It may not be implemented or some ports.
 + * @note    The default failure mode is to halt the system with the global
 + *          @p panic_msg variable set to @p NULL.
 + */
 +#if !defined(CH_DBG_ENABLE_STACK_CHECK) || defined(__DOXYGEN__)
 +#define CH_DBG_ENABLE_STACK_CHECK       TRUE
 +#endif
 +
 +/**
 + * @brief   Debug option, stacks initialization.
 + * @details If enabled then the threads working area is filled with a byte
 + *          value when a thread is created. This can be useful for the
 + *          runtime measurement of the used stack.
 + *
 + * @note    The default is @p FALSE.
 + */
 +#if !defined(CH_DBG_FILL_THREADS) || defined(__DOXYGEN__)
 +#define CH_DBG_FILL_THREADS             TRUE
 +#endif
 +
 +/**
 + * @brief   Debug option, threads profiling.
 + * @details If enabled then a field is added to the @p Thread structure that
 + *          counts the system ticks occurred while executing the thread.
 + *
 + * @note    The default is @p TRUE.
 + * @note    This debug option is defaulted to TRUE because it is required by
 + *          some test cases into the test suite.
 + */
 +#if !defined(CH_DBG_THREADS_PROFILING) || defined(__DOXYGEN__)
 +#define CH_DBG_THREADS_PROFILING        TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* Kernel hooks.                                                             */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Threads descriptor structure extension.
 + * @details User fields added to the end of the @p Thread structure.
 + */
 +#if !defined(THREAD_EXT_FIELDS) || defined(__DOXYGEN__)
 +#define THREAD_EXT_FIELDS                                                   \
 +  /* Add threads custom fields here.*/
 +#endif
 +
 +/**
 + * @brief   Threads initialization hook.
 + * @details User initialization code added to the @p chThdInit() API.
 + *
 + * @note    It is invoked from within @p chThdInit() and implicitly from all
 + *          the threads creation APIs.
 + */
 +#if !defined(THREAD_EXT_INIT_HOOK) || defined(__DOXYGEN__)
 +#define THREAD_EXT_INIT_HOOK(tp) {                                          \
 +  /* Add threads initialization code here.*/                                \
 +}
 +#endif
 +
 +/**
 + * @brief   Threads finalization hook.
 + * @details User finalization code added to the @p chThdExit() API.
 + *
 + * @note    It is inserted into lock zone.
 + * @note    It is also invoked when the threads simply return in order to
 + *          terminate.
 + */
 +#if !defined(THREAD_EXT_EXIT_HOOK) || defined(__DOXYGEN__)
 +#define THREAD_EXT_EXIT_HOOK(tp) {                                          \
 +  /* Add threads finalization code here.*/                                  \
 +}
 +#endif
 +
 +/**
 + * @brief   Context switch hook.
 + * @details This hook is invoked just before switching between threads.
 + */
 +#if !defined(THREAD_CONTEXT_SWITCH_HOOK) || defined(__DOXYGEN__)
 +#define THREAD_CONTEXT_SWITCH_HOOK(ntp, otp) {                              \
 +  /* System halt code here.*/                                               \
 +}
 +#endif
 +
 +/**
 + * @brief   Idle Loop hook.
 + * @details This hook is continuously invoked by the idle thread loop.
 + */
 +#if !defined(IDLE_LOOP_HOOK) || defined(__DOXYGEN__)
 +#define IDLE_LOOP_HOOK() {                                                  \
 +  /* Idle loop code here.*/                                                 \
 +}
 +#endif
 +
 +/**
 + * @brief   System tick event hook.
 + * @details This hook is invoked in the system tick handler immediately
 + *          after processing the virtual timers queue.
 + */
 +#if !defined(SYSTEM_TICK_EVENT_HOOK) || defined(__DOXYGEN__)
 +#define SYSTEM_TICK_EVENT_HOOK() {                                          \
 +  /* System tick event code here.*/                                         \
 +}
 +#endif
 +
 +/**
 + * @brief   System halt hook.
 + * @details This hook is invoked in case to a system halting error before
 + *          the system is halted.
 + */
 +#if !defined(SYSTEM_HALT_HOOK) || defined(__DOXYGEN__)
 +#define SYSTEM_HALT_HOOK() {                                                \
 +  /* System halt code here.*/                                               \
 +}
 +#endif
 +
 +/*===========================================================================*/
 +/* Port-specific settings (override port settings defaulted in chcore.h).    */
 +/*===========================================================================*/
 +
 +#endif  /* _CHCONF_H_ */
 +
 +/** @} */
 diff --git a/testhal/STM32F4xx/RTC/halconf.h b/testhal/STM32F4xx/RTC/halconf.h new file mode 100644 index 000000000..f0040635d --- /dev/null +++ b/testhal/STM32F4xx/RTC/halconf.h @@ -0,0 +1,312 @@ +/*
 +    ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio
 +
 +    Licensed under the Apache License, Version 2.0 (the "License");
 +    you may not use this file except in compliance with the License.
 +    You may obtain a copy of the License at
 +
 +        http://www.apache.org/licenses/LICENSE-2.0
 +
 +    Unless required by applicable law or agreed to in writing, software
 +    distributed under the License is distributed on an "AS IS" BASIS,
 +    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 +    See the License for the specific language governing permissions and
 +    limitations under the License.
 +*/
 +
 +/**
 + * @file    templates/halconf.h
 + * @brief   HAL configuration header.
 + * @details HAL configuration file, this file allows to enable or disable the
 + *          various device drivers from your application. You may also use
 + *          this file in order to override the device drivers default settings.
 + *
 + * @addtogroup HAL_CONF
 + * @{
 + */
 +
 +#ifndef _HALCONF_H_
 +#define _HALCONF_H_
 +
 +#include "mcuconf.h"
 +
 +/**
 + * @brief   Enables the TM subsystem.
 + */
 +#if !defined(HAL_USE_TM) || defined(__DOXYGEN__)
 +#define HAL_USE_TM                  TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the PAL subsystem.
 + */
 +#if !defined(HAL_USE_PAL) || defined(__DOXYGEN__)
 +#define HAL_USE_PAL                 TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the ADC subsystem.
 + */
 +#if !defined(HAL_USE_ADC) || defined(__DOXYGEN__)
 +#define HAL_USE_ADC                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the CAN subsystem.
 + */
 +#if !defined(HAL_USE_CAN) || defined(__DOXYGEN__)
 +#define HAL_USE_CAN                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the EXT subsystem.
 + */
 +#if !defined(HAL_USE_EXT) || defined(__DOXYGEN__)
 +#define HAL_USE_EXT                 TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the GPT subsystem.
 + */
 +#if !defined(HAL_USE_GPT) || defined(__DOXYGEN__)
 +#define HAL_USE_GPT                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the I2C subsystem.
 + */
 +#if !defined(HAL_USE_I2C) || defined(__DOXYGEN__)
 +#define HAL_USE_I2C                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the ICU subsystem.
 + */
 +#if !defined(HAL_USE_ICU) || defined(__DOXYGEN__)
 +#define HAL_USE_ICU                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the MAC subsystem.
 + */
 +#if !defined(HAL_USE_MAC) || defined(__DOXYGEN__)
 +#define HAL_USE_MAC                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the MMC_SPI subsystem.
 + */
 +#if !defined(HAL_USE_MMC_SPI) || defined(__DOXYGEN__)
 +#define HAL_USE_MMC_SPI             FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the PWM subsystem.
 + */
 +#if !defined(HAL_USE_PWM) || defined(__DOXYGEN__)
 +#define HAL_USE_PWM                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the RTC subsystem.
 + */
 +#if !defined(HAL_USE_RTC) || defined(__DOXYGEN__)
 +#define HAL_USE_RTC                 TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the SDC subsystem.
 + */
 +#if !defined(HAL_USE_SDC) || defined(__DOXYGEN__)
 +#define HAL_USE_SDC                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the SERIAL subsystem.
 + */
 +#if !defined(HAL_USE_SERIAL) || defined(__DOXYGEN__)
 +#define HAL_USE_SERIAL              TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the SERIAL over USB subsystem.
 + */
 +#if !defined(HAL_USE_SERIAL_USB) || defined(__DOXYGEN__)
 +#define HAL_USE_SERIAL_USB          FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the SPI subsystem.
 + */
 +#if !defined(HAL_USE_SPI) || defined(__DOXYGEN__)
 +#define HAL_USE_SPI                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the UART subsystem.
 + */
 +#if !defined(HAL_USE_UART) || defined(__DOXYGEN__)
 +#define HAL_USE_UART                FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the USB subsystem.
 + */
 +#if !defined(HAL_USE_USB) || defined(__DOXYGEN__)
 +#define HAL_USE_USB                 FALSE
 +#endif
 +
 +/*===========================================================================*/
 +/* ADC driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Enables synchronous APIs.
 + * @note    Disabling this option saves both code and data space.
 + */
 +#if !defined(ADC_USE_WAIT) || defined(__DOXYGEN__)
 +#define ADC_USE_WAIT                TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the @p adcAcquireBus() and @p adcReleaseBus() APIs.
 + * @note    Disabling this option saves both code and data space.
 + */
 +#if !defined(ADC_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
 +#define ADC_USE_MUTUAL_EXCLUSION    TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* CAN driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Sleep mode related APIs inclusion switch.
 + */
 +#if !defined(CAN_USE_SLEEP_MODE) || defined(__DOXYGEN__)
 +#define CAN_USE_SLEEP_MODE          TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* I2C driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Enables the mutual exclusion APIs on the I2C bus.
 + */
 +#if !defined(I2C_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
 +#define I2C_USE_MUTUAL_EXCLUSION    TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* MAC driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Enables an event sources for incoming packets.
 + */
 +#if !defined(MAC_USE_ZERO_COPY) || defined(__DOXYGEN__)
 +#define MAC_USE_ZERO_COPY           FALSE
 +#endif
 +
 +/**
 + * @brief   Enables an event sources for incoming packets.
 + */
 +#if !defined(MAC_USE_EVENTS) || defined(__DOXYGEN__)
 +#define MAC_USE_EVENTS              TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* MMC_SPI driver related settings.                                          */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Delays insertions.
 + * @details If enabled this options inserts delays into the MMC waiting
 + *          routines releasing some extra CPU time for the threads with
 + *          lower priority, this may slow down the driver a bit however.
 + *          This option is recommended also if the SPI driver does not
 + *          use a DMA channel and heavily loads the CPU.
 + */
 +#if !defined(MMC_NICE_WAITING) || defined(__DOXYGEN__)
 +#define MMC_NICE_WAITING            TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* SDC driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Number of initialization attempts before rejecting the card.
 + * @note    Attempts are performed at 10mS intervals.
 + */
 +#if !defined(SDC_INIT_RETRY) || defined(__DOXYGEN__)
 +#define SDC_INIT_RETRY              100
 +#endif
 +
 +/**
 + * @brief   Include support for MMC cards.
 + * @note    MMC support is not yet implemented so this option must be kept
 + *          at @p FALSE.
 + */
 +#if !defined(SDC_MMC_SUPPORT) || defined(__DOXYGEN__)
 +#define SDC_MMC_SUPPORT             FALSE
 +#endif
 +
 +/**
 + * @brief   Delays insertions.
 + * @details If enabled this options inserts delays into the MMC waiting
 + *          routines releasing some extra CPU time for the threads with
 + *          lower priority, this may slow down the driver a bit however.
 + */
 +#if !defined(SDC_NICE_WAITING) || defined(__DOXYGEN__)
 +#define SDC_NICE_WAITING            TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* SERIAL driver related settings.                                           */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Default bit rate.
 + * @details Configuration parameter, this is the baud rate selected for the
 + *          default configuration.
 + */
 +#if !defined(SERIAL_DEFAULT_BITRATE) || defined(__DOXYGEN__)
 +#define SERIAL_DEFAULT_BITRATE      38400
 +#endif
 +
 +/**
 + * @brief   Serial buffers size.
 + * @details Configuration parameter, you can change the depth of the queue
 + *          buffers depending on the requirements of your application.
 + * @note    The default is 64 bytes for both the transmission and receive
 + *          buffers.
 + */
 +#if !defined(SERIAL_BUFFERS_SIZE) || defined(__DOXYGEN__)
 +#define SERIAL_BUFFERS_SIZE         16
 +#endif
 +
 +/*===========================================================================*/
 +/* SPI driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Enables synchronous APIs.
 + * @note    Disabling this option saves both code and data space.
 + */
 +#if !defined(SPI_USE_WAIT) || defined(__DOXYGEN__)
 +#define SPI_USE_WAIT                TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the @p spiAcquireBus() and @p spiReleaseBus() APIs.
 + * @note    Disabling this option saves both code and data space.
 + */
 +#if !defined(SPI_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
 +#define SPI_USE_MUTUAL_EXCLUSION    TRUE
 +#endif
 +
 +#endif /* _HALCONF_H_ */
 +
 +/** @} */
 diff --git a/testhal/STM32F4xx/RTC/main.c b/testhal/STM32F4xx/RTC/main.c new file mode 100644 index 000000000..6b25d371a --- /dev/null +++ b/testhal/STM32F4xx/RTC/main.c @@ -0,0 +1,239 @@ +/*
 +    ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio
 +
 +    Licensed under the Apache License, Version 2.0 (the "License");
 +    you may not use this file except in compliance with the License.
 +    You may obtain a copy of the License at
 +
 +        http://www.apache.org/licenses/LICENSE-2.0
 +
 +    Unless required by applicable law or agreed to in writing, software
 +    distributed under the License is distributed on an "AS IS" BASIS,
 +    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 +    See the License for the specific language governing permissions and
 +    limitations under the License.
 +*/
 +
 +/*
 +This structure is used to hold the values representing a calendar time.
 +It contains the following members, with the meanings as shown.
 +
 +int tm_sec       seconds after minute [0-61] (61 allows for 2 leap-seconds)
 +int tm_min       minutes after hour [0-59]
 +int tm_hour      hours after midnight [0-23]
 +int tm_mday      day of the month [1-31]
 +int tm_mon       month of year [0-11]
 +int tm_year      current year-1900
 +int tm_wday      days since Sunday [0-6]
 +int tm_yday      days since January 1st [0-365]
 +int tm_isdst     daylight savings indicator (1 = yes, 0 = no, -1 = unknown)
 +*/
 +#define WAKEUP_TEST FALSE
 +
 +#include <string.h>
 +#include <stdlib.h>
 +#include <time.h>
 +
 +#include "ch.h"
 +#include "hal.h"
 +
 +#include "shell.h"
 +#include "chprintf.h"
 +#include "chrtclib.h"
 +
 +#if WAKEUP_TEST
 +static RTCWakeup wakeupspec;
 +#endif
 +static RTCAlarm alarmspec;
 +static time_t unix_time;
 +
 +/* libc stub */
 +int _getpid(void) {return 1;}
 +/* libc stub */
 +void _exit(int i) {(void)i;}
 +/* libc stub */
 +#include <errno.h>
 +#undef errno
 +extern int errno;
 +int _kill(int pid, int sig) {
 +  (void)pid;
 +  (void)sig;
 +  errno = EINVAL;
 +  return -1;
 +}
 +
 +
 +/* sleep indicator thread */
 +static WORKING_AREA(blinkWA, 128);
 +static msg_t blink_thd(void *arg){
 +  (void)arg;
 +  while (TRUE) {
 +    chThdSleepMilliseconds(100);
 +    palTogglePad(GPIOB, GPIOB_LED_R);
 +  }
 +  return 0;
 +}
 +
 +static void func_sleep(void){
 +  chSysLock();
 +  SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk;
 +  PWR->CR |= (PWR_CR_PDDS | PWR_CR_LPDS | PWR_CR_CSBF | PWR_CR_CWUF);
 +  RTC->ISR &= ~(RTC_ISR_ALRBF | RTC_ISR_ALRAF | RTC_ISR_WUTF | RTC_ISR_TAMP1F |
 +                RTC_ISR_TSOVF | RTC_ISR_TSF);
 +  __WFI();
 +}
 +
 +static void cmd_sleep(BaseSequentialStream *chp, int argc, char *argv[]){
 +  (void)argv;
 +  if (argc > 0) {
 +    chprintf(chp, "Usage: sleep\r\n");
 +    return;
 +  }
 +  chprintf(chp, "Going to sleep.\r\n");
 +
 +  chThdSleepMilliseconds(200);
 +
 +  /* going to anabiosis */
 +  func_sleep();
 +}
 +
 +/*
 + *
 + */
 +static void cmd_alarm(BaseSequentialStream *chp, int argc, char *argv[]){
 +  int i = 0;
 +
 +  (void)argv;
 +  if (argc < 1) {
 +    goto ERROR;
 +  }
 +
 +  if ((argc == 1) && (strcmp(argv[0], "get") == 0)){
 +    rtcGetAlarm(&RTCD1, 0, &alarmspec);
 +    chprintf(chp, "%D%s",alarmspec," - alarm in STM internal format\r\n");
 +    return;
 +  }
 +
 +  if ((argc == 2) && (strcmp(argv[0], "set") == 0)){
 +    i = atol(argv[1]);
 +    alarmspec.tv_datetime = ((i / 10) & 7 << 4) | (i % 10) | RTC_ALRMAR_MSK4 |
 +                            RTC_ALRMAR_MSK3 | RTC_ALRMAR_MSK2;
 +    rtcSetAlarm(&RTCD1, 0, &alarmspec);
 +    return;
 +  }
 +  else{
 +    goto ERROR;
 +  }
 +
 +ERROR:
 +  chprintf(chp, "Usage: alarm get\r\n");
 +  chprintf(chp, "       alarm set N\r\n");
 +  chprintf(chp, "where N is alarm time in seconds\r\n");
 +}
 +
 +/*
 + *
 + */
 +static void cmd_date(BaseSequentialStream *chp, int argc, char *argv[]){
 +  (void)argv;
 +  struct tm timp;
 +
 +  if (argc == 0) {
 +    goto ERROR;
 +  }
 +
 +  if ((argc == 1) && (strcmp(argv[0], "get") == 0)){
 +    unix_time = rtcGetTimeUnixSec(&RTCD1);
 +
 +    if (unix_time == -1){
 +      chprintf(chp, "incorrect time in RTC cell\r\n");
 +    }
 +    else{
 +      chprintf(chp, "%D%s",unix_time," - unix time\r\n");
 +      rtcGetTimeTm(&RTCD1, &timp);
 +      chprintf(chp, "%s%s",asctime(&timp)," - formatted time string\r\n");
 +    }
 +    return;
 +  }
 +
 +  if ((argc == 2) && (strcmp(argv[0], "set") == 0)){
 +    unix_time = atol(argv[1]);
 +    if (unix_time > 0){
 +      rtcSetTimeUnixSec(&RTCD1, unix_time);
 +      return;
 +    }
 +    else{
 +      goto ERROR;
 +    }
 +  }
 +  else{
 +    goto ERROR;
 +  }
 +
 +ERROR:
 +  chprintf(chp, "Usage: date get\r\n");
 +  chprintf(chp, "       date set N\r\n");
 +  chprintf(chp, "where N is time in seconds sins Unix epoch\r\n");
 +  chprintf(chp, "you can get current N value from unix console by the command\r\n");
 +  chprintf(chp, "%s", "date +\%s\r\n");
 +  return;
 +}
 +
 +static SerialConfig ser_cfg = {
 +    115200,
 +    0,
 +    0,
 +    0,
 +};
 +
 +static const ShellCommand commands[] = {
 +  {"alarm", cmd_alarm},
 +  {"date",  cmd_date},
 +  {"sleep", cmd_sleep},
 +  {NULL, NULL}
 +};
 +
 +static const ShellConfig shell_cfg1 = {
 +  (BaseSequentialStream  *)&SD2,
 +  commands
 +};
 +
 +
 +/**
 + * Main function.
 + */
 +int main(void){
 +
 +  halInit();
 +  chSysInit();
 +  chThdCreateStatic(blinkWA, sizeof(blinkWA), NORMALPRIO, blink_thd, NULL);
 +
 +#if !WAKEUP_TEST
 +  /* switch off wakeup */
 +  rtcSetPeriodicWakeup_v2(&RTCD1, NULL);
 +
 +  /* Shell initialization.*/
 +  sdStart(&SD2, &ser_cfg);
 +  shellInit();
 +  static WORKING_AREA(waShell, 1024);
 +  shellCreateStatic(&shell_cfg1, waShell, sizeof(waShell), NORMALPRIO);
 +
 +  /* wait until user do not want to test wakeup */
 +  while (TRUE){
 +    chThdSleepMilliseconds(200);
 +  }
 +
 +#else
 +  /* set wakeup */
 +  wakeupspec.wakeup = ((uint32_t)4) << 16; /* select 1 Hz clock source */
 +  wakeupspec.wakeup |= 9; /* set counter value to 9. Period will be 9+1 seconds. */
 +  rtcSetPeriodicWakeup_v2(&RTCD1, &wakeupspec);
 +
 +  chThdSleepSeconds(3);
 +  func_sleep();
 +#endif /* !WAKEUP_TEST */
 +
 +  return 0;
 +}
 +
 +
 diff --git a/testhal/STM32F4xx/RTC/mcuconf.h b/testhal/STM32F4xx/RTC/mcuconf.h new file mode 100644 index 000000000..5feae3259 --- /dev/null +++ b/testhal/STM32F4xx/RTC/mcuconf.h @@ -0,0 +1,278 @@ +/*
 +    ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio
 +
 +    Licensed under the Apache License, Version 2.0 (the "License");
 +    you may not use this file except in compliance with the License.
 +    You may obtain a copy of the License at
 +
 +        http://www.apache.org/licenses/LICENSE-2.0
 +
 +    Unless required by applicable law or agreed to in writing, software
 +    distributed under the License is distributed on an "AS IS" BASIS,
 +    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 +    See the License for the specific language governing permissions and
 +    limitations under the License.
 +*/
 +
 +/*
 + * STM32F4xx drivers configuration.
 + * The following settings override the default settings present in
 + * the various device driver implementation headers.
 + * Note that the settings for each driver only have effect if the whole
 + * driver is enabled in halconf.h.
 + *
 + * IRQ priorities:
 + * 15...0       Lowest...Highest.
 + *
 + * DMA priorities:
 + * 0...3        Lowest...Highest.
 + */
 +
 +#define STM32F4xx_MCUCONF
 +
 +/*
 + * HAL driver system settings.
 + */
 +#define STM32_NO_INIT                       FALSE
 +#define STM32_HSI_ENABLED                   TRUE
 +#define STM32_LSI_ENABLED                   TRUE
 +#define STM32_HSE_ENABLED                   TRUE
 +#define STM32_LSE_ENABLED                   TRUE
 +#define STM32_CLOCK48_REQUIRED              TRUE
 +#define STM32_SW                            STM32_SW_PLL
 +#define STM32_PLLSRC                        STM32_PLLSRC_HSE
 +#define STM32_PLLM_VALUE                    8
 +#define STM32_PLLN_VALUE                    336
 +#define STM32_PLLP_VALUE                    2
 +#define STM32_PLLQ_VALUE                    7
 +#define STM32_HPRE                          STM32_HPRE_DIV1
 +#define STM32_PPRE1                         STM32_PPRE1_DIV4
 +#define STM32_PPRE2                         STM32_PPRE2_DIV2
 +#define STM32_RTCSEL                        STM32_RTCSEL_LSE
 +#define STM32_RTCPRE_VALUE                  8
 +#define STM32_MCO1SEL                       STM32_MCO1SEL_HSI
 +#define STM32_MCO1PRE                       STM32_MCO1PRE_DIV1
 +#define STM32_MCO2SEL                       STM32_MCO2SEL_SYSCLK
 +#define STM32_MCO2PRE                       STM32_MCO2PRE_DIV5
 +#define STM32_I2SSRC                        STM32_I2SSRC_CKIN
 +#define STM32_PLLI2SN_VALUE                 192
 +#define STM32_PLLI2SR_VALUE                 5
 +#define STM32_VOS                           STM32_VOS_HIGH
 +#define STM32_PVD_ENABLE                    FALSE
 +#define STM32_PLS                           STM32_PLS_LEV0
 +
 +/*
 + * ADC driver system settings.
 + */
 +#define STM32_ADC_ADCPRE                    ADC_CCR_ADCPRE_DIV4
 +#define STM32_ADC_USE_ADC1                  FALSE
 +#define STM32_ADC_USE_ADC2                  FALSE
 +#define STM32_ADC_USE_ADC3                  FALSE
 +#define STM32_ADC_ADC1_DMA_STREAM           STM32_DMA_STREAM_ID(2, 4)
 +#define STM32_ADC_ADC2_DMA_STREAM           STM32_DMA_STREAM_ID(2, 2)
 +#define STM32_ADC_ADC3_DMA_STREAM           STM32_DMA_STREAM_ID(2, 1)
 +#define STM32_ADC_ADC1_DMA_PRIORITY         2
 +#define STM32_ADC_ADC2_DMA_PRIORITY         2
 +#define STM32_ADC_ADC3_DMA_PRIORITY         2
 +#define STM32_ADC_IRQ_PRIORITY              6
 +#define STM32_ADC_ADC1_DMA_IRQ_PRIORITY     6
 +#define STM32_ADC_ADC2_DMA_IRQ_PRIORITY     6
 +#define STM32_ADC_ADC3_DMA_IRQ_PRIORITY     6
 +
 +/*
 + * CAN driver system settings.
 + */
 +#define STM32_CAN_USE_CAN1                  FALSE
 +#define STM32_CAN_USE_CAN2                  FALSE
 +#define STM32_CAN_CAN1_IRQ_PRIORITY         11
 +#define STM32_CAN_CAN2_IRQ_PRIORITY         11
 +
 +/*
 + * EXT driver system settings.
 + */
 +#define STM32_EXT_EXTI0_IRQ_PRIORITY        6
 +#define STM32_EXT_EXTI1_IRQ_PRIORITY        6
 +#define STM32_EXT_EXTI2_IRQ_PRIORITY        6
 +#define STM32_EXT_EXTI3_IRQ_PRIORITY        6
 +#define STM32_EXT_EXTI4_IRQ_PRIORITY        6
 +#define STM32_EXT_EXTI5_9_IRQ_PRIORITY      6
 +#define STM32_EXT_EXTI10_15_IRQ_PRIORITY    6
 +#define STM32_EXT_EXTI16_IRQ_PRIORITY       6
 +#define STM32_EXT_EXTI17_IRQ_PRIORITY       15
 +#define STM32_EXT_EXTI18_IRQ_PRIORITY       6
 +#define STM32_EXT_EXTI19_IRQ_PRIORITY       6
 +#define STM32_EXT_EXTI20_IRQ_PRIORITY       6
 +#define STM32_EXT_EXTI21_IRQ_PRIORITY       15
 +#define STM32_EXT_EXTI22_IRQ_PRIORITY       15
 +
 +/*
 + * GPT driver system settings.
 + */
 +#define STM32_GPT_USE_TIM1                  FALSE
 +#define STM32_GPT_USE_TIM2                  FALSE
 +#define STM32_GPT_USE_TIM3                  FALSE
 +#define STM32_GPT_USE_TIM4                  FALSE
 +#define STM32_GPT_USE_TIM5                  FALSE
 +#define STM32_GPT_USE_TIM6                  FALSE
 +#define STM32_GPT_USE_TIM7                  FALSE
 +#define STM32_GPT_USE_TIM8                  FALSE
 +#define STM32_GPT_USE_TIM9                  FALSE
 +#define STM32_GPT_USE_TIM11                 FALSE
 +#define STM32_GPT_USE_TIM12                 FALSE
 +#define STM32_GPT_USE_TIM14                 FALSE
 +#define STM32_GPT_TIM1_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM2_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM3_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM4_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM5_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM6_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM7_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM8_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM9_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM11_IRQ_PRIORITY        7
 +#define STM32_GPT_TIM12_IRQ_PRIORITY        7
 +#define STM32_GPT_TIM14_IRQ_PRIORITY        7
 +
 +/*
 + * I2C driver system settings.
 + */
 +#define STM32_I2C_USE_I2C1                  FALSE
 +#define STM32_I2C_USE_I2C2                  FALSE
 +#define STM32_I2C_USE_I2C3                  FALSE
 +#define STM32_I2C_I2C1_RX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 0)
 +#define STM32_I2C_I2C1_TX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 6)
 +#define STM32_I2C_I2C2_RX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 2)
 +#define STM32_I2C_I2C2_TX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 7)
 +#define STM32_I2C_I2C3_RX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 2)
 +#define STM32_I2C_I2C3_TX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 4)
 +#define STM32_I2C_I2C1_IRQ_PRIORITY         5
 +#define STM32_I2C_I2C2_IRQ_PRIORITY         5
 +#define STM32_I2C_I2C3_IRQ_PRIORITY         5
 +#define STM32_I2C_I2C1_DMA_PRIORITY         3
 +#define STM32_I2C_I2C2_DMA_PRIORITY         3
 +#define STM32_I2C_I2C3_DMA_PRIORITY         3
 +#define STM32_I2C_I2C1_DMA_ERROR_HOOK()     chSysHalt()
 +#define STM32_I2C_I2C2_DMA_ERROR_HOOK()     chSysHalt()
 +#define STM32_I2C_I2C3_DMA_ERROR_HOOK()     chSysHalt()
 +
 +/*
 + * ICU driver system settings.
 + */
 +#define STM32_ICU_USE_TIM1                  FALSE
 +#define STM32_ICU_USE_TIM2                  FALSE
 +#define STM32_ICU_USE_TIM3                  FALSE
 +#define STM32_ICU_USE_TIM4                  FALSE
 +#define STM32_ICU_USE_TIM5                  FALSE
 +#define STM32_ICU_USE_TIM8                  FALSE
 +#define STM32_ICU_USE_TIM9                  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
 +#define STM32_ICU_TIM8_IRQ_PRIORITY         7
 +#define STM32_ICU_TIM9_IRQ_PRIORITY         7
 +
 +/*
 + * MAC driver system settings.
 + */
 +#define STM32_MAC_TRANSMIT_BUFFERS          2
 +#define STM32_MAC_RECEIVE_BUFFERS           4
 +#define STM32_MAC_BUFFERS_SIZE              1522
 +#define STM32_MAC_PHY_TIMEOUT               100
 +#define STM32_MAC_ETH1_CHANGE_PHY_STATE     TRUE
 +#define STM32_MAC_ETH1_IRQ_PRIORITY         13
 +#define STM32_MAC_IP_CHECKSUM_OFFLOAD       0
 +
 +/*
 + * PWM driver system settings.
 + */
 +#define STM32_PWM_USE_ADVANCED              FALSE
 +#define STM32_PWM_USE_TIM1                  FALSE
 +#define STM32_PWM_USE_TIM2                  FALSE
 +#define STM32_PWM_USE_TIM3                  FALSE
 +#define STM32_PWM_USE_TIM4                  FALSE
 +#define STM32_PWM_USE_TIM5                  FALSE
 +#define STM32_PWM_USE_TIM8                  FALSE
 +#define STM32_PWM_USE_TIM9                  FALSE
 +#define STM32_PWM_TIM1_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM2_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM3_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM4_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM5_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM8_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM9_IRQ_PRIORITY         7
 +
 +/*
 + * SERIAL driver system settings.
 + */
 +#define STM32_SERIAL_USE_USART1             FALSE
 +#define STM32_SERIAL_USE_USART2             TRUE
 +#define STM32_SERIAL_USE_USART3             FALSE
 +#define STM32_SERIAL_USE_UART4              FALSE
 +#define STM32_SERIAL_USE_UART5              FALSE
 +#define STM32_SERIAL_USE_USART6             FALSE
 +#define STM32_SERIAL_USART1_PRIORITY        12
 +#define STM32_SERIAL_USART2_PRIORITY        12
 +#define STM32_SERIAL_USART3_PRIORITY        12
 +#define STM32_SERIAL_UART4_PRIORITY         12
 +#define STM32_SERIAL_UART5_PRIORITY         12
 +#define STM32_SERIAL_USART6_PRIORITY        12
 +
 +/*
 + * SPI driver system settings.
 + */
 +#define STM32_SPI_USE_SPI1                  FALSE
 +#define STM32_SPI_USE_SPI2                  FALSE
 +#define STM32_SPI_USE_SPI3                  FALSE
 +#define STM32_SPI_SPI1_RX_DMA_STREAM        STM32_DMA_STREAM_ID(2, 0)
 +#define STM32_SPI_SPI1_TX_DMA_STREAM        STM32_DMA_STREAM_ID(2, 3)
 +#define STM32_SPI_SPI2_RX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 3)
 +#define STM32_SPI_SPI2_TX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 4)
 +#define STM32_SPI_SPI3_RX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 0)
 +#define STM32_SPI_SPI3_TX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 7)
 +#define STM32_SPI_SPI1_DMA_PRIORITY         1
 +#define STM32_SPI_SPI2_DMA_PRIORITY         1
 +#define STM32_SPI_SPI3_DMA_PRIORITY         1
 +#define STM32_SPI_SPI1_IRQ_PRIORITY         10
 +#define STM32_SPI_SPI2_IRQ_PRIORITY         10
 +#define STM32_SPI_SPI3_IRQ_PRIORITY         10
 +#define STM32_SPI_DMA_ERROR_HOOK(spip)      chSysHalt()
 +
 +/*
 + * UART driver system settings.
 + */
 +#define STM32_UART_USE_USART1               FALSE
 +#define STM32_UART_USE_USART2               FALSE
 +#define STM32_UART_USE_USART3               FALSE
 +#define STM32_UART_USE_USART6               FALSE
 +#define STM32_UART_USART1_RX_DMA_STREAM     STM32_DMA_STREAM_ID(2, 5)
 +#define STM32_UART_USART1_TX_DMA_STREAM     STM32_DMA_STREAM_ID(2, 7)
 +#define STM32_UART_USART2_RX_DMA_STREAM     STM32_DMA_STREAM_ID(1, 5)
 +#define STM32_UART_USART2_TX_DMA_STREAM     STM32_DMA_STREAM_ID(1, 6)
 +#define STM32_UART_USART3_RX_DMA_STREAM     STM32_DMA_STREAM_ID(1, 1)
 +#define STM32_UART_USART3_TX_DMA_STREAM     STM32_DMA_STREAM_ID(1, 3)
 +#define STM32_UART_USART6_RX_DMA_STREAM     STM32_DMA_STREAM_ID(2, 2)
 +#define STM32_UART_USART6_TX_DMA_STREAM     STM32_DMA_STREAM_ID(2, 7)
 +#define STM32_UART_USART1_IRQ_PRIORITY      12
 +#define STM32_UART_USART2_IRQ_PRIORITY      12
 +#define STM32_UART_USART3_IRQ_PRIORITY      12
 +#define STM32_UART_USART6_IRQ_PRIORITY      12
 +#define STM32_UART_USART1_DMA_PRIORITY      0
 +#define STM32_UART_USART2_DMA_PRIORITY      0
 +#define STM32_UART_USART3_DMA_PRIORITY      0
 +#define STM32_UART_USART6_DMA_PRIORITY      0
 +#define STM32_UART_DMA_ERROR_HOOK(uartp)    chSysHalt()
 +
 +/*
 + * USB driver system settings.
 + */
 +#define STM32_USB_USE_OTG1                  FALSE
 +#define STM32_USB_USE_OTG2                  FALSE
 +#define STM32_USB_OTG1_IRQ_PRIORITY         14
 +#define STM32_USB_OTG2_IRQ_PRIORITY         14
 +#define STM32_USB_OTG1_RX_FIFO_SIZE         512
 +#define STM32_USB_OTG2_RX_FIFO_SIZE         1024
 +#define STM32_USB_OTG_THREAD_PRIO           LOWPRIO
 +#define STM32_USB_OTG_THREAD_STACK_SIZE     128
 +#define STM32_USB_OTGFIFO_FILL_BASEPRI      0
 diff --git a/testhal/STM32F4xx/RTC_FATTIME/Makefile b/testhal/STM32F4xx/RTC_FATTIME/Makefile new file mode 100644 index 000000000..ffd36e3d2 --- /dev/null +++ b/testhal/STM32F4xx/RTC_FATTIME/Makefile @@ -0,0 +1,217 @@ +##############################################################################
 +# Build global options
 +# NOTE: Can be overridden externally.
 +#
 +
 +# Compiler options here.
 +ifeq ($(USE_OPT),)
 +  USE_OPT = -O0 -ggdb -fomit-frame-pointer -falign-functions=16 #-mhard-float -mfpu=fpv4-sp-d16 -fsingle-precision-constant
 +endif
 +
 +# C specific options here (added to USE_OPT).
 +ifeq ($(USE_COPT),)
 +  USE_COPT = 
 +endif
 +
 +# C++ specific options here (added to USE_OPT).
 +ifeq ($(USE_CPPOPT),)
 +  USE_CPPOPT = -fno-rtti
 +endif
 +
 +# Enable this if you want the linker to remove unused code and data
 +ifeq ($(USE_LINK_GC),)
 +  USE_LINK_GC = yes
 +endif
 +
 +# If enabled, this option allows to compile the application in THUMB mode.
 +ifeq ($(USE_THUMB),)
 +  USE_THUMB = yes
 +endif
 +
 +# Enable this if you want to see the full log while compiling.
 +ifeq ($(USE_VERBOSE_COMPILE),)
 +  USE_VERBOSE_COMPILE = no
 +endif
 +
 +#
 +# Build global options
 +##############################################################################
 +
 +##############################################################################
 +# Architecture or project specific options
 +#
 +
 +# Enable this if you really want to use the STM FWLib.
 +ifeq ($(USE_FWLIB),)
 +  USE_FWLIB = no
 +endif
 +
 +#
 +# Architecture or project specific options
 +##############################################################################
 +
 +##############################################################################
 +# Project, sources and paths
 +#
 +
 +# Define project name here
 +PROJECT = ch
 +
 +# Define linker script file here
 +LDSCRIPT= ch.ld
 +
 +# Imported source files and paths
 +CHIBIOS = ../../..
 +include $(CHIBIOS)/boards/NONSTANDARD_STM32F4_BARTHESS1/board.mk
 +include $(CHIBIOS)/os/hal/platforms/STM32F4xx/platform.mk
 +include $(CHIBIOS)/os/hal/hal.mk
 +include $(CHIBIOS)/os/ports/GCC/ARMCMx/STM32F4xx/port.mk
 +include $(CHIBIOS)/os/kernel/kernel.mk
 +include $(CHIBIOS)/os/various/fatfs_bindings/fatfs.mk
 +#include $(CHIBIOS)/test/test.mk
 +
 +# Define linker script file here
 +LDSCRIPT= $(PORTLD)/STM32F407xG.ld
 +
 +# C sources that can be compiled in ARM or THUMB mode depending on the global
 +# setting.
 +CSRC = $(PORTSRC) \
 +       $(KERNSRC) \
 +       $(TESTSRC) \
 +       $(HALSRC) \
 +       $(PLATFORMSRC) \
 +       $(BOARDSRC) \
 +       $(FATFSSRC) \
 +       $(CHIBIOS)/os/various/evtimer.c \
 +       $(CHIBIOS)/os/various/syscalls.c \
 +       $(CHIBIOS)/os/various/shell.c \
 +       $(CHIBIOS)/os/various/chprintf.c \
 +       $(CHIBIOS)/os/various/chrtclib.c \
 +       main.c
 +
 +# C++ sources that can be compiled in ARM or THUMB mode depending on the global
 +# setting.
 +CPPSRC =
 +
 +# C sources to be compiled in ARM mode regardless of the global setting.
 +# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler
 +#       option that results in lower performance and larger code size.
 +ACSRC =
 +
 +# C++ sources to be compiled in ARM mode regardless of the global setting.
 +# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler
 +#       option that results in lower performance and larger code size.
 +ACPPSRC =
 +
 +# C sources to be compiled in THUMB mode regardless of the global setting.
 +# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler
 +#       option that results in lower performance and larger code size.
 +TCSRC =
 +
 +# C sources to be compiled in THUMB mode regardless of the global setting.
 +# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler
 +#       option that results in lower performance and larger code size.
 +TCPPSRC =
 +
 +# List ASM source files here
 +ASMSRC = $(PORTASM)
 +
 +INCDIR = $(PORTINC) $(KERNINC) $(TESTINC) \
 +         $(HALINC) $(PLATFORMINC) $(BOARDINC) \
 +         $(CHIBIOS)/os/various  $(FATFSINC)
 +
 +#
 +# Project, sources and paths
 +##############################################################################
 +
 +##############################################################################
 +# Compiler settings
 +#
 +
 +MCU  = cortex-m4
 +
 +#TRGT = arm-elf-
 +TRGT = arm-none-eabi-
 +CC   = $(TRGT)gcc
 +CPPC = $(TRGT)g++
 +# Enable loading with g++ only if you need C++ runtime support.
 +# NOTE: You can use C++ even without C++ support if you are careful. C++
 +#       runtime support makes code size explode.
 +LD   = $(TRGT)gcc
 +#LD   = $(TRGT)g++
 +CP   = $(TRGT)objcopy
 +AS   = $(TRGT)gcc -x assembler-with-cpp
 +OD   = $(TRGT)objdump
 +HEX  = $(CP) -O ihex
 +BIN  = $(CP) -O binary
 +
 +# ARM-specific options here
 +AOPT =
 +
 +# THUMB-specific options here
 +TOPT = -mthumb -DTHUMB
 +
 +# Define C warning options here
 +CWARN = -Wall -Wextra -Wstrict-prototypes
 +
 +# Define C++ warning options here
 +CPPWARN = -Wall -Wextra
 +
 +#
 +# Compiler settings
 +##############################################################################
 +
 +##############################################################################
 +# Start of default section
 +#
 +
 +# List all default C defines here, like -D_DEBUG=1
 +DDEFS =
 +
 +# List all default ASM defines here, like -D_DEBUG=1
 +DADEFS =
 +
 +# List all default directories to look for include files here
 +DINCDIR =
 +
 +# List the default directory to look for the libraries here
 +DLIBDIR =
 +
 +# List all default libraries here
 +DLIBS =
 +
 +#
 +# End of default section
 +##############################################################################
 +
 +##############################################################################
 +# Start of user section
 +#
 +
 +# List all user C define here, like -D_DEBUG=1
 +UDEFS =
 +
 +# Define ASM defines here
 +UADEFS =
 +
 +# List all user directories here
 +UINCDIR =
 +
 +# List the user directory to look for the libraries here
 +ULIBDIR =
 +
 +# List all user libraries here
 +ULIBS =
 +
 +#
 +# End of user defines
 +##############################################################################
 +
 +ifeq ($(USE_FWLIB),yes)
 +  include $(CHIBIOS)/ext/stm32lib/stm32lib.mk
 +  CSRC += $(STM32SRC)
 +  INCDIR += $(STM32INC)
 +  USE_OPT += -DUSE_STDPERIPH_DRIVER
 +endif
 +
 +include $(CHIBIOS)/os/ports/GCC/ARMCMx/rules.mk
 diff --git a/testhal/STM32F4xx/RTC_FATTIME/chconf.h b/testhal/STM32F4xx/RTC_FATTIME/chconf.h new file mode 100644 index 000000000..868377751 --- /dev/null +++ b/testhal/STM32F4xx/RTC_FATTIME/chconf.h @@ -0,0 +1,534 @@ +/*
 +    ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio
 +
 +    Licensed under the Apache License, Version 2.0 (the "License");
 +    you may not use this file except in compliance with the License.
 +    You may obtain a copy of the License at
 +
 +        http://www.apache.org/licenses/LICENSE-2.0
 +
 +    Unless required by applicable law or agreed to in writing, software
 +    distributed under the License is distributed on an "AS IS" BASIS,
 +    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 +    See the License for the specific language governing permissions and
 +    limitations under the License.
 +*/
 +
 +/**
 + * @file    templates/chconf.h
 + * @brief   Configuration file template.
 + * @details A copy of this file must be placed in each project directory, it
 + *          contains the application specific kernel settings.
 + *
 + * @addtogroup config
 + * @details Kernel related settings and hooks.
 + * @{
 + */
 +
 +#ifndef _CHCONF_H_
 +#define _CHCONF_H_
 +
 +#define PORT_IDLE_THREAD_STACK_SIZE     32
 +#define CORTEX_USE_FPU                  FALSE
 +
 +/*===========================================================================*/
 +/**
 + * @name Kernel parameters and options
 + * @{
 + */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   System tick frequency.
 + * @details Frequency of the system timer that drives the system ticks. This
 + *          setting also defines the system tick time unit.
 + */
 +#if !defined(CH_FREQUENCY) || defined(__DOXYGEN__)
 +#define CH_FREQUENCY                    1000
 +#endif
 +
 +/**
 + * @brief   Round robin interval.
 + * @details This constant is the number of system ticks allowed for the
 + *          threads before preemption occurs. Setting this value to zero
 + *          disables the preemption for threads with equal priority and the
 + *          round robin becomes cooperative. Note that higher priority
 + *          threads can still preempt, the kernel is always preemptive.
 + *
 + * @note    Disabling the round robin preemption makes the kernel more compact
 + *          and generally faster.
 + */
 +#if !defined(CH_TIME_QUANTUM) || defined(__DOXYGEN__)
 +#define CH_TIME_QUANTUM                 20
 +#endif
 +
 +/**
 + * @brief   Managed RAM size.
 + * @details Size of the RAM area to be managed by the OS. If set to zero
 + *          then the whole available RAM is used. The core memory is made
 + *          available to the heap allocator and/or can be used directly through
 + *          the simplified core memory allocator.
 + *
 + * @note    In order to let the OS manage the whole RAM the linker script must
 + *          provide the @p __heap_base__ and @p __heap_end__ symbols.
 + * @note    Requires @p CH_USE_MEMCORE.
 + */
 +#if !defined(CH_MEMCORE_SIZE) || defined(__DOXYGEN__)
 +#define CH_MEMCORE_SIZE                 0
 +#endif
 +
 +/**
 + * @brief   Idle thread automatic spawn suppression.
 + * @details When this option is activated the function @p chSysInit()
 + *          does not spawn the idle thread automatically. The application has
 + *          then the responsibility to do one of the following:
 + *          - Spawn a custom idle thread at priority @p IDLEPRIO.
 + *          - Change the main() thread priority to @p IDLEPRIO then enter
 + *            an endless loop. In this scenario the @p main() thread acts as
 + *            the idle thread.
 + *          .
 + * @note    Unless an idle thread is spawned the @p main() thread must not
 + *          enter a sleep state.
 + */
 +#if !defined(CH_NO_IDLE_THREAD) || defined(__DOXYGEN__)
 +#define CH_NO_IDLE_THREAD               FALSE
 +#endif
 +
 +/** @} */
 +
 +/*===========================================================================*/
 +/**
 + * @name Performance options
 + * @{
 + */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   OS optimization.
 + * @details If enabled then time efficient rather than space efficient code
 + *          is used when two possible implementations exist.
 + *
 + * @note    This is not related to the compiler optimization options.
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_OPTIMIZE_SPEED) || defined(__DOXYGEN__)
 +#define CH_OPTIMIZE_SPEED               TRUE
 +#endif
 +
 +/** @} */
 +
 +/*===========================================================================*/
 +/**
 + * @name Subsystem options
 + * @{
 + */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Threads registry APIs.
 + * @details If enabled then the registry APIs are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_REGISTRY) || defined(__DOXYGEN__)
 +#define CH_USE_REGISTRY                 TRUE
 +#endif
 +
 +/**
 + * @brief   Threads synchronization APIs.
 + * @details If enabled then the @p chThdWait() function is included in
 + *          the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_WAITEXIT) || defined(__DOXYGEN__)
 +#define CH_USE_WAITEXIT                 TRUE
 +#endif
 +
 +/**
 + * @brief   Semaphores APIs.
 + * @details If enabled then the Semaphores APIs are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_SEMAPHORES) || defined(__DOXYGEN__)
 +#define CH_USE_SEMAPHORES               TRUE
 +#endif
 +
 +/**
 + * @brief   Semaphores queuing mode.
 + * @details If enabled then the threads are enqueued on semaphores by
 + *          priority rather than in FIFO order.
 + *
 + * @note    The default is @p FALSE. Enable this if you have special requirements.
 + * @note    Requires @p CH_USE_SEMAPHORES.
 + */
 +#if !defined(CH_USE_SEMAPHORES_PRIORITY) || defined(__DOXYGEN__)
 +#define CH_USE_SEMAPHORES_PRIORITY      FALSE
 +#endif
 +
 +/**
 + * @brief   Atomic semaphore API.
 + * @details If enabled then the semaphores the @p chSemSignalWait() API
 + *          is included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_SEMAPHORES.
 + */
 +#if !defined(CH_USE_SEMSW) || defined(__DOXYGEN__)
 +#define CH_USE_SEMSW                    TRUE
 +#endif
 +
 +/**
 + * @brief   Mutexes APIs.
 + * @details If enabled then the mutexes APIs are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_MUTEXES) || defined(__DOXYGEN__)
 +#define CH_USE_MUTEXES                  TRUE
 +#endif
 +
 +/**
 + * @brief   Conditional Variables APIs.
 + * @details If enabled then the conditional variables APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_MUTEXES.
 + */
 +#if !defined(CH_USE_CONDVARS) || defined(__DOXYGEN__)
 +#define CH_USE_CONDVARS                 TRUE
 +#endif
 +
 +/**
 + * @brief   Conditional Variables APIs with timeout.
 + * @details If enabled then the conditional variables APIs with timeout
 + *          specification are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_CONDVARS.
 + */
 +#if !defined(CH_USE_CONDVARS_TIMEOUT) || defined(__DOXYGEN__)
 +#define CH_USE_CONDVARS_TIMEOUT         TRUE
 +#endif
 +
 +/**
 + * @brief   Events Flags APIs.
 + * @details If enabled then the event flags APIs are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_EVENTS) || defined(__DOXYGEN__)
 +#define CH_USE_EVENTS                   TRUE
 +#endif
 +
 +/**
 + * @brief   Events Flags APIs with timeout.
 + * @details If enabled then the events APIs with timeout specification
 + *          are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_EVENTS.
 + */
 +#if !defined(CH_USE_EVENTS_TIMEOUT) || defined(__DOXYGEN__)
 +#define CH_USE_EVENTS_TIMEOUT           TRUE
 +#endif
 +
 +/**
 + * @brief   Synchronous Messages APIs.
 + * @details If enabled then the synchronous messages APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_MESSAGES) || defined(__DOXYGEN__)
 +#define CH_USE_MESSAGES                 TRUE
 +#endif
 +
 +/**
 + * @brief   Synchronous Messages queuing mode.
 + * @details If enabled then messages are served by priority rather than in
 + *          FIFO order.
 + *
 + * @note    The default is @p FALSE. Enable this if you have special requirements.
 + * @note    Requires @p CH_USE_MESSAGES.
 + */
 +#if !defined(CH_USE_MESSAGES_PRIORITY) || defined(__DOXYGEN__)
 +#define CH_USE_MESSAGES_PRIORITY        FALSE
 +#endif
 +
 +/**
 + * @brief   Mailboxes APIs.
 + * @details If enabled then the asynchronous messages (mailboxes) APIs are
 + *          included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_SEMAPHORES.
 + */
 +#if !defined(CH_USE_MAILBOXES) || defined(__DOXYGEN__)
 +#define CH_USE_MAILBOXES                TRUE
 +#endif
 +
 +/**
 + * @brief   I/O Queues APIs.
 + * @details If enabled then the I/O queues APIs are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_QUEUES) || defined(__DOXYGEN__)
 +#define CH_USE_QUEUES                   TRUE
 +#endif
 +
 +/**
 + * @brief   Core Memory Manager APIs.
 + * @details If enabled then the core memory manager APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_MEMCORE) || defined(__DOXYGEN__)
 +#define CH_USE_MEMCORE                  TRUE
 +#endif
 +
 +/**
 + * @brief   Heap Allocator APIs.
 + * @details If enabled then the memory heap allocator APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_MEMCORE and either @p CH_USE_MUTEXES or
 + *          @p CH_USE_SEMAPHORES.
 + * @note    Mutexes are recommended.
 + */
 +#if !defined(CH_USE_HEAP) || defined(__DOXYGEN__)
 +#define CH_USE_HEAP                     TRUE
 +#endif
 +
 +/**
 + * @brief   C-runtime allocator.
 + * @details If enabled the the heap allocator APIs just wrap the C-runtime
 + *          @p malloc() and @p free() functions.
 + *
 + * @note    The default is @p FALSE.
 + * @note    Requires @p CH_USE_HEAP.
 + * @note    The C-runtime may or may not require @p CH_USE_MEMCORE, see the
 + *          appropriate documentation.
 + */
 +#if !defined(CH_USE_MALLOC_HEAP) || defined(__DOXYGEN__)
 +#define CH_USE_MALLOC_HEAP              FALSE
 +#endif
 +
 +/**
 + * @brief   Memory Pools Allocator APIs.
 + * @details If enabled then the memory pools allocator APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_MEMPOOLS) || defined(__DOXYGEN__)
 +#define CH_USE_MEMPOOLS                 TRUE
 +#endif
 +
 +/**
 + * @brief   Dynamic Threads APIs.
 + * @details If enabled then the dynamic threads creation APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_WAITEXIT.
 + * @note    Requires @p CH_USE_HEAP and/or @p CH_USE_MEMPOOLS.
 + */
 +#if !defined(CH_USE_DYNAMIC) || defined(__DOXYGEN__)
 +#define CH_USE_DYNAMIC                  TRUE
 +#endif
 +
 +/** @} */
 +
 +/*===========================================================================*/
 +/**
 + * @name Debug options
 + * @{
 + */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Debug option, system state check.
 + * @details If enabled the correct call protocol for system APIs is checked
 + *          at runtime.
 + *
 + * @note    The default is @p FALSE.
 + */
 +#if !defined(CH_DBG_SYSTEM_STATE_CHECK) || defined(__DOXYGEN__)
 +#define CH_DBG_SYSTEM_STATE_CHECK       TRUE
 +#endif
 +
 +/**
 + * @brief   Debug option, parameters checks.
 + * @details If enabled then the checks on the API functions input
 + *          parameters are activated.
 + *
 + * @note    The default is @p FALSE.
 + */
 +#if !defined(CH_DBG_ENABLE_CHECKS) || defined(__DOXYGEN__)
 +#define CH_DBG_ENABLE_CHECKS            TRUE
 +#endif
 +
 +/**
 + * @brief   Debug option, consistency checks.
 + * @details If enabled then all the assertions in the kernel code are
 + *          activated. This includes consistency checks inside the kernel,
 + *          runtime anomalies and port-defined checks.
 + *
 + * @note    The default is @p FALSE.
 + */
 +#if !defined(CH_DBG_ENABLE_ASSERTS) || defined(__DOXYGEN__)
 +#define CH_DBG_ENABLE_ASSERTS           TRUE
 +#endif
 +
 +/**
 + * @brief   Debug option, trace buffer.
 + * @details If enabled then the context switch circular trace buffer is
 + *          activated.
 + *
 + * @note    The default is @p FALSE.
 + */
 +#if !defined(CH_DBG_ENABLE_TRACE) || defined(__DOXYGEN__)
 +#define CH_DBG_ENABLE_TRACE             TRUE
 +#endif
 +
 +/**
 + * @brief   Debug option, stack checks.
 + * @details If enabled then a runtime stack check is performed.
 + *
 + * @note    The default is @p FALSE.
 + * @note    The stack check is performed in a architecture/port dependent way.
 + *          It may not be implemented or some ports.
 + * @note    The default failure mode is to halt the system with the global
 + *          @p panic_msg variable set to @p NULL.
 + */
 +#if !defined(CH_DBG_ENABLE_STACK_CHECK) || defined(__DOXYGEN__)
 +#define CH_DBG_ENABLE_STACK_CHECK       TRUE
 +#endif
 +
 +/**
 + * @brief   Debug option, stacks initialization.
 + * @details If enabled then the threads working area is filled with a byte
 + *          value when a thread is created. This can be useful for the
 + *          runtime measurement of the used stack.
 + *
 + * @note    The default is @p FALSE.
 + */
 +#if !defined(CH_DBG_FILL_THREADS) || defined(__DOXYGEN__)
 +#define CH_DBG_FILL_THREADS             TRUE
 +#endif
 +
 +/**
 + * @brief   Debug option, threads profiling.
 + * @details If enabled then a field is added to the @p Thread structure that
 + *          counts the system ticks occurred while executing the thread.
 + *
 + * @note    The default is @p TRUE.
 + * @note    This debug option is defaulted to TRUE because it is required by
 + *          some test cases into the test suite.
 + */
 +#if !defined(CH_DBG_THREADS_PROFILING) || defined(__DOXYGEN__)
 +#define CH_DBG_THREADS_PROFILING        TRUE
 +#endif
 +
 +/** @} */
 +
 +/*===========================================================================*/
 +/**
 + * @name Kernel hooks
 + * @{
 + */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Threads descriptor structure extension.
 + * @details User fields added to the end of the @p Thread structure.
 + */
 +#if !defined(THREAD_EXT_FIELDS) || defined(__DOXYGEN__)
 +#define THREAD_EXT_FIELDS                                                   \
 +  /* Add threads custom fields here.*/
 +#endif
 +
 +/**
 + * @brief   Threads initialization hook.
 + * @details User initialization code added to the @p chThdInit() API.
 + *
 + * @note    It is invoked from within @p chThdInit() and implicitly from all
 + *          the threads creation APIs.
 + */
 +#if !defined(THREAD_EXT_INIT_HOOK) || defined(__DOXYGEN__)
 +#define THREAD_EXT_INIT_HOOK(tp) {                                          \
 +  /* Add threads initialization code here.*/                                \
 +}
 +#endif
 +
 +/**
 + * @brief   Threads finalization hook.
 + * @details User finalization code added to the @p chThdExit() API.
 + *
 + * @note    It is inserted into lock zone.
 + * @note    It is also invoked when the threads simply return in order to
 + *          terminate.
 + */
 +#if !defined(THREAD_EXT_EXIT_HOOK) || defined(__DOXYGEN__)
 +#define THREAD_EXT_EXIT_HOOK(tp) {                                          \
 +  /* Add threads finalization code here.*/                                  \
 +}
 +#endif
 +
 +/**
 + * @brief   Context switch hook.
 + * @details This hook is invoked just before switching between threads.
 + */
 +#if !defined(THREAD_CONTEXT_SWITCH_HOOK) || defined(__DOXYGEN__)
 +#define THREAD_CONTEXT_SWITCH_HOOK(ntp, otp) {                              \
 +  /* System halt code here.*/                                               \
 +}
 +#endif
 +
 +/**
 + * @brief   Idle Loop hook.
 + * @details This hook is continuously invoked by the idle thread loop.
 + */
 +#if !defined(IDLE_LOOP_HOOK) || defined(__DOXYGEN__)
 +#define IDLE_LOOP_HOOK() {                                                  \
 +  /* Idle loop code here.*/                                                 \
 +}
 +#endif
 +
 +/**
 + * @brief   System tick event hook.
 + * @details This hook is invoked in the system tick handler immediately
 + *          after processing the virtual timers queue.
 + */
 +#if !defined(SYSTEM_TICK_EVENT_HOOK) || defined(__DOXYGEN__)
 +#define SYSTEM_TICK_EVENT_HOOK() {                                          \
 +  /* System tick event code here.*/                                         \
 +}
 +#endif
 +
 +/**
 + * @brief   System halt hook.
 + * @details This hook is invoked in case to a system halting error before
 + *          the system is halted.
 + */
 +#if !defined(SYSTEM_HALT_HOOK) || defined(__DOXYGEN__)
 +#define SYSTEM_HALT_HOOK() {                                                \
 +  /* System halt code here.*/                                               \
 +}
 +#endif
 +
 +/** @} */
 +
 +/*===========================================================================*/
 +/* Port-specific settings (override port settings defaulted in chcore.h).    */
 +/*===========================================================================*/
 +
 +#endif  /* _CHCONF_H_ */
 +
 +/** @} */
 diff --git a/testhal/STM32F4xx/RTC_FATTIME/ffconf.h b/testhal/STM32F4xx/RTC_FATTIME/ffconf.h new file mode 100644 index 000000000..a4816e845 --- /dev/null +++ b/testhal/STM32F4xx/RTC_FATTIME/ffconf.h @@ -0,0 +1,193 @@ +/* CHIBIOS FIX */
 +#include "ch.h"
 +
 +/*---------------------------------------------------------------------------/
 +/  FatFs - FAT file system module configuration file  R0.09  (C)ChaN, 2011
 +/----------------------------------------------------------------------------/
 +/
 +/ CAUTION! Do not forget to make clean the project after any changes to
 +/ the configuration options.
 +/
 +/----------------------------------------------------------------------------*/
 +#ifndef _FFCONF
 +#define _FFCONF 6502	/* Revision ID */
 +
 +
 +/*---------------------------------------------------------------------------/
 +/ Functions and Buffer Configurations
 +/----------------------------------------------------------------------------*/
 +
 +#define	_FS_TINY		0	/* 0:Normal or 1:Tiny */
 +/* When _FS_TINY is set to 1, FatFs uses the sector buffer in the file system
 +/  object instead of the sector buffer in the individual file object for file
 +/  data transfer. This reduces memory consumption 512 bytes each file object. */
 +
 +
 +#define _FS_READONLY	0	/* 0:Read/Write or 1:Read only */
 +/* Setting _FS_READONLY to 1 defines read only configuration. This removes
 +/  writing functions, f_write, f_sync, f_unlink, f_mkdir, f_chmod, f_rename,
 +/  f_truncate and useless f_getfree. */
 +
 +
 +#define _FS_MINIMIZE	0	/* 0 to 3 */
 +/* The _FS_MINIMIZE option defines minimization level to remove some functions.
 +/
 +/   0: Full function.
 +/   1: f_stat, f_getfree, f_unlink, f_mkdir, f_chmod, f_truncate and f_rename
 +/      are removed.
 +/   2: f_opendir and f_readdir are removed in addition to 1.
 +/   3: f_lseek is removed in addition to 2. */
 +
 +
 +#define	_USE_STRFUNC	0	/* 0:Disable or 1-2:Enable */
 +/* To enable string functions, set _USE_STRFUNC to 1 or 2. */
 +
 +
 +#define	_USE_MKFS		1	/* 0:Disable or 1:Enable */
 +/* To enable f_mkfs function, set _USE_MKFS to 1 and set _FS_READONLY to 0 */
 +
 +
 +#define	_USE_FORWARD	0	/* 0:Disable or 1:Enable */
 +/* To enable f_forward function, set _USE_FORWARD to 1 and set _FS_TINY to 1. */
 +
 +
 +#define	_USE_FASTSEEK	0	/* 0:Disable or 1:Enable */
 +/* To enable fast seek feature, set _USE_FASTSEEK to 1. */
 +
 +
 +
 +/*---------------------------------------------------------------------------/
 +/ Locale and Namespace Configurations
 +/----------------------------------------------------------------------------*/
 +
 +#define _CODE_PAGE	1251
 +/* The _CODE_PAGE specifies the OEM code page to be used on the target system.
 +/  Incorrect setting of the code page can cause a file open failure.
 +/
 +/   932  - Japanese Shift-JIS (DBCS, OEM, Windows)
 +/   936  - Simplified Chinese GBK (DBCS, OEM, Windows)
 +/   949  - Korean (DBCS, OEM, Windows)
 +/   950  - Traditional Chinese Big5 (DBCS, OEM, Windows)
 +/   1250 - Central Europe (Windows)
 +/   1251 - Cyrillic (Windows)
 +/   1252 - Latin 1 (Windows)
 +/   1253 - Greek (Windows)
 +/   1254 - Turkish (Windows)
 +/   1255 - Hebrew (Windows)
 +/   1256 - Arabic (Windows)
 +/   1257 - Baltic (Windows)
 +/   1258 - Vietnam (OEM, Windows)
 +/   437  - U.S. (OEM)
 +/   720  - Arabic (OEM)
 +/   737  - Greek (OEM)
 +/   775  - Baltic (OEM)
 +/   850  - Multilingual Latin 1 (OEM)
 +/   858  - Multilingual Latin 1 + Euro (OEM)
 +/   852  - Latin 2 (OEM)
 +/   855  - Cyrillic (OEM)
 +/   866  - Russian (OEM)
 +/   857  - Turkish (OEM)
 +/   862  - Hebrew (OEM)
 +/   874  - Thai (OEM, Windows)
 +/	1    - ASCII only (Valid for non LFN cfg.)
 +*/
 +
 +
 +#define	_USE_LFN	1		/* 0 to 3 */
 +#define	_MAX_LFN	255		/* Maximum LFN length to handle (12 to 255) */
 +/* The _USE_LFN option switches the LFN support.
 +/
 +/   0: Disable LFN feature. _MAX_LFN and _LFN_UNICODE have no effect.
 +/   1: Enable LFN with static working buffer on the BSS. Always NOT reentrant.
 +/   2: Enable LFN with dynamic working buffer on the STACK.
 +/   3: Enable LFN with dynamic working buffer on the HEAP.
 +/
 +/  The LFN working buffer occupies (_MAX_LFN + 1) * 2 bytes. To enable LFN,
 +/  Unicode handling functions ff_convert() and ff_wtoupper() must be added
 +/  to the project. When enable to use heap, memory control functions
 +/  ff_memalloc() and ff_memfree() must be added to the project. */
 +
 +
 +#define	_LFN_UNICODE	0	/* 0:ANSI/OEM or 1:Unicode */
 +/* To switch the character code set on FatFs API to Unicode,
 +/  enable LFN feature and set _LFN_UNICODE to 1. */
 +
 +
 +#define _FS_RPATH		0	/* 0 to 2 */
 +/* The _FS_RPATH option configures relative path feature.
 +/
 +/   0: Disable relative path feature and remove related functions.
 +/   1: Enable relative path. f_chdrive() and f_chdir() are available.
 +/   2: f_getcwd() is available in addition to 1.
 +/
 +/  Note that output of the f_readdir fnction is affected by this option. */
 +
 +
 +
 +/*---------------------------------------------------------------------------/
 +/ Physical Drive Configurations
 +/----------------------------------------------------------------------------*/
 +
 +#define _VOLUMES	1
 +/* Number of volumes (logical drives) to be used. */
 +
 +
 +#define	_MAX_SS		512		/* 512, 1024, 2048 or 4096 */
 +/* Maximum sector size to be handled.
 +/  Always set 512 for memory card and hard disk but a larger value may be
 +/  required for on-board flash memory, floppy disk and optical disk.
 +/  When _MAX_SS is larger than 512, it configures FatFs to variable sector size
 +/  and GET_SECTOR_SIZE command must be implememted to the disk_ioctl function. */
 +
 +
 +#define	_MULTI_PARTITION	0	/* 0:Single partition, 1/2:Enable multiple partition */
 +/* When set to 0, each volume is bound to the same physical drive number and
 +/ it can mount only first primaly partition. When it is set to 1, each volume
 +/ is tied to the partitions listed in VolToPart[]. */
 +
 +
 +#define	_USE_ERASE	1	/* 0:Disable or 1:Enable */
 +/* To enable sector erase feature, set _USE_ERASE to 1. CTRL_ERASE_SECTOR command
 +/  should be added to the disk_ioctl functio. */
 +
 +
 +
 +/*---------------------------------------------------------------------------/
 +/ System Configurations
 +/----------------------------------------------------------------------------*/
 +
 +#define _WORD_ACCESS	1	/* 0 or 1 */
 +/* Set 0 first and it is always compatible with all platforms. The _WORD_ACCESS
 +/  option defines which access method is used to the word data on the FAT volume.
 +/
 +/   0: Byte-by-byte access.
 +/   1: Word access. Do not choose this unless following condition is met.
 +/
 +/  When the byte order on the memory is big-endian or address miss-aligned word
 +/  access results incorrect behavior, the _WORD_ACCESS must be set to 0.
 +/  If it is not the case, the value can also be set to 1 to improve the
 +/  performance and code size.
 +*/
 +
 +
 +/* A header file that defines sync object types on the O/S, such as
 +/  windows.h, ucos_ii.h and semphr.h, must be included prior to ff.h. */
 +
 +#define _FS_REENTRANT	0		/* 0:Disable or 1:Enable */
 +#define _FS_TIMEOUT		1000	/* Timeout period in unit of time ticks */
 +#define	_SYNC_t			Semaphore * /* O/S dependent type of sync object. e.g. HANDLE, OS_EVENT*, ID and etc.. */
 +
 +/* The _FS_REENTRANT option switches the reentrancy (thread safe) of the FatFs module.
 +/
 +/   0: Disable reentrancy. _SYNC_t and _FS_TIMEOUT have no effect.
 +/   1: Enable reentrancy. Also user provided synchronization handlers,
 +/      ff_req_grant, ff_rel_grant, ff_del_syncobj and ff_cre_syncobj
 +/      function must be added to the project. */
 +
 +
 +#define	_FS_SHARE	0	/* 0:Disable or >=1:Enable */
 +/* To enable file shareing feature, set _FS_SHARE to 1 or greater. The value
 +   defines how many files can be opened simultaneously. */
 +
 +
 +#endif /* _FFCONFIG */
 diff --git a/testhal/STM32F4xx/RTC_FATTIME/halconf.h b/testhal/STM32F4xx/RTC_FATTIME/halconf.h new file mode 100644 index 000000000..f33c18c27 --- /dev/null +++ b/testhal/STM32F4xx/RTC_FATTIME/halconf.h @@ -0,0 +1,319 @@ +/*
 +    ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio
 +
 +    Licensed under the Apache License, Version 2.0 (the "License");
 +    you may not use this file except in compliance with the License.
 +    You may obtain a copy of the License at
 +
 +        http://www.apache.org/licenses/LICENSE-2.0
 +
 +    Unless required by applicable law or agreed to in writing, software
 +    distributed under the License is distributed on an "AS IS" BASIS,
 +    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 +    See the License for the specific language governing permissions and
 +    limitations under the License.
 +*/
 +
 +/**
 + * @file    templates/halconf.h
 + * @brief   HAL configuration header.
 + * @details HAL configuration file, this file allows to enable or disable the
 + *          various device drivers from your application. You may also use
 + *          this file in order to override the device drivers default settings.
 + *
 + * @addtogroup HAL_CONF
 + * @{
 + */
 +
 +#ifndef _HALCONF_H_
 +#define _HALCONF_H_
 +
 +#include "mcuconf.h"
 +
 +/**
 + * @brief   Enables the PAL subsystem.
 + */
 +#if !defined(HAL_USE_PAL) || defined(__DOXYGEN__)
 +#define HAL_USE_PAL                 TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the ADC subsystem.
 + */
 +#if !defined(HAL_USE_ADC) || defined(__DOXYGEN__)
 +#define HAL_USE_ADC                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the CAN subsystem.
 + */
 +#if !defined(HAL_USE_CAN) || defined(__DOXYGEN__)
 +#define HAL_USE_CAN                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the EXT subsystem.
 + */
 +#if !defined(HAL_USE_EXT) || defined(__DOXYGEN__)
 +#define HAL_USE_EXT                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the GPT subsystem.
 + */
 +#if !defined(HAL_USE_GPT) || defined(__DOXYGEN__)
 +#define HAL_USE_GPT                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the I2C subsystem.
 + */
 +#if !defined(HAL_USE_I2C) || defined(__DOXYGEN__)
 +#define HAL_USE_I2C                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the ICU subsystem.
 + */
 +#if !defined(HAL_USE_ICU) || defined(__DOXYGEN__)
 +#define HAL_USE_ICU                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the MAC subsystem.
 + */
 +#if !defined(HAL_USE_MAC) || defined(__DOXYGEN__)
 +#define HAL_USE_MAC                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the MMC_SPI subsystem.
 + */
 +#if !defined(HAL_USE_MMC_SPI) || defined(__DOXYGEN__)
 +#define HAL_USE_MMC_SPI             FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the PWM subsystem.
 + */
 +#if !defined(HAL_USE_PWM) || defined(__DOXYGEN__)
 +#define HAL_USE_PWM                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the RTC subsystem.
 + */
 +#if !defined(HAL_USE_RTC) || defined(__DOXYGEN__)
 +#define HAL_USE_RTC                 TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the SDC subsystem.
 + */
 +#if !defined(HAL_USE_SDC) || defined(__DOXYGEN__)
 +#define HAL_USE_SDC                 TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the SERIAL subsystem.
 + */
 +#if !defined(HAL_USE_SERIAL) || defined(__DOXYGEN__)
 +#define HAL_USE_SERIAL              TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the SERIAL over USB subsystem.
 + */
 +#if !defined(HAL_USE_SERIAL_USB) || defined(__DOXYGEN__)
 +#define HAL_USE_SERIAL_USB          FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the SPI subsystem.
 + */
 +#if !defined(HAL_USE_SPI) || defined(__DOXYGEN__)
 +#define HAL_USE_SPI                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the UART subsystem.
 + */
 +#if !defined(HAL_USE_UART) || defined(__DOXYGEN__)
 +#define HAL_USE_UART                FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the USB subsystem.
 + */
 +#if !defined(HAL_USE_USB) || defined(__DOXYGEN__)
 +#define HAL_USE_USB                 FALSE
 +#endif
 +
 +/*===========================================================================*/
 +/* ADC driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Enables synchronous APIs.
 + * @note    Disabling this option saves both code and data space.
 + */
 +#if !defined(ADC_USE_WAIT) || defined(__DOXYGEN__)
 +#define ADC_USE_WAIT                TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the @p adcAcquireBus() and @p adcReleaseBus() APIs.
 + * @note    Disabling this option saves both code and data space.
 + */
 +#if !defined(ADC_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
 +#define ADC_USE_MUTUAL_EXCLUSION    TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* CAN driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Sleep mode related APIs inclusion switch.
 + */
 +#if !defined(CAN_USE_SLEEP_MODE) || defined(__DOXYGEN__)
 +#define CAN_USE_SLEEP_MODE          TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* I2C driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Enables the mutual exclusion APIs on the I2C bus.
 + */
 +#if !defined(I2C_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
 +#define I2C_USE_MUTUAL_EXCLUSION    TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* MAC driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Enables an event sources for incoming packets.
 + */
 +#if !defined(MAC_USE_ZERO_COPY) || defined(__DOXYGEN__)
 +#define MAC_USE_ZERO_COPY           FALSE
 +#endif
 +
 +/**
 + * @brief   Enables an event sources for incoming packets.
 + */
 +#if !defined(MAC_USE_EVENTS) || defined(__DOXYGEN__)
 +#define MAC_USE_EVENTS              TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* MMC_SPI driver related settings.                                          */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Delays insertions.
 + * @details If enabled this options inserts delays into the MMC waiting
 + *          routines releasing some extra CPU time for the threads with
 + *          lower priority, this may slow down the driver a bit however.
 + *          This option is recommended also if the SPI driver does not
 + *          use a DMA channel and heavily loads the CPU.
 + */
 +#if !defined(MMC_NICE_WAITING) || defined(__DOXYGEN__)
 +#define MMC_NICE_WAITING            TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* SDC driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Number of initialization attempts before rejecting the card.
 + * @note    Attempts are performed at 10mS intervals.
 + */
 +#if !defined(SDC_INIT_RETRY) || defined(__DOXYGEN__)
 +#define SDC_INIT_RETRY              100
 +#endif
 +
 +/**
 + * @brief   Include support for MMC cards.
 + * @note    MMC support is not yet implemented so this option must be kept
 + *          at @p FALSE.
 + */
 +#if !defined(SDC_MMC_SUPPORT) || defined(__DOXYGEN__)
 +#define SDC_MMC_SUPPORT             FALSE
 +#endif
 +
 +/**
 + * @brief   Delays insertions.
 + * @details If enabled this options inserts delays into the MMC waiting
 + *          routines releasing some extra CPU time for the threads with
 + *          lower priority, this may slow down the driver a bit however.
 + */
 +#if !defined(SDC_NICE_WAITING) || defined(__DOXYGEN__)
 +#define SDC_NICE_WAITING            TRUE
 +#endif
 +
 +/**
 + * @brief   Write timeout in milliseconds.
 + */
 +#if !defined(SDC_WRITE_TIMEOUT_MS) || defined(__DOXYGEN__)
 +#define SDC_WRITE_TIMEOUT_MS            250
 +#endif
 +
 +/**
 + * @brief   Write timeout in milliseconds.
 + */
 +#if !defined(SDC_READ_TIMEOUT_MS) || defined(__DOXYGEN__)
 +#define SDC_READ_TIMEOUT_MS             5
 +#endif
 +
 +/*===========================================================================*/
 +/* SERIAL driver related settings.                                           */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Default bit rate.
 + * @details Configuration parameter, this is the baud rate selected for the
 + *          default configuration.
 + */
 +#if !defined(SERIAL_DEFAULT_BITRATE) || defined(__DOXYGEN__)
 +#define SERIAL_DEFAULT_BITRATE      38400
 +#endif
 +
 +/**
 + * @brief   Serial buffers size.
 + * @details Configuration parameter, you can change the depth of the queue
 + *          buffers depending on the requirements of your application.
 + * @note    The default is 64 bytes for both the transmission and receive
 + *          buffers.
 + */
 +#if !defined(SERIAL_BUFFERS_SIZE) || defined(__DOXYGEN__)
 +#define SERIAL_BUFFERS_SIZE         16
 +#endif
 +
 +/*===========================================================================*/
 +/* SPI driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Enables synchronous APIs.
 + * @note    Disabling this option saves both code and data space.
 + */
 +#if !defined(SPI_USE_WAIT) || defined(__DOXYGEN__)
 +#define SPI_USE_WAIT                TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the @p spiAcquireBus() and @p spiReleaseBus() APIs.
 + * @note    Disabling this option saves both code and data space.
 + */
 +#if !defined(SPI_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
 +#define SPI_USE_MUTUAL_EXCLUSION    TRUE
 +#endif
 +
 +#endif /* _HALCONF_H_ */
 +
 +/** @} */
 diff --git a/testhal/STM32F4xx/RTC_FATTIME/main.c b/testhal/STM32F4xx/RTC_FATTIME/main.c new file mode 100644 index 000000000..3c031ade0 --- /dev/null +++ b/testhal/STM32F4xx/RTC_FATTIME/main.c @@ -0,0 +1,218 @@ +/*
 +    ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio
 +
 +    Licensed under the Apache License, Version 2.0 (the "License");
 +    you may not use this file except in compliance with the License.
 +    You may obtain a copy of the License at
 +
 +        http://www.apache.org/licenses/LICENSE-2.0
 +
 +    Unless required by applicable law or agreed to in writing, software
 +    distributed under the License is distributed on an "AS IS" BASIS,
 +    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 +    See the License for the specific language governing permissions and
 +    limitations under the License.
 +*/
 +
 +#include <string.h>
 +#include <time.h>
 +
 +#include "ch.h"
 +#include "hal.h"
 +
 +#include "shell.h"
 +#include "chprintf.h"
 +#include "chrtclib.h"
 +
 +#include "ff.h"
 +
 +/* FS object.*/
 +static FATFS SDC_FS;
 +
 +/* FS mounted and ready.*/
 +static bool_t fs_ready = FALSE;
 +
 +/**
 + *
 + */
 +bool_t sdc_lld_is_write_protected(SDCDriver *sdcp) {
 +  (void)sdcp;
 +  return FALSE;
 +}
 +
 +/**
 + *
 + */
 +bool_t sdc_lld_is_card_inserted(SDCDriver *sdcp) {
 +  (void)sdcp;
 +  return !palReadPad(GPIOE, GPIOE_SDIO_DETECT);
 +}
 +
 +/**
 + *
 + */
 +void cmd_sdiotest(BaseSequentialStream *chp, int argc, char *argv[]){
 +  (void)argc;
 +  (void)argv;
 +  FRESULT err;
 +  uint32_t clusters;
 +  FATFS *fsp;
 +  FIL FileObject;
 +  //FILINFO FileInfo;
 +  size_t bytes_written;
 +  struct tm timp;
 +
 +#if !HAL_USE_RTC
 +  chprintf(chp, "ERROR! Chibios compiled without RTC support.");
 +  chprintf(chp, "Enable HAL_USE_RCT in you halconf.h");
 +  chThdSleepMilliseconds(100);
 +  return;
 +#endif
 +
 +  chprintf(chp, "Trying to connect SDIO... ");
 +  chThdSleepMilliseconds(100);
 +
 +  if (!sdcConnect(&SDCD1)) {
 +    chprintf(chp, "OK\r\n");
 +    chprintf(chp, "Register working area for filesystem... ");
 +    chThdSleepMilliseconds(100);
 +    err = f_mount(0, &SDC_FS);
 +    if (err != FR_OK){
 +      chSysHalt();
 +    }
 +    else{
 +      fs_ready = TRUE;
 +      chprintf(chp, "OK\r\n");
 +    }
 +
 +    chprintf(chp, "Mounting filesystem... ");
 +    chThdSleepMilliseconds(100);
 +    err = f_getfree("/", &clusters, &fsp);
 +    if (err != FR_OK) {
 +      chSysHalt();
 +    }
 +    chprintf(chp, "OK\r\n");
 +    chprintf(chp,
 +             "FS: %lu free clusters, %lu sectors per cluster, %lu bytes free\r\n",
 +             clusters, (uint32_t)SDC_FS.csize,
 +             clusters * (uint32_t)SDC_FS.csize * (uint32_t)MMCSD_BLOCK_SIZE);
 +
 +    rtcGetTimeTm(&RTCD1, &timp);
 +    chprintf(chp, "Current RTC time is: ");
 +    chprintf(chp, "%u-%u-%u %u:%u:%u\r\n",
 +      timp.tm_year+1900, timp.tm_mon+1, timp.tm_mday, timp.tm_hour, timp.tm_min,
 +      timp.tm_sec);
 +
 +    chprintf(chp, "Creating empty file 'tmstmp.tst'... ");
 +    chThdSleepMilliseconds(100);
 +    err = f_open(&FileObject, "0:tmstmp.tst", FA_WRITE | FA_OPEN_ALWAYS);
 +    if (err != FR_OK) {
 +      chSysHalt();
 +    }
 +    chprintf(chp, "OK\r\n");
 +
 +    chprintf(chp, "Write some data in it... ");
 +    chThdSleepMilliseconds(100);
 +    err = f_write(&FileObject, "tst", sizeof("tst"), (void *)&bytes_written);
 +    if (err != FR_OK) {
 +      chSysHalt();
 +    }
 +    else
 +      chprintf(chp, "OK\r\n");
 +
 +    chprintf(chp, "Closing file 'tmstmp.tst'... ");
 +    chThdSleepMilliseconds(100);
 +    err = f_close(&FileObject);
 +    if (err != FR_OK) {
 +      chSysHalt();
 +    }
 +    else
 +      chprintf(chp, "OK\r\n");
 +
 +//    chprintf(chp, "Obtaining file info ... ");
 +//    chThdSleepMilliseconds(100);
 +//    err = f_stat("0:tmstmp.tst", &FileInfo);
 +//    if (err != FR_OK) {
 +//      chSysHalt();
 +//    }
 +//    else{
 +//      chprintf(chp, "OK\r\n");
 +//      chprintf(chp, "    Timestamp: %u-%u-%u %u:%u:%u\r\n",
 +//                         ((FileInfo.fdate >> 9) & 127) + 1980,
 +//                         (FileInfo.fdate >> 5) & 15,
 +//                         FileInfo.fdate & 31,
 +//                         (FileInfo.ftime >> 11) & 31,
 +//                         (FileInfo.ftime >> 5) & 63,
 +//                         (FileInfo.ftime & 31) * 2);
 +//    }
 +
 +    chprintf(chp, "Umounting filesystem... ");
 +    f_mount(0, NULL);
 +    chprintf(chp, "OK\r\n");
 +
 +    chprintf(chp, "Disconnecting from SDIO...");
 +    chThdSleepMilliseconds(100);
 +    if (sdcDisconnect(&SDCD1))
 +      chSysHalt();
 +    chprintf(chp, " OK\r\n");
 +    chprintf(chp, "------------------------------------------------------\r\n");
 +    chprintf(chp, "Now you can remove memory card and check timestamp on PC.\r\n");
 +    chThdSleepMilliseconds(100);
 +  }
 +  else{
 +    chSysHalt();
 +  }
 +}
 +
 +/*
 + * SDIO configuration.
 + */
 +static const SDCConfig sdccfg = {
 +  0
 +};
 +
 +/**
 + *
 + */
 +static SerialConfig ser_cfg = {
 +    115200,
 +    0,
 +    0,
 +    0,
 +};
 +static const ShellCommand commands[] = {
 +  {"sdiotest", cmd_sdiotest},
 +  {NULL, NULL}
 +};
 +static const ShellConfig shell_cfg1 = {
 +  (BaseSequentialStream *)&SD2,
 +  commands
 +};
 +
 +/*
 + * Application entry point.
 + */
 +int main(void) {
 +  halInit();
 +  chSysInit();
 +
 +  /* start debugging serial link */
 +  sdStart(&SD2, &ser_cfg);
 +  shellInit();
 +  static WORKING_AREA(waShell, 4096);
 +  shellCreateStatic(&shell_cfg1, waShell, sizeof(waShell), NORMALPRIO);
 +
 +  /*
 +   * Initializes the SDIO drivers.
 +   */
 +  sdcStart(&SDCD1, &sdccfg);
 +
 +  /*
 +   * Normal main() thread activity.
 +   * Blinking signaling about successful passing.
 +   */
 +  while (TRUE) {
 +    palTogglePad(GPIOB, GPIOB_LED_R);
 +    chThdSleepMilliseconds(100);
 +  }
 +}
 diff --git a/testhal/STM32F4xx/RTC_FATTIME/mcuconf.h b/testhal/STM32F4xx/RTC_FATTIME/mcuconf.h new file mode 100644 index 000000000..a8d51babe --- /dev/null +++ b/testhal/STM32F4xx/RTC_FATTIME/mcuconf.h @@ -0,0 +1,278 @@ +/*
 +    ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio
 +
 +    Licensed under the Apache License, Version 2.0 (the "License");
 +    you may not use this file except in compliance with the License.
 +    You may obtain a copy of the License at
 +
 +        http://www.apache.org/licenses/LICENSE-2.0
 +
 +    Unless required by applicable law or agreed to in writing, software
 +    distributed under the License is distributed on an "AS IS" BASIS,
 +    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 +    See the License for the specific language governing permissions and
 +    limitations under the License.
 +*/
 +
 +/*
 + * STM32F4xx drivers configuration.
 + * The following settings override the default settings present in
 + * the various device driver implementation headers.
 + * Note that the settings for each driver only have effect if the whole
 + * driver is enabled in halconf.h.
 + *
 + * IRQ priorities:
 + * 15...0       Lowest...Highest.
 + *
 + * DMA priorities:
 + * 0...3        Lowest...Highest.
 + */
 +
 +#define STM32F4xx_MCUCONF
 +
 +/*
 + * HAL driver system settings.
 + */
 +#define STM32_NO_INIT                       FALSE
 +#define STM32_HSI_ENABLED                   TRUE
 +#define STM32_LSI_ENABLED                   TRUE
 +#define STM32_HSE_ENABLED                   TRUE
 +#define STM32_LSE_ENABLED                   FALSE
 +#define STM32_CLOCK48_REQUIRED              TRUE
 +#define STM32_SW                            STM32_SW_PLL
 +#define STM32_PLLSRC                        STM32_PLLSRC_HSE
 +#define STM32_PLLM_VALUE                    8
 +#define STM32_PLLN_VALUE                    336
 +#define STM32_PLLP_VALUE                    2
 +#define STM32_PLLQ_VALUE                    7
 +#define STM32_HPRE                          STM32_HPRE_DIV1
 +#define STM32_PPRE1                         STM32_PPRE1_DIV4
 +#define STM32_PPRE2                         STM32_PPRE2_DIV2
 +#define STM32_RTCSEL                        STM32_RTCSEL_LSI
 +#define STM32_RTCPRE_VALUE                  8
 +#define STM32_MCO1SEL                       STM32_MCO1SEL_HSI
 +#define STM32_MCO1PRE                       STM32_MCO1PRE_DIV1
 +#define STM32_MCO2SEL                       STM32_MCO2SEL_SYSCLK
 +#define STM32_MCO2PRE                       STM32_MCO2PRE_DIV5
 +#define STM32_I2SSRC                        STM32_I2SSRC_CKIN
 +#define STM32_PLLI2SN_VALUE                 192
 +#define STM32_PLLI2SR_VALUE                 5
 +#define STM32_VOS                           STM32_VOS_HIGH
 +#define STM32_PVD_ENABLE                    FALSE
 +#define STM32_PLS                           STM32_PLS_LEV0
 +
 +/*
 + * ADC driver system settings.
 + */
 +#define STM32_ADC_ADCPRE                    ADC_CCR_ADCPRE_DIV4
 +#define STM32_ADC_USE_ADC1                  FALSE
 +#define STM32_ADC_USE_ADC2                  FALSE
 +#define STM32_ADC_USE_ADC3                  FALSE
 +#define STM32_ADC_ADC1_DMA_STREAM           STM32_DMA_STREAM_ID(2, 4)
 +#define STM32_ADC_ADC2_DMA_STREAM           STM32_DMA_STREAM_ID(2, 2)
 +#define STM32_ADC_ADC3_DMA_STREAM           STM32_DMA_STREAM_ID(2, 1)
 +#define STM32_ADC_ADC1_DMA_PRIORITY         2
 +#define STM32_ADC_ADC2_DMA_PRIORITY         2
 +#define STM32_ADC_ADC3_DMA_PRIORITY         2
 +#define STM32_ADC_IRQ_PRIORITY              6
 +#define STM32_ADC_ADC1_DMA_IRQ_PRIORITY     6
 +#define STM32_ADC_ADC2_DMA_IRQ_PRIORITY     6
 +#define STM32_ADC_ADC3_DMA_IRQ_PRIORITY     6
 +
 +/*
 + * CAN driver system settings.
 + */
 +#define STM32_CAN_USE_CAN1                  FALSE
 +#define STM32_CAN_USE_CAN2                  FALSE
 +#define STM32_CAN_CAN1_IRQ_PRIORITY         11
 +#define STM32_CAN_CAN2_IRQ_PRIORITY         11
 +
 +/*
 + * EXT driver system settings.
 + */
 +#define STM32_EXT_EXTI0_IRQ_PRIORITY        6
 +#define STM32_EXT_EXTI1_IRQ_PRIORITY        6
 +#define STM32_EXT_EXTI2_IRQ_PRIORITY        6
 +#define STM32_EXT_EXTI3_IRQ_PRIORITY        6
 +#define STM32_EXT_EXTI4_IRQ_PRIORITY        6
 +#define STM32_EXT_EXTI5_9_IRQ_PRIORITY      6
 +#define STM32_EXT_EXTI10_15_IRQ_PRIORITY    6
 +#define STM32_EXT_EXTI16_IRQ_PRIORITY       6
 +#define STM32_EXT_EXTI17_IRQ_PRIORITY       15
 +#define STM32_EXT_EXTI18_IRQ_PRIORITY       6
 +#define STM32_EXT_EXTI19_IRQ_PRIORITY       6
 +#define STM32_EXT_EXTI20_IRQ_PRIORITY       6
 +#define STM32_EXT_EXTI21_IRQ_PRIORITY       15
 +#define STM32_EXT_EXTI22_IRQ_PRIORITY       15
 +
 +/*
 + * GPT driver system settings.
 + */
 +#define STM32_GPT_USE_TIM1                  FALSE
 +#define STM32_GPT_USE_TIM2                  FALSE
 +#define STM32_GPT_USE_TIM3                  FALSE
 +#define STM32_GPT_USE_TIM4                  FALSE
 +#define STM32_GPT_USE_TIM5                  FALSE
 +#define STM32_GPT_USE_TIM6                  FALSE
 +#define STM32_GPT_USE_TIM7                  FALSE
 +#define STM32_GPT_USE_TIM8                  FALSE
 +#define STM32_GPT_USE_TIM9                  FALSE
 +#define STM32_GPT_USE_TIM11                 FALSE
 +#define STM32_GPT_USE_TIM12                 FALSE
 +#define STM32_GPT_USE_TIM14                 FALSE
 +#define STM32_GPT_TIM1_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM2_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM3_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM4_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM5_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM6_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM7_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM8_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM9_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM11_IRQ_PRIORITY        7
 +#define STM32_GPT_TIM12_IRQ_PRIORITY        7
 +#define STM32_GPT_TIM14_IRQ_PRIORITY        7
 +
 +/*
 + * I2C driver system settings.
 + */
 +#define STM32_I2C_USE_I2C1                  FALSE
 +#define STM32_I2C_USE_I2C2                  FALSE
 +#define STM32_I2C_USE_I2C3                  FALSE
 +#define STM32_I2C_I2C1_RX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 0)
 +#define STM32_I2C_I2C1_TX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 6)
 +#define STM32_I2C_I2C2_RX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 2)
 +#define STM32_I2C_I2C2_TX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 7)
 +#define STM32_I2C_I2C3_RX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 2)
 +#define STM32_I2C_I2C3_TX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 4)
 +#define STM32_I2C_I2C1_IRQ_PRIORITY         5
 +#define STM32_I2C_I2C2_IRQ_PRIORITY         5
 +#define STM32_I2C_I2C3_IRQ_PRIORITY         5
 +#define STM32_I2C_I2C1_DMA_PRIORITY         3
 +#define STM32_I2C_I2C2_DMA_PRIORITY         3
 +#define STM32_I2C_I2C3_DMA_PRIORITY         3
 +#define STM32_I2C_I2C1_DMA_ERROR_HOOK()     chSysHalt()
 +#define STM32_I2C_I2C2_DMA_ERROR_HOOK()     chSysHalt()
 +#define STM32_I2C_I2C3_DMA_ERROR_HOOK()     chSysHalt()
 +
 +/*
 + * ICU driver system settings.
 + */
 +#define STM32_ICU_USE_TIM1                  FALSE
 +#define STM32_ICU_USE_TIM2                  FALSE
 +#define STM32_ICU_USE_TIM3                  FALSE
 +#define STM32_ICU_USE_TIM4                  FALSE
 +#define STM32_ICU_USE_TIM5                  FALSE
 +#define STM32_ICU_USE_TIM8                  FALSE
 +#define STM32_ICU_USE_TIM9                  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
 +#define STM32_ICU_TIM8_IRQ_PRIORITY         7
 +#define STM32_ICU_TIM9_IRQ_PRIORITY         7
 +
 +/*
 + * MAC driver system settings.
 + */
 +#define STM32_MAC_TRANSMIT_BUFFERS          2
 +#define STM32_MAC_RECEIVE_BUFFERS           4
 +#define STM32_MAC_BUFFERS_SIZE              1522
 +#define STM32_MAC_PHY_TIMEOUT               100
 +#define STM32_MAC_ETH1_CHANGE_PHY_STATE     TRUE
 +#define STM32_MAC_ETH1_IRQ_PRIORITY         13
 +#define STM32_MAC_IP_CHECKSUM_OFFLOAD       0
 +
 +/*
 + * PWM driver system settings.
 + */
 +#define STM32_PWM_USE_ADVANCED              FALSE
 +#define STM32_PWM_USE_TIM1                  FALSE
 +#define STM32_PWM_USE_TIM2                  FALSE
 +#define STM32_PWM_USE_TIM3                  FALSE
 +#define STM32_PWM_USE_TIM4                  FALSE
 +#define STM32_PWM_USE_TIM5                  FALSE
 +#define STM32_PWM_USE_TIM8                  FALSE
 +#define STM32_PWM_USE_TIM9                  FALSE
 +#define STM32_PWM_TIM1_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM2_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM3_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM4_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM5_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM8_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM9_IRQ_PRIORITY         7
 +
 +/*
 + * SERIAL driver system settings.
 + */
 +#define STM32_SERIAL_USE_USART1             FALSE
 +#define STM32_SERIAL_USE_USART2             TRUE
 +#define STM32_SERIAL_USE_USART3             FALSE
 +#define STM32_SERIAL_USE_UART4              FALSE
 +#define STM32_SERIAL_USE_UART5              FALSE
 +#define STM32_SERIAL_USE_USART6             FALSE
 +#define STM32_SERIAL_USART1_PRIORITY        12
 +#define STM32_SERIAL_USART2_PRIORITY        12
 +#define STM32_SERIAL_USART3_PRIORITY        12
 +#define STM32_SERIAL_UART4_PRIORITY         12
 +#define STM32_SERIAL_UART5_PRIORITY         12
 +#define STM32_SERIAL_USART6_PRIORITY        12
 +
 +/*
 + * SPI driver system settings.
 + */
 +#define STM32_SPI_USE_SPI1                  FALSE
 +#define STM32_SPI_USE_SPI2                  FALSE
 +#define STM32_SPI_USE_SPI3                  FALSE
 +#define STM32_SPI_SPI1_RX_DMA_STREAM        STM32_DMA_STREAM_ID(2, 0)
 +#define STM32_SPI_SPI1_TX_DMA_STREAM        STM32_DMA_STREAM_ID(2, 3)
 +#define STM32_SPI_SPI2_RX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 3)
 +#define STM32_SPI_SPI2_TX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 4)
 +#define STM32_SPI_SPI3_RX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 0)
 +#define STM32_SPI_SPI3_TX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 7)
 +#define STM32_SPI_SPI1_DMA_PRIORITY         1
 +#define STM32_SPI_SPI2_DMA_PRIORITY         1
 +#define STM32_SPI_SPI3_DMA_PRIORITY         1
 +#define STM32_SPI_SPI1_IRQ_PRIORITY         10
 +#define STM32_SPI_SPI2_IRQ_PRIORITY         10
 +#define STM32_SPI_SPI3_IRQ_PRIORITY         10
 +#define STM32_SPI_DMA_ERROR_HOOK(spip)      chSysHalt()
 +
 +/*
 + * UART driver system settings.
 + */
 +#define STM32_UART_USE_USART1               FALSE
 +#define STM32_UART_USE_USART2               FALSE
 +#define STM32_UART_USE_USART3               FALSE
 +#define STM32_UART_USE_USART6               FALSE
 +#define STM32_UART_USART1_RX_DMA_STREAM     STM32_DMA_STREAM_ID(2, 5)
 +#define STM32_UART_USART1_TX_DMA_STREAM     STM32_DMA_STREAM_ID(2, 7)
 +#define STM32_UART_USART2_RX_DMA_STREAM     STM32_DMA_STREAM_ID(1, 5)
 +#define STM32_UART_USART2_TX_DMA_STREAM     STM32_DMA_STREAM_ID(1, 6)
 +#define STM32_UART_USART3_RX_DMA_STREAM     STM32_DMA_STREAM_ID(1, 1)
 +#define STM32_UART_USART3_TX_DMA_STREAM     STM32_DMA_STREAM_ID(1, 3)
 +#define STM32_UART_USART6_RX_DMA_STREAM     STM32_DMA_STREAM_ID(2, 2)
 +#define STM32_UART_USART6_TX_DMA_STREAM     STM32_DMA_STREAM_ID(2, 7)
 +#define STM32_UART_USART1_IRQ_PRIORITY      12
 +#define STM32_UART_USART2_IRQ_PRIORITY      12
 +#define STM32_UART_USART3_IRQ_PRIORITY      12
 +#define STM32_UART_USART6_IRQ_PRIORITY      12
 +#define STM32_UART_USART1_DMA_PRIORITY      0
 +#define STM32_UART_USART2_DMA_PRIORITY      0
 +#define STM32_UART_USART3_DMA_PRIORITY      0
 +#define STM32_UART_USART6_DMA_PRIORITY      0
 +#define STM32_UART_DMA_ERROR_HOOK(uartp)    chSysHalt()
 +
 +/*
 + * USB driver system settings.
 + */
 +#define STM32_USB_USE_OTG1                  FALSE
 +#define STM32_USB_USE_OTG2                  FALSE
 +#define STM32_USB_OTG1_IRQ_PRIORITY         14
 +#define STM32_USB_OTG2_IRQ_PRIORITY         14
 +#define STM32_USB_OTG1_RX_FIFO_SIZE         512
 +#define STM32_USB_OTG2_RX_FIFO_SIZE         1024
 +#define STM32_USB_OTG_THREAD_PRIO           LOWPRIO
 +#define STM32_USB_OTG_THREAD_STACK_SIZE     128
 +#define STM32_USB_OTGFIFO_FILL_BASEPRI      0
 diff --git a/testhal/STM32F4xx/RTC_FATTIME/readme.txt b/testhal/STM32F4xx/RTC_FATTIME/readme.txt new file mode 100644 index 000000000..b5036cd2c --- /dev/null +++ b/testhal/STM32F4xx/RTC_FATTIME/readme.txt @@ -0,0 +1,27 @@ +*****************************************************************************
 +** ChibiOS/RT HAL - SDC driver demo for STM32.                             **
 +*****************************************************************************
 +
 +** TARGET **
 +
 +The demo runs on an Olimex ST_STM3210E_EVAL board.
 +
 +** The Demo **
 +
 +The application demonstrates the use of the STM32 RTC driver for timestamping
 +files on FAT.
 +
 +** Build Procedure **
 +
 +The demo has been tested using the free Codesourcery GCC-based toolchain
 +and YAGARTO.
 +Just modify the TRGT line in the makefile in order to use different GCC ports.
 +
 +** Notes **
 +
 +Some files used by the demo are not part of ChibiOS/RT but are copyright of
 +ST Microelectronics and are licensed under a different license.
 +Also note that not all the files present in the ST library are distributed
 +with ChibiOS/RT, you can find the whole library on the ST web site:
 +
 +                             http://www.st.com
 diff --git a/testhal/STM32F4xx/SDC/.cproject b/testhal/STM32F4xx/SDC/.cproject new file mode 100644 index 000000000..5315ed60f --- /dev/null +++ b/testhal/STM32F4xx/SDC/.cproject @@ -0,0 +1,51 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?>
 +<?fileVersion 4.0.0?>
 +
 +<cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
 +	<storageModule moduleId="org.eclipse.cdt.core.settings">
 +		<cconfiguration id="0.672133027">
 +			<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="0.672133027" moduleId="org.eclipse.cdt.core.settings" name="Default">
 +				<externalSettings/>
 +				<extensions>
 +					<extension id="org.eclipse.cdt.core.VCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 +					<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 +					<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
 +					<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 +					<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 +					<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 +				</extensions>
 +			</storageModule>
 +			<storageModule moduleId="cdtBuildSystem" version="4.0.0">
 +				<configuration artifactName="${ProjName}" buildProperties="" description="" id="0.672133027" name="Default" parent="org.eclipse.cdt.build.core.prefbase.cfg">
 +					<folderInfo id="0.672133027." name="/" resourcePath="">
 +						<toolChain id="org.eclipse.cdt.build.core.prefbase.toolchain.676095100" name="No ToolChain" resourceTypeBasedDiscovery="false" superClass="org.eclipse.cdt.build.core.prefbase.toolchain">
 +							<targetPlatform id="org.eclipse.cdt.build.core.prefbase.toolchain.676095100.1374464963" name=""/>
 +							<builder id="org.eclipse.cdt.build.core.settings.default.builder.1731631173" keepEnvironmentInBuildfile="false" managedBuildOn="false" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="org.eclipse.cdt.build.core.settings.default.builder"/>
 +							<tool id="org.eclipse.cdt.build.core.settings.holder.libs.1789761826" name="holder for library settings" superClass="org.eclipse.cdt.build.core.settings.holder.libs"/>
 +							<tool id="org.eclipse.cdt.build.core.settings.holder.668245113" name="Assembly" superClass="org.eclipse.cdt.build.core.settings.holder">
 +								<inputType id="org.eclipse.cdt.build.core.settings.holder.inType.676695686" languageId="org.eclipse.cdt.core.assembly" languageName="Assembly" sourceContentType="org.eclipse.cdt.core.asmSource" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
 +							</tool>
 +							<tool id="org.eclipse.cdt.build.core.settings.holder.832833306" name="GNU C++" superClass="org.eclipse.cdt.build.core.settings.holder">
 +								<inputType id="org.eclipse.cdt.build.core.settings.holder.inType.156584600" languageId="org.eclipse.cdt.core.g++" languageName="GNU C++" sourceContentType="org.eclipse.cdt.core.cxxSource,org.eclipse.cdt.core.cxxHeader" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
 +							</tool>
 +							<tool id="org.eclipse.cdt.build.core.settings.holder.161488117" name="GNU C" superClass="org.eclipse.cdt.build.core.settings.holder">
 +								<inputType id="org.eclipse.cdt.build.core.settings.holder.inType.1950781878" languageId="org.eclipse.cdt.core.gcc" languageName="GNU C" sourceContentType="org.eclipse.cdt.core.cSource,org.eclipse.cdt.core.cHeader" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
 +							</tool>
 +						</toolChain>
 +					</folderInfo>
 +				</configuration>
 +			</storageModule>
 +			<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
 +		</cconfiguration>
 +	</storageModule>
 +	<storageModule moduleId="cdtBuildSystem" version="4.0.0">
 +		<project id="STM32F4xx-SDC.null.883575264" name="STM32F4xx-SDC"/>
 +	</storageModule>
 +	<storageModule moduleId="scannerConfiguration">
 +		<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
 +		<scannerConfigBuildInfo instanceId="0.672133027">
 +			<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile"/>
 +		</scannerConfigBuildInfo>
 +	</storageModule>
 +	<storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
 +</cproject>
 diff --git a/testhal/STM32F4xx/SDC/.project b/testhal/STM32F4xx/SDC/.project new file mode 100644 index 000000000..630877d95 --- /dev/null +++ b/testhal/STM32F4xx/SDC/.project @@ -0,0 +1,43 @@ +<?xml version="1.0" encoding="UTF-8"?>
 +<projectDescription>
 +	<name>STM32F4xx-SDC</name>
 +	<comment></comment>
 +	<projects>
 +	</projects>
 +	<buildSpec>
 +		<buildCommand>
 +			<name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
 +			<triggers>clean,full,incremental,</triggers>
 +			<arguments>
 +			</arguments>
 +		</buildCommand>
 +		<buildCommand>
 +			<name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
 +			<triggers>full,incremental,</triggers>
 +			<arguments>
 +			</arguments>
 +		</buildCommand>
 +	</buildSpec>
 +	<natures>
 +		<nature>org.eclipse.cdt.core.cnature</nature>
 +		<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
 +		<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
 +	</natures>
 +	<linkedResources>
 +		<link>
 +			<name>board</name>
 +			<type>2</type>
 +			<locationURI>CHIBIOS/boards/ST_STM32F4_DISCOVERY</locationURI>
 +		</link>
 +		<link>
 +			<name>fatfs</name>
 +			<type>2</type>
 +			<locationURI>CHIBIOS/ext/fatfs</locationURI>
 +		</link>
 +		<link>
 +			<name>os</name>
 +			<type>2</type>
 +			<locationURI>CHIBIOS/os</locationURI>
 +		</link>
 +	</linkedResources>
 +</projectDescription>
 diff --git a/testhal/STM32F4xx/SDC/Makefile b/testhal/STM32F4xx/SDC/Makefile new file mode 100644 index 000000000..b22e616e5 --- /dev/null +++ b/testhal/STM32F4xx/SDC/Makefile @@ -0,0 +1,230 @@ +##############################################################################
 +# Build global options
 +# NOTE: Can be overridden externally.
 +#
 +
 +# Compiler options here.
 +ifeq ($(USE_OPT),)
 +  USE_OPT = -O0 -ggdb -fomit-frame-pointer -falign-functions=16
 +endif
 +
 +# C specific options here (added to USE_OPT).
 +ifeq ($(USE_COPT),)
 +  USE_COPT = 
 +endif
 +
 +# C++ specific options here (added to USE_OPT).
 +ifeq ($(USE_CPPOPT),)
 +  USE_CPPOPT = -fno-rtti
 +endif
 +
 +# Enable this if you want the linker to remove unused code and data
 +ifeq ($(USE_LINK_GC),)
 +  USE_LINK_GC = yes
 +endif
 +
 +# If enabled, this option allows to compile the application in THUMB mode.
 +ifeq ($(USE_THUMB),)
 +  USE_THUMB = yes
 +endif
 +
 +# Enable this if you want to see the full log while compiling.
 +ifeq ($(USE_VERBOSE_COMPILE),)
 +  USE_VERBOSE_COMPILE = no
 +endif
 +
 +#
 +# Build global options
 +##############################################################################
 +
 +##############################################################################
 +# Architecture or project specific options
 +#
 +
 +# Enables the use of FPU on Cortex-M4.
 +# Enable this if you really want to use the STM FWLib.
 +ifeq ($(USE_FPU),)
 +  USE_FPU = no
 +endif
 +
 +# Enable this if you really want to use the STM FWLib.
 +ifeq ($(USE_FWLIB),)
 +  USE_FWLIB = no
 +endif
 +
 +#
 +# Architecture or project specific options
 +##############################################################################
 +
 +##############################################################################
 +# Project, sources and paths
 +#
 +
 +# Define project name here
 +PROJECT = ch
 +
 +# Define linker script file here
 +LDSCRIPT= ch.ld
 +
 +# Imported source files and paths
 +CHIBIOS = ../../..
 +include $(CHIBIOS)/boards/NONSTANDARD_STM32F4_BARTHESS1/board.mk
 +include $(CHIBIOS)/os/hal/platforms/STM32F4xx/platform.mk
 +include $(CHIBIOS)/os/hal/hal.mk
 +include $(CHIBIOS)/os/ports/GCC/ARMCMx/STM32F4xx/port.mk
 +include $(CHIBIOS)/os/kernel/kernel.mk
 +include $(CHIBIOS)/os/various/fatfs_bindings/fatfs.mk
 +#include $(CHIBIOS)/test/test.mk
 +
 +# Define linker script file here
 +LDSCRIPT= $(PORTLD)/STM32F407xG.ld
 +
 +# C sources that can be compiled in ARM or THUMB mode depending on the global
 +# setting.
 +CSRC = $(PORTSRC) \
 +       $(KERNSRC) \
 +       $(TESTSRC) \
 +       $(HALSRC) \
 +       $(PLATFORMSRC) \
 +       $(BOARDSRC) \
 +       $(FATFSSRC) \
 +       $(CHIBIOS)/os/various/evtimer.c \
 +       $(CHIBIOS)/os/various/syscalls.c \
 +       $(CHIBIOS)/os/various/shell.c \
 +       $(CHIBIOS)/os/various/chprintf.c \
 +       main.c
 +
 +# C++ sources that can be compiled in ARM or THUMB mode depending on the global
 +# setting.
 +CPPSRC =
 +
 +# C sources to be compiled in ARM mode regardless of the global setting.
 +# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler
 +#       option that results in lower performance and larger code size.
 +ACSRC =
 +
 +# C++ sources to be compiled in ARM mode regardless of the global setting.
 +# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler
 +#       option that results in lower performance and larger code size.
 +ACPPSRC =
 +
 +# C sources to be compiled in THUMB mode regardless of the global setting.
 +# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler
 +#       option that results in lower performance and larger code size.
 +TCSRC =
 +
 +# C sources to be compiled in THUMB mode regardless of the global setting.
 +# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler
 +#       option that results in lower performance and larger code size.
 +TCPPSRC =
 +
 +# List ASM source files here
 +ASMSRC = $(PORTASM)
 +
 +INCDIR = $(PORTINC) $(KERNINC) $(TESTINC) \
 +         $(HALINC) $(PLATFORMINC) $(BOARDINC) \
 +         $(CHIBIOS)/os/various  $(FATFSINC) \
 +         $(CHIBIOS)/os/various
 +
 +#
 +# Project, sources and paths
 +##############################################################################
 +
 +##############################################################################
 +# Compiler settings
 +#
 +
 +MCU  = cortex-m4
 +
 +#TRGT = arm-elf-
 +TRGT = arm-none-eabi-
 +CC   = $(TRGT)gcc
 +CPPC = $(TRGT)g++
 +# Enable loading with g++ only if you need C++ runtime support.
 +# NOTE: You can use C++ even without C++ support if you are careful. C++
 +#       runtime support makes code size explode.
 +LD   = $(TRGT)gcc
 +#LD   = $(TRGT)g++
 +CP   = $(TRGT)objcopy
 +AS   = $(TRGT)gcc -x assembler-with-cpp
 +OD   = $(TRGT)objdump
 +HEX  = $(CP) -O ihex
 +BIN  = $(CP) -O binary
 +
 +# ARM-specific options here
 +AOPT =
 +
 +# THUMB-specific options here
 +TOPT = -mthumb -DTHUMB
 +
 +# Define C warning options here
 +CWARN = -Wall -Wextra -Wstrict-prototypes
 +
 +# Define C++ warning options here
 +CPPWARN = -Wall -Wextra
 +
 +#
 +# Compiler settings
 +##############################################################################
 +
 +##############################################################################
 +# Start of default section
 +#
 +
 +# List all default C defines here, like -D_DEBUG=1
 +DDEFS =
 +
 +# List all default ASM defines here, like -D_DEBUG=1
 +DADEFS =
 +
 +# List all default directories to look for include files here
 +DINCDIR =
 +
 +# List the default directory to look for the libraries here
 +DLIBDIR =
 +
 +# List all default libraries here
 +DLIBS =
 +
 +#
 +# End of default section
 +##############################################################################
 +
 +##############################################################################
 +# Start of user section
 +#
 +
 +# List all user C define here, like -D_DEBUG=1
 +UDEFS =
 +
 +# Define ASM defines here
 +UADEFS =
 +
 +# List all user directories here
 +UINCDIR =
 +
 +# List the user directory to look for the libraries here
 +ULIBDIR =
 +
 +# List all user libraries here
 +ULIBS =
 +
 +#
 +# End of user defines
 +##############################################################################
 +
 +ifeq ($(USE_FPU),yes)
 +  USE_OPT += -mfloat-abi=softfp -mfpu=fpv4-sp-d16 -fsingle-precision-constant
 +  DDEFS += -DCORTEX_USE_FPU=TRUE
 +else
 +  DDEFS += -DCORTEX_USE_FPU=FALSE
 +endif
 +
 +ifeq ($(USE_FWLIB),yes)
 +  include $(CHIBIOS)/ext/stm32lib/stm32lib.mk
 +  CSRC += $(STM32SRC)
 +  INCDIR += $(STM32INC)
 +  USE_OPT += -DUSE_STDPERIPH_DRIVER
 +endif
 +
 +include $(CHIBIOS)/os/ports/GCC/ARMCMx/rules.mk
 diff --git a/testhal/STM32F4xx/SDC/chconf.h b/testhal/STM32F4xx/SDC/chconf.h new file mode 100644 index 000000000..868377751 --- /dev/null +++ b/testhal/STM32F4xx/SDC/chconf.h @@ -0,0 +1,534 @@ +/*
 +    ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio
 +
 +    Licensed under the Apache License, Version 2.0 (the "License");
 +    you may not use this file except in compliance with the License.
 +    You may obtain a copy of the License at
 +
 +        http://www.apache.org/licenses/LICENSE-2.0
 +
 +    Unless required by applicable law or agreed to in writing, software
 +    distributed under the License is distributed on an "AS IS" BASIS,
 +    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 +    See the License for the specific language governing permissions and
 +    limitations under the License.
 +*/
 +
 +/**
 + * @file    templates/chconf.h
 + * @brief   Configuration file template.
 + * @details A copy of this file must be placed in each project directory, it
 + *          contains the application specific kernel settings.
 + *
 + * @addtogroup config
 + * @details Kernel related settings and hooks.
 + * @{
 + */
 +
 +#ifndef _CHCONF_H_
 +#define _CHCONF_H_
 +
 +#define PORT_IDLE_THREAD_STACK_SIZE     32
 +#define CORTEX_USE_FPU                  FALSE
 +
 +/*===========================================================================*/
 +/**
 + * @name Kernel parameters and options
 + * @{
 + */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   System tick frequency.
 + * @details Frequency of the system timer that drives the system ticks. This
 + *          setting also defines the system tick time unit.
 + */
 +#if !defined(CH_FREQUENCY) || defined(__DOXYGEN__)
 +#define CH_FREQUENCY                    1000
 +#endif
 +
 +/**
 + * @brief   Round robin interval.
 + * @details This constant is the number of system ticks allowed for the
 + *          threads before preemption occurs. Setting this value to zero
 + *          disables the preemption for threads with equal priority and the
 + *          round robin becomes cooperative. Note that higher priority
 + *          threads can still preempt, the kernel is always preemptive.
 + *
 + * @note    Disabling the round robin preemption makes the kernel more compact
 + *          and generally faster.
 + */
 +#if !defined(CH_TIME_QUANTUM) || defined(__DOXYGEN__)
 +#define CH_TIME_QUANTUM                 20
 +#endif
 +
 +/**
 + * @brief   Managed RAM size.
 + * @details Size of the RAM area to be managed by the OS. If set to zero
 + *          then the whole available RAM is used. The core memory is made
 + *          available to the heap allocator and/or can be used directly through
 + *          the simplified core memory allocator.
 + *
 + * @note    In order to let the OS manage the whole RAM the linker script must
 + *          provide the @p __heap_base__ and @p __heap_end__ symbols.
 + * @note    Requires @p CH_USE_MEMCORE.
 + */
 +#if !defined(CH_MEMCORE_SIZE) || defined(__DOXYGEN__)
 +#define CH_MEMCORE_SIZE                 0
 +#endif
 +
 +/**
 + * @brief   Idle thread automatic spawn suppression.
 + * @details When this option is activated the function @p chSysInit()
 + *          does not spawn the idle thread automatically. The application has
 + *          then the responsibility to do one of the following:
 + *          - Spawn a custom idle thread at priority @p IDLEPRIO.
 + *          - Change the main() thread priority to @p IDLEPRIO then enter
 + *            an endless loop. In this scenario the @p main() thread acts as
 + *            the idle thread.
 + *          .
 + * @note    Unless an idle thread is spawned the @p main() thread must not
 + *          enter a sleep state.
 + */
 +#if !defined(CH_NO_IDLE_THREAD) || defined(__DOXYGEN__)
 +#define CH_NO_IDLE_THREAD               FALSE
 +#endif
 +
 +/** @} */
 +
 +/*===========================================================================*/
 +/**
 + * @name Performance options
 + * @{
 + */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   OS optimization.
 + * @details If enabled then time efficient rather than space efficient code
 + *          is used when two possible implementations exist.
 + *
 + * @note    This is not related to the compiler optimization options.
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_OPTIMIZE_SPEED) || defined(__DOXYGEN__)
 +#define CH_OPTIMIZE_SPEED               TRUE
 +#endif
 +
 +/** @} */
 +
 +/*===========================================================================*/
 +/**
 + * @name Subsystem options
 + * @{
 + */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Threads registry APIs.
 + * @details If enabled then the registry APIs are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_REGISTRY) || defined(__DOXYGEN__)
 +#define CH_USE_REGISTRY                 TRUE
 +#endif
 +
 +/**
 + * @brief   Threads synchronization APIs.
 + * @details If enabled then the @p chThdWait() function is included in
 + *          the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_WAITEXIT) || defined(__DOXYGEN__)
 +#define CH_USE_WAITEXIT                 TRUE
 +#endif
 +
 +/**
 + * @brief   Semaphores APIs.
 + * @details If enabled then the Semaphores APIs are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_SEMAPHORES) || defined(__DOXYGEN__)
 +#define CH_USE_SEMAPHORES               TRUE
 +#endif
 +
 +/**
 + * @brief   Semaphores queuing mode.
 + * @details If enabled then the threads are enqueued on semaphores by
 + *          priority rather than in FIFO order.
 + *
 + * @note    The default is @p FALSE. Enable this if you have special requirements.
 + * @note    Requires @p CH_USE_SEMAPHORES.
 + */
 +#if !defined(CH_USE_SEMAPHORES_PRIORITY) || defined(__DOXYGEN__)
 +#define CH_USE_SEMAPHORES_PRIORITY      FALSE
 +#endif
 +
 +/**
 + * @brief   Atomic semaphore API.
 + * @details If enabled then the semaphores the @p chSemSignalWait() API
 + *          is included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_SEMAPHORES.
 + */
 +#if !defined(CH_USE_SEMSW) || defined(__DOXYGEN__)
 +#define CH_USE_SEMSW                    TRUE
 +#endif
 +
 +/**
 + * @brief   Mutexes APIs.
 + * @details If enabled then the mutexes APIs are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_MUTEXES) || defined(__DOXYGEN__)
 +#define CH_USE_MUTEXES                  TRUE
 +#endif
 +
 +/**
 + * @brief   Conditional Variables APIs.
 + * @details If enabled then the conditional variables APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_MUTEXES.
 + */
 +#if !defined(CH_USE_CONDVARS) || defined(__DOXYGEN__)
 +#define CH_USE_CONDVARS                 TRUE
 +#endif
 +
 +/**
 + * @brief   Conditional Variables APIs with timeout.
 + * @details If enabled then the conditional variables APIs with timeout
 + *          specification are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_CONDVARS.
 + */
 +#if !defined(CH_USE_CONDVARS_TIMEOUT) || defined(__DOXYGEN__)
 +#define CH_USE_CONDVARS_TIMEOUT         TRUE
 +#endif
 +
 +/**
 + * @brief   Events Flags APIs.
 + * @details If enabled then the event flags APIs are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_EVENTS) || defined(__DOXYGEN__)
 +#define CH_USE_EVENTS                   TRUE
 +#endif
 +
 +/**
 + * @brief   Events Flags APIs with timeout.
 + * @details If enabled then the events APIs with timeout specification
 + *          are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_EVENTS.
 + */
 +#if !defined(CH_USE_EVENTS_TIMEOUT) || defined(__DOXYGEN__)
 +#define CH_USE_EVENTS_TIMEOUT           TRUE
 +#endif
 +
 +/**
 + * @brief   Synchronous Messages APIs.
 + * @details If enabled then the synchronous messages APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_MESSAGES) || defined(__DOXYGEN__)
 +#define CH_USE_MESSAGES                 TRUE
 +#endif
 +
 +/**
 + * @brief   Synchronous Messages queuing mode.
 + * @details If enabled then messages are served by priority rather than in
 + *          FIFO order.
 + *
 + * @note    The default is @p FALSE. Enable this if you have special requirements.
 + * @note    Requires @p CH_USE_MESSAGES.
 + */
 +#if !defined(CH_USE_MESSAGES_PRIORITY) || defined(__DOXYGEN__)
 +#define CH_USE_MESSAGES_PRIORITY        FALSE
 +#endif
 +
 +/**
 + * @brief   Mailboxes APIs.
 + * @details If enabled then the asynchronous messages (mailboxes) APIs are
 + *          included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_SEMAPHORES.
 + */
 +#if !defined(CH_USE_MAILBOXES) || defined(__DOXYGEN__)
 +#define CH_USE_MAILBOXES                TRUE
 +#endif
 +
 +/**
 + * @brief   I/O Queues APIs.
 + * @details If enabled then the I/O queues APIs are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_QUEUES) || defined(__DOXYGEN__)
 +#define CH_USE_QUEUES                   TRUE
 +#endif
 +
 +/**
 + * @brief   Core Memory Manager APIs.
 + * @details If enabled then the core memory manager APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_MEMCORE) || defined(__DOXYGEN__)
 +#define CH_USE_MEMCORE                  TRUE
 +#endif
 +
 +/**
 + * @brief   Heap Allocator APIs.
 + * @details If enabled then the memory heap allocator APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_MEMCORE and either @p CH_USE_MUTEXES or
 + *          @p CH_USE_SEMAPHORES.
 + * @note    Mutexes are recommended.
 + */
 +#if !defined(CH_USE_HEAP) || defined(__DOXYGEN__)
 +#define CH_USE_HEAP                     TRUE
 +#endif
 +
 +/**
 + * @brief   C-runtime allocator.
 + * @details If enabled the the heap allocator APIs just wrap the C-runtime
 + *          @p malloc() and @p free() functions.
 + *
 + * @note    The default is @p FALSE.
 + * @note    Requires @p CH_USE_HEAP.
 + * @note    The C-runtime may or may not require @p CH_USE_MEMCORE, see the
 + *          appropriate documentation.
 + */
 +#if !defined(CH_USE_MALLOC_HEAP) || defined(__DOXYGEN__)
 +#define CH_USE_MALLOC_HEAP              FALSE
 +#endif
 +
 +/**
 + * @brief   Memory Pools Allocator APIs.
 + * @details If enabled then the memory pools allocator APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_MEMPOOLS) || defined(__DOXYGEN__)
 +#define CH_USE_MEMPOOLS                 TRUE
 +#endif
 +
 +/**
 + * @brief   Dynamic Threads APIs.
 + * @details If enabled then the dynamic threads creation APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_WAITEXIT.
 + * @note    Requires @p CH_USE_HEAP and/or @p CH_USE_MEMPOOLS.
 + */
 +#if !defined(CH_USE_DYNAMIC) || defined(__DOXYGEN__)
 +#define CH_USE_DYNAMIC                  TRUE
 +#endif
 +
 +/** @} */
 +
 +/*===========================================================================*/
 +/**
 + * @name Debug options
 + * @{
 + */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Debug option, system state check.
 + * @details If enabled the correct call protocol for system APIs is checked
 + *          at runtime.
 + *
 + * @note    The default is @p FALSE.
 + */
 +#if !defined(CH_DBG_SYSTEM_STATE_CHECK) || defined(__DOXYGEN__)
 +#define CH_DBG_SYSTEM_STATE_CHECK       TRUE
 +#endif
 +
 +/**
 + * @brief   Debug option, parameters checks.
 + * @details If enabled then the checks on the API functions input
 + *          parameters are activated.
 + *
 + * @note    The default is @p FALSE.
 + */
 +#if !defined(CH_DBG_ENABLE_CHECKS) || defined(__DOXYGEN__)
 +#define CH_DBG_ENABLE_CHECKS            TRUE
 +#endif
 +
 +/**
 + * @brief   Debug option, consistency checks.
 + * @details If enabled then all the assertions in the kernel code are
 + *          activated. This includes consistency checks inside the kernel,
 + *          runtime anomalies and port-defined checks.
 + *
 + * @note    The default is @p FALSE.
 + */
 +#if !defined(CH_DBG_ENABLE_ASSERTS) || defined(__DOXYGEN__)
 +#define CH_DBG_ENABLE_ASSERTS           TRUE
 +#endif
 +
 +/**
 + * @brief   Debug option, trace buffer.
 + * @details If enabled then the context switch circular trace buffer is
 + *          activated.
 + *
 + * @note    The default is @p FALSE.
 + */
 +#if !defined(CH_DBG_ENABLE_TRACE) || defined(__DOXYGEN__)
 +#define CH_DBG_ENABLE_TRACE             TRUE
 +#endif
 +
 +/**
 + * @brief   Debug option, stack checks.
 + * @details If enabled then a runtime stack check is performed.
 + *
 + * @note    The default is @p FALSE.
 + * @note    The stack check is performed in a architecture/port dependent way.
 + *          It may not be implemented or some ports.
 + * @note    The default failure mode is to halt the system with the global
 + *          @p panic_msg variable set to @p NULL.
 + */
 +#if !defined(CH_DBG_ENABLE_STACK_CHECK) || defined(__DOXYGEN__)
 +#define CH_DBG_ENABLE_STACK_CHECK       TRUE
 +#endif
 +
 +/**
 + * @brief   Debug option, stacks initialization.
 + * @details If enabled then the threads working area is filled with a byte
 + *          value when a thread is created. This can be useful for the
 + *          runtime measurement of the used stack.
 + *
 + * @note    The default is @p FALSE.
 + */
 +#if !defined(CH_DBG_FILL_THREADS) || defined(__DOXYGEN__)
 +#define CH_DBG_FILL_THREADS             TRUE
 +#endif
 +
 +/**
 + * @brief   Debug option, threads profiling.
 + * @details If enabled then a field is added to the @p Thread structure that
 + *          counts the system ticks occurred while executing the thread.
 + *
 + * @note    The default is @p TRUE.
 + * @note    This debug option is defaulted to TRUE because it is required by
 + *          some test cases into the test suite.
 + */
 +#if !defined(CH_DBG_THREADS_PROFILING) || defined(__DOXYGEN__)
 +#define CH_DBG_THREADS_PROFILING        TRUE
 +#endif
 +
 +/** @} */
 +
 +/*===========================================================================*/
 +/**
 + * @name Kernel hooks
 + * @{
 + */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Threads descriptor structure extension.
 + * @details User fields added to the end of the @p Thread structure.
 + */
 +#if !defined(THREAD_EXT_FIELDS) || defined(__DOXYGEN__)
 +#define THREAD_EXT_FIELDS                                                   \
 +  /* Add threads custom fields here.*/
 +#endif
 +
 +/**
 + * @brief   Threads initialization hook.
 + * @details User initialization code added to the @p chThdInit() API.
 + *
 + * @note    It is invoked from within @p chThdInit() and implicitly from all
 + *          the threads creation APIs.
 + */
 +#if !defined(THREAD_EXT_INIT_HOOK) || defined(__DOXYGEN__)
 +#define THREAD_EXT_INIT_HOOK(tp) {                                          \
 +  /* Add threads initialization code here.*/                                \
 +}
 +#endif
 +
 +/**
 + * @brief   Threads finalization hook.
 + * @details User finalization code added to the @p chThdExit() API.
 + *
 + * @note    It is inserted into lock zone.
 + * @note    It is also invoked when the threads simply return in order to
 + *          terminate.
 + */
 +#if !defined(THREAD_EXT_EXIT_HOOK) || defined(__DOXYGEN__)
 +#define THREAD_EXT_EXIT_HOOK(tp) {                                          \
 +  /* Add threads finalization code here.*/                                  \
 +}
 +#endif
 +
 +/**
 + * @brief   Context switch hook.
 + * @details This hook is invoked just before switching between threads.
 + */
 +#if !defined(THREAD_CONTEXT_SWITCH_HOOK) || defined(__DOXYGEN__)
 +#define THREAD_CONTEXT_SWITCH_HOOK(ntp, otp) {                              \
 +  /* System halt code here.*/                                               \
 +}
 +#endif
 +
 +/**
 + * @brief   Idle Loop hook.
 + * @details This hook is continuously invoked by the idle thread loop.
 + */
 +#if !defined(IDLE_LOOP_HOOK) || defined(__DOXYGEN__)
 +#define IDLE_LOOP_HOOK() {                                                  \
 +  /* Idle loop code here.*/                                                 \
 +}
 +#endif
 +
 +/**
 + * @brief   System tick event hook.
 + * @details This hook is invoked in the system tick handler immediately
 + *          after processing the virtual timers queue.
 + */
 +#if !defined(SYSTEM_TICK_EVENT_HOOK) || defined(__DOXYGEN__)
 +#define SYSTEM_TICK_EVENT_HOOK() {                                          \
 +  /* System tick event code here.*/                                         \
 +}
 +#endif
 +
 +/**
 + * @brief   System halt hook.
 + * @details This hook is invoked in case to a system halting error before
 + *          the system is halted.
 + */
 +#if !defined(SYSTEM_HALT_HOOK) || defined(__DOXYGEN__)
 +#define SYSTEM_HALT_HOOK() {                                                \
 +  /* System halt code here.*/                                               \
 +}
 +#endif
 +
 +/** @} */
 +
 +/*===========================================================================*/
 +/* Port-specific settings (override port settings defaulted in chcore.h).    */
 +/*===========================================================================*/
 +
 +#endif  /* _CHCONF_H_ */
 +
 +/** @} */
 diff --git a/testhal/STM32F4xx/SDC/csd.txt b/testhal/STM32F4xx/SDC/csd.txt new file mode 100644 index 000000000..eefe5274c --- /dev/null +++ b/testhal/STM32F4xx/SDC/csd.txt @@ -0,0 +1,7 @@ +127 ...                                                                                                                                         ... 0
 +
 +00000000 00101110 00000000 00110010  -  01011011 01011010 10100011 10100000  -  11111111111111111111111110000000  -  00001010100000000000000010001110 kingmax 2 GB
 +00000000 00101110 00000000 00110010  -  01011011 01011010 10000011 10101001  -  11111111111111111111111110000000  -  00010110100000000000000010010000 kingstone 2 GB
 +01000000 00001110 00000000 00110010  -  01011011 01011001 00000000 00000000  -  00111011010010110111111110000000  -  00001010010000000100000001000000 samsung sdhc 8 GB
 +00000000 00100110 00000000 00110010  -  01011111 01011010 10000011 10101110  -  11111110111110111100111111111111  -  10010010100000000100000011011110 noname 2 GB
 +
 diff --git a/testhal/STM32F4xx/SDC/ffconf.h b/testhal/STM32F4xx/SDC/ffconf.h new file mode 100644 index 000000000..9073f2286 --- /dev/null +++ b/testhal/STM32F4xx/SDC/ffconf.h @@ -0,0 +1,193 @@ +/* CHIBIOS FIX */
 +#include "ch.h"
 +
 +/*---------------------------------------------------------------------------/
 +/  FatFs - FAT file system module configuration file  R0.09  (C)ChaN, 2011
 +/----------------------------------------------------------------------------/
 +/
 +/ CAUTION! Do not forget to make clean the project after any changes to
 +/ the configuration options.
 +/
 +/----------------------------------------------------------------------------*/
 +#ifndef _FFCONF
 +#define _FFCONF 6502	/* Revision ID */
 +
 +
 +/*---------------------------------------------------------------------------/
 +/ Functions and Buffer Configurations
 +/----------------------------------------------------------------------------*/
 +
 +#define	_FS_TINY		0	/* 0:Normal or 1:Tiny */
 +/* When _FS_TINY is set to 1, FatFs uses the sector buffer in the file system
 +/  object instead of the sector buffer in the individual file object for file
 +/  data transfer. This reduces memory consumption 512 bytes each file object. */
 +
 +
 +#define _FS_READONLY	0	/* 0:Read/Write or 1:Read only */
 +/* Setting _FS_READONLY to 1 defines read only configuration. This removes
 +/  writing functions, f_write, f_sync, f_unlink, f_mkdir, f_chmod, f_rename,
 +/  f_truncate and useless f_getfree. */
 +
 +
 +#define _FS_MINIMIZE	0	/* 0 to 3 */
 +/* The _FS_MINIMIZE option defines minimization level to remove some functions.
 +/
 +/   0: Full function.
 +/   1: f_stat, f_getfree, f_unlink, f_mkdir, f_chmod, f_truncate and f_rename
 +/      are removed.
 +/   2: f_opendir and f_readdir are removed in addition to 1.
 +/   3: f_lseek is removed in addition to 2. */
 +
 +
 +#define	_USE_STRFUNC	0	/* 0:Disable or 1-2:Enable */
 +/* To enable string functions, set _USE_STRFUNC to 1 or 2. */
 +
 +
 +#define	_USE_MKFS		1	/* 0:Disable or 1:Enable */
 +/* To enable f_mkfs function, set _USE_MKFS to 1 and set _FS_READONLY to 0 */
 +
 +
 +#define	_USE_FORWARD	0	/* 0:Disable or 1:Enable */
 +/* To enable f_forward function, set _USE_FORWARD to 1 and set _FS_TINY to 1. */
 +
 +
 +#define	_USE_FASTSEEK	0	/* 0:Disable or 1:Enable */
 +/* To enable fast seek feature, set _USE_FASTSEEK to 1. */
 +
 +
 +
 +/*---------------------------------------------------------------------------/
 +/ Locale and Namespace Configurations
 +/----------------------------------------------------------------------------*/
 +
 +#define _CODE_PAGE	1251
 +/* The _CODE_PAGE specifies the OEM code page to be used on the target system.
 +/  Incorrect setting of the code page can cause a file open failure.
 +/
 +/   932  - Japanese Shift-JIS (DBCS, OEM, Windows)
 +/   936  - Simplified Chinese GBK (DBCS, OEM, Windows)
 +/   949  - Korean (DBCS, OEM, Windows)
 +/   950  - Traditional Chinese Big5 (DBCS, OEM, Windows)
 +/   1250 - Central Europe (Windows)
 +/   1251 - Cyrillic (Windows)
 +/   1252 - Latin 1 (Windows)
 +/   1253 - Greek (Windows)
 +/   1254 - Turkish (Windows)
 +/   1255 - Hebrew (Windows)
 +/   1256 - Arabic (Windows)
 +/   1257 - Baltic (Windows)
 +/   1258 - Vietnam (OEM, Windows)
 +/   437  - U.S. (OEM)
 +/   720  - Arabic (OEM)
 +/   737  - Greek (OEM)
 +/   775  - Baltic (OEM)
 +/   850  - Multilingual Latin 1 (OEM)
 +/   858  - Multilingual Latin 1 + Euro (OEM)
 +/   852  - Latin 2 (OEM)
 +/   855  - Cyrillic (OEM)
 +/   866  - Russian (OEM)
 +/   857  - Turkish (OEM)
 +/   862  - Hebrew (OEM)
 +/   874  - Thai (OEM, Windows)
 +/	1    - ASCII only (Valid for non LFN cfg.)
 +*/
 +
 +
 +#define	_USE_LFN	3		/* 0 to 3 */
 +#define	_MAX_LFN	255		/* Maximum LFN length to handle (12 to 255) */
 +/* The _USE_LFN option switches the LFN support.
 +/
 +/   0: Disable LFN feature. _MAX_LFN and _LFN_UNICODE have no effect.
 +/   1: Enable LFN with static working buffer on the BSS. Always NOT reentrant.
 +/   2: Enable LFN with dynamic working buffer on the STACK.
 +/   3: Enable LFN with dynamic working buffer on the HEAP.
 +/
 +/  The LFN working buffer occupies (_MAX_LFN + 1) * 2 bytes. To enable LFN,
 +/  Unicode handling functions ff_convert() and ff_wtoupper() must be added
 +/  to the project. When enable to use heap, memory control functions
 +/  ff_memalloc() and ff_memfree() must be added to the project. */
 +
 +
 +#define	_LFN_UNICODE	0	/* 0:ANSI/OEM or 1:Unicode */
 +/* To switch the character code set on FatFs API to Unicode,
 +/  enable LFN feature and set _LFN_UNICODE to 1. */
 +
 +
 +#define _FS_RPATH		0	/* 0 to 2 */
 +/* The _FS_RPATH option configures relative path feature.
 +/
 +/   0: Disable relative path feature and remove related functions.
 +/   1: Enable relative path. f_chdrive() and f_chdir() are available.
 +/   2: f_getcwd() is available in addition to 1.
 +/
 +/  Note that output of the f_readdir fnction is affected by this option. */
 +
 +
 +
 +/*---------------------------------------------------------------------------/
 +/ Physical Drive Configurations
 +/----------------------------------------------------------------------------*/
 +
 +#define _VOLUMES	1
 +/* Number of volumes (logical drives) to be used. */
 +
 +
 +#define	_MAX_SS		512		/* 512, 1024, 2048 or 4096 */
 +/* Maximum sector size to be handled.
 +/  Always set 512 for memory card and hard disk but a larger value may be
 +/  required for on-board flash memory, floppy disk and optical disk.
 +/  When _MAX_SS is larger than 512, it configures FatFs to variable sector size
 +/  and GET_SECTOR_SIZE command must be implememted to the disk_ioctl function. */
 +
 +
 +#define	_MULTI_PARTITION	0	/* 0:Single partition, 1/2:Enable multiple partition */
 +/* When set to 0, each volume is bound to the same physical drive number and
 +/ it can mount only first primaly partition. When it is set to 1, each volume
 +/ is tied to the partitions listed in VolToPart[]. */
 +
 +
 +#define	_USE_ERASE	1	/* 0:Disable or 1:Enable */
 +/* To enable sector erase feature, set _USE_ERASE to 1. CTRL_ERASE_SECTOR command
 +/  should be added to the disk_ioctl functio. */
 +
 +
 +
 +/*---------------------------------------------------------------------------/
 +/ System Configurations
 +/----------------------------------------------------------------------------*/
 +
 +#define _WORD_ACCESS	1	/* 0 or 1 */
 +/* Set 0 first and it is always compatible with all platforms. The _WORD_ACCESS
 +/  option defines which access method is used to the word data on the FAT volume.
 +/
 +/   0: Byte-by-byte access.
 +/   1: Word access. Do not choose this unless following condition is met.
 +/
 +/  When the byte order on the memory is big-endian or address miss-aligned word
 +/  access results incorrect behavior, the _WORD_ACCESS must be set to 0.
 +/  If it is not the case, the value can also be set to 1 to improve the
 +/  performance and code size.
 +*/
 +
 +
 +/* A header file that defines sync object types on the O/S, such as
 +/  windows.h, ucos_ii.h and semphr.h, must be included prior to ff.h. */
 +
 +#define _FS_REENTRANT	0		/* 0:Disable or 1:Enable */
 +#define _FS_TIMEOUT		1000	/* Timeout period in unit of time ticks */
 +#define	_SYNC_t			Semaphore * /* O/S dependent type of sync object. e.g. HANDLE, OS_EVENT*, ID and etc.. */
 +
 +/* The _FS_REENTRANT option switches the reentrancy (thread safe) of the FatFs module.
 +/
 +/   0: Disable reentrancy. _SYNC_t and _FS_TIMEOUT have no effect.
 +/   1: Enable reentrancy. Also user provided synchronization handlers,
 +/      ff_req_grant, ff_rel_grant, ff_del_syncobj and ff_cre_syncobj
 +/      function must be added to the project. */
 +
 +
 +#define	_FS_SHARE	0	/* 0:Disable or >=1:Enable */
 +/* To enable file shareing feature, set _FS_SHARE to 1 or greater. The value
 +   defines how many files can be opened simultaneously. */
 +
 +
 +#endif /* _FFCONFIG */
 diff --git a/testhal/STM32F4xx/SDC/halconf.h b/testhal/STM32F4xx/SDC/halconf.h new file mode 100644 index 000000000..7c79feea0 --- /dev/null +++ b/testhal/STM32F4xx/SDC/halconf.h @@ -0,0 +1,319 @@ +/*
 +    ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio
 +
 +    Licensed under the Apache License, Version 2.0 (the "License");
 +    you may not use this file except in compliance with the License.
 +    You may obtain a copy of the License at
 +
 +        http://www.apache.org/licenses/LICENSE-2.0
 +
 +    Unless required by applicable law or agreed to in writing, software
 +    distributed under the License is distributed on an "AS IS" BASIS,
 +    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 +    See the License for the specific language governing permissions and
 +    limitations under the License.
 +*/
 +
 +/**
 + * @file    templates/halconf.h
 + * @brief   HAL configuration header.
 + * @details HAL configuration file, this file allows to enable or disable the
 + *          various device drivers from your application. You may also use
 + *          this file in order to override the device drivers default settings.
 + *
 + * @addtogroup HAL_CONF
 + * @{
 + */
 +
 +#ifndef _HALCONF_H_
 +#define _HALCONF_H_
 +
 +#include "mcuconf.h"
 +
 +/**
 + * @brief   Enables the PAL subsystem.
 + */
 +#if !defined(HAL_USE_PAL) || defined(__DOXYGEN__)
 +#define HAL_USE_PAL                 TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the ADC subsystem.
 + */
 +#if !defined(HAL_USE_ADC) || defined(__DOXYGEN__)
 +#define HAL_USE_ADC                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the CAN subsystem.
 + */
 +#if !defined(HAL_USE_CAN) || defined(__DOXYGEN__)
 +#define HAL_USE_CAN                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the EXT subsystem.
 + */
 +#if !defined(HAL_USE_EXT) || defined(__DOXYGEN__)
 +#define HAL_USE_EXT                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the GPT subsystem.
 + */
 +#if !defined(HAL_USE_GPT) || defined(__DOXYGEN__)
 +#define HAL_USE_GPT                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the I2C subsystem.
 + */
 +#if !defined(HAL_USE_I2C) || defined(__DOXYGEN__)
 +#define HAL_USE_I2C                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the ICU subsystem.
 + */
 +#if !defined(HAL_USE_ICU) || defined(__DOXYGEN__)
 +#define HAL_USE_ICU                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the MAC subsystem.
 + */
 +#if !defined(HAL_USE_MAC) || defined(__DOXYGEN__)
 +#define HAL_USE_MAC                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the MMC_SPI subsystem.
 + */
 +#if !defined(HAL_USE_MMC_SPI) || defined(__DOXYGEN__)
 +#define HAL_USE_MMC_SPI             FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the PWM subsystem.
 + */
 +#if !defined(HAL_USE_PWM) || defined(__DOXYGEN__)
 +#define HAL_USE_PWM                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the RTC subsystem.
 + */
 +#if !defined(HAL_USE_RTC) || defined(__DOXYGEN__)
 +#define HAL_USE_RTC                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the SDC subsystem.
 + */
 +#if !defined(HAL_USE_SDC) || defined(__DOXYGEN__)
 +#define HAL_USE_SDC                 TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the SERIAL subsystem.
 + */
 +#if !defined(HAL_USE_SERIAL) || defined(__DOXYGEN__)
 +#define HAL_USE_SERIAL              TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the SERIAL over USB subsystem.
 + */
 +#if !defined(HAL_USE_SERIAL_USB) || defined(__DOXYGEN__)
 +#define HAL_USE_SERIAL_USB          FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the SPI subsystem.
 + */
 +#if !defined(HAL_USE_SPI) || defined(__DOXYGEN__)
 +#define HAL_USE_SPI                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the UART subsystem.
 + */
 +#if !defined(HAL_USE_UART) || defined(__DOXYGEN__)
 +#define HAL_USE_UART                FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the USB subsystem.
 + */
 +#if !defined(HAL_USE_USB) || defined(__DOXYGEN__)
 +#define HAL_USE_USB                 FALSE
 +#endif
 +
 +/*===========================================================================*/
 +/* ADC driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Enables synchronous APIs.
 + * @note    Disabling this option saves both code and data space.
 + */
 +#if !defined(ADC_USE_WAIT) || defined(__DOXYGEN__)
 +#define ADC_USE_WAIT                TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the @p adcAcquireBus() and @p adcReleaseBus() APIs.
 + * @note    Disabling this option saves both code and data space.
 + */
 +#if !defined(ADC_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
 +#define ADC_USE_MUTUAL_EXCLUSION    TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* CAN driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Sleep mode related APIs inclusion switch.
 + */
 +#if !defined(CAN_USE_SLEEP_MODE) || defined(__DOXYGEN__)
 +#define CAN_USE_SLEEP_MODE          TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* I2C driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Enables the mutual exclusion APIs on the I2C bus.
 + */
 +#if !defined(I2C_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
 +#define I2C_USE_MUTUAL_EXCLUSION    TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* MAC driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Enables an event sources for incoming packets.
 + */
 +#if !defined(MAC_USE_ZERO_COPY) || defined(__DOXYGEN__)
 +#define MAC_USE_ZERO_COPY           FALSE
 +#endif
 +
 +/**
 + * @brief   Enables an event sources for incoming packets.
 + */
 +#if !defined(MAC_USE_EVENTS) || defined(__DOXYGEN__)
 +#define MAC_USE_EVENTS              TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* MMC_SPI driver related settings.                                          */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Delays insertions.
 + * @details If enabled this options inserts delays into the MMC waiting
 + *          routines releasing some extra CPU time for the threads with
 + *          lower priority, this may slow down the driver a bit however.
 + *          This option is recommended also if the SPI driver does not
 + *          use a DMA channel and heavily loads the CPU.
 + */
 +#if !defined(MMC_NICE_WAITING) || defined(__DOXYGEN__)
 +#define MMC_NICE_WAITING            TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* SDC driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Number of initialization attempts before rejecting the card.
 + * @note    Attempts are performed at 10mS intervals.
 + */
 +#if !defined(SDC_INIT_RETRY) || defined(__DOXYGEN__)
 +#define SDC_INIT_RETRY              100
 +#endif
 +
 +/**
 + * @brief   Include support for MMC cards.
 + * @note    MMC support is not yet implemented so this option must be kept
 + *          at @p FALSE.
 + */
 +#if !defined(SDC_MMC_SUPPORT) || defined(__DOXYGEN__)
 +#define SDC_MMC_SUPPORT             FALSE
 +#endif
 +
 +/**
 + * @brief   Delays insertions.
 + * @details If enabled this options inserts delays into the MMC waiting
 + *          routines releasing some extra CPU time for the threads with
 + *          lower priority, this may slow down the driver a bit however.
 + */
 +#if !defined(SDC_NICE_WAITING) || defined(__DOXYGEN__)
 +#define SDC_NICE_WAITING            TRUE
 +#endif
 +
 +/**
 + * @brief   Write timeout in milliseconds.
 + */
 +#if !defined(SDC_WRITE_TIMEOUT_MS) || defined(__DOXYGEN__)
 +#define SDC_WRITE_TIMEOUT_MS            250
 +#endif
 +
 +/**
 + * @brief   Write timeout in milliseconds.
 + */
 +#if !defined(SDC_READ_TIMEOUT_MS) || defined(__DOXYGEN__)
 +#define SDC_READ_TIMEOUT_MS             5
 +#endif
 +
 +/*===========================================================================*/
 +/* SERIAL driver related settings.                                           */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Default bit rate.
 + * @details Configuration parameter, this is the baud rate selected for the
 + *          default configuration.
 + */
 +#if !defined(SERIAL_DEFAULT_BITRATE) || defined(__DOXYGEN__)
 +#define SERIAL_DEFAULT_BITRATE      38400
 +#endif
 +
 +/**
 + * @brief   Serial buffers size.
 + * @details Configuration parameter, you can change the depth of the queue
 + *          buffers depending on the requirements of your application.
 + * @note    The default is 64 bytes for both the transmission and receive
 + *          buffers.
 + */
 +#if !defined(SERIAL_BUFFERS_SIZE) || defined(__DOXYGEN__)
 +#define SERIAL_BUFFERS_SIZE         16
 +#endif
 +
 +/*===========================================================================*/
 +/* SPI driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Enables synchronous APIs.
 + * @note    Disabling this option saves both code and data space.
 + */
 +#if !defined(SPI_USE_WAIT) || defined(__DOXYGEN__)
 +#define SPI_USE_WAIT                TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the @p spiAcquireBus() and @p spiReleaseBus() APIs.
 + * @note    Disabling this option saves both code and data space.
 + */
 +#if !defined(SPI_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
 +#define SPI_USE_MUTUAL_EXCLUSION    TRUE
 +#endif
 +
 +#endif /* _HALCONF_H_ */
 +
 +/** @} */
 diff --git a/testhal/STM32F4xx/SDC/main.c b/testhal/STM32F4xx/SDC/main.c new file mode 100644 index 000000000..721eac66b --- /dev/null +++ b/testhal/STM32F4xx/SDC/main.c @@ -0,0 +1,382 @@ +/*
 +    ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio
 +
 +    Licensed under the Apache License, Version 2.0 (the "License");
 +    you may not use this file except in compliance with the License.
 +    You may obtain a copy of the License at
 +
 +        http://www.apache.org/licenses/LICENSE-2.0
 +
 +    Unless required by applicable law or agreed to in writing, software
 +    distributed under the License is distributed on an "AS IS" BASIS,
 +    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 +    See the License for the specific language governing permissions and
 +    limitations under the License.
 +*/
 +
 +#include <string.h>
 +#include "ch.h"
 +#include "hal.h"
 +
 +#include "shell.h"
 +#include "chprintf.h"
 +
 +#include "ff.h"
 +
 +#define SDC_DATA_DESTRUCTIVE_TEST   FALSE
 +
 +#define SDC_BURST_SIZE      8 /* how many sectors reads at once */
 +static uint8_t outbuf[MMCSD_BLOCK_SIZE * SDC_BURST_SIZE + 1];
 +static uint8_t  inbuf[MMCSD_BLOCK_SIZE * SDC_BURST_SIZE + 1];
 +
 +/* FS object.*/
 +static FATFS SDC_FS;
 +
 +/* FS mounted and ready.*/
 +static bool_t fs_ready = FALSE;
 +
 +/**
 + * @brief   Parody of UNIX badblocks program.
 + *
 + * @param[in] start       first block to check
 + * @param[in] end         last block to check
 + * @param[in] blockatonce number of blocks to check at once
 + * @param[in] pattern     check pattern
 + *
 + * @return              The operation status.
 + * @retval SDC_SUCCESS  operation succeeded, the requested blocks have been
 + *                      read.
 + * @retval SDC_FAILED   operation failed, the state of the buffer is uncertain.
 + */
 +bool_t badblocks(uint32_t start, uint32_t end, uint32_t blockatonce, uint8_t pattern){
 +  uint32_t position = 0;
 +  uint32_t i = 0;
 +
 +  chDbgCheck(blockatonce <= SDC_BURST_SIZE, "badblocks");
 +
 +  /* fill control buffer */
 +  for (i=0; i < MMCSD_BLOCK_SIZE * blockatonce; i++)
 +    outbuf[i] = pattern;
 +
 +  /* fill SD card with pattern. */
 +  position = start;
 +  while (position < end){
 +    if (sdcWrite(&SDCD1, position, outbuf, blockatonce))
 +      goto ERROR;
 +    position += blockatonce;
 +  }
 +
 +  /* read and compare. */
 +  position = start;
 +  while (position < end){
 +    if (sdcRead(&SDCD1, position, inbuf, blockatonce))
 +      goto ERROR;
 +    if (memcmp(inbuf, outbuf, blockatonce * MMCSD_BLOCK_SIZE) != 0)
 +      goto ERROR;
 +    position += blockatonce;
 +  }
 +  return FALSE;
 +
 +ERROR:
 +  return TRUE;
 +}
 +
 +/**
 + *
 + */
 +void fillbuffer(uint8_t pattern, uint8_t *b){
 +  uint32_t i = 0;
 +  for (i=0; i < MMCSD_BLOCK_SIZE * SDC_BURST_SIZE; i++)
 +    b[i] = pattern;
 +}
 +
 +/**
 + *
 + */
 +void fillbuffers(uint8_t pattern){
 +  fillbuffer(pattern, inbuf);
 +  fillbuffer(pattern, outbuf);
 +}
 +
 +/**
 + *
 + */
 +void cmd_sdiotest(BaseSequentialStream *chp, int argc, char *argv[]){
 +  (void)argc;
 +  (void)argv;
 +  uint32_t i = 0;
 +
 +  chprintf(chp, "Trying to connect SDIO... ");
 +  chThdSleepMilliseconds(100);
 +
 +  if (!sdcConnect(&SDCD1)) {
 +
 +    chprintf(chp, "OK\r\n");
 +    chprintf(chp, "*** Card CSD content is: ");
 +    chprintf(chp, "%X %X %X %X \r\n", (&SDCD1)->csd[3], (&SDCD1)->csd[2],
 +                                      (&SDCD1)->csd[1], (&SDCD1)->csd[0]);
 +
 +    chprintf(chp, "Single aligned read...");
 +    chThdSleepMilliseconds(100);
 +    if (sdcRead(&SDCD1, 0, inbuf, 1))
 +      chSysHalt();
 +    chprintf(chp, " OK\r\n");
 +    chThdSleepMilliseconds(100);
 +
 +
 +    chprintf(chp, "Single unaligned read...");
 +    chThdSleepMilliseconds(100);
 +    if (sdcRead(&SDCD1, 0, inbuf + 1, 1))
 +      chSysHalt();
 +    if (sdcRead(&SDCD1, 0, inbuf + 2, 1))
 +      chSysHalt();
 +    if (sdcRead(&SDCD1, 0, inbuf + 3, 1))
 +      chSysHalt();
 +    chprintf(chp, " OK\r\n");
 +    chThdSleepMilliseconds(100);
 +
 +
 +    chprintf(chp, "Multiple aligned reads...");
 +    chThdSleepMilliseconds(100);
 +    fillbuffers(0x55);
 +    /* fill reference buffer from SD card */
 +    if (sdcRead(&SDCD1, 0, inbuf, SDC_BURST_SIZE))
 +      chSysHalt();
 +    for (i=0; i<1000; i++){
 +      if (sdcRead(&SDCD1, 0, outbuf, SDC_BURST_SIZE))
 +        chSysHalt();
 +      if (memcmp(inbuf, outbuf, SDC_BURST_SIZE * MMCSD_BLOCK_SIZE) != 0)
 +        chSysHalt();
 +    }
 +    chprintf(chp, " OK\r\n");
 +    chThdSleepMilliseconds(100);
 +
 +
 +    chprintf(chp, "Multiple unaligned reads...");
 +    chThdSleepMilliseconds(100);
 +    fillbuffers(0x55);
 +    /* fill reference buffer from SD card */
 +    if (sdcRead(&SDCD1, 0, inbuf + 1, SDC_BURST_SIZE))
 +      chSysHalt();
 +    for (i=0; i<1000; i++){
 +      if (sdcRead(&SDCD1, 0, outbuf + 1, SDC_BURST_SIZE))
 +        chSysHalt();
 +      if (memcmp(inbuf, outbuf, SDC_BURST_SIZE * MMCSD_BLOCK_SIZE) != 0)
 +        chSysHalt();
 +    }
 +    chprintf(chp, " OK\r\n");
 +    chThdSleepMilliseconds(100);
 +
 +#if SDC_DATA_DESTRUCTIVE_TEST
 +
 +    chprintf(chp, "Single aligned write...");
 +    chThdSleepMilliseconds(100);
 +    fillbuffer(0xAA, inbuf);
 +    if (sdcWrite(&SDCD1, 0, inbuf, 1))
 +      chSysHalt();
 +    fillbuffer(0, outbuf);
 +    if (sdcRead(&SDCD1, 0, outbuf, 1))
 +      chSysHalt();
 +    if (memcmp(inbuf, outbuf, MMCSD_BLOCK_SIZE) != 0)
 +      chSysHalt();
 +    chprintf(chp, " OK\r\n");
 +
 +    chprintf(chp, "Single unaligned write...");
 +    chThdSleepMilliseconds(100);
 +    fillbuffer(0xFF, inbuf);
 +    if (sdcWrite(&SDCD1, 0, inbuf+1, 1))
 +      chSysHalt();
 +    fillbuffer(0, outbuf);
 +    if (sdcRead(&SDCD1, 0, outbuf+1, 1))
 +      chSysHalt();
 +    if (memcmp(inbuf+1, outbuf+1, MMCSD_BLOCK_SIZE) != 0)
 +      chSysHalt();
 +    chprintf(chp, " OK\r\n");
 +
 +    chprintf(chp, "Running badblocks at 0x10000 offset...");
 +    chThdSleepMilliseconds(100);
 +    if(badblocks(0x10000, 0x11000, SDC_BURST_SIZE, 0xAA))
 +      chSysHalt();
 +    chprintf(chp, " OK\r\n");
 +#endif /* !SDC_DATA_DESTRUCTIVE_TEST */
 +
 +
 +    /**
 +     * Now perform some FS tests.
 +     */
 +
 +    FRESULT err;
 +    uint32_t clusters;
 +    FATFS *fsp;
 +    FIL FileObject;
 +    uint32_t bytes_written;
 +    uint32_t bytes_read;
 +    FILINFO filinfo;
 +    uint8_t teststring[] = {"This is test file\r\n"};
 +
 +    chprintf(chp, "Register working area for filesystem... ");
 +    chThdSleepMilliseconds(100);
 +    err = f_mount(0, &SDC_FS);
 +    if (err != FR_OK){
 +      chSysHalt();
 +    }
 +    else{
 +      fs_ready = TRUE;
 +      chprintf(chp, "OK\r\n");
 +    }
 +
 +
 +#if SDC_DATA_DESTRUCTIVE_TEST
 +    chprintf(chp, "Formatting... ");
 +    chThdSleepMilliseconds(100);
 +    err = f_mkfs (0,0,0);
 +    if (err != FR_OK){
 +      chSysHalt();
 +    }
 +    else{
 +      chprintf(chp, "OK\r\n");
 +    }
 +#endif /* SDC_DATA_DESTRUCTIVE_TEST */
 +
 +
 +    chprintf(chp, "Mount filesystem... ");
 +    chThdSleepMilliseconds(100);
 +    err = f_getfree("/", &clusters, &fsp);
 +    if (err != FR_OK) {
 +      chSysHalt();
 +    }
 +    chprintf(chp, "OK\r\n");
 +    chprintf(chp,
 +             "FS: %lu free clusters, %lu sectors per cluster, %lu bytes free\r\n",
 +             clusters, (uint32_t)SDC_FS.csize,
 +             clusters * (uint32_t)SDC_FS.csize * (uint32_t)MMCSD_BLOCK_SIZE);
 +
 +
 +    chprintf(chp, "Create file \"chtest.txt\"... ");
 +    chThdSleepMilliseconds(100);
 +    err = f_open(&FileObject, "0:chtest.txt", FA_WRITE | FA_OPEN_ALWAYS);
 +    if (err != FR_OK) {
 +      chSysHalt();
 +    }
 +    chprintf(chp, "OK\r\n");
 +    chprintf(chp, "Write some data in it... ");
 +    chThdSleepMilliseconds(100);
 +    err = f_write(&FileObject, teststring, sizeof(teststring), (void *)&bytes_written);
 +    if (err != FR_OK) {
 +      chSysHalt();
 +    }
 +    else
 +      chprintf(chp, "OK\r\n");
 +
 +    chprintf(chp, "Close file \"chtest.txt\"... ");
 +    err = f_close(&FileObject);
 +    if (err != FR_OK) {
 +      chSysHalt();
 +    }
 +    else
 +      chprintf(chp, "OK\r\n");
 +
 +    chprintf(chp, "Check file size \"chtest.txt\"... ");
 +    err = f_stat("0:chtest.txt", &filinfo);
 +    chThdSleepMilliseconds(100);
 +    if (err != FR_OK) {
 +      chSysHalt();
 +    }
 +    else{
 +      if (filinfo.fsize == sizeof(teststring))
 +        chprintf(chp, "OK\r\n");
 +      else
 +        chSysHalt();
 +    }
 +
 +    chprintf(chp, "Check file content \"chtest.txt\"... ");
 +    err = f_open(&FileObject, "0:chtest.txt", FA_READ | FA_OPEN_EXISTING);
 +    chThdSleepMilliseconds(100);
 +    if (err != FR_OK) {
 +      chSysHalt();
 +    }
 +    uint8_t buf[sizeof(teststring)];
 +    err = f_read(&FileObject, buf, sizeof(teststring), (void *)&bytes_read);
 +    if (err != FR_OK) {
 +      chSysHalt();
 +    }
 +    else{
 +      if (memcmp(teststring, buf, sizeof(teststring)) != 0){
 +        chSysHalt();
 +      }
 +      else{
 +        chprintf(chp, "OK\r\n");
 +      }
 +    }
 +
 +    chprintf(chp, "Umount filesystem... ");
 +    f_mount(0, NULL);
 +    chprintf(chp, "OK\r\n");
 +
 +    chprintf(chp, "Disconnecting from SDIO...");
 +    chThdSleepMilliseconds(100);
 +    if (sdcDisconnect(&SDCD1))
 +      chSysHalt();
 +    chprintf(chp, " OK\r\n");
 +    chprintf(chp, "------------------------------------------------------\r\n");
 +    chprintf(chp, "All tests passed successfully.\r\n");
 +    chThdSleepMilliseconds(100);
 +  }
 +  else{
 +    chSysHalt();
 +  }
 +}
 +
 +
 +/*
 + * SDIO configuration.
 + */
 +static const SDCConfig sdccfg = {
 +  0
 +};
 +
 +/**
 + *
 + */
 +static SerialConfig ser_cfg = {
 +    115200,
 +    0,
 +    0,
 +    0,
 +};
 +static const ShellCommand commands[] = {
 +  {"sdiotest", cmd_sdiotest},
 +  {NULL, NULL}
 +};
 +static const ShellConfig shell_cfg1 = {
 +  (BaseSequentialStream *)&SD2,
 +  commands
 +};
 +
 +/*
 + * Application entry point.
 + */
 +int main(void) {
 +  halInit();
 +  chSysInit();
 +
 +  /* start debugging serial link */
 +  sdStart(&SD2, &ser_cfg);
 +  shellInit();
 +  static WORKING_AREA(waShell, 2048);
 +  shellCreateStatic(&shell_cfg1, waShell, sizeof(waShell), NORMALPRIO);
 +
 +  /*
 +   * Initializes the SDIO drivers.
 +   */
 +  sdcStart(&SDCD1, &sdccfg);
 +
 +  /*
 +   * Normal main() thread activity.
 +   * Blinking signaling about successful passing.
 +   */
 +  while (TRUE) {
 +    palTogglePad(GPIOB, GPIOB_LED_R);
 +    chThdSleepMilliseconds(100);
 +  }
 +}
 diff --git a/testhal/STM32F4xx/SDC/mcuconf.h b/testhal/STM32F4xx/SDC/mcuconf.h new file mode 100644 index 000000000..a8d51babe --- /dev/null +++ b/testhal/STM32F4xx/SDC/mcuconf.h @@ -0,0 +1,278 @@ +/*
 +    ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio
 +
 +    Licensed under the Apache License, Version 2.0 (the "License");
 +    you may not use this file except in compliance with the License.
 +    You may obtain a copy of the License at
 +
 +        http://www.apache.org/licenses/LICENSE-2.0
 +
 +    Unless required by applicable law or agreed to in writing, software
 +    distributed under the License is distributed on an "AS IS" BASIS,
 +    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 +    See the License for the specific language governing permissions and
 +    limitations under the License.
 +*/
 +
 +/*
 + * STM32F4xx drivers configuration.
 + * The following settings override the default settings present in
 + * the various device driver implementation headers.
 + * Note that the settings for each driver only have effect if the whole
 + * driver is enabled in halconf.h.
 + *
 + * IRQ priorities:
 + * 15...0       Lowest...Highest.
 + *
 + * DMA priorities:
 + * 0...3        Lowest...Highest.
 + */
 +
 +#define STM32F4xx_MCUCONF
 +
 +/*
 + * HAL driver system settings.
 + */
 +#define STM32_NO_INIT                       FALSE
 +#define STM32_HSI_ENABLED                   TRUE
 +#define STM32_LSI_ENABLED                   TRUE
 +#define STM32_HSE_ENABLED                   TRUE
 +#define STM32_LSE_ENABLED                   FALSE
 +#define STM32_CLOCK48_REQUIRED              TRUE
 +#define STM32_SW                            STM32_SW_PLL
 +#define STM32_PLLSRC                        STM32_PLLSRC_HSE
 +#define STM32_PLLM_VALUE                    8
 +#define STM32_PLLN_VALUE                    336
 +#define STM32_PLLP_VALUE                    2
 +#define STM32_PLLQ_VALUE                    7
 +#define STM32_HPRE                          STM32_HPRE_DIV1
 +#define STM32_PPRE1                         STM32_PPRE1_DIV4
 +#define STM32_PPRE2                         STM32_PPRE2_DIV2
 +#define STM32_RTCSEL                        STM32_RTCSEL_LSI
 +#define STM32_RTCPRE_VALUE                  8
 +#define STM32_MCO1SEL                       STM32_MCO1SEL_HSI
 +#define STM32_MCO1PRE                       STM32_MCO1PRE_DIV1
 +#define STM32_MCO2SEL                       STM32_MCO2SEL_SYSCLK
 +#define STM32_MCO2PRE                       STM32_MCO2PRE_DIV5
 +#define STM32_I2SSRC                        STM32_I2SSRC_CKIN
 +#define STM32_PLLI2SN_VALUE                 192
 +#define STM32_PLLI2SR_VALUE                 5
 +#define STM32_VOS                           STM32_VOS_HIGH
 +#define STM32_PVD_ENABLE                    FALSE
 +#define STM32_PLS                           STM32_PLS_LEV0
 +
 +/*
 + * ADC driver system settings.
 + */
 +#define STM32_ADC_ADCPRE                    ADC_CCR_ADCPRE_DIV4
 +#define STM32_ADC_USE_ADC1                  FALSE
 +#define STM32_ADC_USE_ADC2                  FALSE
 +#define STM32_ADC_USE_ADC3                  FALSE
 +#define STM32_ADC_ADC1_DMA_STREAM           STM32_DMA_STREAM_ID(2, 4)
 +#define STM32_ADC_ADC2_DMA_STREAM           STM32_DMA_STREAM_ID(2, 2)
 +#define STM32_ADC_ADC3_DMA_STREAM           STM32_DMA_STREAM_ID(2, 1)
 +#define STM32_ADC_ADC1_DMA_PRIORITY         2
 +#define STM32_ADC_ADC2_DMA_PRIORITY         2
 +#define STM32_ADC_ADC3_DMA_PRIORITY         2
 +#define STM32_ADC_IRQ_PRIORITY              6
 +#define STM32_ADC_ADC1_DMA_IRQ_PRIORITY     6
 +#define STM32_ADC_ADC2_DMA_IRQ_PRIORITY     6
 +#define STM32_ADC_ADC3_DMA_IRQ_PRIORITY     6
 +
 +/*
 + * CAN driver system settings.
 + */
 +#define STM32_CAN_USE_CAN1                  FALSE
 +#define STM32_CAN_USE_CAN2                  FALSE
 +#define STM32_CAN_CAN1_IRQ_PRIORITY         11
 +#define STM32_CAN_CAN2_IRQ_PRIORITY         11
 +
 +/*
 + * EXT driver system settings.
 + */
 +#define STM32_EXT_EXTI0_IRQ_PRIORITY        6
 +#define STM32_EXT_EXTI1_IRQ_PRIORITY        6
 +#define STM32_EXT_EXTI2_IRQ_PRIORITY        6
 +#define STM32_EXT_EXTI3_IRQ_PRIORITY        6
 +#define STM32_EXT_EXTI4_IRQ_PRIORITY        6
 +#define STM32_EXT_EXTI5_9_IRQ_PRIORITY      6
 +#define STM32_EXT_EXTI10_15_IRQ_PRIORITY    6
 +#define STM32_EXT_EXTI16_IRQ_PRIORITY       6
 +#define STM32_EXT_EXTI17_IRQ_PRIORITY       15
 +#define STM32_EXT_EXTI18_IRQ_PRIORITY       6
 +#define STM32_EXT_EXTI19_IRQ_PRIORITY       6
 +#define STM32_EXT_EXTI20_IRQ_PRIORITY       6
 +#define STM32_EXT_EXTI21_IRQ_PRIORITY       15
 +#define STM32_EXT_EXTI22_IRQ_PRIORITY       15
 +
 +/*
 + * GPT driver system settings.
 + */
 +#define STM32_GPT_USE_TIM1                  FALSE
 +#define STM32_GPT_USE_TIM2                  FALSE
 +#define STM32_GPT_USE_TIM3                  FALSE
 +#define STM32_GPT_USE_TIM4                  FALSE
 +#define STM32_GPT_USE_TIM5                  FALSE
 +#define STM32_GPT_USE_TIM6                  FALSE
 +#define STM32_GPT_USE_TIM7                  FALSE
 +#define STM32_GPT_USE_TIM8                  FALSE
 +#define STM32_GPT_USE_TIM9                  FALSE
 +#define STM32_GPT_USE_TIM11                 FALSE
 +#define STM32_GPT_USE_TIM12                 FALSE
 +#define STM32_GPT_USE_TIM14                 FALSE
 +#define STM32_GPT_TIM1_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM2_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM3_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM4_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM5_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM6_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM7_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM8_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM9_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM11_IRQ_PRIORITY        7
 +#define STM32_GPT_TIM12_IRQ_PRIORITY        7
 +#define STM32_GPT_TIM14_IRQ_PRIORITY        7
 +
 +/*
 + * I2C driver system settings.
 + */
 +#define STM32_I2C_USE_I2C1                  FALSE
 +#define STM32_I2C_USE_I2C2                  FALSE
 +#define STM32_I2C_USE_I2C3                  FALSE
 +#define STM32_I2C_I2C1_RX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 0)
 +#define STM32_I2C_I2C1_TX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 6)
 +#define STM32_I2C_I2C2_RX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 2)
 +#define STM32_I2C_I2C2_TX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 7)
 +#define STM32_I2C_I2C3_RX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 2)
 +#define STM32_I2C_I2C3_TX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 4)
 +#define STM32_I2C_I2C1_IRQ_PRIORITY         5
 +#define STM32_I2C_I2C2_IRQ_PRIORITY         5
 +#define STM32_I2C_I2C3_IRQ_PRIORITY         5
 +#define STM32_I2C_I2C1_DMA_PRIORITY         3
 +#define STM32_I2C_I2C2_DMA_PRIORITY         3
 +#define STM32_I2C_I2C3_DMA_PRIORITY         3
 +#define STM32_I2C_I2C1_DMA_ERROR_HOOK()     chSysHalt()
 +#define STM32_I2C_I2C2_DMA_ERROR_HOOK()     chSysHalt()
 +#define STM32_I2C_I2C3_DMA_ERROR_HOOK()     chSysHalt()
 +
 +/*
 + * ICU driver system settings.
 + */
 +#define STM32_ICU_USE_TIM1                  FALSE
 +#define STM32_ICU_USE_TIM2                  FALSE
 +#define STM32_ICU_USE_TIM3                  FALSE
 +#define STM32_ICU_USE_TIM4                  FALSE
 +#define STM32_ICU_USE_TIM5                  FALSE
 +#define STM32_ICU_USE_TIM8                  FALSE
 +#define STM32_ICU_USE_TIM9                  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
 +#define STM32_ICU_TIM8_IRQ_PRIORITY         7
 +#define STM32_ICU_TIM9_IRQ_PRIORITY         7
 +
 +/*
 + * MAC driver system settings.
 + */
 +#define STM32_MAC_TRANSMIT_BUFFERS          2
 +#define STM32_MAC_RECEIVE_BUFFERS           4
 +#define STM32_MAC_BUFFERS_SIZE              1522
 +#define STM32_MAC_PHY_TIMEOUT               100
 +#define STM32_MAC_ETH1_CHANGE_PHY_STATE     TRUE
 +#define STM32_MAC_ETH1_IRQ_PRIORITY         13
 +#define STM32_MAC_IP_CHECKSUM_OFFLOAD       0
 +
 +/*
 + * PWM driver system settings.
 + */
 +#define STM32_PWM_USE_ADVANCED              FALSE
 +#define STM32_PWM_USE_TIM1                  FALSE
 +#define STM32_PWM_USE_TIM2                  FALSE
 +#define STM32_PWM_USE_TIM3                  FALSE
 +#define STM32_PWM_USE_TIM4                  FALSE
 +#define STM32_PWM_USE_TIM5                  FALSE
 +#define STM32_PWM_USE_TIM8                  FALSE
 +#define STM32_PWM_USE_TIM9                  FALSE
 +#define STM32_PWM_TIM1_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM2_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM3_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM4_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM5_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM8_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM9_IRQ_PRIORITY         7
 +
 +/*
 + * SERIAL driver system settings.
 + */
 +#define STM32_SERIAL_USE_USART1             FALSE
 +#define STM32_SERIAL_USE_USART2             TRUE
 +#define STM32_SERIAL_USE_USART3             FALSE
 +#define STM32_SERIAL_USE_UART4              FALSE
 +#define STM32_SERIAL_USE_UART5              FALSE
 +#define STM32_SERIAL_USE_USART6             FALSE
 +#define STM32_SERIAL_USART1_PRIORITY        12
 +#define STM32_SERIAL_USART2_PRIORITY        12
 +#define STM32_SERIAL_USART3_PRIORITY        12
 +#define STM32_SERIAL_UART4_PRIORITY         12
 +#define STM32_SERIAL_UART5_PRIORITY         12
 +#define STM32_SERIAL_USART6_PRIORITY        12
 +
 +/*
 + * SPI driver system settings.
 + */
 +#define STM32_SPI_USE_SPI1                  FALSE
 +#define STM32_SPI_USE_SPI2                  FALSE
 +#define STM32_SPI_USE_SPI3                  FALSE
 +#define STM32_SPI_SPI1_RX_DMA_STREAM        STM32_DMA_STREAM_ID(2, 0)
 +#define STM32_SPI_SPI1_TX_DMA_STREAM        STM32_DMA_STREAM_ID(2, 3)
 +#define STM32_SPI_SPI2_RX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 3)
 +#define STM32_SPI_SPI2_TX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 4)
 +#define STM32_SPI_SPI3_RX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 0)
 +#define STM32_SPI_SPI3_TX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 7)
 +#define STM32_SPI_SPI1_DMA_PRIORITY         1
 +#define STM32_SPI_SPI2_DMA_PRIORITY         1
 +#define STM32_SPI_SPI3_DMA_PRIORITY         1
 +#define STM32_SPI_SPI1_IRQ_PRIORITY         10
 +#define STM32_SPI_SPI2_IRQ_PRIORITY         10
 +#define STM32_SPI_SPI3_IRQ_PRIORITY         10
 +#define STM32_SPI_DMA_ERROR_HOOK(spip)      chSysHalt()
 +
 +/*
 + * UART driver system settings.
 + */
 +#define STM32_UART_USE_USART1               FALSE
 +#define STM32_UART_USE_USART2               FALSE
 +#define STM32_UART_USE_USART3               FALSE
 +#define STM32_UART_USE_USART6               FALSE
 +#define STM32_UART_USART1_RX_DMA_STREAM     STM32_DMA_STREAM_ID(2, 5)
 +#define STM32_UART_USART1_TX_DMA_STREAM     STM32_DMA_STREAM_ID(2, 7)
 +#define STM32_UART_USART2_RX_DMA_STREAM     STM32_DMA_STREAM_ID(1, 5)
 +#define STM32_UART_USART2_TX_DMA_STREAM     STM32_DMA_STREAM_ID(1, 6)
 +#define STM32_UART_USART3_RX_DMA_STREAM     STM32_DMA_STREAM_ID(1, 1)
 +#define STM32_UART_USART3_TX_DMA_STREAM     STM32_DMA_STREAM_ID(1, 3)
 +#define STM32_UART_USART6_RX_DMA_STREAM     STM32_DMA_STREAM_ID(2, 2)
 +#define STM32_UART_USART6_TX_DMA_STREAM     STM32_DMA_STREAM_ID(2, 7)
 +#define STM32_UART_USART1_IRQ_PRIORITY      12
 +#define STM32_UART_USART2_IRQ_PRIORITY      12
 +#define STM32_UART_USART3_IRQ_PRIORITY      12
 +#define STM32_UART_USART6_IRQ_PRIORITY      12
 +#define STM32_UART_USART1_DMA_PRIORITY      0
 +#define STM32_UART_USART2_DMA_PRIORITY      0
 +#define STM32_UART_USART3_DMA_PRIORITY      0
 +#define STM32_UART_USART6_DMA_PRIORITY      0
 +#define STM32_UART_DMA_ERROR_HOOK(uartp)    chSysHalt()
 +
 +/*
 + * USB driver system settings.
 + */
 +#define STM32_USB_USE_OTG1                  FALSE
 +#define STM32_USB_USE_OTG2                  FALSE
 +#define STM32_USB_OTG1_IRQ_PRIORITY         14
 +#define STM32_USB_OTG2_IRQ_PRIORITY         14
 +#define STM32_USB_OTG1_RX_FIFO_SIZE         512
 +#define STM32_USB_OTG2_RX_FIFO_SIZE         1024
 +#define STM32_USB_OTG_THREAD_PRIO           LOWPRIO
 +#define STM32_USB_OTG_THREAD_STACK_SIZE     128
 +#define STM32_USB_OTGFIFO_FILL_BASEPRI      0
 diff --git a/testhal/STM32F4xx/SDC/readme.txt b/testhal/STM32F4xx/SDC/readme.txt new file mode 100644 index 000000000..b897676af --- /dev/null +++ b/testhal/STM32F4xx/SDC/readme.txt @@ -0,0 +1,26 @@ +*****************************************************************************
 +** ChibiOS/RT HAL - SDC driver demo for STM32.                             **
 +*****************************************************************************
 +
 +** TARGET **
 +
 +The demo runs on an Olimex ST_STM3210E_EVAL board.
 +
 +** The Demo **
 +
 +The application demonstrates the use of the STM32 SDC driver.
 +
 +** Build Procedure **
 +
 +The demo has been tested using the free Codesourcery GCC-based toolchain
 +and YAGARTO.
 +Just modify the TRGT line in the makefile in order to use different GCC ports.
 +
 +** Notes **
 +
 +Some files used by the demo are not part of ChibiOS/RT but are copyright of
 +ST Microelectronics and are licensed under a different license.
 +Also note that not all the files present in the ST library are distributed
 +with ChibiOS/RT, you can find the whole library on the ST web site:
 +
 +                             http://www.st.com
 diff --git a/testhal/STM32F4xx/SPI/.cproject b/testhal/STM32F4xx/SPI/.cproject new file mode 100644 index 000000000..6b2c42453 --- /dev/null +++ b/testhal/STM32F4xx/SPI/.cproject @@ -0,0 +1,51 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?>
 +<?fileVersion 4.0.0?>
 +
 +<cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
 +	<storageModule moduleId="org.eclipse.cdt.core.settings">
 +		<cconfiguration id="0.691815652">
 +			<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="0.691815652" moduleId="org.eclipse.cdt.core.settings" name="Default">
 +				<externalSettings/>
 +				<extensions>
 +					<extension id="org.eclipse.cdt.core.VCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 +					<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 +					<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
 +					<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 +					<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 +					<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 +				</extensions>
 +			</storageModule>
 +			<storageModule moduleId="cdtBuildSystem" version="4.0.0">
 +				<configuration artifactName="${ProjName}" buildProperties="" description="" id="0.691815652" name="Default" parent="org.eclipse.cdt.build.core.prefbase.cfg">
 +					<folderInfo id="0.691815652." name="/" resourcePath="">
 +						<toolChain id="org.eclipse.cdt.build.core.prefbase.toolchain.884342386" name="No ToolChain" resourceTypeBasedDiscovery="false" superClass="org.eclipse.cdt.build.core.prefbase.toolchain">
 +							<targetPlatform id="org.eclipse.cdt.build.core.prefbase.toolchain.884342386.339777752" name=""/>
 +							<builder id="org.eclipse.cdt.build.core.settings.default.builder.1729138099" keepEnvironmentInBuildfile="false" managedBuildOn="false" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="org.eclipse.cdt.build.core.settings.default.builder"/>
 +							<tool id="org.eclipse.cdt.build.core.settings.holder.libs.146870087" name="holder for library settings" superClass="org.eclipse.cdt.build.core.settings.holder.libs"/>
 +							<tool id="org.eclipse.cdt.build.core.settings.holder.605490810" name="Assembly" superClass="org.eclipse.cdt.build.core.settings.holder">
 +								<inputType id="org.eclipse.cdt.build.core.settings.holder.inType.2132469247" languageId="org.eclipse.cdt.core.assembly" languageName="Assembly" sourceContentType="org.eclipse.cdt.core.asmSource" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
 +							</tool>
 +							<tool id="org.eclipse.cdt.build.core.settings.holder.936236661" name="GNU C++" superClass="org.eclipse.cdt.build.core.settings.holder">
 +								<inputType id="org.eclipse.cdt.build.core.settings.holder.inType.1782745250" languageId="org.eclipse.cdt.core.g++" languageName="GNU C++" sourceContentType="org.eclipse.cdt.core.cxxSource,org.eclipse.cdt.core.cxxHeader" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
 +							</tool>
 +							<tool id="org.eclipse.cdt.build.core.settings.holder.670706928" name="GNU C" superClass="org.eclipse.cdt.build.core.settings.holder">
 +								<inputType id="org.eclipse.cdt.build.core.settings.holder.inType.417510158" languageId="org.eclipse.cdt.core.gcc" languageName="GNU C" sourceContentType="org.eclipse.cdt.core.cSource,org.eclipse.cdt.core.cHeader" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
 +							</tool>
 +						</toolChain>
 +					</folderInfo>
 +				</configuration>
 +			</storageModule>
 +			<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
 +		</cconfiguration>
 +	</storageModule>
 +	<storageModule moduleId="cdtBuildSystem" version="4.0.0">
 +		<project id="STM32F4xx-SPI.null.219011718" name="STM32F4xx-SPI"/>
 +	</storageModule>
 +	<storageModule moduleId="scannerConfiguration">
 +		<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
 +		<scannerConfigBuildInfo instanceId="0.691815652">
 +			<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile"/>
 +		</scannerConfigBuildInfo>
 +	</storageModule>
 +	<storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
 +</cproject>
 diff --git a/testhal/STM32F4xx/SPI/.project b/testhal/STM32F4xx/SPI/.project new file mode 100644 index 000000000..effebe09e --- /dev/null +++ b/testhal/STM32F4xx/SPI/.project @@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="UTF-8"?>
 +<projectDescription>
 +	<name>STM32F4xx-SPI</name>
 +	<comment></comment>
 +	<projects>
 +	</projects>
 +	<buildSpec>
 +		<buildCommand>
 +			<name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
 +			<triggers>clean,full,incremental,</triggers>
 +			<arguments>
 +			</arguments>
 +		</buildCommand>
 +		<buildCommand>
 +			<name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
 +			<triggers>full,incremental,</triggers>
 +			<arguments>
 +			</arguments>
 +		</buildCommand>
 +	</buildSpec>
 +	<natures>
 +		<nature>org.eclipse.cdt.core.cnature</nature>
 +		<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
 +		<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
 +	</natures>
 +	<linkedResources>
 +		<link>
 +			<name>board</name>
 +			<type>2</type>
 +			<locationURI>CHIBIOS/boards/ST_STM32F4_DISCOVERY</locationURI>
 +		</link>
 +		<link>
 +			<name>os</name>
 +			<type>2</type>
 +			<locationURI>CHIBIOS/os</locationURI>
 +		</link>
 +	</linkedResources>
 +</projectDescription>
 diff --git a/testhal/STM32F4xx/SPI/Makefile b/testhal/STM32F4xx/SPI/Makefile new file mode 100644 index 000000000..86de6d81c --- /dev/null +++ b/testhal/STM32F4xx/SPI/Makefile @@ -0,0 +1,222 @@ +##############################################################################
 +# Build global options
 +# NOTE: Can be overridden externally.
 +#
 +
 +# Compiler options here.
 +ifeq ($(USE_OPT),)
 +  USE_OPT = -O2 -ggdb -fomit-frame-pointer -falign-functions=16
 +endif
 +
 +# C specific options here (added to USE_OPT).
 +ifeq ($(USE_COPT),)
 +  USE_COPT = 
 +endif
 +
 +# C++ specific options here (added to USE_OPT).
 +ifeq ($(USE_CPPOPT),)
 +  USE_CPPOPT = -fno-rtti
 +endif
 +
 +# Enable this if you want the linker to remove unused code and data
 +ifeq ($(USE_LINK_GC),)
 +  USE_LINK_GC = yes
 +endif
 +
 +# If enabled, this option allows to compile the application in THUMB mode.
 +ifeq ($(USE_THUMB),)
 +  USE_THUMB = yes
 +endif
 +
 +# Enable this if you want to see the full log while compiling.
 +ifeq ($(USE_VERBOSE_COMPILE),)
 +  USE_VERBOSE_COMPILE = no
 +endif
 +
 +#
 +# Build global options
 +##############################################################################
 +
 +##############################################################################
 +# Architecture or project specific options
 +#
 +
 +# Enables the use of FPU on Cortex-M4.
 +# Enable this if you really want to use the STM FWLib.
 +ifeq ($(USE_FPU),)
 +  USE_FPU = no
 +endif
 +
 +# Enable this if you really want to use the STM FWLib.
 +ifeq ($(USE_FWLIB),)
 +  USE_FWLIB = no
 +endif
 +
 +#
 +# Architecture or project specific options
 +##############################################################################
 +
 +##############################################################################
 +# Project, sources and paths
 +#
 +
 +# Define project name here
 +PROJECT = ch
 +
 +# Imported source files and paths
 +CHIBIOS = ../../..
 +include $(CHIBIOS)/boards/ST_STM32F4_DISCOVERY/board.mk
 +include $(CHIBIOS)/os/hal/platforms/STM32F4xx/platform.mk
 +include $(CHIBIOS)/os/hal/hal.mk
 +include $(CHIBIOS)/os/ports/GCC/ARMCMx/STM32F4xx/port.mk
 +include $(CHIBIOS)/os/kernel/kernel.mk
 +include $(CHIBIOS)/test/test.mk
 +
 +# Define linker script file here
 +LDSCRIPT= $(PORTLD)/STM32F407xG.ld
 +#LDSCRIPT= $(PORTLD)/STM32F407xG_CCM.ld
 +
 +# C sources that can be compiled in ARM or THUMB mode depending on the global
 +# setting.
 +CSRC = $(PORTSRC) \
 +       $(KERNSRC) \
 +       $(TESTSRC) \
 +       $(HALSRC) \
 +       $(PLATFORMSRC) \
 +       $(BOARDSRC) \
 +       $(CHIBIOS)/os/various/chprintf.c \
 +       main.c
 +
 +# C++ sources that can be compiled in ARM or THUMB mode depending on the global
 +# setting.
 +CPPSRC =
 +
 +# C sources to be compiled in ARM mode regardless of the global setting.
 +# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler
 +#       option that results in lower performance and larger code size.
 +ACSRC =
 +
 +# C++ sources to be compiled in ARM mode regardless of the global setting.
 +# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler
 +#       option that results in lower performance and larger code size.
 +ACPPSRC =
 +
 +# C sources to be compiled in THUMB mode regardless of the global setting.
 +# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler
 +#       option that results in lower performance and larger code size.
 +TCSRC =
 +
 +# C sources to be compiled in THUMB mode regardless of the global setting.
 +# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler
 +#       option that results in lower performance and larger code size.
 +TCPPSRC =
 +
 +# List ASM source files here
 +ASMSRC = $(PORTASM)
 +
 +INCDIR = $(PORTINC) $(KERNINC) $(TESTINC) \
 +         $(HALINC) $(PLATFORMINC) $(BOARDINC) \
 +         $(CHIBIOS)/os/various
 +
 +#
 +# Project, sources and paths
 +##############################################################################
 +
 +##############################################################################
 +# Compiler settings
 +#
 +
 +MCU  = cortex-m4
 +
 +#TRGT = arm-elf-
 +TRGT = arm-none-eabi-
 +CC   = $(TRGT)gcc
 +CPPC = $(TRGT)g++
 +# Enable loading with g++ only if you need C++ runtime support.
 +# NOTE: You can use C++ even without C++ support if you are careful. C++
 +#       runtime support makes code size explode.
 +LD   = $(TRGT)gcc
 +#LD   = $(TRGT)g++
 +CP   = $(TRGT)objcopy
 +AS   = $(TRGT)gcc -x assembler-with-cpp
 +OD   = $(TRGT)objdump
 +HEX  = $(CP) -O ihex
 +BIN  = $(CP) -O binary
 +
 +# ARM-specific options here
 +AOPT =
 +
 +# THUMB-specific options here
 +TOPT = -mthumb -DTHUMB
 +
 +# Define C warning options here
 +CWARN = -Wall -Wextra -Wstrict-prototypes
 +
 +# Define C++ warning options here
 +CPPWARN = -Wall -Wextra
 +
 +#
 +# Compiler settings
 +##############################################################################
 +
 +##############################################################################
 +# Start of default section
 +#
 +
 +# List all default C defines here, like -D_DEBUG=1
 +DDEFS =
 +
 +# List all default ASM defines here, like -D_DEBUG=1
 +DADEFS =
 +
 +# List all default directories to look for include files here
 +DINCDIR =
 +
 +# List the default directory to look for the libraries here
 +DLIBDIR =
 +
 +# List all default libraries here
 +DLIBS =
 +
 +#
 +# End of default section
 +##############################################################################
 +
 +##############################################################################
 +# Start of user section
 +#
 +
 +# List all user C define here, like -D_DEBUG=1
 +UDEFS =
 +
 +# Define ASM defines here
 +UADEFS =
 +
 +# List all user directories here
 +UINCDIR =
 +
 +# List the user directory to look for the libraries here
 +ULIBDIR =
 +
 +# List all user libraries here
 +ULIBS =
 +
 +#
 +# End of user defines
 +##############################################################################
 +
 +ifeq ($(USE_FPU),yes)
 +  USE_OPT += -mfloat-abi=softfp -mfpu=fpv4-sp-d16 -fsingle-precision-constant
 +  DDEFS += -DCORTEX_USE_FPU=TRUE
 +else
 +  DDEFS += -DCORTEX_USE_FPU=FALSE
 +endif
 +
 +ifeq ($(USE_FWLIB),yes)
 +  include $(CHIBIOS)/ext/stm32lib/stm32lib.mk
 +  CSRC += $(STM32SRC)
 +  INCDIR += $(STM32INC)
 +  USE_OPT += -DUSE_STDPERIPH_DRIVER
 +endif
 +
 +include $(CHIBIOS)/os/ports/GCC/ARMCMx/rules.mk
 diff --git a/testhal/STM32F4xx/SPI/chconf.h b/testhal/STM32F4xx/SPI/chconf.h new file mode 100644 index 000000000..2e6fcc6ee --- /dev/null +++ b/testhal/STM32F4xx/SPI/chconf.h @@ -0,0 +1,531 @@ +/*
 +    ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio
 +
 +    Licensed under the Apache License, Version 2.0 (the "License");
 +    you may not use this file except in compliance with the License.
 +    You may obtain a copy of the License at
 +
 +        http://www.apache.org/licenses/LICENSE-2.0
 +
 +    Unless required by applicable law or agreed to in writing, software
 +    distributed under the License is distributed on an "AS IS" BASIS,
 +    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 +    See the License for the specific language governing permissions and
 +    limitations under the License.
 +*/
 +
 +/**
 + * @file    templates/chconf.h
 + * @brief   Configuration file template.
 + * @details A copy of this file must be placed in each project directory, it
 + *          contains the application specific kernel settings.
 + *
 + * @addtogroup config
 + * @details Kernel related settings and hooks.
 + * @{
 + */
 +
 +#ifndef _CHCONF_H_
 +#define _CHCONF_H_
 +
 +/*===========================================================================*/
 +/**
 + * @name Kernel parameters and options
 + * @{
 + */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   System tick frequency.
 + * @details Frequency of the system timer that drives the system ticks. This
 + *          setting also defines the system tick time unit.
 + */
 +#if !defined(CH_FREQUENCY) || defined(__DOXYGEN__)
 +#define CH_FREQUENCY                    1000
 +#endif
 +
 +/**
 + * @brief   Round robin interval.
 + * @details This constant is the number of system ticks allowed for the
 + *          threads before preemption occurs. Setting this value to zero
 + *          disables the preemption for threads with equal priority and the
 + *          round robin becomes cooperative. Note that higher priority
 + *          threads can still preempt, the kernel is always preemptive.
 + *
 + * @note    Disabling the round robin preemption makes the kernel more compact
 + *          and generally faster.
 + */
 +#if !defined(CH_TIME_QUANTUM) || defined(__DOXYGEN__)
 +#define CH_TIME_QUANTUM                 20
 +#endif
 +
 +/**
 + * @brief   Managed RAM size.
 + * @details Size of the RAM area to be managed by the OS. If set to zero
 + *          then the whole available RAM is used. The core memory is made
 + *          available to the heap allocator and/or can be used directly through
 + *          the simplified core memory allocator.
 + *
 + * @note    In order to let the OS manage the whole RAM the linker script must
 + *          provide the @p __heap_base__ and @p __heap_end__ symbols.
 + * @note    Requires @p CH_USE_MEMCORE.
 + */
 +#if !defined(CH_MEMCORE_SIZE) || defined(__DOXYGEN__)
 +#define CH_MEMCORE_SIZE                 0
 +#endif
 +
 +/**
 + * @brief   Idle thread automatic spawn suppression.
 + * @details When this option is activated the function @p chSysInit()
 + *          does not spawn the idle thread automatically. The application has
 + *          then the responsibility to do one of the following:
 + *          - Spawn a custom idle thread at priority @p IDLEPRIO.
 + *          - Change the main() thread priority to @p IDLEPRIO then enter
 + *            an endless loop. In this scenario the @p main() thread acts as
 + *            the idle thread.
 + *          .
 + * @note    Unless an idle thread is spawned the @p main() thread must not
 + *          enter a sleep state.
 + */
 +#if !defined(CH_NO_IDLE_THREAD) || defined(__DOXYGEN__)
 +#define CH_NO_IDLE_THREAD               FALSE
 +#endif
 +
 +/** @} */
 +
 +/*===========================================================================*/
 +/**
 + * @name Performance options
 + * @{
 + */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   OS optimization.
 + * @details If enabled then time efficient rather than space efficient code
 + *          is used when two possible implementations exist.
 + *
 + * @note    This is not related to the compiler optimization options.
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_OPTIMIZE_SPEED) || defined(__DOXYGEN__)
 +#define CH_OPTIMIZE_SPEED               TRUE
 +#endif
 +
 +/** @} */
 +
 +/*===========================================================================*/
 +/**
 + * @name Subsystem options
 + * @{
 + */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Threads registry APIs.
 + * @details If enabled then the registry APIs are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_REGISTRY) || defined(__DOXYGEN__)
 +#define CH_USE_REGISTRY                 TRUE
 +#endif
 +
 +/**
 + * @brief   Threads synchronization APIs.
 + * @details If enabled then the @p chThdWait() function is included in
 + *          the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_WAITEXIT) || defined(__DOXYGEN__)
 +#define CH_USE_WAITEXIT                 TRUE
 +#endif
 +
 +/**
 + * @brief   Semaphores APIs.
 + * @details If enabled then the Semaphores APIs are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_SEMAPHORES) || defined(__DOXYGEN__)
 +#define CH_USE_SEMAPHORES               TRUE
 +#endif
 +
 +/**
 + * @brief   Semaphores queuing mode.
 + * @details If enabled then the threads are enqueued on semaphores by
 + *          priority rather than in FIFO order.
 + *
 + * @note    The default is @p FALSE. Enable this if you have special requirements.
 + * @note    Requires @p CH_USE_SEMAPHORES.
 + */
 +#if !defined(CH_USE_SEMAPHORES_PRIORITY) || defined(__DOXYGEN__)
 +#define CH_USE_SEMAPHORES_PRIORITY      FALSE
 +#endif
 +
 +/**
 + * @brief   Atomic semaphore API.
 + * @details If enabled then the semaphores the @p chSemSignalWait() API
 + *          is included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_SEMAPHORES.
 + */
 +#if !defined(CH_USE_SEMSW) || defined(__DOXYGEN__)
 +#define CH_USE_SEMSW                    TRUE
 +#endif
 +
 +/**
 + * @brief   Mutexes APIs.
 + * @details If enabled then the mutexes APIs are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_MUTEXES) || defined(__DOXYGEN__)
 +#define CH_USE_MUTEXES                  TRUE
 +#endif
 +
 +/**
 + * @brief   Conditional Variables APIs.
 + * @details If enabled then the conditional variables APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_MUTEXES.
 + */
 +#if !defined(CH_USE_CONDVARS) || defined(__DOXYGEN__)
 +#define CH_USE_CONDVARS                 TRUE
 +#endif
 +
 +/**
 + * @brief   Conditional Variables APIs with timeout.
 + * @details If enabled then the conditional variables APIs with timeout
 + *          specification are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_CONDVARS.
 + */
 +#if !defined(CH_USE_CONDVARS_TIMEOUT) || defined(__DOXYGEN__)
 +#define CH_USE_CONDVARS_TIMEOUT         TRUE
 +#endif
 +
 +/**
 + * @brief   Events Flags APIs.
 + * @details If enabled then the event flags APIs are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_EVENTS) || defined(__DOXYGEN__)
 +#define CH_USE_EVENTS                   TRUE
 +#endif
 +
 +/**
 + * @brief   Events Flags APIs with timeout.
 + * @details If enabled then the events APIs with timeout specification
 + *          are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_EVENTS.
 + */
 +#if !defined(CH_USE_EVENTS_TIMEOUT) || defined(__DOXYGEN__)
 +#define CH_USE_EVENTS_TIMEOUT           TRUE
 +#endif
 +
 +/**
 + * @brief   Synchronous Messages APIs.
 + * @details If enabled then the synchronous messages APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_MESSAGES) || defined(__DOXYGEN__)
 +#define CH_USE_MESSAGES                 TRUE
 +#endif
 +
 +/**
 + * @brief   Synchronous Messages queuing mode.
 + * @details If enabled then messages are served by priority rather than in
 + *          FIFO order.
 + *
 + * @note    The default is @p FALSE. Enable this if you have special requirements.
 + * @note    Requires @p CH_USE_MESSAGES.
 + */
 +#if !defined(CH_USE_MESSAGES_PRIORITY) || defined(__DOXYGEN__)
 +#define CH_USE_MESSAGES_PRIORITY        FALSE
 +#endif
 +
 +/**
 + * @brief   Mailboxes APIs.
 + * @details If enabled then the asynchronous messages (mailboxes) APIs are
 + *          included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_SEMAPHORES.
 + */
 +#if !defined(CH_USE_MAILBOXES) || defined(__DOXYGEN__)
 +#define CH_USE_MAILBOXES                TRUE
 +#endif
 +
 +/**
 + * @brief   I/O Queues APIs.
 + * @details If enabled then the I/O queues APIs are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_QUEUES) || defined(__DOXYGEN__)
 +#define CH_USE_QUEUES                   TRUE
 +#endif
 +
 +/**
 + * @brief   Core Memory Manager APIs.
 + * @details If enabled then the core memory manager APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_MEMCORE) || defined(__DOXYGEN__)
 +#define CH_USE_MEMCORE                  TRUE
 +#endif
 +
 +/**
 + * @brief   Heap Allocator APIs.
 + * @details If enabled then the memory heap allocator APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_MEMCORE and either @p CH_USE_MUTEXES or
 + *          @p CH_USE_SEMAPHORES.
 + * @note    Mutexes are recommended.
 + */
 +#if !defined(CH_USE_HEAP) || defined(__DOXYGEN__)
 +#define CH_USE_HEAP                     TRUE
 +#endif
 +
 +/**
 + * @brief   C-runtime allocator.
 + * @details If enabled the the heap allocator APIs just wrap the C-runtime
 + *          @p malloc() and @p free() functions.
 + *
 + * @note    The default is @p FALSE.
 + * @note    Requires @p CH_USE_HEAP.
 + * @note    The C-runtime may or may not require @p CH_USE_MEMCORE, see the
 + *          appropriate documentation.
 + */
 +#if !defined(CH_USE_MALLOC_HEAP) || defined(__DOXYGEN__)
 +#define CH_USE_MALLOC_HEAP              FALSE
 +#endif
 +
 +/**
 + * @brief   Memory Pools Allocator APIs.
 + * @details If enabled then the memory pools allocator APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_MEMPOOLS) || defined(__DOXYGEN__)
 +#define CH_USE_MEMPOOLS                 TRUE
 +#endif
 +
 +/**
 + * @brief   Dynamic Threads APIs.
 + * @details If enabled then the dynamic threads creation APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_WAITEXIT.
 + * @note    Requires @p CH_USE_HEAP and/or @p CH_USE_MEMPOOLS.
 + */
 +#if !defined(CH_USE_DYNAMIC) || defined(__DOXYGEN__)
 +#define CH_USE_DYNAMIC                  TRUE
 +#endif
 +
 +/** @} */
 +
 +/*===========================================================================*/
 +/**
 + * @name Debug options
 + * @{
 + */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Debug option, system state check.
 + * @details If enabled the correct call protocol for system APIs is checked
 + *          at runtime.
 + *
 + * @note    The default is @p FALSE.
 + */
 +#if !defined(CH_DBG_SYSTEM_STATE_CHECK) || defined(__DOXYGEN__)
 +#define CH_DBG_SYSTEM_STATE_CHECK       TRUE
 +#endif
 +
 +/**
 + * @brief   Debug option, parameters checks.
 + * @details If enabled then the checks on the API functions input
 + *          parameters are activated.
 + *
 + * @note    The default is @p FALSE.
 + */
 +#if !defined(CH_DBG_ENABLE_CHECKS) || defined(__DOXYGEN__)
 +#define CH_DBG_ENABLE_CHECKS            TRUE
 +#endif
 +
 +/**
 + * @brief   Debug option, consistency checks.
 + * @details If enabled then all the assertions in the kernel code are
 + *          activated. This includes consistency checks inside the kernel,
 + *          runtime anomalies and port-defined checks.
 + *
 + * @note    The default is @p FALSE.
 + */
 +#if !defined(CH_DBG_ENABLE_ASSERTS) || defined(__DOXYGEN__)
 +#define CH_DBG_ENABLE_ASSERTS           TRUE
 +#endif
 +
 +/**
 + * @brief   Debug option, trace buffer.
 + * @details If enabled then the context switch circular trace buffer is
 + *          activated.
 + *
 + * @note    The default is @p FALSE.
 + */
 +#if !defined(CH_DBG_ENABLE_TRACE) || defined(__DOXYGEN__)
 +#define CH_DBG_ENABLE_TRACE             TRUE
 +#endif
 +
 +/**
 + * @brief   Debug option, stack checks.
 + * @details If enabled then a runtime stack check is performed.
 + *
 + * @note    The default is @p FALSE.
 + * @note    The stack check is performed in a architecture/port dependent way.
 + *          It may not be implemented or some ports.
 + * @note    The default failure mode is to halt the system with the global
 + *          @p panic_msg variable set to @p NULL.
 + */
 +#if !defined(CH_DBG_ENABLE_STACK_CHECK) || defined(__DOXYGEN__)
 +#define CH_DBG_ENABLE_STACK_CHECK       TRUE
 +#endif
 +
 +/**
 + * @brief   Debug option, stacks initialization.
 + * @details If enabled then the threads working area is filled with a byte
 + *          value when a thread is created. This can be useful for the
 + *          runtime measurement of the used stack.
 + *
 + * @note    The default is @p FALSE.
 + */
 +#if !defined(CH_DBG_FILL_THREADS) || defined(__DOXYGEN__)
 +#define CH_DBG_FILL_THREADS             TRUE
 +#endif
 +
 +/**
 + * @brief   Debug option, threads profiling.
 + * @details If enabled then a field is added to the @p Thread structure that
 + *          counts the system ticks occurred while executing the thread.
 + *
 + * @note    The default is @p TRUE.
 + * @note    This debug option is defaulted to TRUE because it is required by
 + *          some test cases into the test suite.
 + */
 +#if !defined(CH_DBG_THREADS_PROFILING) || defined(__DOXYGEN__)
 +#define CH_DBG_THREADS_PROFILING        TRUE
 +#endif
 +
 +/** @} */
 +
 +/*===========================================================================*/
 +/**
 + * @name Kernel hooks
 + * @{
 + */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Threads descriptor structure extension.
 + * @details User fields added to the end of the @p Thread structure.
 + */
 +#if !defined(THREAD_EXT_FIELDS) || defined(__DOXYGEN__)
 +#define THREAD_EXT_FIELDS                                                   \
 +  /* Add threads custom fields here.*/
 +#endif
 +
 +/**
 + * @brief   Threads initialization hook.
 + * @details User initialization code added to the @p chThdInit() API.
 + *
 + * @note    It is invoked from within @p chThdInit() and implicitly from all
 + *          the threads creation APIs.
 + */
 +#if !defined(THREAD_EXT_INIT_HOOK) || defined(__DOXYGEN__)
 +#define THREAD_EXT_INIT_HOOK(tp) {                                          \
 +  /* Add threads initialization code here.*/                                \
 +}
 +#endif
 +
 +/**
 + * @brief   Threads finalization hook.
 + * @details User finalization code added to the @p chThdExit() API.
 + *
 + * @note    It is inserted into lock zone.
 + * @note    It is also invoked when the threads simply return in order to
 + *          terminate.
 + */
 +#if !defined(THREAD_EXT_EXIT_HOOK) || defined(__DOXYGEN__)
 +#define THREAD_EXT_EXIT_HOOK(tp) {                                          \
 +  /* Add threads finalization code here.*/                                  \
 +}
 +#endif
 +
 +/**
 + * @brief   Context switch hook.
 + * @details This hook is invoked just before switching between threads.
 + */
 +#if !defined(THREAD_CONTEXT_SWITCH_HOOK) || defined(__DOXYGEN__)
 +#define THREAD_CONTEXT_SWITCH_HOOK(ntp, otp) {                              \
 +  /* System halt code here.*/                                               \
 +}
 +#endif
 +
 +/**
 + * @brief   Idle Loop hook.
 + * @details This hook is continuously invoked by the idle thread loop.
 + */
 +#if !defined(IDLE_LOOP_HOOK) || defined(__DOXYGEN__)
 +#define IDLE_LOOP_HOOK() {                                                  \
 +  /* Idle loop code here.*/                                                 \
 +}
 +#endif
 +
 +/**
 + * @brief   System tick event hook.
 + * @details This hook is invoked in the system tick handler immediately
 + *          after processing the virtual timers queue.
 + */
 +#if !defined(SYSTEM_TICK_EVENT_HOOK) || defined(__DOXYGEN__)
 +#define SYSTEM_TICK_EVENT_HOOK() {                                          \
 +  /* System tick event code here.*/                                         \
 +}
 +#endif
 +
 +/**
 + * @brief   System halt hook.
 + * @details This hook is invoked in case to a system halting error before
 + *          the system is halted.
 + */
 +#if !defined(SYSTEM_HALT_HOOK) || defined(__DOXYGEN__)
 +#define SYSTEM_HALT_HOOK() {                                                \
 +  /* System halt code here.*/                                               \
 +}
 +#endif
 +
 +/** @} */
 +
 +/*===========================================================================*/
 +/* Port-specific settings (override port settings defaulted in chcore.h).    */
 +/*===========================================================================*/
 +
 +#endif  /* _CHCONF_H_ */
 +
 +/** @} */
 diff --git a/testhal/STM32F4xx/SPI/halconf.h b/testhal/STM32F4xx/SPI/halconf.h new file mode 100644 index 000000000..3e1cafbbf --- /dev/null +++ b/testhal/STM32F4xx/SPI/halconf.h @@ -0,0 +1,312 @@ +/*
 +    ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio
 +
 +    Licensed under the Apache License, Version 2.0 (the "License");
 +    you may not use this file except in compliance with the License.
 +    You may obtain a copy of the License at
 +
 +        http://www.apache.org/licenses/LICENSE-2.0
 +
 +    Unless required by applicable law or agreed to in writing, software
 +    distributed under the License is distributed on an "AS IS" BASIS,
 +    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 +    See the License for the specific language governing permissions and
 +    limitations under the License.
 +*/
 +
 +/**
 + * @file    templates/halconf.h
 + * @brief   HAL configuration header.
 + * @details HAL configuration file, this file allows to enable or disable the
 + *          various device drivers from your application. You may also use
 + *          this file in order to override the device drivers default settings.
 + *
 + * @addtogroup HAL_CONF
 + * @{
 + */
 +
 +#ifndef _HALCONF_H_
 +#define _HALCONF_H_
 +
 +#include "mcuconf.h"
 +
 +/**
 + * @brief   Enables the TM subsystem.
 + */
 +#if !defined(HAL_USE_TM) || defined(__DOXYGEN__)
 +#define HAL_USE_TM                  TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the PAL subsystem.
 + */
 +#if !defined(HAL_USE_PAL) || defined(__DOXYGEN__)
 +#define HAL_USE_PAL                 TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the ADC subsystem.
 + */
 +#if !defined(HAL_USE_ADC) || defined(__DOXYGEN__)
 +#define HAL_USE_ADC                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the CAN subsystem.
 + */
 +#if !defined(HAL_USE_CAN) || defined(__DOXYGEN__)
 +#define HAL_USE_CAN                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the EXT subsystem.
 + */
 +#if !defined(HAL_USE_EXT) || defined(__DOXYGEN__)
 +#define HAL_USE_EXT                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the GPT subsystem.
 + */
 +#if !defined(HAL_USE_GPT) || defined(__DOXYGEN__)
 +#define HAL_USE_GPT                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the I2C subsystem.
 + */
 +#if !defined(HAL_USE_I2C) || defined(__DOXYGEN__)
 +#define HAL_USE_I2C                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the ICU subsystem.
 + */
 +#if !defined(HAL_USE_ICU) || defined(__DOXYGEN__)
 +#define HAL_USE_ICU                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the MAC subsystem.
 + */
 +#if !defined(HAL_USE_MAC) || defined(__DOXYGEN__)
 +#define HAL_USE_MAC                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the MMC_SPI subsystem.
 + */
 +#if !defined(HAL_USE_MMC_SPI) || defined(__DOXYGEN__)
 +#define HAL_USE_MMC_SPI             FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the PWM subsystem.
 + */
 +#if !defined(HAL_USE_PWM) || defined(__DOXYGEN__)
 +#define HAL_USE_PWM                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the RTC subsystem.
 + */
 +#if !defined(HAL_USE_RTC) || defined(__DOXYGEN__)
 +#define HAL_USE_RTC                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the SDC subsystem.
 + */
 +#if !defined(HAL_USE_SDC) || defined(__DOXYGEN__)
 +#define HAL_USE_SDC                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the SERIAL subsystem.
 + */
 +#if !defined(HAL_USE_SERIAL) || defined(__DOXYGEN__)
 +#define HAL_USE_SERIAL              FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the SERIAL over USB subsystem.
 + */
 +#if !defined(HAL_USE_SERIAL_USB) || defined(__DOXYGEN__)
 +#define HAL_USE_SERIAL_USB          FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the SPI subsystem.
 + */
 +#if !defined(HAL_USE_SPI) || defined(__DOXYGEN__)
 +#define HAL_USE_SPI                 TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the UART subsystem.
 + */
 +#if !defined(HAL_USE_UART) || defined(__DOXYGEN__)
 +#define HAL_USE_UART                FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the USB subsystem.
 + */
 +#if !defined(HAL_USE_USB) || defined(__DOXYGEN__)
 +#define HAL_USE_USB                 FALSE
 +#endif
 +
 +/*===========================================================================*/
 +/* ADC driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Enables synchronous APIs.
 + * @note    Disabling this option saves both code and data space.
 + */
 +#if !defined(ADC_USE_WAIT) || defined(__DOXYGEN__)
 +#define ADC_USE_WAIT                TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the @p adcAcquireBus() and @p adcReleaseBus() APIs.
 + * @note    Disabling this option saves both code and data space.
 + */
 +#if !defined(ADC_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
 +#define ADC_USE_MUTUAL_EXCLUSION    TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* CAN driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Sleep mode related APIs inclusion switch.
 + */
 +#if !defined(CAN_USE_SLEEP_MODE) || defined(__DOXYGEN__)
 +#define CAN_USE_SLEEP_MODE          TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* I2C driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Enables the mutual exclusion APIs on the I2C bus.
 + */
 +#if !defined(I2C_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
 +#define I2C_USE_MUTUAL_EXCLUSION    TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* MAC driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Enables an event sources for incoming packets.
 + */
 +#if !defined(MAC_USE_ZERO_COPY) || defined(__DOXYGEN__)
 +#define MAC_USE_ZERO_COPY           FALSE
 +#endif
 +
 +/**
 + * @brief   Enables an event sources for incoming packets.
 + */
 +#if !defined(MAC_USE_EVENTS) || defined(__DOXYGEN__)
 +#define MAC_USE_EVENTS              TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* MMC_SPI driver related settings.                                          */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Delays insertions.
 + * @details If enabled this options inserts delays into the MMC waiting
 + *          routines releasing some extra CPU time for the threads with
 + *          lower priority, this may slow down the driver a bit however.
 + *          This option is recommended also if the SPI driver does not
 + *          use a DMA channel and heavily loads the CPU.
 + */
 +#if !defined(MMC_NICE_WAITING) || defined(__DOXYGEN__)
 +#define MMC_NICE_WAITING            TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* SDC driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Number of initialization attempts before rejecting the card.
 + * @note    Attempts are performed at 10mS intervals.
 + */
 +#if !defined(SDC_INIT_RETRY) || defined(__DOXYGEN__)
 +#define SDC_INIT_RETRY              100
 +#endif
 +
 +/**
 + * @brief   Include support for MMC cards.
 + * @note    MMC support is not yet implemented so this option must be kept
 + *          at @p FALSE.
 + */
 +#if !defined(SDC_MMC_SUPPORT) || defined(__DOXYGEN__)
 +#define SDC_MMC_SUPPORT             FALSE
 +#endif
 +
 +/**
 + * @brief   Delays insertions.
 + * @details If enabled this options inserts delays into the MMC waiting
 + *          routines releasing some extra CPU time for the threads with
 + *          lower priority, this may slow down the driver a bit however.
 + */
 +#if !defined(SDC_NICE_WAITING) || defined(__DOXYGEN__)
 +#define SDC_NICE_WAITING            TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* SERIAL driver related settings.                                           */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Default bit rate.
 + * @details Configuration parameter, this is the baud rate selected for the
 + *          default configuration.
 + */
 +#if !defined(SERIAL_DEFAULT_BITRATE) || defined(__DOXYGEN__)
 +#define SERIAL_DEFAULT_BITRATE      38400
 +#endif
 +
 +/**
 + * @brief   Serial buffers size.
 + * @details Configuration parameter, you can change the depth of the queue
 + *          buffers depending on the requirements of your application.
 + * @note    The default is 64 bytes for both the transmission and receive
 + *          buffers.
 + */
 +#if !defined(SERIAL_BUFFERS_SIZE) || defined(__DOXYGEN__)
 +#define SERIAL_BUFFERS_SIZE         16
 +#endif
 +
 +/*===========================================================================*/
 +/* SPI driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Enables synchronous APIs.
 + * @note    Disabling this option saves both code and data space.
 + */
 +#if !defined(SPI_USE_WAIT) || defined(__DOXYGEN__)
 +#define SPI_USE_WAIT                TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the @p spiAcquireBus() and @p spiReleaseBus() APIs.
 + * @note    Disabling this option saves both code and data space.
 + */
 +#if !defined(SPI_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
 +#define SPI_USE_MUTUAL_EXCLUSION    TRUE
 +#endif
 +
 +#endif /* _HALCONF_H_ */
 +
 +/** @} */
 diff --git a/testhal/STM32F4xx/SPI/main.c b/testhal/STM32F4xx/SPI/main.c new file mode 100644 index 000000000..04999434b --- /dev/null +++ b/testhal/STM32F4xx/SPI/main.c @@ -0,0 +1,138 @@ +/*
 +    ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio
 +
 +    Licensed under the Apache License, Version 2.0 (the "License");
 +    you may not use this file except in compliance with the License.
 +    You may obtain a copy of the License at
 +
 +        http://www.apache.org/licenses/LICENSE-2.0
 +
 +    Unless required by applicable law or agreed to in writing, software
 +    distributed under the License is distributed on an "AS IS" BASIS,
 +    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 +    See the License for the specific language governing permissions and
 +    limitations under the License.
 +*/
 +
 +#include "ch.h"
 +#include "hal.h"
 +
 +/*
 + * Maximum speed SPI configuration (21MHz, CPHA=0, CPOL=0, MSb first).
 + */
 +static const SPIConfig hs_spicfg = {
 +  NULL,
 +  GPIOB,
 +  12,
 +  0
 +};
 +
 +/*
 + * Low speed SPI configuration (328.125kHz, CPHA=0, CPOL=0, MSb first).
 + */
 +static const SPIConfig ls_spicfg = {
 +  NULL,
 +  GPIOB,
 +  12,
 +  SPI_CR1_BR_2 | SPI_CR1_BR_1
 +};
 +
 +/*
 + * SPI TX and RX buffers.
 + */
 +static uint8_t txbuf[512];
 +static uint8_t rxbuf[512];
 +
 +/*
 + * SPI bus contender 1.
 + */
 +static WORKING_AREA(spi_thread_1_wa, 256);
 +static msg_t spi_thread_1(void *p) {
 +
 +  (void)p;
 +  chRegSetThreadName("SPI thread 1");
 +  while (TRUE) {
 +    spiAcquireBus(&SPID2);              /* Acquire ownership of the bus.    */
 +    palSetPad(GPIOD, GPIOD_LED5);       /* LED ON.                          */
 +    spiStart(&SPID2, &hs_spicfg);       /* Setup transfer parameters.       */
 +    spiSelect(&SPID2);                  /* Slave Select assertion.          */
 +    spiExchange(&SPID2, 512,
 +                txbuf, rxbuf);          /* Atomic transfer operations.      */
 +    spiUnselect(&SPID2);                /* Slave Select de-assertion.       */
 +    spiReleaseBus(&SPID2);              /* Ownership release.               */
 +  }
 +  return 0;
 +}
 +
 +/*
 + * SPI bus contender 2.
 + */
 +static WORKING_AREA(spi_thread_2_wa, 256);
 +static msg_t spi_thread_2(void *p) {
 +
 +  (void)p;
 +  chRegSetThreadName("SPI thread 2");
 +  while (TRUE) {
 +    spiAcquireBus(&SPID2);              /* Acquire ownership of the bus.    */
 +    palClearPad(GPIOD, GPIOD_LED5);     /* LED OFF.                         */
 +    spiStart(&SPID2, &ls_spicfg);       /* Setup transfer parameters.       */
 +    spiSelect(&SPID2);                  /* Slave Select assertion.          */
 +    spiExchange(&SPID2, 512,
 +                txbuf, rxbuf);          /* Atomic transfer operations.      */
 +    spiUnselect(&SPID2);                /* Slave Select de-assertion.       */
 +    spiReleaseBus(&SPID2);              /* Ownership release.               */
 +  }
 +  return 0;
 +}
 +
 +/*
 + * Application entry point.
 + */
 +int main(void) {
 +  unsigned i;
 +
 +  /*
 +   * System initializations.
 +   * - HAL initialization, this also initializes the configured device drivers
 +   *   and performs the board-specific initializations.
 +   * - Kernel initialization, the main() function becomes a thread and the
 +   *   RTOS is active.
 +   */
 +  halInit();
 +  chSysInit();
 +
 +  /*
 +   * SPI2 I/O pins setup.
 +   */
 +  palSetPadMode(GPIOB, 13, PAL_MODE_ALTERNATE(5) |
 +                           PAL_STM32_OSPEED_HIGHEST);       /* New SCK.     */
 +  palSetPadMode(GPIOB, 14, PAL_MODE_ALTERNATE(5) |
 +                           PAL_STM32_OSPEED_HIGHEST);       /* New MISO.    */
 +  palSetPadMode(GPIOB, 15, PAL_MODE_ALTERNATE(5) |
 +                           PAL_STM32_OSPEED_HIGHEST);       /* New MOSI.    */
 +  palSetPadMode(GPIOB, 12, PAL_MODE_OUTPUT_PUSHPULL |
 +                           PAL_STM32_OSPEED_HIGHEST);       /* New CS.      */
 +  palSetPad(GPIOB, 12);
 +
 +  /*
 +   * Prepare transmit pattern.
 +   */
 +  for (i = 0; i < sizeof(txbuf); i++)
 +    txbuf[i] = (uint8_t)i;
 +
 +  /*
 +   * Starting the transmitter and receiver threads.
 +   */
 +  chThdCreateStatic(spi_thread_1_wa, sizeof(spi_thread_1_wa),
 +                    NORMALPRIO + 1, spi_thread_1, NULL);
 +  chThdCreateStatic(spi_thread_2_wa, sizeof(spi_thread_2_wa),
 +                    NORMALPRIO + 1, spi_thread_2, NULL);
 +
 +  /*
 +   * Normal main() thread activity, in this demo it does nothing.
 +   */
 +  while (TRUE) {
 +    chThdSleepMilliseconds(500);
 +  }
 +  return 0;
 +}
 diff --git a/testhal/STM32F4xx/SPI/mcuconf.h b/testhal/STM32F4xx/SPI/mcuconf.h new file mode 100644 index 000000000..21f5e5dcc --- /dev/null +++ b/testhal/STM32F4xx/SPI/mcuconf.h @@ -0,0 +1,278 @@ +/*
 +    ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio
 +
 +    Licensed under the Apache License, Version 2.0 (the "License");
 +    you may not use this file except in compliance with the License.
 +    You may obtain a copy of the License at
 +
 +        http://www.apache.org/licenses/LICENSE-2.0
 +
 +    Unless required by applicable law or agreed to in writing, software
 +    distributed under the License is distributed on an "AS IS" BASIS,
 +    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 +    See the License for the specific language governing permissions and
 +    limitations under the License.
 +*/
 +
 +/*
 + * STM32F4xx drivers configuration.
 + * The following settings override the default settings present in
 + * the various device driver implementation headers.
 + * Note that the settings for each driver only have effect if the whole
 + * driver is enabled in halconf.h.
 + *
 + * IRQ priorities:
 + * 15...0       Lowest...Highest.
 + *
 + * DMA priorities:
 + * 0...3        Lowest...Highest.
 + */
 +
 +#define STM32F4xx_MCUCONF
 +
 +/*
 + * HAL driver system settings.
 + */
 +#define STM32_NO_INIT                       FALSE
 +#define STM32_HSI_ENABLED                   TRUE
 +#define STM32_LSI_ENABLED                   TRUE
 +#define STM32_HSE_ENABLED                   TRUE
 +#define STM32_LSE_ENABLED                   FALSE
 +#define STM32_CLOCK48_REQUIRED              TRUE
 +#define STM32_SW                            STM32_SW_PLL
 +#define STM32_PLLSRC                        STM32_PLLSRC_HSE
 +#define STM32_PLLM_VALUE                    8
 +#define STM32_PLLN_VALUE                    336
 +#define STM32_PLLP_VALUE                    2
 +#define STM32_PLLQ_VALUE                    7
 +#define STM32_HPRE                          STM32_HPRE_DIV1
 +#define STM32_PPRE1                         STM32_PPRE1_DIV4
 +#define STM32_PPRE2                         STM32_PPRE2_DIV2
 +#define STM32_RTCSEL                        STM32_RTCSEL_LSI
 +#define STM32_RTCPRE_VALUE                  8
 +#define STM32_MCO1SEL                       STM32_MCO1SEL_HSI
 +#define STM32_MCO1PRE                       STM32_MCO1PRE_DIV1
 +#define STM32_MCO2SEL                       STM32_MCO2SEL_SYSCLK
 +#define STM32_MCO2PRE                       STM32_MCO2PRE_DIV5
 +#define STM32_I2SSRC                        STM32_I2SSRC_CKIN
 +#define STM32_PLLI2SN_VALUE                 192
 +#define STM32_PLLI2SR_VALUE                 5
 +#define STM32_VOS                           STM32_VOS_HIGH
 +#define STM32_PVD_ENABLE                    FALSE
 +#define STM32_PLS                           STM32_PLS_LEV0
 +
 +/*
 + * ADC driver system settings.
 + */
 +#define STM32_ADC_ADCPRE                    ADC_CCR_ADCPRE_DIV4
 +#define STM32_ADC_USE_ADC1                  FALSE
 +#define STM32_ADC_USE_ADC2                  FALSE
 +#define STM32_ADC_USE_ADC3                  FALSE
 +#define STM32_ADC_ADC1_DMA_STREAM           STM32_DMA_STREAM_ID(2, 4)
 +#define STM32_ADC_ADC2_DMA_STREAM           STM32_DMA_STREAM_ID(2, 2)
 +#define STM32_ADC_ADC3_DMA_STREAM           STM32_DMA_STREAM_ID(2, 1)
 +#define STM32_ADC_ADC1_DMA_PRIORITY         2
 +#define STM32_ADC_ADC2_DMA_PRIORITY         2
 +#define STM32_ADC_ADC3_DMA_PRIORITY         2
 +#define STM32_ADC_IRQ_PRIORITY              6
 +#define STM32_ADC_ADC1_DMA_IRQ_PRIORITY     6
 +#define STM32_ADC_ADC2_DMA_IRQ_PRIORITY     6
 +#define STM32_ADC_ADC3_DMA_IRQ_PRIORITY     6
 +
 +/*
 + * CAN driver system settings.
 + */
 +#define STM32_CAN_USE_CAN1                  FALSE
 +#define STM32_CAN_USE_CAN2                  FALSE
 +#define STM32_CAN_CAN1_IRQ_PRIORITY         11
 +#define STM32_CAN_CAN2_IRQ_PRIORITY         11
 +
 +/*
 + * EXT driver system settings.
 + */
 +#define STM32_EXT_EXTI0_IRQ_PRIORITY        6
 +#define STM32_EXT_EXTI1_IRQ_PRIORITY        6
 +#define STM32_EXT_EXTI2_IRQ_PRIORITY        6
 +#define STM32_EXT_EXTI3_IRQ_PRIORITY        6
 +#define STM32_EXT_EXTI4_IRQ_PRIORITY        6
 +#define STM32_EXT_EXTI5_9_IRQ_PRIORITY      6
 +#define STM32_EXT_EXTI10_15_IRQ_PRIORITY    6
 +#define STM32_EXT_EXTI16_IRQ_PRIORITY       6
 +#define STM32_EXT_EXTI17_IRQ_PRIORITY       15
 +#define STM32_EXT_EXTI18_IRQ_PRIORITY       6
 +#define STM32_EXT_EXTI19_IRQ_PRIORITY       6
 +#define STM32_EXT_EXTI20_IRQ_PRIORITY       6
 +#define STM32_EXT_EXTI21_IRQ_PRIORITY       15
 +#define STM32_EXT_EXTI22_IRQ_PRIORITY       15
 +
 +/*
 + * GPT driver system settings.
 + */
 +#define STM32_GPT_USE_TIM1                  FALSE
 +#define STM32_GPT_USE_TIM2                  FALSE
 +#define STM32_GPT_USE_TIM3                  FALSE
 +#define STM32_GPT_USE_TIM4                  FALSE
 +#define STM32_GPT_USE_TIM5                  FALSE
 +#define STM32_GPT_USE_TIM6                  FALSE
 +#define STM32_GPT_USE_TIM7                  FALSE
 +#define STM32_GPT_USE_TIM8                  FALSE
 +#define STM32_GPT_USE_TIM9                  FALSE
 +#define STM32_GPT_USE_TIM11                 FALSE
 +#define STM32_GPT_USE_TIM12                 FALSE
 +#define STM32_GPT_USE_TIM14                 FALSE
 +#define STM32_GPT_TIM1_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM2_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM3_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM4_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM5_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM6_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM7_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM8_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM9_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM11_IRQ_PRIORITY        7
 +#define STM32_GPT_TIM12_IRQ_PRIORITY        7
 +#define STM32_GPT_TIM14_IRQ_PRIORITY        7
 +
 +/*
 + * I2C driver system settings.
 + */
 +#define STM32_I2C_USE_I2C1                  FALSE
 +#define STM32_I2C_USE_I2C2                  FALSE
 +#define STM32_I2C_USE_I2C3                  FALSE
 +#define STM32_I2C_I2C1_RX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 0)
 +#define STM32_I2C_I2C1_TX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 6)
 +#define STM32_I2C_I2C2_RX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 2)
 +#define STM32_I2C_I2C2_TX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 7)
 +#define STM32_I2C_I2C3_RX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 2)
 +#define STM32_I2C_I2C3_TX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 4)
 +#define STM32_I2C_I2C1_IRQ_PRIORITY         5
 +#define STM32_I2C_I2C2_IRQ_PRIORITY         5
 +#define STM32_I2C_I2C3_IRQ_PRIORITY         5
 +#define STM32_I2C_I2C1_DMA_PRIORITY         3
 +#define STM32_I2C_I2C2_DMA_PRIORITY         3
 +#define STM32_I2C_I2C3_DMA_PRIORITY         3
 +#define STM32_I2C_I2C1_DMA_ERROR_HOOK()     chSysHalt()
 +#define STM32_I2C_I2C2_DMA_ERROR_HOOK()     chSysHalt()
 +#define STM32_I2C_I2C3_DMA_ERROR_HOOK()     chSysHalt()
 +
 +/*
 + * ICU driver system settings.
 + */
 +#define STM32_ICU_USE_TIM1                  FALSE
 +#define STM32_ICU_USE_TIM2                  FALSE
 +#define STM32_ICU_USE_TIM3                  FALSE
 +#define STM32_ICU_USE_TIM4                  FALSE
 +#define STM32_ICU_USE_TIM5                  FALSE
 +#define STM32_ICU_USE_TIM8                  FALSE
 +#define STM32_ICU_USE_TIM9                  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
 +#define STM32_ICU_TIM8_IRQ_PRIORITY         7
 +#define STM32_ICU_TIM9_IRQ_PRIORITY         7
 +
 +/*
 + * MAC driver system settings.
 + */
 +#define STM32_MAC_TRANSMIT_BUFFERS          2
 +#define STM32_MAC_RECEIVE_BUFFERS           4
 +#define STM32_MAC_BUFFERS_SIZE              1522
 +#define STM32_MAC_PHY_TIMEOUT               100
 +#define STM32_MAC_ETH1_CHANGE_PHY_STATE     TRUE
 +#define STM32_MAC_ETH1_IRQ_PRIORITY         13
 +#define STM32_MAC_IP_CHECKSUM_OFFLOAD       0
 +
 +/*
 + * PWM driver system settings.
 + */
 +#define STM32_PWM_USE_ADVANCED              FALSE
 +#define STM32_PWM_USE_TIM1                  FALSE
 +#define STM32_PWM_USE_TIM2                  FALSE
 +#define STM32_PWM_USE_TIM3                  FALSE
 +#define STM32_PWM_USE_TIM4                  FALSE
 +#define STM32_PWM_USE_TIM5                  FALSE
 +#define STM32_PWM_USE_TIM8                  FALSE
 +#define STM32_PWM_USE_TIM9                  FALSE
 +#define STM32_PWM_TIM1_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM2_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM3_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM4_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM5_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM8_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM9_IRQ_PRIORITY         7
 +
 +/*
 + * SERIAL driver system settings.
 + */
 +#define STM32_SERIAL_USE_USART1             FALSE
 +#define STM32_SERIAL_USE_USART2             FALSE
 +#define STM32_SERIAL_USE_USART3             FALSE
 +#define STM32_SERIAL_USE_UART4              FALSE
 +#define STM32_SERIAL_USE_UART5              FALSE
 +#define STM32_SERIAL_USE_USART6             FALSE
 +#define STM32_SERIAL_USART1_PRIORITY        12
 +#define STM32_SERIAL_USART2_PRIORITY        12
 +#define STM32_SERIAL_USART3_PRIORITY        12
 +#define STM32_SERIAL_UART4_PRIORITY         12
 +#define STM32_SERIAL_UART5_PRIORITY         12
 +#define STM32_SERIAL_USART6_PRIORITY        12
 +
 +/*
 + * SPI driver system settings.
 + */
 +#define STM32_SPI_USE_SPI1                  TRUE
 +#define STM32_SPI_USE_SPI2                  TRUE
 +#define STM32_SPI_USE_SPI3                  TRUE
 +#define STM32_SPI_SPI1_RX_DMA_STREAM        STM32_DMA_STREAM_ID(2, 0)
 +#define STM32_SPI_SPI1_TX_DMA_STREAM        STM32_DMA_STREAM_ID(2, 3)
 +#define STM32_SPI_SPI2_RX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 3)
 +#define STM32_SPI_SPI2_TX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 4)
 +#define STM32_SPI_SPI3_RX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 0)
 +#define STM32_SPI_SPI3_TX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 7)
 +#define STM32_SPI_SPI1_DMA_PRIORITY         1
 +#define STM32_SPI_SPI2_DMA_PRIORITY         1
 +#define STM32_SPI_SPI3_DMA_PRIORITY         1
 +#define STM32_SPI_SPI1_IRQ_PRIORITY         10
 +#define STM32_SPI_SPI2_IRQ_PRIORITY         10
 +#define STM32_SPI_SPI3_IRQ_PRIORITY         10
 +#define STM32_SPI_DMA_ERROR_HOOK(spip)      chSysHalt()
 +
 +/*
 + * UART driver system settings.
 + */
 +#define STM32_UART_USE_USART1               FALSE
 +#define STM32_UART_USE_USART2               FALSE
 +#define STM32_UART_USE_USART3               FALSE
 +#define STM32_UART_USE_USART6               FALSE
 +#define STM32_UART_USART1_RX_DMA_STREAM     STM32_DMA_STREAM_ID(2, 5)
 +#define STM32_UART_USART1_TX_DMA_STREAM     STM32_DMA_STREAM_ID(2, 7)
 +#define STM32_UART_USART2_RX_DMA_STREAM     STM32_DMA_STREAM_ID(1, 5)
 +#define STM32_UART_USART2_TX_DMA_STREAM     STM32_DMA_STREAM_ID(1, 6)
 +#define STM32_UART_USART3_RX_DMA_STREAM     STM32_DMA_STREAM_ID(1, 1)
 +#define STM32_UART_USART3_TX_DMA_STREAM     STM32_DMA_STREAM_ID(1, 3)
 +#define STM32_UART_USART6_RX_DMA_STREAM     STM32_DMA_STREAM_ID(2, 2)
 +#define STM32_UART_USART6_TX_DMA_STREAM     STM32_DMA_STREAM_ID(2, 7)
 +#define STM32_UART_USART1_IRQ_PRIORITY      12
 +#define STM32_UART_USART2_IRQ_PRIORITY      12
 +#define STM32_UART_USART3_IRQ_PRIORITY      12
 +#define STM32_UART_USART6_IRQ_PRIORITY      12
 +#define STM32_UART_USART1_DMA_PRIORITY      0
 +#define STM32_UART_USART2_DMA_PRIORITY      0
 +#define STM32_UART_USART3_DMA_PRIORITY      0
 +#define STM32_UART_USART6_DMA_PRIORITY      0
 +#define STM32_UART_DMA_ERROR_HOOK(uartp)    chSysHalt()
 +
 +/*
 + * USB driver system settings.
 + */
 +#define STM32_USB_USE_OTG1                  FALSE
 +#define STM32_USB_USE_OTG2                  FALSE
 +#define STM32_USB_OTG1_IRQ_PRIORITY         14
 +#define STM32_USB_OTG2_IRQ_PRIORITY         14
 +#define STM32_USB_OTG1_RX_FIFO_SIZE         512
 +#define STM32_USB_OTG2_RX_FIFO_SIZE         1024
 +#define STM32_USB_OTG_THREAD_PRIO           LOWPRIO
 +#define STM32_USB_OTG_THREAD_STACK_SIZE     128
 +#define STM32_USB_OTGFIFO_FILL_BASEPRI      0
 diff --git a/testhal/STM32F4xx/SPI/readme.txt b/testhal/STM32F4xx/SPI/readme.txt new file mode 100644 index 000000000..d3d78bc8c --- /dev/null +++ b/testhal/STM32F4xx/SPI/readme.txt @@ -0,0 +1,30 @@ +*****************************************************************************
 +** ChibiOS/RT HAL - SPI driver demo for STM32F4xx.                         **
 +*****************************************************************************
 +
 +** TARGET **
 +
 +The demo runs on an ST STM32F4-Discovery board.
 +
 +** The Demo **
 +
 +The application demonstrates the use of the STM32F4xx SPI driver.
 +
 +** Board Setup **
 +
 +- Connect PB14 and PB15 together for SPI loop-back.
 +
 +** Build Procedure **
 +
 +The demo has been tested using the free Codesourcery GCC-based toolchain
 +and YAGARTO.
 +Just modify the TRGT line in the makefile in order to use different GCC ports.
 +
 +** Notes **
 +
 +Some files used by the demo are not part of ChibiOS/RT but are copyright of
 +ST Microelectronics and are licensed under a different license.
 +Also note that not all the files present in the ST library are distributed
 +with ChibiOS/RT, you can find the whole library on the ST web site:
 +
 +                             http://www.st.com
 diff --git a/testhal/STM32F4xx/UART/.cproject b/testhal/STM32F4xx/UART/.cproject new file mode 100644 index 000000000..7bb8c14a7 --- /dev/null +++ b/testhal/STM32F4xx/UART/.cproject @@ -0,0 +1,56 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?>
 +<?fileVersion 4.0.0?>
 +
 +<cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
 +	<storageModule moduleId="org.eclipse.cdt.core.settings">
 +		<cconfiguration id="0.155288351">
 +			<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="0.155288351" moduleId="org.eclipse.cdt.core.settings" name="Default">
 +				<externalSettings/>
 +				<extensions>
 +					<extension id="org.eclipse.cdt.core.VCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 +					<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 +					<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
 +					<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 +					<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 +					<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 +				</extensions>
 +			</storageModule>
 +			<storageModule moduleId="cdtBuildSystem" version="4.0.0">
 +				<configuration artifactName="${ProjName}" buildProperties="" description="" id="0.155288351" name="Default" parent="org.eclipse.cdt.build.core.prefbase.cfg">
 +					<folderInfo id="0.155288351." name="/" resourcePath="">
 +						<toolChain id="org.eclipse.cdt.build.core.prefbase.toolchain.349938401" name="No ToolChain" resourceTypeBasedDiscovery="false" superClass="org.eclipse.cdt.build.core.prefbase.toolchain">
 +							<targetPlatform id="org.eclipse.cdt.build.core.prefbase.toolchain.349938401.395329442" name=""/>
 +							<builder id="org.eclipse.cdt.build.core.settings.default.builder.868647171" keepEnvironmentInBuildfile="false" managedBuildOn="false" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="org.eclipse.cdt.build.core.settings.default.builder"/>
 +							<tool id="org.eclipse.cdt.build.core.settings.holder.libs.1870432797" name="holder for library settings" superClass="org.eclipse.cdt.build.core.settings.holder.libs"/>
 +							<tool id="org.eclipse.cdt.build.core.settings.holder.1343978722" name="Assembly" superClass="org.eclipse.cdt.build.core.settings.holder">
 +								<inputType id="org.eclipse.cdt.build.core.settings.holder.inType.425007067" languageId="org.eclipse.cdt.core.assembly" languageName="Assembly" sourceContentType="org.eclipse.cdt.core.asmSource" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
 +							</tool>
 +							<tool id="org.eclipse.cdt.build.core.settings.holder.963405349" name="GNU C++" superClass="org.eclipse.cdt.build.core.settings.holder">
 +								<inputType id="org.eclipse.cdt.build.core.settings.holder.inType.1477706073" languageId="org.eclipse.cdt.core.g++" languageName="GNU C++" sourceContentType="org.eclipse.cdt.core.cxxSource,org.eclipse.cdt.core.cxxHeader" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
 +							</tool>
 +							<tool id="org.eclipse.cdt.build.core.settings.holder.219531929" name="GNU C" superClass="org.eclipse.cdt.build.core.settings.holder">
 +								<inputType id="org.eclipse.cdt.build.core.settings.holder.inType.2098009767" languageId="org.eclipse.cdt.core.gcc" languageName="GNU C" sourceContentType="org.eclipse.cdt.core.cSource,org.eclipse.cdt.core.cHeader" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
 +							</tool>
 +						</toolChain>
 +					</folderInfo>
 +				</configuration>
 +			</storageModule>
 +			<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
 +		</cconfiguration>
 +	</storageModule>
 +	<storageModule moduleId="cdtBuildSystem" version="4.0.0">
 +		<project id="STM32F4xx-UART.null.1813192370" name="STM32F4xx-UART"/>
 +	</storageModule>
 +	<storageModule moduleId="scannerConfiguration">
 +		<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
 +		<scannerConfigBuildInfo instanceId="0.155288351">
 +			<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile"/>
 +		</scannerConfigBuildInfo>
 +	</storageModule>
 +	<storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
 +	<storageModule moduleId="refreshScope" versionNumber="2">
 +		<configuration configurationName="Default">
 +			<resource resourceType="PROJECT" workspacePath="/STM32F4xx-UART"/>
 +		</configuration>
 +	</storageModule>
 +</cproject>
 diff --git a/testhal/STM32F4xx/UART/.project b/testhal/STM32F4xx/UART/.project new file mode 100644 index 000000000..06e8b52e8 --- /dev/null +++ b/testhal/STM32F4xx/UART/.project @@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="UTF-8"?>
 +<projectDescription>
 +	<name>STM32F4xx-UART</name>
 +	<comment></comment>
 +	<projects>
 +	</projects>
 +	<buildSpec>
 +		<buildCommand>
 +			<name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
 +			<triggers>clean,full,incremental,</triggers>
 +			<arguments>
 +			</arguments>
 +		</buildCommand>
 +		<buildCommand>
 +			<name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
 +			<triggers>full,incremental,</triggers>
 +			<arguments>
 +			</arguments>
 +		</buildCommand>
 +	</buildSpec>
 +	<natures>
 +		<nature>org.eclipse.cdt.core.cnature</nature>
 +		<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
 +		<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
 +	</natures>
 +	<linkedResources>
 +		<link>
 +			<name>board</name>
 +			<type>2</type>
 +			<locationURI>CHIBIOS/boards/ST_STM32F4_DISCOVERY</locationURI>
 +		</link>
 +		<link>
 +			<name>os</name>
 +			<type>2</type>
 +			<locationURI>CHIBIOS/os</locationURI>
 +		</link>
 +	</linkedResources>
 +</projectDescription>
 diff --git a/testhal/STM32F4xx/UART/Makefile b/testhal/STM32F4xx/UART/Makefile new file mode 100644 index 000000000..86de6d81c --- /dev/null +++ b/testhal/STM32F4xx/UART/Makefile @@ -0,0 +1,222 @@ +##############################################################################
 +# Build global options
 +# NOTE: Can be overridden externally.
 +#
 +
 +# Compiler options here.
 +ifeq ($(USE_OPT),)
 +  USE_OPT = -O2 -ggdb -fomit-frame-pointer -falign-functions=16
 +endif
 +
 +# C specific options here (added to USE_OPT).
 +ifeq ($(USE_COPT),)
 +  USE_COPT = 
 +endif
 +
 +# C++ specific options here (added to USE_OPT).
 +ifeq ($(USE_CPPOPT),)
 +  USE_CPPOPT = -fno-rtti
 +endif
 +
 +# Enable this if you want the linker to remove unused code and data
 +ifeq ($(USE_LINK_GC),)
 +  USE_LINK_GC = yes
 +endif
 +
 +# If enabled, this option allows to compile the application in THUMB mode.
 +ifeq ($(USE_THUMB),)
 +  USE_THUMB = yes
 +endif
 +
 +# Enable this if you want to see the full log while compiling.
 +ifeq ($(USE_VERBOSE_COMPILE),)
 +  USE_VERBOSE_COMPILE = no
 +endif
 +
 +#
 +# Build global options
 +##############################################################################
 +
 +##############################################################################
 +# Architecture or project specific options
 +#
 +
 +# Enables the use of FPU on Cortex-M4.
 +# Enable this if you really want to use the STM FWLib.
 +ifeq ($(USE_FPU),)
 +  USE_FPU = no
 +endif
 +
 +# Enable this if you really want to use the STM FWLib.
 +ifeq ($(USE_FWLIB),)
 +  USE_FWLIB = no
 +endif
 +
 +#
 +# Architecture or project specific options
 +##############################################################################
 +
 +##############################################################################
 +# Project, sources and paths
 +#
 +
 +# Define project name here
 +PROJECT = ch
 +
 +# Imported source files and paths
 +CHIBIOS = ../../..
 +include $(CHIBIOS)/boards/ST_STM32F4_DISCOVERY/board.mk
 +include $(CHIBIOS)/os/hal/platforms/STM32F4xx/platform.mk
 +include $(CHIBIOS)/os/hal/hal.mk
 +include $(CHIBIOS)/os/ports/GCC/ARMCMx/STM32F4xx/port.mk
 +include $(CHIBIOS)/os/kernel/kernel.mk
 +include $(CHIBIOS)/test/test.mk
 +
 +# Define linker script file here
 +LDSCRIPT= $(PORTLD)/STM32F407xG.ld
 +#LDSCRIPT= $(PORTLD)/STM32F407xG_CCM.ld
 +
 +# C sources that can be compiled in ARM or THUMB mode depending on the global
 +# setting.
 +CSRC = $(PORTSRC) \
 +       $(KERNSRC) \
 +       $(TESTSRC) \
 +       $(HALSRC) \
 +       $(PLATFORMSRC) \
 +       $(BOARDSRC) \
 +       $(CHIBIOS)/os/various/chprintf.c \
 +       main.c
 +
 +# C++ sources that can be compiled in ARM or THUMB mode depending on the global
 +# setting.
 +CPPSRC =
 +
 +# C sources to be compiled in ARM mode regardless of the global setting.
 +# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler
 +#       option that results in lower performance and larger code size.
 +ACSRC =
 +
 +# C++ sources to be compiled in ARM mode regardless of the global setting.
 +# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler
 +#       option that results in lower performance and larger code size.
 +ACPPSRC =
 +
 +# C sources to be compiled in THUMB mode regardless of the global setting.
 +# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler
 +#       option that results in lower performance and larger code size.
 +TCSRC =
 +
 +# C sources to be compiled in THUMB mode regardless of the global setting.
 +# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler
 +#       option that results in lower performance and larger code size.
 +TCPPSRC =
 +
 +# List ASM source files here
 +ASMSRC = $(PORTASM)
 +
 +INCDIR = $(PORTINC) $(KERNINC) $(TESTINC) \
 +         $(HALINC) $(PLATFORMINC) $(BOARDINC) \
 +         $(CHIBIOS)/os/various
 +
 +#
 +# Project, sources and paths
 +##############################################################################
 +
 +##############################################################################
 +# Compiler settings
 +#
 +
 +MCU  = cortex-m4
 +
 +#TRGT = arm-elf-
 +TRGT = arm-none-eabi-
 +CC   = $(TRGT)gcc
 +CPPC = $(TRGT)g++
 +# Enable loading with g++ only if you need C++ runtime support.
 +# NOTE: You can use C++ even without C++ support if you are careful. C++
 +#       runtime support makes code size explode.
 +LD   = $(TRGT)gcc
 +#LD   = $(TRGT)g++
 +CP   = $(TRGT)objcopy
 +AS   = $(TRGT)gcc -x assembler-with-cpp
 +OD   = $(TRGT)objdump
 +HEX  = $(CP) -O ihex
 +BIN  = $(CP) -O binary
 +
 +# ARM-specific options here
 +AOPT =
 +
 +# THUMB-specific options here
 +TOPT = -mthumb -DTHUMB
 +
 +# Define C warning options here
 +CWARN = -Wall -Wextra -Wstrict-prototypes
 +
 +# Define C++ warning options here
 +CPPWARN = -Wall -Wextra
 +
 +#
 +# Compiler settings
 +##############################################################################
 +
 +##############################################################################
 +# Start of default section
 +#
 +
 +# List all default C defines here, like -D_DEBUG=1
 +DDEFS =
 +
 +# List all default ASM defines here, like -D_DEBUG=1
 +DADEFS =
 +
 +# List all default directories to look for include files here
 +DINCDIR =
 +
 +# List the default directory to look for the libraries here
 +DLIBDIR =
 +
 +# List all default libraries here
 +DLIBS =
 +
 +#
 +# End of default section
 +##############################################################################
 +
 +##############################################################################
 +# Start of user section
 +#
 +
 +# List all user C define here, like -D_DEBUG=1
 +UDEFS =
 +
 +# Define ASM defines here
 +UADEFS =
 +
 +# List all user directories here
 +UINCDIR =
 +
 +# List the user directory to look for the libraries here
 +ULIBDIR =
 +
 +# List all user libraries here
 +ULIBS =
 +
 +#
 +# End of user defines
 +##############################################################################
 +
 +ifeq ($(USE_FPU),yes)
 +  USE_OPT += -mfloat-abi=softfp -mfpu=fpv4-sp-d16 -fsingle-precision-constant
 +  DDEFS += -DCORTEX_USE_FPU=TRUE
 +else
 +  DDEFS += -DCORTEX_USE_FPU=FALSE
 +endif
 +
 +ifeq ($(USE_FWLIB),yes)
 +  include $(CHIBIOS)/ext/stm32lib/stm32lib.mk
 +  CSRC += $(STM32SRC)
 +  INCDIR += $(STM32INC)
 +  USE_OPT += -DUSE_STDPERIPH_DRIVER
 +endif
 +
 +include $(CHIBIOS)/os/ports/GCC/ARMCMx/rules.mk
 diff --git a/testhal/STM32F4xx/UART/chconf.h b/testhal/STM32F4xx/UART/chconf.h new file mode 100644 index 000000000..2e6fcc6ee --- /dev/null +++ b/testhal/STM32F4xx/UART/chconf.h @@ -0,0 +1,531 @@ +/*
 +    ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio
 +
 +    Licensed under the Apache License, Version 2.0 (the "License");
 +    you may not use this file except in compliance with the License.
 +    You may obtain a copy of the License at
 +
 +        http://www.apache.org/licenses/LICENSE-2.0
 +
 +    Unless required by applicable law or agreed to in writing, software
 +    distributed under the License is distributed on an "AS IS" BASIS,
 +    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 +    See the License for the specific language governing permissions and
 +    limitations under the License.
 +*/
 +
 +/**
 + * @file    templates/chconf.h
 + * @brief   Configuration file template.
 + * @details A copy of this file must be placed in each project directory, it
 + *          contains the application specific kernel settings.
 + *
 + * @addtogroup config
 + * @details Kernel related settings and hooks.
 + * @{
 + */
 +
 +#ifndef _CHCONF_H_
 +#define _CHCONF_H_
 +
 +/*===========================================================================*/
 +/**
 + * @name Kernel parameters and options
 + * @{
 + */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   System tick frequency.
 + * @details Frequency of the system timer that drives the system ticks. This
 + *          setting also defines the system tick time unit.
 + */
 +#if !defined(CH_FREQUENCY) || defined(__DOXYGEN__)
 +#define CH_FREQUENCY                    1000
 +#endif
 +
 +/**
 + * @brief   Round robin interval.
 + * @details This constant is the number of system ticks allowed for the
 + *          threads before preemption occurs. Setting this value to zero
 + *          disables the preemption for threads with equal priority and the
 + *          round robin becomes cooperative. Note that higher priority
 + *          threads can still preempt, the kernel is always preemptive.
 + *
 + * @note    Disabling the round robin preemption makes the kernel more compact
 + *          and generally faster.
 + */
 +#if !defined(CH_TIME_QUANTUM) || defined(__DOXYGEN__)
 +#define CH_TIME_QUANTUM                 20
 +#endif
 +
 +/**
 + * @brief   Managed RAM size.
 + * @details Size of the RAM area to be managed by the OS. If set to zero
 + *          then the whole available RAM is used. The core memory is made
 + *          available to the heap allocator and/or can be used directly through
 + *          the simplified core memory allocator.
 + *
 + * @note    In order to let the OS manage the whole RAM the linker script must
 + *          provide the @p __heap_base__ and @p __heap_end__ symbols.
 + * @note    Requires @p CH_USE_MEMCORE.
 + */
 +#if !defined(CH_MEMCORE_SIZE) || defined(__DOXYGEN__)
 +#define CH_MEMCORE_SIZE                 0
 +#endif
 +
 +/**
 + * @brief   Idle thread automatic spawn suppression.
 + * @details When this option is activated the function @p chSysInit()
 + *          does not spawn the idle thread automatically. The application has
 + *          then the responsibility to do one of the following:
 + *          - Spawn a custom idle thread at priority @p IDLEPRIO.
 + *          - Change the main() thread priority to @p IDLEPRIO then enter
 + *            an endless loop. In this scenario the @p main() thread acts as
 + *            the idle thread.
 + *          .
 + * @note    Unless an idle thread is spawned the @p main() thread must not
 + *          enter a sleep state.
 + */
 +#if !defined(CH_NO_IDLE_THREAD) || defined(__DOXYGEN__)
 +#define CH_NO_IDLE_THREAD               FALSE
 +#endif
 +
 +/** @} */
 +
 +/*===========================================================================*/
 +/**
 + * @name Performance options
 + * @{
 + */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   OS optimization.
 + * @details If enabled then time efficient rather than space efficient code
 + *          is used when two possible implementations exist.
 + *
 + * @note    This is not related to the compiler optimization options.
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_OPTIMIZE_SPEED) || defined(__DOXYGEN__)
 +#define CH_OPTIMIZE_SPEED               TRUE
 +#endif
 +
 +/** @} */
 +
 +/*===========================================================================*/
 +/**
 + * @name Subsystem options
 + * @{
 + */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Threads registry APIs.
 + * @details If enabled then the registry APIs are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_REGISTRY) || defined(__DOXYGEN__)
 +#define CH_USE_REGISTRY                 TRUE
 +#endif
 +
 +/**
 + * @brief   Threads synchronization APIs.
 + * @details If enabled then the @p chThdWait() function is included in
 + *          the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_WAITEXIT) || defined(__DOXYGEN__)
 +#define CH_USE_WAITEXIT                 TRUE
 +#endif
 +
 +/**
 + * @brief   Semaphores APIs.
 + * @details If enabled then the Semaphores APIs are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_SEMAPHORES) || defined(__DOXYGEN__)
 +#define CH_USE_SEMAPHORES               TRUE
 +#endif
 +
 +/**
 + * @brief   Semaphores queuing mode.
 + * @details If enabled then the threads are enqueued on semaphores by
 + *          priority rather than in FIFO order.
 + *
 + * @note    The default is @p FALSE. Enable this if you have special requirements.
 + * @note    Requires @p CH_USE_SEMAPHORES.
 + */
 +#if !defined(CH_USE_SEMAPHORES_PRIORITY) || defined(__DOXYGEN__)
 +#define CH_USE_SEMAPHORES_PRIORITY      FALSE
 +#endif
 +
 +/**
 + * @brief   Atomic semaphore API.
 + * @details If enabled then the semaphores the @p chSemSignalWait() API
 + *          is included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_SEMAPHORES.
 + */
 +#if !defined(CH_USE_SEMSW) || defined(__DOXYGEN__)
 +#define CH_USE_SEMSW                    TRUE
 +#endif
 +
 +/**
 + * @brief   Mutexes APIs.
 + * @details If enabled then the mutexes APIs are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_MUTEXES) || defined(__DOXYGEN__)
 +#define CH_USE_MUTEXES                  TRUE
 +#endif
 +
 +/**
 + * @brief   Conditional Variables APIs.
 + * @details If enabled then the conditional variables APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_MUTEXES.
 + */
 +#if !defined(CH_USE_CONDVARS) || defined(__DOXYGEN__)
 +#define CH_USE_CONDVARS                 TRUE
 +#endif
 +
 +/**
 + * @brief   Conditional Variables APIs with timeout.
 + * @details If enabled then the conditional variables APIs with timeout
 + *          specification are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_CONDVARS.
 + */
 +#if !defined(CH_USE_CONDVARS_TIMEOUT) || defined(__DOXYGEN__)
 +#define CH_USE_CONDVARS_TIMEOUT         TRUE
 +#endif
 +
 +/**
 + * @brief   Events Flags APIs.
 + * @details If enabled then the event flags APIs are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_EVENTS) || defined(__DOXYGEN__)
 +#define CH_USE_EVENTS                   TRUE
 +#endif
 +
 +/**
 + * @brief   Events Flags APIs with timeout.
 + * @details If enabled then the events APIs with timeout specification
 + *          are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_EVENTS.
 + */
 +#if !defined(CH_USE_EVENTS_TIMEOUT) || defined(__DOXYGEN__)
 +#define CH_USE_EVENTS_TIMEOUT           TRUE
 +#endif
 +
 +/**
 + * @brief   Synchronous Messages APIs.
 + * @details If enabled then the synchronous messages APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_MESSAGES) || defined(__DOXYGEN__)
 +#define CH_USE_MESSAGES                 TRUE
 +#endif
 +
 +/**
 + * @brief   Synchronous Messages queuing mode.
 + * @details If enabled then messages are served by priority rather than in
 + *          FIFO order.
 + *
 + * @note    The default is @p FALSE. Enable this if you have special requirements.
 + * @note    Requires @p CH_USE_MESSAGES.
 + */
 +#if !defined(CH_USE_MESSAGES_PRIORITY) || defined(__DOXYGEN__)
 +#define CH_USE_MESSAGES_PRIORITY        FALSE
 +#endif
 +
 +/**
 + * @brief   Mailboxes APIs.
 + * @details If enabled then the asynchronous messages (mailboxes) APIs are
 + *          included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_SEMAPHORES.
 + */
 +#if !defined(CH_USE_MAILBOXES) || defined(__DOXYGEN__)
 +#define CH_USE_MAILBOXES                TRUE
 +#endif
 +
 +/**
 + * @brief   I/O Queues APIs.
 + * @details If enabled then the I/O queues APIs are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_QUEUES) || defined(__DOXYGEN__)
 +#define CH_USE_QUEUES                   TRUE
 +#endif
 +
 +/**
 + * @brief   Core Memory Manager APIs.
 + * @details If enabled then the core memory manager APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_MEMCORE) || defined(__DOXYGEN__)
 +#define CH_USE_MEMCORE                  TRUE
 +#endif
 +
 +/**
 + * @brief   Heap Allocator APIs.
 + * @details If enabled then the memory heap allocator APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_MEMCORE and either @p CH_USE_MUTEXES or
 + *          @p CH_USE_SEMAPHORES.
 + * @note    Mutexes are recommended.
 + */
 +#if !defined(CH_USE_HEAP) || defined(__DOXYGEN__)
 +#define CH_USE_HEAP                     TRUE
 +#endif
 +
 +/**
 + * @brief   C-runtime allocator.
 + * @details If enabled the the heap allocator APIs just wrap the C-runtime
 + *          @p malloc() and @p free() functions.
 + *
 + * @note    The default is @p FALSE.
 + * @note    Requires @p CH_USE_HEAP.
 + * @note    The C-runtime may or may not require @p CH_USE_MEMCORE, see the
 + *          appropriate documentation.
 + */
 +#if !defined(CH_USE_MALLOC_HEAP) || defined(__DOXYGEN__)
 +#define CH_USE_MALLOC_HEAP              FALSE
 +#endif
 +
 +/**
 + * @brief   Memory Pools Allocator APIs.
 + * @details If enabled then the memory pools allocator APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_MEMPOOLS) || defined(__DOXYGEN__)
 +#define CH_USE_MEMPOOLS                 TRUE
 +#endif
 +
 +/**
 + * @brief   Dynamic Threads APIs.
 + * @details If enabled then the dynamic threads creation APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_WAITEXIT.
 + * @note    Requires @p CH_USE_HEAP and/or @p CH_USE_MEMPOOLS.
 + */
 +#if !defined(CH_USE_DYNAMIC) || defined(__DOXYGEN__)
 +#define CH_USE_DYNAMIC                  TRUE
 +#endif
 +
 +/** @} */
 +
 +/*===========================================================================*/
 +/**
 + * @name Debug options
 + * @{
 + */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Debug option, system state check.
 + * @details If enabled the correct call protocol for system APIs is checked
 + *          at runtime.
 + *
 + * @note    The default is @p FALSE.
 + */
 +#if !defined(CH_DBG_SYSTEM_STATE_CHECK) || defined(__DOXYGEN__)
 +#define CH_DBG_SYSTEM_STATE_CHECK       TRUE
 +#endif
 +
 +/**
 + * @brief   Debug option, parameters checks.
 + * @details If enabled then the checks on the API functions input
 + *          parameters are activated.
 + *
 + * @note    The default is @p FALSE.
 + */
 +#if !defined(CH_DBG_ENABLE_CHECKS) || defined(__DOXYGEN__)
 +#define CH_DBG_ENABLE_CHECKS            TRUE
 +#endif
 +
 +/**
 + * @brief   Debug option, consistency checks.
 + * @details If enabled then all the assertions in the kernel code are
 + *          activated. This includes consistency checks inside the kernel,
 + *          runtime anomalies and port-defined checks.
 + *
 + * @note    The default is @p FALSE.
 + */
 +#if !defined(CH_DBG_ENABLE_ASSERTS) || defined(__DOXYGEN__)
 +#define CH_DBG_ENABLE_ASSERTS           TRUE
 +#endif
 +
 +/**
 + * @brief   Debug option, trace buffer.
 + * @details If enabled then the context switch circular trace buffer is
 + *          activated.
 + *
 + * @note    The default is @p FALSE.
 + */
 +#if !defined(CH_DBG_ENABLE_TRACE) || defined(__DOXYGEN__)
 +#define CH_DBG_ENABLE_TRACE             TRUE
 +#endif
 +
 +/**
 + * @brief   Debug option, stack checks.
 + * @details If enabled then a runtime stack check is performed.
 + *
 + * @note    The default is @p FALSE.
 + * @note    The stack check is performed in a architecture/port dependent way.
 + *          It may not be implemented or some ports.
 + * @note    The default failure mode is to halt the system with the global
 + *          @p panic_msg variable set to @p NULL.
 + */
 +#if !defined(CH_DBG_ENABLE_STACK_CHECK) || defined(__DOXYGEN__)
 +#define CH_DBG_ENABLE_STACK_CHECK       TRUE
 +#endif
 +
 +/**
 + * @brief   Debug option, stacks initialization.
 + * @details If enabled then the threads working area is filled with a byte
 + *          value when a thread is created. This can be useful for the
 + *          runtime measurement of the used stack.
 + *
 + * @note    The default is @p FALSE.
 + */
 +#if !defined(CH_DBG_FILL_THREADS) || defined(__DOXYGEN__)
 +#define CH_DBG_FILL_THREADS             TRUE
 +#endif
 +
 +/**
 + * @brief   Debug option, threads profiling.
 + * @details If enabled then a field is added to the @p Thread structure that
 + *          counts the system ticks occurred while executing the thread.
 + *
 + * @note    The default is @p TRUE.
 + * @note    This debug option is defaulted to TRUE because it is required by
 + *          some test cases into the test suite.
 + */
 +#if !defined(CH_DBG_THREADS_PROFILING) || defined(__DOXYGEN__)
 +#define CH_DBG_THREADS_PROFILING        TRUE
 +#endif
 +
 +/** @} */
 +
 +/*===========================================================================*/
 +/**
 + * @name Kernel hooks
 + * @{
 + */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Threads descriptor structure extension.
 + * @details User fields added to the end of the @p Thread structure.
 + */
 +#if !defined(THREAD_EXT_FIELDS) || defined(__DOXYGEN__)
 +#define THREAD_EXT_FIELDS                                                   \
 +  /* Add threads custom fields here.*/
 +#endif
 +
 +/**
 + * @brief   Threads initialization hook.
 + * @details User initialization code added to the @p chThdInit() API.
 + *
 + * @note    It is invoked from within @p chThdInit() and implicitly from all
 + *          the threads creation APIs.
 + */
 +#if !defined(THREAD_EXT_INIT_HOOK) || defined(__DOXYGEN__)
 +#define THREAD_EXT_INIT_HOOK(tp) {                                          \
 +  /* Add threads initialization code here.*/                                \
 +}
 +#endif
 +
 +/**
 + * @brief   Threads finalization hook.
 + * @details User finalization code added to the @p chThdExit() API.
 + *
 + * @note    It is inserted into lock zone.
 + * @note    It is also invoked when the threads simply return in order to
 + *          terminate.
 + */
 +#if !defined(THREAD_EXT_EXIT_HOOK) || defined(__DOXYGEN__)
 +#define THREAD_EXT_EXIT_HOOK(tp) {                                          \
 +  /* Add threads finalization code here.*/                                  \
 +}
 +#endif
 +
 +/**
 + * @brief   Context switch hook.
 + * @details This hook is invoked just before switching between threads.
 + */
 +#if !defined(THREAD_CONTEXT_SWITCH_HOOK) || defined(__DOXYGEN__)
 +#define THREAD_CONTEXT_SWITCH_HOOK(ntp, otp) {                              \
 +  /* System halt code here.*/                                               \
 +}
 +#endif
 +
 +/**
 + * @brief   Idle Loop hook.
 + * @details This hook is continuously invoked by the idle thread loop.
 + */
 +#if !defined(IDLE_LOOP_HOOK) || defined(__DOXYGEN__)
 +#define IDLE_LOOP_HOOK() {                                                  \
 +  /* Idle loop code here.*/                                                 \
 +}
 +#endif
 +
 +/**
 + * @brief   System tick event hook.
 + * @details This hook is invoked in the system tick handler immediately
 + *          after processing the virtual timers queue.
 + */
 +#if !defined(SYSTEM_TICK_EVENT_HOOK) || defined(__DOXYGEN__)
 +#define SYSTEM_TICK_EVENT_HOOK() {                                          \
 +  /* System tick event code here.*/                                         \
 +}
 +#endif
 +
 +/**
 + * @brief   System halt hook.
 + * @details This hook is invoked in case to a system halting error before
 + *          the system is halted.
 + */
 +#if !defined(SYSTEM_HALT_HOOK) || defined(__DOXYGEN__)
 +#define SYSTEM_HALT_HOOK() {                                                \
 +  /* System halt code here.*/                                               \
 +}
 +#endif
 +
 +/** @} */
 +
 +/*===========================================================================*/
 +/* Port-specific settings (override port settings defaulted in chcore.h).    */
 +/*===========================================================================*/
 +
 +#endif  /* _CHCONF_H_ */
 +
 +/** @} */
 diff --git a/testhal/STM32F4xx/UART/halconf.h b/testhal/STM32F4xx/UART/halconf.h new file mode 100644 index 000000000..520e71b0a --- /dev/null +++ b/testhal/STM32F4xx/UART/halconf.h @@ -0,0 +1,312 @@ +/*
 +    ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio
 +
 +    Licensed under the Apache License, Version 2.0 (the "License");
 +    you may not use this file except in compliance with the License.
 +    You may obtain a copy of the License at
 +
 +        http://www.apache.org/licenses/LICENSE-2.0
 +
 +    Unless required by applicable law or agreed to in writing, software
 +    distributed under the License is distributed on an "AS IS" BASIS,
 +    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 +    See the License for the specific language governing permissions and
 +    limitations under the License.
 +*/
 +
 +/**
 + * @file    templates/halconf.h
 + * @brief   HAL configuration header.
 + * @details HAL configuration file, this file allows to enable or disable the
 + *          various device drivers from your application. You may also use
 + *          this file in order to override the device drivers default settings.
 + *
 + * @addtogroup HAL_CONF
 + * @{
 + */
 +
 +#ifndef _HALCONF_H_
 +#define _HALCONF_H_
 +
 +#include "mcuconf.h"
 +
 +/**
 + * @brief   Enables the TM subsystem.
 + */
 +#if !defined(HAL_USE_TM) || defined(__DOXYGEN__)
 +#define HAL_USE_TM                  TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the PAL subsystem.
 + */
 +#if !defined(HAL_USE_PAL) || defined(__DOXYGEN__)
 +#define HAL_USE_PAL                 TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the ADC subsystem.
 + */
 +#if !defined(HAL_USE_ADC) || defined(__DOXYGEN__)
 +#define HAL_USE_ADC                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the CAN subsystem.
 + */
 +#if !defined(HAL_USE_CAN) || defined(__DOXYGEN__)
 +#define HAL_USE_CAN                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the EXT subsystem.
 + */
 +#if !defined(HAL_USE_EXT) || defined(__DOXYGEN__)
 +#define HAL_USE_EXT                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the GPT subsystem.
 + */
 +#if !defined(HAL_USE_GPT) || defined(__DOXYGEN__)
 +#define HAL_USE_GPT                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the I2C subsystem.
 + */
 +#if !defined(HAL_USE_I2C) || defined(__DOXYGEN__)
 +#define HAL_USE_I2C                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the ICU subsystem.
 + */
 +#if !defined(HAL_USE_ICU) || defined(__DOXYGEN__)
 +#define HAL_USE_ICU                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the MAC subsystem.
 + */
 +#if !defined(HAL_USE_MAC) || defined(__DOXYGEN__)
 +#define HAL_USE_MAC                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the MMC_SPI subsystem.
 + */
 +#if !defined(HAL_USE_MMC_SPI) || defined(__DOXYGEN__)
 +#define HAL_USE_MMC_SPI             FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the PWM subsystem.
 + */
 +#if !defined(HAL_USE_PWM) || defined(__DOXYGEN__)
 +#define HAL_USE_PWM                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the RTC subsystem.
 + */
 +#if !defined(HAL_USE_RTC) || defined(__DOXYGEN__)
 +#define HAL_USE_RTC                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the SDC subsystem.
 + */
 +#if !defined(HAL_USE_SDC) || defined(__DOXYGEN__)
 +#define HAL_USE_SDC                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the SERIAL subsystem.
 + */
 +#if !defined(HAL_USE_SERIAL) || defined(__DOXYGEN__)
 +#define HAL_USE_SERIAL              FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the SERIAL over USB subsystem.
 + */
 +#if !defined(HAL_USE_SERIAL_USB) || defined(__DOXYGEN__)
 +#define HAL_USE_SERIAL_USB          FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the SPI subsystem.
 + */
 +#if !defined(HAL_USE_SPI) || defined(__DOXYGEN__)
 +#define HAL_USE_SPI                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the UART subsystem.
 + */
 +#if !defined(HAL_USE_UART) || defined(__DOXYGEN__)
 +#define HAL_USE_UART                TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the USB subsystem.
 + */
 +#if !defined(HAL_USE_USB) || defined(__DOXYGEN__)
 +#define HAL_USE_USB                 FALSE
 +#endif
 +
 +/*===========================================================================*/
 +/* ADC driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Enables synchronous APIs.
 + * @note    Disabling this option saves both code and data space.
 + */
 +#if !defined(ADC_USE_WAIT) || defined(__DOXYGEN__)
 +#define ADC_USE_WAIT                TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the @p adcAcquireBus() and @p adcReleaseBus() APIs.
 + * @note    Disabling this option saves both code and data space.
 + */
 +#if !defined(ADC_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
 +#define ADC_USE_MUTUAL_EXCLUSION    TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* CAN driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Sleep mode related APIs inclusion switch.
 + */
 +#if !defined(CAN_USE_SLEEP_MODE) || defined(__DOXYGEN__)
 +#define CAN_USE_SLEEP_MODE          TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* I2C driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Enables the mutual exclusion APIs on the I2C bus.
 + */
 +#if !defined(I2C_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
 +#define I2C_USE_MUTUAL_EXCLUSION    TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* MAC driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Enables an event sources for incoming packets.
 + */
 +#if !defined(MAC_USE_ZERO_COPY) || defined(__DOXYGEN__)
 +#define MAC_USE_ZERO_COPY           FALSE
 +#endif
 +
 +/**
 + * @brief   Enables an event sources for incoming packets.
 + */
 +#if !defined(MAC_USE_EVENTS) || defined(__DOXYGEN__)
 +#define MAC_USE_EVENTS              TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* MMC_SPI driver related settings.                                          */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Delays insertions.
 + * @details If enabled this options inserts delays into the MMC waiting
 + *          routines releasing some extra CPU time for the threads with
 + *          lower priority, this may slow down the driver a bit however.
 + *          This option is recommended also if the SPI driver does not
 + *          use a DMA channel and heavily loads the CPU.
 + */
 +#if !defined(MMC_NICE_WAITING) || defined(__DOXYGEN__)
 +#define MMC_NICE_WAITING            TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* SDC driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Number of initialization attempts before rejecting the card.
 + * @note    Attempts are performed at 10mS intervals.
 + */
 +#if !defined(SDC_INIT_RETRY) || defined(__DOXYGEN__)
 +#define SDC_INIT_RETRY              100
 +#endif
 +
 +/**
 + * @brief   Include support for MMC cards.
 + * @note    MMC support is not yet implemented so this option must be kept
 + *          at @p FALSE.
 + */
 +#if !defined(SDC_MMC_SUPPORT) || defined(__DOXYGEN__)
 +#define SDC_MMC_SUPPORT             FALSE
 +#endif
 +
 +/**
 + * @brief   Delays insertions.
 + * @details If enabled this options inserts delays into the MMC waiting
 + *          routines releasing some extra CPU time for the threads with
 + *          lower priority, this may slow down the driver a bit however.
 + */
 +#if !defined(SDC_NICE_WAITING) || defined(__DOXYGEN__)
 +#define SDC_NICE_WAITING            TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* SERIAL driver related settings.                                           */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Default bit rate.
 + * @details Configuration parameter, this is the baud rate selected for the
 + *          default configuration.
 + */
 +#if !defined(SERIAL_DEFAULT_BITRATE) || defined(__DOXYGEN__)
 +#define SERIAL_DEFAULT_BITRATE      38400
 +#endif
 +
 +/**
 + * @brief   Serial buffers size.
 + * @details Configuration parameter, you can change the depth of the queue
 + *          buffers depending on the requirements of your application.
 + * @note    The default is 64 bytes for both the transmission and receive
 + *          buffers.
 + */
 +#if !defined(SERIAL_BUFFERS_SIZE) || defined(__DOXYGEN__)
 +#define SERIAL_BUFFERS_SIZE         16
 +#endif
 +
 +/*===========================================================================*/
 +/* SPI driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Enables synchronous APIs.
 + * @note    Disabling this option saves both code and data space.
 + */
 +#if !defined(SPI_USE_WAIT) || defined(__DOXYGEN__)
 +#define SPI_USE_WAIT                TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the @p spiAcquireBus() and @p spiReleaseBus() APIs.
 + * @note    Disabling this option saves both code and data space.
 + */
 +#if !defined(SPI_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
 +#define SPI_USE_MUTUAL_EXCLUSION    TRUE
 +#endif
 +
 +#endif /* _HALCONF_H_ */
 +
 +/** @} */
 diff --git a/testhal/STM32F4xx/UART/main.c b/testhal/STM32F4xx/UART/main.c new file mode 100644 index 000000000..fcd6fa965 --- /dev/null +++ b/testhal/STM32F4xx/UART/main.c @@ -0,0 +1,163 @@ +/*
 +    ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio
 +
 +    Licensed under the Apache License, Version 2.0 (the "License");
 +    you may not use this file except in compliance with the License.
 +    You may obtain a copy of the License at
 +
 +        http://www.apache.org/licenses/LICENSE-2.0
 +
 +    Unless required by applicable law or agreed to in writing, software
 +    distributed under the License is distributed on an "AS IS" BASIS,
 +    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 +    See the License for the specific language governing permissions and
 +    limitations under the License.
 +*/
 +
 +#include "ch.h"
 +#include "hal.h"
 +
 +static VirtualTimer vt3, vt4, vt5;
 +
 +static const uint8_t message[] = "0123456789ABCDEF";
 +static uint8_t buffer[16];
 +
 +static void led3off(void *p) {
 +
 +  (void)p;
 +  palClearPad(GPIOD, GPIOD_LED3);
 +}
 +
 +static void led4off(void *p) {
 +
 +  (void)p;
 +  palClearPad(GPIOD, GPIOD_LED4);
 +}
 +
 +static void led5off(void *p) {
 +
 +  (void)p;
 +  palClearPad(GPIOD, GPIOD_LED5);
 +}
 +
 +/*
 + * This callback is invoked when a transmission buffer has been completely
 + * read by the driver.
 + */
 +static void txend1(UARTDriver *uartp) {
 +
 +  (void)uartp;
 +}
 +
 +/*
 + * This callback is invoked when a transmission has physically completed.
 + */
 +static void txend2(UARTDriver *uartp) {
 +
 +  (void)uartp;
 +  palSetPad(GPIOD, GPIOD_LED5);
 +  chSysLockFromIsr();
 +  if (chVTIsArmedI(&vt5))
 +    chVTResetI(&vt5);
 +  chVTSetI(&vt5, MS2ST(200), led5off, NULL);
 +  chSysUnlockFromIsr();
 +}
 +
 +/*
 + * This callback is invoked on a receive error, the errors mask is passed
 + * as parameter.
 + */
 +static void rxerr(UARTDriver *uartp, uartflags_t e) {
 +
 +  (void)uartp;
 +  (void)e;
 +}
 +
 +/*
 + * This callback is invoked when a character is received but the application
 + * was not ready to receive it, the character is passed as parameter.
 + */
 +static void rxchar(UARTDriver *uartp, uint16_t c) {
 +
 +  (void)uartp;
 +  (void)c;
 +  /* Flashing the LED each time a character is received.*/
 +  palSetPad(GPIOD, GPIOD_LED4);
 +  chSysLockFromIsr();
 +  if (chVTIsArmedI(&vt4))
 +    chVTResetI(&vt4);
 +  chVTSetI(&vt4, MS2ST(200), led4off, NULL);
 +  chSysUnlockFromIsr();
 +}
 +
 +/*
 + * This callback is invoked when a receive buffer has been completely written.
 + */
 +static void rxend(UARTDriver *uartp) {
 +
 +  (void)uartp;
 +
 +  /* Flashing the LED each time a character is received.*/
 +  palSetPad(GPIOD, GPIOD_LED3);
 +  chSysLockFromIsr();
 +  if (chVTIsArmedI(&vt3))
 +    chVTResetI(&vt3);
 +  chVTSetI(&vt3, MS2ST(200), led3off, NULL);
 +  chSysUnlockFromIsr();
 +}
 +
 +/*
 + * UART driver configuration structure.
 + */
 +static UARTConfig uart_cfg_1 = {
 +  txend1,
 +  txend2,
 +  rxend,
 +  rxchar,
 +  rxerr,
 +  38400,
 +  0,
 +  USART_CR2_LINEN,
 +  0
 +};
 +
 +/*
 + * Application entry point.
 + */
 +int main(void) {
 +
 +  /*
 +   * System initializations.
 +   * - HAL initialization, this also initializes the configured device drivers
 +   *   and performs the board-specific initializations.
 +   * - Kernel initialization, the main() function becomes a thread and the
 +   *   RTOS is active.
 +   */
 +  halInit();
 +  chSysInit();
 +
 +  /*
 +   * Activates the UART driver 2, PA2(TX) and PA3(RX) are routed to USART2.
 +   */
 +  uartStart(&UARTD2, &uart_cfg_1);
 +  palSetPadMode(GPIOA, 2, PAL_MODE_ALTERNATE(7));
 +  palSetPadMode(GPIOA, 3, PAL_MODE_ALTERNATE(7));
 +
 +
 +  /*
 +   * Normal main() thread activity, in this demo it does nothing.
 +   */
 +  while (TRUE) {
 +    if (palReadPad(GPIOA, GPIOA_BUTTON)) {
 +      /*
 +       * Starts both a transmission and a receive operations, both will be
 +       * handled entirely in background.
 +       */
 +      uartStopReceive(&UARTD2);
 +      uartStopSend(&UARTD2);
 +      uartStartReceive(&UARTD2, 16, buffer);
 +      uartStartSend(&UARTD2, 16, message);
 +    }
 +    chThdSleepMilliseconds(500);
 +  }
 +}
 diff --git a/testhal/STM32F4xx/UART/mcuconf.h b/testhal/STM32F4xx/UART/mcuconf.h new file mode 100644 index 000000000..102c44dd7 --- /dev/null +++ b/testhal/STM32F4xx/UART/mcuconf.h @@ -0,0 +1,278 @@ +/*
 +    ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio
 +
 +    Licensed under the Apache License, Version 2.0 (the "License");
 +    you may not use this file except in compliance with the License.
 +    You may obtain a copy of the License at
 +
 +        http://www.apache.org/licenses/LICENSE-2.0
 +
 +    Unless required by applicable law or agreed to in writing, software
 +    distributed under the License is distributed on an "AS IS" BASIS,
 +    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 +    See the License for the specific language governing permissions and
 +    limitations under the License.
 +*/
 +
 +/*
 + * STM32F4xx drivers configuration.
 + * The following settings override the default settings present in
 + * the various device driver implementation headers.
 + * Note that the settings for each driver only have effect if the whole
 + * driver is enabled in halconf.h.
 + *
 + * IRQ priorities:
 + * 15...0       Lowest...Highest.
 + *
 + * DMA priorities:
 + * 0...3        Lowest...Highest.
 + */
 +
 +#define STM32F4xx_MCUCONF
 +
 +/*
 + * HAL driver system settings.
 + */
 +#define STM32_NO_INIT                       FALSE
 +#define STM32_HSI_ENABLED                   TRUE
 +#define STM32_LSI_ENABLED                   TRUE
 +#define STM32_HSE_ENABLED                   TRUE
 +#define STM32_LSE_ENABLED                   FALSE
 +#define STM32_CLOCK48_REQUIRED              TRUE
 +#define STM32_SW                            STM32_SW_PLL
 +#define STM32_PLLSRC                        STM32_PLLSRC_HSE
 +#define STM32_PLLM_VALUE                    8
 +#define STM32_PLLN_VALUE                    336
 +#define STM32_PLLP_VALUE                    2
 +#define STM32_PLLQ_VALUE                    7
 +#define STM32_HPRE                          STM32_HPRE_DIV1
 +#define STM32_PPRE1                         STM32_PPRE1_DIV4
 +#define STM32_PPRE2                         STM32_PPRE2_DIV2
 +#define STM32_RTCSEL                        STM32_RTCSEL_LSI
 +#define STM32_RTCPRE_VALUE                  8
 +#define STM32_MCO1SEL                       STM32_MCO1SEL_HSI
 +#define STM32_MCO1PRE                       STM32_MCO1PRE_DIV1
 +#define STM32_MCO2SEL                       STM32_MCO2SEL_SYSCLK
 +#define STM32_MCO2PRE                       STM32_MCO2PRE_DIV5
 +#define STM32_I2SSRC                        STM32_I2SSRC_CKIN
 +#define STM32_PLLI2SN_VALUE                 192
 +#define STM32_PLLI2SR_VALUE                 5
 +#define STM32_VOS                           STM32_VOS_HIGH
 +#define STM32_PVD_ENABLE                    FALSE
 +#define STM32_PLS                           STM32_PLS_LEV0
 +
 +/*
 + * ADC driver system settings.
 + */
 +#define STM32_ADC_ADCPRE                    ADC_CCR_ADCPRE_DIV4
 +#define STM32_ADC_USE_ADC1                  FALSE
 +#define STM32_ADC_USE_ADC2                  FALSE
 +#define STM32_ADC_USE_ADC3                  FALSE
 +#define STM32_ADC_ADC1_DMA_STREAM           STM32_DMA_STREAM_ID(2, 4)
 +#define STM32_ADC_ADC2_DMA_STREAM           STM32_DMA_STREAM_ID(2, 2)
 +#define STM32_ADC_ADC3_DMA_STREAM           STM32_DMA_STREAM_ID(2, 1)
 +#define STM32_ADC_ADC1_DMA_PRIORITY         2
 +#define STM32_ADC_ADC2_DMA_PRIORITY         2
 +#define STM32_ADC_ADC3_DMA_PRIORITY         2
 +#define STM32_ADC_IRQ_PRIORITY              6
 +#define STM32_ADC_ADC1_DMA_IRQ_PRIORITY     6
 +#define STM32_ADC_ADC2_DMA_IRQ_PRIORITY     6
 +#define STM32_ADC_ADC3_DMA_IRQ_PRIORITY     6
 +
 +/*
 + * CAN driver system settings.
 + */
 +#define STM32_CAN_USE_CAN1                  FALSE
 +#define STM32_CAN_USE_CAN2                  FALSE
 +#define STM32_CAN_CAN1_IRQ_PRIORITY         11
 +#define STM32_CAN_CAN2_IRQ_PRIORITY         11
 +
 +/*
 + * EXT driver system settings.
 + */
 +#define STM32_EXT_EXTI0_IRQ_PRIORITY        6
 +#define STM32_EXT_EXTI1_IRQ_PRIORITY        6
 +#define STM32_EXT_EXTI2_IRQ_PRIORITY        6
 +#define STM32_EXT_EXTI3_IRQ_PRIORITY        6
 +#define STM32_EXT_EXTI4_IRQ_PRIORITY        6
 +#define STM32_EXT_EXTI5_9_IRQ_PRIORITY      6
 +#define STM32_EXT_EXTI10_15_IRQ_PRIORITY    6
 +#define STM32_EXT_EXTI16_IRQ_PRIORITY       6
 +#define STM32_EXT_EXTI17_IRQ_PRIORITY       15
 +#define STM32_EXT_EXTI18_IRQ_PRIORITY       6
 +#define STM32_EXT_EXTI19_IRQ_PRIORITY       6
 +#define STM32_EXT_EXTI20_IRQ_PRIORITY       6
 +#define STM32_EXT_EXTI21_IRQ_PRIORITY       15
 +#define STM32_EXT_EXTI22_IRQ_PRIORITY       15
 +
 +/*
 + * GPT driver system settings.
 + */
 +#define STM32_GPT_USE_TIM1                  FALSE
 +#define STM32_GPT_USE_TIM2                  FALSE
 +#define STM32_GPT_USE_TIM3                  FALSE
 +#define STM32_GPT_USE_TIM4                  FALSE
 +#define STM32_GPT_USE_TIM5                  FALSE
 +#define STM32_GPT_USE_TIM6                  FALSE
 +#define STM32_GPT_USE_TIM7                  FALSE
 +#define STM32_GPT_USE_TIM8                  FALSE
 +#define STM32_GPT_USE_TIM9                  FALSE
 +#define STM32_GPT_USE_TIM11                 FALSE
 +#define STM32_GPT_USE_TIM12                 FALSE
 +#define STM32_GPT_USE_TIM14                 FALSE
 +#define STM32_GPT_TIM1_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM2_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM3_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM4_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM5_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM6_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM7_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM8_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM9_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM11_IRQ_PRIORITY        7
 +#define STM32_GPT_TIM12_IRQ_PRIORITY        7
 +#define STM32_GPT_TIM14_IRQ_PRIORITY        7
 +
 +/*
 + * I2C driver system settings.
 + */
 +#define STM32_I2C_USE_I2C1                  FALSE
 +#define STM32_I2C_USE_I2C2                  FALSE
 +#define STM32_I2C_USE_I2C3                  FALSE
 +#define STM32_I2C_I2C1_RX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 0)
 +#define STM32_I2C_I2C1_TX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 6)
 +#define STM32_I2C_I2C2_RX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 2)
 +#define STM32_I2C_I2C2_TX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 7)
 +#define STM32_I2C_I2C3_RX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 2)
 +#define STM32_I2C_I2C3_TX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 4)
 +#define STM32_I2C_I2C1_IRQ_PRIORITY         5
 +#define STM32_I2C_I2C2_IRQ_PRIORITY         5
 +#define STM32_I2C_I2C3_IRQ_PRIORITY         5
 +#define STM32_I2C_I2C1_DMA_PRIORITY         3
 +#define STM32_I2C_I2C2_DMA_PRIORITY         3
 +#define STM32_I2C_I2C3_DMA_PRIORITY         3
 +#define STM32_I2C_I2C1_DMA_ERROR_HOOK()     chSysHalt()
 +#define STM32_I2C_I2C2_DMA_ERROR_HOOK()     chSysHalt()
 +#define STM32_I2C_I2C3_DMA_ERROR_HOOK()     chSysHalt()
 +
 +/*
 + * ICU driver system settings.
 + */
 +#define STM32_ICU_USE_TIM1                  FALSE
 +#define STM32_ICU_USE_TIM2                  FALSE
 +#define STM32_ICU_USE_TIM3                  FALSE
 +#define STM32_ICU_USE_TIM4                  FALSE
 +#define STM32_ICU_USE_TIM5                  FALSE
 +#define STM32_ICU_USE_TIM8                  FALSE
 +#define STM32_ICU_USE_TIM9                  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
 +#define STM32_ICU_TIM8_IRQ_PRIORITY         7
 +#define STM32_ICU_TIM9_IRQ_PRIORITY         7
 +
 +/*
 + * MAC driver system settings.
 + */
 +#define STM32_MAC_TRANSMIT_BUFFERS          2
 +#define STM32_MAC_RECEIVE_BUFFERS           4
 +#define STM32_MAC_BUFFERS_SIZE              1522
 +#define STM32_MAC_PHY_TIMEOUT               100
 +#define STM32_MAC_ETH1_CHANGE_PHY_STATE     TRUE
 +#define STM32_MAC_ETH1_IRQ_PRIORITY         13
 +#define STM32_MAC_IP_CHECKSUM_OFFLOAD       0
 +
 +/*
 + * PWM driver system settings.
 + */
 +#define STM32_PWM_USE_ADVANCED              FALSE
 +#define STM32_PWM_USE_TIM1                  FALSE
 +#define STM32_PWM_USE_TIM2                  FALSE
 +#define STM32_PWM_USE_TIM3                  FALSE
 +#define STM32_PWM_USE_TIM4                  FALSE
 +#define STM32_PWM_USE_TIM5                  FALSE
 +#define STM32_PWM_USE_TIM8                  FALSE
 +#define STM32_PWM_USE_TIM9                  FALSE
 +#define STM32_PWM_TIM1_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM2_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM3_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM4_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM5_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM8_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM9_IRQ_PRIORITY         7
 +
 +/*
 + * SERIAL driver system settings.
 + */
 +#define STM32_SERIAL_USE_USART1             FALSE
 +#define STM32_SERIAL_USE_USART2             FALSE
 +#define STM32_SERIAL_USE_USART3             FALSE
 +#define STM32_SERIAL_USE_UART4              FALSE
 +#define STM32_SERIAL_USE_UART5              FALSE
 +#define STM32_SERIAL_USE_USART6             FALSE
 +#define STM32_SERIAL_USART1_PRIORITY        12
 +#define STM32_SERIAL_USART2_PRIORITY        12
 +#define STM32_SERIAL_USART3_PRIORITY        12
 +#define STM32_SERIAL_UART4_PRIORITY         12
 +#define STM32_SERIAL_UART5_PRIORITY         12
 +#define STM32_SERIAL_USART6_PRIORITY        12
 +
 +/*
 + * SPI driver system settings.
 + */
 +#define STM32_SPI_USE_SPI1                  FALSE
 +#define STM32_SPI_USE_SPI2                  FALSE
 +#define STM32_SPI_USE_SPI3                  FALSE
 +#define STM32_SPI_SPI1_RX_DMA_STREAM        STM32_DMA_STREAM_ID(2, 0)
 +#define STM32_SPI_SPI1_TX_DMA_STREAM        STM32_DMA_STREAM_ID(2, 3)
 +#define STM32_SPI_SPI2_RX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 3)
 +#define STM32_SPI_SPI2_TX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 4)
 +#define STM32_SPI_SPI3_RX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 0)
 +#define STM32_SPI_SPI3_TX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 7)
 +#define STM32_SPI_SPI1_DMA_PRIORITY         1
 +#define STM32_SPI_SPI2_DMA_PRIORITY         1
 +#define STM32_SPI_SPI3_DMA_PRIORITY         1
 +#define STM32_SPI_SPI1_IRQ_PRIORITY         10
 +#define STM32_SPI_SPI2_IRQ_PRIORITY         10
 +#define STM32_SPI_SPI3_IRQ_PRIORITY         10
 +#define STM32_SPI_DMA_ERROR_HOOK(spip)      chSysHalt()
 +
 +/*
 + * UART driver system settings.
 + */
 +#define STM32_UART_USE_USART1               TRUE
 +#define STM32_UART_USE_USART2               TRUE
 +#define STM32_UART_USE_USART3               TRUE
 +#define STM32_UART_USE_USART6               TRUE
 +#define STM32_UART_USART1_RX_DMA_STREAM     STM32_DMA_STREAM_ID(2, 5)
 +#define STM32_UART_USART1_TX_DMA_STREAM     STM32_DMA_STREAM_ID(2, 7)
 +#define STM32_UART_USART2_RX_DMA_STREAM     STM32_DMA_STREAM_ID(1, 5)
 +#define STM32_UART_USART2_TX_DMA_STREAM     STM32_DMA_STREAM_ID(1, 6)
 +#define STM32_UART_USART3_RX_DMA_STREAM     STM32_DMA_STREAM_ID(1, 1)
 +#define STM32_UART_USART3_TX_DMA_STREAM     STM32_DMA_STREAM_ID(1, 3)
 +#define STM32_UART_USART6_RX_DMA_STREAM     STM32_DMA_STREAM_ID(2, 2)
 +#define STM32_UART_USART6_TX_DMA_STREAM     STM32_DMA_STREAM_ID(2, 7)
 +#define STM32_UART_USART1_IRQ_PRIORITY      12
 +#define STM32_UART_USART2_IRQ_PRIORITY      12
 +#define STM32_UART_USART3_IRQ_PRIORITY      12
 +#define STM32_UART_USART6_IRQ_PRIORITY      12
 +#define STM32_UART_USART1_DMA_PRIORITY      0
 +#define STM32_UART_USART2_DMA_PRIORITY      0
 +#define STM32_UART_USART3_DMA_PRIORITY      0
 +#define STM32_UART_USART6_DMA_PRIORITY      0
 +#define STM32_UART_DMA_ERROR_HOOK(uartp)    chSysHalt()
 +
 +/*
 + * USB driver system settings.
 + */
 +#define STM32_USB_USE_OTG1                  FALSE
 +#define STM32_USB_USE_OTG2                  FALSE
 +#define STM32_USB_OTG1_IRQ_PRIORITY         14
 +#define STM32_USB_OTG2_IRQ_PRIORITY         14
 +#define STM32_USB_OTG1_RX_FIFO_SIZE         512
 +#define STM32_USB_OTG2_RX_FIFO_SIZE         1024
 +#define STM32_USB_OTG_THREAD_PRIO           LOWPRIO
 +#define STM32_USB_OTG_THREAD_STACK_SIZE     128
 +#define STM32_USB_OTGFIFO_FILL_BASEPRI      0
 diff --git a/testhal/STM32F4xx/UART/readme.txt b/testhal/STM32F4xx/UART/readme.txt new file mode 100644 index 000000000..19a8e26da --- /dev/null +++ b/testhal/STM32F4xx/UART/readme.txt @@ -0,0 +1,31 @@ +*****************************************************************************
 +** ChibiOS/RT HAL - UART driver demo for STM32F4xx.                        **
 +*****************************************************************************
 +
 +** TARGET **
 +
 +The demo runs on an STMicroelectronics STM32F4-Discovery board.
 +
 +** The Demo **
 +
 +The application demonstrates the use of the STM32F4xx UART driver.
 +
 +** Board Setup **
 +
 +- Connect an RS232 transceiver to pins PA2(TX) and PA3(RX).
 +- Connect a terminal emulator to the transceiver (38400-N-8-1).
 +
 +** Build Procedure **
 +
 +The demo has been tested using the free Codesourcery GCC-based toolchain
 +and YAGARTO.
 +Just modify the TRGT line in the makefile in order to use different GCC ports.
 +
 +** Notes **
 +
 +Some files used by the demo are not part of ChibiOS/RT but are copyright of
 +ST Microelectronics and are licensed under a different license.
 +Also note that not all the files present in the ST library are distributed
 +with ChibiOS/RT, you can find the whole library on the ST web site:
 +
 +                             http://www.st.com
 diff --git a/testhal/STM32F4xx/USB_CDC/.cproject b/testhal/STM32F4xx/USB_CDC/.cproject new file mode 100644 index 000000000..16a94a05d --- /dev/null +++ b/testhal/STM32F4xx/USB_CDC/.cproject @@ -0,0 +1,51 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?>
 +<?fileVersion 4.0.0?>
 +
 +<cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
 +	<storageModule moduleId="org.eclipse.cdt.core.settings">
 +		<cconfiguration id="0.1487191575">
 +			<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="0.1487191575" moduleId="org.eclipse.cdt.core.settings" name="Default">
 +				<externalSettings/>
 +				<extensions>
 +					<extension id="org.eclipse.cdt.core.VCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 +					<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 +					<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
 +					<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 +					<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 +					<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 +				</extensions>
 +			</storageModule>
 +			<storageModule moduleId="cdtBuildSystem" version="4.0.0">
 +				<configuration artifactName="${ProjName}" buildProperties="" description="" id="0.1487191575" name="Default" parent="org.eclipse.cdt.build.core.prefbase.cfg">
 +					<folderInfo id="0.1487191575." name="/" resourcePath="">
 +						<toolChain id="org.eclipse.cdt.build.core.prefbase.toolchain.1471343573" name="No ToolChain" resourceTypeBasedDiscovery="false" superClass="org.eclipse.cdt.build.core.prefbase.toolchain">
 +							<targetPlatform id="org.eclipse.cdt.build.core.prefbase.toolchain.1471343573.621927840" name=""/>
 +							<builder id="org.eclipse.cdt.build.core.settings.default.builder.750820837" keepEnvironmentInBuildfile="false" managedBuildOn="false" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="org.eclipse.cdt.build.core.settings.default.builder"/>
 +							<tool id="org.eclipse.cdt.build.core.settings.holder.libs.2127406235" name="holder for library settings" superClass="org.eclipse.cdt.build.core.settings.holder.libs"/>
 +							<tool id="org.eclipse.cdt.build.core.settings.holder.1729841372" name="Assembly" superClass="org.eclipse.cdt.build.core.settings.holder">
 +								<inputType id="org.eclipse.cdt.build.core.settings.holder.inType.1508038223" languageId="org.eclipse.cdt.core.assembly" languageName="Assembly" sourceContentType="org.eclipse.cdt.core.asmSource" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
 +							</tool>
 +							<tool id="org.eclipse.cdt.build.core.settings.holder.797753085" name="GNU C++" superClass="org.eclipse.cdt.build.core.settings.holder">
 +								<inputType id="org.eclipse.cdt.build.core.settings.holder.inType.643916244" languageId="org.eclipse.cdt.core.g++" languageName="GNU C++" sourceContentType="org.eclipse.cdt.core.cxxSource,org.eclipse.cdt.core.cxxHeader" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
 +							</tool>
 +							<tool id="org.eclipse.cdt.build.core.settings.holder.626880334" name="GNU C" superClass="org.eclipse.cdt.build.core.settings.holder">
 +								<inputType id="org.eclipse.cdt.build.core.settings.holder.inType.154285937" languageId="org.eclipse.cdt.core.gcc" languageName="GNU C" sourceContentType="org.eclipse.cdt.core.cSource,org.eclipse.cdt.core.cHeader" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
 +							</tool>
 +						</toolChain>
 +					</folderInfo>
 +				</configuration>
 +			</storageModule>
 +			<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
 +		</cconfiguration>
 +	</storageModule>
 +	<storageModule moduleId="cdtBuildSystem" version="4.0.0">
 +		<project id="STM32F4xx-USB_CDC.null.1373754647" name="STM32F4xx-USB_CDC"/>
 +	</storageModule>
 +	<storageModule moduleId="scannerConfiguration">
 +		<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
 +		<scannerConfigBuildInfo instanceId="0.1487191575">
 +			<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile"/>
 +		</scannerConfigBuildInfo>
 +	</storageModule>
 +	<storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
 +</cproject>
 diff --git a/testhal/STM32F4xx/USB_CDC/.project b/testhal/STM32F4xx/USB_CDC/.project new file mode 100644 index 000000000..135abc544 --- /dev/null +++ b/testhal/STM32F4xx/USB_CDC/.project @@ -0,0 +1,43 @@ +<?xml version="1.0" encoding="UTF-8"?>
 +<projectDescription>
 +	<name>STM32F4xx-USB_CDC</name>
 +	<comment></comment>
 +	<projects>
 +	</projects>
 +	<buildSpec>
 +		<buildCommand>
 +			<name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
 +			<triggers>clean,full,incremental,</triggers>
 +			<arguments>
 +			</arguments>
 +		</buildCommand>
 +		<buildCommand>
 +			<name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
 +			<triggers>full,incremental,</triggers>
 +			<arguments>
 +			</arguments>
 +		</buildCommand>
 +	</buildSpec>
 +	<natures>
 +		<nature>org.eclipse.cdt.core.cnature</nature>
 +		<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
 +		<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
 +	</natures>
 +	<linkedResources>
 +		<link>
 +			<name>board</name>
 +			<type>2</type>
 +			<locationURI>CHIBIOS/boards/OLIMEX_STM32_E407</locationURI>
 +		</link>
 +		<link>
 +			<name>os</name>
 +			<type>2</type>
 +			<locationURI>CHIBIOS/os</locationURI>
 +		</link>
 +		<link>
 +			<name>test</name>
 +			<type>2</type>
 +			<locationURI>CHIBIOS/test</locationURI>
 +		</link>
 +	</linkedResources>
 +</projectDescription>
 diff --git a/testhal/STM32F4xx/USB_CDC/Makefile b/testhal/STM32F4xx/USB_CDC/Makefile new file mode 100644 index 000000000..8c329e2d7 --- /dev/null +++ b/testhal/STM32F4xx/USB_CDC/Makefile @@ -0,0 +1,223 @@ +##############################################################################
 +# Build global options
 +# NOTE: Can be overridden externally.
 +#
 +
 +# Compiler options here.
 +ifeq ($(USE_OPT),)
 +  USE_OPT = -O2 -ggdb -fomit-frame-pointer -falign-functions=16
 +endif
 +
 +# C specific options here (added to USE_OPT).
 +ifeq ($(USE_COPT),)
 +  USE_COPT = 
 +endif
 +
 +# C++ specific options here (added to USE_OPT).
 +ifeq ($(USE_CPPOPT),)
 +  USE_CPPOPT = -fno-rtti
 +endif
 +
 +# Enable this if you want the linker to remove unused code and data
 +ifeq ($(USE_LINK_GC),)
 +  USE_LINK_GC = yes
 +endif
 +
 +# If enabled, this option allows to compile the application in THUMB mode.
 +ifeq ($(USE_THUMB),)
 +  USE_THUMB = yes
 +endif
 +
 +# Enable this if you want to see the full log while compiling.
 +ifeq ($(USE_VERBOSE_COMPILE),)
 +  USE_VERBOSE_COMPILE = no
 +endif
 +
 +#
 +# Build global options
 +##############################################################################
 +
 +##############################################################################
 +# Architecture or project specific options
 +#
 +
 +# Enables the use of FPU on Cortex-M4.
 +# Enable this if you really want to use the STM FWLib.
 +ifeq ($(USE_FPU),)
 +  USE_FPU = no
 +endif
 +
 +# Enable this if you really want to use the STM FWLib.
 +ifeq ($(USE_FWLIB),)
 +  USE_FWLIB = no
 +endif
 +
 +#
 +# Architecture or project specific options
 +##############################################################################
 +
 +##############################################################################
 +# Project, sources and paths
 +#
 +
 +# Define project name here
 +PROJECT = ch
 +
 +# Imported source files and paths
 +CHIBIOS = ../../..
 +include $(CHIBIOS)/boards/OLIMEX_STM32_E407/board.mk
 +include $(CHIBIOS)/os/hal/platforms/STM32F4xx/platform.mk
 +include $(CHIBIOS)/os/hal/hal.mk
 +include $(CHIBIOS)/os/ports/GCC/ARMCMx/STM32F4xx/port.mk
 +include $(CHIBIOS)/os/kernel/kernel.mk
 +include $(CHIBIOS)/test/test.mk
 +
 +# Define linker script file here
 +LDSCRIPT= $(PORTLD)/STM32F407xG.ld
 +#LDSCRIPT= $(PORTLD)/STM32F407xG_CCM.ld
 +
 +# C sources that can be compiled in ARM or THUMB mode depending on the global
 +# setting.
 +CSRC = $(PORTSRC) \
 +       $(KERNSRC) \
 +       $(TESTSRC) \
 +       $(HALSRC) \
 +       $(PLATFORMSRC) \
 +       $(BOARDSRC) \
 +       $(CHIBIOS)/os/various/shell.c \
 +       $(CHIBIOS)/os/various/chprintf.c \
 +       main.c
 +
 +# C++ sources that can be compiled in ARM or THUMB mode depending on the global
 +# setting.
 +CPPSRC =
 +
 +# C sources to be compiled in ARM mode regardless of the global setting.
 +# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler
 +#       option that results in lower performance and larger code size.
 +ACSRC =
 +
 +# C++ sources to be compiled in ARM mode regardless of the global setting.
 +# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler
 +#       option that results in lower performance and larger code size.
 +ACPPSRC =
 +
 +# C sources to be compiled in THUMB mode regardless of the global setting.
 +# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler
 +#       option that results in lower performance and larger code size.
 +TCSRC =
 +
 +# C sources to be compiled in THUMB mode regardless of the global setting.
 +# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler
 +#       option that results in lower performance and larger code size.
 +TCPPSRC =
 +
 +# List ASM source files here
 +ASMSRC = $(PORTASM)
 +
 +INCDIR = $(PORTINC) $(KERNINC) $(TESTINC) \
 +         $(HALINC) $(PLATFORMINC) $(BOARDINC) \
 +         $(CHIBIOS)/os/various
 +
 +#
 +# Project, sources and paths
 +##############################################################################
 +
 +##############################################################################
 +# Compiler settings
 +#
 +
 +MCU  = cortex-m4
 +
 +#TRGT = arm-elf-
 +TRGT = arm-none-eabi-
 +CC   = $(TRGT)gcc
 +CPPC = $(TRGT)g++
 +# Enable loading with g++ only if you need C++ runtime support.
 +# NOTE: You can use C++ even without C++ support if you are careful. C++
 +#       runtime support makes code size explode.
 +LD   = $(TRGT)gcc
 +#LD   = $(TRGT)g++
 +CP   = $(TRGT)objcopy
 +AS   = $(TRGT)gcc -x assembler-with-cpp
 +OD   = $(TRGT)objdump
 +HEX  = $(CP) -O ihex
 +BIN  = $(CP) -O binary
 +
 +# ARM-specific options here
 +AOPT =
 +
 +# THUMB-specific options here
 +TOPT = -mthumb -DTHUMB
 +
 +# Define C warning options here
 +CWARN = -Wall -Wextra -Wstrict-prototypes
 +
 +# Define C++ warning options here
 +CPPWARN = -Wall -Wextra
 +
 +#
 +# Compiler settings
 +##############################################################################
 +
 +##############################################################################
 +# Start of default section
 +#
 +
 +# List all default C defines here, like -D_DEBUG=1
 +DDEFS =
 +
 +# List all default ASM defines here, like -D_DEBUG=1
 +DADEFS =
 +
 +# List all default directories to look for include files here
 +DINCDIR =
 +
 +# List the default directory to look for the libraries here
 +DLIBDIR =
 +
 +# List all default libraries here
 +DLIBS =
 +
 +#
 +# End of default section
 +##############################################################################
 +
 +##############################################################################
 +# Start of user section
 +#
 +
 +# List all user C define here, like -D_DEBUG=1
 +UDEFS =
 +
 +# Define ASM defines here
 +UADEFS =
 +
 +# List all user directories here
 +UINCDIR =
 +
 +# List the user directory to look for the libraries here
 +ULIBDIR =
 +
 +# List all user libraries here
 +ULIBS =
 +
 +#
 +# End of user defines
 +##############################################################################
 +
 +ifeq ($(USE_FPU),yes)
 +  USE_OPT += -mfloat-abi=softfp -mfpu=fpv4-sp-d16 -fsingle-precision-constant
 +  DDEFS += -DCORTEX_USE_FPU=TRUE
 +else
 +  DDEFS += -DCORTEX_USE_FPU=FALSE
 +endif
 +
 +ifeq ($(USE_FWLIB),yes)
 +  include $(CHIBIOS)/ext/stm32lib/stm32lib.mk
 +  CSRC += $(STM32SRC)
 +  INCDIR += $(STM32INC)
 +  USE_OPT += -DUSE_STDPERIPH_DRIVER
 +endif
 +
 +include $(CHIBIOS)/os/ports/GCC/ARMCMx/rules.mk
 diff --git a/testhal/STM32F4xx/USB_CDC/chconf.h b/testhal/STM32F4xx/USB_CDC/chconf.h new file mode 100644 index 000000000..2e6fcc6ee --- /dev/null +++ b/testhal/STM32F4xx/USB_CDC/chconf.h @@ -0,0 +1,531 @@ +/*
 +    ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio
 +
 +    Licensed under the Apache License, Version 2.0 (the "License");
 +    you may not use this file except in compliance with the License.
 +    You may obtain a copy of the License at
 +
 +        http://www.apache.org/licenses/LICENSE-2.0
 +
 +    Unless required by applicable law or agreed to in writing, software
 +    distributed under the License is distributed on an "AS IS" BASIS,
 +    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 +    See the License for the specific language governing permissions and
 +    limitations under the License.
 +*/
 +
 +/**
 + * @file    templates/chconf.h
 + * @brief   Configuration file template.
 + * @details A copy of this file must be placed in each project directory, it
 + *          contains the application specific kernel settings.
 + *
 + * @addtogroup config
 + * @details Kernel related settings and hooks.
 + * @{
 + */
 +
 +#ifndef _CHCONF_H_
 +#define _CHCONF_H_
 +
 +/*===========================================================================*/
 +/**
 + * @name Kernel parameters and options
 + * @{
 + */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   System tick frequency.
 + * @details Frequency of the system timer that drives the system ticks. This
 + *          setting also defines the system tick time unit.
 + */
 +#if !defined(CH_FREQUENCY) || defined(__DOXYGEN__)
 +#define CH_FREQUENCY                    1000
 +#endif
 +
 +/**
 + * @brief   Round robin interval.
 + * @details This constant is the number of system ticks allowed for the
 + *          threads before preemption occurs. Setting this value to zero
 + *          disables the preemption for threads with equal priority and the
 + *          round robin becomes cooperative. Note that higher priority
 + *          threads can still preempt, the kernel is always preemptive.
 + *
 + * @note    Disabling the round robin preemption makes the kernel more compact
 + *          and generally faster.
 + */
 +#if !defined(CH_TIME_QUANTUM) || defined(__DOXYGEN__)
 +#define CH_TIME_QUANTUM                 20
 +#endif
 +
 +/**
 + * @brief   Managed RAM size.
 + * @details Size of the RAM area to be managed by the OS. If set to zero
 + *          then the whole available RAM is used. The core memory is made
 + *          available to the heap allocator and/or can be used directly through
 + *          the simplified core memory allocator.
 + *
 + * @note    In order to let the OS manage the whole RAM the linker script must
 + *          provide the @p __heap_base__ and @p __heap_end__ symbols.
 + * @note    Requires @p CH_USE_MEMCORE.
 + */
 +#if !defined(CH_MEMCORE_SIZE) || defined(__DOXYGEN__)
 +#define CH_MEMCORE_SIZE                 0
 +#endif
 +
 +/**
 + * @brief   Idle thread automatic spawn suppression.
 + * @details When this option is activated the function @p chSysInit()
 + *          does not spawn the idle thread automatically. The application has
 + *          then the responsibility to do one of the following:
 + *          - Spawn a custom idle thread at priority @p IDLEPRIO.
 + *          - Change the main() thread priority to @p IDLEPRIO then enter
 + *            an endless loop. In this scenario the @p main() thread acts as
 + *            the idle thread.
 + *          .
 + * @note    Unless an idle thread is spawned the @p main() thread must not
 + *          enter a sleep state.
 + */
 +#if !defined(CH_NO_IDLE_THREAD) || defined(__DOXYGEN__)
 +#define CH_NO_IDLE_THREAD               FALSE
 +#endif
 +
 +/** @} */
 +
 +/*===========================================================================*/
 +/**
 + * @name Performance options
 + * @{
 + */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   OS optimization.
 + * @details If enabled then time efficient rather than space efficient code
 + *          is used when two possible implementations exist.
 + *
 + * @note    This is not related to the compiler optimization options.
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_OPTIMIZE_SPEED) || defined(__DOXYGEN__)
 +#define CH_OPTIMIZE_SPEED               TRUE
 +#endif
 +
 +/** @} */
 +
 +/*===========================================================================*/
 +/**
 + * @name Subsystem options
 + * @{
 + */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Threads registry APIs.
 + * @details If enabled then the registry APIs are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_REGISTRY) || defined(__DOXYGEN__)
 +#define CH_USE_REGISTRY                 TRUE
 +#endif
 +
 +/**
 + * @brief   Threads synchronization APIs.
 + * @details If enabled then the @p chThdWait() function is included in
 + *          the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_WAITEXIT) || defined(__DOXYGEN__)
 +#define CH_USE_WAITEXIT                 TRUE
 +#endif
 +
 +/**
 + * @brief   Semaphores APIs.
 + * @details If enabled then the Semaphores APIs are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_SEMAPHORES) || defined(__DOXYGEN__)
 +#define CH_USE_SEMAPHORES               TRUE
 +#endif
 +
 +/**
 + * @brief   Semaphores queuing mode.
 + * @details If enabled then the threads are enqueued on semaphores by
 + *          priority rather than in FIFO order.
 + *
 + * @note    The default is @p FALSE. Enable this if you have special requirements.
 + * @note    Requires @p CH_USE_SEMAPHORES.
 + */
 +#if !defined(CH_USE_SEMAPHORES_PRIORITY) || defined(__DOXYGEN__)
 +#define CH_USE_SEMAPHORES_PRIORITY      FALSE
 +#endif
 +
 +/**
 + * @brief   Atomic semaphore API.
 + * @details If enabled then the semaphores the @p chSemSignalWait() API
 + *          is included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_SEMAPHORES.
 + */
 +#if !defined(CH_USE_SEMSW) || defined(__DOXYGEN__)
 +#define CH_USE_SEMSW                    TRUE
 +#endif
 +
 +/**
 + * @brief   Mutexes APIs.
 + * @details If enabled then the mutexes APIs are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_MUTEXES) || defined(__DOXYGEN__)
 +#define CH_USE_MUTEXES                  TRUE
 +#endif
 +
 +/**
 + * @brief   Conditional Variables APIs.
 + * @details If enabled then the conditional variables APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_MUTEXES.
 + */
 +#if !defined(CH_USE_CONDVARS) || defined(__DOXYGEN__)
 +#define CH_USE_CONDVARS                 TRUE
 +#endif
 +
 +/**
 + * @brief   Conditional Variables APIs with timeout.
 + * @details If enabled then the conditional variables APIs with timeout
 + *          specification are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_CONDVARS.
 + */
 +#if !defined(CH_USE_CONDVARS_TIMEOUT) || defined(__DOXYGEN__)
 +#define CH_USE_CONDVARS_TIMEOUT         TRUE
 +#endif
 +
 +/**
 + * @brief   Events Flags APIs.
 + * @details If enabled then the event flags APIs are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_EVENTS) || defined(__DOXYGEN__)
 +#define CH_USE_EVENTS                   TRUE
 +#endif
 +
 +/**
 + * @brief   Events Flags APIs with timeout.
 + * @details If enabled then the events APIs with timeout specification
 + *          are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_EVENTS.
 + */
 +#if !defined(CH_USE_EVENTS_TIMEOUT) || defined(__DOXYGEN__)
 +#define CH_USE_EVENTS_TIMEOUT           TRUE
 +#endif
 +
 +/**
 + * @brief   Synchronous Messages APIs.
 + * @details If enabled then the synchronous messages APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_MESSAGES) || defined(__DOXYGEN__)
 +#define CH_USE_MESSAGES                 TRUE
 +#endif
 +
 +/**
 + * @brief   Synchronous Messages queuing mode.
 + * @details If enabled then messages are served by priority rather than in
 + *          FIFO order.
 + *
 + * @note    The default is @p FALSE. Enable this if you have special requirements.
 + * @note    Requires @p CH_USE_MESSAGES.
 + */
 +#if !defined(CH_USE_MESSAGES_PRIORITY) || defined(__DOXYGEN__)
 +#define CH_USE_MESSAGES_PRIORITY        FALSE
 +#endif
 +
 +/**
 + * @brief   Mailboxes APIs.
 + * @details If enabled then the asynchronous messages (mailboxes) APIs are
 + *          included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_SEMAPHORES.
 + */
 +#if !defined(CH_USE_MAILBOXES) || defined(__DOXYGEN__)
 +#define CH_USE_MAILBOXES                TRUE
 +#endif
 +
 +/**
 + * @brief   I/O Queues APIs.
 + * @details If enabled then the I/O queues APIs are included in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_QUEUES) || defined(__DOXYGEN__)
 +#define CH_USE_QUEUES                   TRUE
 +#endif
 +
 +/**
 + * @brief   Core Memory Manager APIs.
 + * @details If enabled then the core memory manager APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_MEMCORE) || defined(__DOXYGEN__)
 +#define CH_USE_MEMCORE                  TRUE
 +#endif
 +
 +/**
 + * @brief   Heap Allocator APIs.
 + * @details If enabled then the memory heap allocator APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_MEMCORE and either @p CH_USE_MUTEXES or
 + *          @p CH_USE_SEMAPHORES.
 + * @note    Mutexes are recommended.
 + */
 +#if !defined(CH_USE_HEAP) || defined(__DOXYGEN__)
 +#define CH_USE_HEAP                     TRUE
 +#endif
 +
 +/**
 + * @brief   C-runtime allocator.
 + * @details If enabled the the heap allocator APIs just wrap the C-runtime
 + *          @p malloc() and @p free() functions.
 + *
 + * @note    The default is @p FALSE.
 + * @note    Requires @p CH_USE_HEAP.
 + * @note    The C-runtime may or may not require @p CH_USE_MEMCORE, see the
 + *          appropriate documentation.
 + */
 +#if !defined(CH_USE_MALLOC_HEAP) || defined(__DOXYGEN__)
 +#define CH_USE_MALLOC_HEAP              FALSE
 +#endif
 +
 +/**
 + * @brief   Memory Pools Allocator APIs.
 + * @details If enabled then the memory pools allocator APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + */
 +#if !defined(CH_USE_MEMPOOLS) || defined(__DOXYGEN__)
 +#define CH_USE_MEMPOOLS                 TRUE
 +#endif
 +
 +/**
 + * @brief   Dynamic Threads APIs.
 + * @details If enabled then the dynamic threads creation APIs are included
 + *          in the kernel.
 + *
 + * @note    The default is @p TRUE.
 + * @note    Requires @p CH_USE_WAITEXIT.
 + * @note    Requires @p CH_USE_HEAP and/or @p CH_USE_MEMPOOLS.
 + */
 +#if !defined(CH_USE_DYNAMIC) || defined(__DOXYGEN__)
 +#define CH_USE_DYNAMIC                  TRUE
 +#endif
 +
 +/** @} */
 +
 +/*===========================================================================*/
 +/**
 + * @name Debug options
 + * @{
 + */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Debug option, system state check.
 + * @details If enabled the correct call protocol for system APIs is checked
 + *          at runtime.
 + *
 + * @note    The default is @p FALSE.
 + */
 +#if !defined(CH_DBG_SYSTEM_STATE_CHECK) || defined(__DOXYGEN__)
 +#define CH_DBG_SYSTEM_STATE_CHECK       TRUE
 +#endif
 +
 +/**
 + * @brief   Debug option, parameters checks.
 + * @details If enabled then the checks on the API functions input
 + *          parameters are activated.
 + *
 + * @note    The default is @p FALSE.
 + */
 +#if !defined(CH_DBG_ENABLE_CHECKS) || defined(__DOXYGEN__)
 +#define CH_DBG_ENABLE_CHECKS            TRUE
 +#endif
 +
 +/**
 + * @brief   Debug option, consistency checks.
 + * @details If enabled then all the assertions in the kernel code are
 + *          activated. This includes consistency checks inside the kernel,
 + *          runtime anomalies and port-defined checks.
 + *
 + * @note    The default is @p FALSE.
 + */
 +#if !defined(CH_DBG_ENABLE_ASSERTS) || defined(__DOXYGEN__)
 +#define CH_DBG_ENABLE_ASSERTS           TRUE
 +#endif
 +
 +/**
 + * @brief   Debug option, trace buffer.
 + * @details If enabled then the context switch circular trace buffer is
 + *          activated.
 + *
 + * @note    The default is @p FALSE.
 + */
 +#if !defined(CH_DBG_ENABLE_TRACE) || defined(__DOXYGEN__)
 +#define CH_DBG_ENABLE_TRACE             TRUE
 +#endif
 +
 +/**
 + * @brief   Debug option, stack checks.
 + * @details If enabled then a runtime stack check is performed.
 + *
 + * @note    The default is @p FALSE.
 + * @note    The stack check is performed in a architecture/port dependent way.
 + *          It may not be implemented or some ports.
 + * @note    The default failure mode is to halt the system with the global
 + *          @p panic_msg variable set to @p NULL.
 + */
 +#if !defined(CH_DBG_ENABLE_STACK_CHECK) || defined(__DOXYGEN__)
 +#define CH_DBG_ENABLE_STACK_CHECK       TRUE
 +#endif
 +
 +/**
 + * @brief   Debug option, stacks initialization.
 + * @details If enabled then the threads working area is filled with a byte
 + *          value when a thread is created. This can be useful for the
 + *          runtime measurement of the used stack.
 + *
 + * @note    The default is @p FALSE.
 + */
 +#if !defined(CH_DBG_FILL_THREADS) || defined(__DOXYGEN__)
 +#define CH_DBG_FILL_THREADS             TRUE
 +#endif
 +
 +/**
 + * @brief   Debug option, threads profiling.
 + * @details If enabled then a field is added to the @p Thread structure that
 + *          counts the system ticks occurred while executing the thread.
 + *
 + * @note    The default is @p TRUE.
 + * @note    This debug option is defaulted to TRUE because it is required by
 + *          some test cases into the test suite.
 + */
 +#if !defined(CH_DBG_THREADS_PROFILING) || defined(__DOXYGEN__)
 +#define CH_DBG_THREADS_PROFILING        TRUE
 +#endif
 +
 +/** @} */
 +
 +/*===========================================================================*/
 +/**
 + * @name Kernel hooks
 + * @{
 + */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Threads descriptor structure extension.
 + * @details User fields added to the end of the @p Thread structure.
 + */
 +#if !defined(THREAD_EXT_FIELDS) || defined(__DOXYGEN__)
 +#define THREAD_EXT_FIELDS                                                   \
 +  /* Add threads custom fields here.*/
 +#endif
 +
 +/**
 + * @brief   Threads initialization hook.
 + * @details User initialization code added to the @p chThdInit() API.
 + *
 + * @note    It is invoked from within @p chThdInit() and implicitly from all
 + *          the threads creation APIs.
 + */
 +#if !defined(THREAD_EXT_INIT_HOOK) || defined(__DOXYGEN__)
 +#define THREAD_EXT_INIT_HOOK(tp) {                                          \
 +  /* Add threads initialization code here.*/                                \
 +}
 +#endif
 +
 +/**
 + * @brief   Threads finalization hook.
 + * @details User finalization code added to the @p chThdExit() API.
 + *
 + * @note    It is inserted into lock zone.
 + * @note    It is also invoked when the threads simply return in order to
 + *          terminate.
 + */
 +#if !defined(THREAD_EXT_EXIT_HOOK) || defined(__DOXYGEN__)
 +#define THREAD_EXT_EXIT_HOOK(tp) {                                          \
 +  /* Add threads finalization code here.*/                                  \
 +}
 +#endif
 +
 +/**
 + * @brief   Context switch hook.
 + * @details This hook is invoked just before switching between threads.
 + */
 +#if !defined(THREAD_CONTEXT_SWITCH_HOOK) || defined(__DOXYGEN__)
 +#define THREAD_CONTEXT_SWITCH_HOOK(ntp, otp) {                              \
 +  /* System halt code here.*/                                               \
 +}
 +#endif
 +
 +/**
 + * @brief   Idle Loop hook.
 + * @details This hook is continuously invoked by the idle thread loop.
 + */
 +#if !defined(IDLE_LOOP_HOOK) || defined(__DOXYGEN__)
 +#define IDLE_LOOP_HOOK() {                                                  \
 +  /* Idle loop code here.*/                                                 \
 +}
 +#endif
 +
 +/**
 + * @brief   System tick event hook.
 + * @details This hook is invoked in the system tick handler immediately
 + *          after processing the virtual timers queue.
 + */
 +#if !defined(SYSTEM_TICK_EVENT_HOOK) || defined(__DOXYGEN__)
 +#define SYSTEM_TICK_EVENT_HOOK() {                                          \
 +  /* System tick event code here.*/                                         \
 +}
 +#endif
 +
 +/**
 + * @brief   System halt hook.
 + * @details This hook is invoked in case to a system halting error before
 + *          the system is halted.
 + */
 +#if !defined(SYSTEM_HALT_HOOK) || defined(__DOXYGEN__)
 +#define SYSTEM_HALT_HOOK() {                                                \
 +  /* System halt code here.*/                                               \
 +}
 +#endif
 +
 +/** @} */
 +
 +/*===========================================================================*/
 +/* Port-specific settings (override port settings defaulted in chcore.h).    */
 +/*===========================================================================*/
 +
 +#endif  /* _CHCONF_H_ */
 +
 +/** @} */
 diff --git a/testhal/STM32F4xx/USB_CDC/halconf.h b/testhal/STM32F4xx/USB_CDC/halconf.h new file mode 100644 index 000000000..cd76b0cfe --- /dev/null +++ b/testhal/STM32F4xx/USB_CDC/halconf.h @@ -0,0 +1,312 @@ +/*
 +    ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio
 +
 +    Licensed under the Apache License, Version 2.0 (the "License");
 +    you may not use this file except in compliance with the License.
 +    You may obtain a copy of the License at
 +
 +        http://www.apache.org/licenses/LICENSE-2.0
 +
 +    Unless required by applicable law or agreed to in writing, software
 +    distributed under the License is distributed on an "AS IS" BASIS,
 +    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 +    See the License for the specific language governing permissions and
 +    limitations under the License.
 +*/
 +
 +/**
 + * @file    templates/halconf.h
 + * @brief   HAL configuration header.
 + * @details HAL configuration file, this file allows to enable or disable the
 + *          various device drivers from your application. You may also use
 + *          this file in order to override the device drivers default settings.
 + *
 + * @addtogroup HAL_CONF
 + * @{
 + */
 +
 +#ifndef _HALCONF_H_
 +#define _HALCONF_H_
 +
 +#include "mcuconf.h"
 +
 +/**
 + * @brief   Enables the TM subsystem.
 + */
 +#if !defined(HAL_USE_TM) || defined(__DOXYGEN__)
 +#define HAL_USE_TM                  TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the PAL subsystem.
 + */
 +#if !defined(HAL_USE_PAL) || defined(__DOXYGEN__)
 +#define HAL_USE_PAL                 TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the ADC subsystem.
 + */
 +#if !defined(HAL_USE_ADC) || defined(__DOXYGEN__)
 +#define HAL_USE_ADC                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the CAN subsystem.
 + */
 +#if !defined(HAL_USE_CAN) || defined(__DOXYGEN__)
 +#define HAL_USE_CAN                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the EXT subsystem.
 + */
 +#if !defined(HAL_USE_EXT) || defined(__DOXYGEN__)
 +#define HAL_USE_EXT                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the GPT subsystem.
 + */
 +#if !defined(HAL_USE_GPT) || defined(__DOXYGEN__)
 +#define HAL_USE_GPT                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the I2C subsystem.
 + */
 +#if !defined(HAL_USE_I2C) || defined(__DOXYGEN__)
 +#define HAL_USE_I2C                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the ICU subsystem.
 + */
 +#if !defined(HAL_USE_ICU) || defined(__DOXYGEN__)
 +#define HAL_USE_ICU                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the MAC subsystem.
 + */
 +#if !defined(HAL_USE_MAC) || defined(__DOXYGEN__)
 +#define HAL_USE_MAC                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the MMC_SPI subsystem.
 + */
 +#if !defined(HAL_USE_MMC_SPI) || defined(__DOXYGEN__)
 +#define HAL_USE_MMC_SPI             FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the PWM subsystem.
 + */
 +#if !defined(HAL_USE_PWM) || defined(__DOXYGEN__)
 +#define HAL_USE_PWM                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the RTC subsystem.
 + */
 +#if !defined(HAL_USE_RTC) || defined(__DOXYGEN__)
 +#define HAL_USE_RTC                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the SDC subsystem.
 + */
 +#if !defined(HAL_USE_SDC) || defined(__DOXYGEN__)
 +#define HAL_USE_SDC                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the SERIAL subsystem.
 + */
 +#if !defined(HAL_USE_SERIAL) || defined(__DOXYGEN__)
 +#define HAL_USE_SERIAL              FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the SERIAL over USB subsystem.
 + */
 +#if !defined(HAL_USE_SERIAL_USB) || defined(__DOXYGEN__)
 +#define HAL_USE_SERIAL_USB          TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the SPI subsystem.
 + */
 +#if !defined(HAL_USE_SPI) || defined(__DOXYGEN__)
 +#define HAL_USE_SPI                 FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the UART subsystem.
 + */
 +#if !defined(HAL_USE_UART) || defined(__DOXYGEN__)
 +#define HAL_USE_UART                FALSE
 +#endif
 +
 +/**
 + * @brief   Enables the USB subsystem.
 + */
 +#if !defined(HAL_USE_USB) || defined(__DOXYGEN__)
 +#define HAL_USE_USB                 TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* ADC driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Enables synchronous APIs.
 + * @note    Disabling this option saves both code and data space.
 + */
 +#if !defined(ADC_USE_WAIT) || defined(__DOXYGEN__)
 +#define ADC_USE_WAIT                TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the @p adcAcquireBus() and @p adcReleaseBus() APIs.
 + * @note    Disabling this option saves both code and data space.
 + */
 +#if !defined(ADC_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
 +#define ADC_USE_MUTUAL_EXCLUSION    TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* CAN driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Sleep mode related APIs inclusion switch.
 + */
 +#if !defined(CAN_USE_SLEEP_MODE) || defined(__DOXYGEN__)
 +#define CAN_USE_SLEEP_MODE          TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* I2C driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Enables the mutual exclusion APIs on the I2C bus.
 + */
 +#if !defined(I2C_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
 +#define I2C_USE_MUTUAL_EXCLUSION    TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* MAC driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Enables an event sources for incoming packets.
 + */
 +#if !defined(MAC_USE_ZERO_COPY) || defined(__DOXYGEN__)
 +#define MAC_USE_ZERO_COPY           FALSE
 +#endif
 +
 +/**
 + * @brief   Enables an event sources for incoming packets.
 + */
 +#if !defined(MAC_USE_EVENTS) || defined(__DOXYGEN__)
 +#define MAC_USE_EVENTS              TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* MMC_SPI driver related settings.                                          */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Delays insertions.
 + * @details If enabled this options inserts delays into the MMC waiting
 + *          routines releasing some extra CPU time for the threads with
 + *          lower priority, this may slow down the driver a bit however.
 + *          This option is recommended also if the SPI driver does not
 + *          use a DMA channel and heavily loads the CPU.
 + */
 +#if !defined(MMC_NICE_WAITING) || defined(__DOXYGEN__)
 +#define MMC_NICE_WAITING            TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* SDC driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Number of initialization attempts before rejecting the card.
 + * @note    Attempts are performed at 10mS intervals.
 + */
 +#if !defined(SDC_INIT_RETRY) || defined(__DOXYGEN__)
 +#define SDC_INIT_RETRY              100
 +#endif
 +
 +/**
 + * @brief   Include support for MMC cards.
 + * @note    MMC support is not yet implemented so this option must be kept
 + *          at @p FALSE.
 + */
 +#if !defined(SDC_MMC_SUPPORT) || defined(__DOXYGEN__)
 +#define SDC_MMC_SUPPORT             FALSE
 +#endif
 +
 +/**
 + * @brief   Delays insertions.
 + * @details If enabled this options inserts delays into the MMC waiting
 + *          routines releasing some extra CPU time for the threads with
 + *          lower priority, this may slow down the driver a bit however.
 + */
 +#if !defined(SDC_NICE_WAITING) || defined(__DOXYGEN__)
 +#define SDC_NICE_WAITING            TRUE
 +#endif
 +
 +/*===========================================================================*/
 +/* SERIAL driver related settings.                                           */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Default bit rate.
 + * @details Configuration parameter, this is the baud rate selected for the
 + *          default configuration.
 + */
 +#if !defined(SERIAL_DEFAULT_BITRATE) || defined(__DOXYGEN__)
 +#define SERIAL_DEFAULT_BITRATE      38400
 +#endif
 +
 +/**
 + * @brief   Serial buffers size.
 + * @details Configuration parameter, you can change the depth of the queue
 + *          buffers depending on the requirements of your application.
 + * @note    The default is 64 bytes for both the transmission and receive
 + *          buffers.
 + */
 +#if !defined(SERIAL_BUFFERS_SIZE) || defined(__DOXYGEN__)
 +#define SERIAL_BUFFERS_SIZE         16
 +#endif
 +
 +/*===========================================================================*/
 +/* SPI driver related settings.                                              */
 +/*===========================================================================*/
 +
 +/**
 + * @brief   Enables synchronous APIs.
 + * @note    Disabling this option saves both code and data space.
 + */
 +#if !defined(SPI_USE_WAIT) || defined(__DOXYGEN__)
 +#define SPI_USE_WAIT                TRUE
 +#endif
 +
 +/**
 + * @brief   Enables the @p spiAcquireBus() and @p spiReleaseBus() APIs.
 + * @note    Disabling this option saves both code and data space.
 + */
 +#if !defined(SPI_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
 +#define SPI_USE_MUTUAL_EXCLUSION    TRUE
 +#endif
 +
 +#endif /* _HALCONF_H_ */
 +
 +/** @} */
 diff --git a/testhal/STM32F4xx/USB_CDC/main.c b/testhal/STM32F4xx/USB_CDC/main.c new file mode 100644 index 000000000..8bdf3c0ba --- /dev/null +++ b/testhal/STM32F4xx/USB_CDC/main.c @@ -0,0 +1,522 @@ +/*
 +    ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio
 +
 +    Licensed under the Apache License, Version 2.0 (the "License");
 +    you may not use this file except in compliance with the License.
 +    You may obtain a copy of the License at
 +
 +        http://www.apache.org/licenses/LICENSE-2.0
 +
 +    Unless required by applicable law or agreed to in writing, software
 +    distributed under the License is distributed on an "AS IS" BASIS,
 +    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 +    See the License for the specific language governing permissions and
 +    limitations under the License.
 +*/
 +
 +#include <stdio.h>
 +#include <string.h>
 +
 +#include "ch.h"
 +#include "hal.h"
 +#include "test.h"
 +
 +#include "shell.h"
 +#include "chprintf.h"
 +
 +/*===========================================================================*/
 +/* USB related stuff.                                                        */
 +/*===========================================================================*/
 +
 +/*
 + * Endpoints to be used for USBD2.
 + */
 +#define USBD2_DATA_REQUEST_EP           1
 +#define USBD2_DATA_AVAILABLE_EP         1
 +#define USBD2_INTERRUPT_REQUEST_EP      2
 +
 +/*
 + * Serial over USB Driver structure.
 + */
 +static SerialUSBDriver SDU2;
 +
 +/*
 + * USB Device Descriptor.
 + */
 +static const uint8_t vcom_device_descriptor_data[18] = {
 +  USB_DESC_DEVICE       (0x0110,        /* bcdUSB (1.1).                    */
 +                         0x02,          /* bDeviceClass (CDC).              */
 +                         0x00,          /* bDeviceSubClass.                 */
 +                         0x00,          /* bDeviceProtocol.                 */
 +                         0x40,          /* bMaxPacketSize.                  */
 +                         0x0483,        /* idVendor (ST).                   */
 +                         0x5740,        /* idProduct.                       */
 +                         0x0200,        /* bcdDevice.                       */
 +                         1,             /* iManufacturer.                   */
 +                         2,             /* iProduct.                        */
 +                         3,             /* iSerialNumber.                   */
 +                         1)             /* bNumConfigurations.              */
 +};
 +
 +/*
 + * Device Descriptor wrapper.
 + */
 +static const USBDescriptor vcom_device_descriptor = {
 +  sizeof vcom_device_descriptor_data,
 +  vcom_device_descriptor_data
 +};
 +
 +/* Configuration Descriptor tree for a CDC.*/
 +static const uint8_t vcom_configuration_descriptor_data[67] = {
 +  /* Configuration Descriptor.*/
 +  USB_DESC_CONFIGURATION(67,            /* wTotalLength.                    */
 +                         0x02,          /* bNumInterfaces.                  */
 +                         0x01,          /* bConfigurationValue.             */
 +                         0,             /* iConfiguration.                  */
 +                         0xC0,          /* bmAttributes (self powered).     */
 +                         50),           /* bMaxPower (100mA).               */
 +  /* Interface Descriptor.*/
 +  USB_DESC_INTERFACE    (0x00,          /* bInterfaceNumber.                */
 +                         0x00,          /* bAlternateSetting.               */
 +                         0x01,          /* bNumEndpoints.                   */
 +                         0x02,          /* bInterfaceClass (Communications
 +                                           Interface Class, CDC section
 +                                           4.2).                            */
 +                         0x02,          /* bInterfaceSubClass (Abstract
 +                                         Control Model, CDC section 4.3).   */
 +                         0x01,          /* bInterfaceProtocol (AT commands,
 +                                           CDC section 4.4).                */
 +                         0),            /* iInterface.                      */
 +  /* Header Functional Descriptor (CDC section 5.2.3).*/
 +  USB_DESC_BYTE         (5),            /* bLength.                         */
 +  USB_DESC_BYTE         (0x24),         /* bDescriptorType (CS_INTERFACE).  */
 +  USB_DESC_BYTE         (0x00),         /* bDescriptorSubtype (Header
 +                                           Functional Descriptor.           */
 +  USB_DESC_BCD          (0x0110),       /* bcdCDC.                          */
 +  /* Call Management Functional Descriptor. */
 +  USB_DESC_BYTE         (5),            /* bFunctionLength.                 */
 +  USB_DESC_BYTE         (0x24),         /* bDescriptorType (CS_INTERFACE).  */
 +  USB_DESC_BYTE         (0x01),         /* bDescriptorSubtype (Call Management
 +                                           Functional Descriptor).          */
 +  USB_DESC_BYTE         (0x00),         /* bmCapabilities (D0+D1).          */
 +  USB_DESC_BYTE         (0x01),         /* bDataInterface.                  */
 +  /* ACM Functional Descriptor.*/
 +  USB_DESC_BYTE         (4),            /* bFunctionLength.                 */
 +  USB_DESC_BYTE         (0x24),         /* bDescriptorType (CS_INTERFACE).  */
 +  USB_DESC_BYTE         (0x02),         /* bDescriptorSubtype (Abstract
 +                                           Control Management Descriptor).  */
 +  USB_DESC_BYTE         (0x02),         /* bmCapabilities.                  */
 +  /* Union Functional Descriptor.*/
 +  USB_DESC_BYTE         (5),            /* bFunctionLength.                 */
 +  USB_DESC_BYTE         (0x24),         /* bDescriptorType (CS_INTERFACE).  */
 +  USB_DESC_BYTE         (0x06),         /* bDescriptorSubtype (Union
 +                                           Functional Descriptor).          */
 +  USB_DESC_BYTE         (0x00),         /* bMasterInterface (Communication
 +                                           Class Interface).                */
 +  USB_DESC_BYTE         (0x01),         /* bSlaveInterface0 (Data Class
 +                                           Interface).                      */
 +  /* Endpoint 2 Descriptor.*/
 +  USB_DESC_ENDPOINT     (USBD2_INTERRUPT_REQUEST_EP|0x80,
 +                         0x03,          /* bmAttributes (Interrupt).        */
 +                         0x0008,        /* wMaxPacketSize.                  */
 +                         0xFF),         /* bInterval.                       */
 +  /* Interface Descriptor.*/
 +  USB_DESC_INTERFACE    (0x01,          /* bInterfaceNumber.                */
 +                         0x00,          /* bAlternateSetting.               */
 +                         0x02,          /* bNumEndpoints.                   */
 +                         0x0A,          /* bInterfaceClass (Data Class
 +                                           Interface, CDC section 4.5).     */
 +                         0x00,          /* bInterfaceSubClass (CDC section
 +                                           4.6).                            */
 +                         0x00,          /* bInterfaceProtocol (CDC section
 +                                           4.7).                            */
 +                         0x00),         /* iInterface.                      */
 +  /* Endpoint 3 Descriptor.*/
 +  USB_DESC_ENDPOINT     (USBD2_DATA_AVAILABLE_EP,       /* bEndpointAddress.*/
 +                         0x02,          /* bmAttributes (Bulk).             */
 +                         0x0040,        /* wMaxPacketSize.                  */
 +                         0x00),         /* bInterval.                       */
 +  /* Endpoint 1 Descriptor.*/
 +  USB_DESC_ENDPOINT     (USBD2_DATA_REQUEST_EP|0x80,    /* bEndpointAddress.*/
 +                         0x02,          /* bmAttributes (Bulk).             */
 +                         0x0040,        /* wMaxPacketSize.                  */
 +                         0x00)          /* bInterval.                       */
 +};
 +
 +/*
 + * Configuration Descriptor wrapper.
 + */
 +static const USBDescriptor vcom_configuration_descriptor = {
 +  sizeof vcom_configuration_descriptor_data,
 +  vcom_configuration_descriptor_data
 +};
 +
 +/*
 + * U.S. English language identifier.
 + */
 +static const uint8_t vcom_string0[] = {
 +  USB_DESC_BYTE(4),                     /* bLength.                         */
 +  USB_DESC_BYTE(USB_DESCRIPTOR_STRING), /* bDescriptorType.                 */
 +  USB_DESC_WORD(0x0409)                 /* wLANGID (U.S. English).          */
 +};
 +
 +/*
 + * Vendor string.
 + */
 +static const uint8_t vcom_string1[] = {
 +  USB_DESC_BYTE(38),                    /* bLength.                         */
 +  USB_DESC_BYTE(USB_DESCRIPTOR_STRING), /* bDescriptorType.                 */
 +  'S', 0, 'T', 0, 'M', 0, 'i', 0, 'c', 0, 'r', 0, 'o', 0, 'e', 0,
 +  'l', 0, 'e', 0, 'c', 0, 't', 0, 'r', 0, 'o', 0, 'n', 0, 'i', 0,
 +  'c', 0, 's', 0
 +};
 +
 +/*
 + * Device Description string.
 + */
 +static const uint8_t vcom_string2[] = {
 +  USB_DESC_BYTE(56),                    /* bLength.                         */
 +  USB_DESC_BYTE(USB_DESCRIPTOR_STRING), /* bDescriptorType.                 */
 +  'C', 0, 'h', 0, 'i', 0, 'b', 0, 'i', 0, 'O', 0, 'S', 0, '/', 0,
 +  'R', 0, 'T', 0, ' ', 0, 'V', 0, 'i', 0, 'r', 0, 't', 0, 'u', 0,
 +  'a', 0, 'l', 0, ' ', 0, 'C', 0, 'O', 0, 'M', 0, ' ', 0, 'P', 0,
 +  'o', 0, 'r', 0, 't', 0
 +};
 +
 +/*
 + * Serial Number string.
 + */
 +static const uint8_t vcom_string3[] = {
 +  USB_DESC_BYTE(8),                     /* bLength.                         */
 +  USB_DESC_BYTE(USB_DESCRIPTOR_STRING), /* bDescriptorType.                 */
 +  '0' + CH_KERNEL_MAJOR, 0,
 +  '0' + CH_KERNEL_MINOR, 0,
 +  '0' + CH_KERNEL_PATCH, 0
 +};
 +
 +/*
 + * Strings wrappers array.
 + */
 +static const USBDescriptor vcom_strings[] = {
 +  {sizeof vcom_string0, vcom_string0},
 +  {sizeof vcom_string1, vcom_string1},
 +  {sizeof vcom_string2, vcom_string2},
 +  {sizeof vcom_string3, vcom_string3}
 +};
 +
 +/*
 + * Handles the GET_DESCRIPTOR callback. All required descriptors must be
 + * handled here.
 + */
 +static const USBDescriptor *get_descriptor(USBDriver *usbp,
 +                                           uint8_t dtype,
 +                                           uint8_t dindex,
 +                                           uint16_t lang) {
 +
 +  (void)usbp;
 +  (void)lang;
 +  switch (dtype) {
 +  case USB_DESCRIPTOR_DEVICE:
 +    return &vcom_device_descriptor;
 +  case USB_DESCRIPTOR_CONFIGURATION:
 +    return &vcom_configuration_descriptor;
 +  case USB_DESCRIPTOR_STRING:
 +    if (dindex < 4)
 +      return &vcom_strings[dindex];
 +  }
 +  return NULL;
 +}
 +
 +/**
 + * @brief   IN EP1 state.
 + */
 +static USBInEndpointState ep1instate;
 +
 +/**
 + * @brief   OUT EP1 state.
 + */
 +static USBOutEndpointState ep1outstate;
 +
 +/**
 + * @brief   EP1 initialization structure (both IN and OUT).
 + */
 +static const USBEndpointConfig ep1config = {
 +  USB_EP_MODE_TYPE_BULK,
 +  NULL,
 +  sduDataTransmitted,
 +  sduDataReceived,
 +  0x0040,
 +  0x0040,
 +  &ep1instate,
 +  &ep1outstate,
 +  2,
 +  NULL
 +};
 +
 +/**
 + * @brief   IN EP2 state.
 + */
 +static USBInEndpointState ep2instate;
 +
 +/**
 + * @brief   EP2 initialization structure (IN only).
 + */
 +static const USBEndpointConfig ep2config = {
 +  USB_EP_MODE_TYPE_INTR,
 +  NULL,
 +  sduInterruptTransmitted,
 +  NULL,
 +  0x0010,
 +  0x0000,
 +  &ep2instate,
 +  NULL,
 +  1,
 +  NULL
 +};
 +
 +/*
 + * Handles the USB driver global events.
 + */
 +static void usb_event(USBDriver *usbp, usbevent_t event) {
 +
 +  switch (event) {
 +  case USB_EVENT_RESET:
 +    return;
 +  case USB_EVENT_ADDRESS:
 +    return;
 +  case USB_EVENT_CONFIGURED:
 +    chSysLockFromIsr();
 +
 +    /* Enables the endpoints specified into the configuration.
 +       Note, this callback is invoked from an ISR so I-Class functions
 +       must be used.*/
 +    usbInitEndpointI(usbp, USBD2_DATA_REQUEST_EP, &ep1config);
 +    usbInitEndpointI(usbp, USBD2_INTERRUPT_REQUEST_EP, &ep2config);
 +
 +    /* Resetting the state of the CDC subsystem.*/
 +    sduConfigureHookI(&SDU2);
 +
 +    chSysUnlockFromIsr();
 +    return;
 +  case USB_EVENT_SUSPEND:
 +    return;
 +  case USB_EVENT_WAKEUP:
 +    return;
 +  case USB_EVENT_STALLED:
 +    return;
 +  }
 +  return;
 +}
 +
 +/*
 + * USB driver configuration.
 + */
 +static const USBConfig usbcfg = {
 +  usb_event,
 +  get_descriptor,
 +  sduRequestsHook,
 +  NULL
 +};
 +
 +/*
 + * Serial over USB driver configuration.
 + */
 +static const SerialUSBConfig serusbcfg = {
 +  &USBD2,
 +  USBD2_DATA_REQUEST_EP,
 +  USBD2_DATA_AVAILABLE_EP,
 +  USBD2_INTERRUPT_REQUEST_EP
 +};
 +
 +/*===========================================================================*/
 +/* Command line related.                                                     */
 +/*===========================================================================*/
 +
 +#define SHELL_WA_SIZE   THD_WA_SIZE(2048)
 +#define TEST_WA_SIZE    THD_WA_SIZE(256)
 +
 +static void cmd_mem(BaseSequentialStream *chp, int argc, char *argv[]) {
 +  size_t n, size;
 +
 +  (void)argv;
 +  if (argc > 0) {
 +    chprintf(chp, "Usage: mem\r\n");
 +    return;
 +  }
 +  n = chHeapStatus(NULL, &size);
 +  chprintf(chp, "core free memory : %u bytes\r\n", chCoreStatus());
 +  chprintf(chp, "heap fragments   : %u\r\n", n);
 +  chprintf(chp, "heap free total  : %u bytes\r\n", size);
 +}
 +
 +static void cmd_threads(BaseSequentialStream *chp, int argc, char *argv[]) {
 +  static const char *states[] = {THD_STATE_NAMES};
 +  Thread *tp;
 +
 +  (void)argv;
 +  if (argc > 0) {
 +    chprintf(chp, "Usage: threads\r\n");
 +    return;
 +  }
 +  chprintf(chp, "    addr    stack prio refs     state time\r\n");
 +  tp = chRegFirstThread();
 +  do {
 +    chprintf(chp, "%.8lx %.8lx %4lu %4lu %9s %lu\r\n",
 +            (uint32_t)tp, (uint32_t)tp->p_ctx.r13,
 +            (uint32_t)tp->p_prio, (uint32_t)(tp->p_refs - 1),
 +            states[tp->p_state], (uint32_t)tp->p_time);
 +    tp = chRegNextThread(tp);
 +  } while (tp != NULL);
 +}
 +
 +static void cmd_test(BaseSequentialStream *chp, int argc, char *argv[]) {
 +  Thread *tp;
 +
 +  (void)argv;
 +  if (argc > 0) {
 +    chprintf(chp, "Usage: test\r\n");
 +    return;
 +  }
 +  tp = chThdCreateFromHeap(NULL, TEST_WA_SIZE, chThdGetPriority(),
 +                           TestThread, chp);
 +  if (tp == NULL) {
 +    chprintf(chp, "out of memory\r\n");
 +    return;
 +  }
 +  chThdWait(tp);
 +}
 +
 +static void cmd_write(BaseSequentialStream *chp, int argc, char *argv[]) {
 +  static uint8_t buf[] =
 +      "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"
 +      "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"
 +      "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"
 +      "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"
 +      "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"
 +      "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"
 +      "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"
 +      "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"
 +      "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"
 +      "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"
 +      "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"
 +      "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"
 +      "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"
 +      "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"
 +      "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"
 +      "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef";
 +
 +  (void)argv;
 +  if (argc > 0) {
 +    chprintf(chp, "Usage: write\r\n");
 +    return;
 +  }
 +
 +  while (chnGetTimeout((BaseChannel *)chp, TIME_IMMEDIATE) == Q_TIMEOUT) {
 +    chSequentialStreamWrite(&SDU2, buf, sizeof buf - 1);
 +  }
 +  chprintf(chp, "\r\n\nstopped\r\n");
 +}
 +
 +static const ShellCommand commands[] = {
 +  {"mem", cmd_mem},
 +  {"threads", cmd_threads},
 +  {"test", cmd_test},
 +  {"write", cmd_write},
 +  {NULL, NULL}
 +};
 +
 +static const ShellConfig shell_cfg1 = {
 +  (BaseSequentialStream *)&SDU2,
 +  commands
 +};
 +
 +/*===========================================================================*/
 +/* Generic code.                                                             */
 +/*===========================================================================*/
 +
 +/*
 + * Red LED blinker thread, times are in milliseconds.
 + */
 +static WORKING_AREA(waThread1, 128);
 +static msg_t Thread1(void *arg) {
 +
 +  (void)arg;
 +  chRegSetThreadName("blinker");
 +  while (TRUE) {
 +    systime_t time;
 +
 +    time = serusbcfg.usbp->state == USB_ACTIVE ? 250 : 500;
 +    palClearPad(GPIOC, GPIOC_LED);
 +    chThdSleepMilliseconds(time);
 +    palSetPad(GPIOC, GPIOC_LED);
 +    chThdSleepMilliseconds(time);
 +  }
 +}
 +
 +/*
 + * Application entry point.
 + */
 +int main(void) {
 +  Thread *shelltp = NULL;
 +
 +  /*
 +   * System initializations.
 +   * - HAL initialization, this also initializes the configured device drivers
 +   *   and performs the board-specific initializations.
 +   * - Kernel initialization, the main() function becomes a thread and the
 +   *   RTOS is active.
 +   */
 +  halInit();
 +  chSysInit();
 +
 +  /*
 +   * Initializes a serial-over-USB CDC driver.
 +   */
 +  sduObjectInit(&SDU2);
 +  sduStart(&SDU2, &serusbcfg);
 +
 +  /*
 +   * Activates the USB driver and then the USB bus pull-up on D+.
 +   * Note, a delay is inserted in order to not have to disconnect the cable
 +   * after a reset.
 +   */
 +  usbDisconnectBus(serusbcfg.usbp);
 +  chThdSleepMilliseconds(1500);
 +  usbStart(serusbcfg.usbp, &usbcfg);
 +  usbConnectBus(serusbcfg.usbp);
 +
 +  /*
 +   * Stopping and restarting the USB in order to test the stop procedure. The
 +   * following lines are not usually required.
 +   */
 +  chThdSleepMilliseconds(3000);
 +  usbDisconnectBus(serusbcfg.usbp);
 +  usbStop(serusbcfg.usbp);
 +  chThdSleepMilliseconds(1500);
 +  usbStart(serusbcfg.usbp, &usbcfg);
 +  usbConnectBus(serusbcfg.usbp);
 +
 +  /*
 +   * Shell manager initialization.
 +   */
 +  shellInit();
 +
 +  /*
 +   * Creates the blinker thread.
 +   */
 +  chThdCreateStatic(waThread1, sizeof(waThread1), NORMALPRIO, Thread1, NULL);
 +
 +  /*
 +   * Normal main() thread activity, in this demo it does nothing except
 +   * sleeping in a loop and check the button state.
 +   */
 +  while (TRUE) {
 +    if (!shelltp && (SDU2.config->usbp->state == USB_ACTIVE))
 +      shelltp = shellCreate(&shell_cfg1, SHELL_WA_SIZE, NORMALPRIO);
 +    else if (chThdTerminated(shelltp)) {
 +      chThdRelease(shelltp);    /* Recovers memory of the previous shell.   */
 +      shelltp = NULL;           /* Triggers spawning of a new shell.        */
 +    }
 +    chThdSleepMilliseconds(1000);
 +  }
 +}
 diff --git a/testhal/STM32F4xx/USB_CDC/mcuconf.h b/testhal/STM32F4xx/USB_CDC/mcuconf.h new file mode 100644 index 000000000..34138a27d --- /dev/null +++ b/testhal/STM32F4xx/USB_CDC/mcuconf.h @@ -0,0 +1,278 @@ +/*
 +    ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio
 +
 +    Licensed under the Apache License, Version 2.0 (the "License");
 +    you may not use this file except in compliance with the License.
 +    You may obtain a copy of the License at
 +
 +        http://www.apache.org/licenses/LICENSE-2.0
 +
 +    Unless required by applicable law or agreed to in writing, software
 +    distributed under the License is distributed on an "AS IS" BASIS,
 +    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 +    See the License for the specific language governing permissions and
 +    limitations under the License.
 +*/
 +
 +/*
 + * STM32F4xx drivers configuration.
 + * The following settings override the default settings present in
 + * the various device driver implementation headers.
 + * Note that the settings for each driver only have effect if the whole
 + * driver is enabled in halconf.h.
 + *
 + * IRQ priorities:
 + * 15...0       Lowest...Highest.
 + *
 + * DMA priorities:
 + * 0...3        Lowest...Highest.
 + */
 +
 +#define STM32F4xx_MCUCONF
 +
 +/*
 + * HAL driver system settings.
 + */
 +#define STM32_NO_INIT                       FALSE
 +#define STM32_HSI_ENABLED                   TRUE
 +#define STM32_LSI_ENABLED                   TRUE
 +#define STM32_HSE_ENABLED                   TRUE
 +#define STM32_LSE_ENABLED                   FALSE
 +#define STM32_CLOCK48_REQUIRED              TRUE
 +#define STM32_SW                            STM32_SW_PLL
 +#define STM32_PLLSRC                        STM32_PLLSRC_HSE
 +#define STM32_PLLM_VALUE                    12
 +#define STM32_PLLN_VALUE                    336
 +#define STM32_PLLP_VALUE                    2
 +#define STM32_PLLQ_VALUE                    7
 +#define STM32_HPRE                          STM32_HPRE_DIV1
 +#define STM32_PPRE1                         STM32_PPRE1_DIV4
 +#define STM32_PPRE2                         STM32_PPRE2_DIV2
 +#define STM32_RTCSEL                        STM32_RTCSEL_LSI
 +#define STM32_RTCPRE_VALUE                  8
 +#define STM32_MCO1SEL                       STM32_MCO1SEL_HSI
 +#define STM32_MCO1PRE                       STM32_MCO1PRE_DIV1
 +#define STM32_MCO2SEL                       STM32_MCO2SEL_SYSCLK
 +#define STM32_MCO2PRE                       STM32_MCO2PRE_DIV5
 +#define STM32_I2SSRC                        STM32_I2SSRC_CKIN
 +#define STM32_PLLI2SN_VALUE                 192
 +#define STM32_PLLI2SR_VALUE                 5
 +#define STM32_VOS                           STM32_VOS_HIGH
 +#define STM32_PVD_ENABLE                    FALSE
 +#define STM32_PLS                           STM32_PLS_LEV0
 +
 +/*
 + * ADC driver system settings.
 + */
 +#define STM32_ADC_ADCPRE                    ADC_CCR_ADCPRE_DIV4
 +#define STM32_ADC_USE_ADC1                  FALSE
 +#define STM32_ADC_USE_ADC2                  FALSE
 +#define STM32_ADC_USE_ADC3                  FALSE
 +#define STM32_ADC_ADC1_DMA_STREAM           STM32_DMA_STREAM_ID(2, 4)
 +#define STM32_ADC_ADC2_DMA_STREAM           STM32_DMA_STREAM_ID(2, 2)
 +#define STM32_ADC_ADC3_DMA_STREAM           STM32_DMA_STREAM_ID(2, 1)
 +#define STM32_ADC_ADC1_DMA_PRIORITY         2
 +#define STM32_ADC_ADC2_DMA_PRIORITY         2
 +#define STM32_ADC_ADC3_DMA_PRIORITY         2
 +#define STM32_ADC_IRQ_PRIORITY              6
 +#define STM32_ADC_ADC1_DMA_IRQ_PRIORITY     6
 +#define STM32_ADC_ADC2_DMA_IRQ_PRIORITY     6
 +#define STM32_ADC_ADC3_DMA_IRQ_PRIORITY     6
 +
 +/*
 + * CAN driver system settings.
 + */
 +#define STM32_CAN_USE_CAN1                  FALSE
 +#define STM32_CAN_USE_CAN2                  FALSE
 +#define STM32_CAN_CAN1_IRQ_PRIORITY         11
 +#define STM32_CAN_CAN2_IRQ_PRIORITY         11
 +
 +/*
 + * EXT driver system settings.
 + */
 +#define STM32_EXT_EXTI0_IRQ_PRIORITY        6
 +#define STM32_EXT_EXTI1_IRQ_PRIORITY        6
 +#define STM32_EXT_EXTI2_IRQ_PRIORITY        6
 +#define STM32_EXT_EXTI3_IRQ_PRIORITY        6
 +#define STM32_EXT_EXTI4_IRQ_PRIORITY        6
 +#define STM32_EXT_EXTI5_9_IRQ_PRIORITY      6
 +#define STM32_EXT_EXTI10_15_IRQ_PRIORITY    6
 +#define STM32_EXT_EXTI16_IRQ_PRIORITY       6
 +#define STM32_EXT_EXTI17_IRQ_PRIORITY       15
 +#define STM32_EXT_EXTI18_IRQ_PRIORITY       6
 +#define STM32_EXT_EXTI19_IRQ_PRIORITY       6
 +#define STM32_EXT_EXTI20_IRQ_PRIORITY       6
 +#define STM32_EXT_EXTI21_IRQ_PRIORITY       15
 +#define STM32_EXT_EXTI22_IRQ_PRIORITY       15
 +
 +/*
 + * GPT driver system settings.
 + */
 +#define STM32_GPT_USE_TIM1                  FALSE
 +#define STM32_GPT_USE_TIM2                  FALSE
 +#define STM32_GPT_USE_TIM3                  FALSE
 +#define STM32_GPT_USE_TIM4                  FALSE
 +#define STM32_GPT_USE_TIM5                  FALSE
 +#define STM32_GPT_USE_TIM6                  FALSE
 +#define STM32_GPT_USE_TIM7                  FALSE
 +#define STM32_GPT_USE_TIM8                  FALSE
 +#define STM32_GPT_USE_TIM9                  FALSE
 +#define STM32_GPT_USE_TIM11                 FALSE
 +#define STM32_GPT_USE_TIM12                 FALSE
 +#define STM32_GPT_USE_TIM14                 FALSE
 +#define STM32_GPT_TIM1_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM2_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM3_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM4_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM5_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM6_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM7_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM8_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM9_IRQ_PRIORITY         7
 +#define STM32_GPT_TIM11_IRQ_PRIORITY        7
 +#define STM32_GPT_TIM12_IRQ_PRIORITY        7
 +#define STM32_GPT_TIM14_IRQ_PRIORITY        7
 +
 +/*
 + * I2C driver system settings.
 + */
 +#define STM32_I2C_USE_I2C1                  FALSE
 +#define STM32_I2C_USE_I2C2                  FALSE
 +#define STM32_I2C_USE_I2C3                  FALSE
 +#define STM32_I2C_I2C1_RX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 0)
 +#define STM32_I2C_I2C1_TX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 6)
 +#define STM32_I2C_I2C2_RX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 2)
 +#define STM32_I2C_I2C2_TX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 7)
 +#define STM32_I2C_I2C3_RX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 2)
 +#define STM32_I2C_I2C3_TX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 4)
 +#define STM32_I2C_I2C1_IRQ_PRIORITY         5
 +#define STM32_I2C_I2C2_IRQ_PRIORITY         5
 +#define STM32_I2C_I2C3_IRQ_PRIORITY         5
 +#define STM32_I2C_I2C1_DMA_PRIORITY         3
 +#define STM32_I2C_I2C2_DMA_PRIORITY         3
 +#define STM32_I2C_I2C3_DMA_PRIORITY         3
 +#define STM32_I2C_I2C1_DMA_ERROR_HOOK()     chSysHalt()
 +#define STM32_I2C_I2C2_DMA_ERROR_HOOK()     chSysHalt()
 +#define STM32_I2C_I2C3_DMA_ERROR_HOOK()     chSysHalt()
 +
 +/*
 + * ICU driver system settings.
 + */
 +#define STM32_ICU_USE_TIM1                  FALSE
 +#define STM32_ICU_USE_TIM2                  FALSE
 +#define STM32_ICU_USE_TIM3                  FALSE
 +#define STM32_ICU_USE_TIM4                  FALSE
 +#define STM32_ICU_USE_TIM5                  FALSE
 +#define STM32_ICU_USE_TIM8                  FALSE
 +#define STM32_ICU_USE_TIM9                  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
 +#define STM32_ICU_TIM8_IRQ_PRIORITY         7
 +#define STM32_ICU_TIM9_IRQ_PRIORITY         7
 +
 +/*
 + * MAC driver system settings.
 + */
 +#define STM32_MAC_TRANSMIT_BUFFERS          2
 +#define STM32_MAC_RECEIVE_BUFFERS           4
 +#define STM32_MAC_BUFFERS_SIZE              1522
 +#define STM32_MAC_PHY_TIMEOUT               100
 +#define STM32_MAC_ETH1_CHANGE_PHY_STATE     TRUE
 +#define STM32_MAC_ETH1_IRQ_PRIORITY         13
 +#define STM32_MAC_IP_CHECKSUM_OFFLOAD       0
 +
 +/*
 + * PWM driver system settings.
 + */
 +#define STM32_PWM_USE_ADVANCED              FALSE
 +#define STM32_PWM_USE_TIM1                  FALSE
 +#define STM32_PWM_USE_TIM2                  FALSE
 +#define STM32_PWM_USE_TIM3                  FALSE
 +#define STM32_PWM_USE_TIM4                  FALSE
 +#define STM32_PWM_USE_TIM5                  FALSE
 +#define STM32_PWM_USE_TIM8                  FALSE
 +#define STM32_PWM_USE_TIM9                  FALSE
 +#define STM32_PWM_TIM1_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM2_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM3_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM4_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM5_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM8_IRQ_PRIORITY         7
 +#define STM32_PWM_TIM9_IRQ_PRIORITY         7
 +
 +/*
 + * SERIAL driver system settings.
 + */
 +#define STM32_SERIAL_USE_USART1             FALSE
 +#define STM32_SERIAL_USE_USART2             FALSE
 +#define STM32_SERIAL_USE_USART3             FALSE
 +#define STM32_SERIAL_USE_UART4              FALSE
 +#define STM32_SERIAL_USE_UART5              FALSE
 +#define STM32_SERIAL_USE_USART6             FALSE
 +#define STM32_SERIAL_USART1_PRIORITY        12
 +#define STM32_SERIAL_USART2_PRIORITY        12
 +#define STM32_SERIAL_USART3_PRIORITY        12
 +#define STM32_SERIAL_UART4_PRIORITY         12
 +#define STM32_SERIAL_UART5_PRIORITY         12
 +#define STM32_SERIAL_USART6_PRIORITY        12
 +
 +/*
 + * SPI driver system settings.
 + */
 +#define STM32_SPI_USE_SPI1                  FALSE
 +#define STM32_SPI_USE_SPI2                  FALSE
 +#define STM32_SPI_USE_SPI3                  FALSE
 +#define STM32_SPI_SPI1_RX_DMA_STREAM        STM32_DMA_STREAM_ID(2, 0)
 +#define STM32_SPI_SPI1_TX_DMA_STREAM        STM32_DMA_STREAM_ID(2, 3)
 +#define STM32_SPI_SPI2_RX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 3)
 +#define STM32_SPI_SPI2_TX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 4)
 +#define STM32_SPI_SPI3_RX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 0)
 +#define STM32_SPI_SPI3_TX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 7)
 +#define STM32_SPI_SPI1_DMA_PRIORITY         1
 +#define STM32_SPI_SPI2_DMA_PRIORITY         1
 +#define STM32_SPI_SPI3_DMA_PRIORITY         1
 +#define STM32_SPI_SPI1_IRQ_PRIORITY         10
 +#define STM32_SPI_SPI2_IRQ_PRIORITY         10
 +#define STM32_SPI_SPI3_IRQ_PRIORITY         10
 +#define STM32_SPI_DMA_ERROR_HOOK(spip)      chSysHalt()
 +
 +/*
 + * UART driver system settings.
 + */
 +#define STM32_UART_USE_USART1               FALSE
 +#define STM32_UART_USE_USART2               FALSE
 +#define STM32_UART_USE_USART3               FALSE
 +#define STM32_UART_USE_USART6               FALSE
 +#define STM32_UART_USART1_RX_DMA_STREAM     STM32_DMA_STREAM_ID(2, 5)
 +#define STM32_UART_USART1_TX_DMA_STREAM     STM32_DMA_STREAM_ID(2, 7)
 +#define STM32_UART_USART2_RX_DMA_STREAM     STM32_DMA_STREAM_ID(1, 5)
 +#define STM32_UART_USART2_TX_DMA_STREAM     STM32_DMA_STREAM_ID(1, 6)
 +#define STM32_UART_USART3_RX_DMA_STREAM     STM32_DMA_STREAM_ID(1, 1)
 +#define STM32_UART_USART3_TX_DMA_STREAM     STM32_DMA_STREAM_ID(1, 3)
 +#define STM32_UART_USART6_RX_DMA_STREAM     STM32_DMA_STREAM_ID(2, 2)
 +#define STM32_UART_USART6_TX_DMA_STREAM     STM32_DMA_STREAM_ID(2, 7)
 +#define STM32_UART_USART1_IRQ_PRIORITY      12
 +#define STM32_UART_USART2_IRQ_PRIORITY      12
 +#define STM32_UART_USART3_IRQ_PRIORITY      12
 +#define STM32_UART_USART6_IRQ_PRIORITY      12
 +#define STM32_UART_USART1_DMA_PRIORITY      0
 +#define STM32_UART_USART2_DMA_PRIORITY      0
 +#define STM32_UART_USART3_DMA_PRIORITY      0
 +#define STM32_UART_USART6_DMA_PRIORITY      0
 +#define STM32_UART_DMA_ERROR_HOOK(uartp)    chSysHalt()
 +
 +/*
 + * USB driver system settings.
 + */
 +#define STM32_USB_USE_OTG1                  TRUE
 +#define STM32_USB_USE_OTG2                  TRUE
 +#define STM32_USB_OTG1_IRQ_PRIORITY         14
 +#define STM32_USB_OTG2_IRQ_PRIORITY         14
 +#define STM32_USB_OTG1_RX_FIFO_SIZE         512
 +#define STM32_USB_OTG2_RX_FIFO_SIZE         1024
 +#define STM32_USB_OTG_THREAD_PRIO           LOWPRIO
 +#define STM32_USB_OTG_THREAD_STACK_SIZE     128
 +#define STM32_USB_OTGFIFO_FILL_BASEPRI      0
 diff --git a/testhal/STM32F4xx/USB_CDC/readme.txt b/testhal/STM32F4xx/USB_CDC/readme.txt new file mode 100644 index 000000000..a619a3ec1 --- /dev/null +++ b/testhal/STM32F4xx/USB_CDC/readme.txt @@ -0,0 +1,26 @@ +*****************************************************************************
 +** ChibiOS/RT HAL - USB-CDC driver demo for STM32.                         **
 +*****************************************************************************
 +
 +** TARGET **
 +
 +The demo runs on an Olimex STM32-E407 board.
 +
 +** The Demo **
 +
 +The application demonstrates the use of the STM32 USB (OTG) driver.
 +
 +** Build Procedure **
 +
 +The demo has been tested using the free Codesourcery GCC-based toolchain
 +and YAGARTO.
 +Just modify the TRGT line in the makefile in order to use different GCC ports.
 +
 +** Notes **
 +
 +Some files used by the demo are not part of ChibiOS/RT but are copyright of
 +ST Microelectronics and are licensed under a different license.
 +Also note that not all the files present in the ST library are distributed
 +with ChibiOS/RT, you can find the whole library on the ST web site:
 +
 +                             http://www.st.com
  | 
