Sida 1 av 1

Interupt ATMega128

Postat: 12 februari 2004, 15:14:36
av Harald
Jag fick tidigare hjälp av Erixon med interrupt på ATMega16. Nu vill jag göra samma sak med ATMega128 men det funkar inte. TCNT1L stegas upp men det blir aldrig något interupt.
Kanske är det något skitfel någonstans eller också har jag missuppfattat rubbet.
/Harald

.include "m128def.inc"
;.device ATMega128
.def Temp = r24

.cseg
.org 0x0000

rjmp RESET
.org 0x0018 ;cpu hoppar hit vid interupt Compare Match
rjmp timer1_m
RESET:

ldi r16,low(RAMEND) ;initiera stackpointer
out SPL,r16 ;initiera stackpointer
ldi r16,high(RAMEND) ;initiera stackpointer
out SPH,r16 ;initiera stackpointer
ldi Temp,0x00
out TCCR1A,Temp ;Nollställ
ldi Temp,0x0C ;Bit 3 och 4 ettor för enable av "compare match"
out TCCR1B,Temp
ldi Temp,0b10000000 ;sätt bit 7 till 1 för att enabla Timer/Counter2
out TIMSK,Temp
ldi Temp,0x3D ;61 decimalt
out OCR1AH,Temp
ldi Temp,0x09 ;OCR1AH och OCR1AL bildar ett 16-bitarstal som
out OCR1AL,Temp ;blir 15625. Det talet x 256 blir 4000 000 vilket
sei ;är klockfrekvensen. Dvs det blir ett interupt
;varje sekund

timer1_m:
inc r20
reti

Postat: 12 februari 2004, 18:00:12
av Melker
Tror du ska sätta OSCIE1A i TIMSK för att få ett interrupt på compare match.

Postat: 13 februari 2004, 15:12:08
av Harald
Melker,
Jag följde ditt råd och petade in en etta i bit 4 i TIMSK och nu funkar det!
JABBBADABBBADOOOOO!!!
/Harald