a look at interrupts

31
A look at interrupts What are interrupts and why are they needed in an embedded system? Equally as important – how are these ideas handled on the Blackfin

Upload: carson

Post on 05-Jan-2016

33 views

Category:

Documents


1 download

DESCRIPTION

A look at interrupts. What are interrupts and why are they needed in an embedded system? Equally as important – how are these ideas handled on the Blackfin. Dispatch_Tasks ( ). The “standard” instruction cycle of a microprocessor (ENCM369). - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: A look at interrupts

A look at interrupts

What are interrupts and why are they needed in an embedded system?

Equally as important – how are these ideas handled on the Blackfin

Page 2: A look at interrupts

Dispatch_Tasks ( )

Page 3: A look at interrupts

The “standard” instruction cycleof a microprocessor (ENCM369)RESETTHE PROCESSOR

RESET*INTERRUPT(ACTIVE low)

FETCH AN INSTRUCTION FROM PROGRAM MEMORY

DECODE THE INSTRUCTION AND FETCH ANY VALUES NEEDED FROM REGISTER OR MEMORY

EXECUTE THE INSTRUCTION

WRITE BACK THE ANSWER

PROCESSOR

RESET*+5V

RC time constant200 ms on

68K

+5V

GROUND

Page 4: A look at interrupts

The “standard” instruction cycleRESETTHE PROCESSOR

RESET*(ACTIVE low)

FETCH AN INSTRUCTION FROM PROGRAM MEMORY

DECODE THE INSTRUCTION AND FETCH ANY VALUES NEEDED FROM REGISTER OR MEMORY

EXECUTE THE INSTRUCTION

WRITE BACK THE ANSWER

EXECUTING‘YOUR PROGRAM’

UNTIL POWER IS REMOVED

Page 5: A look at interrupts

The “standard” instruction cyclewith external device having important data

RESETTHE PROCESSOR

RESET*(ACTIVE low)

FETCH AN INSTRUCTION FROM PROGRAM MEMORY

DECODE THE INSTRUCTION AND FETCH ANY VALUES NEEDED FROM REGISTER OR MEMORY

EXECUTE THE INSTRUCTION

WRITE BACK THE ANSWER

EXTERNAL HARDWARE

Control signal – I have data for you

16-bits

This is the data

Control signal – ThanksData received

Checkif

ready

Page 6: A look at interrupts

The “wait till ready” approach of reading data from external device

In decode phase – read control register valueIn execute phase – check if 1-- keep waiting (fetch-decode-execute-writeback instruction cycle) until the

control value changes from 0 (device not ready) to 1 (device ready)

When 1 – go to a different part of your program code to read the datae.g. call ReadData( )

Then your program must send an acknowledge back to device that the data has been read. e.g. call AcknowledgeReadData( ).

The device can then go and get more values for you.

PROBLEM: You have no time to do anything else other than waitNot a problem if waiting for this device is the only thing you want to do with

the processor

Page 7: A look at interrupts

Wait till ready approachVery problematic if many devices

RESETTHE PROCESSOR

RESET*(ACTIVE low)

FETCH AN INSTRUCTION FROM PROGRAM MEMORY

DECODE THE INSTRUCTION AND FETCH ANY VALUES NEEDED FROM REGISTER OR MEMORY

EXECUTE THE INSTRUCTION

WRITE BACK THE ANSWER

EXTERNAL HARDWARE

16-bits

EXTERNAL HARDWARE

16-bits

EXTERNAL HARDWARE

16-bits

Checkif

ready

Checkif

ready

Checkif

ready

Checkif

ready

WAITS TOO LONG

Page 8: A look at interrupts

The “Poll approach” of getting dataNot much waiting – but a lot of “doing”

read control register value of device 1-- if 1 go to a different part of the code to “read the data” (ReadData1( ) ) – after reading

the data send an acknowledge signal back to device 1 (AcknowledgeReadData1( ) )-- if 0 go and read the control value of device 2 – don’t worry about device 1 for some time

read control register value of device 2-- if 1 go to a different part of the code to “read the data” (ReadData2() ) – after reading the

