Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => ARM => Konuyu başlatan: taytis - 31 Mart 2011, 00:06:59

Başlık: ARM TiMER CONTROL YARDIM
Gönderen: taytis - 31 Mart 2011, 00:06:59
                     Arkadaşlar selam , aşağıdaki kodu derlediğimde periyot değeri kullanılmayacak diye warning alıyorum ,gerçektede while döngüsünde kullanamıyorum ,hata veriyor. İstediğim P0.2 clock girişini okumak istiyorum. periyot değeri 1 veya 0 değerine göre programı dallandırmak istiyorum.Yardımlarınız için teşekkür ederim.

(c#.net oludğu gibi public static int periyot ; olmam mı ? :)  ;))

'void T0isr(void) __irq;'  __irq' ne anlama geliyor. Tekrar teşekkürler.









#include <lpc21xx.h>


  void T0isr(void) __irq;
int main (void)

{
VPBDIV=0x00000002;
PINSEL0=0x00000020;     /* binary: 00000000_00000000_00000000_00100000 */
IODIR0=0x000007F8;     /* binary: 00000000_00000000_00000111_11111000 */
T0PR=0x00007530;
T0TCR=0x00000002;
T0CCR=0x00000005;
T0TCR=0x00000001;
IOSET0=0x00000000;
IOCLR0=0x00000000;
VICVectAddr4=(unsigned)T0isr;
VICVectCntl4=0x00000024;
VICIntEnable=0x00000010;
////////////////////////////
   while(1){
     }    }

void T0isr(void)   __irq
{
static int periyot;
periyot=T0CR0;
T0IR|=0x00000001;
VICVectAddr=0x00000000;


}
Başlık: Ynt: ARM TiMER CONTROL YARDIM
Gönderen: NaMcHo - 31 Mart 2011, 01:12:18
Henüz Arm ler ile kesme uygulaması yapmadım ama sanırsam
void T0isr(void)   __irq Timer0 kesme fonksiyonu.

Ayrıca http://www.hitex.com/index.php?id=download-insiders-guides burada süper kaynaklar var.
Başlık: Ynt: ARM TiMER CONTROL YARDIM
Gönderen: taytis - 31 Mart 2011, 09:52:04
Yönlendirme için teşekkürler , periyot değerini nasıl çekerim
Başlık: Ynt: ARM TiMER CONTROL YARDIM
Gönderen: taytis - 31 Mart 2011, 09:54:40
Link için tekrar sağol ,nxp sitesine göre daha güzel dökümanlar daha anlaşılır.
Başlık: Ynt: ARM TiMER CONTROL YARDIM
Gönderen: Nedenler - 31 Mart 2011, 10:16:52
ARM çekirdeğinde interruptlar iki türlüdür. Bunlar Fast Interrupt Request (__fiq) General Purpose Interrupt Request (__irq) şeklindedir. Adından da anlaşılabileceği gibi birisi hızlı kesmedir herhangi bir kesme fiq olarak belirlenebilir. Bu durumda kalan diğer kesmeler irq olacaktır. Bir bakıma öncelik ataması da denilebilir. Yukarıda ise "void T0isr(void)   __irq" satırında giriş ve dönüş değeri void olan yani olmayan timer 0 fonksiyonu irq olarak tanımlanıyor.
Başlık: Ynt: ARM TiMER CONTROL YARDIM
Gönderen: taytis - 31 Mart 2011, 10:48:40
Teşekkür ederim nedenler , peki bu uygulama p0.2 clock sinyali veripte okumak istiyorum , if (periyot==1) dediğimde hata alıyorum , NEDEN ?
Başlık: Ynt: ARM TiMER CONTROL YARDIM
Gönderen: NaMcHo - 31 Mart 2011, 10:59:07
periyot değişkenini tanımlamamışsınız.

Düzeltme : Pardon değişkeni tanımladınığınızı.
Başlık: Ynt: ARM TiMER CONTROL YARDIM
Gönderen: taytis - 31 Mart 2011, 14:18:53
void T0isr(void)   __irq
{
static int periyot;
periyot=T0CR0;
T0IR|=0x00000001;
VICVectAddr=0x00000000;


}
Başlık: Ynt: ARM TiMER CONTROL YARDIM
Gönderen: Nedenler - 31 Mart 2011, 14:32:38
Neden periyodu 1 veya 0 olarak düşünüyorsun ki ?
P0.2 pinindeki haraketler timera milisaniye cinsinden yansıyacak. Her yükselen kenarda kontrol yapılacağı için eğer 1 ms okunduysa sen clock sinyalin iki yükselen kenarı arasındaki zamanın 1 ms olduğunu anlayacaksın. Bu yüzden periyot değişkeninde muhtemelen T0CR0 registerının değeri olan 32 bitlik bir değer okuyacaksın. Yaptığın ayarlamalara göre de (1ms olarak ayarlanmış) Okuduğun değer kadar ms geçmiş olacak. Yani timer her 1 ms de bir saydığından sen periyot değişkeninde 100 okuduğunda iki yükselen kenar arası 100 msdir diyeceksin.