QuestionQuestion

The Task
In this project, you will be adding an interrupt service routine (ISR) to an existing program. The program is already fully functional hexadecimal counter that shows the current counter value on the seven-segment display. You will use the timer to generate an interrupt every x cycles (where x can be between 100 and 200 cycles). Your ISR needs to do the following things:

1. Toggle all eight LEDs (i.e. if they are all off, they should all be turned on and if they are already on, turn them off)
2. Perform any tasks necessary to allow another timer interrupt within 100 to 200 cycles

No changes should be made to the existing main loop or sseg_display.asm. Code should only be added following the TODO comments.

Solution PreviewSolution Preview

This material may consist of step-by-step explanations on how to solve a problem or examples of proper writing, including the use of citations, references, bibliographies, and formatting. This material is made available for the sole purpose of studying and learning - misuse is strictly forbidden.

plp.metafile����������������������������������������������������������������������������������������100644 �000000 �000000 �00000000102 13545721656 011537� 0����������������������������������������������������������������������������������������������������ustar�00����������������������������������������������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������PLP-5.0
START=268435456
DIRTY=0
ARCH=0

main.asm
sseg_display.asm
��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������main.asm��������������������������������������������������������������������������������������������100644 �000000 �000000 �00000003272 13545721656 010675� 0����������������������������������������������������������������������������������������������������ustar�00����������������������������������������������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������.org 0x10000000

li $sp, 0x10fffffc # Stack pointer initialization
li $s0, sseg_lut # Lookup table address used by sseg_display
lui $s1, 0xf070 # Interrupt controller register
lui $s2, 0xf0a0 # Seven segment display


# ****************************
# TODO: enable interrupts below
# ****************************
li    $iv, my_isr # Load isr pointer to $iv
lw    $t0, 0($s1) # Load interrupt controller register
ori   $t0, $t0, 0x03 # Set flags for GIE and timer interrupt
sw    $t0, 0($s1) # Save interrupt controller register
lui   $t0, 0xf060 # Load timer address
li    $t1, 0xffffffff # Load maximum value
addiu $t1, $t1, -150 # Subtract x, x = 150
sw    $t1, 0($t0) # Save the result to timer register


# NOTE: Do not add or modify any code within this main loop
main:
jal sseg_display
nop
addiu $a0, $a0, 1
j main
nop


# ****************************************
# TODO: add interrupt service routine below
# ****************************************
my_isr:
li    $i0, 0xf0200000 # Load leds address
lw    $i1, 0($i0) # Load leds state
nor   $i1, $i1, $i1 # Toggle leds state
sw    $i1, 0($i0) # Save new leds state
li    $i0, 0xf0600000 # Load timer address
li    $i1, 0xffffffff # Load maximum value
addiu $i1, $i1, -150 # Subtract x, x = 150
sw    $i1, 0($i0) # Store the value to timer
li    $i0, 0xf0700000 # Load interrupt controller register
lw    $i1, 4($i0) # Load interrupt status register
andi $i1, $i1, 0xfffffffd # Clear the status register timer bit
sw    $i1, 4($i0) # Save the status register
lw    $i1, 0($i0) # Load interrupt controller register
ori   $i1, $i1, 1 # Set flag for GIE
jr    $ir # Return from isr
sw    $i1, 0($i0) # Save the mask register��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������sseg_display.asm������������������������������������������������������������������������������������100644 �000000 �000000 �00000002254 13545721656 012436� 0����������������������������������������������������������������������������������������������������ustar�00����������������������������������������������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������asm_file_trap:
# If your program ends up in this loop then your ISR is not being exited correctly
lui $s0, 0xf0a0
li $t0, 0x86afafff # "Err" on seven segment
sw $t0, 0($s0)
j asm_file_trap
nop

sseg_display:

move $t1, $a0
move $t3, $0

# Position 0
andi $t2, $t1, 0xf
sll $t2, $t2, 2
addu $t2, $t2, $s0 # Calculate LUT address
lw $t2, 0($t2)
or $t3, $t3, $t2

# Position 1
andi $t2, $t1, 0xf0
srl $t2, $t2, 2
addu $t2, $t2, $s0 # Calculate LUT address
lw $t2, 0($t2)
sll $t2, $t2, 8
or $t3, $t3, $t2

# Position 2
andi $t2, $t1, 0xf00
srl $t2, $t2, 6
addu $t2, $t2, $s0 # Calculate LUT address
lw $t2, 0($t2)
sll $t2, $t2, 16
or $t3, $t3, $t2

# Position 3
andi $t2, $t1, 0xf000
srl $t2, $t2, 10
addu $t2, $t2, $s0 # Calculate LUT address
lw $t2, 0($t2)
sll $t2, $t2, 24
or $t3, $t3, $t2

# Write to seven segment and increment
jr $ra
sw $t3, 0($s2)...
$25.00 for this solution

PayPal, G Pay, ApplePay, Amazon Pay, and all major credit cards accepted.

Find A Tutor

View available Assembly Language Programming Tutors

Get College Homework Help.

Are you sure you don't want to upload any files?

Fast tutor response requires as much info as possible.

Decision:
Upload a file
Continue without uploading

SUBMIT YOUR HOMEWORK
We couldn't find that subject.
Please select the best match from the list below.

We'll send you an email right away. If it's not in your inbox, check your spam folder.

  • 1
  • 2
  • 3
Live Chats