Mündəricat:

BÖLÜM 2 - GPIO ARM MONTAJI - RGB - FONKSİYON ZƏNGLƏRİ - Açarlar: 6 addım
BÖLÜM 2 - GPIO ARM MONTAJI - RGB - FONKSİYON ZƏNGLƏRİ - Açarlar: 6 addım

Video: BÖLÜM 2 - GPIO ARM MONTAJI - RGB - FONKSİYON ZƏNGLƏRİ - Açarlar: 6 addım

Video: BÖLÜM 2 - GPIO ARM MONTAJI - RGB - FONKSİYON ZƏNGLƏRİ - Açarlar: 6 addım
Video: SIFIRDAN ARM ÖĞRENİYORUM-5 | GPIO, BLINK UYGULAMASI 2024, Noyabr
Anonim
BÖLÜM 2 - GPIO ARM MONTAJI - RGB - FONKSİYON ZƏNGLƏRİ - Açarlar
BÖLÜM 2 - GPIO ARM MONTAJI - RGB - FONKSİYON ZƏNGLƏRİ - Açarlar

1 -ci hissədə, C / C ++ yerinə montajdan istifadə edərək Texas Instruments -dən MSP432 LaunchPad inkişaf lövhəsindəki tək qırmızı LED -i necə dəyişdirməyi öyrəndik.

Bu təlimatda oxşar bir şey edəcəyik - eyni lövhədə olan bir RGB LEDini idarə edin.

Yolda, bəzi LEDləri işıqlandırmaqla kifayətlənməyimizlə yanaşı, ARM montajı haqqında da biliklərimizi artırmağı ümid edirik.

Addım 1: Gəlin dərhal daxil olaq

Həqiqətən, ilk video hər şeyi deyir. Əlavə etmək üçün daha çox şey yoxdur.

Bunun əsas mahiyyəti, MSP432 üzərindəki hər bir G/Ç portunun hər birinin bir neçə bitdən ibarət olan "qeyd" ünvanlarından ibarət olduğu fikrini evə aparmaqdır.

Bundan əlavə, bitlər ortogonal olaraq qruplaşdırılır. Yəni hər bir qeyd adresinin 0 biti eyni xarici I/O pininə aiddir.

Yalnız bir bit və ya pinlə bir şey etmək üçün bu liman üçün bir neçə qeyd ünvanı lazım olduğu fikrini təkrarladıq.

Ancaq bu vəziyyətdə, bir RGB LED ilə işlədiyimiz üçün hər bir qeyd ünvanı üçün üç bitlə məşğul olmalıyıq.

Bir neçə qeydə ehtiyacımız olduğunu gücləndirdik: DIR reyestri, SEL0 reyestri, SEL1 reyestri və Çıxış reyestri. Və hər dəfə üç bit.

Addım 2: Kodu təkmilləşdirin - Funksiya əlavə edin

Image
Image

Yuxarıdakı Adımda gördüyünüz kimi, əsas proqram döngəsində LED -ləri söndürdükdə çoxlu təkrar kod var idi.

Beləliklə, proqrama bir funksiya əlavə edə bilərik. LEDləri söndürmək istədiyimiz zaman yenə də bu funksiyaya zəng etməliyik, lakin bu, kodun bir hissəsinin tək bir ifadəyə çökməsinə səbəb olur.

LED söndürmə kodumuz daha çox təlimatla əlaqəli olsaydı, bu əsl yaddaş qənaətçisi olardı.

Daxili proqramlaşdırma və mikro nəzarətçilərin bir hissəsi proqramın ölçüsündən daha çox xəbərdar olur.

Video izah edir.

Əsas olaraq, əsas kodumuza bir budaq ifadəsi əlavə edirik və budaqlandığımız funksiya olan başqa bir kod blokumuz var. Və sonra işimizi bitirdikdən sonra və ya funksiyanın sonunda əsas proqram çərçivəsində növbəti ifadəyə qayıdırıq.

Addım 3: Məşğul Döngə Gecikməsini əlavə edin

Kodun Bəyannamələr bölməsində, istədiyiniz vaxtın dəyişdirilməsini asanlaşdırmaq üçün sabit əlavə edin:

; nöqtəli nöqtədən sonra hər hansı bir söz (';') şərhə başlayır.

