Kontrolör ne zaman ISR'ye atlamayı biliyor?


12

Çekirdek düzeydeki şeylerden bahsediyorum.

Anladığım kadarıyla, kontrolör çekirdeği sadece bellekten getirilen talimatları yürütür (Getir - Çöz - Yürüt). Bir Kesme geldiğinde, çekirdek / ALU ISR'ye atlamaya nasıl karar verir?

Çünkü biz veya derleyici, kesme durumunu yoklamak için herhangi bir talimat eklemiyoruz - o zaman bir kesintinin sunulması gerektiğini nasıl bilebilir?

Yanıtlar:


13

Ne eksik çekirdek olmasıdır yapar daha adil bellekten getirilen opcodes yürütmek başka yapacak. Kesmeleri uygulamak için özel bir mantığı vardır.

Kesme algılama donanımı, kesme alma zamanının geldiğini belirten bir sinyal verdiğinde, genellikle bellekten hiçbir zaman alınmayan çekirdeğe özel bir talimat sıkışır. Çoğu durumda bu, kesinti vektör adresine bir ÇAĞRI talimatıdır. Bu, mevcut PC'yi çağrı yığınına kaydetmek ve kesme vektör adresine değiştirmek için mevcut komut yürütme mekanizmasını kullanır. Ayrıca önceden getirilmiş talimatları ve benzerlerini atmakla da ilgilenir.

Özel kesinti mantığı aynı zamanda kesintileri de devre dışı bırakmak zorundadır, böylece aynı kesinti koşulu bir sonraki döngü vektörü adresine başka bir çağrı yapılmasına neden olmaz. Farklı işlemcilerin bunu idare etmenin farklı yolları vardır. En basit olanı, kesintileri kesin bir şekilde devre dışı bırakmak ve yazılımın kesme hizmeti rutininin sonunda bunları yeniden etkinleştirmesini gerektirmektir. Diğer işlemcilerin kesme öncelik düzeyi vardır. Bu seviye, yalnızca yüksek öncelikli kesme koşullarının yeni bir kesintiye neden olabilmesi için çarpılır. Kesme önceliği CALL dönüş adresiyle birlikte otomatik olarak kaydedilen ve kod kesmeden döndüğünde geri yüklenen bir şeydir.


1
Kesmeler CALLfarklı bir şekilde sonlandırıldığından , bu genellikle sıradan bir talimat değildir (çapraz başvuru RETvs. RETI).
glglgl

1
Kesinti algılama donanımı sinyali verdiğinde, Bellek yerine CPU'nun atlamak için başka bir yerden talimat aldığını güvenle varsayabilir miyim ... Bir Anahtar gibi ... Anahtar KAPALI olduğunda, Hafızadan talimat al ve anahtar AÇIK olduğunda , Bu talimatı yerine getirmek?
Swanand

3

Genelde modern mikrodenetleyicilerde, kesintileri yönetmekle görevli özel bir Kesinti Kontrolörü (IC) birimi vardır. Buna ek olarak her bir çevresel bileşen giden bir kesme çıkış (lar) 0için 1bir durumu (örneğin bir iş tamamlandıktan bu cihaz için) uygulamak (ya da tam tersi). Bu çıkış kesinti kontrolörüne bağlanır. Coreİşlemci bu özel kesme görmezden ya IC söyleyebilir (bunu maskelemek) ya da belirli sinyalleri tetikleyerek olur ve ardından MCU onunla ne karar verir zaman MCU bildirmek için. Ortak yol, IC'ye MCU'ya hangi kesmenin gerçekleştiğini söylemesi ve ilgili işleme koduna atlamasıdır.


2

Bilgisayar çekirdeğinde, program sayacında tetiklenen belirli kesmeye karşılık gelen yeni bir değer sıkıştıran donanım var. Kesme rutini tamamlandıktan sonra nereye geri dönüleceğini hatırlamak için, donanım kesme adresini program sayacına sıkmadan önce program sayacındaki geçerli değer yığına itilir. Kesme rutini tamamlandığında, program sayacının orijinal değeri yığının dışına geri yüklenir.

Kesme zamanında program sayacına sıkışacak değerler genellikle iki şemadan biri tarafından belirlenir. Bir yaklaşım, program sayacında her bir kesme türü için sabit bir adres sıkışır ve bilgisayar çekirdeği bu sabit konumdan yürütmeye başlar. Sabit konumdaki alan genellikle boyut olarak sınırlıdır, bu nedenle gerçek kesme hizmeti konumuna giden sabit adreslerde bir atlama talimatını kodlamak yaygındır. Diğer şema, kesme vektör tablosu olarak adlandırılan bir şey kullanır. Burada donanım, kesme tipine bağlı olarak vektör tablosuna sabit bir adres ofseti üretir. Donanım daha sonra bu tablo konumundaki içeriği çıkarır ve bu değeri program sayacında sıkışmak için bir adres olarak kullanır.


2

Denetleyicide, yürütülecek bir sonraki komutun kaydedildiği adresin kaydını tutan program sayacı için bir kayıt bulunur . (Bu kayıt, bir atlama yürütüldüğünde de yazılır.)

Denetleyici, ISR'nin depolandığı adres olan bir kesme vektörüne (veya bazen birden fazla, kesme tipine bağlı olarak) sahiptir. Bu adres her zaman aynıdır - programın başladığı sıfırlama vektörü gibidir.

(Genellikle, bu vektörde saklanmak için gerçek koda atlayan bir atlama talimatı vardır, çünkü vektördeki boşluk tüm prosedürü saklamak için yeterli değildir. Ancak, önemli olan, ISR'nin her zaman aynı konumda olmasıdır. durum.)

Bir kesinti meydana geldiğinde, denetleyicide program sayacını kesinti vektörüyle yazan bazı özel donanımlar bulunur. Daha sonra, kontrol cihazı bir sonraki talimat döngüsüne ulaştığında, talimatı program sayacı tarafından işaret edilen adresten getirir (yani kesme vektörü).

(Denetleyicinin bir talimat döngüsünde gerçekleştirdiği farklı görevler vardır: bir sonraki talimatı program sayacının işaret ettiği adresten alır; program sayacını artırır; talimatın kodunu çözer ve yürütür.)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.