Embedded Programming

architectures
   Harvard von Neumann
   RISC, CISC
   microprocessor, microcontroller
   FPGA, CPLD
   spatial

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, mbed
   PSoC, xCORE, Propeller

vendors
   Octopart
   Digi-Key
   Mouser
   Newark
   Farnell
   SparkFun
   Adafruit

AVR processors
   ATtiny10
   ATtiny45V
   ATtiny44A
   ATmega328P
   ATmega16U2
   ATxmega16E5
   ATxmega16A4U

tutorials

data sheets

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

clocks
   types
      RC (10%, 1% calibrated)
      ceramic (0.5%)
      quartz (50 ppm)
   PLL
   instruction cycles
   overclocking

in-system development
   ISP (header, pads, clip)
   bootloader
      Arduino, DFU, Micronucleus
   JTAG, PDI
   ICE

programmers
   ISP
      FabISP
      avrdude
   JTAG, PDI
      Atmel-ICE

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

C
   tutorial
   GCC
   AVR Libc
      modules types math
   avr-libc, binutils-avr, gcc-avr
   CrossPack
   Atmel Studio

debugging
   "printf"
   gdb, ddd, Insight
   Atmel Studio

host communication
   RS232
      bit timing
   VT100/ANSI/ISO/ECMA terminal
      Screen Kermit Minicom
      pySerial miniterm.py rx.py term.py
      npm serialport
   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

XMEGA
   features differences coding
   toolchain
      ppa
      Atmel Linux Windows
      OS X
   echo hello-world
      hello.ftdi.16E5.cad board components traces interior
      hello.ftdi.16E5.blink.c hello.ftdi.16E5.blink.make
      hello.ftdi.16E5.ring.c hello.ftdi.16E5.ring.make
      hello.ftdi.16E5.echo.c hello.ftdi.16E5.echo.make

library

IDE
   Atmel Studio
   Eclipse AVR
   Firefly
   Scratch
   Modkit

boards
   AVR
      Atmel
      Adafruit Olimex Polulu
      Arduino
         board + C libraries + IDE + bootloader + header
         Fabkit Fabio
         hello.arduino.328P.cad board components traces interior
            Blink.pde boards.txt programming
            hello.arduino.328P.blink.c hello.arduino.328P.blink.make programming
         ATtiny Xmegaduino
         Codebender Ardublock
   PSoC
   ARM
      Rasberry Pi
      BeagleBone
      PandaBoard
      Snappy

Interpreters
   Python
   BASIC
   FORTH
   AVRSH
   Javascript
      Espruino Tessel iop.io

STM32
   processor
      STM32F3 data sheet
   toolchain
      gcc-arm-none-eabi
      OpenOCD QStlink2 stlink
   programmer
      ST-Link V2
   software
      ST  STMCube
   board
      STM32F3Discovery
         blink.zip programming
      Nucleo

assignment
   read a microcontroller data sheet
   program your board to do something, with as many different programming languages
      and programming environments as possible
   extra credit: experiment with other architectures