Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
0% found this document useful (0 votes)
51 views

Class Processors

A microprocessor consists of several key components: memory for data and program storage, registers for temporary storage, an instruction decoder, an arithmetic logic unit (ALU) for performing calculations, and input/output control modules. These components exchange data via buses. The Atmel Mega2560 microprocessor used in many microcontroller projects contains RAM, flash memory, registers, an ALU, and other components that interact via an 8-bit data bus to read and execute machine-level instructions that make up programs.

Uploaded by

manoj22490
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
51 views

Class Processors

A microprocessor consists of several key components: memory for data and program storage, registers for temporary storage, an instruction decoder, an arithmetic logic unit (ALU) for performing calculations, and input/output control modules. These components exchange data via buses. The Atmel Mega2560 microprocessor used in many microcontroller projects contains RAM, flash memory, registers, an ALU, and other components that interact via an 8-bit data bus to read and execute machine-level instructions that make up programs.

Uploaded by

manoj22490
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 83

Components of a Microprocessor

Andrew H. Fagg: Embedded RealTime Systems: Microcontrollers

Components of a Microprocessor
Memory:
Storage of data Storage of a program Either can be temporary or permanent storage

Registers: small, fast memories


General purpose: store arbitrary data Special purpose: used to control the processor
Andrew H. Fagg: Embedded RealTime Systems: Microcontrollers 2

Components of a Microprocessor
Instruction decoder:
Translates current program instruction into a set of control signals

Arithmetic logical unit:


Performs both arithmetic and logical operations on data: add, subtract, multiply, AND, OR

Input/output control modules


Andrew H. Fagg: Embedded RealTime Systems: Microcontrollers 3

Components of a Microprocessor
Many of these components must exchange data with one-another It is common to use a bus for this exchange

Andrew H. Fagg: Embedded RealTime Systems: Microcontrollers

Collections of Bits
8 bits: a byte 4 bits: a nybble words: can be 8, 16, or 32 bits (depending on the processor)

Andrew H. Fagg: Embedded RealTime Systems: Microcontrollers

Collections of Bits
A data bus typically captures a set of bits simultaneously Need one wire for each of these bits In the Atmel Mega2560: the data bus is 8bits wide In your home machines: 32 or 64 bits

Andrew H. Fagg: Embedded RealTime Systems: Microcontrollers

Memory
What are the essential components of a memory?

Andrew H. Fagg: Embedded RealTime Systems: Microcontrollers

A Memory Abstraction
We think of memory as an array of elements each with its own address Each element contains a value
It is most common for the values to be 8-bits wide (so a byte)

Andrew H. Fagg: Embedded RealTime Systems: Microcontrollers

A Memory Abstraction
We think of memory as an array of elements each with its own address Each element contains a value
It is most common for the values to by 8-bits wide (so a byte)
Stored value

Address

Andrew H. Fagg: Embedded RealTime Systems: Microcontrollers

Memory Operations
Read foo(A+5); reads the value from the memory location referenced by the variable A and adds the value to 5. The result is passed to a function called foo();

Andrew H. Fagg: Embedded RealTime Systems: Microcontrollers

10

Memory Operations
Write A = 5; writes the value 5 into the memory location referenced by A

Andrew H. Fagg: Embedded RealTime Systems: Microcontrollers

11

Types of Memory
Random Access Memory (RAM) Computer can change state of this memory at any time Once power is lost, we lose the contents of the memory This will be our data storage on our microcontrollers
Andrew H. Fagg: Embedded RealTime Systems: Microcontrollers 12

Types of Memory
Read Only Memory (ROM) Computer cannot arbitrarily change state of this memory When power is lost, the contents are maintained

Andrew H. Fagg: Embedded RealTime Systems: Microcontrollers

13

Types of Memory
Erasable/Programmable ROM (EPROM) State can be changed under very specific conditions (usually not when connected to a computer) Our microcontrollers have an Electrically Erasable/Programmable ROM (EEPROM) for program storage
Andrew H. Fagg: Embedded RealTime Systems: Microcontrollers 14

CPU Exercise

Andrew H. Fagg: Embedded RealTime Systems: Microcontrollers

15

Note: The concepts in the next ~50 slides below are covered in our acting exercise

Andrew H. Fagg: Embedded RealTime Systems: Microcontrollers

16

Buses
In the simplest form, a bus is a single wire Many different components can be attached to the bus Any component can take input from the bus or place information on the bus

