Мазмуну:

GPIO ARM TOBLY - T.I. РОБОТИКАЛАР СИСТЕМАСЫН ОКУУ ҮЧҮН - ЛАБ 6: 3 кадам
GPIO ARM TOBLY - T.I. РОБОТИКАЛАР СИСТЕМАСЫН ОКУУ ҮЧҮН - ЛАБ 6: 3 кадам

Video: GPIO ARM TOBLY - T.I. РОБОТИКАЛАР СИСТЕМАСЫН ОКУУ ҮЧҮН - ЛАБ 6: 3 кадам

Video: GPIO ARM TOBLY - T.I. РОБОТИКАЛАР СИСТЕМАСЫН ОКУУ ҮЧҮН - ЛАБ 6: 3 кадам
Video: Arm Tech Talk from Renesas: Renesas IoT Connectivity with DA16200 2024, Июль
Anonim
GPIO ARM TOBLY - T. I. РОБОТИКА СИСТЕМАСЫН ОКУУ ҮЧҮН - ЛАБ 6
GPIO ARM TOBLY - T. I. РОБОТИКА СИСТЕМАСЫН ОКУУ ҮЧҮН - ЛАБ 6

Салам, Texas Instruments TI-RSLK (MSP432 микроконтроллерин колдонот) аркылуу ARM курамын үйрөнүү боюнча мурунку Нускамада, эгер сиз TI. Албетте, биз регистрге жазуу жана шарттуу цикл сыяктуу бир нече негизги көрсөтмөлөрдү карап чыктык. Биз Eclipse IDE аркылуу аткарууну басып өттүк.

Биз аткарган кичинекей программалар тышкы дүйнө менен эч кандай байланышта болгон жок.

Түрү кызыксыз.

Келгиле, бүгүн кирүү/чыгаруу порттору, тактап айтканда, санарип GPIO казыктары жөнүндө бир аз үйрөнүү менен бир аз өзгөртүүгө аракет кылалы.

Бул MSP432 өнүгүү тактасына келип түшөт, буга чейин эки баскыч баскычы бар, RGB LED жана кызыл LED, мунун баары кээ бир GPIO портторуна байланган.

Бул монтаж аркылуу бул казыктарды орнотууну жана башкарууну үйрөнгөнүбүздө, биз бул эффекттерди визуалдуу түрдө көрө алабыз дегенди билдирет.

Мүчүлүштүктөрдү оңдогондон өтүүдөн алда канча кызыктуу.

(Биз дагы эле кадам таштайбыз - бул биздин "кечиктирүү" функциясы болот):-D

1 -кадам: Келгиле, RAMдан Окууга Жазууга Аракет кылалы

GPIOго кирүүгө жана башкарууга өтүүдөн мурун, кичине бир кадам жасашыбыз керек.

Келгиле, жөн эле окуудан жана стандарттык эстутум дарегине жазуудан баштайлы. Биз мурунку Instructableден билебиз (сүрөттөрдү караңыз) RAM 0x2000 0000 менен башталат, андыктан ошол даректи колдонолу.

Биз маалыматтарды негизги реестр (R0) менен 0x2000 0000 ортосунда жылдырабыз.

Биз файлдын негизги түзүлүшүнөн же монтаждоо программасынын мазмунунан баштайбыз. Сураныч, TI's Code Composer Studio (CCS) жана айрым үлгүлүү долбоорлорду колдонуу менен монтаждоо долбоорун түзүү үчүн ушул Нускамага кайрылыңыз.

.бармак

.text.align 2.global main.thumbfunc main main:.asmfunc; ---------------------------------- -----------------------------------------------; (биздин код бул жакка барат); ------------------------------------------ ---------------------------------------.endasmfunc.end

Мен кээ бир декларациялар (директивалар) бар болсо, жогорку бөлүмгө жаңы нерсе кошкум келет. Бул кийинчерээк ачык -айкын болот.

ACONST.set 0x20000000; биз муну мындан ары колдонобуз (бул туруктуу)

; апачык, '0x' эмнени билдирет алтылык маанини билдирет.

Ошентип, биздин баштапкы файлдын мазмуну азыр окшош:

.бармак

.text.align 2 ACONST.set 0x20000000; биз муну ары карай колдонобуз (бул туруктуу); апачык, '0x' эмнени билдирет алтылык маанини билдирет..глобалдык башкы.thumbfunc башкы негизги:.asmfunc; --------------------------------------- ------------------------------------------; (биздин код бул жакка барат); ------------------------------------------ ---------------------------------------.endasmfunc.end

Эми бизде жогоруда айтылгандар болгондон кийин, үзүлгөн сызыктардын ортосуна кодду кошолу.

