Агуулгын хүснэгт:

GPIO ARM ASSEMBLY - T.I. РОБОТИКИЙН СИСТЕМИЙН СУРГАЛТЫН иж бүрдэл - LAB 6: 3 Алхам
GPIO ARM ASSEMBLY - T.I. РОБОТИКИЙН СИСТЕМИЙН СУРГАЛТЫН иж бүрдэл - LAB 6: 3 Алхам

Видео: GPIO ARM ASSEMBLY - T.I. РОБОТИКИЙН СИСТЕМИЙН СУРГАЛТЫН иж бүрдэл - LAB 6: 3 Алхам

Видео: GPIO ARM ASSEMBLY - T.I. РОБОТИКИЙН СИСТЕМИЙН СУРГАЛТЫН иж бүрдэл - LAB 6: 3 Алхам
Видео: BTT Manta M8P v2 - Basics with CB1 v2.2 2024, Долдугаар сарын
Anonim
GPIO ARM ASSEMBLY - T. I. РОБОТИКИЙН СИСТЕМИЙН СУРГАЛТЫН иж бүрдэл - LAB 6
GPIO ARM ASSEMBLY - T. I. РОБОТИКИЙН СИСТЕМИЙН СУРГАЛТЫН иж бүрдэл - LAB 6

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

Бидний гүйцэтгэсэн бага насны хөтөлбөрүүд гадаад ертөнцтэй ямар ч холбоогүй юм.

Нэг төрлийн уйтгартай.

Өнөөдөр оролт/гаралтын портуудын талаар, жишээлбэл, дижитал GPIO тээглүүрийн талаар бага зэрэг сурч мэдээд үүнийг бага зэрэг өөрчлөхийг хичээцгээе.

Энэ MSP432 нь хэд хэдэн GPIO портуудтай холбогдсон RGB LED, улаан LED гэсэн хоёр товчлууртай унтраалгатай хөгжлийн самбар дээр гарч ирдэг.

Энэ нь угсрах замаар эдгээр тээглүүрийг тохируулж, удирдаж сурах тусам бид эдгээр нөлөөг нүдээр харж чадна гэсэн үг юм.

Зүгээр л дибаг хийгч рүү орохоос хамаагүй илүү сонирхолтой.

(Бид алхам хийх гэж байгаа хэвээр байгаа - энэ бол бидний "саатуулах" функц байх болно):-D

Алхам 1: RAM -аас бичихийг уншиж үзье

GPIO руу нэвтрэх, хянахын өмнө бид жижиг алхам хийх хэрэгтэй.

Стандарт санах ойн хаягаар зүгээр л уншиж, бичиж эхэлье. RAM нь 0x2000 0000 -аас эхэлдэг гэдгийг бид өмнөх зааварчилгаанаас (тэнд байгаа зургуудыг үзнэ үү) мэдэж байгаа тул энэ хаягийг ашиглацгаая.

Бид өгөгдлийг үндсэн бүртгэл (R0) ба 0x2000 0000 хооронд шилжүүлэх болно.

Бид үндсэн файлын бүтэц эсвэл угсралтын програмын агуулгаас эхэлдэг. TI -ийн Code Composer Studio (CCS) болон зарим жишээ төслүүдийг ашиглан угсрах төсөл үүсгэхийн тулд энэхүү Зааврыг үзнэ үү.

эрхий хуруу

.text.align 2.global main.thumbfunc main main:.asmfunc; ---------------------------------- -----------------------------------------------; (манай код энд очих болно); ------------------------------------------ ---------------------------------------.endasmfunc.end

Зарим мэдэгдэл (заавар) байсан бол би дээд хэсэгт шинэ зүйл нэмэхийг хүсч байна. Энэ нь дараа нь илүү тодорхой болно.

ACONST. 0x20000000 тохируулах; бид үүнийг цаашид ашиглах болно (энэ нь тогтмол)

; Мэдээжийн хэрэг, '0x' нь зургаан өнцөгтийн утгыг илэрхийлдэг.

Тиймээс бидний эхлүүлсэн файлын агуулга одоо иймэрхүү харагдаж байна.

эрхий хуруу

