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

2 -р хэсэг - GPIO ARM ASSEMBLY - RGB - FUNCTION CALLS - Шилжүүлэгчид: 6 алхам
2 -р хэсэг - GPIO ARM ASSEMBLY - RGB - FUNCTION CALLS - Шилжүүлэгчид: 6 алхам

Видео: 2 -р хэсэг - GPIO ARM ASSEMBLY - RGB - FUNCTION CALLS - Шилжүүлэгчид: 6 алхам

Видео: 2 -р хэсэг - GPIO ARM ASSEMBLY - RGB - FUNCTION CALLS - Шилжүүлэгчид: 6 алхам
Видео: Тестирование 10 мини-ПК 2018 2024, Арваннэгдүгээр
Anonim
Хэсэг 2 - GPIO ARM ASSEMBLY - RGB - FUNCTION CALLS - Шилжүүлэгчид
Хэсэг 2 - GPIO ARM ASSEMBLY - RGB - FUNCTION CALLS - Шилжүүлэгчид

1 -р хэсэгт бид C / C ++ оронд угсралт ашиглан Texas Instruments -аас MSP432 LaunchPad хөгжүүлэх самбар дээрх ганц улаан LED -ийг хэрхэн сольж болохыг сурсан.

Энэхүү зааварчилгааны хэсэгт бид үүнтэй төстэй зүйлийг хийх болно - мөн ижил самбар дээр байгаа RGB LED -ийг хянах.

Замын туршид бид арматурын угсралтын талаархи мэдлэгээ дээшлүүлж, зарим LED -ийг гэрэлтүүлэхээс гадна хөгжилтэй байх болно гэж найдаж байна.

Алхам 1: Явцгаая

Үнэхээр анхны видео бичлэг дээр бүгдийг хэлж өгсөн. Нэмээд нэмээд байх юм алга.

Үүний гол зорилго нь MSP432 дээрх оролт гаралтын порт бүр нь "бүртгүүлэх" хаягийн блокоос бүрддэг бөгөөд энэ нь эргээд тус бүр нь хэд хэдэн битээс бүрддэг гэсэн санааг гэртээ авчрах явдал юм.

Цаашилбал, битүүдийг ортогональ байдлаар бүлэглэдэг. Өөрөөр хэлбэл, регистрийн хаяг бүрийн бит 0 нь ижил гадаад оролтын зүүг хэлдэг.

Ганцхан бит эсвэл зүүгээр ямар нэгэн зүйл хийхэд тухайн портод хэд хэдэн регистрийн хаяг шаардлагатай гэсэн санааг бид давтлаа.

Гэхдээ энэ тохиолдолд бид RGB LED -тэй харьцдаг тул регистрийн хаяг бүрийн хувьд гурван битийг шийдвэрлэх шаардлагатай болдог.

Бидэнд хэд хэдэн бүртгэл хэрэгтэй гэдгийг бататгасан: DIR бүртгэл, SEL0 бүртгэл, SEL1 бүртгэл, OUTPUT бүртгэл. Мөн цаг тутамд гурван бит.

Алхам 2: Кодыг сайжруулах - Функц нэмэх

Image
Image

Дээрх алхам дээр харсанчлан, програмын үндсэн давталт нь олон удаа давтагдсан кодтой байсан, тухайлбал, бид LED -ийг унтраах үед.

Тиймээс бид програмд функц нэмж болно. Бид LED -ийг унтраах болгондоо энэ функцийг дуудах шаардлагатай хэвээр байгаа боловч энэ нь зарим кодыг нэг мэдэгдэл болгон задлахад хүргэдэг.

Хэрэв бидний LED унтраах кодыг илүү олон зааварчилгаанд хамруулсан бол энэ нь жинхэнэ санах ойг хэмнэх болно.

Суулгасан програмчлал ба микро хянагчийн нэг хэсэг нь програмын хэмжээг илүү сайн мэддэг болсон.

Видео бичлэгийг тайлбарласан болно.

Үндсэндээ бид үндсэн код дээрээ салаалсан мэдэгдлийг нэмж өгдөг бөгөөд бидний өөр салбарласан функц болох кодын өөр нэг блок байдаг. Тэгээд хийж дууссаны дараа эсвэл функцын төгсгөлд бид үндсэн програм доторх дараагийн мэдэгдэл рүү буцаж очно.

Алхам 3: Завгүй давталтын хоцролтыг нэмнэ үү

Кодын Тунхаглал хэсэгт хүссэн цагийг тохируулахад хялбар болгохын тулд тогтмол нэмнэ үү.

; цэг таслал (';') дараа бичсэн үгс сэтгэгдлийг эхлүүлнэ.