Andrew H. Fagg: Embedded RealTime Systems: Microcontrollers

17

Buses
At most one component may write to the bus at any one time In a microprocessor, which component is allowed to write is usually determined by the code that is currently executing

Andrew H. Fagg: Embedded RealTime Systems: Microcontrollers

18

Atmel Mega2560 Architecture

Andrew H. Fagg: Embedded RealTime Systems: Microcontrollers

19

Atmel Mega2560
8-bit data bus Primary mechanism for data exchange

Andrew H. Fagg: Embedded RealTime Systems: Microcontrollers

20

Atmel Mega2560
32 general purpose registers 8 bits wide 3 pairs of registers can be combined to give us 16 bit registers
Andrew H. Fagg: Embedded RealTime Systems: Microcontrollers 21

Atmel Mega2560
Special purpose registers Control of the internals of the processor

Andrew H. Fagg: Embedded RealTime Systems: Microcontrollers

22

Atmel Mega2560
Random Access Memory (RAM) 8 KByte in size

Andrew H. Fagg: Embedded RealTime Systems: Microcontrollers

23

Atmel Mega2560
Random Access Memory (RAM) 8 KByte in size Note: in high-end processors, RAM is a separate component
Andrew H. Fagg: Embedded RealTime Systems: Microcontrollers 24

Atmel Mega2560
Flash (EEPROM) Program storage 256 KByte in size

Andrew H. Fagg: Embedded RealTime Systems: Microcontrollers

25

Atmel Mega2560
Flash (EEPROM) In this and many microcontrollers, program and data storage is separate Not the case in our general purpose computers
Andrew H. Fagg: Embedded RealTime Systems: Microcontrollers 26

Atmel Mega2560
EEPROM Permanent data storage

Andrew H. Fagg: Embedded RealTime Systems: Microcontrollers

27

Atmel Mega2560
Arithmetic Logical Unit Data inputs from registers Control inputs not shown (derived from instruction decoder)
Andrew H. Fagg: Embedded RealTime Systems: Microcontrollers 28

One More Bus Note


Many devices on the bus. However, at a given time: There is exactly one device that is the writer There is exactly one that is the reader

Andrew H. Fagg: Embedded RealTime Systems: Microcontrollers

29

Machine-Level Programs
Machine-level programs are stored as sequences of atomic machine instructions Stored in program memory Execution is generally sequential (instructions are executed in order) But with occasional jumps to other locations in memory
Andrew H. Fagg: Embedded RealTime Systems: Microcontrollers 30

Types of Instructions
Memory operations: transfer data values between memory and the internal registers Mathematical operations: ADD, SUBTRACT, MULT, AND, etc. Tests: value == 0, value > 0, etc. Program flow: jump to a new location, jump conditionally (e.g., if the last test was true)
Andrew H. Fagg: Embedded RealTime Systems: Microcontrollers 31

Mega2560: Decoding Instructions


Program counter Address of currently executing instruction

Andrew H. Fagg: Embedded RealTime Systems: Microcontrollers

32

Mega2560: Decoding Instructions


Instruction register Stores the machine-level instruction currently being executed

Andrew H. Fagg: Embedded RealTime Systems: Microcontrollers

33

Atmel Mega2560
Instruction decoder Translates current instruction into control signals for the rest of the processor
Andrew H. Fagg: Embedded RealTime Systems: Microcontrollers 34

Atmel Instructions

Andrew H. Fagg: Embedded RealTime Systems: Microcontrollers

35

Some Mega2560 Memory Operations


LDS Rd, k Load SRAM memory location k into register Rd Rd <- (k)
We refer to this as Assembly Language

STS Rd, k Store value of Rd into SRAM location k (k) <- Rd


Andrew H. Fagg: Embedded RealTime Systems: Microcontrollers 36

Load SRAM Value to Register


LDS Rd, k

Andrew H. Fagg: Embedded RealTime Systems: Microcontrollers

37

Store Register Value to SRAM


STS Rd, k

Andrew H. Fagg: Embedded RealTime Systems: Microcontrollers

38

Some Mega2560 Arithmetic and Logical Instructions


ADD Rd, Rr Rd and Rr are registers Operation: Rd <- Rd + Rr ADC Rd, Rr Add with carry Rd <- Rd + Rr + C
Andrew H. Fagg: Embedded RealTime Systems: Microcontrollers 40

