Basic Embedded Systems - University of California,...

67
Basic Embedded Systems Jonathan Bachrach EECS UC Berkeley September 2, 2016

Transcript of Basic Embedded Systems - University of California,...

Page 1: Basic Embedded Systems - University of California, Berkeleyinst.eecs.berkeley.edu/~cs194-126/fa16/lectures/embedded.pdf · Use C++ to write embedded apps running on circuit boards.

Basic Embedded Systems

Jonathan Bachrach

EECS UC Berkeley

September 2, 2016

Page 2: Basic Embedded Systems - University of California, Berkeleyinst.eecs.berkeley.edu/~cs194-126/fa16/lectures/embedded.pdf · Use C++ to write embedded apps running on circuit boards.

Last Time 1

Talked about StanzaLanguage used to write JITPCBUse C++ to write embedded apps running on circuit boards

Page 3: Basic Embedded Systems - University of California, Berkeleyinst.eecs.berkeley.edu/~cs194-126/fa16/lectures/embedded.pdf · Use C++ to write embedded apps running on circuit boards.

Embedded Applications 2

Inputs -> Compute -> OutputsConcurrency realized on parallel hardwareBiggest challenge is mapping to limited hardwareDrivers: Size, Cost, Power and Reliability

Introduction to Embedded Systems by Edward Lee and Sanjit Seshia

Page 4: Basic Embedded Systems - University of California, Berkeleyinst.eecs.berkeley.edu/~cs194-126/fa16/lectures/embedded.pdf · Use C++ to write embedded apps running on circuit boards.

Example Embedded Applications 3

Robot control – sensors and motorsLighting – LEDs etcElectronic music – synthesizers, effects and mixersIndustrial control – sensors and actuators

Page 5: Basic Embedded Systems - University of California, Berkeleyinst.eecs.berkeley.edu/~cs194-126/fa16/lectures/embedded.pdf · Use C++ to write embedded apps running on circuit boards.

Real-time Embedded Applications 4

GoalsPerform tasks at given timesDon’t miss eventsLow latency

OptionsSchedule software to hardware orThrow hardware parallelism at the problem

Page 6: Basic Embedded Systems - University of California, Berkeleyinst.eecs.berkeley.edu/~cs194-126/fa16/lectures/embedded.pdf · Use C++ to write embedded apps running on circuit boards.

Embedded Architecture 5Standard template with lots of parallelism:

MasterSlavesPeripheralsInterconnect

Periph.

Master IOP

I/O

Seq. In Data Bus Seq. Out

Periph.. . . Periph.

Slave IOP

I/O

Seq. In Data Bus Seq. Out

Periph.. . .

. . . . . .

SOB

Host System

Page 7: Basic Embedded Systems - University of California, Berkeleyinst.eecs.berkeley.edu/~cs194-126/fa16/lectures/embedded.pdf · Use C++ to write embedded apps running on circuit boards.

CPU 6

Program StorageData MemoryALUPC

ALUIMEM DMEM

pc

instaddr

rdat

wdat

Page 8: Basic Embedded Systems - University of California, Berkeleyinst.eecs.berkeley.edu/~cs194-126/fa16/lectures/embedded.pdf · Use C++ to write embedded apps running on circuit boards.

CPU with Registers 7RISC – Reg to Reg

load literalload from memory to registerstore to memory from registerand/or from reg x reg to regjump to address in registerinterrupt to address in memory

ALUIMEM DMEM

pc

inst

rdat

addrREGsDecode

wdat

Page 9: Basic Embedded Systems - University of California, Berkeleyinst.eecs.berkeley.edu/~cs194-126/fa16/lectures/embedded.pdf · Use C++ to write embedded apps running on circuit boards.

Numeric Data Types 8

Floating point – expensive but big dynamic rangeFixed point – cheap but tedious to manage

2 9 8 5 6 5 5 9

decimal point

Page 10: Basic Embedded Systems - University of California, Berkeleyinst.eecs.berkeley.edu/~cs194-126/fa16/lectures/embedded.pdf · Use C++ to write embedded apps running on circuit boards.

