Embedded Programming


architectures
   Harvard, von Neumann
   RISC, CISC
   microprocessor, microcontroller
   FPGA
   ALA

memory
   registers
   SRAM
   DRAM
   EEPROM
   FLASH
   fuse

peripherals
   A/D
   comparator
   D/A
   timer/counter/PWM
   USART
   USB
   ...

word size
   8
   16
   32
   64

families
   8051
   PIC
   MSP
   AVR
   ARM
   STM32
   BCM SoC

vendors
   Octopart
   Digi-Key
   Mouser
   Newark
   Farnell
   SparkFun

AVR processors
   ATtiny10
   ATtiny45V
   ATtiny44A
   ATmega168A
   ATmega32U4

data sheets

packages
   DIP
   SOT
   SOIC
   TSSOP
   TQFP
   LQFP
   MLF, CSP, BGA

clocks
   RC (10%, 1% calibrated)
   ceramic (0.5%)
   quartz (50 ppm)

in-system development
   ISP (header, pads, clip)
   bootloader
   JTAG, debugWire
   ICE

programmers
   ISP
      AVRISP
      FabISP
      hello.ISP.44.cad board components traces interior firmware
      avrdude
   JTAG, debugWIRE
      Dragon

assembly language
   hex file
   instruction set, opcodes
   mnemonics, directives, expressions
   avr-as
   gavrasm

C
   AVR Libc
   GCC
   avr-libc, binutils-avr, gcc-avr
   WinAVR
   CrossPack
   Atmel Studio

host communication
   RS232
      bit timing
   VT100/ANSI/ISO/ECMA terminal
      Kermit
      Minicom
      term.py
   USB
      software
      hardware
   FTDI
      cable
      libFTDI
      echo hello-world
         hello.ftdi.44.cad board components traces interior
         programming
         hello.ftdi.44.echo.c hello.ftdi.44.echo.c.make
         hello.ftdi.44.echo.interrupt.c hello.ftdi.44.echo.interrupt.c.make
         hello.ftdi.44.echo.asm hello.ftdi.44.echo.asm.make

IDE
   Atmel Studio
   Eclipse AVR
   Arduino
      C libraries + IDE + bootloader + board
      Fabkit
      Fabio
      hello.arduino.168.cad board components traces interior
         programming
         Blink.pde hardware/hello.arduino/boards.txt
         hello.arduino.168.blink.c hello.arduino.168.blink.make
      ATtiny
   Firefly
   Scratch
   Modkit

Interpreters
   Python
   BASIC
   FORTH
   AVRSH

debugging
   "printf"
   Atmel Studio
   gdb, ddd, Insight

STM32
   processor
      STM32F103
      data sheet
      manual
   toolchain
      OpenOCD
      apt-get install openocd
      apt-get install gcc-arm-linux-gnueabi
         cd /usr/bin
         sudo echo 'exec arm-linux-gnueabi-gcc -nostdlib $*' > arm-none-eabi-gcc
         sudo echo 'exec arm-linux-gnueabi-ld -nostdlib $*'  > arm-none-eabi-ld
         sudo chmod a+x arm-none-eabi-gcc arm-none-eabi-ld
         for i in objcopy ar as gcov gprof rm objdump ranlib readelf size string strip; do sudo ln -s arm-linux-gnueabi-$i  arm-none-eabi-$i; done
   programmer
      ARM-USB-TINY-H
   software
      ST
      Maple
   board
      STM32-H103
      programming
      blink.c
         Makefile stm32.ld
         core_cm3.h system_stm32f10x.h stm32f10x.h stm32f10x_conf.h
         stm32f10x_gpio.h stm32f10x_gpio.c stm32f10x_flash.h stm32f10x_flash.c stm32f10x_rcc.c stm32f10x_rcc.h

assignment
   read a microcontroller data sheet
   program your board to do something, with as many different programming languages
      and programming environments as possible