; Энэ хэсгийн код нь утгад нэр өгдөг.; Та бас '.equ' ашиглаж болно, гэхдээ тэдгээр нь арай өөр юм.; '.equ' (миний бодлоор) өөрчлөх боломжгүй, харин '.set' гэдэг нь танд боломжтой гэсэн үг юм; Хэрэв хүсвэл кодын дараа 'DLYCNT' утгыг өөрчилнө үү.; 'DLYCNT' нь хоцролтын дэд програмд тоолох тоолуурын утга болгон ашиглах болно. DLYCNT. 0x30000 тохируулна уу

Шинэ саатал функцийг нэмнэ үү:

саатал:.asmfunc; "саатал" дэд програм эсвэл функцын эхлэл.

MOV R5, #DLYCNT; 'DLYCNT' -т оноосон R5 үндсэн cpu бүртгэлийг ачаална уу. dlyloop; Энэ нь хойшлуулах давталтын эхлэлийг илэрхийлнэ. Ассемблер нь хаягийг тодорхойлдог. SUB R5, #0x1; R5 үндсэн cpu бүртгэлийн одоогийн утгаас 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, #REDON; Улаан - үндсэн процессор R0 -ийг 'REDON' гэж заасан утгатай тохируулна. STRB R0, [R4]; R4 үндсэн бүртгэлийг өмнө нь GPIO гаралтын хаягаар тохируулсан байсан.; R4 -д заасан хаягаар R0 дотор юу байгааг бичнэ үү. BL саатал; шинэ 'саатал' функц руу шилжих. BL ledsoff; өмнө нь байсан 'ledsoff' функц руу шилжих. BL саатал; энэ тохиолдолд MOV R0, #GRNON; Ногоон - энэ тохиолдолд STRB R0, [R4]; гэх мэт. BL саатал BL ledsoff BL саатал

Видео бичлэгийг нарийвчлан харуулав.

Алхам 4: ARM архитектурын процедурын дуудлагын стандарт (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
  • Порт 1 эсэргүүцэл идэвхжүүлэх Бүртгүүлэх хаяг = 0x40004C06
  • Порт 1 0 Бүртгүүлэх хаяг = 0x40004C0A -ийг сонгоно уу
  • Порт 1 1 бүртгэлийн хаягийг сонгоно уу = 0x40004C0C

Портуудыг оролт болгон ашиглахдаа MSP432-ийн дотоод татах эсвэл татах резисторыг ашиглах нь зүйтэй.

Launchpad хөгжүүлэлтийн самбар нь хоёр унтраалгыг газардуулсан (дарагдсан үед LOW) тул бид дарж аваагүй бол өндөр HIGH байгаа эсэхийг шалгахын тулд татах UP резисторыг ашиглах ёстой гэсэн үг юм.

Резисторыг дээш татах / татах

Эдгээр шилжүүлэгч оролтыг татах эсэргүүцэлтэй холбоход Порт 1 регистрийн хоёр өөр хаяг шаардлагатай болно.

1) Порт 1 резисторыг идэвхжүүлэх бүртгэлийг (0x40004C06) ашиглан резистор (энэ хоёр битийн хувьд) хүсч байгаагаа илэрхийлнэ.

2), дараа нь Порт 1 гаралтын регистрийг (0x40004C02) ашиглан резисторыг татах эсвэл татах байдлаар сонгоно уу. Гаралтын бүртгэл нь бараг л хоёр зориулалттай.

Тиймээс, өөр аргаар дахин мэдээлэхийн тулд Гаралтын бүртгэл нь гаралт руу өндөр эсвэл доогуур илгээх боломжтой (ганц улаан LED гэх мэт) ба / эсвэл оролтын хувьд доош татах эсэргүүцлийг тохируулахад ашигладаг., ГАНЦХАНД энэ онцлогийг Resistor-Enable бүртгэлээр идэвхжүүлсэн бол.

Дээр дурдсан зүйлд чухал ач холбогдолтой-ямар ч гаралтын бит рүү LOW эсвэл HIGH-ийг илгээх/тохируулахдаа оролтын битийн татах/доош татах байдлыг нэгэн зэрэг хадгалах шаардлагатай болно.

(видео тайлбарлахыг оролдож байна)

Порт оролтын битийг уншиж байна

  • GPIO функцэд зориулж SEL0 / SEL1 -ийг тохируулна уу
  • DIR регистрийг шилжүүлэгчийн битийн оролт болгон, харин LED -ийн гаралт болгон тохируулна уу (нэгэн зэрэг ижил байтаар)
  • Резисторыг идэвхжүүлэх
  • Тэдгээрийг татах эсэргүүцэл болгон тохируулна уу
  • Боомтыг уншина уу
  • Та хэрэгтэй хэсгүүдийг тусгаарлахын тулд уншсан утгыг шүүхийг хүсч болно (1 ба 2 -р шилжүүлэгч)

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