Buradasın
ARM Mikrodenetleyicilerinde External Interrupt ve RNG Birimi Eğitimi
youtube.com/watch?v=2iBqPUq68UMYapay zekadan makale özeti
- Kısa
- Ayrıntılı
- Bu video, bir eğitmen tarafından sunulan gömülü sistemler programlama eğitim dersidir. Eğitmen, Samet adında bir öğrenciyle birlikte ARM mikrodenetleyicilerindeki teknik konuları ele almaktadır.
- Video, iki ana bölümden oluşmaktadır: İlk bölümde ARM mikrodenetleyicilerinde external interrupt mekanizması, NVIC (Nested Vectored Interrupt Controller) ve GPIO pinlerle ilgili register'ların kullanımı anlatılmaktadır. İkinci bölümde ise RNG (Random Number Generator) çevresel biriminin çalışma prensipleri, donanımsal yapısı ve C programlama dilinde driver yazma süreci detaylı şekilde açıklanmaktadır.
- Eğitim boyunca, interrupt mekanizmasının nasıl çalıştığı, pending register'ın önemi, debouncing sorunu, kooperatif multitasking modeli ve final state machine kurgusu gibi konular ele alınmaktadır. Ayrıca, RNG biriminin analog gürültülerden 32-bitlik rastgele sayı üretme özelliği, clock ayarları, register yapılandırması ve hata yönetimi hakkında teknik bilgiler verilmektedir. Video, teorik bilgilerin yanı sıra pratik uygulamalar ve debug teknikleri de içermektedir.
- 00:02Dersin Devamı ve Hatırlatma
- Ders, register düzeyinde external interrap yazma konusundan devam edecek.
- Tüm interraplar endike bağlıdır; bazıları doğrudan, bazıları ise dolaylı yoldan endike ile bağlantılıdır.
- GPIO kesmeleri, USB ve ethernet gibi birimlerin endike ile bağlantısı için öncelikle eksi birimine inflamente etmek gerekiyordu.
- 01:41ARM Dokümanları ve Önümüzdeki Konular
- ARM kendi çevresel birimleri ile ilgili işler yaparken ARM'un kor dökümanına, eski ile ilgili işler yaparken referans man dökümanına bakmak gerekiyordu.
- Bugün RNG çevresel birimi, vakit kalması durumunda stick time, kooperatif multi-tasking modeli ve final state machine kurgusu konuları ele alınacak.
- ARM dökümanında Cortex-M4 periferileri, sistem kontrol, stick timer, memory protection unit ve floating point unit gibi bölümler bulunmaktadır.
- 03:03Interrap Mekanizması
- Geçen hafta interraplar kullanılırken NVIC (Nested Vectored Interrupt Controller) birimi ile aktif/deaktif edip paritesi yapılmıştı.
- 23 farklı birim düşen kenar, yükselen kenar gibi interraplar alabiliyordu ve vektör table'dan bahsedilmişti.
- Eksiye interrap, iki klondan besleniyordu ve eksi birimlerini kontrol etmek için SYS_CPK_EXI_CR registerına gidilirdi.
- 05:45Interrap Registerları
- Interrap mask register'ları, bir interrap olduğunda o interrapı gizlemek için kullanılır.
- Interrap üretmek için interrap line'ı ayarlamak ve enable etmek gerekir.
- Interrap isteğini resetlemek için pending register'a bir yazılması gerekir, aksi takdirde interrap'ta kalma durumu olur.
- 09:41GPIO Interrap Yönetimi
- GPIO pinlerinden interrapları yönetmek için SYS_CFG register'ı kullanılır.
- Dört farklı register bulunur çünkü GPIO'lar 15 tane pin (1'den 15'e kadar) ile yürütülür.
- Hangi portun hangi pini aktif edip etmek isteniyorsa ilgili register'a etki edilir, örneğin D portunun 9. pinine etki etmek için SYS_CFG_CR3'e bir yazılır.
- 11:06GPIO Kesme Yapılandırması
- GPIO initialize ederken farklı modlar kullanılmış, motor registerına etki eden normal modlar ve interrap aktif eden else kısmı bulunmaktadır.
- GPIO kesme yapılandırması için sys cfg'deki eksi ayarlanmış ve interrap mask register'ı aktif edilmiştir.
- Interrap enable fonksiyonu ile kesme aktif edilmiş, eksi sıfırın ayak numarası verilerek user butondan kesme alınması planlanmıştır.
- 13:58Interrap Vektör Tablosu ve Aktivasyon
- Interrap requestler ENVIC'e gelir ve ENVIC onaylamadıktan sonra kesme alınabilir.
- Vector table'da kesme vektörü bulunmuş ve makrolar kullanılarak 6 numaralı interrap aktif edilmiştir.
- Interrap çalışıp çalışmadığını anlamak için mavi LED pinine toggle komutu eklenecek ve buton basıldığında LED'in yanıp sönmesi kontrol edilecek.
- 17:39Debug ve Test
- Mikrodenetleyiciye bakarak veya debug moduyla kesmenin çalışıp çalışmadığı test edilecek.
- Debug modunda breakpointler konularak kodun çalışması takip edilecek.
- Step-over ve step-into komutları kullanılarak kodun hangi kısımlarına girdiği kontrol edilecek.
- 21:12Register Kontrolleri
- FTSR register'ında sıfırıncı pinin 1 olduğunu kontrol ederek kesme pininin doğru ayarlandığı görülmüş.
- RCC register'ında AHB2ENR bitinin 1 olduğunu kontrol ederek sistem yapılandırma kontrolcüsünün saat aktif edildiği doğrulanmış.
- GPIO register'larında port ve pin ayarlarının doğru yapıldığı kontrol edilmiş.
- 28:06Interrap Test Sonuçları
- Butona basıldığında interrap fonksiyonuna giriş yapıldığı görülmüş.
- Interrap fonksiyonuna giriş yapılsa da normal kod akışı kesilmediği (interraptan çıkılmadığı) belirlenmiş.
- Kod tekrar başlatılarak test edilmesi planlanmış.
- 29:09Interrupt İşlevinin Anlaşılması
- Interrupt (kesme) işlevine giriliyor ancak çıkış yapılamıyor çünkü register askıda kalıyor ve bekleyen interrupt ifade ediyor.
- NVIC (Nested Vectored Interrupt Controller) bir interrupt oluştuğunda, onu işlemek için sıraya koyuyor ve önceliğine bakıyor.
- Pending request register'ı (bekleyen istek kaydı) sürekli 1 olarak kalırsa, NVIC sürekli bir interrupt oluşmuş gibi düşünüyor ve interrupt'ten çıkılamıyor.
- 32:25Interrupt Probleminin Çözümü
- Interrupt içine girildiğinde pending register'ı sıfırlanmalı ki NVIC yeni bir interrupt oluşmuş gibi anlamasın.
- Pending request register'ı interrupt oluştuğunda 1 oluyor ve interrupt'ten çıkmak için bu register'ı sıfırlamak gerekiyor.
- Kodu çalıştırdığımızda butona basıldığında interrupt oluşuyor, LED yanıyor ve pending register sıfır ediliyor.
- 41:32Debouncing ve Kod Şekillendirme
- Amatör düzeyde debouncing (bouncing koruması) için hafif bir çözüm olarak döngü oluşturup debouncingten korunulabilir.
- Kursun sonuna doğru farklı header ve C dosyaları kullanılacak, böylece kod daha efektif hale getirilecek.
- ARM Cortex M4 işlemcisi ile ilgili özellikler için bir header dosyası oluşturulacak ve ARM'ın kendi özellikleri ile ilgili register'lar ve fonksiyonlar buraya toplanacak.
- 45:53Kaynak Dosyaların Düzenlenmesi
- NVIC registerları ARM M4 mimarisi ile ilgili olduğu için Core M4 bölümünde tutulacak.
- GPIO ile ilgili kesmeler GPIO dosyasında tutulması mantıklı olacak.
- Utility dosyası oluşturulup ıvır zıvır fonksiyonlar için kullanılabilecek.
- 52:13Gelecek Konular
- Daha sonra RNG çevresel birimi, stick timer, LCD ve UART konularına giriş yapılacak.
- Ödev gönderen öğrencilerle WhatsApp üzerinden veya Zoom üzerinden görüşülerek ödevler kontrol ediliyor.
- RNG çevresel birimi random number generator (rastgele sayı üretici) anlamına geliyor.
- 55:16Rastgele Sayı Üretimi Türleri
- Rastgele sayı üretimi iki farklı türde olabilir: true number generator (gerçek sayı üretimi) ve sudo number generator (matematiksel süreçle sayı üretimi).
- True number generator, donanım kullanarak ve doğanın gürültüsünden faydalanarak daha güvenlikli bir şekilde sayı üretir.
- Sudo number generator, matematiksel bir süreç kullanır ve aynı girdi verildiğinde hep aynı çıktıyı verir.
- 57:34Mikrodenetleyici Sistemlerinde Rastgele Sayı Üretimi
- Mikrodenetleyici sistemlerinde işletim sistemi yoktur, bu nedenle C'nin standart kütüphanesindeki bazı fonksiyonlar çalışmayabilir.
- C'de rastgele sayı üretimi için srand ve rand fonksiyonları kullanılır, bu fonksiyonlar matematiksel bir süreç kullanır.
- Srand fonksiyonuna verilen tohum değeri değiştirilmezse, her program çalıştırması sırasında aynı rastgele sayı üretilir.
- Rastgele tohum değeri için time kütüphanesinden hizmet alınabilir, böylece her program çalıştırması sırasında farklı bir değer üretilir.
- 1:02:20Rastgele Sayı Üretim Kütüphaneleri
- C dilindeki rastgele sayı üretimi kütüphanesi etkili olmasına rağmen, güvenlik gerektiren ciddi uygulamalarda tercih edilmemelidir.
- Güvenlik için daha kaliteli rastgele sayı üretimi, donanımsal olarak çalışan S'nin rastgele sayı üretimi kütüphanesi gibi alternatifler tercih edilmelidir.
- Rastgele sayı üretiminde kalite, üretimin öngörülemezliğine bağlıdır; insanların tahmin etmesinin zor olduğu sayılar daha kaliteli sayılır.
- 1:04:52RNG Çevresel Birimi Tanıtımı
- RNG (Random Number Generator) çevresel birimi, matematiksel süreç yerine doğadaki analog gürültülerden (analog noise) rastgele sayı üretir.
- Bu birim 32 bitlik (4 byte) rastgele sayı üretir, maksimum değeri yaklaşık 4 milyar 214 milyon civarındadır.
- RNG çevresel birimi, 2001'de yapılan testlerde rastgele sayı üretmede %99 oranında başarılı olmuştur.
- 1:08:12RNG Çevresel Biriminin Özellikleri
- RNG çevresel birimi, analog üretici ile 32 bitlik sayı üretir ve ardışık iki rastgele sayı üretiminde clock sinyali 40 periyot sürer.
- Bu birim düşük güç tüketimi özelliğine sahiptir ve kullanılmadığında kapatılabilir, özellikle bateri ömrü önemli uygulamalarda bu önerilir.
- Rastgele sayı üretimi için doğadaki gürültü veya herhangi bir girdi kullanılabilir, bu öngörülemezliği artırır.
- 1:10:33RNG İşlem Aşaması
- RNG'de lineer feedback shift register kullanılır ve bu değer clock checker ve fault dedektörden geçerek statü sürecine gider.
- Clock'da veya seed'de hata olması durumunda, hatalar statü register'ına yansır ve hata flag'leri aktif hale gelir.
- Data register'da hata yoksa (data ready flag 0) datayı okuyabilir, hata varsa (data ready flag 1) datayı okumak gerekmez.
- 1:16:16Rastgele Sayı Üreticisi Çalışma Mantığı
- Rastgele sayı üreticisi analog devre ve birkaç RIN osilatörden oluşmaktadır.
- Analog devre, tohum değeri üretmek için egzor işlemi yapmaktadır.
- Rastgele sayı üreticisi, LFS clocks'tan bağımsızdır ve bu nedenle rastgele sayı kalitesi HCLK'dan bağımsızdır.
- 1:25:03Rastgele Sayı Üreticisi İşlemi
- Üretilen rastgele değer data registerına aktarılır ve önemli tohum değerleri de aynı şekilde aktarılır.
- Analog tohum değeri ve clock değeri statü bitlerinde izlenir.
- Anormal tohum değerleri veya çok düşük frekanslar durumunda hata oluşabilir ve bu hatalar statü bitlerinde gösterilir.
- 1:26:32Rastgele Sayı Üreticisi Hata Yönetimi
- Hata oluştuğunda bir interrupt (kesme) üretilir.
- Rastgele sayı üreticisi çalıştırılacaksa önce interrupt enable biti set edilmelidir.
- RNG enable biti set edildiğinde analog rastgele sayı üretici ve hata tespiti aktif hale gelir.
- 1:29:45Veri Okuma ve Test
- Her interrupt'ta statü register'ları kontrol edilmelidir.
- Eğer CS bitleri 1 ise data register'deki veri okunabilir, aksi halde veri güvenilir değildir.
- FPS testi başarılı veya başarısız olabilir ve hata yönetimi için gerekli önlemler alınmalıdır.
- 1:33:00RNG Çevresel Biriminin Frekans Özellikleri
- USB OTG FS, 48 MHz random number generator ve SDO'nun frekansı 48 MHz'den küçük olmalıdır.
- Çevresel birimlerin çoğu sys clk'den türetilir, ancak bazı istisnalar vardır.
- USB OTG FS, random number generator clock ve SDO gibi birimler 48 MHz'den düşük frekansta çalışır ve PLL 48 CLK'den gelir.
- 1:35:56RNG Çevresel Biriminin Aktifleştirilmesi
- RNG çevresel birimini kullanmak için önce aktif etmek gerekir.
- RCC'nin kontrol register'ının 24. biti (PL) aktif edilmelidir.
- RNG çevresel biriminde hata oluşursa, error bitlerini okumak gerekir.
- 1:39:25RNG Driver Yazımı
- RNG çevresel birimi için driver yazma işlemine başlanıyor.
- Kolay bir çevresel birim olduğundan üç tane register olduğundan direkt driver yazılabilir.
- RNG-C adında yeni bir dosya oluşturuluyor.
- 1:41:30C'deki Rastgele Sayı Üretimi Sorunu
- C'deki rand() fonksiyonu için time fonksiyonu kullanılamıyor çünkü time fonksiyonu işletim sistemine bağlıdır.
- Time fonksiyonu eksi bir değer döndürdüğünde, başarılı olunmadığı anlamına gelir.
- Time fonksiyonu işletim sistemine bağlı olduğundan, bu platformda çalışmadığı için rastgele sayı üretimi söz konusu olmuyor.
- 1:51:03RNG Çevresel Biriminin Kullanımı
- C'deki rand() fonksiyonu ve time fonksiyonundan yardım alamıyorsak, mevcut RNG çevresel birimini kullanarak işlemlerimizi halledebiliriz.
- RNG çevresel biriminin functional description kısmında nasıl yapılacağı anlatılıyor.
- RNG çevresel birimini initialize edecek bir fonksiyon yazılacak.
- 1:53:00GPI Ünite ve Fonksiyon Parametreleri
- GPI ünitesinde fonksiyon parametrelerine bakıldığında, çeşitli konfigürasyonlar içeren bir hende structure geçilmiştir.
- Rng çevresel biriminde tek bir rng var, bu nedenle rng birimlerinin durumunu belirtmek için parametre gerekmez.
- Rng için açma-kapama parametresi kullanılabilir ve rng'yi close etmek mantıklı olabilir.
- 1:54:18RNG Fonksiyonu ve Başlatma İşlemi
- RNG fonksiyonu için rng-c dosyasına include edilmiştir.
- RNG başlatma işlemi (rng init) sırasında enable interrupt işlemi gerçekleştirilmiştir.
- RNG çevresel birimini başlatmak için register işlemleri yapılmıştır.
- 1:56:37Clock Aktif Etme ve RNG Yapılandırması
- Her çevresel birimle initialize ederken, kullanmadan önce ilgili clock bitini aktif etmek gerekir.
- Clock enable ayarları timer'lar, pwm'ler, adc'ler gibi birçok driver için önemlidir.
- RNG, ABI2 üzerinden bağlanmaktadır.
- 1:58:41RNG Hakkında Bilgiler
- RNG hakkında kısa özet bilgiler verilmiştir, örneğin 32 bitlik yapıdan bahsedilmiştir.
- RNG'nin base adresi vardır ancak memory mapping yapılmamıştır.
- Gerçek sayı üretimi (true number generator) için yapılandırma yapılacak ve clock aktif edilmelidir.