Add Two Register Values


ADD Rd, Rr Fetch register values

Andrew H. Fagg: Embedded RealTime Systems: Microcontrollers

41

Add Two Register Values


ADD Rd, Rr Fetch register values ALU performs ADD

Andrew H. Fagg: Embedded RealTime Systems: Microcontrollers

42

Add Two Register Values


ADD Rd, Rr Fetch register values ALU performs ADD Result is written back to register via the data bus
Andrew H. Fagg: Embedded RealTime Systems: Microcontrollers 43

Some Mega2560 Arithmetic and Logical Instructions


NEG Rd: take the twos complement of Rd AND Rd, Rr: bit-wise AND with a register ANDI Rd, K: bit-wise AND with a constant EOR Rd, Rr: bit-wise XOR INC Rd: increment Rd MUL Rd, Rr: multiply Rd and Rr (unsigned) MULS Rd, Rr: multiply (signed)
Andrew H. Fagg: Embedded RealTime Systems: Microcontrollers 44

Some Mega8 Test Instructions


CP Rd, Rr Compare Rd with Rr TST Rd Test for if register Rd is zero or a negative number

Andrew H. Fagg: Embedded RealTime Systems: Microcontrollers

45

Some Mega8 Test Instructions


Modify the status register

Andrew H. Fagg: Embedded RealTime Systems: Microcontrollers

46

Some Program Flow Instructions


RJMP k Change the program counter by k+1 PC <- PC + k + 1 BRGE k Branch if greater than or equal to If last compare was greater than or equal to, then PC <- PC + k + 1
Andrew H. Fagg: Embedded RealTime Systems: Microcontrollers 47

Connecting Assembly Language to C


Our C compiler is responsible for translating our code into Assembly Language Today, we rarely program in Assembly Language
Embedded systems are a common exception Also: it is useful in some cases to view the assembly code generated by the compiler
Andrew H. Fagg: Embedded RealTime Systems: Microcontrollers 48

An Example
A C code snippet: if(B < A) { D += A; }

Andrew H. Fagg: Embedded RealTime Systems: Microcontrollers

49

An Example
The Assembly : A C code snippet: LDS R1 (A) LDS R2 (B) if(B < A) { CP R2, R1 D += A; BRGE 3 } LDS R3 (D) ADD R3, R1 STS (D), R3 .. Andrew H. Fagg: Embedded RealTime Systems: Microcontrollers

50

An Example
A C code snippet: if(B < A) { D += A; }
Load the contents of memory location A into register 1

The Assembly : LDS R1 (A) PC LDS R2 (B) CP R2, R1 BRGE 3 LDS R3 (D) ADD R3, R1 STS (D), R3 ..
51

Andrew H. Fagg: Embedded RealTime Systems: Microcontrollers

An Example
A C code snippet: if(B < A) { D += A; }
Load the contents of memory location B into register 2

The Assembly : LDS R1 (A) LDS R2 (B) PC CP R2, R1 BRGE 3 LDS R3 (D) ADD R3, R1 STS (D), R3 ..
52

Andrew H. Fagg: Embedded RealTime Systems: Microcontrollers

An Example
A C code snippet: if(B < A) { D += A; }
Compare the contents of register 2 with those of register 1

This results in a change to the Andrew H. Fagg: Embedded Realstatus register Time Systems: Microcontrollers

The Assembly : LDS R1 (A) LDS R2 (B) CP R2, R1 PC BRGE 3 LDS R3 (D) ADD R3, R1 STS (D), R3 ..
53

An Example
A C code snippet: if(B < A) { D += A; }
Branch If Greater Than or Equal To: jump ahead 3 instructions if true

The Assembly : LDS R1 (A) LDS R2 (B) CP R2, R1 PC BRGE 3 LDS R3 (D) ADD R3, R1 STS (D), R3 ..
54

Andrew H. Fagg: Embedded RealTime Systems: Microcontrollers

An Example
A C code snippet: if(B < A) { D += A; }
Branch if greater than or equal to will jump ahead 3 instructions if true

Andrew H. Fagg: Embedded RealTime Systems: Microcontrollers

The Assembly : LDS R1 (A) LDS R2 (B) CP R2, R1 BRGE 3 LDS R3 (D) if true ADD R3, R1 STS (D), R3 .. PC
55

