ARM cevrebirimleri ve kesme yoneticisi

Başlatan bunalmis, 09 Nisan 2007, 00:53:50

z

Oncelikle LPC21xx kullanicilarinin  hangi dokumanlari karistikdiklarini ogrenmek istiyorum. Ben Philipsin user manual_lpc214x dokumanini izliyorum ve kitapdan  hic memnun değilim. (Mikrochip kadar guzel bir kitap yazamamislar)

Mesela, ARM cevrebirimleri int uretme yetenegine sahip. Hangi cevre birimi kac numarali int uretir bu int numarasi sabitmi yoksa sabit değilse int no atanabiliyormu?

Bu bilgiyi bendeki dokumanda bulamadim. Muhakkak vardir ama 300 kusur sayfalik dokumanda kaybolup gidiyorum.

Kesme yoneticisi ile int kaynaklari arasindaki iliskiyi kavramam lazim.

Basit bir aciklama da bulunabilirmisiniz?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

Aradigim VIC Kanal numaralarini buldum. (Sayfa 59)
Ornek programlar sayesinde isimi de gordum ancak cok ezbere bir cozum oldu.

Intterupt mekanizmasinin isleyisini anlatabilecek varmi? Bu kisim ARM islemcide en can alici nokta gibi duruyor.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

kurumahmut

LPC21xx kısa adı VIC olan Vectored Interrupt Controller' a sahiptir. Bu birim sayesinde interruptlar yönetiliyor. FIQ, vectored IRQ veya non-vectored IRQ şeklinde 3tip olmak üzere 32 interrupt isteğine cevap verebilen birimdir. 

FIQ(Fast Interrupt reQuest) tipindeki kesmeler en öncelikli kesmelerdir.  Vectored IRQlar ise sonraki önceliğe sahiptir. Non –vectoredlar ise en düşük öncelikli kesmelerdir.

16 vectered IRQ slotu olduğundan en fazla 16 vectored IRQ tanımlanabilir. Bu slotlardan slot0, slot 15den daha önceliklidir.

Keil yazılımında bir fonksiyonu kesme alt programı olarak kullanabilmek için fonksiyon parantezlerinden sonra __irq ve __fiq şeklinde eklemeler yapılır. Programda ise herhangi bir kesme isteği bu fonksiyona yönlendirilir. Yani önce kesme programı yazılır. Sonra bu fonksiyona bir VIC vektör adresi slotu atanır. Daha sonra da atanan bu slota bir kesme kaynağı atanır.

void my_ISR_fonk(void) __irq
{
       ….
       VICVectAddr = 0x00000000;
}

/*Ana programda*/

VICVectAddr1 = (unsigned long)  my_ISR_fonk ;           // set interrupt vector in VIC 1
VICVectCntl1 = 0x20 | 15;                                              // use VIC 0 for EINT1 Interrupt
VICIntEnable = 1 << 15;                                                // Enable EINT1 Interrupt

Örnek kodda  my_ISR_fonk diye kesme alt programı tanımladım ve bu fonksiyonu VIC' in slot 1' ine atadım. Slot 1 de harici kesme 1'i atadım. Daha sonra da harici interrupttan gelecek kesmeleri aktif ettim. Harici interrupt1 den bir kesme geldiğinde VIC ilgili slotuna gidecek ve ordaki adresi işlemciye yollayacak. İşlemci de o adrese dallanıp kesme programını çalıştıracak. Kesme alt programından çıkmak için  VICVectAddr = 0; yazılmalıdır.

CoşkuN

Alıntı yapılan: "bunalmis"Oncelikle LPC21xx kullanicilarinin  hangi dokumanlari karistikdiklarini ogrenmek istiyorum. Ben Philipsin user manual_lpc214x dokumanini izliyorum ve kitapdan  hic memnun değilim. (Mikrochip kadar guzel bir kitap yazamamislar)

Mesela, ARM cevrebirimleri int uretme yetenegine sahip. Hangi cevre birimi kac numarali int uretir bu int numarasi sabitmi yoksa sabit değilse int no atanabiliyormu?

Bu bilgiyi bendeki dokumanda bulamadim. Muhakkak vardir ama 300 kusur sayfalik dokumanda kaybolup gidiyorum.

Kesme yoneticisi ile int kaynaklari arasindaki iliskiyi kavramam lazim.

Basit bir aciklama da bulunabilirmisiniz?
Hocam buradaki kitapları sevdim şahsen.Örnek kodlar da sitede var sanırım.

CoşkuN