Quadroped Robot - (montage NIOSII) (10 / 13 étapes)

Étape 10 : Être comme Kanye - interruption !

Alors maintenant, nous allons écrire ce qui est sans doute la partie la plus importante du code ; les interruptions.

Le gestionnaire d’interruption se chargera de la « réaction » à des apports extérieurs. Dans ce cas, les apports extérieurs sont des raccourcis clavier (avancer, tourner, etc.) et les capteurs tactiles. Nous voulons au robot de se déplacer vers l’avant lorsqu’il détecte une certaine touche, en arrière, d’autre part et ainsi de suite.

Alors, sans plus tarder, le gestionnaire d’interruption :

.Data
theChar : .byte ' "# le personnage qui sera envoyé. Il est lu par notre programme et écrasée par le gestionnaire d’interruption.

/ * Ceci est la fonction principale du robot Walker. */

.section .exceptions, « hache »
.Align 2

Gestionnaire :
addi sp, sp, #save ea-12, et, ctl1 sur pile
STW et, 0(sp)
rdctl HE, 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 HE, ctl4 / * vérifier l’interruption dans l’attente de Registre (ctl4) * /
Andi et, HE, LEGO_IRQ11 / * vérifier si l’interruption en attente est de GPIO JP1 * /
BNE et, r0, handle_sensor

rdctl HE, ctl4 / * vérifier l’interruption dans l’attente de Registre (ctl4) * /
Andi et, HE, LEGO_IRQ8 / * vérifier si l’interruption en attente est de JTAG UART * /
BNE et, r0, handle_JTAG

BR exit_handler

handle_sensor :
/ * Vérifier fausse interruption * /

MOVIA r2, LEGO #_IRQ11 / * charger GPIO JP1 dans r2 * /
ldwio r4, 0(r2)
SRLI r4, r4, 27
Andi r4, r4, 0x01f
cmpeqi r5, r4, 0x01f

BNE r5, r0, exit_handler / * fausse interruption * /

cmpeqi r5, r4, 0x01e / * vérifier le capteur 0 * /
BNE r5, r0, handle_sensor_left

cmpeqi r5, r4, 0x01d / * vérifier le capteur 1 * /
BNE r5, r0, handle_sensor_right

BR exit_handler

handle_JTAG :
MOVIA r7, JTAG_UART
ldwio r2, 0(r7)
Andi r13, r2, 0 x 8000 # vérifier si bit 15 est 1 (lecture valide)
BEQ r13, r0, exit_handler
Andi r2, r2, 0xff #mask octet inférieur

/ * Recherchez « w » * /
MOVIA r12, « w » # « w »
BEQ r2, r12, handle_forward

/ * Recherchez de ' * /
MOVIA r12, de ' # s
BEQ r2, r12, handle_stop

/ * Recherchez « x » * /
MOVIA r12, « x » # « x »
BEQ r2, r12, handle_reverse

/ * Recherchez « a » * /
MOVIA r12, « a » # « a »
BEQ r2, r12, handle_left

/ * vérifier pour eu ' * /
MOVIA r12,'d ' # a '
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
lightup appel

MOVIA r4, LEGO / * déplacez-y r4 LEGO pour que les fonctions motrices peuvent référencer * /

appel wall_escape_right

