From a5cd52d3974f9e557359e929b7d225df167d4193 Mon Sep 17 00:00:00 2001 From: richardbarry Date: Sun, 26 Oct 2008 14:57:40 +0000 Subject: [PATCH] Add MSP430/IAR demo project. git-svn-id: https://svn.code.sf.net/p/freertos/code/trunk@531 1d2547de-c912-0410-9cb9-b8ca96c0e9e2 --- Demo/msp430_IAR/FreeRTOSConfig.h | 126 ++ Demo/msp430_IAR/ParTest/ParTest.c | 227 +++ Demo/msp430_IAR/RTOSDemo.ewd | 449 +++++ Demo/msp430_IAR/RTOSDemo.ewp | 1727 ++++++++++++++++++++ Demo/msp430_IAR/RTOSDemo.eww | 10 + Demo/msp430_IAR/main.c | 326 ++++ Demo/msp430_IAR/serial/serial.c | 306 ++++ Demo/msp430_IAR/serial/serialASM.s43 | 101 ++ Demo/msp430_IAR/settings/RTOSDemo.cspy.bat | 33 + Demo/msp430_IAR/settings/RTOSDemo.dbgdt | 76 + Demo/msp430_IAR/settings/RTOSDemo.dni | 65 + Demo/msp430_IAR/settings/RTOSDemo.wsdt | 66 + 12 files changed, 3512 insertions(+) create mode 100644 Demo/msp430_IAR/FreeRTOSConfig.h create mode 100644 Demo/msp430_IAR/ParTest/ParTest.c create mode 100644 Demo/msp430_IAR/RTOSDemo.ewd create mode 100644 Demo/msp430_IAR/RTOSDemo.ewp create mode 100644 Demo/msp430_IAR/RTOSDemo.eww create mode 100644 Demo/msp430_IAR/main.c create mode 100644 Demo/msp430_IAR/serial/serial.c create mode 100644 Demo/msp430_IAR/serial/serialASM.s43 create mode 100644 Demo/msp430_IAR/settings/RTOSDemo.cspy.bat create mode 100644 Demo/msp430_IAR/settings/RTOSDemo.dbgdt create mode 100644 Demo/msp430_IAR/settings/RTOSDemo.dni create mode 100644 Demo/msp430_IAR/settings/RTOSDemo.wsdt diff --git a/Demo/msp430_IAR/FreeRTOSConfig.h b/Demo/msp430_IAR/FreeRTOSConfig.h new file mode 100644 index 000000000..4c0c3c5e4 --- /dev/null +++ b/Demo/msp430_IAR/FreeRTOSConfig.h @@ -0,0 +1,126 @@ +/* + FreeRTOS.org V5.1.0 - Copyright (C) 2003-2008 Richard Barry. + + This file is part of the FreeRTOS.org distribution. + + FreeRTOS.org is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + FreeRTOS.org 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. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with FreeRTOS.org; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + A special exception to the GPL can be applied should you wish to distribute + a combined work that includes FreeRTOS.org, without being obliged to provide + the source code for any proprietary components. See the licensing section + of http://www.FreeRTOS.org for full details of how and when the exception + can be applied. + + *************************************************************************** + *************************************************************************** + * * + * SAVE TIME AND MONEY! We can port FreeRTOS.org to your own hardware, * + * and even write all or part of your application on your behalf. * + * See http://www.OpenRTOS.com for details of the services we provide to * + * expedite your project. * + * * + *************************************************************************** + *************************************************************************** + + Please ensure to read the configuration and relevant port sections of the + online documentation. + + http://www.FreeRTOS.org - Documentation, latest information, license and + contact details. + + http://www.SafeRTOS.com - A version that is certified for use in safety + critical systems. + + http://www.OpenRTOS.com - Commercial support, development, porting, + licensing and training services. +*/ + +#ifndef FREERTOS_CONFIG_H +#define FREERTOS_CONFIG_H + +#include + +/* +Two interrupt examples are provided - + + + Method 1 does everything in C code. + + Method 2 uses an assembly file wrapper. + +Code size: +Method 1 uses assembly macros to save and restore the task context, whereas +method 2 uses functions. This means method 1 will be faster, but method 2 will +use less code space. + +Simplicity: +Method 1 is very simplistic, whereas method 2 is more elaborate. This +elaboration results in the code space saving, but also requires a slightly more +complex procedure to define interrupt service routines. + +Interrupt efficiency: +Method 1 uses the compiler generated function prologue and epilogue code to save +and restore the necessary registers within an interrupt service routine (other +than the RTOS tick ISR). Should a context switch be required from within the ISR +the entire processor context is saved. This can result in some registers being saved +twice - once by the compiler generated code, and then again by the FreeRTOS code. +Method 2 saves and restores all the processor registers within each interrupt service +routine, whether or not a context switch actually occurs. This means no registers +ever get saved twice, but imposes an overhead on the occasions that no context switch +occurs. +*/ + +#define configINTERRUPT_EXAMPLE_METHOD 1 + +/*----------------------------------------------------------- + * 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. + *----------------------------------------------------------*/ + +#define configUSE_PREEMPTION 0 +#define configUSE_IDLE_HOOK 1 +#define configUSE_TICK_HOOK 0 +#define configCPU_CLOCK_HZ ( ( unsigned portLONG ) 7995392 ) /* Clock setup from main.c in the demo application. */ +#define configTICK_RATE_HZ ( ( portTickType ) 1000 ) +#define configMAX_PRIORITIES ( ( unsigned portBASE_TYPE ) 4 ) +#define configMINIMAL_STACK_SIZE ( ( unsigned portSHORT ) 50 ) +#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 1700 ) ) +#define configMAX_TASK_NAME_LEN ( 8 ) +#define configUSE_TRACE_FACILITY 0 +#define configUSE_16_BIT_TICKS 1 +#define configIDLE_SHOULD_YIELD 1 + +/* 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 0 +#define INCLUDE_uxTaskPriorityGet 0 +#define INCLUDE_vTaskDelete 1 +#define INCLUDE_vTaskCleanUpResources 0 +#define INCLUDE_vTaskSuspend 0 +#define INCLUDE_vTaskDelayUntil 1 +#define INCLUDE_vTaskDelay 1 +#define INCLUDE_uxTaskGetStackHighWaterMark 0 + +#endif /* FREERTOS_CONFIG_H */ diff --git a/Demo/msp430_IAR/ParTest/ParTest.c b/Demo/msp430_IAR/ParTest/ParTest.c new file mode 100644 index 000000000..715d0e95c --- /dev/null +++ b/Demo/msp430_IAR/ParTest/ParTest.c @@ -0,0 +1,227 @@ +/* + FreeRTOS.org V5.1.0 - Copyright (C) 2003-2008 Richard Barry. + + This file is part of the FreeRTOS.org distribution. + + FreeRTOS.org is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + FreeRTOS.org 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. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with FreeRTOS.org; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + A special exception to the GPL can be applied should you wish to distribute + a combined work that includes FreeRTOS.org, without being obliged to provide + the source code for any proprietary components. See the licensing section + of http://www.FreeRTOS.org for full details of how and when the exception + can be applied. + + *************************************************************************** + *************************************************************************** + * * + * SAVE TIME AND MONEY! We can port FreeRTOS.org to your own hardware, * + * and even write all or part of your application on your behalf. * + * See http://www.OpenRTOS.com for details of the services we provide to * + * expedite your project. * + * * + *************************************************************************** + *************************************************************************** + + Please ensure to read the configuration and relevant port sections of the + online documentation. + + http://www.FreeRTOS.org - Documentation, latest information, license and + contact details. + + http://www.SafeRTOS.com - A version that is certified for use in safety + critical systems. + + http://www.OpenRTOS.com - Commercial support, development, porting, + licensing and training services. +*/ + +/*----------------------------------------------------------- + * Characters on the LCD are used to simulate LED's. In this case the 'ParTest' + * is really operating on the LCD display. + *-----------------------------------------------------------*/ + +/* + * This demo is configured to execute on the ES449 prototyping board from + * SoftBaugh. The ES449 has a built in LCD display and a single built in user + * LED. Therefore, in place of flashing an LED, the 'flash' and 'check' tasks + * toggle '*' characters on the LCD. The left most '*' represents LED 0, the + * next LED 1, etc. + * + * There is a single genuine on board LED referenced as LED 10. + */ + + +/* Scheduler includes. */ +#include "FreeRTOS.h" +#include "task.h" + +/* Demo application includes. */ +#include "partest.h" + +/* Constants required to setup the LCD. */ +#define LCD_DIV_64 5 + +/* Constants required to access the "LED's". The LED segments are turned on +and off to generate '*' characters. */ +#define partstNUM_LEDS ( ( unsigned portCHAR ) 6 ) +#define partstSEGMENTS_ON ( ( unsigned portCHAR ) 0x0f ) +#define partstSEGMENTS_OFF ( ( unsigned portCHAR ) 0x00 ) + +/* The LED number of the real on board LED, rather than a simulated LED. */ +#define partstON_BOARD_LED ( ( unsigned portBASE_TYPE ) 10 ) +#define mainON_BOARD_LED_BIT ( ( unsigned portCHAR ) 0x01 ) + +/* The LCD segments used to generate the '*' characters for LED's 0 to 5. */ +unsigned portCHAR * const ucRHSSegments[ partstNUM_LEDS ] = { ( unsigned portCHAR * )0xa4, + ( unsigned portCHAR * )0xa2, + ( unsigned portCHAR * )0xa0, + ( unsigned portCHAR * )0x9e, + ( unsigned portCHAR * )0x9c, + ( unsigned portCHAR * )0x9a }; + +unsigned portCHAR * const ucLHSSegments[ partstNUM_LEDS ] = { ( unsigned portCHAR * )0xa3, + ( unsigned portCHAR * )0xa1, + ( unsigned portCHAR * )0x9f, + ( unsigned portCHAR * )0x9d, + ( unsigned portCHAR * )0x9b, + ( unsigned portCHAR * )0x99 }; + +/* + * Toggle the single genuine built in LED. + */ +static void prvToggleOnBoardLED( void ); + +/*-----------------------------------------------------------*/ + +void vParTestInitialise( void ) +{ + /* Initialise the LCD hardware. */ + + /* Used for the onboard LED. */ + P1DIR = 0x01; + + // Setup Basic Timer for LCD operation + BTCTL = (LCD_DIV_64+0x23); + + // Setup port functions + P1SEL = 0x32; + P2SEL = 0x00; + P3SEL = 0x00; + P4SEL = 0xFC; + P5SEL = 0xFF; + + /* Initialise all segments to off. */ + LCDM1 = partstSEGMENTS_OFF; + LCDM2 = partstSEGMENTS_OFF; + LCDM3 = partstSEGMENTS_OFF; + LCDM4 = partstSEGMENTS_OFF; + LCDM5 = partstSEGMENTS_OFF; + LCDM6 = partstSEGMENTS_OFF; + LCDM7 = partstSEGMENTS_OFF; + LCDM8 = partstSEGMENTS_OFF; + LCDM9 = partstSEGMENTS_OFF; + LCDM10 = partstSEGMENTS_OFF; + LCDM11 = partstSEGMENTS_OFF; + LCDM12 = partstSEGMENTS_OFF; + LCDM13 = partstSEGMENTS_OFF; + LCDM14 = partstSEGMENTS_OFF; + LCDM15 = partstSEGMENTS_OFF; + LCDM16 = partstSEGMENTS_OFF; + LCDM17 = partstSEGMENTS_OFF; + LCDM18 = partstSEGMENTS_OFF; + LCDM19 = partstSEGMENTS_OFF; + LCDM20 = partstSEGMENTS_OFF; + + /* Setup LCD control. */ + LCDCTL = (LCDSG0_7|LCD4MUX|LCDON); +} +/*-----------------------------------------------------------*/ + +void vParTestSetLED( unsigned portBASE_TYPE uxLED, signed portBASE_TYPE xValue ) +{ + /* Set or clear the output [in this case show or hide the '*' character. */ + if( uxLED < ( portBASE_TYPE ) partstNUM_LEDS ) + { + vTaskSuspendAll(); + { + if( xValue ) + { + /* Turn on the segments required to show the '*'. */ + *( ucRHSSegments[ uxLED ] ) = partstSEGMENTS_ON; + *( ucLHSSegments[ uxLED ] ) = partstSEGMENTS_ON; + } + else + { + /* Turn off all the segments. */ + *( ucRHSSegments[ uxLED ] ) = partstSEGMENTS_OFF; + *( ucLHSSegments[ uxLED ] ) = partstSEGMENTS_OFF; + } + } + xTaskResumeAll(); + } +} +/*-----------------------------------------------------------*/ + +void vParTestToggleLED( unsigned portBASE_TYPE uxLED ) +{ + if( uxLED < ( portBASE_TYPE ) partstNUM_LEDS ) + { + vTaskSuspendAll(); + { + /* If the '*' is already showing - hide it. If it is not already + showing then show it. */ + if( *( ucRHSSegments[ uxLED ] ) ) + { + *( ucRHSSegments[ uxLED ] ) = partstSEGMENTS_OFF; + *( ucLHSSegments[ uxLED ] ) = partstSEGMENTS_OFF; + } + else + { + *( ucRHSSegments[ uxLED ] ) = partstSEGMENTS_ON; + *( ucLHSSegments[ uxLED ] ) = partstSEGMENTS_ON; + } + } + xTaskResumeAll(); + } + else + { + if( uxLED == partstON_BOARD_LED ) + { + /* The request related to the genuine on board LED. */ + prvToggleOnBoardLED(); + } + } +} +/*-----------------------------------------------------------*/ + +static void prvToggleOnBoardLED( void ) +{ +static unsigned portSHORT sState = pdFALSE; + + /* Toggle the state of the single genuine on board LED. */ + if( sState ) + { + P1OUT |= mainON_BOARD_LED_BIT; + } + else + { + P1OUT &= ~mainON_BOARD_LED_BIT; + } + + sState = !sState; +} +/*-----------------------------------------------------------*/ + + diff --git a/Demo/msp430_IAR/RTOSDemo.ewd b/Demo/msp430_IAR/RTOSDemo.ewd new file mode 100644 index 000000000..74cb62d9a --- /dev/null +++ b/Demo/msp430_IAR/RTOSDemo.ewd @@ -0,0 +1,449 @@ + + + + 1 + + Debug + + MSP430 + + 1 + + C-SPY + 4 + + 20 + 1 + 1 + + + + + + + + + + + + + + + + + + + 430FET + 1 + + 11 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + SIM430 + 1 + + 2 + 1 + 1 + + + + + + + $TOOLKIT_DIR$\plugins\Lcd\lcd.ewplugin + 1 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\Profiling\Profiling.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Stack\Stack.ENU.ewplugin + 1 + + + + + Release + + MSP430 + + 0 + + C-SPY + 4 + + 20 + 1 + 0 + + + + + + + + + + + + + + + + + + + 430FET + 1 + + 11 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + SIM430 + 1 + + 2 + 1 + 0 + + + + + + + $TOOLKIT_DIR$\plugins\Lcd\lcd.ewplugin + 1 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\Profiling\Profiling.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Stack\Stack.ENU.ewplugin + 1 + + + + + + diff --git a/Demo/msp430_IAR/RTOSDemo.ewp b/Demo/msp430_IAR/RTOSDemo.ewp new file mode 100644 index 000000000..42dd2365a --- /dev/null +++ b/Demo/msp430_IAR/RTOSDemo.ewp @@ -0,0 +1,1727 @@ + + + + 1 + + Debug + + MSP430 + + 1 + + General + 5 + + 21 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICC430 + 4 + + 24 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A430 + 4 + + 12 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CUSTOM + 3 + + + + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + XLINK + 4 + + 21 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + XAR + 4 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + MSP430 + + 0 + + General + 5 + + 21 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICC430 + 4 + + 24 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A430 + 4 + + 12 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CUSTOM + 3 + + + + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + XLINK + 4 + + 21 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + XAR + 4 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + + Demo Source + + $PROJ_DIR$\..\Common\Minimal\comtest.c + + + $PROJ_DIR$\..\Common\Minimal\flash.c + + + $PROJ_DIR$\..\..\Source\portable\MemMang\heap_1.c + + + $PROJ_DIR$\..\Common\Minimal\integer.c + + + $PROJ_DIR$\main.c + + + $PROJ_DIR$\ParTest\ParTest.c + + + $PROJ_DIR$\..\Common\Minimal\PollQ.c + + + $PROJ_DIR$\serial\serial.c + + + $PROJ_DIR$\serial\serialASM.s43 + + + + FreeRTOS Source + + $PROJ_DIR$\..\..\Source\croutine.c + + + $PROJ_DIR$\..\..\Source\list.c + + + $PROJ_DIR$\..\..\Source\portable\IAR\MSP430\port.c + + + $PROJ_DIR$\..\..\Source\portable\IAR\MSP430\portext.s43 + + + $PROJ_DIR$\..\..\Source\queue.c + + + $PROJ_DIR$\..\..\Source\tasks.c + + + + + diff --git a/Demo/msp430_IAR/RTOSDemo.eww b/Demo/msp430_IAR/RTOSDemo.eww new file mode 100644 index 000000000..239a9381e --- /dev/null +++ b/Demo/msp430_IAR/RTOSDemo.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\RTOSDemo.ewp + + + + + diff --git a/Demo/msp430_IAR/main.c b/Demo/msp430_IAR/main.c new file mode 100644 index 000000000..4c700f0c6 --- /dev/null +++ b/Demo/msp430_IAR/main.c @@ -0,0 +1,326 @@ +/* + FreeRTOS.org V5.1.0 - Copyright (C) 2003-2008 Richard Barry. + + This file is part of the FreeRTOS.org distribution. + + FreeRTOS.org is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + FreeRTOS.org 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. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with FreeRTOS.org; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + A special exception to the GPL can be applied should you wish to distribute + a combined work that includes FreeRTOS.org, without being obliged to provide + the source code for any proprietary components. See the licensing section + of http://www.FreeRTOS.org for full details of how and when the exception + can be applied. + + *************************************************************************** + *************************************************************************** + * * + * SAVE TIME AND MONEY! We can port FreeRTOS.org to your own hardware, * + * and even write all or part of your application on your behalf. * + * See http://www.OpenRTOS.com for details of the services we provide to * + * expedite your project. * + * * + *************************************************************************** + *************************************************************************** + + Please ensure to read the configuration and relevant port sections of the + online documentation. + + http://www.FreeRTOS.org - Documentation, latest information, license and + contact details. + + http://www.SafeRTOS.com - A version that is certified for use in safety + critical systems. + + http://www.OpenRTOS.com - Commercial support, development, porting, + licensing and training services. +*/ + +/* + * Creates all the demo application tasks, then starts the scheduler. The WEB + * documentation provides more details of the demo application tasks. + * + * This demo is configured to execute on the ES449 prototyping board from + * SoftBaugh. The ES449 has a built in LCD display and a single built in user + * LED. Therefore, in place of flashing an LED, the 'flash' and 'check' tasks + * toggle '*' characters on the LCD. The left most '*' represents LED 0, the + * next LED 1, etc. + * + * Main. c also creates a task called 'Check'. This only executes every three + * seconds but has the highest priority so is guaranteed to get processor time. + * Its main function is to check that all the other tasks are still operational. + * Each task that does not flash an LED maintains a unique count that is + * incremented each time the task successfully completes its function. Should + * any error occur within such a task the count is permanently halted. The + * 'check' task inspects the count of each task to ensure it has changed since + * the last time the check task executed. If all the count variables have + * changed all the tasks are still executing error free, and the check task + * toggles an LED with a three second period. Should any task contain an error + * at any time the LED toggle rate will increase to 500ms. + * + * Please read the documentation for the MSP430 port available on + * http://www.FreeRTOS.org. + */ + +/* Standard includes. */ +#include + +/* Scheduler includes. */ +#include "FreeRTOS.h" +#include "task.h" + +/* Demo application includes. */ +#include "partest.h" +#include "flash.h" +#include "integer.h" +#include "comtest2.h" +#include "PollQ.h" + +/* Constants required for hardware setup. */ +#define mainALL_BITS_OUTPUT ( ( unsigned portCHAR ) 0xff ) +#define mainMAX_FREQUENCY ( ( unsigned portCHAR ) 121 ) + +/* Constants that define the LED's used by the various tasks. [in this case +the '*' characters on the LCD represent LED's] */ +#define mainCHECK_LED ( 4 ) +#define mainCOM_TEST_LED ( 10 ) + +/* Demo task priorities. */ +#define mainCHECK_TASK_PRIORITY ( tskIDLE_PRIORITY + 3 ) +#define mainCOM_TEST_PRIORITY ( tskIDLE_PRIORITY + 2 ) +#define mainQUEUE_POLL_PRIORITY ( tskIDLE_PRIORITY + 2 ) +#define mainLED_TASK_PRIORITY ( tskIDLE_PRIORITY + 1 ) + +/* Baud rate used by the COM test tasks. */ +#define mainCOM_TEST_BAUD_RATE ( ( unsigned portLONG ) 19200 ) + +/* The frequency at which the 'Check' tasks executes. See the comments at the +top of the page. When the system is operating error free the 'Check' task +toggles an LED every three seconds. If an error is discovered in any task the +rate is increased to 500 milliseconds. [in this case the '*' characters on the +LCD represent LED's]*/ +#define mainNO_ERROR_CHECK_DELAY ( ( portTickType ) 3000 / portTICK_RATE_MS ) +#define mainERROR_CHECK_DELAY ( ( portTickType ) 500 / portTICK_RATE_MS ) + +/* The constants used in the calculation. */ +#define intgCONST1 ( ( portLONG ) 123 ) +#define intgCONST2 ( ( portLONG ) 234567 ) +#define intgCONST3 ( ( portLONG ) -3 ) +#define intgCONST4 ( ( portLONG ) 7 ) +#define intgEXPECTED_ANSWER ( ( ( intgCONST1 + intgCONST2 ) * intgCONST3 ) / intgCONST4 ) + +/* + * The function that implements the Check task. See the comments at the head + * of the page for implementation details. + */ +static void vErrorChecks( void *pvParameters ); + +/* + * Called by the Check task. Returns pdPASS if all the other tasks are found + * to be operating without error - otherwise returns pdFAIL. + */ +static portSHORT prvCheckOtherTasksAreStillRunning( void ); + +/* + * Perform the hardware setup required by the ES449 in order to run the demo + * application. + */ +static void prvSetupHardware( void ); + + +portBASE_TYPE xLocalError = pdFALSE; +volatile unsigned portLONG ulIdleLoops = 0UL; + +/*-----------------------------------------------------------*/ + +/* + * Start the demo application tasks - then start the real time scheduler. + */ +int main( void ) +{ + /* Setup the hardware ready for the demo. */ + prvSetupHardware(); + vParTestInitialise(); + + /* Start the standard demo application tasks. */ + vStartLEDFlashTasks( mainLED_TASK_PRIORITY ); + vStartIntegerMathTasks( tskIDLE_PRIORITY ); + vAltStartComTestTasks( mainCOM_TEST_PRIORITY, mainCOM_TEST_BAUD_RATE, mainCOM_TEST_LED - 1 ); + vStartPolledQueueTasks( mainQUEUE_POLL_PRIORITY ); + + /* Start the 'Check' task which is defined in this file. */ + xTaskCreate( vErrorChecks, ( const signed portCHAR * const ) "Check", configMINIMAL_STACK_SIZE, NULL, mainCHECK_TASK_PRIORITY, NULL ); + + /* Start the scheduler. */ + vTaskStartScheduler(); + + /* As the scheduler has been started the demo applications tasks will be + executing and we should never get here! */ + return 0; +} +/*-----------------------------------------------------------*/ + +static portTASK_FUNCTION( vErrorChecks, pvParameters ) +{ +portTickType xDelayPeriod = mainNO_ERROR_CHECK_DELAY; + + /* Cycle for ever, delaying then checking all the other tasks are still + operating without error. */ + for( ;; ) + { + /* Wait until it is time to check again. The time we wait here depends + on whether an error has been detected or not. When an error is + detected the time is shortened resulting in a faster LED flash rate. */ + vTaskDelay( xDelayPeriod ); + + /* See if the other tasks are all ok. */ + if( prvCheckOtherTasksAreStillRunning() != pdPASS ) + { + /* An error occurred in one of the tasks so shorten the delay + period - which has the effect of increasing the frequency of the + LED toggle. */ + xDelayPeriod = mainERROR_CHECK_DELAY; + } + + /* Flash! */ + vParTestToggleLED( mainCHECK_LED ); + } +} +/*-----------------------------------------------------------*/ + +static portSHORT prvCheckOtherTasksAreStillRunning( void ) +{ +static portSHORT sNoErrorFound = pdTRUE; +static unsigned portLONG ulLastIdleLoopCount = 0UL; + + /* The demo tasks maintain a count that increments every cycle of the task + provided that the task has never encountered an error. This function + checks the counts maintained by the tasks to ensure they are still being + incremented. A count remaining at the same value between calls therefore + indicates that an error has been detected. Only tasks that do not flash + an LED are checked. */ + + if( xAreIntegerMathsTaskStillRunning() != pdTRUE ) + { + sNoErrorFound = pdFALSE; + } + + if( xAreComTestTasksStillRunning() != pdTRUE ) + { + sNoErrorFound = pdFALSE; + } + + if( xArePollingQueuesStillRunning() != pdTRUE ) + { + sNoErrorFound = pdFALSE; + } + + if( xLocalError == pdTRUE ) + { + sNoErrorFound = pdFALSE; + } + + if( ulIdleLoops == ulLastIdleLoopCount ) + { + sNoErrorFound = pdFALSE; + } + else + { + ulLastIdleLoopCount = ulIdleLoops; + } + + return sNoErrorFound; +} +/*-----------------------------------------------------------*/ + +static void prvSetupHardware( void ) +{ + /* Stop the watchdog. */ + WDTCTL = WDTPW + WDTHOLD; + + /* Setup DCO+ for ( xtal * D * (N + 1) ) operation. */ + FLL_CTL0 |= DCOPLUS + XCAP18PF; + + /* X2 DCO frequency, 8MHz nominal DCO */ + SCFI0 |= FN_4; + + /* (121+1) x 32768 x 2 = 7.99 Mhz */ + SCFQCTL = mainMAX_FREQUENCY; + + /* Setup the IO. This is just copied from the demo supplied by SoftBaugh + for the ES449 demo board. */ + P1SEL = 0x32; + P2SEL = 0x00; + P3SEL = 0x00; + P4SEL = 0xFC; + P5SEL = 0xFF; +} +/*-----------------------------------------------------------*/ + +/* The idle hook is just a copy of the standard integer maths tasks. See +Demo/Common/integer.c for rationale. */ + +void vApplicationIdleHook( void ) +{ +/* These variables are all effectively set to constants so they are volatile to +ensure the compiler does not just get rid of them. */ +volatile portLONG lValue; + + /* Keep performing a calculation and checking the result against a constant. */ + for( ;; ) + { + /* Perform the calculation. This will store partial value in + registers, resulting in a good test of the context switch mechanism. */ + lValue = intgCONST1; + lValue += intgCONST2; + + /* Yield in case cooperative scheduling is being used. */ + #if configUSE_PREEMPTION == 0 + { + taskYIELD(); + } + #endif + + /* Finish off the calculation. */ + lValue *= intgCONST3; + lValue /= intgCONST4; + + /* If the calculation is found to be incorrect we stop setting the + TaskHasExecuted variable so the check task can see an error has + occurred. */ + if( lValue != intgEXPECTED_ANSWER ) /*lint !e774 volatile used to prevent this being optimised out. */ + { + /* Don't bother with mutual exclusion - it is only read from the + check task and never written. */ + xLocalError = pdTRUE; + } + /* Yield in case cooperative scheduling is being used. */ + #if configUSE_PREEMPTION == 0 + { + taskYIELD(); + } + #endif + + ulIdleLoops++; + + /* Place the processor into low power mode. */ + LPM3; + } +} + + + + + + diff --git a/Demo/msp430_IAR/serial/serial.c b/Demo/msp430_IAR/serial/serial.c new file mode 100644 index 000000000..50afe231a --- /dev/null +++ b/Demo/msp430_IAR/serial/serial.c @@ -0,0 +1,306 @@ +/* + FreeRTOS.org V5.1.0 - Copyright (C) 2003-2008 Richard Barry. + + This file is part of the FreeRTOS.org distribution. + + FreeRTOS.org is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + FreeRTOS.org 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. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with FreeRTOS.org; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + A special exception to the GPL can be applied should you wish to distribute + a combined work that includes FreeRTOS.org, without being obliged to provide + the source code for any proprietary components. See the licensing section + of http://www.FreeRTOS.org for full details of how and when the exception + can be applied. + + *************************************************************************** + *************************************************************************** + * * + * SAVE TIME AND MONEY! We can port FreeRTOS.org to your own hardware, * + * and even write all or part of your application on your behalf. * + * See http://www.OpenRTOS.com for details of the services we provide to * + * expedite your project. * + * * + *************************************************************************** + *************************************************************************** + + Please ensure to read the configuration and relevant port sections of the + online documentation. + + http://www.FreeRTOS.org - Documentation, latest information, license and + contact details. + + http://www.SafeRTOS.com - A version that is certified for use in safety + critical systems. + + http://www.OpenRTOS.com - Commercial support, development, porting, + licensing and training services. +*/ + + +/* BASIC INTERRUPT DRIVEN SERIAL PORT DRIVER. + * + * This file only supports UART 1 + */ + +/* Standard includes. */ +#include + +/* Scheduler includes. */ +#include "FreeRTOS.h" +#include "queue.h" +#include "task.h" + +/* Demo application includes. */ +#include "serial.h" + +/* Constants required to setup the hardware. */ +#define serTX_AND_RX ( ( unsigned portCHAR ) 0x03 ) + +/* Misc. constants. */ +#define serNO_BLOCK ( ( portTickType ) 0 ) + +/* Enable the UART Tx interrupt. */ +#define vInterruptOn() IFG2 |= UTXIFG1 + +/* The queue used to hold received characters. */ +static xQueueHandle xRxedChars; + +/* The queue used to hold characters waiting transmission. */ +static xQueueHandle xCharsForTx; + +static volatile portSHORT sTHREEmpty; + +/*-----------------------------------------------------------*/ + +xComPortHandle xSerialPortInitMinimal( unsigned portLONG ulWantedBaud, unsigned portBASE_TYPE uxQueueLength ) +{ +unsigned portLONG ulBaudRateCount; + + /* Initialise the hardware. */ + + /* Generate the baud rate constants for the wanted baud rate. */ + ulBaudRateCount = configCPU_CLOCK_HZ / ulWantedBaud; + + portENTER_CRITICAL(); + { + /* Create the queues used by the com test task. */ + xRxedChars = xQueueCreate( uxQueueLength, ( unsigned portBASE_TYPE ) sizeof( signed portCHAR ) ); + xCharsForTx = xQueueCreate( uxQueueLength, ( unsigned portBASE_TYPE ) sizeof( signed portCHAR ) ); + + /* Reset UART. */ + UCTL1 |= SWRST; + + /* Set pin function. */ + P4SEL |= serTX_AND_RX; + + /* All other bits remain at zero for n, 8, 1 interrupt driven operation. + LOOPBACK MODE!*/ + U1CTL |= CHAR + LISTEN; + U1TCTL |= SSEL1; + + /* Setup baud rate low byte. */ + U1BR0 = ( unsigned portCHAR ) ( ulBaudRateCount & ( unsigned portLONG ) 0xff ); + + /* Setup baud rate high byte. */ + ulBaudRateCount >>= 8UL; + U1BR1 = ( unsigned portCHAR ) ( ulBaudRateCount & ( unsigned portLONG ) 0xff ); + + /* Enable ports. */ + ME2 |= UTXE1 + URXE1; + + /* Set. */ + UCTL1 &= ~SWRST; + + /* Nothing in the buffer yet. */ + sTHREEmpty = pdTRUE; + + /* Enable interrupts. */ + IE2 |= URXIE1 + UTXIE1; + } + portEXIT_CRITICAL(); + + /* Unlike other ports, this serial code does not allow for more than one + com port. We therefore don't return a pointer to a port structure and can + instead just return NULL. */ + return NULL; +} +/*-----------------------------------------------------------*/ + +signed portBASE_TYPE xSerialGetChar( xComPortHandle pxPort, signed portCHAR *pcRxedChar, portTickType xBlockTime ) +{ + /* Get the next character from the buffer. Return false if no characters + are available, or arrive before xBlockTime expires. */ + if( xQueueReceive( xRxedChars, pcRxedChar, xBlockTime ) ) + { + return pdTRUE; + } + else + { + return pdFALSE; + } +} +/*-----------------------------------------------------------*/ + +signed portBASE_TYPE xSerialPutChar( xComPortHandle pxPort, signed portCHAR cOutChar, portTickType xBlockTime ) +{ +signed portBASE_TYPE xReturn; + + /* Transmit a character. */ + + portENTER_CRITICAL(); + { + if( sTHREEmpty == pdTRUE ) + { + /* If sTHREEmpty is true then the UART Tx ISR has indicated that + there are no characters queued to be transmitted - so we can + write the character directly to the shift Tx register. */ + sTHREEmpty = pdFALSE; + U1TXBUF = cOutChar; + xReturn = pdPASS; + } + else + { + /* sTHREEmpty is false, so there are still characters waiting to be + transmitted. We have to queue this character so it gets + transmitted in turn. */ + + /* Return false if after the block time there is no room on the Tx + queue. It is ok to block inside a critical section as each task + maintains it's own critical section status. */ + xReturn = xQueueSend( xCharsForTx, &cOutChar, xBlockTime ); + + /* Depending on queue sizing and task prioritisation: While we + were blocked waiting to post on the queue interrupts were not + disabled. It is possible that the serial ISR has emptied the + Tx queue, in which case we need to start the Tx off again + writing directly to the Tx register. */ + if( ( sTHREEmpty == pdTRUE ) && ( xReturn == pdPASS ) ) + { + /* Get back the character we just posted. */ + xQueueReceive( xCharsForTx, &cOutChar, serNO_BLOCK ); + sTHREEmpty = pdFALSE; + U1TXBUF = cOutChar; + } + } + } + portEXIT_CRITICAL(); + + return pdPASS; +} +/*-----------------------------------------------------------*/ + +#if configINTERRUPT_EXAMPLE_METHOD == 1 + + /* + * UART RX interrupt service routine. + */ + #pragma vector=UART1RX_VECTOR + __interrupt void vRxISR( void ) + { + signed portCHAR cChar; + portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE; + + /* Get the character from the UART and post it on the queue of Rxed + characters. */ + cChar = U1RXBUF; + + xQueueSendFromISR( xRxedChars, &cChar, &xHigherPriorityTaskWoken ); + + if( xHigherPriorityTaskWoken ) + { + /*If the post causes a task to wake force a context switch + as the woken task may have a higher priority than the task we have + interrupted. */ + taskYIELD(); + } + + /* Make sure any low power mode bits are clear before leaving the ISR. */ + __bic_SR_register_on_exit( SCG1 + SCG0 + OSCOFF + CPUOFF ); + } + /*-----------------------------------------------------------*/ + + /* + * UART Tx interrupt service routine. + */ + #pragma vector=UART1TX_VECTOR + __interrupt void vTxISR( void ) + { + signed portCHAR cChar; + portBASE_TYPE xTaskWoken = pdFALSE; + + /* The previous character has been transmitted. See if there are any + further characters waiting transmission. */ + + if( xQueueReceiveFromISR( xCharsForTx, &cChar, &xTaskWoken ) == pdTRUE ) + { + /* There was another character queued - transmit it now. */ + U1TXBUF = cChar; + } + else + { + /* There were no other characters to transmit. */ + sTHREEmpty = pdTRUE; + } + + /* Make sure any low power mode bits are clear before leaving the ISR. */ + __bic_SR_register_on_exit( SCG1 + SCG0 + OSCOFF + CPUOFF ); + } + /*-----------------------------------------------------------*/ + +#elif configINTERRUPT_EXAMPLE_METHOD == 2 + + /* This is a standard C function as an assembly file wrapper is used as an + interrupt entry point. */ + void vRxISR( void ) + { + signed portCHAR cChar; + portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE; + + /* Get the character from the UART and post it on the queue of Rxed + characters. */ + cChar = U1RXBUF; + + xQueueSendFromISR( xRxedChars, &cChar, &xHigherPriorityTaskWoken ); + + /*If the post causes a task to wake force a context switch + as the woken task may have a higher priority than the task we have + interrupted. */ + portYIELD_FROM_ISR( xHigherPriorityTaskWoken ); + } + /*-----------------------------------------------------------*/ + + /* This is a standard C function as an assembly file wrapper is used as an + interrupt entry point. */ + void vTxISR( void ) + { + signed portCHAR cChar; + portBASE_TYPE xTaskWoken = pdFALSE; + + /* The previous character has been transmitted. See if there are any + further characters waiting transmission. */ + + if( xQueueReceiveFromISR( xCharsForTx, &cChar, &xTaskWoken ) == pdTRUE ) + { + /* There was another character queued - transmit it now. */ + U1TXBUF = cChar; + } + else + { + /* There were no other characters to transmit. */ + sTHREEmpty = pdTRUE; + } + } + +#endif /* configINTERRUPT_EXAMPLE_METHOD */ +/*-----------------------------------------------------------*/ diff --git a/Demo/msp430_IAR/serial/serialASM.s43 b/Demo/msp430_IAR/serial/serialASM.s43 new file mode 100644 index 000000000..a0d5651e6 --- /dev/null +++ b/Demo/msp430_IAR/serial/serialASM.s43 @@ -0,0 +1,101 @@ +/* + FreeRTOS.org V5.1.0 - Copyright (C) 2003-2008 Richard Barry. + + This file is part of the FreeRTOS.org distribution. + + FreeRTOS.org is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + FreeRTOS.org 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. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with FreeRTOS.org; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + A special exception to the GPL can be applied should you wish to distribute + a combined work that includes FreeRTOS.org, without being obliged to provide + the source code for any proprietary components. See the licensing section + of http://www.FreeRTOS.org for full details of how and when the exception + can be applied. + + *************************************************************************** + *************************************************************************** + * * + * SAVE TIME AND MONEY! We can port FreeRTOS.org to your own hardware, * + * and even write all or part of your application on your behalf. * + * See http://www.OpenRTOS.com for details of the services we provide to * + * expedite your project. * + * * + *************************************************************************** + *************************************************************************** + + Please ensure to read the configuration and relevant port sections of the + online documentation. + + http://www.FreeRTOS.org - Documentation, latest information, license and + contact details. + + http://www.SafeRTOS.com - A version that is certified for use in safety + critical systems. + + http://www.OpenRTOS.com - Commercial support, development, porting, + licensing and training services. +*/ + +#include "FreeRTOSConfig.h" +#include "..\..\Source\portable\IAR\MSP430\portasm.h" + +/* These wrappers are only used when interrupt method 2 is being used. See +FreeRTOSConfig.h for an explanation. */ +#if configINTERRUPT_EXAMPLE_METHOD == 2 + +.CODE + + + + + +/* Wrapper for the Rx UART interrupt. */ +_vUARTRx_Wrapper + + portSAVE_CONTEXT + call #_vRxISR + portRESTORE_CONTEXT + +/*-----------------------------------------------------------*/ + +/* Wrapper for the Tx UART interrupt. */ +_vUARTTx_Wrapper + + portSAVE_CONTEXT + call #_vTxISR + portRESTORE_CONTEXT + +/*-----------------------------------------------------------*/ + + + + + /* Place the UART ISRs in the correct vectors. */ + + .VECTORS + + .KEEP + + ORG UART1RX_VECTOR + DW _vUARTRx_Wrapper + + ORG UART1TX_VECTOR + DW _vUARTTx_Wrapper + + +#endif /* configINTERRUPT_EXAMPLE_METHOD */ + + END + + diff --git a/Demo/msp430_IAR/settings/RTOSDemo.cspy.bat b/Demo/msp430_IAR/settings/RTOSDemo.cspy.bat new file mode 100644 index 000000000..5b8ce13a1 --- /dev/null +++ b/Demo/msp430_IAR/settings/RTOSDemo.cspy.bat @@ -0,0 +1,33 @@ +@REM This bat file has been generated by the IAR Embeddded Workbench +@REM C-SPY interactive debugger,as an aid to preparing a command +@REM line for running the cspybat command line utility with the +@REM appropriate settings. +@REM +@REM After making some adjustments to this file, you can launch cspybat +@REM by typing the name of this file followed by the name of the debug +@REM file (usually an ubrof file). Note that this file is generated +@REM every time a new debug session is initialized, so you may want to +@REM move or rename the file before making changes. +@REM +@REM Note: some command line arguments cannot be properly generated +@REM by this process. Specifically, the plugin which is responsible +@REM for the Terminal I/O window (and other C runtime functionality) +@REM comes in a special version for cspybat, and the name of that +@REM plugin dll is not known when generating this file. It resides in +@REM the $TOOLKIT_DIR$\bin folder and is usually called XXXbat.dll or +@REM XXXlibsupportbat.dll, where XXX is the name of the corresponding +@REM tool chain. Replace the '' parameter +@REM below with the appropriate file name. Other plugins loaded by +@REM C-SPY are usually not needed by, or will not work in, cspybat +@REM but they are listed at the end of this file for reference. + + +"C:\Devtools\IAR Systems\Embedded Workbench 4.0\common\bin\cspybat" "C:\Devtools\IAR Systems\Embedded Workbench 4.0\430\bin\430proc.dll" "C:\Devtools\IAR Systems\Embedded Workbench 4.0\430\bin\430fet.dll" %1 --plugin "C:\Devtools\IAR Systems\Embedded Workbench 4.0\430\bin\" --backend -B "-p" "C:\Devtools\IAR Systems\Embedded Workbench 4.0\430\config\MSP430F449.ddf" "-d" "fet" "--verify_all" "--erase_main_and_info" "--derivative" "MSP430F449" "-lpt1" "--connection" "parallel_port" "--allow_locked_flash_access" "--protocol" "4wire" "--eem" "EMEX_HIGH" + + +@REM Loaded plugins: +@REM 430libsupport.dll +@REM C:\Devtools\IAR Systems\Embedded Workbench 4.0\430\plugins\lcd\lcd.dll +@REM C:\Devtools\IAR Systems\Embedded Workbench 4.0\common\plugins\CodeCoverage\CodeCoverage.dll +@REM C:\Devtools\IAR Systems\Embedded Workbench 4.0\common\plugins\Profiling\Profiling.dll +@REM C:\Devtools\IAR Systems\Embedded Workbench 4.0\common\plugins\stack\stack.dll diff --git a/Demo/msp430_IAR/settings/RTOSDemo.dbgdt b/Demo/msp430_IAR/settings/RTOSDemo.dbgdt new file mode 100644 index 000000000..a0936d6ac --- /dev/null +++ b/Demo/msp430_IAR/settings/RTOSDemo.dbgdt @@ -0,0 +1,76 @@ + + + + + + + + 20 + 1006 + 268 + 67 + + + + + + + + 304272727 + + + + + + 200100 + 200 + + + + + + + + TabID-22310-31641 + Debug Log + Debug-Log + + + + TabID-21787-31651 + Build + Build + + + TabID-3522-7304BreakpointsBreakpoints + + 0 + + + TabID-290-31644 + Workspace + Workspace + + + RTOSDemoRTOSDemo/FreeRTOS SourceRTOSDemo/Output + + + + 0 + + + + + + TextEditorC:\Devtools\IAR Systems\Embedded Workbench 4.0\430\INC\msp430x44x.h012726662066620TextEditorC:\E\Dev\FreeRTOS\WorkingCopy2\Demo\msp430_IAR\Debug\List\RTOSDemo.map0128641214121TextEditorC:\E\Dev\FreeRTOS\WorkingCopy2\Source\portable\IAR\MSP430\port.c011953945394TextEditorC:\E\Dev\FreeRTOS\WorkingCopy2\Source\portable\IAR\MSP430\portext.s4306728622862TextEditorC:\E\Dev\FreeRTOS\WorkingCopy2\Source\portable\IAR\MSP430\portmacro.h08145094509TextEditorC:\E\Dev\FreeRTOS\WorkingCopy2\Demo\msp430_IAR\serial\serial.c012749414941TextEditorC:\E\Dev\FreeRTOS\WorkingCopy2\Demo\Common\Minimal\comtest.c019588858885TextEditorC:\E\Dev\FreeRTOS\WorkingCopy2\Demo\msp430_IAR\main.c030111204112067TextEditorC:\E\Dev\FreeRTOS\WorkingCopy2\Source\queue.c04911959019590TextEditorC:\E\Dev\FreeRTOS\WorkingCopy2\Demo\Common\Minimal\PollQ.c013259085908TextEditorC:\E\Dev\FreeRTOS\WorkingCopy2\Source\tasks.c018375727457309TextEditorC:\E\Dev\FreeRTOS\WorkingCopy2\Demo\msp430_IAR\FreeRTOSConfig.h095458145810100000010000001 + + + + + + + iaridepm.enu1debuggergui.enu1430fet1-2-2644378-2-2200200142857203666271429657841-2-22701402-2-214042721002857276986142857203666 + + + + diff --git a/Demo/msp430_IAR/settings/RTOSDemo.dni b/Demo/msp430_IAR/settings/RTOSDemo.dni new file mode 100644 index 000000000..0711c9e26 --- /dev/null +++ b/Demo/msp430_IAR/settings/RTOSDemo.dni @@ -0,0 +1,65 @@ +[Interrupts] +Enabled=1 +[MemoryMap] +Enabled=0 +Base=0 +UseAuto=0 +TypeViolation=1 +UnspecRange=1 +ActionState=1 +[TraceHelper] +Enabled=0 +ShowSource=1 +[State Storage] +Control Register=0 +[Sequencer] +Control Register=0 +NextState0=0 +NextState1=0 +[Action Register] +Break=3 +State Storage=0 +[DisAssemblyWindow] +NumStates=_ 1 +State 1=_ 1 +[Profiling] +Enabled=0 +[StackPlugin] +Enabled=1 +OverflowWarningsEnabled=1 +WarningThreshold=90 +SpWarningsEnabled=1 +WarnHow=0 +UseTrigger=1 +TriggerName=main +LimitSize=0 +ByteLimit=50 +[Log file] +LoggingEnabled=_ 0 +LogFile=_ "" +Category=_ 0 +[TermIOLog] +LoggingEnabled=_ 0 +LogFile=_ "" +[Breakpoints] +Bp0=_ "Code" "{$PROJ_DIR$\main.c}.153.2@1" 1 0 0 0 "" 0 "" +Count=1 +[FET] +Clock mode=14 +Extended Clock mode=61663 +Extended Clock Control Enable=0 +Advanced Extended Clock Control=0 +Emulation mode=0 +Free running=0 +Shutting Down=3 +[Memory Dump] +Start address= +Lenghth= +Address info=0 +Format=0 +Dump registers=0 +PC=0 +SP=0 +SR=0 +all registers=0 +File name= diff --git a/Demo/msp430_IAR/settings/RTOSDemo.wsdt b/Demo/msp430_IAR/settings/RTOSDemo.wsdt new file mode 100644 index 000000000..a41292be7 --- /dev/null +++ b/Demo/msp430_IAR/settings/RTOSDemo.wsdt @@ -0,0 +1,66 @@ + + + + + + RTOSDemo/Debug + + + + + + + + + 274272727 + + + + + + + 20100626867 + + + + + + + + TabID-14502-17068 + Workspace + Workspace + + + RTOSDemoRTOSDemo/Demo SourceRTOSDemo/FreeRTOS SourceRTOSDemo/Output + + + + 0 + + + TabID-7853-19854 + Build + Build + + + TabID-9700-31468Debug LogDebug-LogTabID-26943-7889BreakpointsBreakpoints + + 0 + + + + + + TextEditorC:\E\Dev\FreeRTOS\WorkingCopy2\Demo\msp430_IAR\main.c0750000100000010000001 + + + + + + + iaridepm.enu1-2-2679348-2-2200200142857203666250000693483-2-22591402-2-214042611002857265784142857203666 + + + + -- 2.39.2