Code refactor

This commit is contained in:
2022-12-17 21:10:14 +01:00
parent 3e173e9008
commit d286704b8a
3 changed files with 76 additions and 73 deletions

View File

@@ -65,8 +65,8 @@ main:
// (Re)set scrolling speed // (Re)set scrolling speed
ldr r5, >scrolling_count_addr ldr r5, >scrolling_count_addr
ldr r7, >scrolling_cnt_value ldr r4, >scrolling_cnt_value
st32 r5, r7 st32 r5, r4
// --- CAN init --- // --- CAN init ---
ldr r0, >can_acceptance_code_addr ldr r0, >can_acceptance_code_addr
@@ -155,6 +155,8 @@ switches_interrupt_handler:
nop nop
can_tx_handler: can_tx_handler:
// Idee: lese hier die tx data register aus und calle die rx handler
// dafür mussen diese umgeschrieben werden um die werte nur über register auszuzlesen...
reti reti
nop nop
@@ -263,20 +265,20 @@ can_rx_data2_addr: .word 0x000F0118
can_rx_handler: can_rx_handler:
// Dispatch CAN frame // Dispatch CAN frame
ldr r0, >can_rx_data0_addr ldr r0, >can_rx_data0_addr
ld08 r1, r0 ld08 r6, r0
ldr r2, >frame_data_add
cmp eq r2, r1
br true >can_handle_data_add_frame
nop
ldr r2, >frame_data_clear ldr r2, >frame_data_clear
cmp eq r2, r1 cmp eq r2, r6
br true >can_handle_data_clear_frame br true >can_handle_data_clear_frame
nop nop
ldr r2, >frame_data_add
cmp eq r2, r6
br true >can_handle_data_add_frame
nop
ldr r2, >frame_frequency ldr r2, >frame_frequency
cmp eq r2, r1 cmp eq r2, r6
br true >can_handle_frequency_frame br true >can_handle_frequency_frame
nop nop
@@ -284,38 +286,6 @@ can_rx_handler:
reti reti
nop nop
.align
scrolling_addr_ptr: .word =scrolling_addr
write_mask_ptr: .word =write_mask
can_handle_data_add_frame:
// Expect symbol to add in r10 register
ldr r0, >can_rx_data1_addr
ld08 r10, r0
// Release receive buffer
ldr r0, >can_command_addr_ptr
ld32 r0, r0
clr r1
addi r1, 0x04
st08 r0, r1
ldr r0, >scrolling_addr_ptr
ld32 r0, r0
ldr r1, >write_mask_ptr
ld32 r1, r1
lsh r10, r10, 16
or r4, r10, r1
st32 r0, r4
reti
nop
.align
clear_mask_ptr: .word =clear_mask
can_handle_data_clear_frame: can_handle_data_clear_frame:
// Release receive buffer // Release receive buffer
ldr r0, >can_command_addr_ptr ldr r0, >can_command_addr_ptr
@@ -323,7 +293,7 @@ can_handle_data_clear_frame:
clr r1 clr r1
addi r1, 0x04 addi r1, 0x04
st08 r0, r1 st08 r0, r1
handle_data_clear_frame:
ldr r0, >scrolling_addr_ptr ldr r0, >scrolling_addr_ptr
ldr r1, >clear_mask_ptr ldr r1, >clear_mask_ptr
@@ -336,21 +306,12 @@ can_handle_data_clear_frame:
nop nop
.align .align
scrolling_count_addr_ptr: .word =scrolling_count_addr scrolling_addr_ptr: .word =scrolling_addr
write_mask_ptr: .word =write_mask
can_handle_frequency_frame:
// For real board shift the count value by 16!
can_handle_data_add_frame:
ldr r0, >can_rx_data1_addr ldr r0, >can_rx_data1_addr
ld08 r9, r0 ld08 r7, r0
ldr r0, >can_rx_data2_addr
ld08 r10, r0
// Concat bits
lsh r10, r10, 8
or r10, r10, r9
// lsh r10, r10, 16 // real board !!!
// Release receive buffer // Release receive buffer
ldr r0, >can_command_addr_ptr ldr r0, >can_command_addr_ptr
@@ -358,22 +319,53 @@ can_handle_frequency_frame:
clr r1 clr r1
addi r1, 0x04 addi r1, 0x04
st08 r0, r1 st08 r0, r1
handle_data_add_frame:
// Expect symbol to add in r7 register
ldr r0, >scrolling_count_addr_ptr ldr r0, >scrolling_addr_ptr
ld32 r0, r0 ld32 r0, r0
st32 r0, r10 ldr r1, >write_mask_ptr
ld32 r1, r1
lsh r7, r7, 16
or r4, r7, r1
st32 r0, r4
reti reti
nop nop
wait: .align
clr r7 clear_mask_ptr: .word =clear_mask
clr r8 scrolling_count_addr_ptr: .word =scrolling_count_addr
addi r8, 16
inc_i: can_handle_frequency_frame:
cmp neq r7,r8 ldr r0, >can_rx_data1_addr
br true >inc_i ld08 r7, r0
addi r7,1
ret ldr r0, >can_rx_data2_addr
ld08 r8, r0
// Release receive buffer
ldr r0, >can_command_addr_ptr
ld32 r0, r0
clr r1
addi r1, 0x04
st08 r0, r1
handle_frequency_frame:
// Expect count value in r7 and r8 register
// For real board shift the count value by 16!
// Concat bits
lsh r8, r8, 8
or r8, r8, r7
// lsh r8, r8, 16 // real board !!!
ldr r0, >scrolling_count_addr_ptr
ld32 r0, r0
st32 r0, r8
reti
nop nop

View File

@@ -64,7 +64,7 @@ begin
if clk'event and clk='1' then if clk'event and clk='1' then
if rst = '1' then if rst = '1' then
interrupt <= '0'; interrupt <= '0';
old_input <= (others => '0'); old_input <= buttons & switches;
else else
if buttons & switches /= old_input if buttons & switches /= old_input
then then

View File

@@ -112,17 +112,28 @@ BEGIN
stimuli: process stimuli: process
begin begin
rst <= '0'; rst <= '0';
sw <= x"000F";
wait for CLK_PERIOD; wait for CLK_PERIOD;
rst <= '1'; rst <= '1';
sw <= x"000F";
wait for 3us; wait for 3us;
btn0 <= "00100"; -- freq -- btn0 <= "00100"; -- freq
-- btn0 <= "00001"; -- add btn0 <= "00001"; -- add
-- btn0 <= "00010"; -- clear -- btn0 <= "00010"; -- clear
wait for 50us;
sw <= x"000A";
btn0 <= "00000";
btn1 <= "00001"; -- add
wait for 50us;
btn0 <= "00100"; -- freq
wait for 50us;
btn0 <= "00010"; -- clear
wait for 300us; wait for 100us;
assert false report "Simulation terminated!" severity failure; assert false report "Simulation terminated!" severity failure;
end process stimuli; end process stimuli;