0% found this document useful (0 votes)
93 views34 pages

09 Timers

The document discusses timers and interrupts in embedded systems. It describes how timers work using oscillators and counters. It also explains the difference between interrupt-driven and polled I/O, with interrupts allowing devices to request service without the CPU continuously checking. The document provides examples of setting up and using timers on the X-Board.

Uploaded by

api-3726520
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
93 views34 pages

09 Timers

The document discusses timers and interrupts in embedded systems. It describes how timers work using oscillators and counters. It also explains the difference between interrupt-driven and polled I/O, with interrupts allowing devices to request service without the CPU continuously checking. The document provides examples of setting up and using timers on the X-Board.

Uploaded by

api-3726520
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 34

Timers and Interrupts

Lecture 9

Introduction to Embedded Systems


Summary of Previous Lecture
• The lab 80200 Big-Endian Evaluation Board
– 80200 Intel Xscale® processor
– Xilinx FPGA
– PCI

• The X-Board and accessories


– Seven-segment LED, Serial ports

• Preparing you for Lab 2


Flash memory
Serial ports

Introduction to Embedded Systems


Administrivia
• Lab 2 is out on the street
• Lab 2 – Individual (and not a group) project

Introduction to Embedded Systems


Outline of This Lecture
• Timers
• Interrupt vs. polled I/O
– Examples
• IRQ and FIQ

Detours signify material outside of, but indirect/direct


background/review material for, the main lecture

Introduction to Embedded Systems


Questions on X-Board
• What kind of power supply (wattage) are we using?
– We are using the standard ATX PC power supply
– Maximum of 300 W
– The voltages required by the board are 3.3V or 5V (if the PCI card
is connected)
– The ATX can supply 3.3/5/12 V (the original adaptor could supply
only 3.3V)

Introduction to Embedded Systems


Quote of the Day

The penalty of success is to


be bored by the people
who used to snub you.
– Lady Astor

Introduction to Embedded Systems


Introduction to Embedded Systems
How Oscillators Work
• Some form of energy needs to move back and forth
• Capacitor stores energy in an electrostatic form
• Inductor stores energy in a magnetic form
• Oscillation cycle
1. Capacitor starts off charged
2. Capacitor discharges through inductor, creating a magnetic field
3. Inductor tries to keep current moving and charges other plate of
capacitor
4. Inductor field collapses, but capacitor charged in opposite polarity
5. Capacitor re-starts the cycle
• Question: When does this stop?

• Timer = oscillator + counter

Introduction to Embedded Systems


X-Board System Clocks
• Two oscillators
– 50 MHz and 66.6 MHz
– Connected to FPGA
• All clocks are derived from these sources
– 80200 Processor
• Multiplies 66.6 MHz clock by 6 at power-up (~ 400 MHz)
• Firmware multiplies this by an integer ranging from
5 (~333 MHz) to 11 (~733 MHz)
– Memory
• Multiplies the 50 MHz clock by 2 (~100 MHz)
– PCI and Serial Ports
• Divides the 50 MHz clock by 1.5 (~33.3 MHz)
– Ethernet
• Divides the 50 MHz clock by 2 (~25 MHz)

Introduction to Embedded Systems


X-Board System Clocks

Introduction to Embedded Systems


What is a Timer?
• A device that uses high-speed clock input to provide a series of time or
count-related events

Counter Register
System Clock 0x1206
Reload
on Zero
÷ 000000
Clock Divider Countdown Register

Interrupt to
I/O Control
Processor

Introduction to Embedded Systems


X-Board Timers
• The X-Board has two timers
• Timer A and Timer B
• These timers can interrupt the 80200 processor
– Interrupt will be held active until cleared by the 80200
• 32-bit timers
• 33.3MHz peripheral bus clock is the time base
• 128 seconds maximum timing interval
• Each timer consists of
– A down counter which reloads itself when it hits underflow
• Can be programmed for one-shot operation
– Disables itself when it hits zero

Introduction to Embedded Systems


What Kinds of Timers Exist?
• What is a timeout?

• Pause Function
– Suspends task for a specified amount of time
• One-shot timer
– Single one-time-only timeout
• Periodic timer
– Multiple renewable timeouts
• Time-slicing
– Chunks of time to each task
• Watchdog timer

Introduction to Embedded Systems


