Quadroped Robot - (NIOSII församlingen) (10 / 13 steg)

Steg 10: Vara som Kanye - avbrott!

Så nu ska vi skriva vad är utan tvekan den viktigaste delen i kodexen. avbrotten.

Avbrottshanterare hand tar om "reaktion" externa ingångarna. I detta fall, är externa ingångarna tangentkommandon (forward, tur, etc.) och touch sensorer. Vi vill roboten att flytta framåt när den upptäcker en viss nyckel, bakåt för en annan, och så vidare.

Så, utan vidare, avbrottshanterare:

.data
thechar: .byte ' ' # tecknet som kommer att skickas. Det är läst av vårt program och skrivs över av avbrottshanterare.

/ * Detta är den huvudsakliga funktionen av Walker robot. */

.section .exceptions, "ax"
.align 2

Handler:
Addi sp, sp, -12 #save ea, et, ctl1 på stacken
STW et, 0(sp)
rdctl et, ctl1
STW et, 4(sp)
STW ea, 8(sp)

Addi sp, sp, -32
STW r15,28(sp)
STW r14,24(sp)
STW r13,20(sp)
STW r12,16(sp)
STW r11,12(sp)
STW r10,8(sp)
STW r9,4(sp)
STW r8,0(sp)

rdctl et, ctl4 / * kolla på avbryta väntande register (ctl4) * /
Andi et, et, LEGO_IRQ11 / * kontrollera om det väntande avbrottet är från GPIO JP1 * /
BNE et, r0, handle_sensor

rdctl et, ctl4 / * kolla på avbryta väntande register (ctl4) * /
Andi et, et, LEGO_IRQ8 / * kontrollera om det väntande avbrottet är från JTAG UART * /
BNE et, r0, handle_JTAG

br exit_handler

handle_sensor:
/ * Kontrollera för falska avbrott * /

Movia r2, LEGO #_IRQ11 / * ladda GPIO JP1 i r2 * /
ldwio r4, 0(r2)
Srli r4, r4, 27
Andi r4, r4, 0x01f
cmpeqi r5, r4, 0x01f

BNE r5, r0, exit_handler / * falska avbrott * /

cmpeqi r5, r4, 0x01e / * kontrollera sensor 0 * /
BNE r5, r0, handle_sensor_left

cmpeqi r5, r4, 0x01d / * kontrollera sensor 1 * /
BNE r5, r0, handle_sensor_right

br exit_handler

handle_JTAG:
Movia r7, JTAG_UART
ldwio r2, 0(r7)
Andi r13, r2, 0x8000 # check om bit 15 är 1 (Läs giltig)
BEQ r13, r0, exit_handler
Andi r2, r2, 0xff #mask lägre byte

/ * När på 'w' * /
Movia r12, "w" # "w"
BEQ r2, r12, handle_forward

/ * När på ' * /
Movia r12, 's' # 's'
BEQ r2, r12, handle_stop

/ * När på 'x' * /
Movia r12, 'x' #' x'
BEQ r2, r12, handle_reverse

/ * När på "a" * /
Movia r12, "a" # "a"
BEQ r2, r12, handle_left

/ * Kontrollera för hade ' * /
Movia r12, 'd' # hade "
BEQ r2, r12, handle_right

br exit_handler

handle_sensor_left:
Addi sp, sp, -32
STW r15,28(sp)
STW r14,24(sp)
STW r13,20(sp)
STW r12,16(sp)
STW r11,12(sp)
STW r10,8(sp)
STW r9,4(sp)
STW r8,0(sp)
Movia r4, LEDR
Ring lightup

Movia r4, LEGO / * flytta LEGO till r4 så att motoriska funktioner kan referera * /

kalla wall_escape_right

Movia r4, LEDR
kalla lightdown
LDW r8,0(sp)
LDW r9,4(sp)
LDW r10,8(sp)
LDW r11,12(sp)
LDW r12,16(sp)
LDW r13,20(sp)
LDW r14,24(sp)
LDW r15,30(sp)
Addi sp, sp, 32
movi et, 0x1 / * återaktivera avbryter * /
wrctl ctl0, et / * anger paj bit pack till 1 (aktivera inerrupts) * /
br exit_handler

