İçindekiler:

GPIO KOL MONTAJI - T.I. ROBOTİK SİSTEM ÖĞRENME KİTİ - LAB 6: 3 Adım
GPIO KOL MONTAJI - T.I. ROBOTİK SİSTEM ÖĞRENME KİTİ - LAB 6: 3 Adım

Video: GPIO KOL MONTAJI - T.I. ROBOTİK SİSTEM ÖĞRENME KİTİ - LAB 6: 3 Adım

Video: GPIO KOL MONTAJI - T.I. ROBOTİK SİSTEM ÖĞRENME KİTİ - LAB 6: 3 Adım
Video: Arduino Robot Kol | Nasıl Yapılır ? - Robotik Projeler 2024, Kasım
Anonim
GPIO KOL MONTAJI - T. I. ROBOTİK SİSTEM ÖĞRENME KİTİ - LAB 6
GPIO KOL MONTAJI - T. I. ROBOTİK SİSTEM ÖĞRENME KİTİ - LAB 6

Merhaba, Texas Instruments TI-RSLK (MSP432 mikrodenetleyiciyi kullanır) kullanarak ARM montajını öğrenme hakkında önceki bir Talimatta, yani T. I. Tabii ki, bir kayıt defterine yazma ve koşullu döngü gibi bazı çok temel talimatların üzerinden geçtik. Eclipse IDE'yi kullanarak yürütmeyi adımladık.

Yürüttüğümüz ufacık programlar dış dünyayla etkileşime geçmek için hiçbir şey yapmadı.

Biraz sıkıcı.

Giriş/çıkış portları, özellikle dijital GPIO pinleri hakkında biraz öğrenerek bugün bunu biraz değiştirmeye çalışalım.

Öyle oluyor ki bu MSP432 bir geliştirme panosunda geliyor, hepsi de bazı GPIO bağlantı noktalarına bağlı olan iki basmalı düğme anahtarına, bir RGB LED'e ve bir kırmızı LED'e sahip.

Bu, bu pinleri montaj yoluyla kurmayı ve manipüle etmeyi öğrendiğimizde, bu etkileri görsel olarak görebildiğimiz anlamına gelir.

Hata ayıklayıcıya adım atmaktan çok daha ilginç.

(Hala adım atacağız - bu bizim 'gecikme' işlevimiz olacak):-D

Adım 1: RAM'e Yazmayı / RAM'den Okumayı Deneyelim

GPIO'ya erişmeye ve onu kontrol etmeye geçmeden önce küçük bir adım atmalıyız.

Sadece standart bir bellek adresini okuyup yazarak başlayalım. Önceki Eğitilebilir Tablodan (oradaki resimlere bakın) RAM'in 0x2000 0000'da başladığını biliyoruz, bu yüzden bu adresi kullanalım.

Verileri bir çekirdek kayıt (R0) ile 0x2000 0000 arasında taşıyacağız.

Bir derleme programının temel dosya yapısı veya içeriği ile başlıyoruz. TI'nin Code Composer Studio'sunu (CCS) ve bazı örnek projeleri kullanarak bir montaj projesi oluşturmak için lütfen bu Eğitilebilir Tabloya bakın.

.baş parmak

.text.align 2.global ana.thumbfunc ana ana:.asmfunc;--------------------------------- --------------------------------------------------; (kodumuz buraya gelecek);------------------------------------------ ------------------------------------------.endasmfunc.end

Üst bölüme yeni bir şey eklemek istiyorum, bazı bildirimler (direktifler) var mıydı? Daha sonra daha net hale gelecektir.

ACONST.set 0x20000000; bunu daha aşağıda kullanacağız (bu bir sabittir)

; açıkçası, '0x', aşağıdakilerin bir onaltılık değer olduğunu belirtir.

Yani başlangıç dosya içeriğimiz şimdi şöyle görünüyor:

.baş parmak

.text.align 2 ACONST.set 0x20000000; bunu daha aşağıda kullanacağız (bu bir sabittir); açıkçası, '0x', aşağıdakilerin bir onaltılık değer olduğunu belirtir..global ana.thumbfunc ana ana:.asmfunc;--------------------------------------- ------------------------------------------; (kodumuz buraya gelecek);------------------------------------------ ------------------------------------------.endasmfunc.end

Şimdi yukarıdakilere sahip olduğumuza göre, kesikli çizgiler arasına kod ekleyelim.

Bir RAM konumuna yazmaya başlıyoruz. İlk önce RAM'e yazacağımız veri modelini, bir değeri oluşturacağız. Bu değeri veya verileri oluşturmak için bir çekirdek kayıt kullanırız.

Not: Kodda, noktalı virgül (';') olan herhangi bir satırın, o noktalı virgülden sonra bir yorum olduğu anlamına geldiğini unutmayın.

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

; YAZI;------------------------------------------------ -------------------------------------------------- HAREKET R0, #0x55; çekirdek kaydı R0 RAM konumuna yazmak istediğimiz verileri içerecektir.; açıkçası, '0x', aşağıdakilerin bir onaltılık değer olduğunu belirtir.

