Mündəricat:
- Addım 1: RAM -dan Yazmağa / Oxumağa çalışaq
- Addım 2: Bəzi Əsas Liman Məlumatları
- Addım 3: Videoda Bir Qüsuru Tutdunuzmu?
Video: GPIO ARM MONTAJI - T.I. ROBOTİK SİSTEM Öyrənmə Kiti - LAB 6: 3 Addımlar
2024 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2024-01-30 07:47
Salam, Texas Instruments TI-RSLK (MSP432 mikro nəzarətçisindən istifadə edir) istifadə edərək ARM qurğusunun öyrənilməsi ilə bağlı əvvəlki təlimatda, məsələn, T. I. Əlbəttə ki, bir reyestrə yazmaq və şərti döngə kimi bir çox əsas təlimatları keçdik. Eclipse IDE -dən istifadə edərək icra prosesinə keçdik.
Həyata keçirdiyimiz kiçik proqramların xarici dünya ilə heç bir əlaqəsi yoxdur.
Bir növ darıxdırıcı.
Bu gün giriş/çıxış limanları, xüsusən rəqəmsal GPIO pinləri haqqında bir az məlumat əldə edərək bunu bir qədər dəyişməyə çalışaq.
Elə olur ki, bu MSP432, bir neçə GPIO limanına bağlı olan iki düymə açarı, RGB LED və qırmızı LED olan bir inkişaf lövhəsinə gəlir.
Bu o deməkdir ki, bu pinləri montaj yolu ilə qurmağı və idarə etməyi öyrəndikcə, bu təsirləri vizual olaraq görə bilərik.
Ayıklayıcıdan keçməkdən daha maraqlıdır.
(Hələ addım atacağıq - bu bizim "gecikmə" funksiyamız olacaq):-D
Addım 1: RAM -dan Yazmağa / Oxumağa çalışaq
GPIO -ya daxil olmağa və onu idarə etməyə başlamazdan əvvəl kiçik bir addım atmalıyıq.
Standart bir yaddaş ünvanına oxumaq və yazmaqla başlayaq. Əvvəlki Təlimatlardan (oradakı şəkillərə baxın) bilirik ki, RAM 0x2000 0000 -dən başlayır, ona görə də həmin ünvandan istifadə edək.
Məlumatları bir əsas qeyd (R0) ilə 0x2000 0000 arasında köçürəcəyik.
Əsas bir fayl quruluşu və ya montaj proqramının məzmunu ilə başlayırıq. Zəhmət olmasa TI -nin Code Composer Studio (CCS) və bəzi nümunə layihələrindən istifadə edərək montaj layihəsi yaratmaq üçün bu Təlimata baxın.
.barmaq
.tekst. hizalama 2.qlobal əsas.thumbfunc əsas əsas:.asmfunc; ---------------------------------- -----------------------------------------------; (kodumuz bura gedəcək); ------------------------------------------ ---------------------------------------.endasmfunc.son
Bəzi bəyannamələr (direktivlər) olsaydı, yuxarı hissəyə yeni bir şey əlavə etmək istəyirəm. Sonradan daha aydın olacaq.
ACONST.set 0x20000000; bundan daha aşağı istifadə edəcəyik (sabitdir)
; Aydındır ki, '0x' aşağıdakıların hex dəyərini ifadə edir.
Beləliklə, başlanğıc fayl məzmunumuz indi belə görünür:
.barmaq
.text.align 2 ACONST.set 0x20000000; bundan daha aşağı istifadə edəcəyik (sabitdir); Aydındır ki, '0x' aşağıdakıların hex dəyərini ifadə edir..global əsas.thumbfunc əsas əsas:.asmfunc; --------------------------------------- ------------------------------------------; (kodumuz bura gedəcək); ------------------------------------------ ---------------------------------------.endasmfunc.son
İndi yuxarıda göstərilənlərə sahib olduğumuz üçün kəsikli xətlər arasına kod əlavə edək.
RAM yerinə yazmağa başlayırıq. Əvvəlcə RAM -a yazacağımız məlumat modelini, bir dəyər quracağıq. Bu dəyəri və ya məlumatı təyin etmək üçün əsas reyestrdən istifadə edirik.
Qeyd: unutmayın ki, kodda nöqtəli nöqtə (';') olan hər hansı bir xətt o nöqtəli nöqtədən sonra bütün şərhlər deməkdir.
;-----------------------------------------------------------------------------------------------
; YAZMA; ------------------------------------------------ ----------------------------------------------- MOV R0, #0x55; core register R0, RAM yerinə yazmaq istədiyimiz məlumatları ehtiva edir.; Aydındır ki, '0x' aşağıdakıların hex dəyərini ifadə edir.
Sonra, DONT -un işləmədiyinə dair ifadələrə nəzər salaq.
; MOV MOV, RAM yerinə məlumat yazmaq üçün əlverişli deyil.
; MOV yalnız reyestrə daxil olan dərhal məlumat üçündür; və ya bir reyestrdən digərinə; yəni MOV R1, R0.; STR STR istifadə etməlidir.; STR R0, = ACONST; İfadədə pis termin ('='); STR R0, 0x20000000; Mağaza təlimatı üçün qanunsuz ünvanlama rejimi; STR R0, ACONST; Mağaza təlimatı üçün qanunsuz ünvanlama rejimi
Çox izah etmədən yuxarıdakı 'ACONST' sözündən istifadə etməyə çalışdıq. Əslində, 0x20000000 kimi hərfi bir dəyər istifadə etmək əvəzinə bir durma və ya sabitdir.
Yuxarıdakıları istifadə edərək RAM yerinə yazmaq üçün yaza bilmədik. Başqa bir şeyi sınayaq.
; RAM yerini ehtiva edən başqa bir qeyd istifadə etməliyik
; həmin RAM yerinə MOV R1, #0x20000000 saxlamaq üçün sifariş verin; RAM yerini (məzmununu deyil, yerini) R1 olaraq təyin edin.; Aydındır ki, '0x' aşağıdakıların hex dəyərini ifadə edir. STR R0, [R1]; R1 (0x55) -də olanları RAM -a (0x20000000) R1 istifadə edərək yazın.; RAM yeri ünvanı olan başqa bir qeyd (R1) istifadə edirik; RAM yerinə yazmaq üçün.
Yuxarıdakıları etmənin başqa bir yolu, ancaq hərfi ünvan dəyəri yerinə 'ACONST' istifadə etmək:
; yenidən yuxarıdakıları edək, amma hərfi RAM yeri dəyəri yerinə simvol istifadə edək.
; 0x20000000 üçün stand-in olaraq 'ACONST' istifadə etmək istəyirik.; dərhal bir dəyəri ifadə etmək üçün '#' etməliyik; buna görə (yuxarıya baxın), '.set' direktivindən istifadə etməli olduq.; Bunu sübut etmək üçün R0 -dakı məlumat modelini dəyişək. MOV R0, #0xAA; tamam MOV R1, #ACONST STR R0, [R1] hərfi ünvan dəyəri əvəzinə simvolu istifadə edərək RAM -a yazmağa hazırıq.
Videoda bir az daha ətraflı məlumat verilir, həm də yaddaş yerindən oxumaqla addımlanır.
Əlavə edilmiş mənbə.asm faylına da baxa bilərsiniz.
Addım 2: Bəzi Əsas Liman Məlumatları
Bir RAM yerindən necə yazılacağını / oxunacağını yaxşı bildiyimizə görə, bu GPIO pinini necə idarə edəcəyimizi və istifadə edəcəyimizi daha yaxşı başa düşməyimizə kömək edəcək.
Beləliklə, GPIO pinləri ilə necə əlaqə qururuq? Bu mikro nəzarətçiyə və ARM təlimatlarına əvvəlki baxışımızdan, daxili qeydləri necə idarə edəcəyimizi və yaddaş (RAM) ünvanları ilə necə əlaqə qurmağı bilirik. Bəs GPIO sancaqları?
Belə olur ki, bu sancaqlar yaddaş xəritəsidir, buna görə də yaddaş ünvanları ilə eyni şəkildə davrana bilərik.
Bu o ünvanların nə olduğunu bilməyimiz deməkdir.
Aşağıda liman başlanğıc ünvanları verilmişdir. Yeri gəlmişkən, MSP432 üçün "liman" yalnız bir pin deyil, sancaqlar toplusudur. Raspberry Pi ilə tanışsınızsa, inanıram ki, buradakı vəziyyətdən fərqlidir.
Yuxarıdakı şəkildəki mavi dairələr, iki açar və LED üçün lövhədəki yazıları göstərir. Mavi xətlər əsl LEDləri göstərir. Baş atlayanlara toxunmaq məcburiyyətində qalmayacağıq.
Maraqlandığımız limanları aşağıda qalın yazdım.
- GPIO P1: 0x4000 4C00 + 0 (cüt ünvanlar)
- GPIO P2: 0x4000 4C00 + 1 (tək ünvanlar)
- GPIO P3: 0x4000 4C00 + 20 (cüt ünvanlar)
- GPIO P4: 0x4000 4C00 + 21 (tək ünvanlar)
- GPIO P5: 0x4000 4C00 + 40 (cüt ünvanlar)
- GPIO P6: 0x4000 4C00 + 41 (tək ünvanlar)
- GPIO P7: 0x4000 4C00 + 60 (hətta ünvanlar)
- GPIO P8: 0x4000 4C00 + 61 (tək ünvanlar)
- GPIO P9: 0x4000 4C00 + 80 (cüt ünvanlar)
- GPIO P10: 0x4000 4C00 + 81 (tək ünvanlar)
Hələ bitirməmişik. Daha çox məlumata ehtiyacımız var.
Limanı idarə etmək üçün bir neçə ünvana ehtiyacımız var. Bu səbəbdən yuxarıdakı siyahıda "cüt ünvanlar" və ya "tək ünvanlar" görürük.
I/O Ünvan Bloklarını Qeyd edin
Digər ünvanlara ehtiyacımız olacaq, məsələn:
- Port 1 Giriş Qeydiyyat ünvanı = 0x40004C00
- Port 1 Çıxış Qeydiyyatı ünvanı = 0x40004C02
- Port 1 İstiqamət Qeydiyyat ünvanı = 0x40004C04
- Port 1 0 Qeydiyyat ünvanı = 0x40004C0A seçin
- Port 1 seçin 1 Qeydiyyat ünvanı = 0x40004C0C
Və başqalarına ehtiyacımız ola bilər.
Yaxşı, indi tək qırmızı LED -i idarə etmək üçün GPIO qeyd ünvanları aralığını bilirik.
Çox vacib bir qeyd: MSP432 LaunchPad lövhəsindəki hər bir I/O Portu bir neçə (adətən 8) pin və ya xətlərin toplusudur və hər biri fərdi olaraq giriş və ya çıxış olaraq təyin edilə bilər.
Bu, məsələn, "Port 1 İstiqamət Qeydiyyatı Ünvanı" üçün dəyərlər təyin edirsinizsə, bu ünvanda hansı biti (və ya bitləri) təyin etdiyiniz və ya dəyişdirdiyinizlə maraqlanmalı olduğunuz deməkdir. Bu barədə daha sonra.
GPIO Port Proqramlaşdırma Sırası
Nəhayət ehtiyac duyduğumuz parça, LED -i idarə etmək üçün istifadə ediləcək bir proses və ya alqoritmdir.
Birdəfəlik başlanğıc:
- Normal GPIO funksiyası üçün P1.0 (P1SEL1REG: P1SEL0REG Qeydiyyatı) <--- 0x00, 0x00 konfiqurasiya edin.
- P1DIRREG -in 1 -ci istiqamət qeyd bitini çıxış və ya YÜKSƏK olaraq təyin edin.
Döngü:
Qırmızı LED -i yandırmaq üçün P1OUTREG qeydinin 0 bitinə HIGH yazın
- Gecikmə funksiyasına zəng edin
- Qırmızı LED -i söndürmək üçün P1OUTREG qeydinin 0 bitinə LOW yazın
- Gecikmə funksiyasına zəng edin
- Döngəni təkrarlayın
Hansı giriş / çıxış funksiyası (SEL0 və SEL1 -i konfiqurasiya edin)
LaunchPad üzərindəki sancaqlar çox istifadə edir. Məsələn, eyni pin standart rəqəmsal GPIO ola bilər və ya UART və ya I2C seriyalı ünsiyyətdə də istifadə edilə bilər.
Bu pin üçün hər hansı bir xüsusi funksiyadan istifadə etmək üçün bu funksiyanı seçməlisiniz. Pin funksiyasını konfiqurasiya etməlisiniz.
Yuxarıda bu konsepsiyanı vizual formada izah etməyə çalışan bir görüntü var.
SEL0 və SEL1 ünvanları bir növ funksiya / xüsusiyyət seçimi kimi çıxış edən cüt birləşməsini təşkil edir.
Məqsədlərimiz üçün standart rəqəmsal GPIO -nun 0 bit olmasını istəyirik. Yəni SEL0 və SEL1 -in LOW olması üçün 0 -a ehtiyacımız var.
Liman Proqramlaşdırma Sırası (Yenə)
1. P1 SEL 0 Qeydinə 0x00 yazın (ünvan 0x40004C0A). Bu bit 0 üçün LOW təyin edir
2. P1 SEL 1 Qeydiyyatına 0x00 yazın (ünvan 0x40004C0C). Bu bit 0 üçün LOW, GPIO üçün ayarlar təyin edir.
3. P1 DIR Register -ə 0x01 yazın (ünvan 0x40004C04). Bu, bit 0 üçün YÜKSƏK təyin edir, ÇIXIŞ deməkdir.
4. P1 Çıxış Qeydinə 0x01 yazaraq LED -i yandırın (ünvan 0x40004C02)
5. Bir növ gecikmə edin (və ya ayıklama zamanı sadəcə bir addım)
6. 0x00 -dən P1 Çıxış Qeydiyyatına yazaraq LED -i söndürün (ünvan 0x40004C02)
7. Bir növ gecikmə edin (və ya ayıklama zamanı yalnız bir addım)
8. 4-7 -ci addımları təkrarlayın.
Bu addımla əlaqəli video, bütün montaj təlimatlarını bir addım ataraq danışdığımız və LED hərəkətini göstərdiyimiz üçün bizi canlı bir demoda bütün proses boyunca aparır. Videonun uzunluğuna görə üzr istəyin.
Addım 3: Videoda Bir Qüsuru Tutdunuzmu?
LED-in bütün proqramlaşdırılması və işıqlandırılması prosesində gedən videoda, əsas döngədə birdəfəlik başlanğıc vəziyyətinə keçə biləcək əlavə bir addım var idi.
Bu Təlimatı keçmək üçün vaxt ayırdığınız üçün təşəkkür edirik.
Sonrakı, burada başladığımızı genişləndirir.
Tövsiyə:
UStepper Robot Arm 4: 5 Addımlar
UStepper Robot Arm 4: Bu, uStepper addım idarəetmə lövhəmiz üçün bir tətbiq olaraq hazırladığım Robotik qolumun 4 -cü təkrarlanmasıdır. Robotun 3 pilləli mühərriki və hərəkətə keçmək üçün servosu olduğundan (əsas konfiqurasiyasında) uStepper ilə məhdudlaşmır
RENAULT SCENIC / MEGANE BOOT TAILGATE ARKA DÜĞMƏNİ DEĞİŞTİRMƏK MONTAJI: 3 addım
RENAULT SCENIC / MEGANE BOOT TAILGATE KİLİDİ ARKA DÜĞMƏNİN DEĞİŞTİRİLMƏSİ: Çəkmə düyməsini yerində saxlayan keyfiyyətsiz O-halqası köhnəlir və bu da avtomobilinizin yükləmə düyməsinin itməsinə səbəb olur. Renault -nun yeganə həlli, yalnız yenidən uğursuz olacaq və başa gələcək açılış kilidi mexanizmidir
Zio Modulları ilə Robotik Qolu İdarə Edin Part 1: 8 Addımlar
Zio Modulları ilə Robot Qoluna Nəzarət 1 -ci hissə: Bu blog yazısı Zio Robotics Seriyasının bir hissəsidir. Giriş Bu dərslikdə Robot Kolunu idarə etmək üçün Zio modullarından istifadə edəcəyimiz bir layihə hazırlayacağıq. Bu layihə, Robot Kol pençənizi necə açmağı və bağlamağı öyrədəcək. Bu n
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: 1 -ci hissədə, C / C ++ yerinə montajdan istifadə edərək Texas Instruments -dan MSP432 LaunchPad inkişaf lövhəsində tək bir qırmızı LEDin necə dəyişdiriləcəyini öyrəndik. oxşar bir şey edəcək - eyni sambdə olan bir RGB LEDini idarə edin
Dərslik ESP8266 və Node-RED MQTT GPIO (Mosquitto) # 1: 5 Addımlar
Dərslik ESP8266 və Node-RED MQTT GPIO (Mosquitto) # 1: ESP8266 modulunu qovşaq qırmızı IoT platforması ilə birləşdirmək üçün MQTT protokolu istifadə edilmişdir, esp8266 üçün MQTT olaraq müştəri kitabxanaları var, bu halda kitabxana pubsubclient istifadə etmək qərarına gəldim. Bu nümunə, məlumatları alan Qırmızı Node alacaq