handle_sensor_right:
Addi sp, sp, -32
STW r15,28(sp)
STW r14,24(sp)
STW r13,20(sp)
STW r12,16(sp)
STW r11,12(sp)
STW r10,8(sp)
STW r9,4(sp)
STW r8,0(sp)
Movia r4, LEDR
Ring lightup

Movia r4, LEGO / * flytta LEGO till r4 så att motoriska funktioner kan referera * /

kalla wall_escape_left

Movia r4, LEDR
kalla lightdown
LDW r8,0(sp)
LDW r9,4(sp)
LDW r10,8(sp)
LDW r11,12(sp)
LDW r12,16(sp)
LDW r13,20(sp)
LDW r14,24(sp)
LDW r15,30(sp)
Addi sp, sp, 32

movi et, 0x1 / * återaktivera avbryter * /
wrctl ctl0, et / * anger paj bit pack till 1 (aktivera inerrupts) * /
br exit_handler

handle_forward:
Movia r7, JTAG_UART
ldwio r7,0(r7)

movi et, 0x1 / * återaktivera avbryter * /
wrctl ctl0, et / * anger paj bit pack till 1 (aktivera inerrupts) * /

Addi sp, sp, -32
STW r15,28(sp)
STW r14,24(sp)
STW r13,20(sp)
STW r12,16(sp)
STW r11,12(sp)
STW r10,8(sp)
STW r9,4(sp)
STW r8,0(sp)

Movia r4, LEGO / * flytta LEGO till r4 så att motoriska funktioner kan referera * /
kalla motors_forward
LDW r8,0(sp)
LDW r9,4(sp)
LDW r10,8(sp)
LDW r11,12(sp)
LDW r12,16(sp)
LDW r13,20(sp)
LDW r14,24(sp)
LDW r15,30(sp)
Addi sp, sp, 32
br exit_handler

handle_reverse:
Movia r7, JTAG_UART
ldwio r7,0(r7)

movi et, 0x1
wrctl ctl0, et

Addi sp, sp, -32
STW r15,28(sp)
STW r14,24(sp)
STW r13,20(sp)
STW r12,16(sp)
STW r11,12(sp)
STW r10,8(sp)
STW r9,4(sp)
STW r8,0(sp)

Movia r4, LEGO
kalla motors_backward
LDW r8,0(sp)
LDW r9,4(sp)
LDW r10,8(sp)
LDW r11,12(sp)
LDW r12,16(sp)
LDW r13,20(sp)
LDW r14,24(sp)
LDW r15,30(sp)
Addi sp, sp, 32
br exit_handler

handle_left:
Movia r7, JTAG_UART
ldwio r7,0(r7)

movi et, 0x1
wrctl ctl0, et

Addi sp, sp, -32
STW r15,28(sp)
STW r14,24(sp)
STW r13,20(sp)
STW r12,16(sp)
STW r11,12(sp)
STW r10,8(sp)
STW r9,4(sp)
STW r8,0(sp)

Movia r4, LEGO
kalla motors_turn_left
LDW r8,0(sp)
LDW r9,4(sp)
LDW r10,8(sp)
LDW r11,12(sp)
LDW r12,16(sp)
LDW r13,20(sp)
LDW r14,24(sp)
LDW r15,30(sp)
Addi sp, sp, 32
br exit_handler

handle_right:
Movia r7, JTAG_UART
ldwio r7,0(r7)

movi et, 0x1
wrctl ctl0, et

Addi sp, sp, -32
STW r15,28(sp)
STW r14,24(sp)
STW r13,20(sp)
STW r12,16(sp)
STW r11,12(sp)
STW r10,8(sp)
STW r9,4(sp)
STW r8,0(sp)

Movia r4, LEGO
kalla motors_turn_right
LDW r8,0(sp)
LDW r9,4(sp)
LDW r10,8(sp)
LDW r11,12(sp)
LDW r12,16(sp)
LDW r13,20(sp)
LDW r14,24(sp)
LDW r15,30(sp)
Addi sp, sp, 32
br exit_handler