Ardından, ÇALIŞMAYAN ifadelere bir göz atalım.

; MOV MOV, bir RAM konumuna veri yazmak için kullanılamaz.

; MOV sadece kayıt içine anlık veriler içindir,; veya bir kayıttan diğerine; yani, MOV R1, R0.; STR, STR kullanmalıdır.; STR R0, =ACONST; İfadede hatalı terim ('='); STR R0, 0x20000000; Mağaza talimatı için geçersiz adresleme modu; STR R0, ACONST; Mağaza talimatı için geçersiz adresleme modu

Çok fazla açıklamadan yukarıdaki 'ACONST'u kullanmaya çalıştık. Esasen, 0x20000000 gibi değişmez bir değer kullanmak yerine bir yedek veya sabittir.

Yukarıdakileri kullanarak RAM konumuna yazmak için yazamadık. Başka bir şey deneyelim.

; RAM konumunu içeren başka bir kayıt kullanmalıyız gibi görünüyor

; bu RAM konumuna depolamak için MOV R1, #0x20000000; RAM konumunu (içeriği değil, konumu) R1'e ayarlayın.; açıkçası, '0x', aşağıdakilerin bir onaltılık değer olduğunu belirtir. STR R0, [R1]; R1'i kullanarak R0'da (0x55) olanı RAM'e (0x20000000) yazın.; RAM konum adresi olan başka bir kayıt (R1) kullanıyoruz; bu RAM konumuna yazmak için.

Yukarıdakileri yapmanın başka bir yolu, ancak değişmez adres değeri yerine 'ACONST' kullanmak:

; Yukarıdakileri tekrar yapalım ama gerçek bir RAM konum değeri yerine bir sembol kullanalım.

; 0x20000000 için bir yedek olarak 'ACONST' kullanmak istiyoruz.; acil bir değeri belirtmek için hala '#' yapmamız gerekiyor; yani (yukarıya bakın), '.set' yönergesini kullanmak zorunda kaldık.; Bunu kanıtlamak için, R0'daki veri desenini değiştirelim. HAREKET R0, #0xAA; tamam MOV R1, #ACONST STR R0, [R1] literal adres değeri yerine sembolünü kullanarak RAM'e yazmaya hazırız

Video, bellek konumundan okumaya adım atmanın yanı sıra biraz daha ayrıntıya giriyor.

Ekli kaynak.asm dosyasını da görüntüleyebilirsiniz.

Adım 2: Bazı Temel Bağlantı Noktası Bilgileri

Image
Image
Bazı Temel Bağlantı Noktası Bilgileri
Bazı Temel Bağlantı Noktası Bilgileri
Bazı Temel Bağlantı Noktası Bilgileri
Bazı Temel Bağlantı Noktası Bilgileri

Artık bir RAM konumuna nasıl yazacağımız/okuyacağımız konusunda iyi bir fikre sahip olduğumuza göre, bu, GPIO pinini nasıl kontrol edip kullanacağımızı daha iyi anlamamıza yardımcı olacaktır.

Peki GPIO pinleriyle nasıl etkileşime geçeceğiz? Bu mikrodenetleyiciye ve onun ARM komutlarına önceki bakışımızdan, onun dahili yazmaçlarıyla nasıl başa çıkacağımızı ve bellek (RAM) adresleriyle nasıl etkileşime geçeceğimizi biliyoruz. Ama GPIO pinleri?

Öyle oluyor ki bu pinler hafıza haritalıdır, bu yüzden onlara hafıza adresleri ile aynı şekilde davranabiliriz.

Bu, bu adreslerin ne olduğunu bilmemiz gerektiği anlamına gelir.

Aşağıda port başlangıç adresleri verilmiştir. Bu arada, MSP432 için bir "port" sadece bir pin değil, bir pin koleksiyonudur. Raspberry Pi'ye aşina iseniz, bunun buradaki durumdan farklı olduğuna inanıyorum.

Yukarıdaki resimdeki mavi daireler, iki anahtar ve LED için tahtadaki yazıyı göstermektedir. Mavi çizgiler gerçek LED'leri gösterir. Başlık atlama tellerine dokunmamız gerekmeyecek.

İlgilendiğimiz bağlantı noktalarını aşağıda kalın harflerle yaptım.

  • GPIO P1: 0x4000 4C00 + 0 (çift adresler)
  • GPIO P2: 0x4000 4C00 + 1 (tek adresler)
  • GPIO P3: 0x4000 4C00 + 20 (çift adresler)
  • GPIO P4: 0x4000 4C00 + 21 (tek adresler)
  • GPIO P5: 0x4000 4C00 + 40 (çift adresler)
  • GPIO P6: 0x4000 4C00 + 41 (tek adresler)
  • GPIO P7: 0x4000 4C00 + 60 (çift adresler)
  • GPIO P8: 0x4000 4C00 + 61 (tek adresler)
  • GPIO P9: 0x4000 4C00 + 80 (eş adresler)
  • GPIO P10: 0x4000 4C00 + 81 (tek adresler)

