TI MSP430FR5969 (MSP430X) RTOS Demo
Supporting IAR, and TI (CCS) compilers
[RTOS Ports]
The MSP-EXP430FR5969 LaunchPad Development Kit
Introduction
This page documents the RTOS demo application that targets the
Texas Instruments MSP430FR5969
low power microcontroller, which has a 16-bit MSP430X core.
Pre-configured projects that target the
MSP-EXP430FR5969 Launchpad Development
Kit are provided for both the IAR
and Code Composer Studio (CCS) MSP430 compilers:
Each project can be compiled to create either a simple blinky demo,
or a comprehensive test and demo application that includes a
FreeRTOS-Plus-CLI
command line interface. Further, build configurations are provided that use both
the large and small data models.
A note on low power support
The Idle hook is used to place the MSP430 MCU into a low
power mode as a crude method of saving power. The provision of a
tickless idle
implementation would significantly improve the power saving that could be
achieved, but is not configured in this demonstration.
Screen shot of the FreeRTOS state viewer plug-in
that ships with the IAR IDE. Click to enlarge.
|
IMPORTANT! Notes on using MSP430X RTOS Demo
Please read all the following points before using this RTOS port.
- Source Code Organisation
- The Demo Application
- RTOS Configuration and Usage Details
See also the FAQ My application does
not run, what could be wrong?
Source Code Organisation
The RTOS source code download contains the files for every FreeRTOS port and every
demo application, so contains many more files than are required by the MSP430FR5969
demo. See the Source Code Organization
section of this website for a description of the downloaded files.
The IAR and CCS projects are both located in the
/FreeRTOS/Demo/MSP430X_MSP430FR5969_LaunchPad_IAR_CCS directory:
-
The IAR Embedded Workbench for MSP430 (EW430) project is called RTOSDemo.eww
-
The CCS project has the usual Eclipse project name .project
Building and Running the MSP430FR5969 MSP430X RTOS Application
The RTOS demo projects can be configured to build a simple blinky project,
or a comprehensive test and demo application. The constant
mainCREATE_SIMPLE_BLINKY_DEMO_ONLY is used to switch between the two.
mainCREATE_SIMPLE_BLINKY_DEMO_ONLY is defined at the top of main.c.
-
The simple blinky demo is created if mainCREATE_SIMPLE_BLINKY_DEMO_ONLY
is set to 1.
-
The comprehensive demo is created if mainCREATE_SIMPLE_BLINKY_DEMO_ONLY
is set to 0.
The demo uses an LED built onto the MSP-EXP430FR5969 Launchpad development kit,
so no hardware setup is required.
The following sub-sections provide instructions on using the tool chains for which
pre-configured projects are provided.
-
Building with the IAR Embedded Workbench
-
Building with Code Composer Studio
-
Open FreeRTOS/Demo/MSP430X_MSP430FR5969_LaunchPad_IAR_CCS/RTOSDemo.eww in the
IAR Embedded Workbench IDE.
-
Select either the large of small data model build configuration as shown
in the image below (see
the data model section section under the RTOS
Configuration and Usage Notes heading for special information on switching
data models using IAR).
-
Select "Rebuild All" from the IAR Embedded Workbench "Project" menu (or press F7) to build
the demo project.
-
Ensure the MSP-EXP430FR5969 Launchpad hardware is connected to the host
computer.
-
Select "Download and Debug" from the IAR Embedded Workbench "Project"
menu to program the microcontroller flash memory and start a debug
session.
Selecting the large or small data model
build configuration using
the IAR IDE
Note: The IAR project can fail to build and get corrupted (so it can no longer
be used with any IAR version) if it is opened in a version of EW430 that is older
than the version that was used to originally create the project.
-
Start the CCS Eclipse IDE, and either create a new or select an existing
workspace when prompted.
-
Select "Import" from the IDE's "File" menu. The dialogue box shown below
will appear. Select "Code Composer Studio->CCS Projects", as shown below.
The dialogue box that appears when "Import" is first clicked
-
In the next dialogue box, select /FreeRTOS/Demo/MSP430X_MSP430FR5969_LaunchPad_IAR_CCS
as the root directory. Make sure the RTOSDemo project is checked in the "Projects" area,
and that the Copy Projects Into
Workspace box is not checked, before clicking
the Finish button (see the image below for the correct check box states).
Make sure RTOSDemo is checked, and "Copy projects into workspace" is not checked
-
Select either the large of small data model build configuration. See
the image below.
-
Select "Build All" from the CCS Eclipse "Project" menu to build
the demo project.
-
Ensure the MSP-EXP430FR5969 Launchpad hardware is connected to the host
computer.
-
Select "Debug" from the Eclipse "Run"
menu to program the microcontroller's flash memory and start a debug
session.
Selecting the large or small data model
build configuration using
the CCS IDE
Note: The CCS project references files using relative paths, including
FreeRTOS-Plus-CLI files from the /FreeRTOS-Plus directory. The project may
fail to build if a directory path is changed or if a file is moved. Eclipse's
'export' features can be used to convert the project into a stand-alone project
that only uses directories under the directory in which the .project file is located.
Demo Application Functionality
The simply blinky example
mainCREATE_SIMPLE_BLINKY_DEMO_ONLY is defined at the top of main.c.
When mainCREATE_SIMPLE_BLINKY_DEMO_ONLY is set to 1 main() will call main_blinky():
-
The main_blinky() Function:
main_blinky() creates a queue, a queue send task, and a queue receive
task, before starting the scheduler.
-
The Queue Send Task:
The queue send task is implemented by the prvQueueSendTask() function in main_blinky.c.
prvQueueSendTask() sends the value 100 to the queue every 200 milliseconds.
-
The Queue Receive Task:
The queue receive task is implemented by the prvQueueReceiveTask() function
in main_blinky.c.
prvQueueReceiveTask() blocks to wait for data to arrive on the queue,
unblocking and toggling an LED each time the queue send task writes to
the queue. As the queue send task writes to the queue every 200 milliseconds,
the queue receive task will unblock and toggle the LED every 200 milliseconds.
The comprehensive test and demo application
Sample CLI session
The comprehensive demo includes a
command line interface
(CLI) on which both task and run-time statistics can be viewed. Instructions on
connecting to and using the CLI are provided below.
Note: The CLI output is sporadic when the demo application is executing in
the debugger, but much smoother when the demo application is executing standalone.
mainCREATE_SIMPLE_BLINKY_DEMO_ONLY is defined at the top of main.c.
When mainCREATE_SIMPLE_BLINKY_DEMO_ONLY is set to 1 main() will call main_full():
-
The main_full() Function:
main_full() creates a set of standard demo tasks,
the CLI, the Check task, the Register Test tasks, and starts the
scheduler.
-
The "Reg Test" Tasks:
The reg test tasks test the context switching mechanism by filling each
MCU register with a known value, then continuously checking that each
register maintains its expected value for the lifetime of the task.
-
The "Check" Task:
The "Check" task monitors the status of all the other tasks in
the system, looking for a task either stalling or reporting an error.
It toggles an LED each time it is called.
If the LED is toggling every three seconds then the check task has determined
the demo is running as expected. If the LED
is toggling every 200ms then at least one potential error has been found.
To connect to the CLI:
-
Run the comprehensive demo. A UART on the MPS430FR5969 will enumerate
as a virtual COM port called "MSP Application UART1" on the
host computer.
-
Open a dumb terminal program, such as Tera Term or Hyper Terminal, and
connect to the enumerated COM port at 19200 baud.
-
As always with FreeRTOS-Plus-CLI - type "help" into the console to see a
list of registered commands. An example CLI session is shown on the right.
The RTOS supports both the large and the small data model. The data model is
selected using the build options in the chosen IDE.
Note for IAR users: If you are using the IAR
tools then there is an additional
step that must be performed when configuring FreeRTOS as follows:
-
If the large data model is used then __DATA_MODEL_LARGE__ must be defined
as an assembler (not compiler) symbol. See the image
below.
-
If the small data model is used then __DATA_MODEL_SMALL__ must be defined
as an assembler (not compiler) symbol. See the image
below.
Defining the necessary assembler symbol
Configuring the RTOS tick interrupt
FreeRTOS requires exclusive use of a timer that is capable of generating a periodic
interrupt called the RTOS 'tick' interrupt. The timer is configured in a user
definable hook (or callback) function, so giving the application writer the
flexibility to decide which timer peripheral is actually used. The name and
prototype of the hook function is shown below:
void vApplicationSetupTimerInterrupt( void );
The constant configTICK_VECTOR must be set to the interrupt vector number of the
chosen peripheral. configTICK_VECTOR is defined in the FreeRTOSConfig.h header
file. This demo project includes an implementation of
vApplicationSetupTimerInterrupt() that configures timer TA0 to generate the tick
interrupt and therefore sets configTICK_VECTOR to TIMER0_A0_VECTOR. The
provided code will have to be modified only if the application being developed
needs TA0 to be free for some other purpose.
Interrupt service routines
Unlike most ports, interrupt service routines that cause a context switch have
no special requirements and can be written as per the compiler documentation.
The macro portYIELD_FROM_ISR() can be used to request a context switch from
within an ISR. Note: portYIELD_FROM_ISR() must
be the last statement in the ISR.
This demo project provides examples of FreeRTOS interrupt service routines -
including prvUSCI_A0_ISR() defined in serial.c. Note that prvUSCI_A0_ISR() is
implemented to stress the port and demonstrate queues being used from interrupts
- it is not intended to be a demonstration of an efficient or a generic interrupt
service routine!
RTOS port specific configuration
Configuration items specific to these demos are contained in the FreeRTOSConfig.h
file located in the same directory as the project file. The
constants defined in FreeRTOSConfig.h can be edited to meet the needs of your application. In particular -
Each port #defines 'BaseType_t' to equal the most efficient data type for that
processor. The MSP430X RTOS port defines BaseType_t to be of type short.
Note that vPortEndScheduler() has not been implemented.
Memory allocation
Source/Portable/MemMang/heap_4.c is included in the MSP430X demo application project to provide the memory
allocation required by the RTOS kernel.
Please refer to the Memory Management section of the API documentation for
full information.
Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.
|