Биз RAM жайгашкан жерге жазуудан баштайбыз. Биринчиден, биз RAMге жазыла турган маалыматтын үлгүсүн, маанисин орнотобуз. Биз ошол баалуулукту же маалыматтарды аныктоо үчүн негизги реестрди колдонобуз.

Эскертүү: коддо, чекиттүү чекиттин (';') белгиси бар бардык линия ошол чекиттен кийинки комментарий экенин билдирет.

;-----------------------------------------------------------------------------------------------

; ЖАЗУУ; ------------------------------------------------ ----------------------------------------------- MOV R0, #0x55; негизги регистр R0 биз RAM жайгашкан жерге жазууну каалаган маалыматтарды камтыйт.; апачык, '0x' эмнени билдирет алтылык маанини билдирет.

Кийинки, DONT иштебейт деген сөздөрдү карап көрөлү.

; MOV MOV маалыматты RAM жерине жазууга жарабайт.

; MOV реестрге дароо маалымат үчүн гана; же бир реестрден экинчисине; б.а., MOV R1, R0.; STR STR колдонушу керек.; STR R0, = ACONST; Көрсөтүүдө начар термин ('='); STR R0, 0x20000000; Дүкөн нускамасы үчүн мыйзамсыз дарек берүү режими; STR R0, ACONST; Дүкөн нускамасы үчүн мыйзамсыз дарек берүү режими

Көп нерсени түшүндүрбөстөн, биз жогорудагы "ACONST" колдонууга аракет кылдык. Негизи, бул 0x20000000 сыяктуу түз маанини колдонуунун ордуна, туруктуу же туруктуу.

Биз жогоруда айтылгандарды колдонуу менен RAM жерине жазуу үчүн жаза алган жокпуз. Келгиле, дагы бир нерсени сынап көрөлү.

; RAM жайгашкан башка реестрди колдонушубуз керек окшойт

; ошол RAM жайгашкан MOV R1, #0x20000000 сактоого буйрук; RAM ордун (анын мазмунун эмес, жайгашуусун) R1ге коюңуз.; апачык, '0x' эмнени билдирет алтылык маанини билдирет. STR R0, [R1]; R1 (0x55) ичиндегини RAMга (0x20000000) R1ди колдонуп жаз.; биз RAM жайгашкан дареги бар башка реестрди (R1) колдонобуз; Ошол RAM жерине жазуу үчүн.

Жогоруда айтылгандардын дагы бир жолу, бирок дарек маанисинин ордуна 'ACONST' колдонуу:

; келгиле, дагы бир жолу жогорудагыдай кылалы, бирок келгиле, RAMдын жайгашкан жеринин маанисинин ордуна символду колдонолу.

; биз "ACONST" ды 0x20000000 үчүн стенд катары колдонууну каалайбыз.; биз дагы эле дароо маанини билдирүү үчүн '#' кылышыбыз керек; Ошентип (үстүнкү жагын караңыз), биз ".set" директивасын колдонушубуз керек болчу.; Муну далилдөө үчүн, келгиле, R0 маалымат үлгүсүн өзгөртөлү. MOV R0, #0xAA; макул, биз MOV R1, #ACONST STR R0, [R1] даректеринин ордуна символду колдонуп, RAMга жазууга даярбыз.

Видео дагы майда -чүйдөсүнө чейин, ошондой эле эс тутумунан окуу аркылуу өтөт.

Ошондой эле тиркелген.asm файлын көрө аласыз.

2 -кадам: Кээ бир негизги порт маалымат

Image
Image
Кээ бир негизги порт маалымат
Кээ бир негизги порт маалымат
Кээ бир негизги порт маалымат
Кээ бир негизги порт маалымат

Эми биз RAM жеринен кантип жазууну / окууну жакшы түшүнгөндүктөн, бул GPIO пинди кантип башкарууну жана колдонууну жакшыраак түшүнүүгө жардам берет.

Ошентип, биз GPIO казыктары менен кантип иштешебиз? Бул микроконтроллерге жана анын ARM көрсөтмөлөрүнө мурунку көз карашыбыздан, биз анын ички регистрлери менен кантип иштөөнү билебиз жана эстутумдун (RAM) даректери менен өз ара аракеттенүүнү билебиз. Бирок GPIO казыктары?

Ошентип, бул казыктар эстутум картасына түшөт, ошондуктан биз аларды эстутум даректери менен бирдей мамиле кыла алабыз.

Бул биз ошол даректерди билишибиз керек дегенди билдирет.

Төмөндө порт башталган даректер. Баса, MSP432 үчүн "порт" - бул бир эле пин эмес, төөнөгүчтөрдүн жыйнагы. Эгерде сиз Raspberry Pi менен тааныш болсоңуз, анда мен бул жердеги абалдан башкача деп ойлойм.

Жогорудагы сүрөттөгү көк тегерекчелер тактада эки өчүргүч жана 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