ISA and Realization 9Instruction Set Architecture (ISA) – Spec – ARM, x86Realization – same code but different speed/area/power – CortexM4, Corei7

Category Name Fmt RV32I Base Category Name RV mnemonicLoads Load Byte I LB rd,rs1,imm CSR Access Atomic R/W CSRRW rd,csr,rs1

Load Halfword I LH rd,rs1,imm Atomic Read & Set Bit CSRRS rd,csr,rs1 Load Word I LW rd,rs1,imm Atomic Read & Clear Bit CSRRC rd,csr,rs1

Load Byte Unsigned I LBU rd,rs1,imm Atomic R/W Imm CSRRWI rd,csr,imm Load Half Unsigned I LHU rd,rs1,imm Atomic Read & Set Bit Imm CSRRSI rd,csr,imm

Stores Store Byte S SB rs1,rs2,imm Atomic Read & Clear Bit Imm CSRRCI rd,csr,imm Store Halfword S SH rs1,rs2,imm Change Level Env. Call ECALL

Store Word S SW rs1,rs2,imm Environment Breakpoint EBREAK

Shifts Shift Left R SLL rd,rs1,rs2 Environment Return ERET Shift Left Immediate I SLLI rd,rs1,shamt Trap Redirect to SupervisorMRTS

Shift Right R SRL rd,rs1,rs2 Redirect Trap to Hypervisor MRTH Shift Right Immediate I SRLI rd,rs1,shamt Hypervisor Trap to Supervisor HRTS Shift Right Arithmetic R SRA rd,rs1,rs2 Interrupt Wait for Interrupt WFI Shift Right Arith Imm I SRAI rd,rs1,shamt MMU Supervisor FENCE SFENCE.VM rs1

Arithmetic ADD R ADD rd,rs1,rs2 ADD Immediate I ADDI rd,rs1,imm

SUBtract R SUB rd,rs1,rs2

Load Upper Imm U LUI rd,imm Add Upper Imm to PC U AUIPC rd,imm Category Name Fmt RVC RVI equivalent

Logical XOR R XOR rd,rs1,rs2 Loads Load Word CL C.LW rd′,rs1′,imm LW rd′,rs1′,imm*4 XOR Immediate I XORI rd,rs1,imm Load Word SP CI C.LWSP rd,imm LW rd,sp,imm*4

OR R OR rd,rs1,rs2 Load Double CL C.LD rd′,rs1′,imm LD rd′,rs1′,imm*8OR Immediate I ORI rd,rs1,imm Load Double SP CI C.LDSP rd,imm LD rd,sp,imm*8

AND R AND rd,rs1,rs2 Load Quad CL C.LQ rd′,rs1′,imm LQ rd′,rs1′,imm*16AND Immediate I ANDI rd,rs1,imm Load Quad SP CI C.LQSP rd,imm LQ rd,sp,imm*16

Compare Set < R SLT rd,rs1,rs2 Stores Store Word CS C.SW rs1′,rs2′,imm SW rs1′,rs2′,imm*4 Set < Immediate I SLTI rd,rs1,imm Store Word SP CSS C.SWSP rs2,imm SW rs2,sp,imm*4

Set < Unsigned R SLTU rd,rs1,rs2 Store Double CS C.SD rs1′,rs2′,imm SD rs1′,rs2′,imm*8 Set < Imm Unsigned I SLTIU rd,rs1,imm Store Double SP CSS C.SDSP rs2,imm SD rs2,sp,imm*8

Branches Branch = SB BEQ rs1,rs2,imm Store Quad CS C.SQ rs1′,rs2′,imm SQ rs1′,rs2′,imm*16 Branch ≠ SB BNE rs1,rs2,imm Store Quad SP CSS C.SQSP rs2,imm SQ rs2,sp,imm*16 Branch < SB BLT rs1,rs2,imm Arithmetic ADD CR C.ADD rd,rs1 ADD rd,rd,rs1 Branch ≥ SB BGE rs1,rs2,imm ADD Word CR C.ADDW rd,rs1 ADDW rd,rd,imm

