Week 1 PowerPoint - Michael G. Morrow

advertisement
ECE 353
Introduction to
Microprocessor Systems
Week 11
Michael G. Morrow, P.E.
Topics
Interrupt Concepts
ARM7TDMI Interrupt Handling
ADuC7026 Interrupt Implementation

Interrupt Sources
Interrupt Service Routines (ISRs)
Interrupt Driven Systems
Software Interrupts and Exceptions
Interrupt Priority and Latency
Debugging Interrupt Hardware and
Software
Why Use Interrupts?
Maximize processor utilization and
efficiency
Allow use of sleep/idle states to save
power
Minimize latency in responding to
complex input/output structures
Facilitate event-driven applications and
preemptive multitasking
Interrupt Primer
Terminology
Basic interrupt hardware



Interrupt request
Interrupt acknowledge
Interrupt masking
 Non-maskable interrupt (NMI)

Interrupt sensitivity
 Level-sensitive
 Edge-sensitive
Interrupt Concepts
Supporting multiple interrupt sources


Polled interrupts
Vectored interrupts
 Fixed ISR locations
 Vector table implementations

Generic implementation
Prioritization Schemes



Fixed
Rotating
Hierarchical
Software interrupts and exceptions
ARM7TDMI Interrupt Handling
Interrupt modes

IRQ
 Banks R13, R14, SPSR

FIQ
 Banks R8-R12, R13, R14, SPSR

SWI (software interrupt) discussed later
Interrupt control
 CPSR I/F flags
Interrupt processing sequence
Interrupt nesting
ADuC7026 Hardware Interrupts
Interrupt sources



Internal peripherals
External IRQ pins
Programmed interrupts
Interrupt sources can
be individually
programmed to
generate either FIQ or
IRQ mode entry.

No prioritization of
individual sources at a
given level (FIQ/IRQ)
ADuC7026 Interrupt MMRs
These MMRs are used to control the interrupt
handling

IRQSIG, FIQSIG
 Ones indicate that the source has an interrupt pending

IRQEN, FIQEN
 Ones indicate that the interrupt request from the source is
unmasked (i.e. the interrupt source is enabled)

IRQSTA, FIQSTA
 Ones indicate that the sources have an interrupt enabled and
pending
 Used in ISR to determine which device(s) need(s) service

IRQCLR, FIQCLR
 Write ones to clear the corresponding bit in IRQEN, FIQEN
(i.e. to mask an interrupt source)
 This is NOT how you clear an interrupt request in the ISR!
ADuC7026 Programmed Interrupts
The programmed interrupt feature allows us to
programmatically force an entry into FIQ mode
or IRQ mode


Write to SWICFG register, do not need to have
programmed interrupt enabled in IRQEN/FIQEN
Note that the use of “SWI” has absolutely nothing to
do with the ARM7 SWI instruction and supervisor
mode
Interrupt Service Routines
ISR prerequisites

aduc7026.s
ISR implementation






Context save
Clear IRQ from interrupt source
Allow nesting (if desired)
Handle interrupt
Context restore
Return from interrupt/exception
Interrupt Checklist on course web page
Shared subroutines and resources
Interrupt Driven Systems
Foreground vs. background tasks.
Events determine the actual order of execution.
Initialization
ISRa
Main Program
Loop
ISRb
ISRc
Software Interrupts & Exceptions
SWI instruction
Exceptions

ARM7TDMI exceptions
 Prefetch abort
 Data abort
 Undefined instruction
 Reset

Other common exceptions
 Divide error
 Single-step
 Breakpoint
Interrupt Prioritization and Latency
Handling multiple simultaneous interrupts
and exceptions


ARM7TDMI exception priorities
Interrupt prioritization schemes
 Fixed
 Rotating
 Tiered (hierarchical)
Interrupt Latency


Definition
ADuC7026 latency specifics
Interrupt Issues
Using periodic interrupts to perform
iterative tasks
What to do when good interrupts go
bad…




