Solved Task 2

This commit is contained in:
Schrom01
2022-10-14 11:32:53 +02:00
parent e1d9b30ed0
commit 8b5cd02f7e
11 changed files with 441 additions and 251 deletions
+17 -3
View File
@@ -27,9 +27,11 @@ ADDR_LED_15_8 EQU 0x60000101
ADDR_LED_23_16 EQU 0x60000102
ADDR_LED_31_24 EQU 0x60000103
ADDR_BUTTONS EQU 0x60000210
ADDR_7_SEGMENT EQU 0x60000114
BITMASK_KEY_T0 EQU 0x01
BITMASK_LOWER_NIBBLE EQU 0x0F
SHIFT_BITS_MSB EQU 0x08
; ------------------------------------------------------------------
; -- Variables
@@ -37,7 +39,7 @@ BITMASK_LOWER_NIBBLE EQU 0x0F
AREA MyAsmVar, DATA, READWRITE
; STUDENTS: To be programmed
store_table SPACE 16 ; reserve 16 byte (4 words)
store_table SPACE 32 ; reserve 16 byte (4 words)
@@ -76,8 +78,15 @@ readInput
STRB R1, [R2]
; Write Values to Store Table
MOVS R3, R1
LDR R2, =SHIFT_BITS_MSB
LSLS R3, R3, R2
ADDS R0, R0, R3 ; or wäre besser
LDR R2, =store_table
STRB R0, [R2, R1]
ADDS R1, R1, R1
STRH R0, [R2, R1]
@@ -94,11 +103,16 @@ readInput
; Read Values from Store Table
LDR R1, =store_table
LDRB R0, [R1, R0]
ADDS R0, R0, R0
LDRH R0, [R1, R0]
; Write Values to LED 7-0 from R0
LDR R1, =ADDR_LED_23_16
STRB R0, [R1]
;Write Values to 7-Segment Display
LDR R1, =ADDR_7_SEGMENT
STRH R0, [R1]
; END: To be programmed
+136
View File
@@ -0,0 +1,136 @@
; ------------------------------------------------------------------
; -- _____ ______ _____ -
; -- |_ _| | ____|/ ____| -
; -- | | _ __ | |__ | (___ Institute of Embedded Systems -
; -- | | | '_ \| __| \___ \ Zurich University of -
; -- _| |_| | | | |____ ____) | Applied Sciences -
; -- |_____|_| |_|______|_____/ 8401 Winterthur, Switzerland -
; ------------------------------------------------------------------
; --
; -- table.s
; --
; -- CT1 P04 Ein- und Ausgabe von Tabellenwerten
; --
; -- $Id: table.s 800 2014-10-06 13:19:25Z ruan $
; ------------------------------------------------------------------
;Directives
PRESERVE8
THUMB
; ------------------------------------------------------------------
; -- Symbolic Literals
; ------------------------------------------------------------------
ADDR_DIP_SWITCH_7_0 EQU 0x60000200
ADDR_DIP_SWITCH_15_8 EQU 0x60000201
ADDR_DIP_SWITCH_31_24 EQU 0x60000203
ADDR_LED_7_0 EQU 0x60000100
ADDR_LED_15_8 EQU 0x60000101
ADDR_LED_23_16 EQU 0x60000102
ADDR_LED_31_24 EQU 0x60000103
ADDR_BUTTONS EQU 0x60000210
BITMASK_KEY_T0 EQU 0x01
BITMASK_LOWER_NIBBLE EQU 0x0F
; ------------------------------------------------------------------
; -- Variables
; ------------------------------------------------------------------
AREA MyAsmVar, DATA, READWRITE
; STUDENTS: To be programmed
store_table SPACE 16 ; reserve 16 byte (4 words)
; END: To be programmed
ALIGN
; ------------------------------------------------------------------
; -- myCode
; ------------------------------------------------------------------
AREA myCode, CODE, READONLY
main PROC
EXPORT main
readInput
BL waitForKey ; wait for key to be pressed and released
; STUDENTS: To be programmed
; Read Valules from Dip Switches 7-0 to R0
LDR R0, =ADDR_DIP_SWITCH_7_0
LDRB R0, [R0]
; Write Values to LED 7-0 from R0
LDR R1, =ADDR_LED_7_0
STRB R0, [R1]
; Read Index from Dip Switches 15-8 to R1
LDR R1, =ADDR_DIP_SWITCH_15_8
LDRB R1, [R1]
LDR R2, =BITMASK_LOWER_NIBBLE
ANDS R1, R1, R2
; Write Index to LED 15-8 from R1
LDR R2, =ADDR_LED_15_8
STRB R1, [R2]
; Write Values to Store Table
LDR R2, =store_table
STRB R0, [R2, R1]
; Read Index from Dip Switches 15-8 to R1
; Todo: Maskierung
LDR R0, =ADDR_DIP_SWITCH_31_24
LDRB R0, [R0]
LDR R1, =BITMASK_LOWER_NIBBLE
ANDS R0, R0, R1
; Write Index to LED 15-8 from R1
LDR R1, =ADDR_LED_31_24
STRB R0, [R1]
; Read Values from Store Table
LDR R1, =store_table
LDRB R0, [R1, R0]
; Write Values to LED 7-0 from R0
LDR R1, =ADDR_LED_23_16
STRB R0, [R1]
; END: To be programmed
B readInput
ALIGN
; ------------------------------------------------------------------
; Subroutines
; ------------------------------------------------------------------
; wait for key to be pressed and released
waitForKey
PUSH {R0, R1, R2}
LDR R1, =ADDR_BUTTONS ; laod base address of keys
LDR R2, =BITMASK_KEY_T0 ; load key mask T0
waitForPress
LDRB R0, [R1] ; load key values
TST R0, R2 ; check, if key T0 is pressed
BEQ waitForPress
waitForRelease
LDRB R0, [R1] ; load key values
TST R0, R2 ; check, if key T0 is released
BNE waitForRelease
POP {R0, R1, R2}
BX LR
ALIGN
; ------------------------------------------------------------------
; End of code
; ------------------------------------------------------------------
ENDP
END