An Example
A C code snippet: if(B < A) { D += A; } The Assembly : LDS R1 (A) LDS R2 (B) CP R2, R1 BRGE 3 LDS R3 (D) PC ADD R3, R1 STS (D), R3 ..
56

if not true

Not true: execute the next instruction

Andrew H. Fagg: Embedded RealTime Systems: Microcontrollers

An Example
A C code snippet: if(B < A) { D += A; }
Load the contents of memory location D into register 3

The Assembly : LDS R1 (A) LDS R2 (B) CP R2, R1 BRGE 3 LDS R3 (D) PC ADD R3, R1 STS (D), R3 ..
57

Andrew H. Fagg: Embedded RealTime Systems: Microcontrollers

An Example
A C code snippet: if(B < A) { D += A; }
Add the values in registers 1 and 3 and store the result in register 3

The Assembly : LDS R1 (A) LDS R2 (B) CP R2, R1 BRGE 3 LDS R3 (D) ADD R3, R1 PC STS (D), R3 ..
58

Andrew H. Fagg: Embedded RealTime Systems: Microcontrollers

An Example
A C code snippet: if(B < A) { D += A; }
Store the value in register 3 back to memory location D

The Assembly : LDS R1 (A) LDS R2 (B) CP R2, R1 BRGE 3 LDS R3 (D) ADD R3, R1 PC STS (D), R3 ..
59

Andrew H. Fagg: Embedded RealTime Systems: Microcontrollers

Eagle CAD training: one person per group by today

Andrew H. Fagg: Embedded RealTime Systems: Microcontrollers

60

The Important Stuff


Instructions are the atomic actions that are taken by the processor Many different component work together to execute a single instruction One line of C code typically translates into a sequence of several instructions In the mega 2560, most instructions are executed in a single clock cycle The high-level view is important here: you wont be compiling programs on exams
Andrew H. Fagg: Embedded RealTime Systems: Microcontrollers 61

Atmel Mega2560 Microcontroller

Andrew H. Fagg: Embedded RealTime Systems: Microcontrollers

62

Atmel Mega2560

Andrew H. Fagg: Embedded RealTime Systems: Microcontrollers

63

Atmel Mega2560
Pins are organized into 8-bit Ports: A, B, C L
But no I

Andrew H. Fagg: Embedded RealTime Systems: Microcontrollers

64

Digital Input/Output
Each port has three special-purpose registers that control its behavior. For port B, they are:
DDRB: data direction register B PORTB: port output register B PINB: port input B

Andrew H. Fagg: Embedded RealTime Systems: Microcontrollers

65

Data Direction Register: DDRx


8-bit wide register
Controls one pin with each bit

0 -> this is an input pin 1 -> this is an output pin

Andrew H. Fagg: Embedded RealTime Systems: Microcontrollers

66

Port Output Register: PORTx


Also one pin per bit If configured as an output:
0 -> the pin is held at 0 V 1 -> the pin is held at +5 V

Note: only configure pins as an output if you really mean it!

Andrew H. Fagg: Embedded RealTime Systems: Microcontrollers

67

Port INput register: PINx


One pin per bit Reading from the register:
0 -> the voltage of the pin is near 0 V 1 -> the voltage of the pin is near +5 V

If nothing is connected to the pin, then the pin will appear to be in a random state

Andrew H. Fagg: Embedded RealTime Systems: Microcontrollers

68

A First Program
Flash the LEDs at a regular interval How do we do this?

Andrew H. Fagg: Embedded RealTime Systems: Microcontrollers

76

A First Program
How do we flash the LED at a regular interval? We toggle the state of PC0

Andrew H. Fagg: Embedded RealTime Systems: Microcontrollers

77