handle_stop:
Movia r7, JTAG_UART
ldwio r7,0(r7)

movi et, 0x1 / * återaktivera avbryter * /
wrctl ctl0, et / * anger paj bit pack till 1 (aktivera inerrupts) * /

Addi sp, sp, -32
STW r15,28(sp)
STW r14,24(sp)
STW r13,20(sp)
STW r12,16(sp)
STW r11,12(sp)
STW r10,8(sp)
STW r9,4(sp)
STW r8,0(sp)
Movia r4, LEGO

Ring motors_stop / * kvitta alla motorer och inaktivera alla sensorer * /
stwio r9, 0(r2)
LDW r8,0(sp)
LDW r9,4(sp)
LDW r10,8(sp)
LDW r11,12(sp)
LDW r12,16(sp)
LDW r13,20(sp)
LDW r14,24(sp)
LDW r15,30(sp)
Addi sp, sp, 32
br exit_handler

exit_handler:
Movia r9, LEGO_Edge / * klart lego sensor kanten avtryckaren * /
stwio r0,0(r9)

LDW r8,0(sp)
LDW r9,4(sp)
LDW r10,8(sp)
LDW r11,12(sp)
LDW r12,16(sp)
LDW r13,20(sp)
LDW r14,24(sp)
LDW r15,30(sp)
Addi sp, sp, 32

LDW et, 0(sp)
LDW et, 4(sp) # Återställ ctl1, ea, et
wrctl ctl1, et
LDW ea, 8(sp)
Addi sp, sp, 12 # återställa buntpekaren
Subi ea, ea, 4 # se till att vi kör instruktionen som avbröts. EA/r29 pekar på instruktionen efter det
eret # återkomst från avbrott (detta återställer ctl0 till det? s tidigare tillstånd som har sparats i ctl1 och inte pc = ea)

Bara för att vara tydlig, med denna kod i i main.s filen nedladdningsbara på föregående sida.

Nu när avbrottet har varit tagit hand om, låt oss lägga några blinkande lysdioder, och en top funktion i C-kod till sjal den upp allt!

Se Steg
Relaterade Ämnen

Chassis de Robot con Orugas Impresas sv 3D

3D tryckt Robot Tank chassis.(Du kan hitta svenska instruktionerna nedan)Este es el primer paso para la construcción de un robot tanque (por las orugas, ingen tiene armas). De diseño abierto, y con el objetivo de que pueda ser utilizado sv aplicacion...

Android Zombiebot

Bygga denna Zombiebot som du kan fjärrstyra med Android Bluetooth-enheten. Baserat på Android Robot Controller från www.roboticintelligencesoftware.com.Steg 1: Delar som behövs Android Robot Controller leverantör: www.roboticintelligencesoftware.com...

Svärm Bots: Montering och kooperativa Transport

Hej alla,Detta instructable handlar om "Swarm Bots: montering och kooperativa Transport" i vilken vi kan bygga våra egna master och slave robot, slav kommer att följa master robot och vi kommer att kontrollera master robot med vår smartphone. De...

Barns Robot kostym med ljudeffekter, godis detektor och mer

jag gjorde min dotter denna robot kostym till halloween. Jag blev inspirerad av denna Kid Robot kostym. Jag tog mig i lite av en annan riktning och till några mer nyheter såsom lampor i antenner och öron, en big button-kontrollen med en ljudeffekt fö...

Hur man bygger robot halloween kostymer.

Dessa kostymer var ett år i vardande för brainstorming, skissa, och utforma följt av en tredagars cram session att få dem byggde i tid för vår Halloweenfest.Vi brukar alltid gå överbord för Halloween men i år tror jag vi överträffade oss själva. Dett...

Bygga Mongoose mekatronik Robot: del 1 chassi & växellåda

detta är först i en serie av illustrerade anvisningarna för montering av Mongoose Robot kit finns från blueroomelectronicsMongoose höjdpunkter:Kraftfull PIC18F2525 mikrokontroller (32KHz till 32MHz)Hårdvara PWM kontrollerad SN754410 H-Bridge med term...