; bu hissədəki kod bir dəyərə bir ad təyin edir.; '.equ' istifadə edə bilərdiniz, amma bir az fərqlidirlər.; '.equ' (məncə) dəyişdirilə bilməz, halbuki '.set' edə biləcəyiniz deməkdir; isterseniz daha sonra kodda 'DLYCNT' dəyərini dəyişdirin.; Gecikmə alt proqramında geri sayma dəyəri olaraq 'DLYCNT' istifadə ediləcək. DLYCNT. 0x30000 qoyun

Yeni bir gecikmə funksiyası əlavə edin:

gecikmə:.asmfunc; 'gecikmə' alt proqramının və ya funksiyasının başlaması.

MOV R5, #DLYCNT; 'DLYCNT' təyin edilmiş dəyəri olan əsas cpu qeyd R5 yükləyin. dlyloop; bu gecikmə dövrünün başladığını göstərir. montajçı ünvanı təyin edir. ALT R5, #0x1; core cpu R5 reyestrindəki cari dəyərdən 1 çıxarın. CMP R5, #0x0; R5dəki cari dəyəri 0 ilə müqayisə edin. BGT dlyloop; filial, R5 -də dəyər 0 -dan böyükdürsə, 'dlyloop' etiketinə (ünvanı). BX LR; biz burada var əgər, R5 dəyəri 0 idi deməkdir. subroutine qayıt..endasmfunc; alt proqramın sonunu bildirir.

Sonra əsas gövdədə, əsas döngədə gecikmə funksiyasını çağırın və ya çağırın:

; bu, əsas gövdənin və ya əsas funksiyanın kod parçasıdır ("main.asm" faylına baxın).

; Bu 'əsas' bir döngədir və bu yeni 'gecikmə' funksiyasını necə çağırdığımızı və ya istifadə etdiyimizi göstərir.; '#QIRMIZI' və '#GRNON' da bəyannamələrdir (sabitlər) ('main.asm' ın yuxarı hissəsinə baxın).; RGB LED -in göstərilən rəngini təyin etməyin asan bir yoludur. loop MOV R0, #REDON; Qırmızı - "REDON" a təyin edilmiş əsas cpu reyestrini R0 təyin edin. STRB R0, [R4]; əsas qeyd R4 əvvəllər GPIO çıxış ünvanı ilə qurulmuşdu.; R4 -də göstərilənləri R4 -də göstərilən ünvana yazın. BL gecikməsi; yeni 'gecikmə' funksiyasına dal. BL ledsoff; əvvəlcədən mövcud olan 'ledsoff' funksiyasına dal. BL gecikməsi; bu zaman MOV R0, #GRNON; Yaşıl - buna görə STRB R0, [R4]; və s. BL gecikməsi BL ledsoff BL gecikməsi

Videoda detallar yer alıb.

Addım 4: ARM Memarlıq Proseduru Çağırış Standartı (AAPCS)

Yəqin ki, nəsə təqdim etmək üçün yaxşı vaxtdır. Bu məclis dili konvensiyasıdır. ARM Memarlığı üçün Prosedur Çağırış Standartı olaraq da bilinir.

Bunun çox şeyləri var, amma bu sadəcə bir standartdır. Bu bizi montaj proqramlaşdırmasını öyrənməyimizə mane olmur və öyrəndiyimiz bəzi anlayışlarla özümüzü rahat hiss etdikdən sonra bu standartın parçalarını mənimsəyə bilərik.

Əks təqdirdə, böyük bir su hortumundan içdiyimizi hiss edə bilərik. Çox məlumat.

Əsas Qeydlər

MSP432 -nin əsas qeydləri ilə tanış olduğumuz üçün indi bu standartlardan bəzilərini qəbul etməyə çalışaq. Növbəti funksiyanı yazanda buna uyğunlaşacağıq (bir LED -i yandırın / söndürün).

1) Bir funksiya parametri olaraq R0 istifadə etməliyik. Funksiyaya (alt proqram) bir dəyər ötürmək istəyiriksə, bunu etmək üçün R0 istifadə etməliyik.

2) Link Qeydiyyatından təyinatı üzrə istifadə etməliyik - alt proqram tamamlandıqdan sonra hara qayıtmalı olduğumuzu göstərən ünvanı saxlayır.

Bunları necə tətbiq etdiyimizi görəcəksiniz.

Addım 5: Parametrlə Daxili Funksiyalar

Təkrarlanan bölmələri tək bir funksiyaya birləşdirərək kodumuzu təmizləyə və yaddaş həcmini azalda bilərik. Əsas döngə gövdəsindəki yeganə fərq, RGB LED -də görmək istədiyimiz müxtəlif rəngləri keçə biləcəyimiz üçün bir parametrə ehtiyacımız olmasıdır.