data send an acknowledge signal back to device 2 (AcknowledgeReadData2( ) )-- if 0 go and read the control value of device 3 – don’t worry about device 2 and 3 for

some time

ETC

PROBLEM: What happens if, while you are handling device 2, device 1 has “time sensitive information” that will disappear if device 1 is not serviced immediately

Page 9: A look at interrupts

Interrupt Approach – basic ideaExtra “phase” in instruction cycle

RESETTHE PROCESSOR

RESET*(ACTIVE low)

FETCH AN INSTRUCTION FROM “NORMAL” (NOT ISR) PROGRAM MEMORY

DECODE THE INSTRUCTION AND FETCH ANY VALUES NEEDED FROM REGISTER OR MEMORY

EXECUTE THE INSTRUCTION

WRITE BACK THE ANSWER

EXTERNAL HARDWARE

16-bits data

CHECK IF ANINTERRUPT

REQUEST HAS OCCURRED CONTROL SIGNAL

DATA READY SIGNALBECOMES INTERRUPT

REQUEST

NO

yesDOISR

CONTINUEAS BEFORE

Acknowledge Request done

Page 10: A look at interrupts

Issues that MUST be solvedif using interrupts on a real uP

1. What if device hardware can only provide a “quick” I am ready signal?

2. What if more than one hardware device wants to send an interrupt request?

3. What if the programmer wants to “ignore” “low priority” interrupt requests?

4. What if certain interrupt requests are too important to ignore?

Page 11: A look at interrupts

What if hardware device can only provide a “quick” I am ready signal?

Add interrupt (capture) latch to processor

EXTERNAL HARDWARE

16-bits

CHECK IF ANINTERRUPT REQUEST HAS OCCURRED

CONTROL SIGNALFAST CHANGING

DATA READY SIGNALSignal send (1) and

then becomes 0

yes

DOISR

CONTINUEAS BEFORE

Acknowledge done

Interrupt Buffer

Interrupt Latch (Capture Request)Processor

clock signal causes loadof the latch to capturethe transient interrupt

Page 12: A look at interrupts

What if the programmer wants to “ignore” a “low priority” interrupt?

Add (Ignore) Interrupt Mask

EXTERNAL HARDWARE

16-bits

CHECK IF ANINTERRUPT REQUEST HAS OCCURRED

CONTROL SIGNALDATA READY SIGNAL

BECOMES INTERRUPTREQUEST LINE

yes

DOISR

CONTINUEAS BEFORE

Acknowledge done

Interrupt Buffer

Interrupt MaskIgnoreProcessor

clock signal causes loadof the latch to capturethe transient interrupt

Interrupt Latch (Capture)

e.g. IGNORE INTERRUPT IF FIO_MASK_A

BIT is 0

Page 13: A look at interrupts

What if certain hardware interrupts are too important to ignore?

NMI bypass the IGNORE Interrupt Mask

EXTERNAL HARDWARE

16-bits

CHECK IF ANINTERRUPT REQUEST HAS OCCURRED

CONTROL SIGNALDATA READY SIGNAL

BECOMES INTERRUPTREQUEST LINE

yes

DOISR

CONTINUEAS BEFORE

Acknowledge done

Interrupt Buffer

Interrupt MaskIgnoreProcessor

clock signal causes loadof the latch to capturethe transient interrupt

Interrupt Latch (Capture)

Page 14: A look at interrupts

What if more than one hardware wants to send an interrupt?

EXTERNAL HARDWARE

16-bits

CHECK IF ANINTERRUPT REQUEST HAS OCCURRED

CONTROL SIGNALDATA READY SIGNAL

BECOMES INTERRUPTREQUEST LINE

yes

DOISR

CONTINUEAS BEFORE

Acknowledge done

Interrupt Buffer

Interrupt MaskIgnoreProcessor

clock signal causes loadof the latch to capturethe transient interrupt

Interrupt Latch (Capture)

