Quadroped Robot - (NIOSII assemblage) (10 / 13 stap)

Stap 10: Worden als Kanye - INTERRUPT!

Dus nu schrijven we wat is misschien wel het belangrijkste onderdeel van het Wetboek; de interrupts.

De interrupt handler zorgt voor de 'reactie' op de externe ingangen. In dit geval zijn de externe ingangen toetsopdrachten (vooruit, beurt, enz.) en de touch sensoren. Wij willen de robot om te verplaatsen naar voren wanneer het detecteert een bepaalde sleutel, achteruit voor een ander, enzovoort.

Dus, zonder verdere omhaal, de interrupt handler:

.data
TheChar: .byte ' ' # het teken dat wordt verzonden. Het is gelezen door ons programma en wordt overschreven door de interrupt handler.

/ * Dit is de belangrijkste functie van de Walker robot. */

.section .exceptions, "ax"
.align 2

handler:
Addi sp, sp-12 #save ea, et, ctl1 op stapel
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 / * controleren de interrupt in afwachting van register (ctl4) * /
Andi et, et, LEGO_IRQ11 / * controleren of de wachtende interrupt van GPIO JP1 is * /
BNE et, r0, handle_sensor

rdctl et, ctl4 / * controleren de interrupt in afwachting van register (ctl4) * /
Andi et, et, LEGO_IRQ8 / * controleren of de wachtende interrupt van JTAG UART is * /
BNE et, r0, handle_JTAG

BR exit_handler

handle_sensor:
/ * Controleren voor valse interrupt * /

movia r2, LEGO #_IRQ11 / * GPIO JP1 in r2 laden * /
ldwio r4, 0(r2)
srli r4, r4, 27
Andi r4, r4, 0x01f
cmpeqi r5, r4, 0x01f

BNE r5, r0, exit_handler / * valse interrupt * /

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

cmpeqi r5, r4, 0x01d / * controleren 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 # Controleer of bit 15 1 (Lees geldig)
dustybear r13, r0, exit_handler
Andi r2, r2, 0xff #mask lagere byte

/ * controleren voor 'w' * /
movia r12, 'w' #' w'
dustybear r2, r12, handle_forward

/ * controleren voor de ' * /
movia r12, de ' # 's'
dustybear r2, r12, handle_stop

/ * controleren voor 'x' * /
movia r12, 'x' #' x'
dustybear r2, r12, handle_reverse

/ * controleren voor 'a' * /
movia r12, 'a' #' a'
dustybear r2, r12, handle_left

/ * controleren want had' * /
movia r12, 'd' #had '
dustybear 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
oproep lichtgevend

movia r4, LEGO / * LEGO gaan met r4, zodat motorische functies kunnen verwijzing * /

oproep wall_escape_right