MOVIA r4, LEDR
appel 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 HE, 0 x 1 / * ré-activer les interruptions * /
wrctl ctl0, et / * affecte à tarte bits pack 1 (enable 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
lightup appel

MOVIA r4, LEGO / * déplacez-y r4 LEGO pour que les fonctions motrices peuvent référencer * /

appel wall_escape_left

MOVIA r4, LEDR
appel 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 HE, 0 x 1 / * ré-activer les interruptions * /
wrctl ctl0, et / * affecte à tarte bits pack 1 (enable inerrupts) * /
BR exit_handler

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

movi HE, 0 x 1 / * ré-activer les interruptions * /
wrctl ctl0, et / * affecte à tarte bits pack 1 (enable 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 / * déplacez-y r4 LEGO pour que les fonctions motrices peuvent référencer * /
appel 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 HE, 0 x 1
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
appel 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 HE, 0 x 1
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
appel 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 HE, 0 x 1
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
appel 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 HE, 0 x 1 / * ré-activer les interruptions * /
wrctl ctl0, et / * affecte à tarte bits pack 1 (enable 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

appelez le motors_stop / * partent tous les moteurs et désactiver tous les capteurs * /
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 / * effacer la gâchette de bord capteur lego * /
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) # restauration ctl1, ea, et
wrctl ctl1, et
LDW ea, 8(sp)
addi sp, sp, # 12 restaurer pointeur de pile
roukia ea, ea, 4 # Assurez-vous que nous exécutons l’instruction qui a été interrompue. EA/r29 points à l’instruction après qu’il
eret # retour d’interruption (cela il rétablit ctl0? état précédent s enregistré dans pc ctl1 et ne = ea)

Juste pour être clair, copiez le code suivant dans inclus dans le fichier main.s téléchargeable sur la page précédente.

Maintenant que l’interruption a été pris en charge, nous allons ajouter quelques clignotement de la LED et une fonction supérieure en code C pour l’envelopper tout cela !

Articles Liés

Boucliers d’attache rapide

Boucliers d’attache rapide

nous sommes Cougar robotique 4251 et c'est pour le programme de commandites de Instructables.Des protections sont un élément essentiel pour un robot concurrentiel de la FTC. Ils gardent des choses extérieures hors de votre bot et toutes vos choses à
Digilent MRK + Instructions de montage pour le Robot qui suit-ligne

Digilent MRK + Instructions de montage pour le Robot qui suit-ligne

Vue d'ensembleLe Kit de Robot à moteur Digilent suivi de ligne (ligne + MRK) fournit le point de départ parfait pour ceux nouveaux à la robotique, mais a le pouvoir de servir aux conceptions avancées et applications ainsi. Les paires MRK + ligne notr
Smart Robot Kit montage

Smart Robot Kit montage

fondamentalement un charmant assemblage requis, chômeurs rumba son pour ceux qui ne lisent pas les instructions qui ne sont pas Instructables parce que le pénis A:, B: vous ne faites pas confiance au système autant qu'un gars au hasard sur l'internet
IoT - contrôler un Robot de Pi framboise sur internet avec HTML et shell scripts seulement

IoT - contrôler un Robot de Pi framboise sur internet avec HTML et shell scripts seulement

(Si vous aimez cette Instructables, n'oubliez pas de voter à ce sujet (ci-dessus : drapeau de coin à droite). il est en concurrence sur l'INTERNET des objets et des concours d'automatisation. Merci beaucoup! ;-)Dans cette instructables, nous allons a
Robot simple Pi

Robot simple Pi

Simple Robot Pi vise à mettre contrôle robot en forme simple, la conception d'un robot est similaire à la polyvalente robot GOPIGO construit par industries dextre.La liste des piècesFramboise (1) pi (tout modèle) mais avec le récent lancement de pize
Bot de chien : Lego Robot Rover avec Webcam

Bot de chien : Lego Robot Rover avec Webcam

Voici comment faire un robot Lego, que vous pouvez contrôler de n'importe quel écran via wifi. Il a également une webcam donc vous pouvez voir où votre cours et la LED s'allume pour les yeux ! Il s'agit d'un grand projet à faire avec vos enfants car
Les tirelires robot

Les tirelires robot

Faire le robot ami, pas ennemi de robot.Faire quelque chose à compter pour garder votre petite monnaie en un seul endroit. Mettre en place pour qu'arduino, voiture d'occasion ou un collège.Réutiliser les contenants en plastique pour enregistrer vos p
Fraise de mousse robot

Fraise de mousse robot

Dans le cadre des choses pour moi et mes clients, j'ai effectuer fréquemment des tâches fastidieuses qui pourraient être automatisées. L'une d'entre elles est la coupe de feuilles de mousse en gros rouleau. Dans la photo, vous voyez le rouleau de mou
Mini Robot Platform

Mini Robot Platform

L'objectif de ce projet est de développer un châssis miniature pour expérimenter avec des robots essaim très basique. L'inspiration principale est fantastique projet MIT de James McLurkin depuis le début des années 1990 http://www.ai.mit.edu/projects
Projet de Circuit - 1er papier papier Blinky Robot

Projet de Circuit - 1er papier papier Blinky Robot

Cet amusant petit projet est une introduction rapide et bon marchée aux circuits de papier. Il utilise aussi robuste autoportante gens de papier de mon précédent ' ible (Magnet lumineux est un joyeux petit robot avec un joyeux feu rouge sur la tête.
Une main robotique modulaire & bras (avec la gamme étendue de mouvement) (3D imprimés)

Une main robotique modulaire & bras (avec la gamme étendue de mouvement) (3D imprimés)

Bonjour à tous ! Il s'agit de ma prothèse de bras et des mains de prototype que j'ai été la conception depuis plusieurs mois maintenant. C'est encore un peu d'un work in progress, et depuis que je suis en finir avec les classes de collège pour le sem
Comment faire des petits robots avec nRover Conseil

Comment faire des petits robots avec nRover Conseil

Le nRover, est une petite planche conçue pour construire des petits robots comme UGV (véhicules sans pilote au sol), suiveur de ligne ou à la domotique, il peut être contrôlé par wifi, Bluetooth ou radio de contrôle. L'objectif principal est le dével
Otto - build vous possédez robot en deux heures !

Otto - build vous possédez robot en deux heures !

Qui est Otto ?Un robot interactif que n'importe qui peut le faire !Que peut faire les Otto ?Otto promenades, danse, produit des bruits et évite les obstacles.Pourquoi est-ce que Otto a spécial ?Otto est complètement open source, compatible Arduino, 3
Enhanced Robot Spider

Enhanced Robot Spider

Je suis toujours à la recherche d'un nouveau projet de le faire à mon atelier robotique pour les enfants. Alors que les araignées robots sont intrigantes, la quasi-totalité d'entre eux sont soit trop complexes impliquant 10 + servos ou budget de mani