Forum: Mikrocontroller und Digitale Elektronik SAM7: Impulszählung


von Jörg R. (rupprecht_joerg)


Lesenswert?

Hallo,

habe ein Problem mit dem Timer des AT91SAM7S256. Ich möchte Impulse, 
welche am TIOAx - Eingang (0 und 1 benutzt) anliegen, zählen indem ich 
diese Frequenz als externe Counterfrequenz für das jeweilige CV-Register 
verwendete. Über das BMR müsste das, zumindest wenn ich die Beschreibung 
richtig verstanden habe, funktionieren. Leider tuts nicht so in der 
Realität.
Nach einer bestimmten Torzeit will ich das CV-Register auslesen und 
löschen. Das Ganze beginnt dann von neuem.

Hier noch die wichtigen Auszüge aus dem Source:

Init:
     AT91C_BASE_TCB->TCB_BMR = (AT91C_TCB_TC0XC0S_TIOA1 |
          AT91C_TCB_TC1XC1S_TIOA0 | AT91C_TCB_TC2XC2S_NONE);

Enable:
     AT91C_BASE_TC1->TC_CCR = AT91C_TC_CLKDIS;
     AT91C_BASE_TC1->TC_IDR = 0xFFFFFFFF;
     ui_Status = AT91C_BASE_TC1->TC_SR;
     // Zähler aufsetzen (XC1)
     AT91C_BASE_TC1->TC_CMR = (AT91C_TC_CLKS_XC1);
     // Zähler aktivieren
     AT91C_BASE_TC1->TC_CCR = (AT91C_TC_CLKEN | AT91C_TC_SWTRG);
     ui_Status = AT91C_BASE_TC1->TC_SR;
     AT91C_BASE_TC1->TC_CCR = (AT91C_TC_CLKEN);

Disable:
     AT91C_BASE_TC1->TC_CCR = AT91C_TC_CLKDIS;

Read:
     ui_Status = AT91C_BASE_TC1->TC_SR;
     ui_Zwischen = AT91C_BASE_TC1->TC_CV;
     if ((ui_Status & AT91C_TC_COVFS) == AT91C_TC_COVFS)
         ui_Zwischen += 65536;
     // Lösche CV
     AT91C_BASE_TC1->TC_CCR = (AT91C_TC_CLKEN | AT91C_TC_SWTRG);
     ui_Status = AT91C_BASE_TC1->TC_SR;
     AT91C_BASE_TC1->TC_CCR = (AT91C_TC_CLKEN);

Habe mein Problem an die Hotline von Atmel gesandt, aber nur einen
Beispielcode ohne Zusammenhang zu meinem Problem bekommen.

Möchte keinen Interrupt verwenden! Momentan läuft schon eine 
Interruptlösung für das Problem, welches aber durch weitere Interrupts 
bei höherer Eingnagsfrequenz zu einer hohen Auslastung des MC´s führt.

Vielleicht kann mir doch noch einer helfen ;-) Die Hoffnung stirbt 
zuletzt.

Im Voraus besten Dank und Grüße
Jörg

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.