hello,
Im writing a code for a project but im encountering errors that i cant solve
Heres the code:
.global _start
.equ LEDS_BASE_ADDR, 0x10000000
.equ SEVEN_SEG_BASE_ADDR, 0x10000020
.equ PUSH_BUTTONS_ADDR, 0x10000050
.equ SWITCHES_ADDR, 0x10000040
.equ START_RESUME_MASK, 0x01
.equ SET_MASK, 0x02
.equ RESET_MASK, 0x04
.equ CLK_FREQ, 50000000
.equ CLK_DIV, CLK_FREQ / 100
.equ MAX_TIME, 9999999
.data
centisecond_counter: .word
lap_time: .word
lap_mode: .byte
start_resume_state: .byte
set_state: .byte
reset_state: .byte
.data
.global centisecond_counter
.global lap_time
.global lap_mode
.global start_resume_state
.global set_state
.global reset_state
.section .bss
display_hours: .byte 0
display_minutes: .byte 0
display_seconds: .byte 0
display_centiseconds: .byte 0
.text
_start:
# Initialization
# Set up IO devices registers
main_loop:
# Clock division
call clock_division
# Display update
call display_update
# Button handling
call button_handling
# Lap time logic
call lap_time_logic
# Loop back to main loop
jmp main_loop
clock_division:
movia r2, CLK_DIV
clock_division_loop:
subi r2, r2, 1
bne r2, zero, clock_division_loop
ldw r3, (centisecond_counter)
addi r3, r3, 1
stw r3, (centisecond_counter)
ret
display_update:
# Convert counters to display format
# Update 7-segment displays
# Update LEDs with current count
ldb r4, (reset_state)
beq r4, zero, display_reset_mode
ldb r4, (lap_mode)
beq r4, zero, display_lap_mode
ldw r4, (centisecond_counter)
call display_time
ret
display_reset_mode:
# Display 'R' on HEX0
movi r4, 'R'
sth r4, (SEVEN_SEG_BASE_ADDR)
ret
display_lap_mode:
# Display 'L' on HEX0
movi r4, 'L'
sth r4, (SEVEN_SEG_BASE_ADDR)
ret
display_time:
# Convert centiseconds to hours, minutes, seconds, and centiseconds
movi r6, 100 # Centiseconds per second
movi r7, 60 # Seconds per minute
movi r8, 60 # Minutes per hour
ldw r5, (centisecond_counter)
# Calculate hours
mov r9, r5 # Copy centiseconds to r9
div r9, r5, r8 # r9 = r5 / (60 * 60)
stb r9, (display_hours) # Store hours
# Calculate minutes
mov r10, r5 # Copy centiseconds to r10
div r10, r10, r8 # r10 = r5 / (60 * 60)
mul r10, r10, r8 # r10 = r10 * (60 * 60)
sub r9, r5, r10 # r9 = r5 - r10
div r9, r9, r7 # r9 = r9 / 60
stb r9, (display_minutes) # Store minutes
# Calculate seconds
mov r10, r9 # Copy minutes to r10
div r10, r9, r7 # r10 = r9 / 60
mul r10, r10, r7 # r10 = r10 * 60
sub r9, r9, r10 # r9 = r9 - r10
stb r9, (display_seconds) # Store seconds
# Calculate centiseconds
div r9, r6, r9 # r9 = r9 / 100
stb r9, (display_centiseconds) # Store centiseconds
movia r9, SEVEN_SEG_BASE_ADDR
sth sth display_hours, 0(r9)
sth display_minutes, 2(r9)
sth display_seconds, 4(r9)
sth display_centiseconds, 6(r9)
ret
button_handling:
ldw r10, (PUSH_BUTTONS_ADDR)
andi r11, r10, START_RESUME_MASK
beq r11, zero, start_resume_pressed
andi r11, r10, SET_MASK
beq r11, zero, set_pressed
andi r11, r10, RESET_MASK
beq r11, zero, reset_pressed
ret
start_resume_pressed:
ldb r11, 0(start_resume_state)
beq r11, zero, start_stopwatch
ret
start_stopwatch:
movi r11, 1
stb r11, (start_resume_state)
ret
set_pressed:
ldb r11, (lap_mode)
xori r11, r11, 1
stb r11, (lap_mode)
ret
reset_pressed:
movi r11, 0
stw r11, (centisecond_counter)
stb r11, (lap_mode)
stb r11, (start_resume_state)
stb r11, (set_state)
movi r11, 1
stb r11, (reset_state)
ret
lap_time_logic:
ret
These are the errors im getting after attempting to compile:
work/asm9kvLzB.s: Assembler messages: work/asm9kvLzB.s:57: Error: unknown register main_loop
work/asm9kvLzB.s:65: Error: unknown register centisecond_counter
work/asm9kvLzB.s:67: Error: unknown register centisecond_counter
work/asm9kvLzB.s:76: Error: unknown register reset_state
work/asm9kvLzB.s:79: Error: unknown register lap_mode
work/asm9kvLzB.s:82: Error: unknown register centisecond_counter
work/asm9kvLzB.s:89: Error: unknown register SEVEN_SEG_BASE_ADDR
work/asm9kvLzB.s:95: Error: unknown register SEVEN_SEG_BASE_ADDR work/asm9kvLzB.s:104: Error: unknown register centisecond_counter
work/asm9kvLzB.s:109: Error: unknown register display_hours
work/asm9kvLzB.s:117: Error: unknown register display_minutes
work/asm9kvLzB.s:124: Error: unknown register display_seconds
work/asm9kvLzB.s:128: Error: unknown register display_centiseconds
work/asm9kvLzB.s:132: Error: unknown register sth display_hours
work/asm9kvLzB.s:133: Error: unknown register display_minutes
work/asm9kvLzB.s:134: Error: unknown register display_seconds
work/asm9kvLzB.s:135: Error: unknown register display_centiseconds
work/asm9kvLzB.s:144: Error: unknown register PUSH_BUTTONS_ADDR
work/asm9kvLzB.s:158: Error: unknown register start_resume_state
work/asm9kvLzB.s:164: Error: unknown register start_resume_state
work/asm9kvLzB.s:168: Error: unknown register lap_mode
work/asm9kvLzB.s:170: Error: unknown register lap_mode
work/asm9kvLzB.s:175: Error: unknown register centisecond_counter
work/asm9kvLzB.s:176: Error: unknown register lap_mode
work/asm9kvLzB.s:177: Error: unknown register start_resume_state
work/asm9kvLzB.s:178: Error: unknown register set_state
work/asm9kvLzB.s:180: Error: unknown register reset_state Compile failed.
any help will be greatly appreciated.