Branch < Unsigned SB BLTU rs1,rs2,imm ADD Immediate CI C.ADDI rd,imm ADDI rd,rd,imm Branch ≥ Unsigned SB BGEU rs1,rs2,imm ADD Word Imm CI C.ADDIW rd,imm ADDIW rd,rd,imm

Jump & Link J&L UJ JAL rd,imm ADD SP Imm * 16 CI C.ADDI16SP x0,imm ADDI sp,sp,imm*16 Jump & Link Register UJ JALR rd,rs1,imm ADD SP Imm * 4 CIW C.ADDI4SPN rd',imm ADDI rd',sp,imm*4

Synch Synch thread I FENCE Load Immediate CI C.LI rd,imm ADDI rd,x0,imm Synch Instr & Data I FENCE.I Load Upper Imm CI C.LUI rd,imm LUI rd,imm

System System CALL I SCALL MoVe CR C.MV rd,rs1 ADD rd,rs1,x0 System BREAK I SBREAK SUB CR C.SUB rd,rs1 SUB rd,rd,rs1

Counters ReaD CYCLE I RDCYCLE rd Shifts Shift Left Imm CI C.SLLI rd,imm SLLI rd,rd,imm ReaD CYCLE upper Half I RDCYCLEH rd Branches Branch=0 CB C.BEQZ rs1′,imm BEQ rs1',x0,imm

ReaD TIME I RDTIME rd Branch≠0 CB C.BNEZ rs1′,imm BNE rs1',x0,imm ReaD TIME upper Half I RDTIMEH rd Jump Jump CJ C.J imm JAL x0,imm ReaD INSTR RETired I RDINSTRET rd Jump Register CR C.JR rd,rs1 JALR x0,rs1,0

ReaD INSTR upper Half I RDINSTRETH rd Jump & Link J&L CJ C.JAL imm JAL ra,imm Jump & Link Register CR C.JALR rs1 JALR ra,rs1,0System Env. BREAK CI C.EBREAK EBREAK

CRR CII CSSS CIWSB CLU CSUJ CB

CJRISC-V Integer Base (RV32I/64I/128I), privileged, and optional compressed extension (RVC). Registers x1-x31 and the pc are 32 bits wide in RV32I, 64 in RV64I, and 128 in RV128I (x0=0). RV64I/128I add 10 instructions for the wider formats. The RVI base of <50 classic integer RISC instructions is required. Every 16-bit RVC instruction matches an existing 32-bit RVI instruction. See risc.org.

32-bit Instruction Formats 16-bit (RVC) Instruction Formats

SRAI{W|D} rd,rs1,shamtADD{W|D} rd,rs1,rs2ADDI{W|D} rd,rs1,immSUB{W|D} rd,rs1,rs2

Optional Compressed (16-bit) Instruction Extension: RVC

SRL{W|D} rd,rs1,rs2SRLI{W|D} rd,rs1,shamtSRA{W|D} rd,rs1,rs2

S{D|Q} rs1,rs2,imm

SLL{W|D} rd,rs1,rs2SLLI{W|D} rd,rs1,shamt

L{D|Q} rd,rs1,imm

L{W|D}U rd,rs1,imm

Free & Open Reference Card ①

+RV{64,128}Base Integer Instructions: RV32I, RV64I, and RV128I RV Privileged Instructions

Page 11: Basic Embedded Systems - University of California, Berkeleyinst.eecs.berkeley.edu/~cs194-126/fa16/lectures/embedded.pdf · Use C++ to write embedded apps running on circuit boards.

RISCV 10

Berkeley’s very own ISA: riscv.orgOpen Source HW/SW interfaceGCC + Linux + ...Sample implementationsSiFive: sifive.com

Page 12: Basic Embedded Systems - University of California, Berkeleyinst.eecs.berkeley.edu/~cs194-126/fa16/lectures/embedded.pdf · Use C++ to write embedded apps running on circuit boards.

Embedded DSPs 11

limited memorysimple pipeliningcompressed instructionsDSP instructionsfloating point hardware

