Compare auf einen kaskadierten 32bit Counter bei AtXmega

Gast #3519693
Lesenswert?

Samuel schrieb:
> Hallo zusammen
>
> Ich habe beim AtXmega zwei einzelne 16bit Counter zu einem 32Bit
> kaskadiert.
>
> Nun möchte ich einen Compare auf einen bestimmten 32Bit wert machen.
>
>
> Hat jemand eine Idee, wie dies am elegantesten geht?
>
> Danke!

uint32_t a;
uint32_t b;

if ( a == b) {
  }
Gast #3519855
Lesenswert?

Peter II schrieb:
> Samuel schrieb:
>> Hallo zusammen
>>
>> Ich habe beim AtXmega zwei einzelne 16bit Counter zu einem 32Bit
>> kaskadiert.
>>
>> Nun möchte ich einen Compare auf einen bestimmten 32Bit wert machen.
>>
>>
>> Hat jemand eine Idee, wie dies am elegantesten geht?
>>
>> Danke!
>
> uint32_t a;
> uint32_t b;
>
> if ( a == b) {
>   }

Ich meinte einen Compare Interrupt!

Also es soll einen Interrupt bei einem bestimmten Wert der beiden 
Register auslösen
Gast #3520977
Lesenswert?

Na, wie breit sind den die compare Register ?

Das wird nur über Umwege gehen.
Z.B. in jeder IRQ des 'unteren' compares prüfen ob der 'obere' schon 
gekommen ist.

Oder beide Compare Out extern per 'und' Gatter verknüpfen.

Oder der 'obere' Compare IRQ schaltet den 'unteren' Compare IRQ frei.

Oder, oder, oder ...
Gast #3522435
Lesenswert?

Effektiv scheint mir nur den langsameren Zähler, ein Compare Interrupts 
zu verpassen, der bloß den schnelleren Timer-Compare-Interrupt 
aktiviert. Dieser Compare deaktiviert sich anschließend wieder selbst.

Funktioniert aber nur, wenn der ISR Aufruf genug Zeit hat, sonst läuft 
der schnellere Zähler drüber und das einschalten kommt zu spät.

Leider gibt es keine Funktion die einen wirklichen Vergleich auswertet. 
Es ist immer nur ein Compare Match. Als CNT == CCX kann nur Aktionen 
auslösen :(

Grüße

Zedd
Gast #3522695
Lesenswert?

Zedd schrieb:
> Effektiv scheint mir nur den langsameren Zähler, ein Compare Interrupts
> zu verpassen, der bloß den schnelleren Timer-Compare-Interrupt
> aktiviert. Dieser Compare deaktiviert sich anschließend wieder selbst.
>
> Funktioniert aber nur, wenn der ISR Aufruf genug Zeit hat, sonst läuft
> der schnellere Zähler drüber und das einschalten kommt zu spät.
>
> Leider gibt es keine Funktion die einen wirklichen Vergleich auswertet.
> Es ist immer nur ein Compare Match. Als CNT == CCX kann nur Aktionen
> auslösen :(

Ich habs neet verstanden, aber scheinbar geht ehhh nett.

Warum nutzt du keinen zur Problemstellung passenden Controller?
Gast #3523113
Lesenswert?

Also 500.000 soll der compare sein

Langsamer Zähler Compare bei 0x0007, aktiviert CC Interrupt des 
schnelleren Zählers bei 0xA120. Ist dieser gekommen, schaltet sich der 
Interrupt des schnelleren Zählers wieder ab...

Würde man es nicht so machen, dann würde man 2^16 - 1 mal zu oft einen 
Interrupt bei einem 32 Bit Durchlauf aufrufen... wenn das net weiter 
wichtig ist, ist es ja auch okay...

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