Мазмуну:
- 1 -кадам: Келгиле, дароо секирели
- 2 -кадам: Кодду жакшыртуу - Функцияны кошуу
- 3-кадам: Busy-Loop Delay кошуу
- 4 -кадам: ARM архитектурасы процедурасы Call Standard (AAPCS)
- 5 -кадам: Параметр менен иштөө - Киргизилген функциялар
- 6 -кадам: GPIO киргизүү - которгучтарды кошуу
Video: 2 -БӨЛҮМ - GPIO ARM ASBEBLY - RGB - FUNCTION CALLS - Коммутаторлор: 6 кадам
2024 Автор: John Day | [email protected]. Акыркы өзгөртүү: 2024-01-30 10:41
1 -бөлүктө, C / C ++ ордуна ассемблерди колдонуп, Texas Instruments компаниясынан MSP432 LaunchPad өнүктүрүү тактасындагы бир кызыл LEDди кантип алмаштырууну үйрөндүк.
Бул Нускамада биз дагы ушундай нерсени жасайбыз - ошол эле тактада турган RGB LEDди көзөмөлдөө.
Жолдо, биз кээ бир светодиоддорду жарыктандырып эле койбостон, ARMди чогултуу боюнча билимибизди андан ары өнүктүрөбүз деп үмүттөнөбүз.
1 -кадам: Келгиле, дароо секирели
Чынында эле, биринчи видео баарын айтып турат. Кошумча көп эмес.
Мунун негизги мааниси - MSP432деги ар бир киргизүү -чыгаруу порту "регистр" даректеринин блогунан турат, алар өз кезегинде ар бири бир нече биттерден турат деген ойду үйгө жеткирүү.
Мындан тышкары, биттер ортогоналдык түрдө топтолгон. Башкача айтканда, ар бир регистр дарегинин 0 бити ошол эле тышкы I/O пинине тиешелүү.
Бир эле бит же пин менен бир нерсе кылуу үчүн, ошол порт үчүн бир нече регистрдик даректер керек деген ойду кайталадык.
Бирок, бул учурда, биз RGB LED менен иштеп жаткандыктан, ар бир реестр дареги үчүн үч бит менен иштешибиз керек.
Биз бир нече реестрге муктаж экенибизди бекемдедик: DIR реестри, SEL0 реестри, SEL1 реестри жана OUTPUT реестри. Жана ар бир жолу үч бит.
2 -кадам: Кодду жакшыртуу - Функцияны кошуу
Жогорудагы кадамда көргөнүңүздөй, программанын негизги циклинде көп жолу кайталанган код болгон, тактап айтканда, биз светодиоддорду өчүргөндө.
Ошентип, биз программага функция кошо алабыз. Биз дагы эле бул функцияны LED ди өчүргүбүз келген сайын чакырышыбыз керек, бирок бул кээ бир коддордун бир билдирүүгө кулашына алып келет.
Эгерде биздин LED өчүрүү коду дагы көптөгөн көрсөтмөлөргө көбүрөөк тартылганда, бул чыныгы эстутумду үнөмдөөчү болмок.
Камтылган программалоонун жана микро контроллерлердин бир бөлүгү программанын өлчөмү жөнүндө көбүрөөк билишет.
Видео түшүндүрөт.
Негизинен, биз негизги кодубузга бутактанган билдирүүнү кошобуз жана бизде дагы бир код блогу бар, ал биз бутактап жаткан функция. Анан бүткөндөн кийин же функциянын аягында биз негизги программанын ичиндеги кийинки билдирүүгө кайтабыз.
3-кадам: Busy-Loop Delay кошуу
Коддун Декларациялар бөлүмүндө, керектүү убакыт үчүн твитти оңой кылуу үчүн туруктуу кошуңуз:
; чекиттен кийин каалаган сөздөр (';') комментарийди баштайт.
; бул бөлүктөгү код мааниге ат берет.; Сиз дагы ".equ" колдонсоңуз болмок, бирок алар бир аз башкача.; '.equ' (менимче) өзгөртө албайт, ал эми '.set' сиз кыла аласыз дегенди билдирет; Кааласаңыз, кийинчерээк коддо 'DLYCNT' маанисин өзгөртүңүз.; 'DLYCNT' кечигүү программасында кайра саноо мааниси катары колдонулат. 0x30000. DLYCNT
Жаңы кечигүү функциясын кошуңуз:
кечигүү:.asmfunc; "кечиктирүү" кичи программасынын же функциясынын башталышы.
MOV R5, #DLYCNT; жүктөө негизги cpu реестри R5 'DLYCNT' үчүн дайындалган. dlyloop; бул кечигүү циклинин башталышын билдирет. Ассемблер дарегин аныктайт. SUB R5, #0x1; негизги CPU R5 учурдагы маанисинен 1ди алып салуу. CMP R5, #0x0; R5теги учурдагы маанини 0 менен салыштырыңыз. BGT dlyloop; эгерде R5теги мааниси 0 чоң болсо, 'dlyloop' (дареги) деп белгилөө. BX LR; эгер биз бул жерге жеткен болсок, анда R5 мааниси 0. подпрограммадан кайтуу дегенди билдирет..endasmfunc; подпрограмманы аяктоону белгилейт.
Андан кийин негизги денеде, негизги циклдин ичинде, кечигүү функциясын чакырыңыз же чакырыңыз:
; бул негизги бөлүктүн же негизги функциянын код фрагменти ('main.asm' файлын караңыз).
; бул "негизги" цикл жана биз жаңы "кечиктирүү" функциясын кантип чакыраарыбызды же колдоноорубузду көрсөтөт.; '#REDON' жана '#GRNON' дагы декларациялар (константалар) болуп саналат ('main.asm' чокусун караңыз).; алар RGB LEDдин түсүн коюунун оңой жолу. цикл MOV R0, #КЫЗЫЛ; Кызыл - негизги RP регистрин коюңуз 'REDON' дайындалган. STRB R0, [R4]; негизги регистр R4 мурда GPIO чыгаруу дареги менен коюлган.; R0де эмне бар экенин R4 тарабынан көрсөтүлгөн дарекке жазыңыз. BL кечигүүсү; жаңы "кечигүү" функциясына өтүү. BL ledsoff; мурунтан бар болгон 'ledsoff' функциясына бутак. BL кечигүүсү; MOV R0, #GRNON; Жашыл - дал ушундай STRB R0, [R4]; жана башка. BL кечигүү BL ledsoff BL кечигүү
Видео майда -чүйдөсүнө чейин айтылат.
4 -кадам: ARM архитектурасы процедурасы Call Standard (AAPCS)
Балким, бир нерсени таанытуу үчүн жакшы учур. Бул ассамблея тилиндеги конвенция. Ошондой эле ARM архитектурасынын процедуралык чалуу стандарты деп аталат.
Мында көп нерсе бар, бирок бул жөн эле стандарт. Бул бизди монтаждоо программалоосун үйрөнүүгө тоскоолдук кылбайт жана биз үйрөнүп жаткан кээ бир түшүнүктөрдү ыңгайлуу сезгенден кийин, биз ошол стандарттын бөлүктөрүн кабыл ала алабыз.
Болбосо, биз чоң суу түтүгүнөн ичип жаткандай сезимде болушубуз мүмкүн. Өтө көп маалымат.
Негизги реестрлер
Биз MSP432дин негизги реестрлери менен тааныш болгондуктан, эми бул стандарттардын айрымдарын кабыл алууга аракет кылалы. Биз кийинки функцияны жазганда (LEDди күйгүзүү / өчүрүү) буга ылайык келебиз.
1) Биз функцияны параметр катары R0 колдонушубуз керек. Эгерде биз функцияны (подрограмманы) баалоону өткөргүбүз келсе, анда биз R0 колдонушубуз керек.
2) Биз Шилтеме Реестрин максаттуу түрдө колдонушубуз керек - ал чакан программа аяктагандан кийин кайда кайрылуу керек экенин көрсөткөн даректи камтыйт.
Муну кантип колдоноорубузду көрөсүз.
5 -кадам: Параметр менен иштөө - Киргизилген функциялар
Биз кайталанган бөлүмдөрдү бир функцияга бириктирүү менен кодубузду тазалап, эс тутумунун көлөмүн азайта алабыз. Негизги укуруктун бир гана айырмасы, биз параметрге муктажбыз, ошондуктан биз RGB LEDин көргүбүз келген ар кандай түстөрдү өткөрүп бере алабыз.
Чоо -жайын билүү үчүн видеону карап көрүңүз. (узундугу үчүн кечирим сурайм)
6 -кадам: GPIO киргизүү - которгучтарды кошуу
Келгиле, аны кызыктуу кылалы. Биздин монтаждоо программасына бир аз которуштурууну кошууга убакыт келди.
Бул Нускамада эки борттогу которгучтар MSP432ге кантип туташканын көрсөткөн сүрөттөр бар.
Негизинен: 1 -которуштуруучу (SW1 же S1) P1.1ге, 2 -которуу (SW2 же S2) P1.4 менен туташкан.
Бул нерселерди бир аз кызыктуу кылат, анткени биз чыгымдардын ордуна кириштер менен алектенип жатабыз, бирок бул эки коммутатор бир эле кызыл LED сыяктуу эле бир эле реестрдин дареги блогунун эки битин ээлеп алгандыктан.
Биз бул Нускамада жалгыз кызыл LEDди которуштуруу менен алектендик, андыктан өчүргүчтөрдү иштетүү үчүн кодду кошушубуз керек.
Порт 1 Каттоо дареги
Буларды мурунку Нускамада караганыбызды унутпаңыз, бирок жаңысын киргизишибиз керек:
- Порт 1 киргизүү регистринин дареги = 0x40004C00
- Порт 1 Чыгуу Реестринин дареги = 0x40004C02
- Порт 1 Багыты Каттоо дареги = 0x40004C04
- Port 1 Resistor Enable Register address = 0x40004C06
- Порт 1 0 Каттоо дарегин тандоо = 0x40004C0A
- Порт 1 Тандоо 1 Каттоо дареги = 0x40004C0C
Портторду киргизүү катары колдонууда MSP432дин ички тартма же ылдый каршылыгын колдонуу жакшы.
Launchpad өнүгүү тактасы эки которгучту жерге туташтыргандыктан (басылганда ТӨМӨН), демек, алар басылбаган кезде катуу БИЙИК экенибизге ынануу үчүн UP каршылыгын колдонушубуз керек.
Резисторлорду өйдө / ылдый түшүрүү
Порт-1 реестрине эки башка дарек керек, бул которуштуруучу материалдарды каршылык резисторлоруна байлоо.
1) Port 1 Resistor-Enable реестрин колдонуңуз (0x40004C06), сиз резисторлорду каалаарыңызды көрсөтүү үчүн (бул эки бит үчүн), 2), андан кийин Порт 1 Чыгуу реестрин (0x40004C02) колдонуп, резисторлорду тартуучу же түшүрүү катары коюңуз. Чыгуу реестри дээрлик эки максатка ээ.
Ошентип, башка жол менен кайталап айтуу үчүн, Чыгаруу реестри чыгууга ЖОГОРУ же ТӨМӨН жөнөтө алат (мисалы, бир кызыл LED), жана / же ал кириш үчүн өйдө же ылдый каршылыктарды орнотуу үчүн колдонулат., БИРОК, эгерде бул функция Resistor-Enable реестри аркылуу иштетилген болсо.
Жогорудагы маанилүү-кандайдыр бир чыгаруу битине LOW же HIGH жөнөтүүдө/орнотууда, сиз бир эле учурда киргизүү биттеринин тартылуу/түшүү абалын сактап калышыңыз керек болот.
(видео түшүндүрүүгө аракет кылат)
Порт киргизүү битин окуу
- GPIO функциясы үчүн SEL0 / SEL1ди коюңуз
- DIR реестрин которгуч биттери үчүн киргизүү катары, бирок LED үчүн чыгаруу катары коюңуз (бир эле учурда бир эле байтта)
- Резисторлорду иштетүү
- Аларды тартылуу каршылыгы катары коюңуз
- Портту окуңуз
- Сиз керектүү биттерди бөлүп алуу үчүн окуу маанисин чыпкалоону каалашыңыз мүмкүн (1 жана 2 которуштуруу)
Сунушталууда:
Gripper Arm менен адамдык өлчөмдөгү Telepresence роботу: 5 кадам (Сүрөттөр менен)
Gripper Arm менен адамдык өлчөмдөгү телепрезентация роботу: MANIFESTOA менин бир башым мени пандемия учурунда Хэллоуин кечесине чакырды (30+ киши), ошондуктан мен ага катышаарымды айттым жана телепрезентациялоо роботун уюштуруп, менин партиямды бузуп жибердим. жер. Эгерде сиз телепрограмманы билбесеңиз
Servo Robot Arm: 4 кадам
Servo Robot Arm: Бул объекттерди алып, аларды белгиленген жерге жайгаштыра турган жөнөкөй servo робот колу. Бул долбоордун убактысынын көбүн талап кылат, анткени колу туруктуу жана милдеттерди аткара алат
Чөнтөк өлчөмдүү робот Arm MeArm V0.4: 20 кадам (Сүрөттөр менен)
Чөнтөк өлчөмдүү робот колу MeArm V0.4: MeArm - бул чөнтөк өлчөмүндөгү робот колу. Бул 2014 -жылдын февраль айында башталган долбоор, ал ачык жабдык долбоору катары Ачык Өнүгүүнүн аркасында азыркы абалына фантастикалык түрдө тез саякат жасаган. 0.3 версиясы Instructables артында көрсөтүлгөн
Акустикалык левитация Arduino Uno менен кадам-кадам (8-кадам): 8 кадам
Акустикалык левитация менен Arduino Uno Step-by-Step (8-кадам): ультрадыбыштуу үн өткөргүчтөр L298N Dc аял адаптеринин электр энергиясы менен камсыздоосу эркек токту Arduino UNOBreadboard Бул кантип иштейт: Биринчиден, сиз Arduino Uno кодун жүктөп бересиз (бул санарип менен жабдылган микроконтроллер) жана аналогдук порттор кодду айландыруу үчүн (C ++)
Xbox 360 ROBOTIC ARM [ARDUINO]: AXIOM ARM: 4 кадам
Xbox 360 ROBOTIC ARM [ARDUINO]: AXIOM ARM: