Guten Morgen!
Ich habe ein Problem mit dem Overflow interrupt von Timer0 im assyncron
modus mit Uhrenquartz.
in der Simulation funktioniert es wie es soll, nur auf dem Target nicht.
Anscheinend wird ab und zu das Overflow flag nicht gesetzt oder der
Interrupt nicht ausgeführt. ich habe das Programm mal so weit
zusammengeschnitten bis nur noch der Fehler nachstellbar ist.
Konkret:
1 | #include "rtc.h"
|
2 |
|
3 | uint16_t time = 0;
|
4 | uint16_t z = 0;
|
5 |
|
6 | int main(void){
|
7 | DDRB |= _BV(7);
|
8 | InitRtc();
|
9 | sei();
|
10 | while(1){
|
11 | z = getMin();
|
12 | if(del_ms_big_read(&time,1000)){
|
13 | del_ms_big_start(&time); //<-- Breakpoint setzten
|
14 | DDRB ^= _BV(7); //Led an/aus
|
15 | }
|
16 |
|
17 | }
|
18 | }
|
wenn an gekenzeichneter Stelle im AvrStudio über Jtag ein Breakpoint
gesetzt wird, dann kann mann sehen das die Variable z oder gleichwertig
bigMin1_4 aus rtc.c bei einen Überlauf des Timers nicht um 256 erhöht
wurde. jedoch in der Simulation funktioniert dies. könnte mir nicht
vorstellen das nur die eine funktion auf dem Controller defekt ist da
der rest wunderbar funktioniert.
währe schön wenn das jemand auf seinen System testen könnte.
zum System: ATMega128 16MHz
compiler ist winAvr 20071221
im anhang ist compilierbares projekt mit nachstellbaren fehler, makefile
ist im ordner release
Vielen dank im Vorraus
Stefan