You are on page 1of 31

EE 319K

Introduction to Microcontrollers
Lecture 1: Introduction,
Embedded Systems, ARM
Programming

1-1

Agenda
Course Description

Book, Labs, Equipment


Grading Criteria
Expectations/Responsibilities
Prerequisites

Embedded Systems
Microcontrollers

ARM Architecture
Instruction Set, Memory Layout
I/O ports and programming
Integrated Development Environment (IDE)

Intro to C
Debugging
1-2

EE306 Recap: Digital Logic

Digital
Analog 0

"0"

Illegal
1.3

2.0

Positive logic:
True is higher voltage
False is lower voltage

"1"
5V

AND, OR, NOT


Flip flops
Registers

Negative logic :
True is lower voltage
False is higher voltage

1-3

EE302 Recap: Ohms Law


V=I*R
I=V/R
R=V/I

Voltage = Current * Resistance


Current = Voltage / Resistance
Resistance = Voltage / Current
I = 3.7mA

I
V

P = V * I
P = V2 / R
P = I2 * R

Battery
V=3.7V

R = 1k
Resistor

Power = Voltage * Current


Power = Voltage2 / Resistance
Power = Current2 * Resistance

1-4

Embedded System
automotive
medical

communications

micro computer

appliances
consumer electronics

LM3S or LM4F

Processor
I/O Ports

RAM
ROM
Bus

ADC

Ubiquitous, invisible
Hidden (computer inside)
Dedicated purpose

MicroProcessor

Embedded system
Microcontroller

Embedded Systems are


everywhere

Electrical,
mechanical,
chemical,
or
optical
devices
DAC
Analog
signals

Intel: 4004, ..8080,..


x86
Motorola: 6800, ..
6812,.. PowerPC
ARM, DEC, SPARC, MIPS,
PowerPC, Natl. Semi.,

MicroController
Processor+Memory+
I/O Ports (Interfaces)

1-5

Embedded Systems
A reactive system continuously
accepts inputs
performs calculations
generates outputs

A real time system


Specifies an upper bound on the time
required to perform the
input/calculation/output in reaction to
external events
1-6

Microcontroller
Processor Instruction Set
CISC vs. RISC
Memory
Non-Volatile
o ROM
o EPROM, EEPROM, Flash
Volatile
o RAM (DRAM, SRAM)
Interfaces
H/W: Ports
S/W: Device Driver
Parallel, Serial, Analog, Time

I/O
Memory-mapped vs. I/O mapped
1-7

Texas Instruments TM4C123


Cortex M4

Systick

System Bus Interface

NVIC

GPIO Port A
PA7
PA6
PA5/SSI0Tx
PA4/SSI0Rx
PA3/SSI0Fss
PA2/SSI0Clk
PA1/U0Tx
PA0/U0Rx
PC7
PC6
PC5
PC4
PC3/TDO/SWO
PC2/TDI
PC1/TMS/SWDIO
PC0/TCK/SWCLK

Eight
UARTs

Four
I2Cs

Four
SSIs

CAN 2.0

GPIO Port C

GPIO Port D

USB 2.0

Twelve
Timers

JTAG

Six
64-bit wide

GPIO Port E
PE5
PE4
PE3
PE2
PE1
PE0

GPIO Port B

ADC
2 channels
12 inputs
12 bits

Advanced High Performance Bus

PB7
PB6
PB5
PB4
PB3/I2C0SDA
PB2/I2C0SCL
PB1
PB0
PD7
PD6
PD5
PD4
PD3
PD2
PD1
PD0

GPIO Port F
Two Analog
Comparators
Two PWM
Modules

ARM Cortex-M4
+ 256K EEPROM
+ 32K RAM
+ JTAG
+ Ports
+ SysTick
+ ADC
+ UART

PF4
PF3
PF2
PF1
PF0

Advanced Peripheral Bus

1-8