Software debugging
Hardware debugging
Real-time issues
Inter-process communication (IPC) issues
In-Class Assessment Quiz
What sort of safeguards might you need to
design into NMI hardware?
For the ARM7TDMI, describe what
happens between an IRQ being asserted
and the actual execution of the ISR.
What are the differences between vectored
interrupts and polled interrupts?
In-Class Assessment Quiz
What is a ‘level-sensitive’ interrupt?
What problems could arise when using a
semaphore to control access to a resource
used by the main program and an ISR?
What ARM7TDMI instruction(s) help
handle this issue?
Draw a flowchart for a periodic (1 KHz)
ISR that will be used to generate precise
millisecond delays. Only a single word
variable is to be used to communicate with
the ISR.
Wrapping Up
Homework #6 due Wednesday, 4/25.
Reading for next week


Textbook 15
Supplement #5 (Learn@UW)
ARM7 CPSR
Current Process Status Register (CPSR)



Condition code flags (N, Z, C, V)
Interrupt disable bits (I, F)
Thumb mode enable (T)
 Never change directly!

Mode select
 These bits cannot be changed in User mode
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10
NZCV
reserved
9
8
7
6
5
4
3
2
1
I F T mode
0
ARM7 SPSR
Suspended Process Status Register (SPSR)

SPSR is only present when the CPU is
operating in one of the exception modes
 Each exception mode has its own SPSR, since
exception handlers may cause other exceptions.

SPSR is a copy of the CPSR immediately before
the exception mode was entered.
 When returning from the exception, the value in
SPSR is used to restore the CPSR to the proper
state for the process that was interrupted.
ARM7 Register Banking
User Mode
Privileged Modes
Exception Modes
User
System
Supervisor
Abort
Undefined
IRQ
FIQ
R0-R7
R0-R7
R0-R7
R0-R7
R0-R7
R0-R7
R0-R7
R8-R12
R8-R12
R8-R12
R8-R12
R8-R12
R8-R12
R8-R12
R13-R14 R13-R14 R13-R14 R13-R14 R13-R14 R13-R14 R13-R14
PC
PC
PC
PC
PC
PC
PC
CPSR
CPSR
CPSR
CPSR
CPSR
CPSR
CPSR
SPSR
SPSR
SPSR
SPSR
SPSR
Interrupt Example - Hardware
aduc7026.s
AREA
Reset, CODE, READONLY
ARM
; Exception Vectors mapped to Address 0.
; Absolute addressing mode must be used.
Vectors
LDR
PC, Reset_Addr
LDR
PC, Undef_Addr
LDR
PC, SWI_Addr
LDR
PC, PAbt_Addr
LDR
PC, DAbt_Addr
NOP
;
Reserved Vector
LDR
PC, IRQ_Addr
LDR
PC, FIQ_Addr
Reset_Addr
Undef_Addr
SWI_Addr
PAbt_Addr
DAbt_Addr
IRQ_Addr
FIQ_Addr
DCD
DCD
DCD
DCD
DCD
DCD
DCD
Reset_Handler
Undef_Handler
SWI_Handler
PAbt_Handler
DAbt_Handler
IRQ_Handler
FIQ_Handler
Reset_Handler
;setup PLL and power control
LDR
R1, =PLL_MMR_BASE
aduc7026.s
LDR
R0, =Stack_Top
; Enter Undefined Instruction Mode and set its Stack Pointer
MSR
CPSR_c, #Mode_UND:OR:I_Bit:OR:F_Bit
MOV
SP, R0
SUB
R0, R0, #UND_Stack_Size
...
; Enter FIQ Mode and set its Stack Pointer
MSR
CPSR_c, #Mode_FIQ:OR:I_Bit:OR:F_Bit
MOV
SP, R0
SUB
R0, R0, #FIQ_Stack_Size
; Enter IRQ Mode and set its Stack Pointer
MSR
CPSR_c, #Mode_IRQ:OR:I_Bit:OR:F_Bit
MOV
SP, R0
SUB
R0, R0, #IRQ_Stack_Size
; Enter Supervisor Mode and set its Stack Pointer
MSR
CPSR_c, #Mode_SVC:OR:I_Bit:OR:F_Bit
MOV
SP, R0
SUB
R0, R0, #SVC_Stack_Size
; Enter User Mode and set its Stack Pointer
MSR
CPSR_c, #Mode_USR
MOV
SP, R0
SUB
SL, SP, #USR_Stack_Size
; jump to user code
B
__main
ADuC7026
Interrupt Latency
ADuC7026
Exception Priority
Download