Forum: Mikrocontroller und Digitale Elektronik ADUC7026 Interrupt mit TIMER


von geronimer (Gast)


Lesenswert?

Hallo zusammen,

ich möchte gerne ein Interrupt auslösen nach 5sec. mit TIMER2. Folgende 
Daten werden verwendet:

Clock frequency = 32 768Hz
Prescaler = 256
TIMER2 = 2^32 bit

Mein Problem ist, dass ich nicht weiß wie ich den Wert für T2LD 
errechnen kann, damit ich auf die 5sec. komme.

Im Datenblatt steht: "In periodic mode the counter decrements/increments 
from the value in the Load Register(TxLD MMR,) until zero/full
scale and starts again at the value stored in the Load Register."

Jedoch weiß ich nicht wie ich auf den Wert für T2LD komme unter 
Berücksichtigung von clock frequency and prescaler.

Danke!

Quellcode:
#include<aduc7026.h>

void delay(int);
void ADCpoweron(int);
void My_IRQ_Function(void);    //  IRQ Function Prototype

int main(void) {

GP4DAT = 0x04000000;          // P4.2 configured as an output. LED is 
turned on

//timer2 configuration
T2CON = 0xE8;                  // Configures Timer2 to count down, with
                              // "Hr:Min:Sec:Hundredths" format and 
prescalar of 256
T2CLRI = 0xFF;                // Clearing Timer2 Interrupt
T2LD = 0x780;                  // Sets the counter register to 3 sec. 
Format: HH:MM:SS:hh

IRQ = My_IRQ_Function;        //   Specify Interrupt Service Rountine
IRQEN = WAKEUP_TIMER_BIT;      //  Enable general purpose timer

while(1){
  GP4DAT ^= 0x00040000;        // Complement P4.2
  delay(100001);
       }
}

/********************************************************************/
/*                                                                  */
/*    Interrupt Service Routine                                      */
/*                                                                  */
/********************************************************************/

void My_IRQ_Function()
{

//Blinking slower each time when interrupt occurs
int i=0;
  for (i=0; i<=5; i++){
      delay(1000000);
      GP4DAT ^= 0x00040000;    // Complement P4.2
    }
T2CLRI = 0xFF;                // Clearing Timer2 Interrupt
return;
}

void ADCpoweron(int time){
  ADCCON = 0x620;               // power-on the ADC
  while (time >=0)            // wait for ADC to be fully powered on
    time--;
}

void delay (int length) {
  while (length >=0){
    length--; }
}

von geronimer (Gast)


Lesenswert?

Hat sich erledigt, mussteT2CON umändern und neu berechnen. Jetzt 
klappts, danke!

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.