movia r4, LEDR
oproep 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 / * opnieuw inschakelen interrupts * /
wrctl ctl0, et / * PIE bits pack ingesteld op 1 (inschakelen 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
oproep lichtgevend

movia r4, LEGO / * LEGO gaan met r4, zodat motorische functies kunnen verwijzing * /

oproep wall_escape_left

movia r4, LEDR
oproep 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 / * opnieuw inschakelen interrupts * /
wrctl ctl0, et / * PIE bits pack ingesteld op 1 (inschakelen inerrupts) * /
BR exit_handler

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

movi et, 0x1 / * opnieuw inschakelen interrupts * /
wrctl ctl0, et / * PIE bits pack ingesteld op 1 (inschakelen 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 / * LEGO gaan met r4, zodat motorische functies kunnen verwijzing * /
oproep 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
oproep 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
oproep 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
oproep 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 / * opnieuw inschakelen interrupts * /
wrctl ctl0, et / * PIE bits pack ingesteld op 1 (inschakelen 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

Bel motors_stop / * alle motoren verrekening in- en uitschakelen van alle sensoren * /
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 / * duidelijk de lego sensor rand trigger * /
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) # herstellen ctl1, ea, et
wrctl ctl1, et
LDW ea, 8(sp)
Addi sp, sp, 12 # herstellen stack pointer
Subi ea, ea, 4 # Controleer of we uitvoeren van de instructie die werd onderbroken. EA/r29 verwijst naar de instructie na het
eret # terugkeer uit interrupt (dit herstelt u ctl0 het? s vorige staat, dat is opgeslagen in ctl1 en doet pc = ea)

Gewoon om duidelijk te zijn, deze code in opgenomen in het main.s bestand downloadbaar op de vorige pagina.

Nu de interrupt heeft zijn verzorgd, laten we toevoegen sommige knipperende LED's, en een top functie in C-code om het te verpakken alle up!

Gerelateerde Artikelen

Valerobot assemblage robot tuturial

Valerobot assemblage robot tuturial

gelukkig Nieuwjaar! nu ook kunt u uw eigen assemblage robot met plastic objecten gevonden rondom uw huis. de hemel is de limiet. gebruik van elke soort kunststof of objecten gevonden. Legos worden gebruikt voor de armen en benen, maar gebruik je fant
Hoe maak je kleine robots met nRover bestuur

Hoe maak je kleine robots met nRover bestuur

De nRover, is een kleine bord gemaakt om te bouwen van kleine robots zoals UGV (onbemande ground voertuigen), lijn volgeling of Domotica, het kan worden gecontroleerd door wifi, Bluetooth en radio-controle. Het belangrijkste doel is de ontwikkeling v
Bedfellow Robot Bed

Bedfellow Robot Bed

Bedfellow is een autonome robot bed dat nieuwe engagementen opzoekt. Met andere woorden, heb ik robotized mijn persoonlijke bed om te socialiseren en zich met anderen te delen.Misschien een beetje meer van een toelichting is in orde. Een bedfellow ka
Bouwen van een robot van Lego-Multigraph

Bouwen van een robot van Lego-Multigraph

Niet zou u genieten van gebouw en met behulp van een robot die vestigt de abstracte kunst te gebruiken in uw kunst en ambachtelijke projecten? De Lego-Multigraph, is zelfs als er geen praktische toepassingen, leuk om te bouwen en te bedienen! Dit is
Arduino-Controlled Robotic Drum

Arduino-Controlled Robotic Drum

Jarenlang die ik heb verteld wie dat luistert ging ik om te bouwen van een robot trommel. De meeste mensen soort onverschillig haalde. Zelfs als ik het gebouwd, de meeste mensen soort het keek en overgebracht doubtfulness. Het leek niemand maar zelf
Robot

Robot

Hoe ik het notswatbot gebouwdIk begon met een militaire overtollige behuizing, geschuurd en geschilderd het met krylon rimpel afwerking. De track systeem samengesteld aangepaste uit delen gevonden op Ebay, sommige lynxmotion tracks. (hubs moest worde
Spark-e - een vonk kern + Touch OSC gecontroleerd Wall-e speelgoed robot conversie

Spark-e - een vonk kern + Touch OSC gecontroleerd Wall-e speelgoed robot conversie

Als het gaat om leuke robots, 's de instructables robot wordt boven aan de lijst natuurlijk, de tweede meest bekende got to be Pixar Wall-e. Wie zou niet willen dat een van deze kleine jongens rennende rond uw huis schoonmaken van uw afval voor u? No
Gyroscoop gecontroleerd Robot

Gyroscoop gecontroleerd Robot

Hallo iedereenVandaag ga ik maken dat kan worden aangestuurd via GSM gyroscope.we zijn met behulp van bluetooth als het aansluiten van medium.laten we beginnen...Stap 1: Dingen die je zal nodig chasis.2 motoren en wielen.1 caster wiel.schroevendraaie
First Person View RC Robot!

First Person View RC Robot!

We deze kleine RC robot dit jaar voor de eerste Ohio State University MAKEathon gemaakt. We bepaald dat we wilden een robot FPV vóór de wedstrijd, maar de concept-generatie, modelleren, codering, bedrading, printen en monteren alle vond plaats op de
Opnieuw een koele oude Robot

Opnieuw een koele oude Robot

Voldoen aan Arlan, een leuke robot met een heleboel van de persoonlijkheid. Hij woont in mijn zus haar klas (ze is een 5e rang wetenschap leraar). Ik herbouwd hem tot de mascotte voor haar klasse robotica team, hij is ook de helper van de klas. De ki
Arduino Powered Nixie buizen: ArduiNIX Nixie stuurprogramma schild assemblage

Arduino Powered Nixie buizen: ArduiNIX Nixie stuurprogramma schild assemblage

www.ArduiNIX.com presenteert: ArduiNIX Nixie stuurprogramma schild assemblageHet schild van de ArduiNIX is een gebruiker programmeerbare platform voor het rijden multiplexed Nixie-buis of andere hoogspanning displays **. De ArduiNIX is opensource har
Ada Robotic Hand - Open Bionics

Ada Robotic Hand - Open Bionics

Dit is een stap voor stap handleiding over hoe te een Open Bionics Ada robotic handmaken. Dit is afgeleid van de Dextrus robotic hand, door het Open Hand Project. Het wordt verondersteld u hebt besteld het Ada robotic hand kit of toegang hebben tot e
Hugbot - een zachte Robot die kleine knuffels geeft

Hugbot - een zachte Robot die kleine knuffels geeft

Hugbot is een zachte robot waardoor kleine knuffels. Haar armen zijn gemaakt van aangepaste 3D gedrukte wervels en gedreven door visserij draad dat is schroefdraad door middel van de wervels te stappenmotoren gecontroleerd door een Arduino in haar li
Een Arduino-schild dat uw Radio converteert Controlled auto in een Robot

Een Arduino-schild dat uw Radio converteert Controlled auto in een Robot

Ik heb een heleboel Instructables die beschrijven hoe een radio-gecontroleerde auto kan worden geconverteerd naar een robot. De meeste van deze vereisen dat de R/C auto's ontvanger bestuur worden gewijzigd zodat de RF-sectie van de ontvanger met de l