Structured Programming
Common Constructs (as Flowcharts)
Sequence

Conditional

While-loop

Block 1
Block 2

Parallel
Fork

Join

Block 1

Block 2

Distributed

Block

Interrupt-driven concurrent
Trigger
main
interrupt

main1

main2

Init1

Init2

Init

Body1

Body2

Body

Return from
interrupt
1-9

Flowchart
Toaster oven:
Cook

main

Output heat
is on

Input from
switch
Start

Not pressed

Input toast
temperature

Pressed
Cook

Too cold

toast < desired


toast desired
Output heat
is off
return

Coding in assembly and/or high-level language (C)


1-10

Flowchart

Example 1.3. Design a flowchart for a system that performs two independent
tasks. The first task is to output a 20 kHz square wave on PORTA in real time
(period is 50 ms). The second task is to read a value from PORTB, divide the
value by 4, add 12, and output the result on PORTD. This second task is repeated
over and over.

main

Input n from B
PORTB
n = (n/4)+12

Output n to
PORTD

Clock
PORTA =
PORTA^1

<
E
>

void SysTick_Handler(void){
PORTA = PORTA^0x01;
E
}
>
void main(void){
unsigned long n;
while(1){
n = PORTB;
n = (n/4)+12;
PORTD = n;
}
}

A
B
C
D

1-11

ARM Cortex M4-based System


System bus

Microcontroller
ARM CortexTM-M
processor

Input
ports

PPB
Internal
peripherals

Advanced
High-perf
Bus

Instructions
Flash ROM
ICode bus

DCode bus

Output
ports
Data
RAM

ARM Cortex-M4 processor


Harvard architecture
Different busses for instructions and data

RISC machine
Pipelining effectively provides single cycle operation for many
instructions
Thumb-2 configuration employs both 16 and 32 bit instructions
1-12

ARM ISA: Thumb2 Instruction Set


Variable-length instructions
ARM instructions are a fixed
length of 32 bits
Thumb instructions are a fixed
length of 16 bits
Thumb-2 instructions can be
either 16-bit or 32-bit
Thumb-2 gives approximately 26%
improvement in code density over
ARM
Thumb-2 gives approximately 25%
improvement in performance over
Thumb

1-13

ARM ISA: Registers, Memory-map

General
purpose
registers

Stack pointer
Link register
Program counter
Condition Code Bit s
N negative
Z zero
V overflow
C carry

R0
R1
R2
R3
R4
R5
R6
R7
R8
R9
R10
R11
R12
R13 (MSP)
R14 (LR)
R15 (PC)
Indicates
Result is negative
Result is zero
Signed overflow
Unsigned overflow

256k Flash
ROM
32k RAM

0x0000.0000
0x0003.FFFF
0x2000.0000
0x2000.7FFF

I/O ports

0x4000.0000
0x400F.FFFF

Internal I/O
PPB

0xE000.0000
0xE004.1FFF

TI TM4C123
Microcontroller
1-14

Input/Output: TM4C123
Cortex M4

Systick

System Bus Interface

NVIC

GPIO Port A
PA7
PA6
PA5/SSI0Tx
PA4/SSI0Rx
PA3/SSI0Fss
PA2/SSI0Clk
PA1/U0Tx
PA0/U0Rx
PC7
PC6
PC5
PC4
PC3/TDO/SWO
PC2/TDI
PC1/TMS/SWDIO
PC0/TCK/SWCLK

Eight
UARTs

Four
I2Cs

Four
SSIs

CAN 2.0

GPIO Port C

GPIO Port D

USB 2.0

Twelve
Timers

JTAG

Six
64-bit wide

GPIO Port E
PE5
PE4
PE3
PE2
PE1
PE0

GPIO Port B

ADC
2 channels
12 inputs
12 bits

Advanced High Performance Bus

PB7
PB6
PB5
PB4
PB3/I2C0SDA
PB2/I2C0SCL
PB1
PB0
PD7
PD6
PD5
PD4
PD3
PD2
PD1
PD0

