Բովանդակություն:
- Քայլ 1: Փորձենք գրել RAM- ից / կարդալ RAM- ից
- Քայլ 2: Որոշ հիմնական նավահանգստի տեղեկություններ
- Քայլ 3. Դուք տեսա՞ք տեսանյութի միակ թերությունը:
Video: GPIO ARM ASMBLY - T.I. ՌՈԲՈՏԻԿԱՅԻ ՀԱՄԱԿԱՐԳԻ ՈEՍՈՄԱՆ ԿԻՏ - ԼԱԲ 6: 3 քայլեր
2024 Հեղինակ: John Day | [email protected]. Վերջին փոփոխված: 2024-01-30 09:49
Բարեւ Ձեզ, Նախկին հրահանգում ՝ սովորել ARM հավաքածու ՝ օգտագործելով Texas Instruments TI-RSLK (օգտագործում է MSP432 միկրոկոնտրոլերը), որը հայտնի է որպես Lab 3, եթե դուք կատարում եք T. I. Իհարկե, մենք անցանք մի քանի շատ հիմնական հրահանգների, ինչպիսիք են `գրանցամատյանում գրելն ու պայմանական շրջանցումը: Մենք կատարեցինք միջամտությունը ՝ օգտագործելով Eclipse IDE- ն:
Մեր կատարած պատանեկան ծրագրերը ոչ մի կերպ չազդեցին արտաքին աշխարհի հետ:
Մի տեսակ ձանձրալի:
Եկեք այսօր փորձենք դա փոքր -ինչ փոխել `մի փոքր տեղեկանալով մուտքի/ելքի նավահանգիստների, մասնավորապես` թվային GPIO կապիչների մասին:
Պատահում է, որ այս MSP432- ը հայտնվում է զարգացման տախտակի վրա և արդեն ունի երկու կոճակ անջատիչ, RGB LED և կարմիր LED, որոնք բոլորը կապված են որոշ GPIO նավահանգիստների հետ:
Սա նշանակում է, որ երբ մենք սովորում ենք կարգավորել և մշակել այս կապում հավաքման միջոցով, մենք կարող ենք տեսողականորեն տեսնել այդ ազդեցությունները:
Շատ ավելի հետաքրքիր է, քան պարզապես վրիպազերծիչի միջոցով անցնելը:
(Մենք դեռ քայլ ենք անելու. Սա կլինի մեր «հետաձգման» գործառույթը):-D
Քայլ 1: Փորձենք գրել RAM- ից / կարդալ RAM- ից
Նախքան GPIO մուտք գործելը և վերահսկելը անցնելը, մենք պետք է մի փոքր քայլ անենք:
Եկեք սկսենք պարզապես կարդալ և գրել ստանդարտ հիշողության հասցեով: Նախորդ Instructable- ից (տե՛ս այնտեղ պատկերները) մենք գիտենք, որ RAM- ը սկսվում է 0x2000 0000 -ից, ուստի եկեք օգտագործենք այդ հասցեն:
Մենք պատրաստվում ենք տվյալները տեղափոխել հիմնական ռեգիստրի (R0) և 0x2000 0000 միջև:
Մենք սկսում ենք հիմնական ֆայլի կառուցվածքով կամ հավաքման ծրագրի բովանդակությամբ: Խնդրում ենք անդրադառնալ այս հրահանգին `հավաքագրման նախագիծ ստեղծելու համար` օգտագործելով TI- ի Code Composer Studio- ն (CCS) և որոշ օրինակելի նախագծեր:
. thumb
.տեքստ.հավասարեցում 2. գլոբալ հիմնական. thumbfunc հիմնական հիմնական..asmfunc; -------------------------------------- ---------------------------------------------------; (մեր կոդը կգնա այստեղ); ---------------------------------------------- ------------------------------------------.endasmfunc.ավարտ
Ես ուզում եմ վերևում ինչ -որ նոր բան ավելացնել, եթե որոշ հայտարարություններ (դիրեկտիվներ) կային: Ավելի պարզ կդառնա ավելի ուշ:
ACONST. Սահմանել 0x20000000; մենք դա կօգտագործենք ավելի ներքև (դա հաստատուն է)
; ակնհայտ է, որ «0x» նշանակում է այն, ինչ հաջորդում է ՝ վեցանկյուն արժեք:
Այսպիսով, մեր մեկնարկային ֆայլի բովանդակությունն այժմ այսպիսին է.
. thumb
.տեքստ.հավասարեցնել 2 ACONST. Set 0x20000000; մենք կօգտագործենք սա ավելի ներքև (դա հաստատուն է); ակնհայտ է, որ «0x» նշանակում է այն, ինչ հաջորդում է ՝ վեցանկյուն արժեք:. գլոբալ հիմնական.thumbfunc հիմնական հիմնական..asmfunc; --------------------------------------- ----------------------------------------------; (մեր կոդը կգնա այստեղ); ---------------------------------------------- ------------------------------------------.endasmfunc.ավարտ
Այժմ, երբ մենք ունենք վերը նշվածը, եկեք կոդ ավելացնենք գծված գծերի միջև:
Մենք սկսում ենք գրել RAM- ի վայրում: Սկզբում մենք կհաստատենք տվյալների օրինակ, արժեք, որը մենք մուտքագրելու ենք RAM- ում: Մենք օգտագործում ենք հիմնական գրանցամատյանը `այդ արժեքը կամ տվյալները հաստատելու համար:
Հիշեցում. Հիշեք, որ ծածկագրում կիսագնդ (';') ունեցող ցանկացած տող նշանակում է, որ այդ ամենը կիսակետից հետո մեկնաբանություն է:
;-----------------------------------------------------------------------------------------------
; ԳՐՈ;Մ; ---------------------------------------------------- -------------------------------------------------- MOV R0, #0x55; հիմնական գրանցամատյանը R0- ը կպարունակի այն տվյալները, որոնք մենք ցանկանում ենք գրել RAM- ի գտնվելու վայրում:; ակնհայտ է, որ «0x» նշանակում է այն, ինչ հաջորդում է ՝ վեցանկյուն արժեք:
Հաջորդը, եկեք նայենք այն հայտարարություններին, որոնք ՉԵՆ գործում:
; MOV MOV- ն չի կարող օգտագործվել տվյալներ RAM- ի վրա գրելու համար:
; MOV- ն միայն գրանցամատյանում անհապաղ տվյալների համար է. կամ մի գրանցումից մյուսը. այսինքն ՝ MOV R1, R0:; STR- ը պետք է օգտագործի STR:; STR R0, = ԴԵՄ; Վատ արտահայտություն արտահայտության մեջ (the '='); STR R0, 0x20000000; Խանութների ցուցումների անօրինական հասցեավորման ռեժիմ; STR R0, ԴԵՄ; Խանութի ուսուցման համար անօրինական հասցեավորման ռեժիմ
Առանց շատ բացատրելու, մենք փորձեցինք օգտագործել այդ «ՎԵՐԱԲԵՐՅԱԼ» -ը վերևում: Ըստ էության, դա կանգնած կամ հաստատուն է ՝ 0x20000000- ի նման բառացի արժեք օգտագործելու փոխարեն:
Մենք չկարողացանք գրել ՝ RAM- ի գտնվելու վայրը գրելու համար ՝ օգտագործելով վերը նշվածը: Եկեք ուրիշ բան փորձենք:
; թվում է, որ մենք պետք է օգտագործենք մեկ այլ ռեգիստր, որը պարունակում է RAM- ի գտնվելու վայրը
; պատվիրել RAM- ի այդ վայրում MOV R1, #0x20000000; RAM- ի վայրը (ոչ թե դրա բովանդակությունը, այլ վայրը) սահմանեք R1- ի մեջ:; ակնհայտ է, որ «0x» - ը նշանակում է, որ հաջորդը վեցանկյուն արժեք է: STR R0, [R1]; R1- ով (0x55) RAM- ում (0x20000000) գրեք R1- ի միջոցով:; մենք օգտագործում ենք մեկ այլ գրանցամատյան (R1), որն ունի RAM տեղադրության հասցե; RAM- ի այդ վայրը գրելու համար:
Վերոնշյալը կատարելու մեկ այլ եղանակ, բայց բառացի հասցեի արժեքի փոխարեն «ACONST» օգտագործելը.
; եկեք նորից անենք վերը նշվածը, բայց եկեք RAM- ի բառացի տեղակայման արժեքի փոխարեն օգտագործենք խորհրդանիշ:
; մենք ցանկանում ենք օգտագործել «ACONST»-ը որպես stand-in 0x20000000- ի համար:; մենք դեռ պետք է անենք «#» ՝ անմիջական արժեք նշանակելու համար, Այսպիսով (տե՛ս վերևում), մենք ստիպված էինք օգտագործել «.set» հրահանգը:; սա ապացուցելու համար եկեք փոխենք տվյալների օրինակը R0- ում: MOV R0, #0xAA; լավ, մենք պատրաստ ենք RAM- ին գրել խորհրդանիշի միջոցով ՝ MOV R1, #ACONST STR R0, [R1] բառացի հասցեի արժեքի փոխարեն:
Տեսանյութը մանրամասնվում է, ինչպես նաև ընթերցում է հիշողության վայրից:
Կարող եք դիտել նաև կցված աղբյուրը.asm ֆայլը:
Քայլ 2: Որոշ հիմնական նավահանգստի տեղեկություններ
Այժմ, երբ մենք լավ պատկերացում ունենք, թե ինչպես գրել / կարդալ RAM- ի գտնվելու վայրից, դա կօգնի մեզ ավելի լավ հասկանալ, թե ինչպես վերահսկել և օգտագործել GPIO- ի քորոցը
Այսպիսով, ինչպես ենք մենք փոխազդում GPIO կապում: Այս միկրոկառավարիչի և դրա ARM հրահանգների մեր նախորդ հայացքից մենք գիտենք, թե ինչպես վարվել դրա ներքին գրանցամատյանների հետ և գիտենք, թե ինչպես փոխազդել հիշողության (RAM) հասցեների հետ: Բայց GPIO կապում?
Պատահում է, որ այդ կապումներն են հիշողության քարտեզագրված, այնպես որ մենք կարող ենք նրանց վերաբերվել գրեթե նույն կերպ, ինչպես հիշողության հասցեները:
Սա նշանակում է, որ մենք պետք է իմանանք, թե որոնք են այդ հասցեները:
Ստորև բերված են նավահանգստի մեկնարկային հասցեները: Ի դեպ, MSP432- ի համար «նավահանգիստը» կապերի հավաքածու է, և ոչ միայն մեկ կապում: Եթե դուք ծանոթ եք Raspberry Pi- ին, ես կարծում եմ, որ այն տարբերվում է այստեղի իրավիճակից:
Վերոնշյալ պատկերի կապույտ շրջանակները ցույց են տալիս գրությունը տախտակի վրա երկու անջատիչների և LED- ների համար: Կապույտ գծերը մատնանշում են իրական LED- ները: Մենք ստիպված չենք լինի դիպչել գլխի թռիչք կատարողներին:
Ես այն նավահանգիստները, որոնք մեզ մտահոգում են, ստորև գրել եմ համարձակ:
- GPIO P1: 0x4000 4C00 + 0 (նույնիսկ հասցեներ)
- GPIO P2: 0x4000 4C00 + 1 (կենտ հասցեներ)
- GPIO P3: 0x4000 4C00 + 20 (նույնիսկ հասցեներ)
- GPIO P4: 0x4000 4C00 + 21 (կենտ հասցեներ)
- GPIO P5: 0x4000 4C00 + 40 (նույնիսկ հասցեներ)
- GPIO P6: 0x4000 4C00 + 41 (կենտ հասցեներ)
- GPIO P7: 0x4000 4C00 + 60 (նույնիսկ հասցեներ)
- GPIO P8: 0x4000 4C00 + 61 (կենտ հասցեներ)
- GPIO P9: 0x4000 4C00 + 80 (նույնիսկ հասցեներ)
- GPIO P10: 0x4000 4C00 + 81 (կենտ հասցեներ)
Մենք դեռ չենք ավարտել: Մեզ ավելի շատ տեղեկություններ են պետք:
Պորտը վերահսկելու համար մեզ պետք են մի քանի հասցեներ: Ահա թե ինչու վերը նշված ցուցակում մենք տեսնում ենք «զույգ հասցեներ» կամ «կենտ հասցեներ»:
I/O Գրանցել հասցեի բլոկներ
Մեզ անհրաժեշտ կլինեն այլ հասցեներ, ինչպիսիք են ՝
- Պորտ 1 Մուտքային գրանցամատյանի հասցեն = 0x40004C00
- Պորտ 1 Ելքային գրանցման հասցե = 0x40004C02
- Նավահանգիստ 1 Ուղղություն Գրանցման հասցե = 0x40004C04
- Պորտ 1 Ընտրեք 0 Գրանցման հասցե = 0x40004C0A
- Պորտ 1 Ընտրեք 1 Գրանցման հասցե = 0x40004C0C
Եվ մենք կարող ենք ուրիշների կարիքը ունենալ:
Լավ, մենք այժմ գիտենք GPIO գրանցամատյանների հասցեների տիրույթը `մեկ կարմիր LED- ը վերահսկելու համար:
Շատ կարևոր նշում. MSP432 LaunchPad տախտակի յուրաքանչյուր մուտքի/ելքային նավահանգիստ մի քանի (սովորաբար 8) կապումներից կամ տողերից է, և յուրաքանչյուրը կարող է առանձին սահմանվել որպես մուտք կամ ելք:
Սա նշանակում է, օրինակ, որ եթե դուք արժեքներ եք սահմանում «Պորտ 1 ուղղության գրանցման հասցեի» համար, ապա ձեզ պետք է մտահոգի, թե որ բիթը (կամ բիթերն) եք սահմանում կամ փոխում այդ հասցեում: Այս մասին ավելի ուշ:
GPIO նավահանգստի ծրագրավորման հաջորդականություն
Վերջնական կտորը, որը մեզ պետք է, գործընթաց կամ ալգորիթմ է, որն օգտագործվում է ՝ LED- ը վերահսկելու համար:
Մեկանգամյա նախաստորագրում.
- Կարգավորեք P1.0 (P1SEL1REG: P1SEL0REG Register) <--- 0x00, 0x00 նորմալ GPIO ֆունկցիոնալության համար:
- P1DIRREG- ի ուղղության գրանցամատյան 1 բիթը թողարկեք որպես ելք կամ բարձր:
Օղակ:
Կարմիր LED- ը միացնելու համար P1OUTREG գրանցամատյանի 0 բիթին գրեք HIGH
- Callանգահարեք հետաձգման գործառույթ
- Կարմիր LED- ն անջատելու համար P1OUTREG գրանցամատյանի 0 բիթին գրեք LOW
- Callանգահարեք հետաձգման գործառույթ
- Կրկնել հանգույցը
Մուտքի / ելքի ո՞ր գործառույթն է (կազմաձևել SEL0 և SEL1)
LaunchPad- ի քորոցներից շատերն ունեն բազմակի օգտագործումներ: Օրինակ, նույն քորոցը կարող է լինել ստանդարտ թվային GPIO, կամ այն կարող է օգտագործվել նաև UART կամ I2C սերիական հաղորդակցության մեջ:
Այդ քորոցի համար որևէ հատուկ գործառույթ օգտագործելու համար անհրաժեշտ է ընտրել այդ գործառույթը: Դուք պետք է կազմաձևեք քորոցի գործառույթը:
Այս քայլի վերևում կա մի պատկեր, որը փորձում է բացատրել այս հասկացությունը տեսողական տեսքով:
SEL0 և SEL1 հասցեները կազմում են զույգ համադրություն, որը հանդես է գալիս որպես գործառույթների / գործառույթների ընտրության տեսակ:
Մեր նպատակների համար մենք ցանկանում ենք ստանդարտ թվային GPIO բիթ 0 -ի համար: Սա նշանակում է, որ մեզ անհրաժեշտ է 0 բիթ SEL0- ի և SEL1- ի համար LԱOWՐ:
Պորտի ծրագրավորման հաջորդականություն (կրկին)
1. Գրել 0x00 P1 SEL 0 Գրանցվել (հասցե 0x40004C0A): Սա 0 բիթի համար սահմանում է OWԱOWՐ
2. Գրեք 0x00 P1 SEL 1 Գրանցամատյանում (հասցե 0x40004C0C): Սա 0 -ի համար սահմանում է OWԱOWՐ, GPIO- ի համար:
3. Գրեք 0x01 P1 DIR գրանցամատյանում (հասցե 0x40004C04): Սա 0 -ի բիթի համար սահմանում է HIGH, ինչը նշանակում է ԵԼՔ:
4. Միացրեք LED- ը ՝ գրելով 0x01 P1 OUTPUT Register (հասցե 0x40004C02)
5. Կատարեք ինչ-որ հետաձգում (կամ պարզապես մեկ քայլ ՝ կարգաբերման ընթացքում)
6. Անջատեք LED- ը ՝ գրելով 0x00 P1 OUTPUT գրանցամատյանում (հասցե 0x40004C02)
7. Կատարեք ինչ-որ հետաձգում (կամ պարզապես մեկ քայլ ՝ կարգաբերման ընթացքում)
8. Կրկնեք 4 -ից 7 -րդ քայլերը:
Այս քայլի հետ կապված տեսանյութը մեզ տանում է ողջ գործընթացի միջոցով ՝ ցուցադրական ցուցադրման միջոցով, քանի որ մենք մեկ քայլով անցնում և խոսում ենք հավաքման յուրաքանչյուր հրահանգի միջոցով և ցուցադրում LED- ի գործողությունը: Խնդրում ենք ներել տեսանյութի երկարությունը:
Քայլ 3. Դուք տեսա՞ք տեսանյութի միակ թերությունը:
Տեսանյութում, որն անցնում է LED- ի ծրագրավորման և լուսավորման ամբողջ գործընթացով, հիմնական հանգույցում կար լրացուցիչ քայլ, որը կարող էր տեղափոխվել մինչև միանգամյա սկզբնականացում:
Շնորհակալություն այս Ուղեցույցի միջոցով անցնելու համար ժամանակ հատկացնելու համար:
Հաջորդը կընդլայնի այն, ինչ մենք սկսել ենք այստեղ:
Խորհուրդ ենք տալիս:
Ձեր սեփական ֆոտովոլտային 5V համակարգի պատրաստում. 4 քայլ (նկարներով)
Ձեր սեփական ֆոտովոլտային 5 վ համակարգ. Եվ Boost փոխարկիչը 3.7 Վ մարտկոցի համար 5 Վ USB ելքի համար անհրաժեշտ 5 Վ սարքերի համար: Նման է Օրիգինալ համակարգին, որն օգտագործում է Կապարաթթու մարտկոցը որպես էներգիայի պահպանման լիցք
Ինչպես օգտագործել Raspberry Pi- ի GPIO կապումներն ու Avrdude- ը Bit-bang- ծրագրով DIMP 2 կամ DA PIMP 2: 9 քայլեր
Ինչպես օգտագործել Raspberry Pi- ի GPIO կապումներն ու Avrdude- ը Bit-bang- ծրագրում DIMP 2 կամ DA PIMP 2. Սրանք քայլ առ քայլ հրահանգներ են, թե ինչպես օգտագործել Raspberry Pi և անվճար բաց կոդով հրամանը bit-bang -ծրագիր DIMP 2 կամ DA PIMP 2. Ենթադրում եմ, որ դուք ծանոթ եք ձեր Raspberry Pi- ին և LINUX հրամանի տողին: Պետք չէ
Միջքաղաքային փոխանցման համակարգի միացում `6 քայլ
Երկար հեռավորությունների փոխանցման համակարգի միացում. Այսօր այս հոդվածում մենք կխոսենք այն մասին, թե ինչպես կարելի է կատարել հիմնական հեռավորությունների հաղորդման համակարգի միացում: Այս գծերի համաձայն, թույլ տվեք ձեզ ներկայացնել սխեմայի հակիրճ պատկերը: Ընդհանրապես, ինչպես է դա գործում և ինչպես եմ ես ձեզ հետ խոսում իրերի մասին
NVR ընտրանքներ DIY տնային հսկողության համակարգի համար. 3 քայլ
NVR ընտրանքներ DIY տնային հսկողության համակարգի համար. Այս շարքի 3 -րդ մասում մենք գնահատում ենք NVR ընտրանքները ինչպես Raspberry Pi- ի, այնպես էլ Windows համակարգչի համար: Մենք փորձարկում ենք MotionEye OS- ն Raspberry Pi 3-ի վրա և այնուհետև նայում ենք iSpy- ին, որը առաջատար, բաց կոդով, տեսահսկման և անվտանգության լուծում է:
Robotic Arm with Zio Modules Մաս 2: 11 Քայլեր
Robotic Arm With Zio մոդուլներ Մաս 2: Այսօրվա ձեռնարկում մենք կօգտագործենք բոլոր 4 սերվերը և PS2 անլար վերահսկիչը `ռոբոտացված թևը վերահսկելու համար: Այս բլոգային գրառումը Zio Robotics Series- ի մի մասն է: Ներածություն Մեր նախորդ բլոգում մենք տեղադրեցինք 1 -ին մասը ձեռնարկ, թե ինչպես վերահսկել Robotic Ar