Verwenden des XMEGA-Timers

Ich möchte den Timer in XMEGA verwenden, um zu wissen, wie lange es dauert, bis eine Funktion ausgeführt wird:

void timerINI() {
    //cli(); // deactivating the interrupt 
    TCC0.CTRLA = TC_CLKSEL_DIV1024_gc;
    TCC0.CTRLB = TC_BYTEM_NORMAL_gc;
    //TCC0.INTCTRLA= 0x03;
    TCC0.PER =  0x7A12;
}

int main () {
    ....................
    while(1) {
        TCC0_CNT = 0x00;
        printf(" 1THE timer value is : %5x \n ",TCC0_CNT);
        otherFUNCTION();
        printf(" 2 THE timer value is : %5x \n ",TCC0_CNT);
    }
}

Der Ausgangswert ist 2323. Ich habe ein Problem zu verstehen, was dieser Wert zeitlich für mich bedeutet. Die MCU läuft mit 32 MHz.

Ich denke, dass der Ausgabewert die Anzahl der Zyklen darstellt, die für die abzuschließende Funktion durchgeführt wurden. Bei einer Frequenz von 32 MHz beträgt die Periode 31 ns und wenn Sie sie mit der Anzahl der Zyklen multiplizieren, erhalten Sie die Zeit, welche Funktion abgeschlossen werden muss, und diese Zeit beträgt 72 uS
@lazar danke für die Hilfe, aber was ist die Rolle des Vorteilers
Lesen Sie einfach dies en.wikipedia.org/wiki/Prescaler , wenn ich Recht habe, teilen Sie einfach 32 MHz mit dem Prescaler, der TCC0.CTRLA = TC_CLKSEL_DIV 1024 _gc ist; und führen Sie die gleiche Berechnung mit dieser neuen Frequenz durch.
"the output value is : 2323" - Sie geben zwei Werte aus. Soll 0x2323 die Differenz aus den beiden Werten sein?
Wie kompiliert sich das überhaupt? Soll nicht TCC0_CNTsein TCC0.CNT? Und die Zeile TCC0.PER = 0x7A12;wird überhaupt nicht benötigt, so wie Sie den Timer in diesem Beispiel verwenden.

Antworten (1)

Ihre XMEGA-Frequenz beträgt 32 MHz, mit der Zeile TCC0.CTRLA = TC_CLKSEL_DIV1024_gc haben Sie den Prescaler auf 1024 ausgewählt, Sie müssen die Kernfrequenz 32000000/1024 = 31250 = 31 KHz teilen, dann eine Periode dieser 31 KHz finden, die 32us ist, und multiplizieren Es muss mit der Anzahl der Zyklen-Funktion abgeschlossen werden (2323) und danach erhalten Sie die Zeit, die Sie benötigen, nämlich 74 ms.

vielen Dank für deine Hilfe. PS 2323 war HEx ;-)
Nach der Konvertierung sind es also 8995 statt 2323 und Sie erhalten 287 ms.