Skip to content Skip to navigation

Connexions

You are here: Home » Content » 1.5 - Lab 1: C and Macros with Texas Instruments' ez430

Navigation

Content Actions

  • Download module PDF
  • Add to ...
    Add the module to:
    • My Favorites
    • A lens
    • An external social bookmarking service
    • My Favorites (What is 'My Favorites'?)
      'My Favorites' is a special kind of lens which you can use to bookmark modules and collections directly in Connexions. 'My Favorites' can only be seen by you, and collections saved in 'My Favorites' can remember the last module you were on. You need a Connexions account to use 'My Favorites'.
    • A lens (What is a lens?)

      Definition of a lens

      Lenses

      A lens is a custom view of Connexions content. You can think of it as a fancy kind of list that will let you see Connexions through the eyes of organizations and people you trust.

      What is in a lens?

      Lens makers point to Connexions materials (modules and collections), creating a guide that includes their own comments and descriptive tags about the content.

      Who can create a lens?

      Any individual Connexions member, a community, or a respected organization.

    • External bookmarks
  • E-mail the author

Lenses

What is a lens?

Definition of a lens

Lenses

A lens is a custom view of Connexions content. You can think of it as a fancy kind of list that will let you see Connexions through the eyes of organizations and people you trust.

What is in a lens?

Lens makers point to Connexions materials (modules and collections), creating a guide that includes their own comments and descriptive tags about the content.

Who can create a lens?

Any individual Connexions member, a community, or a respected organization.

This content is ...

Affiliated with (What does "Affiliated with" mean?)

This content is either by members of the organizations listed or about topics related to the organizations listed. Click each link to see a list of all content affiliated with the organization.
  • TI MSP430

    This module is included inLens: Texas Instruments MSP430
    By: Texas InstrumentsAs a part of collection:"Introduction to the Texas Instruments ez430"

    Comments:

    "This is the entire course organized at Rice University for all the basic lessons for using an MSP430. It is designed for the use of an eZ430 tool and is still under construction."

    Click the "TI MSP430" link to see all content affiliated with them.

Recently Viewed

This feature requires Javascript to be enabled.

Tags

(What is a tag?)

These tags come from the endorsement, affiliation, and other lenses that include this content.

1.5 - Lab 1: C and Macros with Texas Instruments' ez430

Module by: Naren Anand Based on: Lab 2: C and Macros with Texas Instruments' MSP430 by CJ Ganier, adrian valenzuela

Summary: Programming basic C on an embedded processor.

The primary difference between "normal" and embedded C programming is that you will need to write directly to registers to control the operation of the processor. Fortunately, the groundwork has already been laid for you to make this easier. All of the registers in the ez430 have been mapped to macros by Texas Instruments. Additionally, the important bit combinations for each of these registers have macros that use the same naming convention as the user’s guide. Other differences from the C used on most platforms include:

  • Most registers in the ez430 are 16 bits long, so an int value is 2 bytes (16 bits) long.
  • Writing to registers is not always like writing to a variable because the register may change without your specific orders. It is always important to read the register description to see what the register does.
  • The watchdog timer will automatically reset the ez430 unless you set the register not to.
  • There is only a limited "standard out" system. Standard out will typically print results to your computer screen.
  • Floating-point operations cannot be efficiently performed. In general, you should avoid floating point decimal calculations on the ez430 because it does not have special hardware to support the complicated algorithms used.

Exercise 1: Code Review

In this exercise, you may want to use some of the debugging tools (Breakpoints, Watch Window, Locals Window) to help you understand what the code is doing. Start a new project. Cut and paste the following code into main.c:

#include "msp430x20x3.h"

void main(void){

  int i,j,tmp;
  int a[20]={0x000C,0x0C62,0x0180,0x0D4A,0x00F0,0x0CCF,0x0C35,0x096E,0x02E4,
  0x0BDB,0x0788,0x0AD7,0x0AC9,0x0D06,0x00EB,0x05CC,0x0AE3,0x05B7,0x001D,0x0000};

  for (i=0; i<19; i++){
    for (j=0; j<9-i; j++){
      if (a[j+1] < a[j]) {
        tmp = a[j];
	a[j] = a[j+1];
        a[j+1] = tmp;
      }
    }
  }
  
while(1);
}
  1. Explain what this program is doing. Why is the while(1) statement at the end of the code necessary for all programs we write at this point?
  2. Use any of the methods listed above to show the updated array. What is the final result?
  3. Modify the code so that it prints the final version of the array to standard out (you will have to use a loop of your choice to cycle through each element of the array). What are the drawbacks and benefits of using printf over setting a breakpoint?

HINT:

To use the standard out, add the following line to the top of your code:
#include "stdio.h";
Then, select Project->Options, the Library Options tab in General Options, and finally select Tiny in the Printf formatter drop down menu. The printf() function will print to standard out (when the debugger is running, select View->Terminal I/O). For example, printf("x equals %d\n", x); will print out the value of x to the window. The %d means that x is a number, and \n will produce a line break.

Exercise 2: Functions

Multiplications and division are very complex operations to do on any microprocessor. The operations should be avoided if possible or should be replaced with simpler, equivalent operations.

  1. What do the operators << and >> do?
  2. How could you use these operators to perform multiplication and division?
  3. Write the function multiply(int x, int y) that takes parameter x and multiplies it by y by using a bit shift. It must return an int. For symplicity, it is OK to assume that y is a power of 2.
  4. Next, write the function divide(int x, int y) that takes parameter x and divides it by y by using a bit shift. It must also return an int.

Exercise 3: Digital I/O Registers

Open the header file msp430x20x3.h by right clicking the name in your code and selecting Open "msp430x20x3.h" This file contains the macros and register definitions for the ez430 we are using. Using the ez430 schematic, this header file, and ez430's User Guide please answer the following questions.

  1. The Watchdog Timer will automatically reset the hardware if it isn't periodically reset or disabled entirely. Usually, we will simply disable it. It can be disabled by writing to the WDTPW (watchdog timer password) and WDTHOLD (watchdog timer hold) section of the Watchdog Timer Control Register (WDTCTL). Refer to Section 7.3 of the User's Guide for more information. Find the macros for this register in the header file. How are they different from their description in the User's Guide? Finally, write the C code required to disable it.
  2. What are the differences among P1DIR, P1SEL, P1OUT, P1IN?
  3. Some port pins have multiple functions to output and it is up to the user to select the appropriate signal. Write some code that would select the alternate function of P2.2 (pin 2 of port 2). What will the result be on our hardware?

Exercise 4: Programming Digital I/O

Write a program to blink SOS in Morse code repeatedly. In Morse code SOS is S:"..." O:"---" S:"..." where each '.' is a shorter blink and a '-' is a longer blink. According to The International Morse Code Standard (on Wikipedia) the relative lengths of times between dots and dashes are as follows:

  • The amount of time of a dash is equivalent in length to 3 dots.
  • The amount of time between parts of a letter is equivalent in length to one dot.
  • The amount of time between letters is equivalent in length to 3 dots.
  • The amount of time between words (assume each SOS is a word) is equivalent to 5 dots.
Make the delays (time length of a dot) by using a for-loop that counts to a large enough value.

HINT:

Make sure you disable the watchdog timer at the very beginning of the program.

Comments, questions, feedback, criticisms?

Send feedback