Page 13: Basic Embedded Systems - University of California, Berkeleyinst.eecs.berkeley.edu/~cs194-126/fa16/lectures/embedded.pdf · Use C++ to write embedded apps running on circuit boards.

STM32L432 1232 bit processor80MHz clock speedfloating point hardwaredebug support

ARM

Page 14: Basic Embedded Systems - University of California, Berkeleyinst.eecs.berkeley.edu/~cs194-126/fa16/lectures/embedded.pdf · Use C++ to write embedded apps running on circuit boards.

Compilers and Linkers 13

Compiler translates C into object filesLinker combines object files into app binaryApps are in Elf or Hex format

gcc linker.obj .hexC elf2hex.elf

Page 15: Basic Embedded Systems - University of California, Berkeleyinst.eecs.berkeley.edu/~cs194-126/fa16/lectures/embedded.pdf · Use C++ to write embedded apps running on circuit boards.

Debug Support 14

JTAG portProgrammingSet break pointsGet stateStandard interface like OpenOCDLinker also produces source information fileSource debug through GDB or Eclipse

Page 16: Basic Embedded Systems - University of California, Berkeleyinst.eecs.berkeley.edu/~cs194-126/fa16/lectures/embedded.pdf · Use C++ to write embedded apps running on circuit boards.

Memory 15

Random access like arrayPersistance: Volatile or Non-VolatileCapacity: Size and WidthSpeed: Latency and ThroughputPower: Efficiency

Mem

r/w

addr

wdat

rdat

Page 17: Basic Embedded Systems - University of California, Berkeleyinst.eecs.berkeley.edu/~cs194-126/fa16/lectures/embedded.pdf · Use C++ to write embedded apps running on circuit boards.

Volatile RAM 16

Name SRAM DRAMComplexity Simple Refresh

Area Big DenseCost Expensive Cheap

Speed Fast Medium

Page 18: Basic Embedded Systems - University of California, Berkeleyinst.eecs.berkeley.edu/~cs194-126/fa16/lectures/embedded.pdf · Use C++ to write embedded apps running on circuit boards.

Non-Volatile Memory 17

Name ROM Flashwrites factory slow

cost cheap medium

Page 19: Basic Embedded Systems - University of California, Berkeleyinst.eecs.berkeley.edu/~cs194-126/fa16/lectures/embedded.pdf · Use C++ to write embedded apps running on circuit boards.

Flash 18

Put onto chips as well as disksOrganized into pages (e.g., 2KB)Erase only on pagesLimited R/W/X protectionCan store either Data or Code

Page 20: Basic Embedded Systems - University of California, Berkeleyinst.eecs.berkeley.edu/~cs194-126/fa16/lectures/embedded.pdf · Use C++ to write embedded apps running on circuit boards.

Memory Protection 19

can control access to pages of memoryprotects against certain crashesSTM32L432 has crude sys with a few regions and modes

Page 21: Basic Embedded Systems - University of California, Berkeleyinst.eecs.berkeley.edu/~cs194-126/fa16/lectures/embedded.pdf · Use C++ to write embedded apps running on circuit boards.

Memory Map 20

Address SpaceSRAM and FlashMemory mapped peripherals – timers, gpio, uarts,Register files

Page 22: Basic Embedded Systems - University of California, Berkeleyinst.eecs.berkeley.edu/~cs194-126/fa16/lectures/embedded.pdf · Use C++ to write embedded apps running on circuit boards.

STM32L432 Memory Map 21

Page 23: Basic Embedded Systems - University of California, Berkeleyinst.eecs.berkeley.edu/~cs194-126/fa16/lectures/embedded.pdf · Use C++ to write embedded apps running on circuit boards.

Memory Mapped Peripherals 22

Example TimerStatus registers: valueControl registers: up/down, reset, period

Counter

up/dn

reset

period

value

up/dn

reset

period

value

0xfff0003

0xfff0002

0xfff0001

0xfff0000

Page 24: Basic Embedded Systems - University of California, Berkeleyinst.eecs.berkeley.edu/~cs194-126/fa16/lectures/embedded.pdf · Use C++ to write embedded apps running on circuit boards.

Jump Table – Vectors 23

int2

