Forum: Mikrocontroller und Digitale Elektronik Timer CAPTURE Interrupt LPC23xx.h


von Mueller B. (frankyfarell)


Angehängte Dateien:

Lesenswert?

Hallo,

Ich versuche über Timer Capture siese Signal auszuwerten, ich will ein 
DC motor über Gabellichtschranke steuern uzw. Vorlauf,rücklauf, .dafür 
brauche ich den Timer Capture, kann mir bitte jemand helfen wir ich mich 
damit umgehen kann?
 - wie soll ich mein Timer so einstellen dass jeder 1,53ms ein abfrage 
ankommt?(über T1PR? oder wie? ich habe keine ahnung
 - wie solle ich nach diese abbildung mein Motor über timer Stopen, 
Vorfahren, rückfahren?

Danke
hier ist die quelleCode für timer1

 void Timer_init (void)
   {

//   PCLKSEL1 = 1<<4|1<<5;
             PINSEL1 = 0x00000000;
   PINSEL3 = 0x00000000;
   FIO2DIR |=1<<11|1<<12;
   FIO2CLR |=1<<11|1<<12;
                //Pclk to ??
   PINSEL3 |= (1<<4)|(1<<5)|(1<<6)|(1<<7);  //CAP1.0 and CAP1.1
   T1PR    = 0x00007530;   // Load prescaler for 1mSec   //or to 1mSec 
(Pclk)
   T1TCR   = 1<<1;                    //Reset Counter and Prescaler
             // generate interrupt on falling and rising edge of cap1.0 
and CAP1.1
   T1CCR   = 1<<0|1<<1|1<<2|1<<3|1<<4|1<<5;
            //Timer increment on Both edge on CAP input pin,CAP1.1 is 
sampled for clocking:
  // T1CTCR   = 1<<0|1<<1;//|1<<2;
   T1TCR  = 1<<0;            //Enable Timer
           //Set Timer0(CAP0) interrupt vector Addresse
   VICVectAddr5 = (unsigned long)Timer1_ISR;
   VICVectCntl5 = 0xE;             //Set Channel
              VICIntEnable = (1 << 5);//|(1<<26);
   }

int main (void)
{
      // long val = 0;
       Timer_init();                             /* Initializiere Timer 
*/
  while (1) {}//loop
}

void Timer1_ISR (void)__irq
{


   NewL1 = T1CR0 ;//save Capture valuer of Timer1 CAP1.0
   NewL2 = T1CR1 ; //save Capture valuer of Timer1 CAP1.1
  //Output doese Valuer
   FIO2SET  = 1<<NewL1;
   FIO2SET  = 1<<NewL2;
     T1IR |= 0x10;             // reset Counter
              VICVectAddr =0x00;            // Acknowledge Interrupt
}

von Mario (Gast)


Lesenswert?

Lass den prescaler mal auf null gestzt (T1PR=0). Machst Du ja auch, 
nachdem Du ihn gesetzt hast (T1TCR = 1<<1) :O)

die Timerzeit wird mit einem Matchregister eingestellt.

T0MR0 = ((FOSC*PLL_M)/(1000))-1;
T0MCR = TxMCR_RESET_ON_MR0;

hier ein Beispiel:
http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/#lpcio_irq

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.