GPIO Port F
Two Analog
Comparators
Two PWM
Modules

PF4
PF3
PF2
PF1
PF0

6 General-Purpose
I/O (GPIO) ports:
Four 8-bit ports
(A, B, C, D)
One 6-bit port (E)
One 5-bit port (F)

Advanced Peripheral Bus

1-15

I/O Ports and Control Registers


Read from port address
n
n
Processor
DQ

GPIO_PORTF_DATA_R
n

Input/Output Port

Write to port address


GPIO_PORTF_DIR_R
Direction bits
n
1 means output
DQ
0 means input
Bus

Write to port direction register

The input/output direction of a bidirectional port


is specified by its direction register.
GPIO_PORTF_DIR_R , specify if
corresponding pin is input or output:
0 means input
1 means output
1-16

I/O Ports and Control Registers


Address

Name

400F.E608

GPIOF

GPIOE

GPIOD

GPIOC

GPIOB

GPIOA

SYSCTL_RCGCGPIO_R

4002.53FC

DATA

DATA

DATA

DATA

DATA

GPIO_PORTF_DATA_R

4002.5400

DIR

DIR

DIR

DIR

DIR

GPIO_PORTF_DIR_R

4002.5420

SEL

SEL

SEL

SEL

SEL

GPIO_PORTF_AFSEL_R

4002.551C

DEN

DEN

DEN

DEN

DEN

GPIO_PORTF_DEN_R

Initialization (executed once at beginning)


1. Turn on clock in SYSCTL_RCGC2_R
2. Delay for clock to stabilize
3. Set DIR to 1 for output or 0 for input
4. Clear AFSEL bits to 0 to select regular I/O
5. Set DEN bits to 1 to enable data pins
Input/output from pin
6. Read/write GPIO_PORTF_DATA_R
1-17

I/O Ports and Control Registers


Address

Name

400F.E608

GPIOF

GPIOE

GPIOD

GPIOC

GPIOB

GPIOA

SYSCTL_RCGCGPIO_R

4002.53FC

DATA

DATA

DATA

DATA

DATA

GPIO_PORTF_DATA_R

4002.5400

DIR

DIR

DIR

DIR

DIR

GPIO_PORTF_DIR_R

4002.5420

SEL

SEL

SEL

SEL

SEL

GPIO_PORTF_AFSEL_R

4002.551C

DEN

DEN

DEN

DEN

DEN

GPIO_PORTF_DEN_R

Initialization (executed once at beginning)


1. Turn on clock in SYSCTL_RCGCGPIO_R
2. Wait for clock to stabilize
3. Set DIR to 1 for output or 0 for input
4. Clear AFSEL bits to 0 to select regular I/O
5. Set DEN bits to 1 to enable data pins
Input/output from pin
6. Read/write GPIO_PORTF_DATA_R
1-18

SW Development Environment
Editor
Source code

KeilTM uVision

Start
; direction register
LDR R1,=GPIO_PORTD_DIR_R
LDR R0,[R1]
ORR R0,R0,#0x0F
; make PD3-0 output
STR R0, [R1]

Start
Debug
Session

Simulated
Microcontroller

Processor
Memory
I/O

Build Target (F7)


Object code
0x00000142
0x00000144
0x00000146
0x0000014A

4912
6808
F040000F
6008

Address Data

Download

Real
Microcontroller
Start
Debug
Session

Processor
Memory
I/O

1-19

Introduction to C
C is a high-level language
Abstracts hardware
Expressive
Readable
Analyzable

C is a procedural language
The programmer explicitly specifies steps

Program composed of procedures


Functions/subroutines

C is compiled (not interpreted)


Code is analyzed as a whole (not line by line)

1-20

Why C?
C is popular
C influenced many languages
C is considered close-to-machine
Language of choice when careful
coordination and control is required
Straightforward behavior (typically)