int1

int0

start

int0 handler

app

Page 25: Basic Embedded Systems - University of California, Berkeleyinst.eecs.berkeley.edu/~cs194-126/fa16/lectures/embedded.pdf · Use C++ to write embedded apps running on circuit boards.

Stacks 24

stack pointer usually put in registerused for function calling – stack framestack overflow

R.S. Shaw

Page 26: Basic Embedded Systems - University of California, Berkeleyinst.eecs.berkeley.edu/~cs194-126/fa16/lectures/embedded.pdf · Use C++ to write embedded apps running on circuit boards.

Memory Allocation 25

static allocationdynamic allocation – generally bad idea on microcontroller

static data

interrupt vecs

dynamic data

stack

Page 27: Basic Embedded Systems - University of California, Berkeleyinst.eecs.berkeley.edu/~cs194-126/fa16/lectures/embedded.pdf · Use C++ to write embedded apps running on circuit boards.

Dynamic Allocation 26

Malloc or C++ newStack allocation – dynamic extent

static data

interrupt vecs

dynamic data

stack

Page 28: Basic Embedded Systems - University of California, Berkeleyinst.eecs.berkeley.edu/~cs194-126/fa16/lectures/embedded.pdf · Use C++ to write embedded apps running on circuit boards.

DMA 27

direct memory accessmemory mapped peripheralhardware device takes over memory transferoffloads CPU and more efficientoverlap memory transfers with compute

CPU Per0 Per1

MemDMA

Page 29: Basic Embedded Systems - University of California, Berkeleyinst.eecs.berkeley.edu/~cs194-126/fa16/lectures/embedded.pdf · Use C++ to write embedded apps running on circuit boards.

Programming through JTAG 28

Install App + Data into flashInitialize Start + Interrupt Vectors

app

interrupt vecs

start pc + sp

static data

flash map

Page 30: Basic Embedded Systems - University of California, Berkeleyinst.eecs.berkeley.edu/~cs194-126/fa16/lectures/embedded.pdf · Use C++ to write embedded apps running on circuit boards.

Booting Process 29

Power onJump through start Vector and initialize stack pointerBoot modes say where to boot from – can be based on pinReset Pin causes reboot

app

interrupt vecs

start pc + sp

static data

flash map

Page 31: Basic Embedded Systems - University of California, Berkeleyinst.eecs.berkeley.edu/~cs194-126/fa16/lectures/embedded.pdf · Use C++ to write embedded apps running on circuit boards.

Boot Loader 30Program that loads program in from input portCan be easier to program using bootloaderFirst program boot loader into flashState machine that programs flash page by pageAlso computes CRC code to know correctly programmedFinally changes start vectorCan check pin to jump directly to loaded code

app jump table

bootloader

app

boot jump table

static data

Page 32: Basic Embedded Systems - University of California, Berkeleyinst.eecs.berkeley.edu/~cs194-126/fa16/lectures/embedded.pdf · Use C++ to write embedded apps running on circuit boards.

Low Power 31

Sleep – CPU shut down but periphs working – wakeup on interruptLow Power – Slow down CPU to say 2MHzLow Power Sleep – Same staying in low power upon wakeupStop 0, 1, 2 – Retain SRAM contents but lowest powerStandby – turn off but passively assert I/Os

Page 33: Basic Embedded Systems - University of California, Berkeleyinst.eecs.berkeley.edu/~cs194-126/fa16/lectures/embedded.pdf · Use C++ to write embedded apps running on circuit boards.

Peripherals 32

timersDMArandom number generatorCRCwatchdog timerI/O

Page 34: Basic Embedded Systems - University of California, Berkeleyinst.eecs.berkeley.edu/~cs194-126/fa16/lectures/embedded.pdf · Use C++ to write embedded apps running on circuit boards.

Timers 33

count up/downperiodprescaler – slows down clockraise interrupt upon hitting min or maxautomatic reload

Page 35: Basic Embedded Systems - University of California, Berkeleyinst.eecs.berkeley.edu/~cs194-126/fa16/lectures/embedded.pdf · Use C++ to write embedded apps running on circuit boards.

