Forum: Mikrocontroller und Digitale Elektronik LPC1115, wie spielt man mit dem Timer


von monem (Gast)


Lesenswert?

Hallo zusammen,

Ich habe neulich angefangen mit den Timern zu exprimentiern. Folgender 
Code soll den 32bit Timer/Counter des LPC1115 aktivieren und bis zu 
einer gewisser Zahl hier (0x2000) hochzählen lassen und stoppen. Um zu 
schauen ob es funktioniert möchte ich den Inhalt des Counters als den 
Register (TC) lesen können, doch im Debug modus ist der Inhalt immer 
gleich 0.
Kann jemand drüber schauen und sagen was ich da falsch mache?? Danke



int main(void)
{
LPC_SYSCON->SYSAHBCLKCTRL |= (1<<9);  //Clock(power) to the Timer
LPC_TMR32B0->PR = 0x0;  //When the Prescale Counter (PC = PR), clock
                        //increments the TC and clears the PC.

LPC_TMR32B0->MR0 = 0x2000;
LPC_TMR32B0->CCR = 0x0;      //Timer mode
LPC_TMR32B0->TCR |= (1<<1);    //Timer reset
LPC_TMR32B0->TCR |= (1<<0);    //Timer on
LPC_TMR32B0->MCR |= (1<<2);    //Stop Timer on match with MR0;
LPC_TMR32B0->TCR &= ~(1<<0);

  while(1)
    {



    }

    return 0 ;
}

von Jim M. (turboj)


Lesenswert?

Zuviele magische Zahlen. Es gibt sicher auch Definitionen für die ganzen 
Timer Flags in einem Header.


Dann wäre vermutlich aufgefallen, dass Du hier
1
LPC_TMR32B0->TCR &= ~(1<<0);

den Timer aussschaltest. So zählt der nich hoch.

von monem (Gast)


Lesenswert?

Danke. Das stimmt leider. Das war ein Versehen weil ich ein anderes 
Code-Beispiel bei dem ein PWM programmiert wurde zum Teil übernommen 
hatte.


int main(void) {

//Set up 16 bit timer for PWM operation

 LPC_IOCON->PIO0_8 = (LPC_IOCON->PIO0_8 & ~(0x3FF)) | 0x2; // pin for 
PWM use
 LPC_SYSCON->SYSAHBCLKCTRL |= (1<<7); //enable clock signal to 16 bit 
timer0
 LPC_TMR16B0->PR           = 0x0;    //set prescaler max value, not used 
here
 LPC_TMR16B0->MCR          = 0x10;   //set for reset on counter match
 LPC_TMR16B0->EMR          |= 0x20;  //set pin 27 to 1 on match
 LPC_TMR16B0->CCR          = 0;      //set to timer mode
 LPC_TMR16B0->PWMC         = 0x1;    //set channel zero to PWM mode
 LPC_TMR16B0->MR1          = 0x32;   //set value for period
 LPC_TMR16B0->MR0          = 0xC;    //set value for duty cycle
 LPC_TMR16B0->TCR          |= 0x3;   //enable and reset counter
 LPC_TMR16B0->TCR          &= ~(0x2); //clear reset bit

    while(1){                     //infinite loop
    }
    return 0 ;
}


Aber theoretisch könnte man schon mit LPC_TMR32B0->TC den Inhalt von TC 
auslesen, oder?? Das wäre auch mal eine Frage.

von Nico W. (nico_w)


Lesenswert?

monem schrieb:
> Aber theoretisch könnte man schon mit LPC_TMR32B0->TC den Inhalt von TC
> auslesen, oder?

Ja

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.