X-Board Timer Status/Control Registers
• Timer Status/Control Register
– One for each of the two timers
– To control the features of the timer

Introduction to Embedded Systems


X-Board Timer Preload Registers

Introduction to Embedded Systems


X-Board Timer Current Value

Introduction to Embedded Systems


Which Timers to Use for Lab 2?
• We use all the 3 registers
• Status-control register
– Used for control operations
– Enable/disable, clearing interrupts, etc.
• Preload register
– Generally set to the highest possible value to get the longest possible
time
• Current value register
– Contains the current value while the timer is enabled.
• There is some sample "timer" code in the appendix of the
Lab2 handout.

Introduction to Embedded Systems


Inside the Timer

High Byte Low Byte


Counter Register
at offsets 0x04, 0x00 (write only)

GO Register
offset 0x08, immediately moves
Counter Reg value into Current Counter

Current Counter
(not directly readable by software)

Latch Register
offset 0x0C, write a ``1'' to immediately write
Current Counter value to readable Latch Reg

Latched Counter
at offsets 0x04, 0x00 (read only)

Introduction to Embedded Systems


Structs for the Timer
• In ANSI C, structs are laid out in RAM in ascending order
– Example for the timer
#define TIMER0 0x10200040
#define TIMER1 0x10200050
volatile struct timer_s {
unsigned char countLow;
unsigned char space1[3];
unsigned char countHigh;
unsigned char space2[3];
unsigned char go;
unsigned char space3[3];
unsigned char latch;
unsignec char space4[3];
};
typedef timer_s *timer_p;
timer_p timer;

timer = (timer_p) TIMER1;

Introduction to Embedded Systems


Setting the Timer's Counter Registers
• Counter is usually programmed to reach zero X times per second
– To program the timer to reach zero 100 times per second
– Example: For a 2 MHz-based timer, 2MHz / 100 = 20,000

#define TIMER1 0x10200050


int time;

time = 2000000 / 100;


timer = (timer_p) TIMER1;
timer­>countLow = (unsigned char) (time & 0xff);
timer­>countHigh = (unsigned char) ((time > 8) & 0xff);
timer­>go = (unsigned char) 0x1;

Introduction to Embedded Systems


Reading the Timer's Current Value

• Must first dump the current value so that it can be read


– Why?
#define TIMER1 0x10200050

int time;
timer = (timer_p) TIMER1;
timer­>latch = (unsigned char) 1;
time = (unsigned int) timer­>countLow;
time = time | (unsigned int) (timer­>countHigh << 8);
• How do we know when the timer has reached zero?
while (1){
timer­>latch = (unsigned char) 1;
time = (unsigned int) timer­>countLow;
time = time | (unsigned int) (timer­>countHigh <<
8);
}

Introduction to Embedded Systems


Interrupt vs. Polled I/O
• Polled I/O requires the CPU to ask a device (e.g. toggle switches)
if the device requires servicing
– For example, if the toggle switches have changed position
– Software plans for polling the devices and is written to know when a
device will be serviced
• Interrupt I/O allows the device to interrupt the processor,
announcing that the device requires attention
– This allows the CPU to ignore devices unless they request servicing (via
interrupts)
– Software cannot plan for an interrupt because interrupts can happen at any
time -- therefore, software has no idea when an interrupt will occur
– This makes it more difficult to write code
• Processors can be programmed to ignore interrupts
– We call this masking of interrupts
– Different types of interrupts can be masked (IRQ vs. FIQ)

Introduction to Embedded Systems


X-Board Interrupt Controller

Introduction to Embedded Systems


Polling Example
• Polling the switches

#define SWITCH_BASE 0x18200000


int main(int argc, char * argv[])
{
volatile unsigned int *switchBank = (unsigned int *)
SWITCH_BASE;
unsigned int tmpSwitchState;
unsigned int prevSwitchState;
/* get the current state of the switches */
prevSwitchState = *switchBank & 0xff;
while (1) {
/* loop until a switch is pressed */
while (prevSwitchState ==
(tmpSwitchState = (*switchBank & 0xff))) {};
}
} /* end main() */

Introduction to Embedded Systems


Polling vs. Interrupt-Driven I/O
• Polling requires code to loop until device is ready
– Consumes lots of CPU cycles
– Can provide quick response (guaranteed delay)
• Interrupts don't require code to loop until the device is ready
– Device interrupts processor when it needs attention
– Code can go off and do other things
– Interrupts can happen at any time
• Requires careful coding to make sure other programs (or your
own) don't get messed up

