Mimarinin çevre donanımlara verdiği clock'u bölerek vermesi

Başlatan ziyaretci, 13 Nisan 2019, 12:32:43

ziyaretci

Hayırlı günler.

Son birkaç aydır okul vesilesiyle MSP430 'u ASM ile programlayarak bilgiler ediniyorum. Hayliyle PIC'i programlamaya C ile başladığımdan bazı soru işaretlerim oluyordu. Bir çoğunun cevabını buldum.

Şimdi mesela PIC'de timer kullanacaksak kaynak frekansının 4'e bölümündeki değeri referans alıyoruz.

Ben şunu merak ediyorum; bu 4'e bölmenin nedeni 1 komutun işletiminin tamamen bitmesinden dolayı mıdır? Çünkü bazı komutlar 1-3 arasında saykıl oranlarında tamamlanıyor. Hayliyle komut işlenirken adres bus meşgul, yani core ilgili komutun işlenmesiyle meşgul. Bu arada kesme gelirse core kesme işlemleriyle meşgul olacağından kesme gelmedenki yapılan işlemlerin önbellekteki bilgileri yok olacak.

Yani her komut tamamlandıktan sonra kesmeyi kontrol ediyor. Çakışma olmaması için.

Böyle bir mantık geldi cevap olarak, gerçekten de neden bu mu?

Eğer cevap buysa ilgili timer'ın harici clock frekansının bir limiti olmalı değil mi? Yoksa core sayaç bilgisini kaçırır.

Verdiğinizin bilgiler için şimdiden teşekkür ederim.


devrecii

Komut cycle ile ilgisi yoktur,  timerinde bulunduğu çevre birimlerinin max mhz kısıtlaması ile ilgilidir diye tahmin
ediyorum.

İrq kesme isteği geldiği an cpu tüm registerlerini push eder ve irq vektördeki adrese atlama yapar bu işlemin başlangıcı
cpu çekirdeğindeki irq pinin set edilmesi ile olur . Yani tek cyclede irq kesme prosedürünün başlaması lazım.

M.Salim GÜLLÜCE

Senin birkaç timer değişimini okuyabileceğin en küçük clok time desen daha doğru olur.
Bus ile ilgisi yoktur.
birinci komut icra edilip ikinciye geçilmeden timer 2 değişim yaşasa hiç bir işine yaramaz.

RaMu

Bu sorunun bir tane cevabı yok
detaylı ve net bir şekilde söyleyebilecek kadarda bilgim yok.
İşlemci mimarisine özel olarak konuşulabilir belki.

Pic 10~18f için işlemci 1 komut işleme süreci 4 temel adımdan oluşuyor ve
doğal olarak 4 clock saykılda 1 komut işleniyor.
Program yazma mantığı ve pic içinde timer değer karşılaştırma işi vs.
ne zaman yapılmalı diye düşünürsek zaten
timer saymasını komut işleme zamanına denk getirmek gerektiği açık.
Ben bu konuları merak ettiğimde oturup mimari videolarını izlemiştim,
zevkli bir konu aslında.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

fahri-

Pic de timer lar 2 çeşit kullanılabiliyor. Dahili osc kullanılırsa osc/4 sayar. Harici bir osc ile sürülürse 4 e bölünmeden direk sayar.
Ama timerların hepsi direk harici saymaz.
Pic de frekansın 4 e bölünmenin sebebi:
Mimari yapısı gereği 1 komut 4 clc süresinde işlenir.

Okan AKÇA

Pic mimarisinin belkide eksiği bu diyebiliriz. Arm serileri bu konuda cok daha iyi başarılı.

apsis

Pic mimarisinin eksiği diyemeyiz. Adamlar böyle tasarlamış. ARM serileri bir komutu 3 aşamada işler (fetch, decode, execute) ancak her komutun işlenmesi 1 cycle'dır. PIC mimarisi 1 komutun işlenmesini beklerken ARM mimarisi, fetch'deki işlem decode'a geçtiğinde fetch yeni bir komut çeker yani Pipeline hiç boş kalmaz. Ayrıca ARM'lar AHB veri yolu hattına bağlı donanımlar clock hızında çalışırken APB veri yolu hatlarına 2'ye 4'e veya çekirdeğe bağlı olarak doğrudan clock hızını uygulayabiliyorsunuz. Mesela TI c28x çekirdekleri 8 aşamada komutu işliyor ancak ARM gibi pipeline boş kalmıyor yani 1cycle.

@erkantr67  Bunları daha iyi kavrayabilmek için kullandığın işlemcinin instruction sets dosyalarını incele. Orada sana komutların nasıl işlendiğini yani çekirdeğin mimarisinden bahseder. Anahtar kelimen "Pipeline".
"Makineye Beyin" MEKATRONİK

RaMu

Pic diye direk konuşmayın,
bir tane mimari yok,
dspic33 ve pic32 ler farklı çalışıyor.
Zaten genel konuşabilmek için MIPs diye bir terim var.

@apsis bahsetmiş,
ek olarak sıradaki komutun belli olmadığı yani önceden bilinemediği durumda
pipeline işi ne oluyor onuda düşünün.

Ayrıca komut var komut var
4 saykılda işlenip 1 saykılda işlenenin 4 katı iş yapıyorsa komut
ne yapacaksınız.

Mimari hakkında atıp tutmak kolay iş değil.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

devrecii

Timer ayrı bir modul cpu ile ilgisi yok ki neden cycle ile bağlantı kuruyorsunuz anlamadım, stm8 de tüm timerler stm32 de tim1 tam cpu clocku verilebiliyor, bunlarda da 2 4 cycle süren komutlar var,  eğer interrupt isteği ise problem bunu bir reg e kaydedebilir komut işlemi bittikten sonra interruptu devreye sokabilir ki zaten öyle.

stm32 de bazı timerler daha düşük hızda çalışmak zorunda çünkü o module giden clock kaynağı 2 yada 4 bölündüğü için.

Mesela çinde satılan frekans sayıcılar var devresini internette görmüştüm pic16f?? kullanılmış timer 80mhz ye kadar sayıyor, hatta 200mhz hıza ulaştırmış adamın biri internnte var (harici clock).

Cpu Mimarisine ilgi duyan arkadaşlara tavsiyem aliexpden fpga bordu alıp fpga kodlamayı öğrensinler, kendi cpularını
yapmaya çalışsınlar , tabi zamanları  varsa.




RaMu

Yapar Çin liler tabi.
Açıp bir Pic datasheet inden timer block diagramına baksanız
neden olamayacağını görürsünüz.
(Tabi timer prescaler kullanıp, frekans ölçüm çözünürlüğünden ödün vermek isterseniz o başka.)




Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

devrecii

Şemayı görünce daha net anlaşıldı , çok ilkel bir yapısı var .

Normalde timerin içinde yapılır if (compare) işlemi, burada ise mikroişlemciye yaptırılıyor
yani programcıya , bu durumda counter registerine mikroişlemci işlem yaparken clock
verilemmesi gerekir yoksa işlem hatalı sonuç verir.

Sadece clock hızı değil clock yavaş da olsa mikroişlemci komut işlerken rise/fall değişmemesi
gerekir bu nedenle senkronizasyon birimi koymuşlar ki araya clock girmesin.

Yani kısacası mikroişlemcinin komut işleyebilmesi için,   modern mcu larda böyle bir dert yok çünkü tüm işlemleri timer modulü kendisi yapıyor .