Stap 9: Codering - Setup & de Run Loop
Wij zullen nu de code van de oorspronkelijke installatie van het systeem, en zet het dan in een eenvoudige uitvoering lus.De installatie omvat zodat alle apparaten om te genereren van interrupts, en aanvankelijk de motoren te stellen op OFF.
Ik moet opmerken dat deze code wordt voorafgegaan door de sectie .data, en de functies van de handler. De volgende instructies zijn bovendien reeds geboekt:
.EQU TIMER, 0x10002000
.EQU LEGO, 0x10000060
.EQU LEGO_IRQ11, 0x800
.EQU LEGO_IRQ8, 0x100
.EQU LEGO_Edge, 0x1000006C
.EQU JTAG_UART, 0x10001000
.EQU LEDG, 0x10000010
.EQU LEDR, 0x10000000
Dus, laten we aan de slag.
.section .text
.Global pokemonmaster # lol. Wanneer u de code voor uw robot schrijft, uw functies aanroepen wat je wilt.
pokemonmaster:
movia r27, 0x800000 / * Initialiseer de stack (uitgelijnd naar 4) * /
movia r8, TIMER
movia r9, 0x6500 / * Set's tijd om countdown 10 seconden 500000000 = 1DCD6500 * /
stwio r9,8(r8)
movia r9, 0x1DCD
stwio r9,12(r8)
movia r9, 0x0 / * voor zorgen dat de timer * /
stwio r9,0(r8)
ldwio r9,0(r8) / * gewoon om te zien wat er gaande is hier * /
movia r11, LEGO / * het basisadres van de GPIO is nu in r11 * /
movia r9, 0x07f557ff / * Lego control board initialisatie in r9 * /
stwio r9, 4(r11) / * winkels in de richting registreren * /
movia r9, 0xFFFFFFFF
stwio r9, 0(r11)
# E:load:value
movia r9, 0xff3ffbff / * Sensor 0, drempel is HEX E 1111|1-111|0-0-1-1-11-11-11-11-10-11-11-11-11-11 * /
stwio r9,0(r11)
# E:load:value
movia r9, 0xff3fefff / * Sensor 1, drempel is HEX E 1111|1-111|0-0-1-1-11-11-11-10-11-11-11-11-11-11 * /
stwio r9,0(r11)
movia r9, 0xffbfffff / * uitschakelen sensoren voor laden * /
stwio r9,0(r11)
movia r9, 0xffdfffff / * wordt ingesteld op de modus staat * /
stwio r9,0(r11)
movia r9,0x18000000 /******************************************************************/
stwio r9,8(r11)
movia r8, JTAG_UART / * r8 bevat nu het basisadres van JTAG_UART * /
/ * Vertellen de UART interrupts aanvragen wanneer tekens worden ontvangen * /
Addi r9, r0, 0x1 / * set bit 0 (REI) van het MVO-register op 1 * /
stwio r9, 4(r8)
Addi r9, r0, 0x900 / * bits 11 en 8 van de ctl3 ingesteld op 1 * /
wrctl ctl3, r9
movia r9, 1
wrctl ctl0, r9
movia r9, LEGO_Edge / * duidelijk de lego sensor rand trigger * /
stwio r0,0(r9)
run_loop:
movia r9, LEDG
movia r20, LEGO
ldwio r19,0(r20)
srli r19, r19, 26
stwio r19,0(r9)
movia r9, LEGO_Edge
stwio r0,0(r9)
BR run_loop
.Global wall_escape_left
wall_escape_left: / * bochten verliet een zekere afstand om te voorkomen dat een muur * /
movia r8, TIMER
STW r0,0(r8)
movia r9, 0x4 / * start de timer maar niet continu (moet opzettelijke herstart) * /
STW r9,4(r8) / * Start de timer voor een 1 periode run * /
movia r4, LEGO / * het adres van de motorcontroller pakt r4 voor de functie * /
Addi sp, sp, -16
STW r11,12(sp)
STW r9,8(sp)
STW r8,4(sp)
STW ra,0(sp)
oproep motors_turn_left
LDW ra,0(sp)
LDW r8,4(sp)
LDW r9,8(sp)
LDW r11,12(sp)
Addi sp, sp, 16
LEFT_LOOP:
LDW r9,0(r8) / * Ontdek als de vlag is gegaan omhoog (een periode is verstreken) * /
movia r10, 0x00000001
en r9, r9, r10
dustybear r9, r10, LEFT_CLEAR / * als de timer een time-out opgetreden is... * /
BR LEFT_LOOP
LEFT_CLEAR:
STW r0,0(r8) / * de markering wissen * /
Addi sp, sp, -16
STW r11,12(sp)
STW r9,8(sp)
STW r8,4(sp)
STW ra,0(sp)
movia r4, LEGO
Bel motors_forward / * Start weer vooruit lopen * /
LDW ra,0(sp) / * terug te brengen van het retouradres * /
LDW r8,4(sp)
LDW r9,8(sp)
LDW r11,12(sp)
Addi sp, sp, 16 / * krimpen van de stapel terug naar beneden * /
RET
.Global wall_escape_right
wall_escape_right:
movia r8, TIMER
STW r0,0(r8)
movia r9, 0x4
STW r9,4(r8)
movia r4, LEGO / * het adres van de motorcontroller pakt r4 voor de functie * /
Addi sp, sp, -16
STW r11,12(sp)
STW r9,8(sp)
STW r8,4(sp)
STW ra,0(sp)
oproep motors_turn_right
LDW ra,0(sp)
LDW r8,4(sp)
LDW r9,8(sp)
LDW r11,12(sp)
Addi sp, sp, 16
RIGHT_LOOP:
LDW r9,0(r8)
movia r10, 0x00000001
en r9, r9, r10
dustybear r9, r10, RIGHT_CLEAR
BR RIGHT_LOOP
RIGHT_CLEAR:
STW r0,0(r8)
Addi sp, sp, -16
STW r11,12(sp)
STW r9,8(sp)
STW r8,4(sp)
STW ra,0(sp)
movia r4, LEGO
oproep motors_forward
LDW ra,0(sp)
LDW r8,4(sp)
LDW r9,8(sp)
LDW r11,12(sp)
Addi sp, sp, 16
RET
Als dat veel te verwarrend was, ben ik helemaal blij om vraag te beantwoorden. Vraag ze hieronder.