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.