Real Time Clock 34

returns time in standard formatscorrection for leap years etcdigital calibration to overcome crystal imperfectionbackup registers for user data

Page 36: Basic Embedded Systems - University of California, Berkeleyinst.eecs.berkeley.edu/~cs194-126/fa16/lectures/embedded.pdf · Use C++ to write embedded apps running on circuit boards.

Watchdog Timer 35

must be poked every so oftenotherwise resets microcontroller

Page 37: Basic Embedded Systems - University of California, Berkeleyinst.eecs.berkeley.edu/~cs194-126/fa16/lectures/embedded.pdf · Use C++ to write embedded apps running on circuit boards.

I/O 36microcontrollers have a bunch of peripherals on boardmany peripherals talk to outside through pinscan map peripherals to pins through cross bar

Page 38: Basic Embedded Systems - University of California, Berkeleyinst.eecs.berkeley.edu/~cs194-126/fa16/lectures/embedded.pdf · Use C++ to write embedded apps running on circuit boards.

GPIO 37

attached to pinsmemory mappedcan be configured as input or outputcurrent limits on pins (e.g., 18mA)when configured as input – only one driver at a time

Page 39: Basic Embedded Systems - University of California, Berkeleyinst.eecs.berkeley.edu/~cs194-126/fa16/lectures/embedded.pdf · Use C++ to write embedded apps running on circuit boards.

Open Collector 38

Writing one drives output to zeroWriting zero disconnects pin or with internal pull up resistorCan have multiple writers with external pull up resistor

TGPIO

gnd

pin

CPU

TT

pinpin

TGPIO

gnd

pin

CPU

5v

R

single multiple

Page 40: Basic Embedded Systems - University of California, Berkeleyinst.eecs.berkeley.edu/~cs194-126/fa16/lectures/embedded.pdf · Use C++ to write embedded apps running on circuit boards.

Tristate 39

can be in one of three states: on/off or disconnectedunlike open collector can drive one

Page 41: Basic Embedded Systems - University of California, Berkeleyinst.eecs.berkeley.edu/~cs194-126/fa16/lectures/embedded.pdf · Use C++ to write embedded apps running on circuit boards.

Serial 40

de/serializes bits of bytes over single or few wiresUART: baud rate, start bit, data bits, parity bit, stop bitsUSB JTAG I2C SPI ...

data bits

start bit stop bit

parity bit

Page 42: Basic Embedded Systems - University of California, Berkeleyinst.eecs.berkeley.edu/~cs194-126/fa16/lectures/embedded.pdf · Use C++ to write embedded apps running on circuit boards.

Bus 41

shared wiresless expensivefewer wiresneed MAC to arbitrate

master slave0 slave1

Page 43: Basic Embedded Systems - University of California, Berkeleyinst.eecs.berkeley.edu/~cs194-126/fa16/lectures/embedded.pdf · Use C++ to write embedded apps running on circuit boards.

MAC 42

master / slaveTDMAtoken ringbus arbiter hardwareCSM carrier sense multiple access

slave0 master slave1cs0 cs1

Page 44: Basic Embedded Systems - University of California, Berkeleyinst.eecs.berkeley.edu/~cs194-126/fa16/lectures/embedded.pdf · Use C++ to write embedded apps running on circuit boards.

Bus Examples 43

name mac width controlSPI master/slave 4 wires select linesI2C master/slave 2 wires addresses

CAN arbitration x wires addresses

more details to come

slave0 master slave1cs0 cs1

clkmiso

mosi

Page 45: Basic Embedded Systems - University of California, Berkeleyinst.eecs.berkeley.edu/~cs194-126/fa16/lectures/embedded.pdf · Use C++ to write embedded apps running on circuit boards.

I2C 44

two wires: clk and datamaster initiates all communicationslave addresses used to determine message source/destinationslaves listen for their addresses and then commandhardware supports lowest level state machine and clocking

slave0 master slave1

clkdat

Page 46: Basic Embedded Systems - University of California, Berkeleyinst.eecs.berkeley.edu/~cs194-126/fa16/lectures/embedded.pdf · Use C++ to write embedded apps running on circuit boards.