Typically used to program low-level


software (with some assembly)
Drivers, runtime systems, operating
systems, schedulers,
1-21

Introduction to C
Program structure
Subroutines and functions

Variables and types


Statements
Preprocessor
DEMO

Timer
ISR

main

Timer
driver

ADC
driver

Timer
hardware

ADC
hardware

LCD
driver
LCD
hardware

1-22

C Program (demo)
Preprocessor directives
Variables
Sequence
Conditional
While-loop
Functions
Block 1
Statements
Block 1
Block 2
Block
Block 2
Expressions
Names
Operators
Comments
Syntax
1-23

Important Notes
C comes with a lot of built-in functions
printf() is one good example
Definition included in header files
#include<header_file.h>

C has one special function called main()


This is where execution starts (reset vector)

C development process
Compiler translates C code into assembly code
Assembler (e.g. built into uVision4) translates
assembly code into object code
Object code runs on machine

1-24

C99 standard
C99 standard

Legacy

int8_t signed 8-bit

char

uint8_t unsigned 8-bit

unsigned char

int16_t signed 16-bit

short

uint16_t unsigned 16-bit

unsigned short

int32_t signed 32-bit

long

uint32_t unsigned 32-bit

unsigned long

char 8-bit ASCII characters

char

1-25

Logic Operations
A

A&B

A|B

A^B

A&(~B)

A|(~B)

1-26

Common Use
Friendly software modifies just the bits that need to be.
The or operation to set bits 1 and 0 of a register, the
other
six
bits
remain
unchanged.
GPIO_PORTD_DIR_R |= 0x03; // PD1,PD0 outputs
The exclusive or operation can also be used to toggle
bits.
GPIO_PORTD_DATA_R ^= 0x80; // toggle PD7
The and operation to extract, or mask, individual bits:
Pressed = GPIO_PORTA_DATA_R & 0x10;
//true if the PA6 switch pressed

Shift operations

Right shift: >>

Left Shift: <<

1-27

Debugging
Aka: Testing, Diagnostics,
Verification
Debugging Actions
Functional debugging,
input/output values
Performance debugging,
input/output values with
time
Tracing, measure
sequence of operations
Profiling,
measure percentage for
tasks,
time relationship
between tasks

Performance
measurement, how
fast it executes

Optimization, make
tradeoffs for overall
good
improve speed,
improve accuracy,
reduce memory,
reduce power,
reduce size,
reduce cost

1-28

Debugging Intrusiveness
Intrusive Debugging
degree of perturbation
caused by the debugging
itself
how much the debugging
slows down execution
Non-intrusive Debugging
characteristic or quality
of a debugger
allows system to operate
as if debugger did not
exist
e.g., logic analyzer, ICE,
BDM

Minimally intrusive
negligible effect on the
system being
debugged
e.g.,
dumps(ScanPoint) and
monitors

Highly intrusive
print statements,
breakpoints and
single-stepping

1-29

Debugging Aids in Keil


Interface
Breakpoints
Registers including xPSR

Memory and Watch Windows


Logic Analyzer, GPIO Panel
Single Step, StepOver, StepOut, Run, Run to
Cursor
Watching Variables in Assembly
EXPORT VarName[DATA,SIZE=4]
Command Interface (Advanced but useful)
WS 1, `VarName,0x10
LA (PORTD & 0x02)>>1
1-30

Debugging
Instrumentation: Code we
add to the system that aids
in debugging
E.g., print statements
Good practice: Define
instruments with specific
pattern in their names
Use instruments that test
a run time global flag
leaves a permanent
copy of the
debugging code
causing it to suffer a
runtime overhead
simplifies on-site
customer support.

Use conditional
compilation (or
conditional assembly)
Keil supports
conditional assembly
Easy to remove all
instruments

Visualization: How the


debugging information is
displayed

1-31

You might also like