Taula de continguts:
- Pas 1: provem d'escriure / llegir des de la memòria RAM
- Pas 2: informació bàsica del port
- Pas 3: vau detectar l’únic defecte del vídeo?
Vídeo: ASSEMBLEA DE BRAÇOS GPIO - T.I. KIT D'APRENENTATGE DEL SISTEMA ROBOTTIC - LAB 6: 3 Passos
2024 Autora: John Day | [email protected]. Última modificació: 2024-01-30 08:15
Hola, En un instructable anterior sobre l’aprenentatge del muntatge ARM mitjançant el Texas Instruments TI-RSLK (utilitza el microcontrolador MSP432), també conegut com Lab 3 si esteu fent el T. I. Per descomptat, vam repassar algunes instruccions molt bàsiques, com ara escriure en un registre i el bucle condicional. Hem realitzat l'execució mitjançant l'IDE Eclipse.
Els petits programes que vam executar no van fer res per interactuar amb el món exterior.
Una mica avorrit.
Intentem canviar-ho una mica avui aprenent una mica sobre els ports d’entrada / sortida, en concret, els pins GPIO digitals.
Succeeix que aquest MSP432 ve en una placa de desenvolupament que ja té dos commutadors de polsador, un LED RGB i un LED vermell, tots lligats a alguns ports GPIO.
Això significa que a mesura que aprenem a configurar i manipular aquests pins mitjançant el muntatge, podem veure visualment aquests efectes.
Molt més interessant que passar pel depurador.
(Encara anem a fer un pas, aquesta serà la nostra funció de "retard"):-D
Pas 1: provem d'escriure / llegir des de la memòria RAM
Abans de passar a accedir i controlar el GPIO, hauríem de fer un petit pas.
Comencem només llegint i escrivint a una adreça de memòria estàndard. Sabem per l’anterior Instructable (vegeu les imatges allà) que la RAM comença a 0x2000 0000, així que fem servir aquesta adreça.
Anem a moure les dades entre un registre central (R0) i 0x2000 0000.
Comencem amb una estructura de fitxers bàsica o el contingut d’un programa de muntatge. Consulteu aquesta instrucció per crear un projecte de muntatge mitjançant Code Composer Studio (CCS) de TI i alguns exemples de projectes.
.polze
.text.align 2.global main.thumbfunc main main:.asmfunc; ---------------------------------- -----------------------------------------------; (el nostre codi anirà aquí); ------------------------------------------ ---------------------------------------.endasmfunc.end
Vull afegir alguna cosa nova a la secció superior, si hi hagués algunes declaracions (directives). Es farà més clar més endavant.
ACONST.set 0x20000000; ho farem servir més avall (és una constant)
; òbviament, "0x" indica el que segueix sent un valor hexadecimal.
Per tant, el contingut inicial del fitxer inicial és així:
.polze
.text.align 2 ACONST.set 0x20000000; ho farem servir més avall (és una constant); òbviament, "0x" indica el que segueix sent un valor hexadecimal..global main.thumbfunc main main:.asmfunc; --------------------------------------- ------------------------------------------; (el nostre codi anirà aquí); ------------------------------------------ ---------------------------------------.endasmfunc.end
Ara que tenim l’anterior, afegim codi entre les línies discontínues.
Comencem per escriure a una ubicació RAM. Primer establirem el patró de dades, un valor, que escriurem a la memòria RAM. Utilitzem un registre bàsic per establir aquest valor o dades.
Nota: recordeu que al codi, qualsevol línia que tingui un punt i coma (';') significa que tot és un comentari després d'aquest punt i coma.
;-----------------------------------------------------------------------------------------------
; ESCRIPTURA; ------------------------------------------------ ----------------------------------------------- MOV R0, # 0x55; el registre principal R0 contindrà les dades que volem escriure a la ubicació de la memòria RAM.; òbviament, "0x" indica el que segueix sent un valor hexadecimal.
A continuació, fem una ullada a les afirmacions que NO funcionen.
; MOV MOV no es pot utilitzar per escriure dades en una ubicació RAM.
; MOV és només per a dades immediates al registre,; o d'un registre a un altre; és a dir, MOV R1, R0.; STR ha d'utilitzar STR.; STR R0, = ACONST; Expressió incorrecta (el '='); STR R0, 0x20000000; Mode d'adreces il·legals per a instruccions de botiga; STR R0, ACONST; Mode d’adreces il·legals per a instruccions de botiga
Sense explicar-ho massa, hem intentat utilitzar aquest "ACONST" anterior. Bàsicament, és una substitució o constant en lloc d’utilitzar un valor literal com 0x20000000.
No hem estat capaços d’escriure per escriure a la ubicació de RAM utilitzant l’anterior. Provem una altra cosa.
; sembla que hem d 'utilitzar un altre registre que contingui la ubicació de RAM a
; per emmagatzemar en aquesta ubicació RAM MOV R1, # 0x20000000; estableix la ubicació RAM (no el seu contingut, sinó la ubicació) a R1.; òbviament, "0x" indica el que segueix sent un valor hexadecimal. STR R0, [R1]; escriviu el que hi ha a R0 (0x55) a la memòria RAM (0x20000000) mitjançant R1.; fem servir un altre registre (R1) que té l'adreça d'ubicació RAM; per tal d’escriure a aquesta ubicació RAM.
Una altra manera de fer l’anterior, però utilitzant “ACONST” en lloc del valor de l’adreça literal:
; tornem a fer l'anterior, però fem servir un símbol en lloc d'un valor literal d'ubicació RAM.
; volem utilitzar "ACONST" com a substitut de 0x20000000.; encara hem de fer el "#" per significar un valor immediat; de manera que (vegeu la part superior), vam haver d’utilitzar la directiva ".set".; per demostrar-ho, canviem el patró de dades a R0. MOV R0, # 0xAA; d'acord, estem preparats per escriure a la memòria RAM utilitzant el símbol en lloc del valor d'adreça literal MOV R1, #ACONST STR R0, [R1]
El vídeo es detalla amb més detall, a més de fer un pas per la lectura des de la ubicació de la memòria.
També podeu veure el fitxer.asm d'origen adjunt.
Pas 2: informació bàsica del port
Ara que tenim una bona idea de com escriure / llegir des d'una ubicació de RAM, això ens ajudarà a entendre millor com controlar i utilitzar el pin GPIO
Llavors, com interactuem amb els pins GPIO? A partir de la nostra mirada anterior sobre aquest microcontrolador i les seves instruccions ARM, sabem com tractar els seus registres interns i sabem com interactuar amb les adreces de memòria (RAM). Però els pins GPIO?
Succeeix que aquests pins estan assignats a la memòria, de manera que podem tractar-los de la mateixa manera que les adreces de memòria.
Això significa que hem de saber quines són aquestes adreces.
A continuació es mostren les adreces inicials del port. Per cert, per al MSP432, un "port" és una col·lecció de pins i no només un pin. Si esteu familiaritzat amb el Raspberry Pi, crec que és diferent de la situació aquí.
Els cercles blaus de la imatge anterior mostren l’escriptura a la pissarra per als dos interruptors i els LED. Les línies blaves apunten als LED reals. No haurem de tocar els ponts de capçalera.
Els ports que ens preocupen els he fet en negreta a continuació.
- GPIO P1: 0x4000 4C00 + 0 (adreces parelles)
- GPIO P2: 0x4000 4C00 + 1 (adreces senars)
- GPIO P3: 0x4000 4C00 + 20 (adreces parelles)
- GPIO P4: 0x4000 4C00 + 21 (adreces senars)
- GPIO P5: 0x4000 4C00 + 40 (adreces parelles)
- GPIO P6: 0x4000 4C00 + 41 (adreces senars)
- GPIO P7: 0x4000 4C00 + 60 (adreces parelles)
- GPIO P8: 0x4000 4C00 + 61 (adreces senars)
- GPIO P9: 0x4000 4C00 + 80 (adreces parelles)
- GPIO P10: 0x4000 4C00 + 81 (adreces senars)
Encara no hem acabat. Necessitem més informació.
Per controlar un port, necessitem diverses adreces. És per això que a la llista anterior veiem "adreces parelles" o "adreces senars".
Registre d'E / S blocs d'adreces
Necessitarem altres adreces, com ara:
- Adreça del registre d'entrada del port 1 = 0x40004C00
- Adreça del registre de sortida del port 1 = 0x40004C02
- Adreça del registre de direcció del port 1 = 0x40004C04
- Port 1 Seleccioneu 0 Adreça de registre = 0x40004C0A
- Port 1 Seleccioneu 1 Adreça de registre = 0x40004C0C
I potser necessitarem d’altres.
D’acord, ara coneixem l’abast de les adreces de registre GPIO per controlar el LED vermell únic.
Una nota molt important: cada port d'E / S de la placa MSP432 LaunchPad és una col·lecció de diversos pins o línies (normalment 8), i cadascun es pot configurar individualment com a entrada o sortida.
Això vol dir, per exemple, que si definiu valors per a "Adreça de registre de direcció de port 1", us haureu de preocupar del bit (o bits) que esteu configurant o canviant en aquesta adreça. Més informació sobre això més endavant.
Seqüència de programació de ports GPIO
L’última peça que necessitem és un procés o algorisme que cal utilitzar per controlar el LED.
Inicialització única:
- Configureu P1.0 (P1SEL1REG: registre P1SEL0REG) <--- 0x00, 0x00 per a la funcionalitat GPIO normal.
- Establiu el bit de registre de direcció 1 de P1DIRREG com a sortida o HIGH.
Bucle:
Escriviu HIGH al bit 0 del registre P1OUTREG per encendre el LED vermell
- Truqueu a una funció de retard
- Escriviu BAIX al bit 0 del registre P1OUTREG per apagar el LED vermell
- Truqueu a una funció de retard
- Repetiu el bucle
Quina funció d'entrada / sortida (configureu SEL0 i SEL1)
Molts dels pins del LaunchPad tenen múltiples usos. Per exemple, el mateix pin pot ser GPIO digital estàndard, o també es pot utilitzar en comunicacions en sèrie UART o I2C.
Per utilitzar qualsevol funció específica per a aquest pin, heu de seleccionar aquesta funció. Cal configurar la funció del pin.
Hi ha una imatge superior per a aquest pas que intenta explicar aquest concepte en forma visual.
Les adreces SEL0 i SEL1 formen una combinació de parells que actuen com una mena de selecció de funcions / funcions.
Per als nostres propòsits, volem un GPIO digital estàndard per al bit 0. Això vol dir que necessitem que el bit 0 per SEL0 i SEL1 sigui BAIX.
Seqüència de programació de ports (novament)
1. Escriviu 0x00 a P1 SEL 0 Register (adreça 0x40004C0A). Això estableix un BAIX per al bit 0
2. Escriviu 0x00 a P1 SEL 1 Register (adreça 0x40004C0C). Això estableix un BAIX per al bit 0, configurant per a GPIO.
3. Escriviu 0x01 al registre DIR de P1 (adreça 0x40004C04). Això estableix un HIGH per al bit 0, que significa OUTPUT.
4. Enceneu el LED escrivint un registre de sortida 0x01 a P1 (adreça 0x40004C02)
5. Feu algun tipus de retard (o només en un sol pas durant la depuració)
6. Apagueu el LED escrivint un registre de sortida 0x00 a P1 (adreça 0x40004C02)
7. Feu algun tipus de retard (o només en un sol pas durant la depuració)
8. Repetiu els passos del 4 al 7.
El vídeo associat a aquest pas ens porta a través de tot el procés en una demostració en directe, ja que anem fent un sol pas i parlem a través de totes les instruccions de muntatge i mostrem l'acció LED. Perdoneu la durada del vídeo.
Pas 3: vau detectar l’únic defecte del vídeo?
Al vídeo que recorre tot el procés de programació i il·luminació del LED, hi havia un pas addicional al bucle principal, que es podria haver mogut fins a la inicialització única.
Gràcies per dedicar-vos el temps per passar per aquest instructiu.
La següent amplia el que hem començat aquí.
Recomanat:
FRITZ - CAP ROBOTTIC ANIMATRONNIC: 39 passos (amb imatges)
FRITZ - CAP ROBOTTIC ANIMATRONNIC: Hey, el benvingut als meus instructius que fem. Fritz: el cap robot robot animàtic. Fritz és de codi obert i increïblement increïble. Es pot utilitzar per a qualsevol cosa. cantant i molt més tot
BRAÇ ROBOTTIC Xbox 360 [ARDUINO]: BRAÇ AXIOM: 4 passos
BRAÇ ROBOTTIC Xbox 360 [ARDUINO]: BRAÇ AXIOM:
Crazy Circuits: un sistema d'aprenentatge electrònic de codi obert: 8 passos (amb imatges)
Crazy Circuits: un sistema d’aprenentatge d’electrònica de codi obert: el mercat educatiu i domèstic està inundat de sistemes d’aprenentatge d’electrònica modulars dissenyats per ensenyar a nens i adults conceptes clau STEM i STEAM. Productes com LittleBits o Snapcircuits semblen dominar totes les guies de regals o blocs de pares
PART 2 - ASSEMBLEA DE BRAÇOS GPIO - RGB - CONVOCATUNRIES DE FUNCIÓ - Interruptors: 6 passos
PART 2 - ASSEMBLEA DE BRAÇOS GPIO - RGB - TRUCS DE FUNCIÓ - Commutadors: a la primera part, vam aprendre a canviar un sol LED vermell a la placa de desenvolupament MSP432 LaunchPad de Texas Instruments, utilitzant el conjunt en lloc de C / C ++. En aquest manual, farà una cosa similar: controlar un LED RGB que també estigui en aquest sam
Kit d'aprenentatge d'electrònica de bricolatge: 5 passos
Kit d'aprenentatge d'electrònica de bricolatge: volia fer un kit d'aprenentatge d'electrònica adequat per a majors de 12 anys. No és res com els kits d'Elenco, per exemple, però es pot fer fàcilment a casa després d'una visita ràpida a una botiga de components electrònics. Aquest kit d’autoaprenentatge comença amb ed