Introduction to Embedded Systems


Polling the Serial Port - I
// Function to read from the serial keypad
unsigned char* my_gets(void)
{
unsigned char* char_ptr;
volatile unsigned char* UART_ptr;
unsigned int i;
static unsigned char char_buffer[116];
char_ptr = char_buffer;

*(volatile unsigned char*)UART2_FIFO_CNTRL = 0x06; // Clear FIFO


*char_ptr = *(volatile unsigned char*)UART2_RX_REG; // Empty any trash in the
RX

for(i=0; i<sizeof(char_buffer); i++) {


char_buffer[i] = (unsigned char)NULL;
}

UART_ptr = (volatile unsigned char*)UART2_LINE_STAT;

Introduction to Embedded Systems


Polling the Serial Port - II
// Keep looking at characters until '\r'
while(1){

// Wait for Rx character forever


while ((*UART_ptr & 0x01) == 0) {
;
}

*char_ptr = *(volatile unsigned char*)UART2_RX_REG; // Read the


character

if(*char_ptr != BACKSPACE) {
printf("%d",*char_ptr&0xffff); // Echo char back
if ((*char_ptr&0xffff) == 125)
sendchar("v");
}

Introduction to Embedded Systems


Polling the Serial Port - III
// Exit the 'while' when we see '\r' or the buffer fills
if((*char_ptr == '\r') || (char_ptr == &char_buffer[sizeof(char_buffer)-1]))
break;

// If Backspace, backup char_ptr so next char will overwrite bad input


if(*char_ptr == BACKSPACE){

if(char_ptr > char_buffer){


// If at least 1 character, backup cursor, delete character on screen, backup cursor
char_ptr--; // delete char from buffer
}

} else {
char_ptr++;
}
}

*char_ptr = '\000'; // Terminate the string


return(char_buffer);
}

Introduction to Embedded Systems


Windows NT Interrupt Architecture
• When a device raises an interrupt, the interrupt-controller
automatically masks all interrupts of lower priority
• IRQL (Interrupt Request Level)
– Level of interrupt that the CPU is currently masking
• HAL (Hardware Abstraction Layer)
– Maps interrupt-controller’s interrupt levels onto hardware interrupts
– IRQL Table
• ISR (Interrupt Service Routine)
– Interrupt handlers registered with the interrupt-controller
• Spinlock
– Synchronization primitive to prevent simultaneous ISR execution on
multiple processors
• DPC (Deferred procedure call)
– ISR indicates that it can do work at a lower priority level

Introduction to Embedded Systems


Windows NT Interrupt Architecture

Introduction to Embedded Systems


Interrupts and the Blue Screen of Death?

• Two kinds of ISRs: Default system ISRs and user-registered ISRs


• Unregistered interrupts made to point at ISRs that indicate that an illegal
system interrupt has been generated
• Illegal system interrupts often lead to the Blue Screen of Death

Introduction to Embedded Systems


IRQ and FIQ
• Program Status Register
31 30 29 28 27 … 8 7 6 5 4 3 2 1 0
N Z C V I F M4 M3 M2 M1 M0
– To disable interrupts, set the corresponding “F” or “I” bit to 1
• On interrupt, processor switches to FIQ32_mode registers or
IRQ32_mode registers
– On any interrupt (or SWI Trap)
• Switch register banks
• Copy PC and CPSR to R14 and SPSR
• Change new CPSR mode bits

Introduction to Embedded Systems


Interrupt Example

Data Bus
ARM 7500
Address Bus 8-bit register
Vcc
Processor
A0
A2
D7
A4
A6 D6
31 30 29 28 27 … 8 7 6 5 4 3 2 1 0
A8
N Z C V I F M4 M3 M2 M1 M0 A10 D5
A12
A14 D4
A16
A18 D3
A20
A22 D2
A24
A26
A28
D1
A30
D0

Introduction to Embedded Systems


Summary of Lecture
• Timers
– What is a timer?
– A peek inside the timers
– C structs for the timer
– Using the timer
• Interrupt vs. polled I/O
– polling example
– interrupt example
• IRQ and FIQ

Introduction to Embedded Systems

You might also like