Pending interrupts(still to be done

Page 15: A look at interrupts

Blackfin MASKS and LatchesSame hardware in concept

Page 16: A look at interrupts

Using“idle”

low power mode in

Lab. 2

Page 17: A look at interrupts

Normal “linear flow”PC increments to next instruction

Use program counter PC

as an Instruction Pointer register

Fetch instruction at memory locationPC then increment the PC to point atthe next instruction PC = PC+2 PC = PC + 4;

Page 18: A look at interrupts

Subroutine call flow

PC = PC + 2

CALL INSTRUCTION DOESRETS = PC + 4 (FFA03C78)

PC set to 0xFFA01E24So instruction 0xFFA01E24 done next

This instruction is NOT fetched (until end of subroutine)

This instruction is now fetchedHAVE JUMPED TO SUBROUTINE

Page 19: A look at interrupts

Interrupt occurs HEREMust Jump to ISR NOW– but how?

Use program counter PC

as an Instruction Pointer register

Fetch instruction at memory locationPC then increment the PC to point atthe next instruction PC = PC+2 PC = PC + 4;

Page 20: A look at interrupts

Interrupt occurs HERE (green arrow)Must Jump to ISR NOW – but how?

First step is obvious

PC has 0xFFA01E44 in it – Just about to fetch P0.L = instruction

Remember what instruction you were about to execute – so you can do that instruction after finishing the ISR

RETI is “register used to remember the instruction “stopped” by interrupt

RETI = PC (0xFFA01E44)PC now set to ????? value to make

interrupt happenHow make

this happen?

Page 21: A look at interrupts

Interrupt occurs HEREMust Jump to ISR – but how

First step is obviousRemember what instruction

you were about to execute

RETI = PC (0xFFA01E44)PC = ?????

Some how – like magic we must set

PC = start of Timer ISR0xFFA01EC0then processor will start executing TimerISR code

Page 22: A look at interrupts

Solution – Blackfin has Lookup table of what value to put into PC for each interrupt than can occur

Look-up table for the start of every interrupt routine is stored in EVR table Event vector register table

Event (e.g interrupts)

Table

Page 23: A look at interrupts

Why are all these “event addresses” in the EVR (ISR jump) table the same?

This is the address of the “the processor does not know what to do if there is an interrupt of this sort” EXCEPTION

Page 24: A look at interrupts

• IDLEThis is the

assembly code

While(wait till some happens) instruction

VDSP Emulator puts in a “breakpoint” so for us the program stops.

In real life – processor can’t “stop”, just goes into an infiniteloop until “watchdog timer” resets the processor

The “don’t know what to do” “exception” service routine (ESR)

Page 25: A look at interrupts

“Don’t know what to do”Exception

• This exception hangs the processor– Keeps doing same instruction (doing nothing)

which is safer than doing something– The developer should have provided a better

ESR if had known what to do

• Problem solved by using “WATCHDOG TIMER”

Page 26: A look at interrupts

Solution – Lookup tableof what value to put into PC for

each type of interrupt that occurs

• Question – the start of the ISR is in the event table – How did it get there?

Event (e.g interrupts)

Table

Page 27: A look at interrupts

The start address of the ISR got into the event table HOW?

• Tell (register) the processor how to handle each interrupt service routine

Also we can understand what the raise( ) C++ function does – This is a special C++ instruction to allow us to test ISR

Page 28: A look at interrupts

Blackfin MASKS and Latches

Raise( ) use “software to put a 1 into the interrupt latch register – making the processorthink that a hardware interrupt has happened

Page 29: A look at interrupts

Event table information can be found in the Blackfin Hardware Manual

Page 30: A look at interrupts

What happens if the device does take away its “I’m ready” signal

during an interrupt?

EXTERNAL HARDWARE

16-bits

CHECK IF ANINTERRUPT REQUEST HAS OCCURRED

CONTROL SIGNALDATA READY SIGNAL

yes

DOISR

CONTINUEAS BEFORE

Acknowledge done

Interrupt Buffer

Interrupt Latch (Capture)Processor

clock signal causes loadof the latch to capturethe transient interrupt

Page 31: A look at interrupts

Tackled today

• Three ways of handling hardware requests for service

• Wait till the device signals “ready”then process the data

• If device 1 ready – process its data• Else If device 2 ready – process its data POLL

• Interrupt – start processing the data from a “specific device NOW!