EECS 373 Design of Microprocessor-Based Systems Prabal Dutta University of Michigan

15
1 EECS 373 Design of Microprocessor-Based Systems Prabal Dutta University of Michigan Lecture 4: Memory and Memory-Mapped I/O September 16, 2010

description

EECS 373 Design of Microprocessor-Based Systems Prabal Dutta University of Michigan Lecture 4: Memory and Memory-Mapped I/O September 16, 2010. Announcements. Prabal’s office hours this week Thursday, 9/16 1:00 PM to 2:30 PM 4773 CSE Homework 1 to be posted. Outline. Minute quiz - PowerPoint PPT Presentation

Transcript of EECS 373 Design of Microprocessor-Based Systems Prabal Dutta University of Michigan

Page 1: EECS 373 Design of Microprocessor-Based Systems Prabal Dutta University of Michigan

1

EECS 373Design of Microprocessor-Based Systems

Prabal DuttaUniversity of Michigan

Lecture 4: Memory and Memory-Mapped I/OSeptember 16, 2010

Page 2: EECS 373 Design of Microprocessor-Based Systems Prabal Dutta University of Michigan

2

Announcements

• Prabal’s office hours this week– Thursday, 9/16– 1:00 PM to 2:30 PM– 4773 CSE

• Homework 1 to be posted

Page 3: EECS 373 Design of Microprocessor-Based Systems Prabal Dutta University of Michigan

3

Outline

• Minute quiz

• Announcements

• Review

• Embedded C/Assembly

• Memory

• Memory-mapped I/O

Page 4: EECS 373 Design of Microprocessor-Based Systems Prabal Dutta University of Michigan

What happens after a power-on-reset (POR)?

• On the ARM Cortex-M3• SP and PC are loaded

from the code (.text) segment

• Initial stack pointer– LOC: 0x00000000– POR: SP

mem(0x00000000)

• Interrupt vector table– Initial base: 0x00000004– Vector table is relocatable– Entries: 32-bit values– Each entry is an address– Entry #1: reset vector

• LOC: 0x0000004• POR: PC mem(0x00000004)

• Execution begins4

.equ STACK_TOP, 0x20000800

.text

.syntax unified

.thumb

.global _start

.type start, %function

_start:.word STACK_TOP, start

start:movs r0, #10...

Page 5: EECS 373 Design of Microprocessor-Based Systems Prabal Dutta University of Michigan

5

How does an assembly language program get turned into a executable program image?

Assemblyfiles (.s)

Objectfiles (.o)

as(assembler)

ld(linker)

Memorylayout

Memorylayout

Linkerscript (.ld)

Executableimage file

Binary program

file (.bin)

Disassembledcode (.lst)

objcopy

objdump

Page 6: EECS 373 Design of Microprocessor-Based Systems Prabal Dutta University of Michigan

6

How does a mixed C/Assembly program get turned into a executable program image?

Assemblyfiles (.s)

Objectfiles (.o)

as(assembler)

gcc(compile+ link)

Memorylayout

Memorylayout

Linkerscript (.ld)

Executableimage file

Binary program

file (.bin)

DisassembledCode (.lst)

objcopy

objdump

ld(linker)

Library object

files (.o)

C files (.c)

Page 7: EECS 373 Design of Microprocessor-Based Systems Prabal Dutta University of Michigan

7

Outline

• Minute quiz

• Announcements

• Review

• Embedded C/Assembly

• Memory

• Memory-mapped I/O

Page 8: EECS 373 Design of Microprocessor-Based Systems Prabal Dutta University of Michigan

8

#define SYSREG_SOFT_RST_CR 0xE0042030

uint32_t *reg = (uint32_t *)(SYSREG_SOFT_RST_CR);

main () { *reg |= 0x00004000; // Reset GPIO hardware *reg &= ~(0x00004000);}

Accessing memory locations from C

• Memory has an address and value• Can equate a pointer to desired address • Can set/get de-referenced value to change

memory

Page 9: EECS 373 Design of Microprocessor-Based Systems Prabal Dutta University of Michigan

9

Some useful C keywords

• const– Makes variable value or pointer parameter unmodifiable– const foo = 32;

• register– Tells compiler to locate variables in a CPU register if possible– register int x;

• static– Preserve variable value after its scope ends– Does not go on the stack– static int x;

• volatile– Opposite of const– Can be changed in the background– volatile int I;

Page 10: EECS 373 Design of Microprocessor-Based Systems Prabal Dutta University of Michigan

10

Homework

• Write a library in assembly.

• Make it compatible with the EABI

• Link it with C

Page 11: EECS 373 Design of Microprocessor-Based Systems Prabal Dutta University of Michigan

11

Outline

• Minute quiz

• Announcements

• Review

• Embedded C/Assembly

• Memory

• Memory-mapped I/O

Page 12: EECS 373 Design of Microprocessor-Based Systems Prabal Dutta University of Michigan

SystemMemoryMap

Page 13: EECS 373 Design of Microprocessor-Based Systems Prabal Dutta University of Michigan

13

Outline

• Minute quiz

• Announcements

• Review

• Embedded C/Assembly

• Memory

• Memory-mapped I/O

Page 14: EECS 373 Design of Microprocessor-Based Systems Prabal Dutta University of Michigan

14

Questions?

Comments?

Discussion?

Page 15: EECS 373 Design of Microprocessor-Based Systems Prabal Dutta University of Michigan

15

int main() { int i; int n; unsigned int input = 40, output = 0; for (i = 0; i < 10; ++i) { n = factorial(i); printf("factorial(%d) = %d\n", i, n); } __asm("nop\n"); __asm("mov r0, %0\n" "mov r3, #5\n" "udiv r0, r0, r3\n" "mov %1, r0\n" :"=r" (output) : "r" (input) : "cc", "r3" ); __asm("nop\n"); printf("%d\n", output);}

Cheap trick: use asm() or __asm() macros to sprinkle simple assembly in standard C code!

$ arm-none-eabi-gcc \ -mcpu=cortex-m3 \ -mthumb main.c \ -T generic-hosted.ld \ -o factorial$ qemu-arm -cpu cortex-m3 \ ./factorialfactorial(0) = 1factorial(1) = 1factorial(2) = 2factorial(3) = 6factorial(4) = 24factorial(5) = 120factorial(6) = 720factorial(7) = 5040factorial(8) = 40320factorial(9) = 3628808

Answer: 40/5