ADUC7026 Interrupt mit TIMER

Gast #2207734
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--; }
}

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.