SAM7: Impulszählung

OP #579211
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren