<< Chapter < Page Chapter >> Page >
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.

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); }

  • 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?
  • Use any of the methods listed above to show the updated array. What is the final result?
  • 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?
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.

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.

  • What do the operators<<and>>do?
  • How could you use these operators to perform multiplication and division?
  • 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.
  • 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 .

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.

  • 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.
  • What are the differences among P1DIR, P1SEL, P1OUT, P1IN?
  • 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?

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.
Make sure you disable the watchdog timer at the very beginning of the program.

Get Jobilize Job Search Mobile App in your pocket Now!

Get it on Google Play Download on the App Store Now




Source:  OpenStax, Introduction to the texas instruments ez430. OpenStax CNX. Jun 19, 2006 Download for free at http://cnx.org/content/col10354/1.6
Google Play and the Google Play logo are trademarks of Google Inc.

Notification Switch

Would you like to follow the 'Introduction to the texas instruments ez430' conversation and receive update notifications?

Ask