А биз башкаларга муктаж болуп калышыбыз мүмкүн.

Макул, биз азыр бир кызыл LEDди башкаруу үчүн GPIO реестринин даректеринин диапазонун билебиз.

Өтө маанилүү эскертүү: MSP432 LaunchPad тактасындагы ар бир I/O порту бир нече (адатта 8) казыктардын же линиялардын жыйындысы болуп саналат жана ар бирин жеке түрдө киргизүү же чыгаруу катары коюуга болот.

Бул, мисалы, эгер сиз "Порттун 1 багытын каттоо дареги" үчүн маанилерди орнотуп жатсаңыз, анда сиз кайсы дарекке (же биттерге) ошол дарек боюнча орнотуп же өзгөртүп жатканыңызга көңүл бурушуңуз керек дегенди билдирет. Бул тууралуу кийинчерээк.

GPIO порт программалоо ырааттуулугу

Акыр -аягы, бизге керек болгон процесс - бул LEDди башкаруу үчүн колдонула турган процесс же алгоритм.

Бир жолку инициализация:

  • P1.0ди конфигурациялоо (P1SEL1REG: P1SEL0REG Каттоо) <--- 0x00, 0x00 кадимки GPIO иштеши үчүн.
  • P1DIRREG Багыт регистринин 1 битин чыгаруу же ЖОГОРУ кылып коюңуз.

Цикл:

Кызыл LEDды күйгүзүү үчүн P1OUTREG регистринин 0 битине HIGH деп жазыңыз

  • Кечигүү функциясын чакырыңыз
  • Кызыл LEDды өчүрүү үчүн P1OUTREG регистринин 0 битине LOW деп жазыңыз
  • Кечигүү функциясын чакырыңыз
  • Кайра кайталоо

Кайсы киргизүү / чыгаруу функциясы (SEL0 жана SEL1ди конфигурациялоо)

LaunchPadдагы казыктардын көбү бир нече жолу колдонулат. Мисалы, ошол эле пин кадимки санарип GPIO болушу мүмкүн, же UART же I2C сериялык байланыштарында да колдонулушу мүмкүн.

Ошол пин үчүн кандайдыр бир конкреттүү функцияны колдонуу үчүн, ошол функцияны тандоо керек. Сиз пиндин функциясын конфигурациялашыңыз керек.

Бул түшүнүктү визуалдык түрдө түшүндүрүүгө аракет кылган бул кадамдын үстүндө бир сүрөт бар.

SEL0 жана SEL1 даректери кандайдыр бир функция / өзгөчөлүктү тандоо катары иштеген жуп айкалышын түзөт.

Биздин максаттар үчүн, биз стандарттык санариптик GPIOну 0 битке каалайбыз. Бул SEL0 менен SEL1дин LOW болушу үчүн бизге 0 бит керек дегенди билдирет.

Порт программалоо ырааттуулугу (дагы)

1. 0x00 жазыңыз P1 SEL 0 Register (дарек 0x40004C0A). Бул битти 0 үчүн LOW коёт

2. P1 SEL 1 Каттоо үчүн 0x00 жазыңыз (дарек 0x40004C0C). Бул GPIO үчүн орнотуу, бит 0 үчүн LOW коёт.

3. P1 DIR Registerге 0x01 жазыңыз (дарек 0x40004C04). Бул 0 битке БИЙИК коет, ЧЫГУУ дегенди билдирет.

4. P1 OUTPUT регистрине 0x01 жазуу менен LEDди күйгүзүңүз (дарек 0x40004C02)

5. Кандайдыр бир кечигүү жасаңыз (же мүчүлүштүктөрдү оңдоо учурунда бир эле кадам)

6. P1 OUTPUT регистрине 0x00 жазуу менен LEDди өчүрүү (дарек 0x40004C02)

7. Кандайдыр бир кечигүү жасаңыз (же мүчүлүштүктөрдү оңдоо учурунда бир эле кадам)

8. 4төн 7ге чейинки кадамдарды кайталаңыз.

Бул кадамдын байланышкан видеосу бизди бардык процессте түз демо аркылуу алып барат, анткени биз бир кадамды басып өтүп, ар бир чогултуу көрсөтмөсү аркылуу сүйлөшөбүз жана LED аракетин көрсөтөбүз. Видеонун узундугу үчүн кечирим сурайбыз.

3 -кадам: Видеодогу бир кемчиликти байкадыңызбы?

Жарык диодду программалоо жана жарыктандыруунун бүт процессин басып өткөн видеодо негизги циклде кошумча кадам болгон, аны бир жолку инициализацияга чейин жылдырса болмок.

Убакыт бөлүп, ушул Нускамадан өтүүңүз үчүн рахмат.

Кийинкиси бул жерде баштаганыбызды кеңейтет.

Сунушталууда: