git-svn-id: svn://svn.code.sf.net/p/chibios/svn/branches/kernel_3_dev@6212 35acf78f-673a-0410-8e92-d51de3d6d3f4
This commit is contained in:
parent
4a63f14ecb
commit
4377d247ae
|
@ -27,7 +27,7 @@
|
||||||
<link>
|
<link>
|
||||||
<name>board</name>
|
<name>board</name>
|
||||||
<type>2</type>
|
<type>2</type>
|
||||||
<locationURI>CHIBIOS/boards/ST_STM32F4_DISCOVERY</locationURI>
|
<locationURI>CHIBIOS/os/hal/boards/ST_STM32F4_DISCOVERY</locationURI>
|
||||||
</link>
|
</link>
|
||||||
<link>
|
<link>
|
||||||
<name>os</name>
|
<name>os</name>
|
||||||
|
|
|
@ -86,7 +86,7 @@ CSRC = $(PORTSRC) \
|
||||||
$(OSALSRC) \
|
$(OSALSRC) \
|
||||||
$(PLATFORMSRC) \
|
$(PLATFORMSRC) \
|
||||||
$(BOARDSRC) \
|
$(BOARDSRC) \
|
||||||
main.c
|
extfunc.c main.c
|
||||||
|
|
||||||
# C++ sources that can be compiled in ARM or THUMB mode depending on the global
|
# C++ sources that can be compiled in ARM or THUMB mode depending on the global
|
||||||
# setting.
|
# setting.
|
||||||
|
|
|
@ -39,7 +39,7 @@ float ff2(float par1, float par2, float par3, float par4);
|
||||||
/* Test related code. */
|
/* Test related code. */
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
|
|
||||||
static bool_t saturated;
|
static bool saturated;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Test worker thread.
|
* Test worker thread.
|
||||||
|
@ -59,7 +59,7 @@ static msg_t WorkerThread(void *arg) {
|
||||||
f4 = ff1(6.0f);
|
f4 = ff1(6.0f);
|
||||||
f5 = ff2(f5, f4, f5, f4);
|
f5 = ff2(f5, f4, f5, f4);
|
||||||
if (f5 != 324.0f)
|
if (f5 != 324.0f)
|
||||||
chSysHalt();
|
chSysHalt("float corrupion #1");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -81,7 +81,7 @@ static msg_t PeriodicThread(void *arg) {
|
||||||
f4 = ff1(7.0f);
|
f4 = ff1(7.0f);
|
||||||
f5 = ff2(f5, f4, f5, f4);
|
f5 = ff2(f5, f4, f5, f4);
|
||||||
if (f5 != 484.0f)
|
if (f5 != 484.0f)
|
||||||
chSysHalt();
|
chSysHalt("float corrupion #2");
|
||||||
chThdSleepSeconds(1);
|
chThdSleepSeconds(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -89,7 +89,7 @@ static msg_t PeriodicThread(void *arg) {
|
||||||
/*
|
/*
|
||||||
* GPT2 callback.
|
* GPT2 callback.
|
||||||
*/
|
*/
|
||||||
static void gpt2cb(GPTDriver *gptp) {
|
static void gpt4cb(GPTDriver *gptp) {
|
||||||
float f1, f2, f3, f4, f5;
|
float f1, f2, f3, f4, f5;
|
||||||
|
|
||||||
(void)gptp;
|
(void)gptp;
|
||||||
|
@ -101,7 +101,7 @@ static void gpt2cb(GPTDriver *gptp) {
|
||||||
f4 = ff1(5.0f);
|
f4 = ff1(5.0f);
|
||||||
f5 = ff2(f5, f4, f5, f4);
|
f5 = ff2(f5, f4, f5, f4);
|
||||||
if (f5 != 196.0f)
|
if (f5 != 196.0f)
|
||||||
chSysHalt();
|
chSysHalt("float corrupion #3");
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -119,15 +119,15 @@ static void gpt3cb(GPTDriver *gptp) {
|
||||||
f4 = ff1(4.0f);
|
f4 = ff1(4.0f);
|
||||||
f5 = ff2(f5, f4, f5, f4);
|
f5 = ff2(f5, f4, f5, f4);
|
||||||
if (f5 != 100.0f)
|
if (f5 != 100.0f)
|
||||||
chSysHalt();
|
chSysHalt("float corrupion #4");
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* GPT2 configuration.
|
* GPT2 configuration.
|
||||||
*/
|
*/
|
||||||
static const GPTConfig gpt2cfg = {
|
static const GPTConfig gpt4cfg = {
|
||||||
1000000, /* 1MHz timer clock.*/
|
1000000, /* 1MHz timer clock.*/
|
||||||
gpt2cb, /* Timer callback.*/
|
gpt4cb, /* Timer callback.*/
|
||||||
0
|
0
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -197,7 +197,7 @@ int main(void) {
|
||||||
sdStart(&SD2, NULL); /* Default is 38400-8-N-1.*/
|
sdStart(&SD2, NULL); /* Default is 38400-8-N-1.*/
|
||||||
palSetPadMode(GPIOA, 2, PAL_MODE_ALTERNATE(7));
|
palSetPadMode(GPIOA, 2, PAL_MODE_ALTERNATE(7));
|
||||||
palSetPadMode(GPIOA, 3, PAL_MODE_ALTERNATE(7));
|
palSetPadMode(GPIOA, 3, PAL_MODE_ALTERNATE(7));
|
||||||
gptStart(&GPTD2, &gpt2cfg);
|
gptStart(&GPTD4, &gpt4cfg);
|
||||||
gptStart(&GPTD3, &gpt3cfg);
|
gptStart(&GPTD3, &gpt3cfg);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -260,10 +260,10 @@ int main(void) {
|
||||||
saturated = FALSE;
|
saturated = FALSE;
|
||||||
threshold = 0;
|
threshold = 0;
|
||||||
for (interval = 2000; interval >= 10; interval -= interval / 10) {
|
for (interval = 2000; interval >= 10; interval -= interval / 10) {
|
||||||
gptStartContinuous(&GPTD2, interval - 1); /* Slightly out of phase.*/
|
gptStartContinuous(&GPTD4, interval - 1); /* Slightly out of phase.*/
|
||||||
gptStartContinuous(&GPTD3, interval + 1); /* Slightly out of phase.*/
|
gptStartContinuous(&GPTD3, interval + 1); /* Slightly out of phase.*/
|
||||||
chThdSleepMilliseconds(1000);
|
chThdSleepMilliseconds(1000);
|
||||||
gptStopTimer(&GPTD2);
|
gptStopTimer(&GPTD4);
|
||||||
gptStopTimer(&GPTD3);
|
gptStopTimer(&GPTD3);
|
||||||
if (!saturated)
|
if (!saturated)
|
||||||
print(".");
|
print(".");
|
||||||
|
@ -284,7 +284,7 @@ int main(void) {
|
||||||
if (threshold > worst)
|
if (threshold > worst)
|
||||||
worst = threshold;
|
worst = threshold;
|
||||||
}
|
}
|
||||||
gptStopTimer(&GPTD2);
|
gptStopTimer(&GPTD4);
|
||||||
gptStopTimer(&GPTD3);
|
gptStopTimer(&GPTD3);
|
||||||
|
|
||||||
print("Worst case at ");
|
print("Worst case at ");
|
||||||
|
|
|
@ -27,7 +27,7 @@
|
||||||
<link>
|
<link>
|
||||||
<name>board</name>
|
<name>board</name>
|
||||||
<type>2</type>
|
<type>2</type>
|
||||||
<locationURI>CHIBIOS/boards/ST_STM32F4_DISCOVERY</locationURI>
|
<locationURI>CHIBIOS/os/hal/boards/ST_STM32F4_DISCOVERY</locationURI>
|
||||||
</link>
|
</link>
|
||||||
<link>
|
<link>
|
||||||
<name>os</name>
|
<name>os</name>
|
||||||
|
|
|
@ -65,12 +65,13 @@ PROJECT = ch
|
||||||
|
|
||||||
# Imported source files and paths
|
# Imported source files and paths
|
||||||
CHIBIOS = ../../..
|
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/hal/hal.mk
|
||||||
include $(CHIBIOS)/os/ports/GCC/ARMCMx/STM32F4xx/port.mk
|
include $(CHIBIOS)/os/hal/osal/chibios/osal.mk
|
||||||
include $(CHIBIOS)/os/kernel/kernel.mk
|
include $(CHIBIOS)/os/hal/boards/ST_STM32F4_DISCOVERY/board.mk
|
||||||
include $(CHIBIOS)/test/test.mk
|
include $(CHIBIOS)/os/hal/platforms/STM32F4xx/platform.mk
|
||||||
|
include $(CHIBIOS)/os/rt/rt.mk
|
||||||
|
include $(CHIBIOS)/os/rt/ports/ARMCMx/devices/STM32F4xx/port.mk
|
||||||
|
#include $(CHIBIOS)/test/test.mk
|
||||||
|
|
||||||
# Define linker script file here
|
# Define linker script file here
|
||||||
LDSCRIPT= $(PORTLD)/STM32F407xG.ld
|
LDSCRIPT= $(PORTLD)/STM32F407xG.ld
|
||||||
|
@ -82,9 +83,9 @@ CSRC = $(PORTSRC) \
|
||||||
$(KERNSRC) \
|
$(KERNSRC) \
|
||||||
$(TESTSRC) \
|
$(TESTSRC) \
|
||||||
$(HALSRC) \
|
$(HALSRC) \
|
||||||
|
$(OSALSRC) \
|
||||||
$(PLATFORMSRC) \
|
$(PLATFORMSRC) \
|
||||||
$(BOARDSRC) \
|
$(BOARDSRC) \
|
||||||
$(CHIBIOS)/os/various/chprintf.c \
|
|
||||||
main.c
|
main.c
|
||||||
|
|
||||||
# C++ sources that can be compiled in ARM or THUMB mode depending on the global
|
# C++ sources that can be compiled in ARM or THUMB mode depending on the global
|
||||||
|
@ -115,7 +116,7 @@ TCPPSRC =
|
||||||
ASMSRC = $(PORTASM)
|
ASMSRC = $(PORTASM)
|
||||||
|
|
||||||
INCDIR = $(PORTINC) $(KERNINC) $(TESTINC) \
|
INCDIR = $(PORTINC) $(KERNINC) $(TESTINC) \
|
||||||
$(HALINC) $(PLATFORMINC) $(BOARDINC) \
|
$(HALINC) $(OSALINC) $(PLATFORMINC) $(BOARDINC) \
|
||||||
$(CHIBIOS)/os/various
|
$(CHIBIOS)/os/various
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -208,8 +209,10 @@ ULIBS =
|
||||||
ifeq ($(USE_FPU),yes)
|
ifeq ($(USE_FPU),yes)
|
||||||
USE_OPT += -mfloat-abi=softfp -mfpu=fpv4-sp-d16 -fsingle-precision-constant
|
USE_OPT += -mfloat-abi=softfp -mfpu=fpv4-sp-d16 -fsingle-precision-constant
|
||||||
DDEFS += -DCORTEX_USE_FPU=TRUE
|
DDEFS += -DCORTEX_USE_FPU=TRUE
|
||||||
|
DADEFS += -DCORTEX_USE_FPU=TRUE
|
||||||
else
|
else
|
||||||
DDEFS += -DCORTEX_USE_FPU=FALSE
|
DDEFS += -DCORTEX_USE_FPU=FALSE
|
||||||
|
DADEFS += -DCORTEX_USE_FPU=FALSE
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifeq ($(USE_FWLIB),yes)
|
ifeq ($(USE_FWLIB),yes)
|
||||||
|
@ -219,4 +222,4 @@ ifeq ($(USE_FWLIB),yes)
|
||||||
USE_OPT += -DUSE_STDPERIPH_DRIVER
|
USE_OPT += -DUSE_STDPERIPH_DRIVER
|
||||||
endif
|
endif
|
||||||
|
|
||||||
include $(CHIBIOS)/os/ports/GCC/ARMCMx/rules.mk
|
include $(CHIBIOS)/os/rt/ports/ARMCMx/compilers/GCC/rules.mk
|
||||||
|
|
|
@ -40,8 +40,29 @@
|
||||||
* @details Frequency of the system timer that drives the system ticks. This
|
* @details Frequency of the system timer that drives the system ticks. This
|
||||||
* setting also defines the system tick time unit.
|
* setting also defines the system tick time unit.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_FREQUENCY) || defined(__DOXYGEN__)
|
#if !defined(CH_CFG_ST_FREQUENCY) || defined(__DOXYGEN__)
|
||||||
#define CH_FREQUENCY 1000
|
#define CH_CFG_ST_FREQUENCY 10000
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Realtime Counter frequency.
|
||||||
|
* @details Frequency of the system counter used for realtime delays and
|
||||||
|
* measurements.
|
||||||
|
*/
|
||||||
|
#if !defined(CH_CFG_RTC_FREQUENCY) || defined(__DOXYGEN__)
|
||||||
|
#define CH_CFG_RTC_FREQUENCY 168000000
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Time delta constant for the tick-less mode.
|
||||||
|
* @note If this value is zero then the system uses the classic
|
||||||
|
* periodic tick. This value represents the minimum number
|
||||||
|
* of ticks that is safe to specify in a timeout directive.
|
||||||
|
* The value one is not valid, timeouts are rounded up to
|
||||||
|
* this value.
|
||||||
|
*/
|
||||||
|
#if !defined(CH_CFG_TIMEDELTA) || defined(__DOXYGEN__)
|
||||||
|
#define CH_CFG_TIMEDELTA 2
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -51,12 +72,13 @@
|
||||||
* disables the preemption for threads with equal priority and the
|
* disables the preemption for threads with equal priority and the
|
||||||
* round robin becomes cooperative. Note that higher priority
|
* round robin becomes cooperative. Note that higher priority
|
||||||
* threads can still preempt, the kernel is always preemptive.
|
* threads can still preempt, the kernel is always preemptive.
|
||||||
*
|
|
||||||
* @note Disabling the round robin preemption makes the kernel more compact
|
* @note Disabling the round robin preemption makes the kernel more compact
|
||||||
* and generally faster.
|
* and generally faster.
|
||||||
|
* @note The round robin preemption is not supported in tickless mode and
|
||||||
|
* must be set to zero in that case.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_TIME_QUANTUM) || defined(__DOXYGEN__)
|
#if !defined(CH_CFG_TIME_QUANTUM) || defined(__DOXYGEN__)
|
||||||
#define CH_TIME_QUANTUM 20
|
#define CH_CFG_TIME_QUANTUM 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -68,27 +90,20 @@
|
||||||
*
|
*
|
||||||
* @note In order to let the OS manage the whole RAM the linker script must
|
* @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.
|
* provide the @p __heap_base__ and @p __heap_end__ symbols.
|
||||||
* @note Requires @p CH_USE_MEMCORE.
|
* @note Requires @p CH_CFG_USE_MEMCORE.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_MEMCORE_SIZE) || defined(__DOXYGEN__)
|
#if !defined(CH_CFG_MEMCORE_SIZE) || defined(__DOXYGEN__)
|
||||||
#define CH_MEMCORE_SIZE 0
|
#define CH_CFG_MEMCORE_SIZE 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Idle thread automatic spawn suppression.
|
* @brief Idle thread automatic spawn suppression.
|
||||||
* @details When this option is activated the function @p chSysInit()
|
* @details When this option is activated the function @p chSysInit()
|
||||||
* does not spawn the idle thread automatically. The application has
|
* does not spawn the idle thread. The application @p main()
|
||||||
* then the responsibility to do one of the following:
|
* function becomes the idle thread and must implement an
|
||||||
* - Spawn a custom idle thread at priority @p IDLEPRIO.
|
* infinite loop. */
|
||||||
* - Change the main() thread priority to @p IDLEPRIO then enter
|
#if !defined(CH_CFG_NO_IDLE_THREAD) || defined(__DOXYGEN__)
|
||||||
* an endless loop. In this scenario the @p main() thread acts as
|
#define CH_CFG_NO_IDLE_THREAD FALSE
|
||||||
* 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
|
#endif
|
||||||
|
|
||||||
/** @} */
|
/** @} */
|
||||||
|
@ -108,8 +123,8 @@
|
||||||
* @note This is not related to the compiler optimization options.
|
* @note This is not related to the compiler optimization options.
|
||||||
* @note The default is @p TRUE.
|
* @note The default is @p TRUE.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_OPTIMIZE_SPEED) || defined(__DOXYGEN__)
|
#if !defined(CH_CFG_OPTIMIZE_SPEED) || defined(__DOXYGEN__)
|
||||||
#define CH_OPTIMIZE_SPEED TRUE
|
#define CH_CFG_OPTIMIZE_SPEED TRUE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/** @} */
|
/** @} */
|
||||||
|
@ -121,14 +136,25 @@
|
||||||
*/
|
*/
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Time Measurement APIs.
|
||||||
|
* @details If enabled then the time measurement APIs are included in
|
||||||
|
* the kernel.
|
||||||
|
*
|
||||||
|
* @note The default is @p TRUE.
|
||||||
|
*/
|
||||||
|
#if !defined(CH_CFG_USE_TM) || defined(__DOXYGEN__)
|
||||||
|
#define CH_CFG_USE_TM TRUE
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Threads registry APIs.
|
* @brief Threads registry APIs.
|
||||||
* @details If enabled then the registry APIs are included in the kernel.
|
* @details If enabled then the registry APIs are included in the kernel.
|
||||||
*
|
*
|
||||||
* @note The default is @p TRUE.
|
* @note The default is @p TRUE.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_USE_REGISTRY) || defined(__DOXYGEN__)
|
#if !defined(CH_CFG_USE_REGISTRY) || defined(__DOXYGEN__)
|
||||||
#define CH_USE_REGISTRY TRUE
|
#define CH_CFG_USE_REGISTRY TRUE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -138,8 +164,8 @@
|
||||||
*
|
*
|
||||||
* @note The default is @p TRUE.
|
* @note The default is @p TRUE.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_USE_WAITEXIT) || defined(__DOXYGEN__)
|
#if !defined(CH_CFG_USE_WAITEXIT) || defined(__DOXYGEN__)
|
||||||
#define CH_USE_WAITEXIT TRUE
|
#define CH_CFG_USE_WAITEXIT TRUE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -148,8 +174,8 @@
|
||||||
*
|
*
|
||||||
* @note The default is @p TRUE.
|
* @note The default is @p TRUE.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_USE_SEMAPHORES) || defined(__DOXYGEN__)
|
#if !defined(CH_CFG_USE_SEMAPHORES) || defined(__DOXYGEN__)
|
||||||
#define CH_USE_SEMAPHORES TRUE
|
#define CH_CFG_USE_SEMAPHORES TRUE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -157,23 +183,12 @@
|
||||||
* @details If enabled then the threads are enqueued on semaphores by
|
* @details If enabled then the threads are enqueued on semaphores by
|
||||||
* priority rather than in FIFO order.
|
* priority rather than in FIFO order.
|
||||||
*
|
*
|
||||||
* @note The default is @p FALSE. Enable this if you have special requirements.
|
* @note The default is @p FALSE. Enable this if you have special
|
||||||
* @note Requires @p CH_USE_SEMAPHORES.
|
* requirements.
|
||||||
|
* @note Requires @p CH_CFG_USE_SEMAPHORES.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_USE_SEMAPHORES_PRIORITY) || defined(__DOXYGEN__)
|
#if !defined(CH_CFG_USE_SEMAPHORES_PRIORITY) || defined(__DOXYGEN__)
|
||||||
#define CH_USE_SEMAPHORES_PRIORITY FALSE
|
#define CH_CFG_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
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -182,8 +197,8 @@
|
||||||
*
|
*
|
||||||
* @note The default is @p TRUE.
|
* @note The default is @p TRUE.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_USE_MUTEXES) || defined(__DOXYGEN__)
|
#if !defined(CH_CFG_USE_MUTEXES) || defined(__DOXYGEN__)
|
||||||
#define CH_USE_MUTEXES TRUE
|
#define CH_CFG_USE_MUTEXES TRUE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -192,10 +207,10 @@
|
||||||
* in the kernel.
|
* in the kernel.
|
||||||
*
|
*
|
||||||
* @note The default is @p TRUE.
|
* @note The default is @p TRUE.
|
||||||
* @note Requires @p CH_USE_MUTEXES.
|
* @note Requires @p CH_CFG_USE_MUTEXES.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_USE_CONDVARS) || defined(__DOXYGEN__)
|
#if !defined(CH_CFG_USE_CONDVARS) || defined(__DOXYGEN__)
|
||||||
#define CH_USE_CONDVARS TRUE
|
#define CH_CFG_USE_CONDVARS TRUE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -204,10 +219,10 @@
|
||||||
* specification are included in the kernel.
|
* specification are included in the kernel.
|
||||||
*
|
*
|
||||||
* @note The default is @p TRUE.
|
* @note The default is @p TRUE.
|
||||||
* @note Requires @p CH_USE_CONDVARS.
|
* @note Requires @p CH_CFG_USE_CONDVARS.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_USE_CONDVARS_TIMEOUT) || defined(__DOXYGEN__)
|
#if !defined(CH_CFG_USE_CONDVARS_TIMEOUT) || defined(__DOXYGEN__)
|
||||||
#define CH_USE_CONDVARS_TIMEOUT TRUE
|
#define CH_CFG_USE_CONDVARS_TIMEOUT TRUE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -216,8 +231,8 @@
|
||||||
*
|
*
|
||||||
* @note The default is @p TRUE.
|
* @note The default is @p TRUE.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_USE_EVENTS) || defined(__DOXYGEN__)
|
#if !defined(CH_CFG_USE_EVENTS) || defined(__DOXYGEN__)
|
||||||
#define CH_USE_EVENTS TRUE
|
#define CH_CFG_USE_EVENTS TRUE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -226,10 +241,10 @@
|
||||||
* are included in the kernel.
|
* are included in the kernel.
|
||||||
*
|
*
|
||||||
* @note The default is @p TRUE.
|
* @note The default is @p TRUE.
|
||||||
* @note Requires @p CH_USE_EVENTS.
|
* @note Requires @p CH_CFG_USE_EVENTS.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_USE_EVENTS_TIMEOUT) || defined(__DOXYGEN__)
|
#if !defined(CH_CFG_USE_EVENTS_TIMEOUT) || defined(__DOXYGEN__)
|
||||||
#define CH_USE_EVENTS_TIMEOUT TRUE
|
#define CH_CFG_USE_EVENTS_TIMEOUT TRUE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -239,8 +254,8 @@
|
||||||
*
|
*
|
||||||
* @note The default is @p TRUE.
|
* @note The default is @p TRUE.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_USE_MESSAGES) || defined(__DOXYGEN__)
|
#if !defined(CH_CFG_USE_MESSAGES) || defined(__DOXYGEN__)
|
||||||
#define CH_USE_MESSAGES TRUE
|
#define CH_CFG_USE_MESSAGES TRUE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -248,11 +263,12 @@
|
||||||
* @details If enabled then messages are served by priority rather than in
|
* @details If enabled then messages are served by priority rather than in
|
||||||
* FIFO order.
|
* FIFO order.
|
||||||
*
|
*
|
||||||
* @note The default is @p FALSE. Enable this if you have special requirements.
|
* @note The default is @p FALSE. Enable this if you have special
|
||||||
* @note Requires @p CH_USE_MESSAGES.
|
* requirements.
|
||||||
|
* @note Requires @p CH_CFG_USE_MESSAGES.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_USE_MESSAGES_PRIORITY) || defined(__DOXYGEN__)
|
#if !defined(CH_CFG_USE_MESSAGES_PRIORITY) || defined(__DOXYGEN__)
|
||||||
#define CH_USE_MESSAGES_PRIORITY FALSE
|
#define CH_CFG_USE_MESSAGES_PRIORITY FALSE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -261,10 +277,10 @@
|
||||||
* included in the kernel.
|
* included in the kernel.
|
||||||
*
|
*
|
||||||
* @note The default is @p TRUE.
|
* @note The default is @p TRUE.
|
||||||
* @note Requires @p CH_USE_SEMAPHORES.
|
* @note Requires @p CH_CFG_USE_SEMAPHORES.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_USE_MAILBOXES) || defined(__DOXYGEN__)
|
#if !defined(CH_CFG_USE_MAILBOXES) || defined(__DOXYGEN__)
|
||||||
#define CH_USE_MAILBOXES TRUE
|
#define CH_CFG_USE_MAILBOXES TRUE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -273,8 +289,8 @@
|
||||||
*
|
*
|
||||||
* @note The default is @p TRUE.
|
* @note The default is @p TRUE.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_USE_QUEUES) || defined(__DOXYGEN__)
|
#if !defined(CH_CFG_USE_QUEUES) || defined(__DOXYGEN__)
|
||||||
#define CH_USE_QUEUES TRUE
|
#define CH_CFG_USE_QUEUES TRUE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -284,8 +300,8 @@
|
||||||
*
|
*
|
||||||
* @note The default is @p TRUE.
|
* @note The default is @p TRUE.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_USE_MEMCORE) || defined(__DOXYGEN__)
|
#if !defined(CH_CFG_USE_MEMCORE) || defined(__DOXYGEN__)
|
||||||
#define CH_USE_MEMCORE TRUE
|
#define CH_CFG_USE_MEMCORE TRUE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -294,26 +310,12 @@
|
||||||
* in the kernel.
|
* in the kernel.
|
||||||
*
|
*
|
||||||
* @note The default is @p TRUE.
|
* @note The default is @p TRUE.
|
||||||
* @note Requires @p CH_USE_MEMCORE and either @p CH_USE_MUTEXES or
|
* @note Requires @p CH_CFG_USE_MEMCORE and either @p CH_CFG_USE_MUTEXES or
|
||||||
* @p CH_USE_SEMAPHORES.
|
* @p CH_CFG_USE_SEMAPHORES.
|
||||||
* @note Mutexes are recommended.
|
* @note Mutexes are recommended.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_USE_HEAP) || defined(__DOXYGEN__)
|
#if !defined(CH_CFG_USE_HEAP) || defined(__DOXYGEN__)
|
||||||
#define CH_USE_HEAP TRUE
|
#define CH_CFG_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
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -323,8 +325,8 @@
|
||||||
*
|
*
|
||||||
* @note The default is @p TRUE.
|
* @note The default is @p TRUE.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_USE_MEMPOOLS) || defined(__DOXYGEN__)
|
#if !defined(CH_CFG_USE_MEMPOOLS) || defined(__DOXYGEN__)
|
||||||
#define CH_USE_MEMPOOLS TRUE
|
#define CH_CFG_USE_MEMPOOLS TRUE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -333,11 +335,11 @@
|
||||||
* in the kernel.
|
* in the kernel.
|
||||||
*
|
*
|
||||||
* @note The default is @p TRUE.
|
* @note The default is @p TRUE.
|
||||||
* @note Requires @p CH_USE_WAITEXIT.
|
* @note Requires @p CH_CFG_USE_WAITEXIT.
|
||||||
* @note Requires @p CH_USE_HEAP and/or @p CH_USE_MEMPOOLS.
|
* @note Requires @p CH_CFG_USE_HEAP and/or @p CH_CFG_USE_MEMPOOLS.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_USE_DYNAMIC) || defined(__DOXYGEN__)
|
#if !defined(CH_CFG_USE_DYNAMIC) || defined(__DOXYGEN__)
|
||||||
#define CH_USE_DYNAMIC TRUE
|
#define CH_CFG_USE_DYNAMIC TRUE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/** @} */
|
/** @} */
|
||||||
|
@ -349,6 +351,15 @@
|
||||||
*/
|
*/
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Debug option, kernel statistics.
|
||||||
|
*
|
||||||
|
* @note The default is @p FALSE.
|
||||||
|
*/
|
||||||
|
#if !defined(CH_DBG_STATISTICS) || defined(__DOXYGEN__)
|
||||||
|
#define CH_DBG_STATISTICS TRUE
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Debug option, system state check.
|
* @brief Debug option, system state check.
|
||||||
* @details If enabled the correct call protocol for system APIs is checked
|
* @details If enabled the correct call protocol for system APIs is checked
|
||||||
|
@ -357,7 +368,7 @@
|
||||||
* @note The default is @p FALSE.
|
* @note The default is @p FALSE.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_DBG_SYSTEM_STATE_CHECK) || defined(__DOXYGEN__)
|
#if !defined(CH_DBG_SYSTEM_STATE_CHECK) || defined(__DOXYGEN__)
|
||||||
#define CH_DBG_SYSTEM_STATE_CHECK TRUE
|
#define CH_DBG_SYSTEM_STATE_CHECK TRUE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -368,7 +379,7 @@
|
||||||
* @note The default is @p FALSE.
|
* @note The default is @p FALSE.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_DBG_ENABLE_CHECKS) || defined(__DOXYGEN__)
|
#if !defined(CH_DBG_ENABLE_CHECKS) || defined(__DOXYGEN__)
|
||||||
#define CH_DBG_ENABLE_CHECKS TRUE
|
#define CH_DBG_ENABLE_CHECKS TRUE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -380,7 +391,7 @@
|
||||||
* @note The default is @p FALSE.
|
* @note The default is @p FALSE.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_DBG_ENABLE_ASSERTS) || defined(__DOXYGEN__)
|
#if !defined(CH_DBG_ENABLE_ASSERTS) || defined(__DOXYGEN__)
|
||||||
#define CH_DBG_ENABLE_ASSERTS TRUE
|
#define CH_DBG_ENABLE_ASSERTS TRUE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -391,7 +402,7 @@
|
||||||
* @note The default is @p FALSE.
|
* @note The default is @p FALSE.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_DBG_ENABLE_TRACE) || defined(__DOXYGEN__)
|
#if !defined(CH_DBG_ENABLE_TRACE) || defined(__DOXYGEN__)
|
||||||
#define CH_DBG_ENABLE_TRACE TRUE
|
#define CH_DBG_ENABLE_TRACE TRUE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -405,7 +416,7 @@
|
||||||
* @p panic_msg variable set to @p NULL.
|
* @p panic_msg variable set to @p NULL.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_DBG_ENABLE_STACK_CHECK) || defined(__DOXYGEN__)
|
#if !defined(CH_DBG_ENABLE_STACK_CHECK) || defined(__DOXYGEN__)
|
||||||
#define CH_DBG_ENABLE_STACK_CHECK TRUE
|
#define CH_DBG_ENABLE_STACK_CHECK TRUE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -417,20 +428,20 @@
|
||||||
* @note The default is @p FALSE.
|
* @note The default is @p FALSE.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_DBG_FILL_THREADS) || defined(__DOXYGEN__)
|
#if !defined(CH_DBG_FILL_THREADS) || defined(__DOXYGEN__)
|
||||||
#define CH_DBG_FILL_THREADS TRUE
|
#define CH_DBG_FILL_THREADS TRUE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Debug option, threads profiling.
|
* @brief Debug option, threads profiling.
|
||||||
* @details If enabled then a field is added to the @p Thread structure that
|
* @details If enabled then a field is added to the @p thread_t structure that
|
||||||
* counts the system ticks occurred while executing the thread.
|
* counts the system ticks occurred while executing the thread.
|
||||||
*
|
*
|
||||||
* @note The default is @p TRUE.
|
* @note The default is @p FALSE.
|
||||||
* @note This debug option is defaulted to TRUE because it is required by
|
* @note This debug option is not currently compatible with the
|
||||||
* some test cases into the test suite.
|
* tickless mode.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_DBG_THREADS_PROFILING) || defined(__DOXYGEN__)
|
#if !defined(CH_DBG_THREADS_PROFILING) || defined(__DOXYGEN__)
|
||||||
#define CH_DBG_THREADS_PROFILING TRUE
|
#define CH_DBG_THREADS_PROFILING FALSE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/** @} */
|
/** @} */
|
||||||
|
@ -444,10 +455,10 @@
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Threads descriptor structure extension.
|
* @brief Threads descriptor structure extension.
|
||||||
* @details User fields added to the end of the @p Thread structure.
|
* @details User fields added to the end of the @p thread_t structure.
|
||||||
*/
|
*/
|
||||||
#if !defined(THREAD_EXT_FIELDS) || defined(__DOXYGEN__)
|
#if !defined(CH_CFG_THREAD_EXTRA_FIELDS) || defined(__DOXYGEN__)
|
||||||
#define THREAD_EXT_FIELDS \
|
#define CH_CFG_THREAD_EXTRA_FIELDS \
|
||||||
/* Add threads custom fields here.*/
|
/* Add threads custom fields here.*/
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -458,8 +469,8 @@
|
||||||
* @note It is invoked from within @p chThdInit() and implicitly from all
|
* @note It is invoked from within @p chThdInit() and implicitly from all
|
||||||
* the threads creation APIs.
|
* the threads creation APIs.
|
||||||
*/
|
*/
|
||||||
#if !defined(THREAD_EXT_INIT_HOOK) || defined(__DOXYGEN__)
|
#if !defined(CH_CFG_THREAD_INIT_HOOK) || defined(__DOXYGEN__)
|
||||||
#define THREAD_EXT_INIT_HOOK(tp) { \
|
#define CH_CFG_THREAD_INIT_HOOK(tp) { \
|
||||||
/* Add threads initialization code here.*/ \
|
/* Add threads initialization code here.*/ \
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -472,8 +483,8 @@
|
||||||
* @note It is also invoked when the threads simply return in order to
|
* @note It is also invoked when the threads simply return in order to
|
||||||
* terminate.
|
* terminate.
|
||||||
*/
|
*/
|
||||||
#if !defined(THREAD_EXT_EXIT_HOOK) || defined(__DOXYGEN__)
|
#if !defined(CH_CFG_THREAD_EXIT_HOOK) || defined(__DOXYGEN__)
|
||||||
#define THREAD_EXT_EXIT_HOOK(tp) { \
|
#define CH_CFG_THREAD_EXIT_HOOK(tp) { \
|
||||||
/* Add threads finalization code here.*/ \
|
/* Add threads finalization code here.*/ \
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -482,18 +493,40 @@
|
||||||
* @brief Context switch hook.
|
* @brief Context switch hook.
|
||||||
* @details This hook is invoked just before switching between threads.
|
* @details This hook is invoked just before switching between threads.
|
||||||
*/
|
*/
|
||||||
#if !defined(THREAD_CONTEXT_SWITCH_HOOK) || defined(__DOXYGEN__)
|
#if !defined(CH_CFG_CONTEXT_SWITCH_HOOK) || defined(__DOXYGEN__)
|
||||||
#define THREAD_CONTEXT_SWITCH_HOOK(ntp, otp) { \
|
#define CH_CFG_CONTEXT_SWITCH_HOOK(ntp, otp) { \
|
||||||
/* System halt code here.*/ \
|
/* System halt code here.*/ \
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Idle thread enter hook.
|
||||||
|
* @note This hook is invoked within a critical zone, no OS functions
|
||||||
|
* should be invoked from here.
|
||||||
|
* @note This macro can be used to activate a power saving mode.
|
||||||
|
*/
|
||||||
|
#if !defined(CH_CFG_IDLE_ENTER_HOOK) || defined(__DOXYGEN__)
|
||||||
|
#define CH_CFG_IDLE_ENTER_HOOK() { \
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Idle thread leave hook.
|
||||||
|
* @note This hook is invoked within a critical zone, no OS functions
|
||||||
|
* should be invoked from here.
|
||||||
|
* @note This macro can be used to deactivate a power saving mode.
|
||||||
|
*/
|
||||||
|
#if !defined(CH_CFG_IDLE_LEAVE_HOOK) || defined(__DOXYGEN__)
|
||||||
|
#define CH_CFG_IDLE_LEAVE_HOOK() { \
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Idle Loop hook.
|
* @brief Idle Loop hook.
|
||||||
* @details This hook is continuously invoked by the idle thread loop.
|
* @details This hook is continuously invoked by the idle thread loop.
|
||||||
*/
|
*/
|
||||||
#if !defined(IDLE_LOOP_HOOK) || defined(__DOXYGEN__)
|
#if !defined(CH_CFG_IDLE_LOOP_HOOK) || defined(__DOXYGEN__)
|
||||||
#define IDLE_LOOP_HOOK() { \
|
#define CH_CFG_IDLE_LOOP_HOOK() { \
|
||||||
/* Idle loop code here.*/ \
|
/* Idle loop code here.*/ \
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -503,8 +536,8 @@
|
||||||
* @details This hook is invoked in the system tick handler immediately
|
* @details This hook is invoked in the system tick handler immediately
|
||||||
* after processing the virtual timers queue.
|
* after processing the virtual timers queue.
|
||||||
*/
|
*/
|
||||||
#if !defined(SYSTEM_TICK_EVENT_HOOK) || defined(__DOXYGEN__)
|
#if !defined(CH_CFG_SYSTEM_TICK_HOOK) || defined(__DOXYGEN__)
|
||||||
#define SYSTEM_TICK_EVENT_HOOK() { \
|
#define CH_CFG_SYSTEM_TICK_HOOK() { \
|
||||||
/* System tick event code here.*/ \
|
/* System tick event code here.*/ \
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -514,8 +547,8 @@
|
||||||
* @details This hook is invoked in case to a system halting error before
|
* @details This hook is invoked in case to a system halting error before
|
||||||
* the system is halted.
|
* the system is halted.
|
||||||
*/
|
*/
|
||||||
#if !defined(SYSTEM_HALT_HOOK) || defined(__DOXYGEN__)
|
#if !defined(CH_CFG_SYSTEM_HALT_HOOK) || defined(__DOXYGEN__)
|
||||||
#define SYSTEM_HALT_HOOK() { \
|
#define CH_CFG_SYSTEM_HALT_HOOK(reason) { \
|
||||||
/* System halt code here.*/ \
|
/* System halt code here.*/ \
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -30,13 +30,6 @@
|
||||||
|
|
||||||
#include "mcuconf.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.
|
* @brief Enables the PAL subsystem.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -84,12 +84,12 @@ int main(void) {
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Initializes the PWM driver 2 and ICU driver 3.
|
* Initializes the PWM driver 2 and ICU driver 3.
|
||||||
* GPIOA15 is the PWM output.
|
* GPIOA8 is the PWM output.
|
||||||
* GPIOC6 is the ICU input.
|
* GPIOC6 is the ICU input.
|
||||||
* The two pins have to be externally connected together.
|
* The two pins have to be externally connected together.
|
||||||
*/
|
*/
|
||||||
pwmStart(&PWMD2, &pwmcfg);
|
pwmStart(&PWMD1, &pwmcfg);
|
||||||
palSetPadMode(GPIOA, 15, PAL_MODE_ALTERNATE(1));
|
palSetPadMode(GPIOA, 8, PAL_MODE_ALTERNATE(1));
|
||||||
icuStart(&ICUD3, &icucfg);
|
icuStart(&ICUD3, &icucfg);
|
||||||
palSetPadMode(GPIOC, 6, PAL_MODE_ALTERNATE(2));
|
palSetPadMode(GPIOC, 6, PAL_MODE_ALTERNATE(2));
|
||||||
icuEnable(&ICUD3);
|
icuEnable(&ICUD3);
|
||||||
|
@ -98,33 +98,33 @@ int main(void) {
|
||||||
/*
|
/*
|
||||||
* Starts the PWM channel 0 using 75% duty cycle.
|
* Starts the PWM channel 0 using 75% duty cycle.
|
||||||
*/
|
*/
|
||||||
pwmEnableChannel(&PWMD2, 0, PWM_PERCENTAGE_TO_WIDTH(&PWMD2, 7500));
|
pwmEnableChannel(&PWMD1, 0, PWM_PERCENTAGE_TO_WIDTH(&PWMD1, 7500));
|
||||||
chThdSleepMilliseconds(5000);
|
chThdSleepMilliseconds(5000);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Changes the PWM channel 0 to 50% duty cycle.
|
* Changes the PWM channel 0 to 50% duty cycle.
|
||||||
*/
|
*/
|
||||||
pwmEnableChannel(&PWMD2, 0, PWM_PERCENTAGE_TO_WIDTH(&PWMD2, 5000));
|
pwmEnableChannel(&PWMD1, 0, PWM_PERCENTAGE_TO_WIDTH(&PWMD1, 5000));
|
||||||
chThdSleepMilliseconds(5000);
|
chThdSleepMilliseconds(5000);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Changes the PWM channel 0 to 25% duty cycle.
|
* Changes the PWM channel 0 to 25% duty cycle.
|
||||||
*/
|
*/
|
||||||
pwmEnableChannel(&PWMD2, 0, PWM_PERCENTAGE_TO_WIDTH(&PWMD2, 2500));
|
pwmEnableChannel(&PWMD1, 0, PWM_PERCENTAGE_TO_WIDTH(&PWMD1, 2500));
|
||||||
chThdSleepMilliseconds(5000);
|
chThdSleepMilliseconds(5000);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Changes PWM period to half second the duty cycle becomes 50%
|
* Changes PWM period to half second the duty cycle becomes 50%
|
||||||
* implicitly.
|
* implicitly.
|
||||||
*/
|
*/
|
||||||
pwmChangePeriod(&PWMD2, 5000);
|
pwmChangePeriod(&PWMD1, 5000);
|
||||||
chThdSleepMilliseconds(5000);
|
chThdSleepMilliseconds(5000);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Disables channel 0 and stops the drivers.
|
* Disables channel 0 and stops the drivers.
|
||||||
*/
|
*/
|
||||||
pwmDisableChannel(&PWMD2, 0);
|
pwmDisableChannel(&PWMD1, 0);
|
||||||
pwmStop(&PWMD2);
|
pwmStop(&PWMD1);
|
||||||
icuDisable(&ICUD3);
|
icuDisable(&ICUD3);
|
||||||
icuStop(&ICUD3);
|
icuStop(&ICUD3);
|
||||||
palClearPad(GPIOD, GPIOD_LED4);
|
palClearPad(GPIOD, GPIOD_LED4);
|
||||||
|
|
|
@ -188,8 +188,8 @@
|
||||||
* PWM driver system settings.
|
* PWM driver system settings.
|
||||||
*/
|
*/
|
||||||
#define STM32_PWM_USE_ADVANCED FALSE
|
#define STM32_PWM_USE_ADVANCED FALSE
|
||||||
#define STM32_PWM_USE_TIM1 FALSE
|
#define STM32_PWM_USE_TIM1 TRUE
|
||||||
#define STM32_PWM_USE_TIM2 TRUE
|
#define STM32_PWM_USE_TIM2 FALSE
|
||||||
#define STM32_PWM_USE_TIM3 FALSE
|
#define STM32_PWM_USE_TIM3 FALSE
|
||||||
#define STM32_PWM_USE_TIM4 FALSE
|
#define STM32_PWM_USE_TIM4 FALSE
|
||||||
#define STM32_PWM_USE_TIM5 FALSE
|
#define STM32_PWM_USE_TIM5 FALSE
|
||||||
|
|
|
@ -12,7 +12,7 @@ The application demonstrates the use of the STM32F4xx PWM-ICU drivers.
|
||||||
|
|
||||||
** Board Setup **
|
** Board Setup **
|
||||||
|
|
||||||
- Connect PA15 and PC6 together.
|
- Connect PA8 and PC6 together.
|
||||||
|
|
||||||
** Build Procedure **
|
** Build Procedure **
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue