Assembly Language Programming
Jump to navigation
Jump to search
Useful Links for the Assembly Language Programming Class
ARM7 Links
- Dr. Aamodt's Assembly Language Web Page
- ARM Assembly Language Programming, a free book by Knaggs and Welsh (2004 Edition). This book is quite useful. It is a better as a reference than our text.
- Another text in html format.
- The ARM Instruction Set, a good reference work.
- Knaggs and Welsh (2008 Edition).
- ARM Instruction Set Quick Finder
- ARM Instructions Quick Reference Card
- Keil ARM Assembler Manual
- This reference tells in more detail what happens to the flags, etc. for each instruction.
- Bit Operations Explained
- Code Examples from Class
- Using the I/O on the LPC2148
- I2C Interfacing and comparison of serial protocols
- The ARM Info Center is a good reference site.
- The ARM7 Reference Manual is the go to reference.
- The Embedded Arts Board of Education Reference Manual gives the details of the board we are using in class.
- LPC214x Reference Manual This guide is immensely useful for programming the peripherals.
- ARM Compiler Toolchain Reference Manual
- ARM Reference Manual Section A of this manual is the most use.
Raspberry Pi
Depending on the version, your pi may use ARM6 or ARM7. There is actually quite a lot of good assembly language information for programming the raspberry pi.
- This document shows how to use gnu tools from the command line (even over ssh if you have no display handy) and then how to use the Code::Blocks IDE for Raspberry Pi Assembly programming. This also seems to apply to the Odroid C1 board running Ubuntu and probably other Odroid boards as well.
TI MSP430 Links
- MSP430 Family Details This is a good quick overview of the MSP430.
- A MSP430 Assembly Language Tutorial
- Notes from the University of Texas at El Paso (UTEP) The EE3376 class.
- Binary Numbering Systems and Operations
- Assembly Instructions
- MSP430 Assembly Instruction Set Architecture
- The Stack, Interrupts, and the FIFO Buffer
- Data Structures
- Hardware Interfacing
- Timers
- Universal Serial Communication Interface (USCI)
- Analog to Digital Conversion
- Instruction Set Quick Reference Guide
- Addressing Modes of the MSP430
- Brigham Young University CS224 This is a very in depth and good reference for learning the MSP430.
- MSP430 Software Coding Techniques (best practices for low power consumption)
- ECE382, a good self learning site for the MSP430
- Berkeley's MOOC where they build a robot using the MSP430 Launchpad (G2 version).
- Launchpad Workshop
- Interrupts
- Using Port Pin Interrupts
- TimerA Presentation
- MSP430 Assembly Code Examples from Class
- A script to convert IAR assembly programs to CCS and vice versa
- MSP430 Assembly Language Tutorial
- Assembly Language Lecture I like the looping flow charts and their equivalents in assembly.
- A large and comprehensive set of lab experiments and code....
- Assembler, Linker, and Loader
- Gustavo Litovsky's great set of tutorials on the MSP430 Pick the latest one. There is some good information on using peripherals, though all in C.
- Assembly Language, the Basics
- MSP430 Microcontroller Basics, by John Davies
Toolchain
- Code Composer Studio 6 for MSP430 User's Guide CCS will work with Linux and Windows, and now a beta is available for OS X.
- To install CCSV6.1 on Ubuntu 15.04, you need to
$ unset JAVA_TOOL_OPTIONS
before running the installer. There is some more information for Linux installs here. I also found out that installing Grace from the App Center makes the App Center blank thereafter, unless you reinstall CCSV6.1.
- Assembly Language Tools This manual also has some good data on the linker, including the section "Using Linker Symbols in C/C++ Applications".
- Kernighan and Ritchie's Famous C Book This is probably the best short text for learning C.
- MSP430 Optimizing C/C++ Compiler (See Section 6.5 and following for how to mix C/C++ and Assembly. It is really best to read the entire chapter though, as it is all pertinent to mixing C and Assembly. It will also help you if you want to program in C, as it tells how the C compiler uses the memory, the stack, the registers, etc., and once you understand the processor as you learn to do when you learn its assembly language, it is very interesting to see how that all works in C.)
- TI Cloud Tools This includes CCS Cloud which allows you to compile and flash, but not debug. This is a partial solution to the problem that Code Composer Studio is not available natively on OS X.
- OS X Native Toolchain Installer (You may prefer the Code Composer Studio Beta linked above.)
GCC Compiler
- Some notes on getting the GCC compiler to work with the CC3100....
- An Example of Assembly with the GCC Compiler
- Generate the assembly code with GCC
- Inline Assembly with GCC
Evaluation Board Data
- MSP430 F5529 LaunchPad Evaluation Kit Resource Page
- TI web page on the MSP430F5529
- MSP430F5529 Data Sheet
- MSP430X5XXXX User's Guide
- Infotron Tutorials on Programming the MSP430 LaunchPads
- How to program other MSP430s with your Launchpad
- Some notes on porting MSP430G2553 code to the MSP430F5529. Here is a TI App Note on the differences between the 5xxx and the previous MSP430 processors. Note: There are differences in the following:
- The F5xxx has USB and a bunch more features.
- The F5xxx doesn't have PxSEL2, and the PxSEL need to be adjusted because of different pinouts. I find pages 25-28 of the F5529 Launchpad Manual useful for these conversions.
- The PMM (Power Management Module), particualarly the Digitally Controlled Oscillator (DCO) and Frequency Locked Loop (FLL) of the clock system is significantly different.
- The USCI (UART, SPI and I2C serial communications) Interrupts have been consolidated. For example see section 39.3.15 of the F5xxx User Guide.
CC3100 SimpleLink Wi-Fi Family
- CC3100 BoosterPack Getting Started Guide
- A link to the Internet of Things Whitepaper
- CC3100 Data Sheet
- Getting Started With the CC3100 There is a nice video tutorial on this page.
- Linux and the CC3100
- Here are the files for compiling SimpleLink using the GCC compiler.
2014 Robot Information
- HSR-1425CR Continuous Rotation Servo Datasheet
- Schematics These are rather crude schematics of the robot circuit board. There are two cuts and jumps that are not reflected, at least on the last one. The effect is to change the photo transistors from a common emitter to a common collector configuration. You can see the change scratched in just below the word Fairchild on the hand drawn schematic. Basically the resistor and photo transistor are reversed in order. I believe both photo transistors are swapped to common collector configuration.
2015 Robot Information
- Building Tips
- L9110 H Bridge Data Sheet
- HG7881 Dual H Bridge Module This suggests putting the PWM signal on one input and the direction control on the other. If you do that, you need to invert the PWM input when you change directions as well. See the data sheet above.
- Bluetooth UART HC-05 and HC-06
- HC Bluetooth Manual
- C example of using the USCI as a 9600 baud UART to communicate with the HC-06 bluetooth module for the MSP430F5529
- Newline Characters, CR or CR+LF? It is important to know what the computer you are communicating with uses. Linux and Unix use LF (\n or 0x0a ). Windows uses CR+LF (\r \n or 0x0d0a). Others use different combinations!
- Blueberry Android Bluetooth Remote Control App
- HY301-07A Photo Interrupter Datasheet From the datasheet, we will choose a forward current on the LED to be 5 mA because we don't want to waste batteries, and that is the lowest the data sheet shows it working. That leads us to a forward voltage across the diode of 1.3 volts. If we run things on 3.3 volts that gives us a voltage drop of 3.3-1.3=2.0 volts. Ohms law says a resistor of R=V/I=2volts/5mA = 400 ohms. We will pick 390 ohms since it is an available 5% value. For the phototransistor, we see that the current for the forward diode current we picked should be about 0.2 mA. If we want the output to drop to 0.5 volts with the LED on, that leaves 3.3 volts - 0.5 volts = 2.8 volts across the collector resistor, so using Ohm's Law again, we need a collector resistor of 2.8 volts/0.2mA = 14 Kohms, so we will pick 15 Kohms because it is a standard value.
- I count 20 holes, on the encoder wheels. This gives 20 periods per revolution. The wheel diameter is about 0.066 meters, so the radius is 0.033 meters. This gives about 0.21 meters per revolution. It seems a pretty fast speed is about 1 meter per second, which means that we have about 5 revolutions per second, or 100 cycles per second, or about 0.01 seconds per period at high speed.
Other Miscellaneous Interesting Reading
- Code: The Hidden Language of Computer Hardware and Software by Charles Petzold This is a good read about the history of the subject which gives the reader a good understanding of the subject.