.text.align 2 ACONST.set 0x20000000; бид үүнийг цаашид ашиглах болно (энэ нь тогтмол); Мэдээжийн хэрэг, '0x' нь зургаан өнцөгтийн утгыг илэрхийлдэг..global main.thumbfunc main main:.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]; R0 (0x55) -д байгаа зүйлийг R1 ашиглан RAM (0x20000000) руу бичнэ үү.; бид 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 -ийн бичээсийг харуулж байна. Цэнхэр шугам нь жинхэнэ 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 битийг гаралт эсвэл HIGH гэж тохируулна уу.

Гогцоо:

Улаан LED -ийг асаахын тулд P1OUTREG регистрийн 0 бит рүү HIGH гэж бичнэ үү

  • Саатуулах функцийг дуудах
  • Улаан LED -ийг унтраахын тулд P1OUTREG регистрийн 0 битэнд LOW гэж бичээрэй
  • Саатуулах функцийг дуудах
  • Давталтыг давт

Оролт / гаралтын аль функц (SEL0 ба SEL1 -ийг тохируулах)

LaunchPad дээрх олон тээглүүр нь олон хэрэглээтэй байдаг. Жишээлбэл, ижил зүү нь стандарт дижитал GPIO байж болно, эсвэл үүнийг UART эсвэл I2C цуваа холболтод ашиглаж болно.

Тухайн зүү дээр тусгай функц ашиглахын тулд та энэ функцийг сонгох хэрэгтэй. Та зүү функцийг тохируулах хэрэгтэй.

Энэхүү ойлголтыг харааны хэлбэрээр тайлбарлахыг оролдож буй энэ алхамын зураг дээр байна.

SEL0 ба SEL1 хаягууд нь хослолыг бүрдүүлдэг бөгөөд энэ нь зарим төрлийн функц / функцийг сонгох үүргийг гүйцэтгэдэг.

Бидний зорилгын үүднээс бид стандарт дижитал GPIO -ийг 0 битээр авахыг хүсч байна. Энэ нь SEL0 ба SEL1 -ийг LOW болгоход бидэнд 0 бит хэрэгтэй гэсэн үг юм.

Порт програмчлалын дараалал (дахин)

1. P1 дээр 0x00 гэж бич SEL 0 Register (0x40004C0A хаяг). Энэ нь битийг LOW болгож тохируулна

2. 0x00 гэж бичээд P1 SEL 1 Register (хаяг 0x40004C0C). Энэ нь LIO -ийг битийн хувьд 0 болгож, GPIO -г тохируулна.

3. P1 DIR Register (0x40004C04 хаяг) руу 0x01 гэж бичнэ үү. Энэ нь 0 -р битийн хувьд HIGH -ийг тогтоодог бөгөөд энэ нь OUTPUT гэсэн утгатай.

4. LED -ийг асаахын тулд 0x01 -ийг P1 OUTPUT Register (0x40004C02 хаяг) руу бичнэ үү.

5. Ямар нэгэн байдлаар хойшлуулах (эсвэл дибаг хийх явцад ганцхан алхам хийх)

6. LED -ийг унтрааж 0x00 руу P1 OUTPUT Register (0x40004C02 хаяг) бичнэ үү.

7. Ямар нэгэн байдлаар хойшлуулах (эсвэл дибаг хийх явцад ганцхан алхам хийх)

8. 4 -ээс 7 хүртэлх алхмуудыг давт.

Энэ алхамтай холбоотой видео нь бид угсрах заавар бүрийг нэг шатаар дамжуулж, LED үйлдлийг харуулдаг тул бид бүх үйл явцыг шууд демо хэлбэрээр авч үздэг. Видео бичлэгийн уртыг уучлаарай.

Алхам 3: Та видеоны нэг алдааг олж чадсан уу?

LED-ийг програмчлах, гэрэлтүүлэх үйл явцыг бүхэлд нь харуулсан видеон дээр үндсэн гогцоонд нэмэлт алхам хийгдсэн бөгөөд үүнийг нэг удаагийн эхлүүлэх хүртэл шилжүүлэх боломжтой байв.

Энэхүү зааварчилгааг ашиглахад цаг гаргасанд баярлалаа.

Дараагийнх нь эндээс эхлүүлсэн зүйлийг өргөжүүлнэ.

Зөвлөмж болгож буй: