Hallo,
vorab: mein erster Einsatz der neuen DD-Familie, bisher immer Atmega und Attiny (alt)
Nach einigen Versuchen aufgrund eines seltsamen Verhalten beim AVR64DD habe ich folgendes eingegrenzt:
Ich betreibe den Chip mit 3.3V und einem externen 3,6864MHz Quarz und nutze auch die util/delay.h. Den TCA0 nutze ich zum Zählen von 50ms-Einheiten. Sobald ich bei der Initialisierung des TCA0 einen Wert in TCA0.SINGLE.PER schreibe, wird delay_ms nun massiv langsamer.
Ich benutze an anderer Stelle die RTC - daher hier der TCA.
Initialisierung auf 3,6864 MHZ - kontrolliert mit DSO über aktivierten PA7:
1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
15 |
|
16 |
|
17 |
|
18 |
|
nun das interessante:
1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
15 |
|
16 |
|
17 |
|
18 |
|
19 |
|
20 |
|
21 |
|
22 |
|
23 |
|
24 |
|
25 |
|
26 |
|
27 |
|
Ich habe zunächst vermutet, dass der TCA-Prescaler aus irgendeinem Grund den Systemtakt ändert. Via DSO habe ich aber verifiziert, dass auch im zweiten Delay der Systemtakt an PA7 noch bei den 3,68 MHz ist.
Sobald ich das Setzen der PER aus dem TCA0 rausnehme, sind auch der untere delay 5 Sekunden (es reicht die eine Zeile auszukommentieren).
Es scheint nun, dass der delay als Basis nicht den System Takt nimmt, sondern 5000 mal den Overflow von TCA0 (das wären dann ca. 250 Sekunden was hinkommenm könnte). Da ich hierzu aber keinerlei Hinweis im Datasheet finde und ich auch nicht von so einem Hardware-Bug ausgehe, ist die tatsächliche Ursache aber vermutlich eine andere.
Kann hier jemand zur Aufklärung und Lösung beitragen?
Grüße Micha