Amigurumi Instructable Robot... Kär!

i detta, min allra första Instructable, jag visar dig hur man virka din egen Instructable Robot och hans kärlek-Bot!Du behöver följande:3mm virknålKamgarn vikt garn i följande färger (guld/gul, svart, rött, rosa och grå). Du behöver inte så mycket, o...

Bygga en robot Lego Multigraph

Skulle inte du njuta av att bygga och använda en robot som drar abstrakt konst kan använda i din konst och hantverk projekt? Lego Multigraph, är även om det hade inga praktiska tillämpningar, roligt både att bygga och driva! Detta är en iteration på...

30lb kämpar Robot-Nyx

jag byggde nyligen en ny 30£ kämpar robot för NERC Sportsman klassen och Dragon * Con Robot strider händelser. Detta instructable kommer att följa byggprocessen och kommer att innehålla länkar till delar leverantörer, bearbetning resurser och DXF-rit...

3D tryckt Walking Robot

Denna 3D tryckt Walking Robot är just den sak att hålla uppsikt över skrivbordet. Jag försökte hålla det så enkelt som möjligt med ett minimum av delar. Om du har några frågor på bygga, fråga bara.Njut!Vad du behöver:1Tamiya 3-växlad vev axel växellå...

6WD robot med aluminiumchassi

Syftet med detta instructable är att bygga en grundläggande, liten och mobil robot, enkel men resistenta, kunna röra sig lätt genom många ytor med precision.Efter många upplevelser, jag är i en punkt där jag tror att jag har uppnått bra resultat och...

En praktisk Robot

jag kalla det en praktisk robot för ett antal skäl. Det kan vara att använda varje dag som de flesta människor som arbetar runt huset skulle ha. Med hjälp av många överskott objekt hålls kostnaderna nere. Robot arm kan lyfta över en 2 lb objekt från...

API för en webbplats kontrolleras Robot

"Dessa material och den information som finns i detta instructable är från studenter på programvara för platser (www.softwareofplaces.com) klass vid PUC-Rio universitet. Innehållet representerade här är studentens sista projekt för klass utvärdering...

En Arduino Shield som omvandlar din Radio styrd bil till en Robot

Jag har sett en massa Instructables som beskriver hur en Radiostyrd bil kan konverteras till en robot. De flesta av dessa kräver att R/C bil mottagare styrelsen ändras så att avsnittet RF i mottagaren kringgås med vänster/höger/framåt/bakåt signalern...

Android kontrollerade Robot för nybörjare (A till Z)

Gillar du robotar? Är du ny i robotteknik? Har du tänker bygga en Robot från grunden? Om ja, är detta instructables för dig. I detta instructables jag visar dig hur du kan bygga en robot från början, jag också visa dig hur du kan kontrollera du robot...

Android G1 följetong till Arduino Robot

lära sig hur din Android mobiltelefon kan styra en robot med en Arduino ombord. Telefonen tar kommandon via telnet från en annan telefon eller en PC, så kan du fjärrstyra roboten. Detta projekt kommer annars inte ändra G1 så du kan fortsätta använda...

Arduino modulär Robot

Jag skapade detta instructable att visa min utveckling av ett modulärt arduino robot projekt för MAKEcourse vid University of South Florida (makecourse.com).Denna robot använder en 3d tryckt fall utformade i SolidWorks som använder brickor och platse...

Arduino sol spårning Robot

Detta är en enkel solar tracker som automatiskt orienterar sig mot solen eller ljusa källa av ljus som solen. Om du placerar solpaneler på denna robot kan det öka sin produktivitet med 90 till 95%. Första att skapa en sol spårning robot kan blir ljud...

Autonoma Sumo bekämpa Robot med pneumatiska Flipper - hur man

denna Sumo Bot utformad, byggdes, programmerad och testade under en 12 veckors period för en av mitt sista år engineering klasser. Syftet var att konstruera och bygga en lätt helt självständiga sumo kämpar robot för en i klassen Sumo Bot konkurrens....