Ətraflı məlumat üçün videoya baxın. (uzunluğa görə üzr istəyirəm)

Addım 6: GPIO Giriş - Anahtarlar əlavə edin

Gəlin bunu daha maraqlı edək. Montaj proqramımıza bəzi keçid nəzarətini əlavə etməyin vaxtı gəldi.

Bu Təlimat kitabçasında iki təyyarə açarının MSP432-yə necə bağlı olduğunu göstərən şəkillər var.

Əsasən: Switch 1 (SW1 və ya S1) P1.1 -ə, Switch 2 (SW2 və ya S2) isə P1.4 -ə qoşulur.

Bu, yalnız çıxışlar yerinə girişlərlə məşğul olduğumuz üçün deyil, həm də bu iki açarın bir qırmızı LED ilə eyni qeyd ünvanı blokunun iki bitini tutması və ya tutması səbəbindən işləri bir az maraqlı edir.

Bu Təlimatçının tək qırmızı LEDini dəyişdirməklə məşğul olduq, buna görə açarları idarə etmək üçün kod əlavə etməliyik.

Port 1 Qeydiyyat Ünvan Bloku

Bunları əvvəlki Təlimat kitabında əhatə etdiyimizi unutmayın, amma yenisini daxil etməliyik:

  • Port 1 Giriş Qeydiyyat ünvanı = 0x40004C00
  • Port 1 Çıxış Qeydiyyatı ünvanı = 0x40004C02
  • Port 1 İstiqamət Qeydiyyat ünvanı = 0x40004C04
  • Port 1 Rezistoru Enable Qeydiyyat ünvanı = 0x40004C06
  • Port 1 0 Qeydiyyat ünvanı = 0x40004C0A seçin
  • Port 1 seçin 1 Qeydiyyat ünvanı = 0x40004C0C

Limanları giriş olaraq istifadə edərkən MSP432-nin daxili çəkmə və ya aşağı çəkmə rezistorlarından istifadə etmək yaxşıdır.

Launchpad inkişaf etdirmə lövhəsi iki açarı yerə bağladığından (basıldığında LOW), bu o deməkdir ki, sıxılmadıqda möhkəm bir YÜK -ə malik olduğumuzdan əmin olmaq üçün çəkmə YUX rezistorlarından istifadə etməliyik.

Rezistorları yuxarı / aşağı çəkin

Bu keçid girişlərini çəkmə rezistorlarına bağlamaq üçün iki fərqli Port 1 Register ünvanı lazımdır.

1) Rezistorlar istədiyinizi göstərmək üçün Port 1 Resistor-Enable qeydindən (0x40004C06) istifadə edin (bu iki bit üçün), 2) və sonra müqavimətləri çəkmə və ya çəkmə olaraq təyin etmək üçün Port 1 Çıxış qeydindən (0x40004C02) istifadə edin. Çıxış reyestri demək olar ki, ikiqat məqsədlidir.

Başqa bir şəkildə yenidən qeyd etmək üçün Çıxış reyestri ya bir Çıxışa YÜKSEK və ya DÜŞÜK göndərə bilər (və ya tək qırmızı LED kimi) və / və ya girişlər üçün yuxarı və ya aşağıya endirilən rezistorlar qurmaq üçün istifadə olunur., AMMA YALNIZCA bu xüsusiyyət Resistor-Enable reyestri vasitəsi ilə aktiv edilmişdirsə.

Yuxarıda göstərilənlər vacibdir-hər hansı bir çıxış bitinə DÜŞÜK və ya YÜKSƏK göndərərkən/qurarkən, giriş bitlərinin çəkmə/çəkmə vəziyyətini eyni vaxtda qorumaq lazımdır.

(video izah etməyə çalışır)

Liman Giriş Bitinin oxunması

  • GPIO funksionallığı üçün SEL0 / SEL1 seçin
  • DIR registrini keçid bitləri üçün giriş olaraq, lakin LED üçün çıxış olaraq təyin edin (eyni baytda)
  • Rezistorları işə salın
  • Onları çəkmə rezistorları olaraq təyin edin
  • Limanı oxuyun
  • Lazım olan bitləri təcrid etmək üçün oxunan dəyəri süzmək istəyə bilərsiniz (keçid 1 və 2)

Tövsiyə: