Interrupts - PowerPoint PPT Presentation

About This Presentation
Title:

Interrupts

Description:

A key may be pressed. A clock tic occurs. Alternative- Polling ... Polling makes it hard to get the computer to do any useful work. Idea of interrupts ... – PowerPoint PPT presentation

Number of Views:39
Avg rating:3.0/5.0
Slides: 23
Provided by: paulcoc
Category:

less

Transcript and Presenter's Notes

Title: Interrupts


1
Interrupts
  • How to do 2 things at the same time

2
Need for interrupts
  • Computers often have to deal with asynchronous
    events.
  • That is to say events that occur times that are
    unpredictable relative to the rest of your
    program.
  • Whilst a computer is busy running a program
    something unexpected may occur
  • A packet may arrive on a communications line
  • A key may be pressed
  • A clock tic occurs

3
Alternative- Polling
  • One alternative is to have your program running a
    loop checking for input/output events. This is
    called Polling.
  • It is what all the examples so far have done.
  • Polling wastes processor resources checking for
    events that rarely happen
  • Polling makes it hard to get the computer to do
    any useful work.

4
Idea of interrupts
  • Main program
  • repeat
  • Do this
  • Do that
  • Try something else
  • For ages
  • Interrupt handler
  • Key pressed
  • read input port
  • store result
  • return

press
5
  • Interrupts occur between two instructions.
  • Control is transferred by the hardware to an
    interrupt location.
  • The interrupt routine does its stuff
  • It then returns to the following instruction in
    the main program.

6
  • An interrupt is a procedure called by the
    hardware of the computer rather than by your
    program.

7
Interrupt control registers
8
Intcon
FLAGS
ENABLES
global interupt enable
INT pin interrupt TMR0 overflow interrupt
INT pin interrupt TMR0 overflow interrupt
9
what happens
  • When an interrupt is serviced
  • The GIE is cleared to disable any further
    interrupt
  • The return address is pushed onto the stack
  • The PC is loaded with 0004h
  • Once in the Interrupt Service Routine, the
    source(s) of
  • the interrupt can be determined by polling the
    interrupt
  • flag bits. The interrupt flag bit(s) must be
    cleared in
  • software before re-enabling interrupts to avoid
    GP2/
  • INT recursive interrupts.

10
Interrupts on the PIC
  • Context Saving During Interrupts
  • During an interrupt, only the return PC value is
    saved
  • on the stack. Typically, users may wish to save
    key
  • registers during an interrupt, e.g., W register
    and
  • STATUS register. This must be implemented in
  • software.

11
timing of interrupt
12
Vectors
memory
  • Reset vector, where we start on powerup
  • Interrupt vector where we go on an interrupt

Goto main
0 1 2 3 4
Goto isr
13
Sample start of program
  • ORG 0x000 processor reset
    vector
  • goto Init go to beginning of
    program
  • ORG 0x004 Interrupt vector
    location
  • goto isr go to interrupt
    routine

14
Save context
  • Registers that are used by the interrupt routine
    must always be saved. Program counter saved
    automatically but there are some you must save
  • W reg
  • STATUS reg 3
  • PCLATH reg 10
  • FSR reg 4

15
Save registers
  • Isr
  • Interrupt Vector - Interrupt Sources Used 1.
    TIMER0 Overflow
  • 2.
    GP3 Pin-Change
  • movwf WTEMP Save current W register
  • movf STATUS,w
  • clrf STATUS Force to page0
  • movwf STATUSTEMP Save STATUS in STATUSTEMP
  • movf PCLATH,w
  • movwf PCLATHTEMP Save PCLATH
  • movf FSR,w
  • movwf FSRTEMP Save FSR
  • BANK1 select bank 1

16
Determine source
  • We next need to inspect the interrupt flags to
    see what device caused the interrupt
  • TOIF Timer Overflow Interrupt Flag bit 2 of
    INTCON
  • GPIF Gpio interrupt flag bit 0 of intcon

17
Check what is enabled
  • We only need to test these flags if they are
    enabled.
  • This means we must first check the relevant
    interrupt enable bits

18
Interrupt Source Checks


  • Timer0InterruptCheck
  • btfss INTCON,TOIE Is T0IE Set?
  • goto Next1 No
  • Yes
  • btfsc INTCON,TOIF Is TOIF Set?
  • goto Timer0Interrupt Yes
  • Next1
  • GPIFInterruptCheck
  • btfss INTCON,GPIE Is GPIE Set?
  • goto Next2 No
  • btfsc INTCON,GPIF Yes
  • Is GPIF Set?
  • goto GPIFInterrupt Yes

19
Interrupt Source Code
  • Timer0Interrupt
  • call Display Update LED Array
  • bcf INTCON,T0IF Clear TMR0 Interrupt Flag
  • this prevents interrupt
  • from occuring again
  • spuriously
  • goto EndIsr

20
Restore old registers
  • Finally we must restore any saved registers
  • There is a particular problem with this because
    of the fact that our saving code may change the
    flags in the status register
  • This requires care to get round

21
Cleanup code
  • EndIsr
  • clrf STATUS Select Bank0
  • movf FSRTEMP,w
  • movwf FSR Restore FSR
  • movf PCLATHTEMP,w
  • movwf PCLATH Restore PCLATH
  • movf STATUSTEMP,w
  • movwf STATUS Restore STATUS
  • swapf WTEMP,f
  • swapf WTEMP,w Restore W without
    corrupting STATUS bits
  • retfie Return from interrupt

22
Swapf
  • This is defined to do the following
  • SWAPF f,d Swap halves f
  • f(03)lt-gtf(47)-gtd
  • It does not alter the z flag of the status
    register
  • swapf WTEMP,f swap halves of wtemp
  • swapf WTEMP,w swap again and store in W
  • Net result is that W contains original form of
    wtemp
Write a Comment
User Comments (0)
About PowerShow.com