Analog In/Out 45

Analog OutDACexample: audiobits precisionoptional timer + DMA

Analog InADCexample: potentiometerbits precisioncan attach a voltage trigger

Page 47: Basic Embedded Systems - University of California, Berkeleyinst.eecs.berkeley.edu/~cs194-126/fa16/lectures/embedded.pdf · Use C++ to write embedded apps running on circuit boards.

PWM 46

analog out approximationduty cycle and frequencyoften used for driving motor

Zureks

Page 48: Basic Embedded Systems - University of California, Berkeleyinst.eecs.berkeley.edu/~cs194-126/fa16/lectures/embedded.pdf · Use C++ to write embedded apps running on circuit boards.

Interrupts 47

break from normal program flowinterrupt handlersimple way to map concurrency onto hardware

Page 49: Basic Embedded Systems - University of California, Berkeleyinst.eecs.berkeley.edu/~cs194-126/fa16/lectures/embedded.pdf · Use C++ to write embedded apps running on circuit boards.

Interrupt Types 48

hardware interrupts – external thingsoftware interrupts – instruction or by writing to memory registerexception – detects a fault

Page 50: Basic Embedded Systems - University of California, Berkeleyinst.eecs.berkeley.edu/~cs194-126/fa16/lectures/embedded.pdf · Use C++ to write embedded apps running on circuit boards.

Interrupts 49

enable/disableprioritiesinterrupt vectors

Page 51: Basic Embedded Systems - University of California, Berkeleyinst.eecs.berkeley.edu/~cs194-126/fa16/lectures/embedded.pdf · Use C++ to write embedded apps running on circuit boards.

Atomicity 50

interrupts happen between any instructionssome regions need to be atomicexample is copying multiword dataunderstand all interleavings

Page 52: Basic Embedded Systems - University of California, Berkeleyinst.eecs.berkeley.edu/~cs194-126/fa16/lectures/embedded.pdf · Use C++ to write embedded apps running on circuit boards.

Atomicity Example 51

writer one

count = double_value;

count0 = double_value0;

// interrupt happens here

count1 = double_value1;

writer two

count = count + 1;

Page 53: Basic Embedded Systems - University of California, Berkeleyinst.eecs.berkeley.edu/~cs194-126/fa16/lectures/embedded.pdf · Use C++ to write embedded apps running on circuit boards.

Atomicity Solution 52

writer one

disable_interrupts();

count = double_value

enable_interrupts();

writer two

disable_interrupts();

count = count + 1;

enable_interrupts();

Page 54: Basic Embedded Systems - University of California, Berkeleyinst.eecs.berkeley.edu/~cs194-126/fa16/lectures/embedded.pdf · Use C++ to write embedded apps running on circuit boards.

Interrupt Controller 53

interrupt vectorsinterrupt vector table – computes interrupt vector table addressnestingprioritiesmaskingprocessor state savingrestore interrupt entry

Page 55: Basic Embedded Systems - University of California, Berkeleyinst.eecs.berkeley.edu/~cs194-126/fa16/lectures/embedded.pdf · Use C++ to write embedded apps running on circuit boards.

Interrupt Handler 54

disable interruptspush pc, psrbranch to int vecsave regs useddo handlingpop regs usedpop pc, psrenable interrupts

Page 56: Basic Embedded Systems - University of California, Berkeleyinst.eecs.berkeley.edu/~cs194-126/fa16/lectures/embedded.pdf · Use C++ to write embedded apps running on circuit boards.

Interrupt Handler on STM32L432 55

hardware support fordisabling and enabling interruptssaving and restoring registersmore features as well

more details later

Page 57: Basic Embedded Systems - University of California, Berkeleyinst.eecs.berkeley.edu/~cs194-126/fa16/lectures/embedded.pdf · Use C++ to write embedded apps running on circuit boards.

External Interrupts 56

edge triggered (rising or falling or both) or level triggeredn channels detecting particular event on pindetects pulses shorter than clock periodless overhead than pollingresetwakeup

