.include "tn2313def.inc"
.def	tmp		= r16
.def	tmp2	= r17

.CSEG
.ORG 0
		rjmp	Reset
.ORG OC0Aaddr
		rjmp	IR_Timer 		;Nächster Timerinterrupt für die Decodierung
.ORG INT1addr
		rjmp	IR_Interrupt	;Jetzt sollte ein neues Telegramm anfangen
.ORG INT_VECTORS_SIZE
		;
		;
Reset:	;Nach einem evtl Softreset, muss der Interrupt gelöscht werden!
		cli

		; Stackpointer initialisieren
		ldi		tmp,	RAMEND
		out		SPL,	tmp

		;IR-Decoder initialisieren:
		; - Timer 0 mit Prescaler 64 starten
		; - Externer Interrupt 1 aktivieren, bei jeder Pegeländerung Interrupt auslösen
		rcall Init_IR_Decoder

		;global Interrupts frei
		sei

Loop:
		rjmp Loop



		;
		;Unterprogramme:
		;
Init_IR_Decoder:
		; Wenn sich irgendetwas(LOW->HIGH; HIGH->LOW) am Pin INT1 tut, wird ein Interrupt ausgelöst;
		in		tmp,	MCUCR ; Microcontroller Unit Control Register
		andi	tmp, 	0xff - (1<<ISC11)	; unset ISC11
		ori		tmp,	(1<<ISC10) 			; set ISC10
		out		MCUCR,	tmp
		
		; enable INT1
		in		tmp,	GIMSK ; General Interrupt Mask Register
		ori		tmp,	(1<<INT1)
		out		GIMSK,	tmp

		; set timer0
		ldi		tmp,	0
		out		TCCR0A,	tmp ; Timer Counter Control Register 0A
		;
		ldi		tmp,	0b011	; prescaler 64
		out		TCCR0B,	tmp ; Timer Counter Control Register 0B

		ret

IR_Timer:
		reti

IR_Interrupt:
		reti

