mirror of
https://github.com/FreeRTOS/FreeRTOS-Kernel.git
synced 2025-04-20 05:21:59 -04:00
Continue work on STM32L demo.
This commit is contained in:
parent
b89fd7c1e3
commit
faed443e82
|
@ -307,6 +307,8 @@
|
||||||
<state>$PROJ_DIR$\ST_Code\libraries\STM32L1xx_StdPeriph_Driver\inc</state>
|
<state>$PROJ_DIR$\ST_Code\libraries\STM32L1xx_StdPeriph_Driver\inc</state>
|
||||||
<state>$PROJ_DIR$\ST_Code\libraries\STMTouch_Driver\inc</state>
|
<state>$PROJ_DIR$\ST_Code\libraries\STMTouch_Driver\inc</state>
|
||||||
<state>$PROJ_DIR$\ST_Code\libraries\CMSIS\Device\ST\STM32L1xx\Include</state>
|
<state>$PROJ_DIR$\ST_Code\libraries\CMSIS\Device\ST\STM32L1xx\Include</state>
|
||||||
|
<state>$PROJ_DIR$\..\..\Source\include</state>
|
||||||
|
<state>$PROJ_DIR$\..\..\Source\portable\IAR\ARM_CM3</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>CCStdIncCheck</name>
|
<name>CCStdIncCheck</name>
|
||||||
|
@ -555,7 +557,7 @@
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>AUserIncludes</name>
|
<name>AUserIncludes</name>
|
||||||
<state></state>
|
<state>$PROJ_DIR$\include</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>AExtraOptionsCheckV2</name>
|
<name>AExtraOptionsCheckV2</name>
|
||||||
|
@ -939,6 +941,42 @@
|
||||||
<data/>
|
<data/>
|
||||||
</settings>
|
</settings>
|
||||||
</configuration>
|
</configuration>
|
||||||
|
<group>
|
||||||
|
<name>FreeRTOS Source</name>
|
||||||
|
<group>
|
||||||
|
<name>Portable</name>
|
||||||
|
<group>
|
||||||
|
<name>IAR</name>
|
||||||
|
<group>
|
||||||
|
<name>ARM_CM3</name>
|
||||||
|
<file>
|
||||||
|
<name>$PROJ_DIR$\..\..\Source\portable\IAR\ARM_CM3\port.c</name>
|
||||||
|
</file>
|
||||||
|
<file>
|
||||||
|
<name>$PROJ_DIR$\..\..\Source\portable\IAR\ARM_CM3\portasm.s</name>
|
||||||
|
</file>
|
||||||
|
</group>
|
||||||
|
</group>
|
||||||
|
<file>
|
||||||
|
<name>$PROJ_DIR$\..\..\Source\portable\MemMang\heap_4.c</name>
|
||||||
|
</file>
|
||||||
|
</group>
|
||||||
|
<file>
|
||||||
|
<name>$PROJ_DIR$\..\..\Source\event_groups.c</name>
|
||||||
|
</file>
|
||||||
|
<file>
|
||||||
|
<name>$PROJ_DIR$\..\..\Source\list.c</name>
|
||||||
|
</file>
|
||||||
|
<file>
|
||||||
|
<name>$PROJ_DIR$\..\..\Source\queue.c</name>
|
||||||
|
</file>
|
||||||
|
<file>
|
||||||
|
<name>$PROJ_DIR$\..\..\Source\tasks.c</name>
|
||||||
|
</file>
|
||||||
|
<file>
|
||||||
|
<name>$PROJ_DIR$\..\..\Source\timers.c</name>
|
||||||
|
</file>
|
||||||
|
</group>
|
||||||
<group>
|
<group>
|
||||||
<name>ST_Code</name>
|
<name>ST_Code</name>
|
||||||
<group>
|
<group>
|
||||||
|
@ -982,6 +1020,9 @@
|
||||||
</group>
|
</group>
|
||||||
<group>
|
<group>
|
||||||
<name>TouchSensingDriver</name>
|
<name>TouchSensingDriver</name>
|
||||||
|
<excluded>
|
||||||
|
<configuration>Debug</configuration>
|
||||||
|
</excluded>
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\ST_Code\Libraries\STMTouch_Driver\src\tsl.c</name>
|
<name>$PROJ_DIR$\ST_Code\Libraries\STMTouch_Driver\src\tsl.c</name>
|
||||||
</file>
|
</file>
|
||||||
|
@ -1032,6 +1073,9 @@
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\discover_functions.c</name>
|
<name>$PROJ_DIR$\discover_functions.c</name>
|
||||||
</file>
|
</file>
|
||||||
|
<file>
|
||||||
|
<name>$PROJ_DIR$\include\FreeRTOSConfig.h</name>
|
||||||
|
</file>
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\icc_measure.c</name>
|
<name>$PROJ_DIR$\icc_measure.c</name>
|
||||||
</file>
|
</file>
|
||||||
|
|
|
@ -0,0 +1,149 @@
|
||||||
|
/*
|
||||||
|
FreeRTOS V7.6.0 - Copyright (C) 2013 Real Time Engineers Ltd.
|
||||||
|
All rights reserved
|
||||||
|
|
||||||
|
VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
|
||||||
|
|
||||||
|
***************************************************************************
|
||||||
|
* *
|
||||||
|
* FreeRTOS provides completely free yet professionally developed, *
|
||||||
|
* robust, strictly quality controlled, supported, and cross *
|
||||||
|
* platform software that has become a de facto standard. *
|
||||||
|
* *
|
||||||
|
* Help yourself get started quickly and support the FreeRTOS *
|
||||||
|
* project by purchasing a FreeRTOS tutorial book, reference *
|
||||||
|
* manual, or both from: http://www.FreeRTOS.org/Documentation *
|
||||||
|
* *
|
||||||
|
* Thank you! *
|
||||||
|
* *
|
||||||
|
***************************************************************************
|
||||||
|
|
||||||
|
This file is part of the FreeRTOS distribution.
|
||||||
|
|
||||||
|
FreeRTOS is free software; you can redistribute it and/or modify it under
|
||||||
|
the terms of the GNU General Public License (version 2) as published by the
|
||||||
|
Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception.
|
||||||
|
|
||||||
|
>>! NOTE: The modification to the GPL is included to allow you to distribute
|
||||||
|
>>! a combined work that includes FreeRTOS without being obliged to provide
|
||||||
|
>>! the source code for proprietary components outside of the FreeRTOS
|
||||||
|
>>! kernel.
|
||||||
|
|
||||||
|
FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||||
|
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||||
|
FOR A PARTICULAR PURPOSE. Full license text is available from the following
|
||||||
|
link: http://www.freertos.org/a00114.html
|
||||||
|
|
||||||
|
1 tab == 4 spaces!
|
||||||
|
|
||||||
|
***************************************************************************
|
||||||
|
* *
|
||||||
|
* Having a problem? Start by reading the FAQ "My application does *
|
||||||
|
* not run, what could be wrong?" *
|
||||||
|
* *
|
||||||
|
* http://www.FreeRTOS.org/FAQHelp.html *
|
||||||
|
* *
|
||||||
|
***************************************************************************
|
||||||
|
|
||||||
|
http://www.FreeRTOS.org - Documentation, books, training, latest versions,
|
||||||
|
license and Real Time Engineers Ltd. contact details.
|
||||||
|
|
||||||
|
http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,
|
||||||
|
including FreeRTOS+Trace - an indispensable productivity tool, a DOS
|
||||||
|
compatible FAT file system, and our tiny thread aware UDP/IP stack.
|
||||||
|
|
||||||
|
http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High
|
||||||
|
Integrity Systems to sell under the OpenRTOS brand. Low cost OpenRTOS
|
||||||
|
licenses offer ticketed support, indemnification and middleware.
|
||||||
|
|
||||||
|
http://www.SafeRTOS.com - High Integrity Systems also provide a safety
|
||||||
|
engineered and independently SIL3 certified version for use in safety and
|
||||||
|
mission critical applications that require provable dependability.
|
||||||
|
|
||||||
|
1 tab == 4 spaces!
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef FREERTOS_CONFIG_H
|
||||||
|
#define FREERTOS_CONFIG_H
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------
|
||||||
|
* Application specific definitions.
|
||||||
|
*
|
||||||
|
* These definitions should be adjusted for your particular hardware and
|
||||||
|
* application requirements.
|
||||||
|
*
|
||||||
|
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE
|
||||||
|
* FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE.
|
||||||
|
*
|
||||||
|
* See http://www.freertos.org/a00110.html.
|
||||||
|
*----------------------------------------------------------*/
|
||||||
|
|
||||||
|
/* Ensure stdint is only used by the compiler, and not the assembler. */
|
||||||
|
#ifdef __ICCARM__
|
||||||
|
#include <stdint.h>
|
||||||
|
extern uint32_t SystemCoreClock;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define configUSE_PREEMPTION 1
|
||||||
|
#define configUSE_PORT_OPTIMISED_TASK_SELECTION 1
|
||||||
|
#define configUSE_IDLE_HOOK 1
|
||||||
|
#define configUSE_TICK_HOOK 1
|
||||||
|
#define configCPU_CLOCK_HZ ( SystemCoreClock )
|
||||||
|
#define configTICK_RATE_HZ ( ( portTickType ) 1000 )
|
||||||
|
#define configMAX_PRIORITIES ( 5 )
|
||||||
|
#define configMINIMAL_STACK_SIZE ( ( unsigned short ) 70 )
|
||||||
|
#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 10 * 1024 ) )
|
||||||
|
#define configMAX_TASK_NAME_LEN ( 16 )
|
||||||
|
#define configUSE_TRACE_FACILITY 1
|
||||||
|
#define configUSE_16_BIT_TICKS 0
|
||||||
|
#define configIDLE_SHOULD_YIELD 1
|
||||||
|
#define configUSE_MUTEXES 1
|
||||||
|
#define configQUEUE_REGISTRY_SIZE 5
|
||||||
|
#define configCHECK_FOR_STACK_OVERFLOW 2
|
||||||
|
#define configUSE_RECURSIVE_MUTEXES 0
|
||||||
|
#define configUSE_MALLOC_FAILED_HOOK 1
|
||||||
|
#define configUSE_APPLICATION_TASK_TAG 0
|
||||||
|
|
||||||
|
/* Co-routine definitions. */
|
||||||
|
#define configUSE_CO_ROUTINES 0
|
||||||
|
#define configMAX_CO_ROUTINE_PRIORITIES ( 2 )
|
||||||
|
|
||||||
|
/* Set the following definitions to 1 to include the API function, or zero
|
||||||
|
to exclude the API function. */
|
||||||
|
|
||||||
|
#define INCLUDE_vTaskPrioritySet 1
|
||||||
|
#define INCLUDE_uxTaskPriorityGet 1
|
||||||
|
#define INCLUDE_vTaskDelete 1
|
||||||
|
#define INCLUDE_vTaskCleanUpResources 0
|
||||||
|
#define INCLUDE_vTaskSuspend 1
|
||||||
|
#define INCLUDE_vTaskDelayUntil 1
|
||||||
|
#define INCLUDE_vTaskDelay 1
|
||||||
|
|
||||||
|
/* Use the system definition, if there is one */
|
||||||
|
#ifdef __NVIC_PRIO_BITS
|
||||||
|
#define configPRIO_BITS __NVIC_PRIO_BITS
|
||||||
|
#else
|
||||||
|
#define configPRIO_BITS 4 /* 15 priority levels */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define configLIBRARY_LOWEST_INTERRUPT_PRIORITY 15
|
||||||
|
#define configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY 5
|
||||||
|
|
||||||
|
/* The lowest priority. */
|
||||||
|
#define configKERNEL_INTERRUPT_PRIORITY ( configLIBRARY_LOWEST_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) )
|
||||||
|
/* Priority 5, or 95 as only the top four bits are implemented. */
|
||||||
|
/* !!!! configMAX_SYSCALL_INTERRUPT_PRIORITY must not be set to zero !!!!
|
||||||
|
See http://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html. */
|
||||||
|
#define configMAX_SYSCALL_INTERRUPT_PRIORITY ( configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) )
|
||||||
|
|
||||||
|
/* Run time stats related macros. */
|
||||||
|
#define configGENERATE_RUN_TIME_STATS 0
|
||||||
|
|
||||||
|
/* Definitions that map the FreeRTOS port interrupt handlers to their CMSIS
|
||||||
|
standard names. */
|
||||||
|
#define vPortSVCHandler SVC_Handler
|
||||||
|
#define xPortPendSVHandler PendSV_Handler
|
||||||
|
#define xPortSysTickHandler SysTick_Handler
|
||||||
|
|
||||||
|
#endif /* FREERTOS_CONFIG_H */
|
||||||
|
|
|
@ -1,3 +1,436 @@
|
||||||
|
/*
|
||||||
|
FreeRTOS V7.6.0 - Copyright (C) 2013 Real Time Engineers Ltd.
|
||||||
|
All rights reserved
|
||||||
|
|
||||||
|
VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
|
||||||
|
|
||||||
|
***************************************************************************
|
||||||
|
* *
|
||||||
|
* FreeRTOS provides completely free yet professionally developed, *
|
||||||
|
* robust, strictly quality controlled, supported, and cross *
|
||||||
|
* platform software that has become a de facto standard. *
|
||||||
|
* *
|
||||||
|
* Help yourself get started quickly and support the FreeRTOS *
|
||||||
|
* project by purchasing a FreeRTOS tutorial book, reference *
|
||||||
|
* manual, or both from: http://www.FreeRTOS.org/Documentation *
|
||||||
|
* *
|
||||||
|
* Thank you! *
|
||||||
|
* *
|
||||||
|
***************************************************************************
|
||||||
|
|
||||||
|
This file is part of the FreeRTOS distribution.
|
||||||
|
|
||||||
|
FreeRTOS is free software; you can redistribute it and/or modify it under
|
||||||
|
the terms of the GNU General Public License (version 2) as published by the
|
||||||
|
Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception.
|
||||||
|
|
||||||
|
>>! NOTE: The modification to the GPL is included to allow you to distribute
|
||||||
|
>>! a combined work that includes FreeRTOS without being obliged to provide
|
||||||
|
>>! the source code for proprietary components outside of the FreeRTOS
|
||||||
|
>>! kernel.
|
||||||
|
|
||||||
|
FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||||
|
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||||
|
FOR A PARTICULAR PURPOSE. Full license text is available from the following
|
||||||
|
link: http://www.freertos.org/a00114.html
|
||||||
|
|
||||||
|
1 tab == 4 spaces!
|
||||||
|
|
||||||
|
***************************************************************************
|
||||||
|
* *
|
||||||
|
* Having a problem? Start by reading the FAQ "My application does *
|
||||||
|
* not run, what could be wrong?" *
|
||||||
|
* *
|
||||||
|
* http://www.FreeRTOS.org/FAQHelp.html *
|
||||||
|
* *
|
||||||
|
***************************************************************************
|
||||||
|
|
||||||
|
http://www.FreeRTOS.org - Documentation, books, training, latest versions,
|
||||||
|
license and Real Time Engineers Ltd. contact details.
|
||||||
|
|
||||||
|
http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,
|
||||||
|
including FreeRTOS+Trace - an indispensable productivity tool, a DOS
|
||||||
|
compatible FAT file system, and our tiny thread aware UDP/IP stack.
|
||||||
|
|
||||||
|
http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High
|
||||||
|
Integrity Systems to sell under the OpenRTOS brand. Low cost OpenRTOS
|
||||||
|
licenses offer ticketed support, indemnification and middleware.
|
||||||
|
|
||||||
|
http://www.SafeRTOS.com - High Integrity Systems also provide a safety
|
||||||
|
engineered and independently SIL3 certified version for use in safety and
|
||||||
|
mission critical applications that require provable dependability.
|
||||||
|
|
||||||
|
1 tab == 4 spaces!
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
FreeRTOS V7.6.0 - Copyright (C) 2013 Real Time Engineers Ltd.
|
||||||
|
All rights reserved
|
||||||
|
|
||||||
|
VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
|
||||||
|
|
||||||
|
***************************************************************************
|
||||||
|
* *
|
||||||
|
* FreeRTOS provides completely free yet professionally developed, *
|
||||||
|
* robust, strictly quality controlled, supported, and cross *
|
||||||
|
* platform software that has become a de facto standard. *
|
||||||
|
* *
|
||||||
|
* Help yourself get started quickly and support the FreeRTOS *
|
||||||
|
* project by purchasing a FreeRTOS tutorial book, reference *
|
||||||
|
* manual, or both from: http://www.FreeRTOS.org/Documentation *
|
||||||
|
* *
|
||||||
|
* Thank you! *
|
||||||
|
* *
|
||||||
|
***************************************************************************
|
||||||
|
|
||||||
|
This file is part of the FreeRTOS distribution.
|
||||||
|
|
||||||
|
FreeRTOS is free software; you can redistribute it and/or modify it under
|
||||||
|
the terms of the GNU General Public License (version 2) as published by the
|
||||||
|
Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception.
|
||||||
|
|
||||||
|
>>! NOTE: The modification to the GPL is included to allow you to distribute
|
||||||
|
>>! a combined work that includes FreeRTOS without being obliged to provide
|
||||||
|
>>! the source code for proprietary components outside of the FreeRTOS
|
||||||
|
>>! kernel.
|
||||||
|
|
||||||
|
FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||||
|
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||||
|
FOR A PARTICULAR PURPOSE. Full license text is available from the following
|
||||||
|
link: http://www.freertos.org/a00114.html
|
||||||
|
|
||||||
|
1 tab == 4 spaces!
|
||||||
|
|
||||||
|
***************************************************************************
|
||||||
|
* *
|
||||||
|
* Having a problem? Start by reading the FAQ "My application does *
|
||||||
|
* not run, what could be wrong?" *
|
||||||
|
* *
|
||||||
|
* http://www.FreeRTOS.org/FAQHelp.html *
|
||||||
|
* *
|
||||||
|
***************************************************************************
|
||||||
|
|
||||||
|
http://www.FreeRTOS.org - Documentation, books, training, latest versions,
|
||||||
|
license and Real Time Engineers Ltd. contact details.
|
||||||
|
|
||||||
|
http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,
|
||||||
|
including FreeRTOS+Trace - an indispensable productivity tool, a DOS
|
||||||
|
compatible FAT file system, and our tiny thread aware UDP/IP stack.
|
||||||
|
|
||||||
|
http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High
|
||||||
|
Integrity Systems to sell under the OpenRTOS brand. Low cost OpenRTOS
|
||||||
|
licenses offer ticketed support, indemnification and middleware.
|
||||||
|
|
||||||
|
http://www.SafeRTOS.com - High Integrity Systems also provide a safety
|
||||||
|
engineered and independently SIL3 certified version for use in safety and
|
||||||
|
mission critical applications that require provable dependability.
|
||||||
|
|
||||||
|
1 tab == 4 spaces!
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Kernel includes. */
|
||||||
|
#include "FreeRTOS.h"
|
||||||
|
#include "task.h"
|
||||||
|
#include "queue.h"
|
||||||
|
|
||||||
|
/* ST library functions. */
|
||||||
|
#include "stm32l1xx.h"
|
||||||
|
#include "discover_board.h"
|
||||||
|
#include "discover_functions.h"
|
||||||
|
|
||||||
|
/* Priorities at which the Rx and Tx tasks are created. */
|
||||||
|
#define configQUEUE_RECEIVE_TASK_PRIORITY ( tskIDLE_PRIORITY + 1 )
|
||||||
|
#define configQUEUE_SEND_TASK_PRIORITY ( tskIDLE_PRIORITY + 2 )
|
||||||
|
|
||||||
|
/* The number of items the queue can hold. This is 1 as the Rx task will
|
||||||
|
remove items as they are added so the Tx task should always find the queue
|
||||||
|
empty. */
|
||||||
|
#define mainQUEUE_LENGTH ( 1 )
|
||||||
|
|
||||||
|
/* The LED used to indicate that a value has been received on the queue. */
|
||||||
|
#define mainQUEUE_LED ( 0 )
|
||||||
|
|
||||||
|
/* The rate at which the Tx task sends to the queue. */
|
||||||
|
#define mainTX_DELAY ( 500UL / portTICK_RATE_MS )
|
||||||
|
|
||||||
|
/* A block time of zero simply means "don't block". */
|
||||||
|
#define mainDONT_BLOCK ( 0 )
|
||||||
|
|
||||||
|
/* The value that is sent from the Tx task to the Rx task on the queue. */
|
||||||
|
#define mainQUEUED_VALUE ( 100UL )
|
||||||
|
|
||||||
|
/* The length of time the LED will remain on for. It is on just long enough
|
||||||
|
to be able to see with the human eye so as not to distort the power readings too
|
||||||
|
much. */
|
||||||
|
#define mainLED_TOGGLE_DELAY ( 20 / portTICK_RATE_MS )
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The Rx and Tx tasks as described at the top of this file.
|
||||||
|
*/
|
||||||
|
static void prvQueueReceiveTask( void *pvParameters );
|
||||||
|
static void prvQueueSendTask( void *pvParameters );
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
/* The queue to pass data from the Tx task to the Rx task. */
|
||||||
|
static xQueueHandle xQueue = NULL;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Set up the hardware ready to run this demo.
|
||||||
|
*/
|
||||||
|
static void prvSetupHardware( void );
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
int main( void )
|
||||||
|
{
|
||||||
|
prvSetupHardware();
|
||||||
|
|
||||||
|
/* Create the queue. */
|
||||||
|
xQueue = xQueueCreate( mainQUEUE_LENGTH, sizeof( unsigned long ) );
|
||||||
|
configASSERT( xQueue );
|
||||||
|
|
||||||
|
/* Start the two tasks as described at the top of this file. */
|
||||||
|
xTaskCreate( prvQueueReceiveTask, ( const signed char * const ) "Rx", configMINIMAL_STACK_SIZE, NULL, configQUEUE_RECEIVE_TASK_PRIORITY, NULL );
|
||||||
|
xTaskCreate( prvQueueSendTask, ( const signed char * const ) "TX", configMINIMAL_STACK_SIZE, NULL, configQUEUE_SEND_TASK_PRIORITY, NULL );
|
||||||
|
|
||||||
|
/* Start the scheduler running running. */
|
||||||
|
vTaskStartScheduler();
|
||||||
|
|
||||||
|
/* If all is well the next line of code will not be reached as the
|
||||||
|
scheduler will be running. If the next line is reached then it is likely
|
||||||
|
there was insufficient FreeRTOS heap available for the idle task and/or
|
||||||
|
timer task to be created. See http://www.freertos.org/a00111.html. */
|
||||||
|
for( ;; );
|
||||||
|
}
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
static void prvQueueSendTask( void *pvParameters )
|
||||||
|
{
|
||||||
|
const unsigned long ulValueToSend = mainQUEUED_VALUE;
|
||||||
|
|
||||||
|
/* Remove compiler warning about unused parameter. */
|
||||||
|
( void ) pvParameters;
|
||||||
|
|
||||||
|
for( ;; )
|
||||||
|
{
|
||||||
|
/* Place this task into the blocked state until it is time to run again.
|
||||||
|
The kernel will place the MCU into the Retention low power sleep state
|
||||||
|
when the idle task next runs. */
|
||||||
|
vTaskDelay( mainTX_DELAY );
|
||||||
|
|
||||||
|
/* Send to the queue - causing the queue receive task to flash its LED.
|
||||||
|
It should not be necessary to block on the queue send because the Rx
|
||||||
|
task will already have removed the last queued item. */
|
||||||
|
xQueueSend( xQueue, &ulValueToSend, mainDONT_BLOCK );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
static void prvQueueReceiveTask( void *pvParameters )
|
||||||
|
{
|
||||||
|
unsigned long ulReceivedValue;
|
||||||
|
|
||||||
|
/* Remove compiler warning about unused parameter. */
|
||||||
|
( void ) pvParameters;
|
||||||
|
|
||||||
|
for( ;; )
|
||||||
|
{
|
||||||
|
/* Wait until something arrives in the queue. */
|
||||||
|
xQueueReceive( xQueue, &ulReceivedValue, portMAX_DELAY );
|
||||||
|
|
||||||
|
/* To get here something must have arrived, but is it the expected
|
||||||
|
value? If it is, turn the LED on for a short while. */
|
||||||
|
if( ulReceivedValue == mainQUEUED_VALUE )
|
||||||
|
{
|
||||||
|
GPIO_HIGH( LD_GPIO_PORT, LD_GREEN_GPIO_PIN );
|
||||||
|
vTaskDelay( mainLED_TOGGLE_DELAY );
|
||||||
|
GPIO_LOW( LD_GPIO_PORT, LD_GREEN_GPIO_PIN );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
static void prvSetupHardware( void )
|
||||||
|
{
|
||||||
|
/* GPIO, EXTI and NVIC Init structure declaration */
|
||||||
|
GPIO_InitTypeDef GPIO_InitStructure;
|
||||||
|
EXTI_InitTypeDef EXTI_InitStructure;
|
||||||
|
NVIC_InitTypeDef NVIC_InitStructure;
|
||||||
|
void SystemCoreClockUpdate( void );
|
||||||
|
|
||||||
|
SystemCoreClockUpdate();
|
||||||
|
|
||||||
|
/* Essential on STM32 Cortex-M devices. */
|
||||||
|
NVIC_PriorityGroupConfig( NVIC_PriorityGroup_4 );
|
||||||
|
|
||||||
|
/* Enable HSI Clock */
|
||||||
|
RCC_HSICmd(ENABLE);
|
||||||
|
|
||||||
|
/*!< Wait till HSI is ready */
|
||||||
|
while( RCC_GetFlagStatus( RCC_FLAG_HSIRDY ) == RESET );
|
||||||
|
|
||||||
|
/* Set HSI as sys clock*/
|
||||||
|
RCC_SYSCLKConfig( RCC_SYSCLKSource_HSI );
|
||||||
|
|
||||||
|
/* Set MSI clock range to ~4.194MHz*/
|
||||||
|
RCC_MSIRangeConfig( RCC_MSIRange_6 );
|
||||||
|
|
||||||
|
/* Enable the GPIOs clocks */
|
||||||
|
RCC_AHBPeriphClockCmd( RCC_AHBPeriph_GPIOA | RCC_AHBPeriph_GPIOB | RCC_AHBPeriph_GPIOC| RCC_AHBPeriph_GPIOD| RCC_AHBPeriph_GPIOE| RCC_AHBPeriph_GPIOH, ENABLE );
|
||||||
|
|
||||||
|
/* Enable comparator, PWR mngt clocks */
|
||||||
|
RCC_APB1PeriphClockCmd( RCC_APB1Periph_COMP | RCC_APB1Periph_PWR,ENABLE );
|
||||||
|
|
||||||
|
/* Enable ADC & SYSCFG clocks */
|
||||||
|
RCC_APB2PeriphClockCmd( RCC_APB2Periph_SYSCFG , ENABLE );
|
||||||
|
|
||||||
|
/* Allow access to the RTC */
|
||||||
|
PWR_RTCAccessCmd( ENABLE );
|
||||||
|
|
||||||
|
/* Reset RTC Backup Domain */
|
||||||
|
RCC_RTCResetCmd( ENABLE );
|
||||||
|
RCC_RTCResetCmd( DISABLE );
|
||||||
|
|
||||||
|
/* LSE Enable */
|
||||||
|
RCC_LSEConfig( RCC_LSE_ON );
|
||||||
|
|
||||||
|
/* Wait until LSE is ready */
|
||||||
|
while( RCC_GetFlagStatus( RCC_FLAG_LSERDY ) == RESET );
|
||||||
|
|
||||||
|
/* RTC Clock Source Selection */
|
||||||
|
RCC_RTCCLKConfig( RCC_RTCCLKSource_LSE );
|
||||||
|
|
||||||
|
/* Enable the RTC */
|
||||||
|
RCC_RTCCLKCmd( ENABLE );
|
||||||
|
|
||||||
|
/* Disable HSE */
|
||||||
|
RCC_HSEConfig( RCC_HSE_OFF );
|
||||||
|
|
||||||
|
if( RCC_GetFlagStatus( RCC_FLAG_HSERDY ) != RESET )
|
||||||
|
{
|
||||||
|
/* Stay in infinite loop if HSE is not disabled*/
|
||||||
|
while( 1 );
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Set internal voltage regulator to 1.8V */
|
||||||
|
PWR_VoltageScalingConfig( PWR_VoltageScaling_Range1 );
|
||||||
|
|
||||||
|
/* Wait Until the Voltage Regulator is ready */
|
||||||
|
while( PWR_GetFlagStatus( PWR_FLAG_VOS ) != RESET );
|
||||||
|
|
||||||
|
/* Configure User Button pin as input */
|
||||||
|
GPIO_InitStructure.GPIO_Pin = USERBUTTON_GPIO_PIN;
|
||||||
|
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
|
||||||
|
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
|
||||||
|
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_40MHz;
|
||||||
|
GPIO_Init( USERBUTTON_GPIO_PORT, &GPIO_InitStructure );
|
||||||
|
|
||||||
|
/* Select User Button pin as input source for EXTI Line */
|
||||||
|
SYSCFG_EXTILineConfig( EXTI_PortSourceGPIOA,EXTI_PinSource0 );
|
||||||
|
|
||||||
|
/* Configure EXT1 Line 0 in interrupt mode trigged on Rising edge */
|
||||||
|
EXTI_InitStructure.EXTI_Line = EXTI_Line0 ; /* PA0 for User button AND IDD_WakeUP */
|
||||||
|
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
|
||||||
|
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
|
||||||
|
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
|
||||||
|
EXTI_Init( &EXTI_InitStructure );
|
||||||
|
|
||||||
|
/* Enable and set EXTI0 Interrupt to the lowest priority */
|
||||||
|
NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;
|
||||||
|
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = configLIBRARY_LOWEST_INTERRUPT_PRIORITY;
|
||||||
|
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
|
||||||
|
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
|
||||||
|
NVIC_Init( &NVIC_InitStructure );
|
||||||
|
|
||||||
|
/* Configure the LED_pin as output push-pull for LD3 & LD4 usage */
|
||||||
|
GPIO_InitStructure.GPIO_Pin = LD_GREEN_GPIO_PIN | LD_BLUE_GPIO_PIN;
|
||||||
|
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
|
||||||
|
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
|
||||||
|
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
|
||||||
|
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
|
||||||
|
GPIO_Init( LD_GPIO_PORT, &GPIO_InitStructure );
|
||||||
|
|
||||||
|
/* Force a low level on LEDs */
|
||||||
|
GPIO_LOW( LD_GPIO_PORT, LD_GREEN_GPIO_PIN );
|
||||||
|
GPIO_LOW( LD_GPIO_PORT, LD_BLUE_GPIO_PIN );
|
||||||
|
}
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
void vApplicationMallocFailedHook( void )
|
||||||
|
{
|
||||||
|
/* vApplicationMallocFailedHook() will only be called if
|
||||||
|
configUSE_MALLOC_FAILED_HOOK is set to 1 in FreeRTOSConfig.h. It is a hook
|
||||||
|
function that will get called if a call to pvPortMalloc() fails.
|
||||||
|
pvPortMalloc() is called internally by the kernel whenever a task, queue,
|
||||||
|
timer or semaphore is created. It is also called by various parts of the
|
||||||
|
demo application. If heap_1.c or heap_2.c are used, then the size of the
|
||||||
|
heap available to pvPortMalloc() is defined by configTOTAL_HEAP_SIZE in
|
||||||
|
FreeRTOSConfig.h, and the xPortGetFreeHeapSize() API function can be used
|
||||||
|
to query the size of free heap space that remains (although it does not
|
||||||
|
provide information on how the remaining heap might be fragmented). */
|
||||||
|
taskDISABLE_INTERRUPTS();
|
||||||
|
for( ;; );
|
||||||
|
}
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
void vApplicationIdleHook( void )
|
||||||
|
{
|
||||||
|
/* vApplicationIdleHook() will only be called if configUSE_IDLE_HOOK is set
|
||||||
|
to 1 in FreeRTOSConfig.h. It will be called on each iteration of the idle
|
||||||
|
task. It is essential that code added to this hook function never attempts
|
||||||
|
to block in any way (for example, call xQueueReceive() with a block time
|
||||||
|
specified, or call vTaskDelay()). If the application makes use of the
|
||||||
|
vTaskDelete() API function (as this demo application does) then it is also
|
||||||
|
important that vApplicationIdleHook() is permitted to return to its calling
|
||||||
|
function, because it is the responsibility of the idle task to clean up
|
||||||
|
memory allocated by the kernel to any task that has since been deleted. */
|
||||||
|
}
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
void vApplicationStackOverflowHook( xTaskHandle pxTask, signed char *pcTaskName )
|
||||||
|
{
|
||||||
|
( void ) pcTaskName;
|
||||||
|
( void ) pxTask;
|
||||||
|
|
||||||
|
/* Run time stack overflow checking is performed if
|
||||||
|
configCHECK_FOR_STACK_OVERFLOW is defined to 1 or 2. This hook
|
||||||
|
function is called if a stack overflow is detected. */
|
||||||
|
taskDISABLE_INTERRUPTS();
|
||||||
|
for( ;; );
|
||||||
|
}
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
void vApplicationTickHook( void )
|
||||||
|
{
|
||||||
|
/* This function will be called by each tick interrupt if
|
||||||
|
configUSE_TICK_HOOK is set to 1 in FreeRTOSConfig.h. User code can be
|
||||||
|
added here, but the tick hook is called from an interrupt context, so
|
||||||
|
code must not attempt to block, and only the interrupt safe FreeRTOS API
|
||||||
|
functions can be used (those that end in FromISR()). */
|
||||||
|
}
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
void vAssertCalled( void )
|
||||||
|
{
|
||||||
|
volatile unsigned long ul = 0;
|
||||||
|
|
||||||
|
taskENTER_CRITICAL();
|
||||||
|
{
|
||||||
|
/* Set ul to a non-zero value using the debugger to step out of this
|
||||||
|
function. */
|
||||||
|
while( ul == 0 )
|
||||||
|
{
|
||||||
|
__asm volatile( "NOP" );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
taskEXIT_CRITICAL();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#if 0
|
||||||
/**
|
/**
|
||||||
******************************************************************************
|
******************************************************************************
|
||||||
* @file main.c
|
* @file main.c
|
||||||
|
@ -524,4 +957,11 @@ void assert_failed(uint8_t* file, uint32_t line)
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
void vApplicationStackOverflowHook( void )
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
|
/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -105,17 +105,6 @@ void UsageFault_Handler(void)
|
||||||
while (1);
|
while (1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief This function handles SVCall exception.
|
|
||||||
* @param None
|
|
||||||
* @retval None
|
|
||||||
*/
|
|
||||||
void SVC_Handler(void)
|
|
||||||
{
|
|
||||||
/* Go to infinite loop when Hard Fault exception occurs */
|
|
||||||
while (1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief This function handles Debug Monitor exception.
|
* @brief This function handles Debug Monitor exception.
|
||||||
* @param None
|
* @param None
|
||||||
|
@ -127,141 +116,9 @@ void DebugMon_Handler(void)
|
||||||
while (1);
|
while (1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief This function handles PendSVC exception.
|
|
||||||
* @param None
|
|
||||||
* @retval None
|
|
||||||
*/
|
|
||||||
void PendSV_Handler(void)
|
|
||||||
{
|
|
||||||
/* Go to infinite loop when Hard Fault exception occurs */
|
|
||||||
while (1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief This function handles SysTick interrupts.
|
|
||||||
* @param None
|
|
||||||
* @retval None
|
|
||||||
*/
|
|
||||||
void SysTick_Handler(void)
|
|
||||||
{
|
|
||||||
// disableGlobalInterrupts();
|
|
||||||
// TimingDelay_Decrement();
|
|
||||||
// enableGlobalInterrupts();
|
|
||||||
|
|
||||||
TSL_tim_ProcessIT();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief This function handles external interrupts generated by UserButton.
|
|
||||||
* @param None
|
|
||||||
* @retval None
|
|
||||||
*/
|
|
||||||
void UserButtonHandler (void)
|
|
||||||
{
|
|
||||||
uint32_t i=0;
|
|
||||||
|
|
||||||
/* set KeyPressed Flag */
|
|
||||||
KeyPressed = TRUE;
|
|
||||||
|
|
||||||
/* check if user button is pressed for 4 seconds (approx.) */
|
|
||||||
while ((USERBUTTON_GPIO_PORT->IDR & USERBUTTON_GPIO_PIN) == 1 )
|
|
||||||
{
|
|
||||||
i++;
|
|
||||||
if (i == 0x0100000)
|
|
||||||
{
|
|
||||||
/* set autotest flag in E²prom*/
|
|
||||||
AUTOTEST(TRUE) ;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* if autotest is set in E²prom exit interrupt handler */
|
|
||||||
if (self_test)
|
|
||||||
return ;
|
|
||||||
|
|
||||||
/* Go to next state of state machine*/
|
|
||||||
state_machine++;
|
|
||||||
if (state_machine == MAX_STATE)
|
|
||||||
state_machine = STATE_VREF;
|
|
||||||
|
|
||||||
/* To update Bar graph & leds*/
|
|
||||||
switch (state_machine)
|
|
||||||
{
|
|
||||||
case STATE_VREF:
|
|
||||||
GPIO_HIGH(LD_GPIO_PORT,LD_GREEN_GPIO_PIN);
|
|
||||||
GPIO_LOW(LD_GPIO_PORT,LD_BLUE_GPIO_PIN);
|
|
||||||
BAR0_OFF;
|
|
||||||
BAR1_OFF;
|
|
||||||
BAR2_OFF;
|
|
||||||
BAR3_OFF;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case STATE_SLIDER_VALUE:
|
|
||||||
GPIO_LOW(LD_GPIO_PORT,LD_BLUE_GPIO_PIN);
|
|
||||||
GPIO_HIGH(LD_GPIO_PORT,LD_GREEN_GPIO_PIN);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case STATE_SLIDER_BUTTON:
|
|
||||||
GPIO_LOW(LD_GPIO_PORT,LD_GREEN_GPIO_PIN);
|
|
||||||
GPIO_HIGH(LD_GPIO_PORT,LD_BLUE_GPIO_PIN);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case STATE_ICC_RUN:
|
|
||||||
GPIO_LOW(LD_GPIO_PORT,LD_GREEN_GPIO_PIN);
|
|
||||||
GPIO_LOW(LD_GPIO_PORT,LD_BLUE_GPIO_PIN);
|
|
||||||
BAR0_ON;
|
|
||||||
BAR1_OFF;
|
|
||||||
BAR2_OFF;
|
|
||||||
BAR3_OFF;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case STATE_ICC_LP_RUN:
|
|
||||||
GPIO_LOW(LD_GPIO_PORT,LD_GREEN_GPIO_PIN);
|
|
||||||
GPIO_LOW(LD_GPIO_PORT,LD_BLUE_GPIO_PIN);
|
|
||||||
BAR0_ON;
|
|
||||||
BAR1_ON;
|
|
||||||
BAR2_OFF;
|
|
||||||
BAR3_OFF;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case STATE_ICC_STOP:
|
|
||||||
GPIO_LOW(LD_GPIO_PORT,LD_GREEN_GPIO_PIN);
|
|
||||||
GPIO_LOW(LD_GPIO_PORT,LD_BLUE_GPIO_PIN);
|
|
||||||
BAR0_ON;
|
|
||||||
BAR1_ON;
|
|
||||||
BAR2_ON;
|
|
||||||
BAR3_OFF;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case STATE_ICC_STBY:
|
|
||||||
GPIO_LOW(LD_GPIO_PORT,LD_GREEN_GPIO_PIN);
|
|
||||||
GPIO_LOW(LD_GPIO_PORT,LD_BLUE_GPIO_PIN);
|
|
||||||
BAR0_ON;
|
|
||||||
BAR1_ON;
|
|
||||||
BAR2_ON;
|
|
||||||
BAR3_ON;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void EXTI0_IRQHandler(void)
|
void EXTI0_IRQHandler(void)
|
||||||
{
|
{
|
||||||
/* Disable general interrupts */
|
|
||||||
disableGlobalInterrupts();
|
|
||||||
|
|
||||||
/* UserButton usage activated*/
|
|
||||||
if (UserButton)
|
|
||||||
{
|
|
||||||
UserButtonHandler();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/*Idd_Wakeup detected */
|
|
||||||
Idd_WakeUP = TRUE;
|
|
||||||
}
|
|
||||||
EXTI_ClearITPendingBit(EXTI_Line0);
|
EXTI_ClearITPendingBit(EXTI_Line0);
|
||||||
enableGlobalInterrupts();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue