mirror of
https://github.com/FreeRTOS/FreeRTOS-Kernel.git
synced 2025-04-19 21:11:57 -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
|
||||||
|
@ -17,7 +450,7 @@
|
||||||
*
|
*
|
||||||
* <h2><center>© COPYRIGHT 2011 STMicroelectronics</center></h2>
|
* <h2><center>© COPYRIGHT 2011 STMicroelectronics</center></h2>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* Includes ------------------------------------------------------------------*/
|
/* Includes ------------------------------------------------------------------*/
|
||||||
|
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
|
@ -34,7 +467,7 @@ extern uint8_t t_bar[2]; /* LCD bar graph: used for displaying acti
|
||||||
extern bool self_test; /* Auto_test activation flag: set by interrupt handler if user button is pressed for a few seconds */
|
extern bool self_test; /* Auto_test activation flag: set by interrupt handler if user button is pressed for a few seconds */
|
||||||
extern bool Idd_WakeUP; /* */
|
extern bool Idd_WakeUP; /* */
|
||||||
extern volatile bool KeyPressed; /* */
|
extern volatile bool KeyPressed; /* */
|
||||||
extern bool UserButton; /* Set by interrupt handler to indicate that user button is pressed */
|
extern bool UserButton; /* Set by interrupt handler to indicate that user button is pressed */
|
||||||
uint8_t state_machine; /* Machine status used by main() wich indicats the active function, set by user button in interrupt handler */
|
uint8_t state_machine; /* Machine status used by main() wich indicats the active function, set by user button in interrupt handler */
|
||||||
uint16_t Int_CurrentSTBY; /* */
|
uint16_t Int_CurrentSTBY; /* */
|
||||||
|
|
||||||
|
@ -51,41 +484,41 @@ uint16_t Int_CurrentSTBY; /* */
|
||||||
* @par Required preconditions: None
|
* @par Required preconditions: None
|
||||||
*/
|
*/
|
||||||
int main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
bool StanbyWakeUp ;
|
bool StanbyWakeUp ;
|
||||||
float Current_STBY;
|
float Current_STBY;
|
||||||
__IO uint32_t BOROptionBytes = 0;
|
__IO uint32_t BOROptionBytes = 0;
|
||||||
|
|
||||||
/*!< At this stage the microcontroller clock setting is already configured,
|
/*!< At this stage the microcontroller clock setting is already configured,
|
||||||
this is done through SystemInit() function which is called from startup
|
this is done through SystemInit() function which is called from startup
|
||||||
file (startup_stm32l1xx_md.s) before to branch to application main.
|
file (startup_stm32l1xx_md.s) before to branch to application main.
|
||||||
To reconfigure the default setting of SystemInit() function, refer to
|
To reconfigure the default setting of SystemInit() function, refer to
|
||||||
system_stm32l1xx.c file
|
system_stm32l1xx.c file
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* store Standby Current*/
|
/* store Standby Current*/
|
||||||
Int_CurrentSTBY = Current_Measurement();
|
Int_CurrentSTBY = Current_Measurement();
|
||||||
|
|
||||||
/* Check if the StandBy flag is set */
|
/* Check if the StandBy flag is set */
|
||||||
if (PWR_GetFlagStatus(PWR_FLAG_SB) != RESET)
|
if (PWR_GetFlagStatus(PWR_FLAG_SB) != RESET)
|
||||||
{
|
{
|
||||||
/* System resumed from STANDBY mode */
|
/* System resumed from STANDBY mode */
|
||||||
/* Clear StandBy flag */
|
/* Clear StandBy flag */
|
||||||
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);
|
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);
|
||||||
PWR_ClearFlag(PWR_FLAG_SB);
|
PWR_ClearFlag(PWR_FLAG_SB);
|
||||||
/* set StandbyWakeup indicator*/
|
/* set StandbyWakeup indicator*/
|
||||||
StanbyWakeUp = TRUE;
|
StanbyWakeUp = TRUE;
|
||||||
} else
|
} else
|
||||||
{
|
{
|
||||||
/* Reset StandbyWakeup indicator*/
|
/* Reset StandbyWakeup indicator*/
|
||||||
StanbyWakeUp = FALSE;
|
StanbyWakeUp = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef BOR_MODIFY
|
#ifdef BOR_MODIFY
|
||||||
/* Get BOR Option Bytes */
|
/* Get BOR Option Bytes */
|
||||||
BOROptionBytes = FLASH_OB_GetBOR();
|
BOROptionBytes = FLASH_OB_GetBOR();
|
||||||
|
|
||||||
if((BOROptionBytes & 0x0F) != BOR_LEVEL)
|
if((BOROptionBytes & 0x0F) != BOR_LEVEL)
|
||||||
{
|
{
|
||||||
/* Unlocks the option bytes block access */
|
/* Unlocks the option bytes block access */
|
||||||
FLASH_OB_Unlock();
|
FLASH_OB_Unlock();
|
||||||
|
@ -95,44 +528,44 @@ int main(void)
|
||||||
| FLASH_FLAG_SIZERR | FLASH_FLAG_OPTVERR);
|
| FLASH_FLAG_SIZERR | FLASH_FLAG_OPTVERR);
|
||||||
|
|
||||||
/* Select the desired V(BOR) Level ---------------------------------------*/
|
/* Select the desired V(BOR) Level ---------------------------------------*/
|
||||||
FLASH_OB_BORConfig(BOR_LEVEL);
|
FLASH_OB_BORConfig(BOR_LEVEL);
|
||||||
|
|
||||||
/* Launch the option byte loading */
|
/* Launch the option byte loading */
|
||||||
FLASH_OB_Launch();
|
FLASH_OB_Launch();
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Configure Clocks for Application need */
|
/* Configure Clocks for Application need */
|
||||||
RCC_Configuration();
|
RCC_Configuration();
|
||||||
|
|
||||||
/* Set internal voltage regulator to 1.8V */
|
/* Set internal voltage regulator to 1.8V */
|
||||||
PWR_VoltageScalingConfig(PWR_VoltageScaling_Range1);
|
PWR_VoltageScalingConfig(PWR_VoltageScaling_Range1);
|
||||||
|
|
||||||
/* Wait Until the Voltage Regulator is ready */
|
/* Wait Until the Voltage Regulator is ready */
|
||||||
while (PWR_GetFlagStatus(PWR_FLAG_VOS) != RESET) ;
|
while (PWR_GetFlagStatus(PWR_FLAG_VOS) != RESET) ;
|
||||||
|
|
||||||
/* Init I/O ports */
|
/* Init I/O ports */
|
||||||
Init_GPIOs();
|
Init_GPIOs();
|
||||||
|
|
||||||
/* Initializes ADC */
|
/* Initializes ADC */
|
||||||
ADC_Icc_Init();
|
ADC_Icc_Init();
|
||||||
|
|
||||||
/* Enable General interrupts */
|
/* Enable General interrupts */
|
||||||
enableGlobalInterrupts();
|
enableGlobalInterrupts();
|
||||||
|
|
||||||
/* Init Touch Sensing configuration */
|
/* Init Touch Sensing configuration */
|
||||||
TSL_user_Init();
|
TSL_user_Init();
|
||||||
|
|
||||||
/* Initializes the LCD glass */
|
/* Initializes the LCD glass */
|
||||||
LCD_GLASS_Init();
|
LCD_GLASS_Init();
|
||||||
|
|
||||||
/* Reset Keypressed flag used in interrupt and Scrollsentence */
|
/* Reset Keypressed flag used in interrupt and Scrollsentence */
|
||||||
KeyPressed = FALSE;
|
KeyPressed = FALSE;
|
||||||
|
|
||||||
/* user button actif */
|
/* user button actif */
|
||||||
UserButton = TRUE;
|
UserButton = TRUE;
|
||||||
|
|
||||||
/* Check if User button press at Power ON */
|
/* Check if User button press at Power ON */
|
||||||
if ((USERBUTTON_GPIO_PORT->IDR & USERBUTTON_GPIO_PIN) != 0x0)
|
if ((USERBUTTON_GPIO_PORT->IDR & USERBUTTON_GPIO_PIN) != 0x0)
|
||||||
{
|
{
|
||||||
/* Measure operational amplifier bias current and store value in E²Prom for application need*/
|
/* Measure operational amplifier bias current and store value in E²Prom for application need*/
|
||||||
|
@ -141,11 +574,11 @@ int main(void)
|
||||||
|
|
||||||
/* Standard application startup */
|
/* Standard application startup */
|
||||||
if ( !StanbyWakeUp )
|
if ( !StanbyWakeUp )
|
||||||
{
|
{
|
||||||
/* Reset autotest flag stored in memory */
|
/* Reset autotest flag stored in memory */
|
||||||
AUTOTEST(FALSE) ;
|
AUTOTEST(FALSE) ;
|
||||||
|
|
||||||
/* Display Welcome message */
|
/* Display Welcome message */
|
||||||
LCD_GLASS_ScrollSentence(message,1,SCROLL_SPEED);
|
LCD_GLASS_ScrollSentence(message,1,SCROLL_SPEED);
|
||||||
if (!KeyPressed)
|
if (!KeyPressed)
|
||||||
{
|
{
|
||||||
|
@ -156,7 +589,7 @@ int main(void)
|
||||||
TEMPO;
|
TEMPO;
|
||||||
TEMPO;
|
TEMPO;
|
||||||
TEMPO;
|
TEMPO;
|
||||||
LCD_BlinkConfig(LCD_BlinkMode_Off,LCD_BlinkFrequency_Div32);
|
LCD_BlinkConfig(LCD_BlinkMode_Off,LCD_BlinkFrequency_Div32);
|
||||||
}
|
}
|
||||||
/* Wake up from Standby or autotest */
|
/* Wake up from Standby or autotest */
|
||||||
} else {
|
} else {
|
||||||
|
@ -164,14 +597,14 @@ int main(void)
|
||||||
if (self_test)
|
if (self_test)
|
||||||
{
|
{
|
||||||
/* Wake UP: Return of RESET by Auto test */
|
/* Wake UP: Return of RESET by Auto test */
|
||||||
auto_test_part2();
|
auto_test_part2();
|
||||||
} else {
|
} else {
|
||||||
/* Wake UP: Return of RESET by Current STAND BY measurement */
|
/* Wake UP: Return of RESET by Current STAND BY measurement */
|
||||||
LCD_GLASS_ScrollSentence(" STANDBY WAKEUP",1,SCROLL_SPEED);
|
LCD_GLASS_ScrollSentence(" STANDBY WAKEUP",1,SCROLL_SPEED);
|
||||||
/* Substract bias current from operational amplifier*/
|
/* Substract bias current from operational amplifier*/
|
||||||
if ( Int_CurrentSTBY > Bias_Current )
|
if ( Int_CurrentSTBY > Bias_Current )
|
||||||
Int_CurrentSTBY -= Bias_Current;
|
Int_CurrentSTBY -= Bias_Current;
|
||||||
Current_STBY = Int_CurrentSTBY * Vdd_appli()/ADC_CONV;
|
Current_STBY = Int_CurrentSTBY * Vdd_appli()/ADC_CONV;
|
||||||
Current_STBY *= 20L;
|
Current_STBY *= 20L;
|
||||||
display_MuAmp((uint32_t)Current_STBY);
|
display_MuAmp((uint32_t)Current_STBY);
|
||||||
/* Wait for user button press to continue */
|
/* Wait for user button press to continue */
|
||||||
|
@ -179,15 +612,15 @@ int main(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* Reset KeyPress Flag */
|
/* Reset KeyPress Flag */
|
||||||
KeyPressed = FALSE;
|
KeyPressed = FALSE;
|
||||||
/* Clear LCD bars */
|
/* Clear LCD bars */
|
||||||
BAR0_OFF;
|
BAR0_OFF;
|
||||||
BAR1_OFF;
|
BAR1_OFF;
|
||||||
BAR2_OFF;
|
BAR2_OFF;
|
||||||
BAR3_OFF;
|
BAR3_OFF;
|
||||||
/* Switch off the leds*/
|
/* Switch off the leds*/
|
||||||
GPIO_HIGH(LD_GPIO_PORT,LD_GREEN_GPIO_PIN);
|
GPIO_HIGH(LD_GPIO_PORT,LD_GREEN_GPIO_PIN);
|
||||||
GPIO_LOW(LD_GPIO_PORT,LD_BLUE_GPIO_PIN);
|
GPIO_LOW(LD_GPIO_PORT,LD_BLUE_GPIO_PIN);
|
||||||
/* Set application state machine to VREF state */
|
/* Set application state machine to VREF state */
|
||||||
state_machine = STATE_VREF ;
|
state_machine = STATE_VREF ;
|
||||||
/*Until application reset*/
|
/*Until application reset*/
|
||||||
|
@ -206,7 +639,7 @@ int main(void)
|
||||||
Vref_measure();
|
Vref_measure();
|
||||||
TEMPO ;
|
TEMPO ;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
/* Slider Value State : Display the TS slider value */
|
/* Slider Value State : Display the TS slider value */
|
||||||
case STATE_SLIDER_VALUE:
|
case STATE_SLIDER_VALUE:
|
||||||
|
|
||||||
|
@ -216,16 +649,16 @@ int main(void)
|
||||||
ProcessSensors(); // Execute sensors related tasks
|
ProcessSensors(); // Execute sensors related tasks
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
/* Slider button State : Display the curent TS button pressed */
|
/* Slider button State : Display the curent TS button pressed */
|
||||||
case STATE_SLIDER_BUTTON:
|
case STATE_SLIDER_BUTTON:
|
||||||
// Execute STMTouch Driver state machine
|
// Execute STMTouch Driver state machine
|
||||||
if (TSL_user_Action() == TSL_STATUS_OK)
|
if (TSL_user_Action() == TSL_STATUS_OK)
|
||||||
{
|
{
|
||||||
ProcessSensorsButtons(); // Execute sensors related tasks
|
ProcessSensorsButtons(); // Execute sensors related tasks
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
/* ICC RUN State : ICC mesurements in Run and Sleep modes */
|
/* ICC RUN State : ICC mesurements in Run and Sleep modes */
|
||||||
case STATE_ICC_RUN:
|
case STATE_ICC_RUN:
|
||||||
LCD_GLASS_DisplayString(" RUN ");
|
LCD_GLASS_DisplayString(" RUN ");
|
||||||
|
@ -237,13 +670,13 @@ int main(void)
|
||||||
TEMPO;
|
TEMPO;
|
||||||
LCD_GLASS_DisplayString(" SLEEP ");
|
LCD_GLASS_DisplayString(" SLEEP ");
|
||||||
TEMPO;
|
TEMPO;
|
||||||
Icc_SLEEP();
|
Icc_SLEEP();
|
||||||
TEMPO;
|
TEMPO;
|
||||||
TEMPO;
|
TEMPO;
|
||||||
TEMPO;
|
TEMPO;
|
||||||
TEMPO;
|
TEMPO;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
/* ICC LOW POWER RUN State : ICC mesurements in LowPower run and LowPower Sleep modes */
|
/* ICC LOW POWER RUN State : ICC mesurements in LowPower run and LowPower Sleep modes */
|
||||||
case STATE_ICC_LP_RUN:
|
case STATE_ICC_LP_RUN:
|
||||||
LCD_GLASS_DisplayString("LP RUN");
|
LCD_GLASS_DisplayString("LP RUN");
|
||||||
|
@ -259,9 +692,9 @@ int main(void)
|
||||||
TEMPO;
|
TEMPO;
|
||||||
TEMPO;
|
TEMPO;
|
||||||
TEMPO;
|
TEMPO;
|
||||||
TEMPO;
|
TEMPO;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
/* ICC STOP State : ICC mesurements in Stop and STOP NoRTC modes */
|
/* ICC STOP State : ICC mesurements in Stop and STOP NoRTC modes */
|
||||||
case STATE_ICC_STOP:
|
case STATE_ICC_STOP:
|
||||||
LCD_GLASS_DisplayString(" STOP ");
|
LCD_GLASS_DisplayString(" STOP ");
|
||||||
|
@ -270,26 +703,26 @@ int main(void)
|
||||||
TEMPO;
|
TEMPO;
|
||||||
TEMPO;
|
TEMPO;
|
||||||
TEMPO;
|
TEMPO;
|
||||||
TEMPO;
|
TEMPO;
|
||||||
LCD_GLASS_DisplayString("SP-NRTC");
|
LCD_GLASS_DisplayString("SP-NRTC");
|
||||||
TEMPO;
|
TEMPO;
|
||||||
Icc_Stop_NoRTC();
|
Icc_Stop_NoRTC();
|
||||||
TEMPO;
|
TEMPO;
|
||||||
TEMPO;
|
TEMPO;
|
||||||
TEMPO;
|
TEMPO;
|
||||||
TEMPO;
|
TEMPO;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
/* ICC Standby State : ICC mesurements in Standby mode */
|
/* ICC Standby State : ICC mesurements in Standby mode */
|
||||||
case STATE_ICC_STBY:
|
case STATE_ICC_STBY:
|
||||||
LCD_GLASS_DisplayString("STBY ");
|
LCD_GLASS_DisplayString("STBY ");
|
||||||
TEMPO;
|
TEMPO;
|
||||||
TEMPO;
|
TEMPO;
|
||||||
ADC_Icc_Test(MCU_STBY);
|
ADC_Icc_Test(MCU_STBY);
|
||||||
/* Following break never performed dues to software reset in previous function */
|
/* Following break never performed dues to software reset in previous function */
|
||||||
break;
|
break;
|
||||||
|
|
||||||
/* for safe: normaly never reaches */
|
/* for safe: normaly never reaches */
|
||||||
default:
|
default:
|
||||||
LCD_GLASS_Clear();
|
LCD_GLASS_Clear();
|
||||||
LCD_GLASS_DisplayString("ERROR");
|
LCD_GLASS_DisplayString("ERROR");
|
||||||
|
@ -298,7 +731,7 @@ int main(void)
|
||||||
/* Reset KeyPress flag*/
|
/* Reset KeyPress flag*/
|
||||||
KeyPressed = FALSE;
|
KeyPressed = FALSE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Configures the different system clocks.
|
* @brief Configures the different system clocks.
|
||||||
|
@ -306,25 +739,25 @@ int main(void)
|
||||||
* @retval None
|
* @retval None
|
||||||
*/
|
*/
|
||||||
void RCC_Configuration(void)
|
void RCC_Configuration(void)
|
||||||
{
|
{
|
||||||
/* Enable HSI Clock */
|
/* Enable HSI Clock */
|
||||||
RCC_HSICmd(ENABLE);
|
RCC_HSICmd(ENABLE);
|
||||||
|
|
||||||
/*!< Wait till HSI is ready */
|
/*!< Wait till HSI is ready */
|
||||||
while (RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET);
|
while (RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET);
|
||||||
|
|
||||||
/* Set HSI as sys clock*/
|
/* Set HSI as sys clock*/
|
||||||
RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI);
|
RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI);
|
||||||
|
|
||||||
/* Set MSI clock range to ~4.194MHz*/
|
/* Set MSI clock range to ~4.194MHz*/
|
||||||
RCC_MSIRangeConfig(RCC_MSIRange_6);
|
RCC_MSIRangeConfig(RCC_MSIRange_6);
|
||||||
|
|
||||||
/* Enable the GPIOs clocks */
|
/* 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);
|
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA | RCC_AHBPeriph_GPIOB | RCC_AHBPeriph_GPIOC| RCC_AHBPeriph_GPIOD| RCC_AHBPeriph_GPIOE| RCC_AHBPeriph_GPIOH, ENABLE);
|
||||||
|
|
||||||
/* Enable comparator, LCD and PWR mngt clocks */
|
/* Enable comparator, LCD and PWR mngt clocks */
|
||||||
RCC_APB1PeriphClockCmd(RCC_APB1Periph_COMP | RCC_APB1Periph_LCD | RCC_APB1Periph_PWR,ENABLE);
|
RCC_APB1PeriphClockCmd(RCC_APB1Periph_COMP | RCC_APB1Periph_LCD | RCC_APB1Periph_PWR,ENABLE);
|
||||||
|
|
||||||
/* Enable ADC & SYSCFG clocks */
|
/* Enable ADC & SYSCFG clocks */
|
||||||
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_SYSCFG , ENABLE);
|
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_SYSCFG , ENABLE);
|
||||||
|
|
||||||
|
@ -340,19 +773,19 @@ void RCC_Configuration(void)
|
||||||
|
|
||||||
/* Wait until LSE is ready */
|
/* Wait until LSE is ready */
|
||||||
while (RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET);
|
while (RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET);
|
||||||
|
|
||||||
/* RTC Clock Source Selection */
|
/* RTC Clock Source Selection */
|
||||||
RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);
|
RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);
|
||||||
|
|
||||||
/* Enable the RTC */
|
/* Enable the RTC */
|
||||||
RCC_RTCCLKCmd(ENABLE);
|
RCC_RTCCLKCmd(ENABLE);
|
||||||
|
|
||||||
/*Disable HSE*/
|
/*Disable HSE*/
|
||||||
RCC_HSEConfig(RCC_HSE_OFF);
|
RCC_HSEConfig(RCC_HSE_OFF);
|
||||||
if(RCC_GetFlagStatus(RCC_FLAG_HSERDY) != RESET )
|
if(RCC_GetFlagStatus(RCC_FLAG_HSERDY) != RESET )
|
||||||
{
|
{
|
||||||
/* Stay in infinite loop if HSE is not disabled*/
|
/* Stay in infinite loop if HSE is not disabled*/
|
||||||
while(1);
|
while(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -368,7 +801,7 @@ void Init_GPIOs (void)
|
||||||
GPIO_InitTypeDef GPIO_InitStructure;
|
GPIO_InitTypeDef GPIO_InitStructure;
|
||||||
EXTI_InitTypeDef EXTI_InitStructure;
|
EXTI_InitTypeDef EXTI_InitStructure;
|
||||||
NVIC_InitTypeDef NVIC_InitStructure;
|
NVIC_InitTypeDef NVIC_InitStructure;
|
||||||
|
|
||||||
/* Configure User Button pin as input */
|
/* Configure User Button pin as input */
|
||||||
GPIO_InitStructure.GPIO_Pin = USERBUTTON_GPIO_PIN;
|
GPIO_InitStructure.GPIO_Pin = USERBUTTON_GPIO_PIN;
|
||||||
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
|
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
|
||||||
|
@ -382,7 +815,7 @@ void Init_GPIOs (void)
|
||||||
/* Configure EXT1 Line 0 in interrupt mode trigged on Rising edge */
|
/* 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_Line = EXTI_Line0 ; // PA0 for User button AND IDD_WakeUP
|
||||||
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
|
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
|
||||||
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
|
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
|
||||||
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
|
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
|
||||||
EXTI_Init(&EXTI_InitStructure);
|
EXTI_Init(&EXTI_InitStructure);
|
||||||
|
|
||||||
|
@ -391,7 +824,7 @@ void Init_GPIOs (void)
|
||||||
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F;
|
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F;
|
||||||
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F;
|
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F;
|
||||||
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
|
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
|
||||||
NVIC_Init(&NVIC_InitStructure);
|
NVIC_Init(&NVIC_InitStructure);
|
||||||
|
|
||||||
/* Configure the LED_pin as output push-pull for LD3 & LD4 usage*/
|
/* 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_Pin = LD_GREEN_GPIO_PIN | LD_BLUE_GPIO_PIN;
|
||||||
|
@ -400,23 +833,23 @@ void Init_GPIOs (void)
|
||||||
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
|
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
|
||||||
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
|
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
|
||||||
GPIO_Init(LD_GPIO_PORT, &GPIO_InitStructure);
|
GPIO_Init(LD_GPIO_PORT, &GPIO_InitStructure);
|
||||||
|
|
||||||
/* Force a low level on LEDs*/
|
/* Force a low level on LEDs*/
|
||||||
GPIO_LOW(LD_GPIO_PORT,LD_GREEN_GPIO_PIN);
|
GPIO_LOW(LD_GPIO_PORT,LD_GREEN_GPIO_PIN);
|
||||||
GPIO_LOW(LD_GPIO_PORT,LD_BLUE_GPIO_PIN);
|
GPIO_LOW(LD_GPIO_PORT,LD_BLUE_GPIO_PIN);
|
||||||
|
|
||||||
/* Counter enable: GPIO set in output for enable the counter */
|
/* Counter enable: GPIO set in output for enable the counter */
|
||||||
GPIO_InitStructure.GPIO_Pin = CTN_CNTEN_GPIO_PIN;
|
GPIO_InitStructure.GPIO_Pin = CTN_CNTEN_GPIO_PIN;
|
||||||
GPIO_Init( CTN_GPIO_PORT, &GPIO_InitStructure);
|
GPIO_Init( CTN_GPIO_PORT, &GPIO_InitStructure);
|
||||||
|
|
||||||
/* To prepare to start counter */
|
/* To prepare to start counter */
|
||||||
GPIO_HIGH(CTN_GPIO_PORT,CTN_CNTEN_GPIO_PIN);
|
GPIO_HIGH(CTN_GPIO_PORT,CTN_CNTEN_GPIO_PIN);
|
||||||
|
|
||||||
/* Configure Port A LCD Output pins as alternate function */
|
/* Configure Port A LCD Output pins as alternate function */
|
||||||
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_8 | GPIO_Pin_9 |GPIO_Pin_10 |GPIO_Pin_15;
|
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_8 | GPIO_Pin_9 |GPIO_Pin_10 |GPIO_Pin_15;
|
||||||
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
|
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
|
||||||
GPIO_Init( GPIOA, &GPIO_InitStructure);
|
GPIO_Init( GPIOA, &GPIO_InitStructure);
|
||||||
|
|
||||||
/* Select LCD alternate function for Port A LCD Output pins */
|
/* Select LCD alternate function for Port A LCD Output pins */
|
||||||
GPIO_PinAFConfig(GPIOA, GPIO_PinSource1,GPIO_AF_LCD) ;
|
GPIO_PinAFConfig(GPIOA, GPIO_PinSource1,GPIO_AF_LCD) ;
|
||||||
GPIO_PinAFConfig(GPIOA, GPIO_PinSource2,GPIO_AF_LCD) ;
|
GPIO_PinAFConfig(GPIOA, GPIO_PinSource2,GPIO_AF_LCD) ;
|
||||||
|
@ -424,14 +857,14 @@ void Init_GPIOs (void)
|
||||||
GPIO_PinAFConfig(GPIOA, GPIO_PinSource8,GPIO_AF_LCD) ;
|
GPIO_PinAFConfig(GPIOA, GPIO_PinSource8,GPIO_AF_LCD) ;
|
||||||
GPIO_PinAFConfig(GPIOA, GPIO_PinSource9,GPIO_AF_LCD) ;
|
GPIO_PinAFConfig(GPIOA, GPIO_PinSource9,GPIO_AF_LCD) ;
|
||||||
GPIO_PinAFConfig(GPIOA, GPIO_PinSource10,GPIO_AF_LCD) ;
|
GPIO_PinAFConfig(GPIOA, GPIO_PinSource10,GPIO_AF_LCD) ;
|
||||||
GPIO_PinAFConfig(GPIOA, GPIO_PinSource15,GPIO_AF_LCD) ;
|
GPIO_PinAFConfig(GPIOA, GPIO_PinSource15,GPIO_AF_LCD) ;
|
||||||
|
|
||||||
/* Configure Port B LCD Output pins as alternate function */
|
/* Configure Port B LCD Output pins as alternate function */
|
||||||
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_8 | GPIO_Pin_9 \
|
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_8 | GPIO_Pin_9 \
|
||||||
| GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
|
| GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
|
||||||
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
|
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
|
||||||
GPIO_Init( GPIOB, &GPIO_InitStructure);
|
GPIO_Init( GPIOB, &GPIO_InitStructure);
|
||||||
|
|
||||||
/* Select LCD alternate function for Port B LCD Output pins */
|
/* Select LCD alternate function for Port B LCD Output pins */
|
||||||
GPIO_PinAFConfig(GPIOB, GPIO_PinSource3,GPIO_AF_LCD) ;
|
GPIO_PinAFConfig(GPIOB, GPIO_PinSource3,GPIO_AF_LCD) ;
|
||||||
GPIO_PinAFConfig(GPIOB, GPIO_PinSource4,GPIO_AF_LCD) ;
|
GPIO_PinAFConfig(GPIOB, GPIO_PinSource4,GPIO_AF_LCD) ;
|
||||||
|
@ -439,35 +872,35 @@ void Init_GPIOs (void)
|
||||||
GPIO_PinAFConfig(GPIOB, GPIO_PinSource8,GPIO_AF_LCD) ;
|
GPIO_PinAFConfig(GPIOB, GPIO_PinSource8,GPIO_AF_LCD) ;
|
||||||
GPIO_PinAFConfig(GPIOB, GPIO_PinSource9,GPIO_AF_LCD) ;
|
GPIO_PinAFConfig(GPIOB, GPIO_PinSource9,GPIO_AF_LCD) ;
|
||||||
GPIO_PinAFConfig(GPIOB, GPIO_PinSource10,GPIO_AF_LCD) ;
|
GPIO_PinAFConfig(GPIOB, GPIO_PinSource10,GPIO_AF_LCD) ;
|
||||||
GPIO_PinAFConfig(GPIOB, GPIO_PinSource11,GPIO_AF_LCD) ;
|
GPIO_PinAFConfig(GPIOB, GPIO_PinSource11,GPIO_AF_LCD) ;
|
||||||
GPIO_PinAFConfig(GPIOB, GPIO_PinSource12,GPIO_AF_LCD) ;
|
GPIO_PinAFConfig(GPIOB, GPIO_PinSource12,GPIO_AF_LCD) ;
|
||||||
GPIO_PinAFConfig(GPIOB, GPIO_PinSource13,GPIO_AF_LCD) ;
|
GPIO_PinAFConfig(GPIOB, GPIO_PinSource13,GPIO_AF_LCD) ;
|
||||||
GPIO_PinAFConfig(GPIOB, GPIO_PinSource14,GPIO_AF_LCD) ;
|
GPIO_PinAFConfig(GPIOB, GPIO_PinSource14,GPIO_AF_LCD) ;
|
||||||
GPIO_PinAFConfig(GPIOB, GPIO_PinSource15,GPIO_AF_LCD) ;
|
GPIO_PinAFConfig(GPIOB, GPIO_PinSource15,GPIO_AF_LCD) ;
|
||||||
|
|
||||||
/* Configure Port C LCD Output pins as alternate function */
|
/* Configure Port C LCD Output pins as alternate function */
|
||||||
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_6 \
|
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_6 \
|
||||||
| GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 |GPIO_Pin_11 ;
|
| GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 |GPIO_Pin_11 ;
|
||||||
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
|
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
|
||||||
GPIO_Init( GPIOC, &GPIO_InitStructure);
|
GPIO_Init( GPIOC, &GPIO_InitStructure);
|
||||||
|
|
||||||
/* Select LCD alternate function for Port B LCD Output pins */
|
/* Select LCD alternate function for Port B LCD Output pins */
|
||||||
GPIO_PinAFConfig(GPIOC, GPIO_PinSource0,GPIO_AF_LCD) ;
|
GPIO_PinAFConfig(GPIOC, GPIO_PinSource0,GPIO_AF_LCD) ;
|
||||||
GPIO_PinAFConfig(GPIOC, GPIO_PinSource1,GPIO_AF_LCD) ;
|
GPIO_PinAFConfig(GPIOC, GPIO_PinSource1,GPIO_AF_LCD) ;
|
||||||
GPIO_PinAFConfig(GPIOC, GPIO_PinSource2,GPIO_AF_LCD) ;
|
GPIO_PinAFConfig(GPIOC, GPIO_PinSource2,GPIO_AF_LCD) ;
|
||||||
GPIO_PinAFConfig(GPIOC, GPIO_PinSource3,GPIO_AF_LCD) ;
|
GPIO_PinAFConfig(GPIOC, GPIO_PinSource3,GPIO_AF_LCD) ;
|
||||||
GPIO_PinAFConfig(GPIOC, GPIO_PinSource6,GPIO_AF_LCD) ;
|
GPIO_PinAFConfig(GPIOC, GPIO_PinSource6,GPIO_AF_LCD) ;
|
||||||
GPIO_PinAFConfig(GPIOC, GPIO_PinSource7,GPIO_AF_LCD) ;
|
GPIO_PinAFConfig(GPIOC, GPIO_PinSource7,GPIO_AF_LCD) ;
|
||||||
GPIO_PinAFConfig(GPIOC, GPIO_PinSource8,GPIO_AF_LCD) ;
|
GPIO_PinAFConfig(GPIOC, GPIO_PinSource8,GPIO_AF_LCD) ;
|
||||||
GPIO_PinAFConfig(GPIOC, GPIO_PinSource9,GPIO_AF_LCD) ;
|
GPIO_PinAFConfig(GPIOC, GPIO_PinSource9,GPIO_AF_LCD) ;
|
||||||
GPIO_PinAFConfig(GPIOC, GPIO_PinSource10,GPIO_AF_LCD) ;
|
GPIO_PinAFConfig(GPIOC, GPIO_PinSource10,GPIO_AF_LCD) ;
|
||||||
GPIO_PinAFConfig(GPIOC, GPIO_PinSource11,GPIO_AF_LCD) ;
|
GPIO_PinAFConfig(GPIOC, GPIO_PinSource11,GPIO_AF_LCD) ;
|
||||||
|
|
||||||
/* Configure ADC (IDD_MEASURE) pin as Analogue */
|
/* Configure ADC (IDD_MEASURE) pin as Analogue */
|
||||||
GPIO_InitStructure.GPIO_Pin = IDD_MEASURE ;
|
GPIO_InitStructure.GPIO_Pin = IDD_MEASURE ;
|
||||||
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
|
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
|
||||||
GPIO_Init( IDD_MEASURE_PORT, &GPIO_InitStructure);
|
GPIO_Init( IDD_MEASURE_PORT, &GPIO_InitStructure);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -515,7 +948,7 @@ void Delay(uint32_t nTime)
|
||||||
* @retval None
|
* @retval None
|
||||||
*/
|
*/
|
||||||
void assert_failed(uint8_t* file, uint32_t line)
|
void assert_failed(uint8_t* file, uint32_t line)
|
||||||
{
|
{
|
||||||
/* User can add his own implementation to report the file name and line number,
|
/* User can add his own implementation to report the file name and line number,
|
||||||
ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
|
ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
|
||||||
/* Infinite loop */
|
/* Infinite loop */
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
/**
|
/**
|
||||||
******************************************************************************
|
******************************************************************************
|
||||||
* @file Project/STM32L1xx_StdPeriph_Template/stm32l1xx_it.c
|
* @file Project/STM32L1xx_StdPeriph_Template/stm32l1xx_it.c
|
||||||
* @author MCD Application Team
|
* @author MCD Application Team
|
||||||
* @version V1.0.3
|
* @version V1.0.3
|
||||||
* @date May-2013
|
* @date May-2013
|
||||||
* @brief Main Interrupt Service Routines.
|
* @brief Main Interrupt Service Routines.
|
||||||
* This file provides template for all exceptions handler and
|
* This file provides template for all exceptions handler and
|
||||||
* peripherals interrupt service routine.
|
* peripherals interrupt service routine.
|
||||||
******************************************************************************
|
******************************************************************************
|
||||||
* @copy
|
* @copy
|
||||||
|
@ -18,7 +18,7 @@
|
||||||
* CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
* CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
||||||
*
|
*
|
||||||
* <h2><center>© COPYRIGHT 2010 STMicroelectronics</center></h2>
|
* <h2><center>© COPYRIGHT 2010 STMicroelectronics</center></h2>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* Includes ------------------------------------------------------------------*/
|
/* Includes ------------------------------------------------------------------*/
|
||||||
#include "stm32l1xx_it.h"
|
#include "stm32l1xx_it.h"
|
||||||
|
@ -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();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -289,7 +146,7 @@ void RTC_WKUP_IRQHandler (void)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @}
|
* @}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
|
/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
|
||||||
|
|
Loading…
Reference in a new issue