A First Program
main() { DDRC = 0x3; while(1) { PORTC = PORTC | 0x1; // sets PC0 to 1 delay_ms(100); PORTC = PORTC & ~0x1; // set PC0 to 0 delay_ms(100); } }

Andrew H. Fagg: Embedded RealTime Systems: Microcontrollers

78

A First Program
main() { DDRC = 0x3; while(1) { PORTC = PORTC ^ 0x1; delay_ms(100); } }

// flip PC0 to 1

Andrew H. Fagg: Embedded RealTime Systems: Microcontrollers

79

A First Program
main() { DDRC = 1; // Set port C pin 0 as an output while(1) { PORTC = PORTC ^ 0x1; delay_ms(500); } }

// XOR bit 0 with 1 // Pause for 500 msec

Andrew H. Fagg: Embedded RealTime Systems: Microcontrollers

81

A Second Program
main() { DDRC = 3; // Set port C pins 0, and 1 as outputs while(1) { PORTC = PORTC ^ 0x1; delay_ms(500); PORTC = PORTC ^ 0x2; delay_ms(250); PORTC = PORTC ^ 0x2; delay_ms(250); } }

// XOR bit 0 with 1 // Pause for 500 msec // XOR bit 1 with 1 // XOR bit 1 with 1

What does this program do?


Andrew H. Fagg: Embedded RealTime Systems: Microcontrollers 82

A Second Program
main() { DDRC = 3; // Set port C pins 0, and 1 as outputs while(1) { PORTC = PORTC ^ 0x1; delay_ms(500); PORTC = PORTC ^ 0x2; delay_ms(250); PORTC = PORTC ^ 0x2; delay_ms(250); } }

// XOR bit 0 with 1 // Pause for 500 msec // XOR bit 1 with 1 // XOR bit 1 with 1

Flashes LED on PC1 at 1 Hz on PC0: 0.5 Hz


Andrew H. Fagg: Embedded RealTime Systems: Microcontrollers 83

Port-Related Registers
Some of the C-accessible registers for controlling digital I/O: Directional control DDRB DDRC DDRD Writing PORTB PORTC PORTD Reading PINB PINC PIND
84

Port B Port C Port D

Andrew H. Fagg: Embedded RealTime Systems: Microcontrollers

More Bit Masking


Suppose we have a 3-bit number (so values 0 7) Suppose we want to set the state of B3, B4, and B5 with this number (B3 is the least significant bit) And: we want to leave the other bits undisturbed How do we express this in code?
Andrew H. Fagg: Embedded RealTime Systems: Microcontrollers 85

Bit Masking
main() { DDRB = 0x38; : : uint8_t val; val = command_to_robot; PORTB = ???? } // // A value between 0 and 7 // Set pins B3, B4, B5 as outputs

Fill this in

Andrew H. Fagg: Embedded RealTime Systems: Microcontrollers

86

Bit Masking
main() { DDRB = 0x38; : : uint8_t val; val = command_to_robot; PORTB = (PORTB & ~0x38) | ((val & 0x7)<<3); } // A value between 0 and 7 // Set the current B3-B5 to 0s // OR with new values (shifted // to fit within B3-B5 // Set pins B3, B4, B5 as outputs

Andrew H. Fagg: Embedded RealTime Systems: Microcontrollers

87

Reading the Digital State of Pins


Given: we want to read the state of PB6 and PB7 and obtain a value of 0 3 How do we configure the port? How do we read the pins? How do we translate their values into an integer of 0 .. 3?

Andrew H. Fagg: Embedded RealTime Systems: Microcontrollers

88

Reading the Digital State of Pins


main() { DDRB = 0x38; // Set pins B3, B4, B5 as outputs // All others are inputs (suppose we care // about bits B6 and B7 only (so a 2-bit // number)

: : unsigned short val, outval; val = ???? // A short is 8-bits wide

// Read the input value of B // Translate to a value of 0 3

outval = ??? }

Andrew H. Fagg: Embedded RealTime Systems: Microcontrollers

89

Reading the Digital State of Pins


main() { DDRB = 0x38; // Set pins B3, B4, B5 as outputs // All others are inputs (suppose we care // about bits B6 and B7 only (so a 2-bit // number)

: : unsigned short val, outval; val = PINB; outval = (val & 0xC0) >> 6; } // A short is 8-bits wide

Andrew H. Fagg: Embedded RealTime Systems: Microcontrollers

90

Putting It All Together


Program development:
On your own laptop We will use a C crosscompiler (avr-gcc and other tools) to generate code on your laptop for the mega8 processor

Program download:
We will use in circuit programming: you will be able to program the chip without removing it from your circuit
Andrew H. Fagg: Embedded RealTime Systems: Microcontrollers 91

Compiling and Downloading Code


Preparing to program: See the Atmel HOWTO (pointer from the schedule page) Windoze: Install AVR Studio and WinAVR OS X: Install OSX-AVR
We will use make for compiling and downloading

Linux: Install binutils, avr-gcc, avr-libc, and avrdude


Same as OS X
Andrew H. Fagg: Embedded RealTime Systems: Microcontrollers 92

You might also like