While writing codes, a lot of times I need to do some math calculation which I did on paper/calculator only to get some constant values (e.g. hardware register settings, etc.). Either you realize it or not, these kind of calculation tasks can be really simply done using the C preprocessor to get the job done.
The CC3000 SDK (Software Development Kit) contains examples for MSP-EXP430F5529 development kit + CC3000EM. The MSP-EXP430F5529 (TI e-Store price: 175 USD) is far more expensive than the MSP-EXP430F5529LP Launchpad (TI e-Store price: 112.99 USD), and the CC3000EM is no longer available, replaced by the CC3000BOOST. This short guide shows how to modify the examples delivered in the CC3000 SDK (for MSP-EXP430F5529+CC3000EM), so the same code can run on the MSP-EXP430F5529LP Launchpad + CC3000BOOST boosterpack.
I had the chance to play a bit with the CC3000 Boosterpack which can be used together with the MSP-EXP430G2 Launchpad, and it seems like a very interesting device. It enables WiFi/Internet connection for microcontrollers with small memory size. The CC3000 works such as network processor running a TCP/IP stack which basically does the whole stuffs related to the WiFi/Internet connection, and users need only to implement the application on the host microcontroller. A very nice thing from the software point of view which I found also is that the host source code uses similar API to the BSD socket which is basically the standard API for socket programming .
One of the basic example provided for this kit is called the Basic WiFi example, where basically the MSP-EXP430G2 Launchpad kit is connected via USB to a PC and receives command to execute some basic functionalities such as connecting to a WiFi Access Point, opening a UDP socket, sending and receiving data via the UDP socket, etc. It is basically a nice example to get started working with the platform, however I find it a bit hard to test the example since you need to work with hyperterminal and type in the command code manually. Therefore I decided to write a python based script tool running on the PC which can be used as a host for the CC3000 Basic WiFi example, and it can be found here.
Referring to the MSP430 microcontroller device datasheet, the current consumption in active mode (CPU on) is usually specified around 10-40% lower if the code is executed from SRAM than from flash memory. For example:
- The MSP430F22x4 datasheet specifies the current consumption in active mode (CPU = 1MHz, Vcc = 3.3V) to be 340 uA when running code from SRAM and 390 uA when running from Flash.
- The MSP430F543xA datasheet specifies current consumption in active mode (CPU= 1MHz, PMMCOREVx=0, Vcc = 3.0V) to be 0.17 mA when running code from SRAM and 0.29 mA when running from flash.
Therefore in an application which has very limited power source and has small routines which are executed quite often, it is useful to execute the routine from SRAM instead of flash memory to reduce the current consumption. Onwards let’s call such function executed from RAM/SRAM during run-time as “RAM function”. The basic principle is quite simple: the code needs of course to be first stored in a non-volatile memory (e.g. flash memory), however these code will then be copied into RAM during initialization to enable executing it from RAM during run-time.
The following guide shows the implementation of code example for implementing RAM function in C programming language for MSP430 microcontroller device on the IAR Embedded Workbench (IAR EWB) compiler and Code Composer Studio (CCSTUDIO), inspired by the flash write code example of MSP430F543x. The example uses the MSP430G2553 on MSP-EXP430G2 Launchpad development board as target device. The MSP430G2553 microcontroller basically has 16 KB Flash (address range 0xC000 – 0xFFFF) and 512 bytes SRAM (address range 0x200 – 0x3FF) on-chip. Although practically it is not really suitable to use the MSP430G2553 for implementing RAM functions due the small SRAM memory size, the example codes basically tries to give a proof of concept on how RAM functions which can even implement ISR (In terrupt Service Routine).