MIPS I/O and Interrupt. .data val1:.float 0.6 val2:.float 0.8 msg_done:.asciiz "done\n".text.globl main main: li.s $f0, 361.0 mfc1 $a0, $f0 jal calsqrt.

Slides:



Advertisements
Similar presentations
Branches Two branch instructions:
Advertisements

Memory Mapped I/O. What is Memory Mapped I/O? Instead of having special methods for accessing the values to be read or written, just get them from memory.
1 Procedure Calls, Linking & Launching Applications Lecture 15 Digital Design and Computer Architecture Harris & Harris Morgan Kaufmann / Elsevier, 2007.
SPIM and MIPS programming
Some Samples of MIPS Assembly Language Lecture for CPSC 5155 Edward Bosworth, Ph.D. Computer Science Department Columbus State University.
MIPS Function Continued
Input and Output CS 215 Lecture #20.
Assembly Language Working with the CPU.
1 COMS 361 Computer Organization Title: Instructions Date: 9/28/2004 Lecture Number: 10.
Writing an Embedded Controller. It usually consists of two parts – Initialization – A main loop Experience: – The main loop usually has to deal with many.
Lecture 8: MIPS Instruction Set
1/1/ / faculty of Electrical Engineering eindhoven university of technology Architectures of Digital Information Systems Part 1: Interrupts and DMA dr.ir.
A look at interrupts What are interrupts and why are they needed.
1/1/ / faculty of Electrical Engineering eindhoven university of technology Introduction Part 3: Input/output and co-processors dr.ir. A.C. Verschueren.
MIPS Coding. Exercise – the bubble sort 5/8/2015week04-3.ppt2.
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.
A look at interrupts What are interrupts and why are they needed.
Data Transfer & Decisions I (1) Fall 2005 Lecture 3: MIPS Assembly language Decisions I.
MIPS Instruction Set Advantages
What are Exception and Interrupts? MIPS terminology Exception: any unexpected change in the internal control flow – Invoking an operating system service.
Writing an Embedded Controller. It usually consists of two parts – Initialization – A main loop More challenging than HW3 because HW3 is stateless, the.
MIPS I/O and Interrupt. SPIM I/O and MIPS Interrupts The materials of this lecture can be found in A7-A8 (3 rd Edition) and B7-B8 (4 th Edition).
COMP201 Computer Systems Exceptions and Interrupts.
Input and Output Computer Organization and Assembly Language: Module 9.
Writing an Embedded Controller. It usually consists of two parts – Initialization – A main loop More challenging than HW3 because HW3 is stateless, the.
Operating Systems ECE344 Ashvin Goel ECE University of Toronto OS-Related Hardware.
MIPS function continued. Recursive functions So far, we have seen how to write – A simple function – A simple function that have to use the stack to save.
In Class Execise. .data A:.word 0,1,2,3,4,5,6,7,8,9.text.globl main main: la $a0,A li $a1,6 li $a2,5 jal onUpStream done: li $v0, 10# exit syscall onUpStream:
April 23, 2001Systems Architecture I1 Systems Architecture I (CS ) Lecture 9: Assemblers, Linkers, and Loaders * Jeremy R. Johnson Mon. April 23,
13-Nov-15 (1) CSC Computer Organization Lecture 7: Input/Output Organization.
Ch2b- 2 EE/CS/CPE Computer Organization  Seattle Pacific University Thanks for all the Memory! When 32 registers just won’t do. Many times (almost.
Interrupt driven I/O. MIPS RISC Exception Mechanism The processor operates in The processor operates in user mode user mode kernel mode kernel mode Access.
MIPS coding. Review Shifting – Shift Left Logical (sll) – Shift Right Logical (srl) – Moves all of the bits to the left/right and fills in gap with 0’s.
MIPS I/O and Interrupt.
HW4. A TV controller Let’s use this lecture to start to develop a simple TV controller together.
MIPS mul div, and MIPS floating point instructions.
Exceptions and Interrputs CS 321 – Introduction to Computer Architecture and Machine-Level Programming Barry Britt, Systems Analyst II Department of Computer.
MIPS coding. slt, slti slt $t3, $t1, $t2 – set $t3 to be 1 if $t1 < $t2 ; else clear $t3 to be 0. – “Set Less Than.” slti $t3, $t1, 100 – set $t3 to be.
Interrupt driven I/O Computer Organization and Assembly Language: Module 12.
Pseudo instructions. MIPS supports pseudo instructions. We have seen some like – li $t0, 4 which set $t0 to 4. – la $t0, A which puts the address of label.
Addressing Modes. Register Addressing Immediate Addressing Base Addressing Indexed Addressing PC-Relative Addressing.
Indexed Addressing addition to implementing new instructions, the extended assembler implements a new addressing mode. This is indexed addressing, a mode.
MISP Exception Facility Supported by SPIM simulator.
Interrupts and Exception Handling. Execution We are quite aware of the Fetch, Execute process of the control unit of the CPU –Fetch and instruction as.
Exceptions and Interrupts ◆ Breakpoints, arithmetic overflow, traps, and interrupts are all classified as exceptions. ◆ An exception is an event that requires.
Architectures of Digital Information Systems Part 1: Interrupts and DMA dr.ir. A.C. Verschueren Eindhoven University of Technology Section of Digital.
Computer Organization CS224
MIPS Instruction Set Advantages
Basic Processor Structure/design
Writing an Embedded Controller
MIPS I/O and Interrupt.
Timer and Interrupts.
MIPS floating point instructions
RISC Concepts, MIPS ISA Logic Design Tutorial 8.
Pseudo instructions.
MIPS I/O and Interrupt.
MIPS I/O and Interrupt.
SPIM Syscalls.
MIPS coding.
Pseudo instructions.
BIC 10503: COMPUTER ARCHITECTURE
Review.
MIPS function continued
Interrupts and Exception Handling
MIPS I/O and Interrupt.
Writing an Embedded Controller
CS61C - Machine Structures Lecture 14 - Input/Output
Interrupts and Exception Handling
MIPS function continued
Conditional Control Structure
Presentation transcript:

MIPS I/O and Interrupt

.data val1:.float 0.6 val2:.float 0.8 msg_done:.asciiz "done\n".text.globl main main: li.s $f0, mfc1 $a0, $f0 jal calsqrt done: mtc1 $v0, $f12 li $v0,2 syscall eixt: li $v0,10 syscall # calsqrt: # calculating the square root of n # using the formular x'=(x+n/x)/2 # loop until |x'-x| < calsqrt: addi $sp, $sp, -24 swc1 $f0, 20($sp) swc1 $f1, 16($sp) swc1 $f2, 12($sp) swc1 $f3, 8($sp) swc1 $f20, 4($sp) swc1 $f21, 0($sp) mtc1 $a0, $f0 # $f0 gets n li.s $f20, 2.0 # $f20 storing constant 2 for dividing li.s $f21, # $f21 storing constant for exit comparision div.s $f1, $f0, $f20 # $f1 gets n/2 calsqrtloop: div.s $f2, $f0, $f1 # $f2 gets n/x add.s $f2, $f2, $f1 # $f2 gets n/x + x div.s $f2, $f2, $f20 # $f2 gets x'=(n/x + x)/2 sub.s $f3, $f2, $f1 # $f3 gets x'-x abs.s $f3, $f3 # $f3 gets |x'-x| c.lt.s $f3, $f21 # set the flag if |x'-x| < bc1t calsqrtdone mov.s $f1, $f2 j calsqrtloop calsqrtdone: mfc1 $v0, $f2 lwc1 $f0, 20($sp) lwc1 $f1, 16($sp) lwc1 $f2, 12($sp) lwc1 $f3, 8($sp) lwc1 $f20, 4($sp) lwc1 $f21, 0($sp) addi $sp, $sp, 24 jr $ra You can copy and paste to get the program cause the font is small

Pseudo instructions MIPS supports pseudo instructions. We have seen some like – li $t0, 4 which set $t0 to 4. – la $t0, A which puts the address of label A (a 32-bit value) into $t0. – bgt $t0, $t1, L1 which goes to L1 if $t0 > $t1

Pseudo instructions Pseudo instructions are not real instructions implemented in hardware. They are created to make the program more readable. A pseudo instruction usually (not always) maps to several real instructions. The mapping is one-to-one.

Pseudo instructions For example, li $t0, 4 translate to ori $t0, $0, 4 but what should li $t0, translate to?

Pseudo instructions So li $t0, translates to lui $1, 1#load upper 16 bits ori $t0, $1, The special register $1 is $at and should only be used for pseudo instructions.

Pseudo instructions How to translate `` bgt $t0, $t1, L1’’ ? How to translate `` lw $t0, val’’ ?

SPIM I/O and MIPS Interrupts The materials of this lecture can be found in A7-A8 (3 rd Edition) and B7-B8 (4 th Edition).

The MIPS memory Actually, everything above 0x7fffffff is used by the system.

What is in there? Special operating system functions I/O registers mapped to memory addresses Kernel data …

SPIM Input SPIM allows you to read from key board (which is similar to reading something from the true I/O register)

. text.globl main main: addi $s0, $0, 113 # q key lui $t0, 0xFFFF # $t0 = 0xFFFF0000; waitloop: lw $t1, 0($t0) andi $t1, $t1, 0x0001 # $t1 &= 0x ; beq $t1, $zero, waitloop lw $a0, 4($t0) beq $a0, $s0, done li $v0,1 syscall li $v0,4 la $a0, new_line syscall j waitloop done: li $v0, 10 # exit,if it ever comes here syscall.data new_line:.asciiz "\n” Remember to select ``mapped I/O’’ in PCSpim settings. To set it, select ``Simulator’’ then ``Settings…’’

SPIM output Similar to the input, SPIM has two memory locations for output – 0xffff0008: Transmitter control. Bit 1: interrupt enable Bit 0: ready – 0xffff000c: Transmitter data. Bit 0-7: data byte

SPIM output If you need to show something on the console, do the following: 1.Check if ready bit is 1. If yes, proceed. Otherwise, wait. 2.Write to the data. The ready bit will be reset to 0, and will be set to 1 after the byte is transmitted.

question Is this the most efficient way to do it? Remember that the processor usually has a lot of things to do simultaneously

Interrupt The key problem is that the time when the input occurs cannot be predicted by your program Wouldn’t it be nice if you could “focus on what you are doing” while be “interrupted” if some inputs come?

MIPS interrupt For external interrupt, your code is executing, and if an event happens that must be processed, – The address of the instruction that is about to be executed is saved into a special register called EPC – PC is set to be 0x , the starting address of the interrupt handler – Then, after processing this interrupt, call “eret” to set the value of the PC to the value stored in EPC

MIPS Interrupt Is it okay to use $t0 in the interrupt? Note the difference between an interrupt and a function call. – For a function call, the caller is aware of the function call, so, it is not expecting the value of $t0 to be the same after the call. – For an interrupt, the user program is running and got interrupted. The user may not know about the interruption at all, so if you changed $t0 inside an interrupt, the user program may take the wrong value of $t0 and keep on calculating, which will result in errors. – Interrupt handlers should be short, because the processor often have multiple types of interrupts. It could happen that while you are processing interrupt A and interrupt B is triggered. Usually, in an interrupt handler, you disable other interrupts. To make sure that interrupt B can be processed in time, the handler for A should not take too long.

MIPS interrupt Coprocessor 0 is a part of the CPU to handle interrupts. In SPIM, Coprocessor 0 contains the – BadVAddr (8), storing the memory address causing the exception – Count (9), increment by 1 every 10ms by default – Compare (11), if equals to Count, trigger an interrupt of level 5 – Status (12), Bit 8-15: interrupt mask. A bit being ``1’’ means that this interrupt is enabled. Bit 4: user mode. With SPIM, always 1. Bit 1: exception level (EXL). Normally ``0,’’ set to ``1’’ if an exception occurred. When ``1,’’ no further interrupt is enabled and EPC is not updated. Bit 0: interrupt enable. Enable (``1’’) or disable (``0’’) all interrupts. – Cause (13) Bit 8-15: pending interrupts. A bit being ``1’’ means that this interrupt situation occurred, even if it is not enabled. Bit 2-6: Exception code. ``0’’ is hardware interrupt. – EPC (14) – Config (16), config the machine These registers can be read and modified using the instructions mfc0 (move from coprocessor 0) and mtc0 (move to coprocessor 0).

MIPS Interrupt $k0 and $k1 are both used as temporary variables in interrupt servicing routines.

A MIPS interrupt handling code Here is the code that uses interrupt to get the keyboard input and prints it out.