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\STMTouch_Driver\inc</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>
|
||||
<name>CCStdIncCheck</name>
|
||||
|
@ -555,7 +557,7 @@
|
|||
</option>
|
||||
<option>
|
||||
<name>AUserIncludes</name>
|
||||
<state></state>
|
||||
<state>$PROJ_DIR$\include</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>AExtraOptionsCheckV2</name>
|
||||
|
@ -939,6 +941,42 @@
|
|||
<data/>
|
||||
</settings>
|
||||
</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>
|
||||
<name>ST_Code</name>
|
||||
<group>
|
||||
|
@ -982,6 +1020,9 @@
|
|||
</group>
|
||||
<group>
|
||||
<name>TouchSensingDriver</name>
|
||||
<excluded>
|
||||
<configuration>Debug</configuration>
|
||||
</excluded>
|
||||
<file>
|
||||
<name>$PROJ_DIR$\ST_Code\Libraries\STMTouch_Driver\src\tsl.c</name>
|
||||
</file>
|
||||
|
@ -1032,6 +1073,9 @@
|
|||
<file>
|
||||
<name>$PROJ_DIR$\discover_functions.c</name>
|
||||
</file>
|
||||
<file>
|
||||
<name>$PROJ_DIR$\include\FreeRTOSConfig.h</name>
|
||||
</file>
|
||||
<file>
|
||||
<name>$PROJ_DIR$\icc_measure.c</name>
|
||||
</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
|
||||
|
@ -524,4 +957,11 @@ void assert_failed(uint8_t* file, uint32_t line)
|
|||
|
||||
#endif
|
||||
|
||||
void vApplicationStackOverflowHook( void )
|
||||
{
|
||||
}
|
||||
|
||||
/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
@ -105,17 +105,6 @@ void UsageFault_Handler(void)
|
|||
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.
|
||||
* @param None
|
||||
|
@ -127,141 +116,9 @@ void DebugMon_Handler(void)
|
|||
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)
|
||||
{
|
||||
/* Disable general interrupts */
|
||||
disableGlobalInterrupts();
|
||||
|
||||
/* UserButton usage activated*/
|
||||
if (UserButton)
|
||||
{
|
||||
UserButtonHandler();
|
||||
}
|
||||
else
|
||||
{
|
||||
/*Idd_Wakeup detected */
|
||||
Idd_WakeUP = TRUE;
|
||||
}
|
||||
EXTI_ClearITPendingBit(EXTI_Line0);
|
||||
enableGlobalInterrupts();
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue