Files
lt16lab/programs/can_test.prog_

72 lines
1.4 KiB
Plaintext

reset:
br always >main
nop
hardfault:
reti
nop
memfault:
reti
nop
timer_interrupt:
reti
nop
can_interrupt:
br >can_interrupt
nop
.align
led_addr: .word 0x000F0000
timer_counter_addr: .word 0x000F0008
timer_status_addr: .word 0x000F000C
dmem_start_addr: .word 0x00000400
dmem_end_addr: .word 0x000004FC
priority_mask: .word 0xFFFFFF03
timer_target_value: .word 127 // for simulation
// timer_target_value: .word 0xF10000 // for real board
can_base_addr: .word 0x000F0100
can_control_ptr: .word =can_base_addr
can_command_ptr: .word =can_base_addr + 1
can_acceptance_code_ptr: .word =can_base_addr + 4
can_acceptance_mask_ptr: .word =can_base_addr + 5
can_acceptance_bus_timing0_ptr: .word =can_base_addr + 6
can_acceptance_bus_timing1_ptr: .word =can_base_addr + 7
can_output_control_ptr: .word =can_base_addr + 8
can_identifier0_ptr: .word =can_base_addr + 10
can_identifier1_ptr: .word =can_base_addr + 11
can_data0_ptr: .word =can_base_addr + 12
can_data1_ptr: .word =can_base_addr + 13
main:
// Initialize stack pointer to the end of the data memory
ldr r12, >dmem_end_addr
// Set runtime priority
ldr r0, >priority_mask
and r14, r0, r14
// Set LED to pattern
clr r2
addi r2, 0x7A
st08 r0, r2
// Initialize CAN
ldr r0, >can_acceptance_code_ptr
loop:
br >loop
nop
can_interrupt:
reti
nop