ECE 2560 - Lecture 19 Interrupts

Transcription

ECE 2560 - Lecture 19 Interrupts
ECE 2560
L17 – Interrupts
Department of Electrical and
Computer Engineering
The Ohio State University
ECE 2560
1
Interrupts
What happens during interrupts
 How to set them up
 An important register – the flags register

ECE 2560
2
Microcontroller interrupts

An example – Zilog Z8051


An early micro controller
On many early microcontrollers physical pins
were the interrupt pins



IRQ – Maskable interrupt pin
FIRQ – Fast Interrupt
On these chips there is a flag in the status
register (SR) that enables interrupts or
disables interrupt.
ECE 2560
3
The MSP430 Interrupts

The status register

GIE- General Interrupt
Enable
 Interrupts can be
generated on most
external pins – any digital
I/O
 Interrupts also generated
by internal devices like the
timers.
ECE 2560
4
Steps need to use interrupts

For a port
Configure the pin
 Set the GIE bit in SR to allow interrupts.
 Instruction


The 430’s General Interrupt can be set using


EINT
Enable (general) Interrupts
The 430’s GIE bit can be cleared using

DINT
Disable (general) Interrupts
ECE 2560
5
Interrupts on I/O pins


Setting up the port
The I/O registers





P1SEL,P1IN, P1OUT, P1DIR, P1IE,P1IES
P1IFG – Port 1 Interrupt flag register
each bit of the register is the flag for that pin
a r/w register – bit is set when pin is an input
and proper transition occurs – bit must be
cleared using software instruction.
A program can be written that checks this
flag.
ECE 2560
6
Polling the interrupt flag



Port 1 and 2 are set up for interrupts
Each have a PxIFG register
Setting Up the port







mov.b#0x00,P1SEL ;i/o
mov.b#0xF7,P1DIR ;P1.3 input
mov.b#0x08,P1IE ;P1.3 int set
mov.b#0x08,P1IES ;falling ed
bis.b
#0x08,P1REN ;resistor
mov.b#0x08,P1OUT ;pullup
NOW can demo flag being set
ECE 2560
7
Reading flag
Can read the flags register, P1IFG
 Once set up, when the button is pressed,
the flag is set to 1
 Flag stays 1 until cleared.


Demo of iflg.asm to see this in action
ECE 2560
8
Using a port flag
Can create a program to poll the switch
flag and take action when it is pressed.
 The action


Change the state of which led is on when
pressed. Start out with P1.0 on.
ECE 2560
9

Set up port – previous

;turn on a light

bis.b
#0x01,P1OUT

;set up loop to alternate which led is on

mov.b
P1OUT,R4

bw
bit.b
#0x08,P1IFG

jz
bw

bit.b
#0x01,P1OUT ;led 0 on?

jz
not0

;led 6 is on – 0 on 6 off

bic.b
#0x01,P1OUT

bis.b
#0x40,P1OUT

clr
P1iFG

jmp
bw
;back to busy wait

;led 0 is on – 6 on 0 off

not0
bis.b
#0x01,P1OUT

bic.b
#0x01,P1OUT

clr
P1IFG

jmp
bw
ECE 2560
10
Polling the Flag

What is the downside of polling?
Have to busy wait of periodically check flag.
 To service immediately loose ability to use
the microcontroller for anything else
 If no continually checking do not have
immediate service.

ECE 2560
11
Interrupt vector


A small area of memory that hold the
address to load into the PC when an
interrupt occurs – several locations – called
the Interrupt Vector Table
On the MSP 430






Reset,external hard reset
NMI, osc fault
Watchdog Timer+
Timer A1_A3 (CCIFG)
I/O Port 2
I/O Port 1
ECE 2560
FFFEh
FFFCh
(int10)
FFF4h
(int13)
(int03)
FFE4h
(int02)
FFE2h
12
Interrupt service routine

The top two elements on the stack are
the saved SR and the return address.

Return is the next instruction in the program
that was interrupted.
ISR does not want to disturb the state of
the program that was interrupted so any
register to be used should be saved on
the stack (and restored)
 At end of ISR an RETI is executed.

ECE 2560
13

Interrupt action
ECE 2560
14
Demo program

Set up port 1










mov.b
mov.b
mov.b
bis.b
bis.b
bis.b
bis.b
clr.b
bis.b
#0x00,P1SEL ;I/O for all
#0xF7,P1DIR ;P1.3 in
#0x00,P1OUT ;all 0’s
#0x08,P1IE
;sw enable int
#0x08,P1ES
;falling edge
#0x08,P1REN ;res enable
#0x08,P1OUT ;pullup
P1IFG
;clear flags
#0x08,SR
;enable int
;or could use EINT instruction
ECE 2560
15
To use interrupts?
Can use interrupts but the IFG flag must
be cleared in the port flag register.
 To actually use an interrupt service
routine the bit must be cleared while
program is waiting for interrupt.
 One of the actions of the service routine
is to clear the flag prior to return.
 Note that this is at the port level.

ECE 2560
16
What happens during?

When an interrupt occurs
The current instruction completes execution
 The PC value is pushed onto the stack
 The SR value is pushed onto the stack
 The PC is loaded with the contents of the
word stored at what is call an interrupt
vector.
 Execution continues in what is termed an
interrupt service routine, ISR.

ECE 2560
17
Summary - Assignment
Try out the code – There is code on the
webpage – intdemo.asm intdemo2.asm
intdemo3.asm
 Try modifications to the code.
 No new assignment.


Quiz when we come back on Dec 1st.
ECE 2560
18