Jag får inga interrupt helt enkelt.
Jag tror att jag jag har hittat något som kanske kan bidra till mina misslyckanden.
När jag laddar tccr0a för att sätta prescaler så hamnar det över mitt DDRB register. Så D0 & D3 är dom enda bitarna på portb som blir utgångar helt plötsligt. (laddar jag $ff till tccr0a så är alla satta som utgångar)
Jag har kollat i can128def.inc och ddrb är mappad till $04 och tccr0a är mappad till $24. (orginal can128def.inc som följde med AVRstudio ver 4.12 SP1 build 462)
Någon som kan ha en aning om vad som kan strula?
Portarna funkar som dom skall för övrigt. Uart0 samt 1 är oxå ok.
Jag har isolerat interruptrutinerna och provat med bara dom i programmet och får samma problem även då.
Någon som kan ha något tips?
Här är lite delar ur koden. (stackpekare mm är korrekt initierade)
Kod: Markera allt
.org $0000 ; Reset vector
jmp init
.org $0022 ; Timer0 Overflow vector
jmp tim0_ovf
interrupt_init:
ldi temp,$01 ; Overflow interrupt enable
sts timsk0,temp
ldi temp,$05 ; Prescaler = clk/1024, OC0A disconnected.
sts tccr0a,temp
sei ; Enable global interrupts
Men hela portb borde vell inte dö?
Jag använder mig ju inte av OutputCompare och har ju därför stängt av funktionen i TCCR0A.
Edit2: Nu verkar processorn ha blivit rädd för någon högre makt och började bete sig ganska normalt. (dock inga interrupts, men det kanske kommer det oxå)
Den gör dock inte som den skall med portb enligt databladet.