-
Notifications
You must be signed in to change notification settings - Fork 7
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #2 from mauri870/feature/ok03
Add ok03 exercise
- Loading branch information
Showing
8 changed files
with
112 additions
and
6 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
# OK03 - Split our functions in multiple files for better organization | ||
|
||
This exercise split our functions into separate files for better organization, this is basically all the difference from OK02. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
@; | ||
@; Counter functions to be used by this exercise | ||
@; | ||
|
||
.section .text | ||
.global delay | ||
delay: | ||
mov r0, #0xF0000 @; start counter with a large value | ||
delay1$: | ||
sub r0, #1 @; subtract 1 from the counter | ||
cmp r0, #0 @; check if counter reaches zero | ||
bne delay1$ @; if not, branch to the delay1$ label | ||
mov pc, lr @; return |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
@; | ||
@; Functions to interact with the leds | ||
@; | ||
|
||
.section .text | ||
.global set_led_state | ||
set_led_state: | ||
push {lr} @; save address the function should return to | ||
mov r1, r0 @; move the led state to r1 | ||
ldr r0, =message @; load the message into r0 | ||
mov r2, #0 | ||
str r2, [r0, #0x4] @; reset request code | ||
str r2, [r0, #0x10] @; reset request/response size | ||
mov r2, #130 | ||
str r2, [r0, #0x14] @; reset pin number | ||
|
||
str r1, [r0, #0x18] @; overwrite the led state | ||
add r0, #8 @; add the channel 8 as the last 4 bits of the message | ||
bl mailbox_write | ||
pop {pc} @; return | ||
|
||
.section .data | ||
.align 4 @; last 4 bits of the next label set to 0 (16-byte alligned) | ||
message: | ||
.int size @; message header contains the size of the message | ||
.int 0 @; request code 0 | ||
|
||
.int 0x00038041 @; header tag ID | ||
.int 8 @; size of tag data | ||
.int 0 @; request/response size | ||
|
||
.int 130 @; pin number | ||
.int 1 @; pin state | ||
.int 0 @; signal the GPU that the message is over | ||
size: | ||
.int . - message @; size of the message |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
@; | ||
@; Functions to interact with the mailbox | ||
@; | ||
|
||
.section .text | ||
.global mailbox_write | ||
mailbox_write: | ||
ldr r1, =0x3f00b880 @; load the hex number =0x3f00b880 into register r1 | ||
@; this is the base address of the mailboxes | ||
wait$: | ||
ldr r2, [r1, #0x18] @; load r2 with the address of the offset 0x18 for mailbox 0 (read mailbox) | ||
tst r2, #0x80000000 @; check if the full flag is set | ||
bne wait$ @; branch to wait$ label if the full flag is not set | ||
|
||
str r0, [r1, #0x20] @; put the message into mailbox 1 write register, which is at offset 0x20 from the base address | ||
mov pc, lr @; return |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
@; | ||
@; A simple program to blink the OK/ACT LED on Raspberry Pi 3 | ||
@; | ||
|
||
.section .init @; kernel initialization code must be on 0x8000 | ||
.global _start @; define _start label globally available for the linker | ||
_start: | ||
mov sp, #0x8000 @; set up the stack pointer | ||
b _main @; branch to main routine | ||
|
||
.section .text | ||
_main: | ||
loop$: @; main loop | ||
|
||
bl delay @; branch to delay function | ||
|
||
@; enable led | ||
mov r0, #1 @; led state 1 = on | ||
bl set_led_state @; set led state | ||
|
||
bl delay @; branch to delay function | ||
|
||
@; disable led | ||
mov r0, #0 @; led state 0 = off | ||
bl set_led_state @; set led state | ||
|
||
b loop$ @; branch to main loop$ |