EE 319K Introduction to Embedded Systems

Slides:



Advertisements
Similar presentations
1 Lecture 3: MIPS Instruction Set Today’s topic:  More MIPS instructions  Procedure call/return Reminder: Assignment 1 is on the class web-page (due.
Advertisements

1 ARM Movement Instructions u MOV Rd, ; updates N, Z, C Rd = u MVN Rd, ; Rd = 0xF..F EOR.
4-1 EE 319K Introduction to Embedded Systems Lecture 4: Arithmetic overflow, Branches, Control Structures, Abstraction & Refinement Bard, Erez, Gerstlauer,
Run-time Environment for a Program different logical parts of a program during execution stack – automatically allocated variables (local variables, subdivided.
S04: MSP430 Microarchitecture
Fall EE 333 Lillevik 333f06-l4 University of Portland School of Engineering Computer Organization Lecture 4 Assembly language programming ALU and.
TK 2633 Microprocessor & Interfacing
Execution of an instruction
Room: E-3-31 Phone: Dr Masri Ayob TK 2633 Microprocessor & Interfacing Lecture 1: Introduction to 8085 Assembly Language.
Recap – Our First Computer WR System Bus 8 ALU Carry output A B S C OUT F 8 8 To registers’ input/output and clock inputs Sequence of control signal combinations.
Choice for the rest of the semester New Plan –assembler and machine language –Operating systems Process scheduling Memory management File system Optimization.
Topics covered: ARM Instruction Set Architecture CSE 243: Introduction to Computer Architecture and Hardware/Software Interface.
ARM C Language & Assembler. Using C instead of Java (or Python, or your other favorite language)? C is the de facto standard for embedded systems because.
Railway Foundation Electronic, Electrical and Processor Engineering.
6-1 EE 319K Introduction to Embedded Systems Lecture 6: SysTick Timer, Exam 1 Review Bard, Erez, Gerstlauer, Valvano, Yerraballi, Telang, Janapa Reddi,
EE 319K Introduction to Embedded Systems
2-1 EE 319K Introduction to Embedded Systems Lecture 2: I/O, Logic/Shift Operations, Addressing modes, Memory Operations, Subroutines, Introduction to.
Chapter 6 – MSP430 Micro-Architecture
ARM Instructions I Prof. Taeweon Suh Computer Science Education Korea University.
Embedded System Design Center Sai Kumar Devulapalli ARM7TDMI Microprocessor Thumb Instruction Set.
Topic 8: Data Transfer Instructions CSE 30: Computer Organization and Systems Programming Winter 2010 Prof. Ryan Kastner Dept. of Computer Science and.
1-1 EE 319K Introduction to Microcontrollers Lecture 1: Introduction, Embedded Systems, ARM Programming.
Some material taken from Assembly Language for x86 Processors by Kip Irvine © Pearson Education, 2010 Slides revised 2/2/2014 by Patrick Kelley.
Instruction Set Architecture
Lecture 4. ARM Instructions #1 Prof. Taeweon Suh Computer Science Education Korea University ECM586 Special Topics in Embedded Systems.
CS 147 June 13, 2001 Levels of Programming Languages Svetlana Velyutina.
CSC 3210 Computer Organization and Programming Chapter 1 THE COMPUTER D.M. Rasanjalee Himali.
Microprocessor Dr. Rabie A. Ramadan Al-Azhar University Lecture 7.
Execution of an instruction
More on Assembly 1 CSE 2312 Computer Organization and Assembly Language Programming Vassilis Athitsos University of Texas at Arlington.
ECS642U Embedded Systems ARM CPU and Assembly Code William Marsh.
3-1 EE 319K Introduction to Microcontrollers Lecture 3: Addressing modes, Memory Operations, Subroutines, I/O, Logical/Shift Operations.
Z80 Overview internal architecture and major elements of the Z80 CPU.
Unit-2 Instruction Sets, CPUs
More on Assembly 1 CSE 2312 Computer Organization and Assembly Language Programming Vassilis Athitsos University of Texas at Arlington.
ECE 447: Lecture 11 Introduction to Programming in Assembly Language.
Computer Organization Instructions Language of The Computer (MIPS) 2.
F28HS Hardware-Software Interface Lecture 11: ARM Assembly Language 5.
Instruction Set Architectures Early trend was to add more and more instructions to new CPUs to do elaborate operations –VAX architecture had an instruction.
Recap – Our First Computer WR System Bus 8 ALU Carry output A B S C OUT F 8 8 To registers’ read/write and clock inputs Sequence of control signal combinations.
DEPARTMENT OF ELECTRONICS ENGINEERING V-SEMESTER MICROPROCESSOR & MICROCONTROLLER 1 CHAPTER NO microcontroller & programming.
Intel Xscale® Assembly Language and C. The Intel Xscale® Programmer’s Model (1) (We will not be using the Thumb instruction set.) Memory Formats –We will.
I NTEL 8086 M icroprocessor بسم الله الرحمن الرحيم 1.
Revision questions CENG2400 v.14b 1 CENG2400 Revision, Question 1 A system has an ARM processor with a 32-bit General Purpose Input Output (GPIO) module.
Writing Functions in Assembly
Format of Assembly language
ECE 3430 – Intro to Microcomputer Systems
Gunjeet Kaur Dronacharya Group of institutions
Assembly Language Programming of 8085
ARM Registers Register – internal CPU hardware device that stores binary data; can be accessed much more rapidly than a location in RAM ARM has.
ECE 3430 – Intro to Microcomputer Systems
The Cortex-M3/m4 Embedded Systems: Cortex-M3/M4 Instruction Sets
EE 319K Introduction to Embedded Systems
Introduction of microprocessor
Chapter 4 Addressing modes
RISC Concepts, MIPS ISA Logic Design Tutorial 8.
William Stallings Computer Organization and Architecture 8th Edition
Writing Functions in Assembly
CENG2400 Revision Q1a A system has an ARM processor with a 32-bit General Purpose Input Output (GPIO) module. Two on/off switches are connected to bit-3.
The University of Adelaide, School of Computer Science
ECE232: Hardware Organization and Design
Chapter 8 Central Processing Unit
The University of Adelaide, School of Computer Science
Introduction to Micro Controllers & Embedded System Design
ECE 3430 – Intro to Microcomputer Systems
Overheads for Computers as Components 2nd ed.
Computer Architecture
Multiply Instructions
Computer Operation 6/22/2019.
Presentation transcript:

EE 319K Introduction to Embedded Systems Lecture 2: I/O, Logic/Shift Operations, Addressing modes, Memory Operations, Subroutines, Introduction to C Bard, Gerstlauer, Valvano, Yerraballi

Agenda Recap Outline Embedded systems Product life cycle ARM programming Outline Input/output Logical/shift operations Addressing modes, memory operations Stack and subroutines Introduction to C Structure of a C program Variables, expressions and assignments Bard, Gerstlauer, Valvano, Yerraballi

Input/Output: TM4C123 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) Bard, Gerstlauer, Valvano, Yerraballi

I/O Ports and Control Registers GPIO_PORTF_DATA_R GPIO_PORTF_DIR_R 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 Bard, Gerstlauer, Valvano, Yerraballi

I/O Ports and Control Registers Address 7 6 5 4 3 2 1 Name 400F.E608 - GPIOF GPIOE GPIOD GPIOC GPIOB GPIOA SYSCTL_RCGCGPIO_R 4002.53FC DATA GPIO_PORTF_DATA_R 4002.5400 DIR GPIO_PORTF_DIR_R 4002.5420 SEL GPIO_PORTF_AFSEL_R 4002.551C DEN GPIO_PORTF_DEN_R Initialization (executed once at beginning) Turn on clock in SYSCTL_RCGCGPIO_R Wait two bus cycles (two NOP instructions) Set DIR to 1 for output or 0 for input Clear AFSEL bits to 0 to select regular I/O Set DEN bits to 1 to enable data pins Input/output from pin Read/write GPIO_PORTF_DATA_R Bard, Gerstlauer, Valvano, Yerraballi

Logic Operations Logic Instructions A Rn B Operand2 A&B AND A|B ORR EOR A&(~B) BIC A|(~B) ORN 1 Logic Instructions AND{S} {Rd,} Rn, <op2> ; Rd=Rn&op2 ORR{S} {Rd,} Rn, <op2> ; Rd=Rn|op2 EOR{S} {Rd,} Rn, <op2> ; Rd=Rn^op2 BIC{S} {Rd,} Rn, <op2> ; Rd=Rn&(~op2) ORN{S} {Rd,} Rn, <op2> ; Rd=Rn|(~op2) Bard, Gerstlauer, Valvano, Yerraballi

To set The or operation to set bits 1 and 0 of a register. The other six bits remain constant. Friendly software modifies just the bits that need to be. GPIO_PORTD_DIR_R |= 0x03; // PD1,PD0 outputs Assembly: LDR R0,=GPIO_PORTD_DIR_R LDR R1,[R0] ; read previous value ORR R1,R1,#0x03 ; set bits 0 and 1 STR R1,[R0] ; update c7 c6 c5 c4 c3 c2 c1 c0 value of R1 0 0 0 0 0 0 1 1 0x03 constant c7 c6 c5 c4 c3 c2 1 1 result of the ORR Bard, Gerstlauer, Valvano, Yerraballi

To toggle The exclusive or operation can also be used to toggle bits. GPIO_PORTD_DATA_R ^= 0x80; /* toggle PD7 */ Assembly: LDR R0,=GPIO_PORTD_DATA_R LDR R1,[R0] ; read port D EOR R1,R1,#0x80 ; toggle bit 7 STR R1,[R0] ; update b7 b6 b5 b4 b3 b2 b1 b0 value of R1 1 0 0 0 0 0 0 0 0x80 constant ~b7 b6 b5 b4 b3 b2 b1 b0 result of the EOR Bard, Gerstlauer, Valvano, Yerraballi

Switch Interfacing The and operation to extract, or mask, individual bits: Pressed = GPIO_PORTA_DATA_R & 0x10; //true if the PA6 switch pressed Assembly: LDR R0,=GPIO_PORTA_DATA_R LDR R1,[R0] ; read port A AND R1,R1,#0x10 ; clear all bits except bit 6 LDR R0,=Pressed ; update variable STR R1,[R0] ; true iff switch pressed a7 a6 a5 a4 a3 a2 a1 a0 value of R1 0 1 0 0 0 0 0 0 0x40 constant 0 a6 0 0 0 0 0 0 result of the AND Bard, Gerstlauer, Valvano, Yerraballi

Shift Operations Use the ASR instruction when manipulating signed numbers, and use the LSR instruction when shifting unsigned numbers Bard, Gerstlauer, Valvano, Yerraballi

Shift Example Assembly: High and Low are unsigned 4-bit components, which will be combined into a single unsigned 8-bit Result. Result = (High<<4)|Low; Assembly: LDR R0,=High LDR R1,[R0] ; read value of High LSL R1,R1,#4 ; shift into position LDR R0,=Low LDR R2,[R0] ; read value of Low ORR R1,R1,R2 ; combine the two parts LDR R0,=Result STR R1,[R0] ; save the answer 0 0 0 0 h3 h2 h1 h0 value of High in R1 h3 h2 h1 h0 0 0 0 0 after last LSL 0 0 0 0 l3 l2 l1 l0 value of Low in R2 h3 h2 h1 h0 l3 l2 l1 l0 result of the ORR instruction Bard, Gerstlauer, Valvano, Yerraballi

Design example Market survey, profit estimate Overall function, specifications Data flow (test) Flowchart (test) Software (test) Simulation, prototype (test) Build (test) Bard, Gerstlauer, Valvano, Yerraballi

Design Function table (PD0 input, PD3 output) How to test (switch input, LED output) Draw a data flow graph Draw a flow chart Write pseudo code Write assembly Simulate Bard, Gerstlauer, Valvano, Yerraballi

Process Solution in NOTGate-asm.zip Start Activate clock for port Enable PD3, PD0 pins Make PD0 (switch) pin an input Make PD3 (LED) pin an output Loop Read input from Switch (0 or 1) not function LED = 8*(not Switch) Write output (8 or 0) branch Loop Build it, run it, test it with logic analyzer Bard, Gerstlauer, Valvano, Yerraballi

ARM Assembly Language Assembly format Comments Label Opcode Operands Comment init MOV R0, #100 ; set table size BX LR Comments Comments should explain why or how Comments should not explain the opcode and its operands Comments are a major component of self-documenting code What does BX LR do? Bard, Gerstlauer, Valvano, Yerraballi

Simple Addressing Modes Second operand - <op2> ADD Rd, Rn, <op2> Constant ADD Rd, Rn, #constant ; Rd = Rn+constant Shift ADD R0, R1, LSL #4 ; R0 = R0+(R1*16) ADD R0, R1, R2, ASR #4 ; R0 = R1+(R2/16) Memory accessed only with LDR STR Constant in ROM: =Constant / [PC,#offs] Variable on the stack: [SP,#offs] Global variable in RAM: [Rx] I/O port: [Rx] Bard, Gerstlauer, Valvano, Yerraballi

Addressing Modes Immediate addressing Data is contained in the instruction MOV R0,#100 ; R0=100, immediate addressing List two ways to bring a constant into a register? Bard, Gerstlauer, Valvano, Yerraballi

Addressing Modes Indexed Addressing Address of the data in memory is in a register LDR R0,[R1] ; R0= value pointed to by R1 Is the number 0x20000004 in general? In this example Bard, Gerstlauer, Valvano, Yerraballi

Addressing Modes PC Relative Addressing Address of data in EEPROM is indexed based upon the Program Counter The Cortex-M3 has a 32-bit address space Instructions are at most 32 bits long => there is not enough space in an instruction for an address EEPROM accesses can be indexed using the program counter The PC always points to EEPROM and it can be used to calculate an address relative to the value in the PC RAM accesses involve storing the address in EEPROM and then accessing it using indexed addressing relative to the PC Two instructions will typically be required to access RAM or I/O Bard, Gerstlauer, Valvano, Yerraballi

Memory Access Instructions Loading a register with a constant, address, or data LDR Rd, =number LDR Rd, =label LDR and STR used to load/store RAM using register-indexed addressing Register [R0] Base address plus offset [R0,#16] ADR Rd,val is a pseudo-op that gets assembled into ADD Rd,PC,#offs Can only load values that are addresses (relative to PC) Offset is 8 bit, i.e. address must be within 255 bytes of PC LDR Rd,=val is a pseudo-op that gets assembled into either a MOV Rd,#val or a constant in ROM with LDR Rd,[pc,#offs] Can be any constant (number/value) or address Bard, Gerstlauer, Valvano, Yerraballi

Load/Store Instructions General load/store instruction format LDR{type} Rd,[Rn] ;load memory at [Rn] to Rd STR{type} Rt,[Rn] ;store Rt to memory at [Rn] LDR{type} Rd,[Rn, #n] ;load memory at [Rn+n] to Rd STR{type} Rt,[Rn, #n] ;store Rt to memory [Rn+n] LDR{type} Rd,[Rn,Rm,LSL #n] ;load [Rn+Rm<<n] to Rd STR{type} Rt,[Rn,Rm,LSL #n] ;store Rt to [Rn+Rm<<n] Aligned/Unaligned Memory Access Aligned word-aligned address is used for a word, dual word, or multiple word access, or where a halfword-aligned address is used for a halfword access Unaligned accessing a 32-bit object (4 bytes) but the address is not evenly divisible by 4 accessing a 16-bit object (2 bytes) but the address is not evenly divisible by 2 Unaligned access supported for the following instructions: LDR Load 32-bit word LDRH Load 16-bit unsigned halfword LDRSH Load 16-bit signed halfword (sign-extend bit 15 to bits 31-16) STR Store 32-bit word STRH Store 16-bit halfword Bard, Gerstlauer, Valvano, Yerraballi

The Stack Stack is last-in-first-out (LIFO) storage 32-bit data Stack pointer, SP or R13, points to top element of stack Stack pointer decremented as data placed on stack PUSH and POP instructions used to load and retrieve data Bard, Gerstlauer, Valvano, Yerraballi

The Stack Stack is last-in-first-out (LIFO) storage 32-bit data Stack pointer, SP or R13, points to top element of stack Stack pointer decremented as data placed on stack (incremented when data is removed) PUSH and POP instructions used to load and retrieve data Stack push first decrements SP, then stores the data Stack pop first reads the data, and then increments SP Instruction sequence: PUSH {R0} PUSH {R1} PUSH {R2} POP {R3} POP {R4} POP {R5} Bard, Gerstlauer, Valvano, Yerraballi

Stack Usage Stack memory allocation Rules for stack use Stack should always be balanced, i.e. functions should have an equal number of pushes and pops Stack accesses (push or pop) should not be performed outside the allocated area Stack reads and writes should not be performed within the free area Bard, Gerstlauer, Valvano, Yerraballi

Functions Bard, Gerstlauer, Valvano, Yerraballi

Subroutines One function calls another, so LR must be saved POP {PC} ;------------Rand100------------ ; Return R0=a random number between ; 1 and 100. Call Random and then divide ; the generated number by 100 ; return the remainder+1 Rand100 PUSH {LR} ; SAVE Link BL Random ;R0 is a 32-bit random number LDR R1,=100 BL Divide ADD R0,R3,#1 POP {LR} ;Restore Link back BX LR ;------------Divide------------ ; find the unsigned quotient and remainder ; Inputs: dividend in R0 ; divisor in R1 ; Outputs: quotient in R2 ; remainder in R3 ;dividend = divisor*quotient + remainder Divide UDIV R2,R0,R1 ;R2=R0/R1,R2 is quotient MUL R3,R2,R1 ;R3=(R0/R1)*R1 SUB R3,R0,R3 ;R3=R0%R1, ;R3 is remainder of R0/R1 BX LR ;return ALIGN END POP {PC} One function calls another, so LR must be saved Bard, Gerstlauer, Valvano, Yerraballi

Reset, Subroutines and Stack A Reset occurs immediately after power is applied and when the reset signal is asserted (Reset button pressed) The Stack Pointer, SP (R13) is initialized at Reset to the 32-bit value at location 0 (Default: 0x20000408) The Program Counter, PC (R15) is initialized at Reset to the 32-bit value at location 4 (Reset Vector) (Default: 0x20000100) The Link Register (R14) is initialized at Reset to 0xFFFFFFFF Thumb bit is set at Reset Processor automatically saves return address in LR when a subroutine call is invoked. User can push and pull multiple registers on or from the Stack at subroutine entry and before subroutine return. Bard, Gerstlauer, Valvano, Yerraballi

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) Bard, Gerstlauer, Valvano, Yerraballi Ramesh Yerraballi, Jon Valvano, Bill Bard, Andreas Gerstlauer 28

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, … Bard, Gerstlauer, Valvano, Yerraballi 29

Introduction to C Program structure Variables and types Statements Subroutines and functions Variables and types Statements Preprocessor DEMO Bard, Gerstlauer, Valvano, Yerraballi 30

C Program (demo) Preprocessor directives Variables Functions Statements Expressions Names Operators Comments Syntax Bard, Gerstlauer, Valvano, Yerraballi 31

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 Bard, Gerstlauer, Valvano, Yerraballi 32