Page 58: Basic Embedded Systems - University of California, Berkeleyinst.eecs.berkeley.edu/~cs194-126/fa16/lectures/embedded.pdf · Use C++ to write embedded apps running on circuit boards.

Interrupt Issues 57

don’t want to lose any eventskeep code in interrupts to minimumuse prioritiesevents happen at much slower frequency relative to cpu

Page 59: Basic Embedded Systems - University of California, Berkeleyinst.eecs.berkeley.edu/~cs194-126/fa16/lectures/embedded.pdf · Use C++ to write embedded apps running on circuit boards.

Quadrature Encoder 58

determines radial position of shaftcounts transitions on two pinscould write a routine to poll pins and countbetter way is to assign interrupts to pinshandler then runs state machine which countsoutput is position value

Page 60: Basic Embedded Systems - University of California, Berkeleyinst.eecs.berkeley.edu/~cs194-126/fa16/lectures/embedded.pdf · Use C++ to write embedded apps running on circuit boards.

Embedded Architecture 59Standard template with lots of parallelism:

Master and Slaves and InterconnectPeripherals

Questionshow to map concurrent system onto parallel hardware?with high freq control loop and without losing events

Periph.

Master IOP

I/O

Seq. In Data Bus Seq. Out

Periph.. . . Periph.

Slave IOP

I/O

Seq. In Data Bus Seq. Out

Periph.. . .

. . . . . .

SOB

Host System

Page 61: Basic Embedded Systems - University of California, Berkeleyinst.eecs.berkeley.edu/~cs194-126/fa16/lectures/embedded.pdf · Use C++ to write embedded apps running on circuit boards.

Example System 60

two motor robot armi2c bus between one master and two slaves

Arm mechanism. Master board. Motor board.

System of three boards.

Page 62: Basic Embedded Systems - University of California, Berkeleyinst.eecs.berkeley.edu/~cs194-126/fa16/lectures/embedded.pdf · Use C++ to write embedded apps running on circuit boards.

Robot Arm Embedded Architecture 61

one master for outer control loopone slave for each motori2c to communicate master to slave

master slave0 slave1

motor0 motor1

e0 e1 fi fo e0 e1 fi fo

i2c

Page 63: Basic Embedded Systems - University of California, Berkeleyinst.eecs.berkeley.edu/~cs194-126/fa16/lectures/embedded.pdf · Use C++ to write embedded apps running on circuit boards.

Robot Arm Master 62

read forcescompute next forcesset forces i2c

ctlloop

master

Page 64: Basic Embedded Systems - University of California, Berkeleyinst.eecs.berkeley.edu/~cs194-126/fa16/lectures/embedded.pdf · Use C++ to write embedded apps running on circuit boards.

Robot Arm Slave 63

input force from masterquad encoder measuring motor posforce in (fi) measuring impedanceforce out (fo) setting motor driveoutput force to master

motor0

e0 e1 fi fo

adc pwmint0 int1

i2c

enc ctlloop

slave0

Page 65: Basic Embedded Systems - University of California, Berkeleyinst.eecs.berkeley.edu/~cs194-126/fa16/lectures/embedded.pdf · Use C++ to write embedded apps running on circuit boards.

Next Time 64

Cover simple C++Dive into mBED libraryGive more concrete embedded examples

Page 66: Basic Embedded Systems - University of California, Berkeleyinst.eecs.berkeley.edu/~cs194-126/fa16/lectures/embedded.pdf · Use C++ to write embedded apps running on circuit boards.

Reminders 65

Section Friday 3-4p in Jacobs 220Get Maker PassStart thinking partners

Page 67: Basic Embedded Systems - University of California, Berkeleyinst.eecs.berkeley.edu/~cs194-126/fa16/lectures/embedded.pdf · Use C++ to write embedded apps running on circuit boards.

References 66

Digital Design and Computer Architecture: David Harris and SarahHarrisSTM32L432 Data SheetNucleo32 L432https://developer.mbed.org/platforms/ST-Nucleo-L432KC/

Introduction to Embedded Systems: A Cyber-Physical SystemApproach: Edward Lee and Sanjit Seshia