Henüz işimiz bitmedi. Daha fazla bilgiye ihtiyacımız var.

Bir portu kontrol etmek için birkaç adrese ihtiyacımız var. Bu yüzden yukarıdaki listede "çift adresler" veya "tek adresler" görüyoruz.

G/Ç Kayıt Adres Blokları

Başka adreslere ihtiyacımız olacak, örneğin:

  • Port 1 Giriş Kayıt adresi = 0x40004C00
  • Port 1 Çıkış Kayıt adresi = 0x40004C02
  • Port 1 Yön Kayıt adresi = 0x40004C04
  • Port 1 Seç 0 Kayıt adresi = 0x40004C0A
  • Port 1 Seç 1 Kayıt adresi = 0x40004C0C

Ve başkalarına ihtiyacımız olabilir.

Tamam, artık tek kırmızı LED'i kontrol etmek için GPIO kayıt adresleri aralığını biliyoruz.

Çok önemli bir not: MSP432 LaunchPad kartındaki her G/Ç Bağlantı Noktası, birkaç (genellikle 8) pin veya çizgiden oluşur ve her biri ayrı ayrı bir giriş veya çıkış olarak ayarlanabilir.

Bu, örneğin, "Port 1 Yön Kayıt Adresi" için değerler ayarlıyorsanız, o adreste hangi biti (veya bitleri) ayarladığınız veya değiştirdiğiniz ile ilgilenmeniz gerektiği anlamına gelir. Bu konuda daha sonra.

GPIO Port Programlama Sırası

İhtiyacımız olan son parça, LED'i kontrol etmek için kullanılacak bir süreç veya algoritmadır.

Tek seferlik başlatma:

  • Normal GPIO işlevselliği için P1.0'ı (P1SEL1REG:P1SEL0REG Register) <--- 0x00, 0x00 yapılandırın.
  • P1DIRREG'in Yön kayıt biti 1'i çıkış veya YÜKSEK olarak ayarlayın.

Döngü:

Kırmızı LED'i açmak için P1OUTREG kaydının 0 bitine HIGH yazın

  • Bir gecikme işlevi çağırın
  • Kırmızı LED'i kapatmak için P1OUTREG kaydının 0 bitine LOW yazın
  • Bir gecikme işlevi çağırın
  • Tekrar Döngüsü

Hangi Giriş/Çıkış İşlevi (SEL0 ve SEL1'i yapılandırın)

LaunchPad'deki pinlerin birçoğunun birden fazla kullanımı vardır. Örneğin, aynı pin standart dijital GPIO olabilir veya UART veya I2C seri iletişimde de kullanılabilir.

Bu pin için belirli bir işlevi kullanmak için o işlevi seçmeniz gerekir. Pin işlevini yapılandırmanız gerekir.

Bu adım için yukarıda bu kavramı görsel biçimde açıklamaya çalışan bir resim var.

SEL0 ve SEL1 adresleri, bir tür işlev/özellik seçimi gibi davranan bir çift kombinasyonu oluşturur.

Amaçlarımız için, 0 biti için standart dijital GPIO istiyoruz. Bu, SEL0 ve SEL1'in DÜŞÜK olması için 0 bitine ihtiyacımız olduğu anlamına gelir.

Port Programlama Sırası (Tekrar)

1. P1 SEL 0 Register'a 0x00 yazın (adres 0x40004C0A). Bu, bit 0 için bir DÜŞÜK ayarlar

2. P1 SEL 1 Register'a 0x00 yazın (adres 0x40004C0C). Bu, bit 0 için DÜŞÜK, GPIO için bir ayar yapar.

3. P1 DIR Register'a 0x01 yazın (adres 0x40004C04). Bu, 0 biti için YÜKSEK, yani ÇIKIŞ anlamına gelir.

4. P1 OUTPUT Register'a bir 0x01 yazarak LED'i açın (adres 0x40004C02)

5. Bir tür gecikme yapın (veya hata ayıklama sırasında yalnızca tek adımlı geçiş yapın)

6. P1 OUTPUT Register'a 0x00 yazarak LED'i kapatın (adres 0x40004C02)

7. Bir tür gecikme yapın (veya hata ayıklama sırasında yalnızca tek adımlı geçiş yapın)

8. 4'ten 7'ye kadar olan adımları tekrarlayın.

Bu adımla ilgili video, her bir montaj talimatını tek bir adımla incelediğimiz ve LED eylemini gösterdiğimiz için, canlı bir demoda tüm süreç boyunca bizi yönlendirir. Lütfen videonun uzunluğunu mazur görün.

3. Adım: Videodaki Bir Kusuru Yakaladınız mı?

LED'in tüm programlama ve aydınlatma sürecini anlatan videoda, ana döngüde tek seferlik başlatmaya taşınabilecek fazladan bir adım vardı.

Bu Eğitilebilir Tablodan geçmek için zaman ayırdığınız için teşekkür ederiz.

Bir sonraki, burada başladığımız şeyi genişletiyor.

Önerilen: