Hallo, ich habe ein Problem mit zu vielen Calls im Interrupt.

Mein Programm ist so gestrickt, dass im Mainloop nix läuft (außer ne LED blinken) und in der ISR eine Nachricht per UART gesendet wird.

Wenn ich nun nur 1byte sende (2 calls hintereinander) funktioniert es dauerhaft. Wenn ich aber einen Frame aus 6 bytes senden will (so soll die Funktion sein) viele calls und operationen, dann führt er das einmal korrekt aus aber bekommt danach kein Interrupt vom CAN mehr rein. Andere Interrupts gehen danach trotzdem. Er hängt sich auch nicht auf.

was muss ich da beachten? wieso kann ich nicht so viele calls machen wie ich will?

Code:
;Global Interrupt Vektor
		ORG 0x0008
		goto	Isr
;******************************************************************************
;	Start des Hauptprogramms			 	                        	      *
;******************************************************************************
;
Main:
	ORG		0x0100
		rcall Init	
MainLoop:
		bcf		LATC,5
		bcf		LATC,4
		movlw	0x44
		movwf	xms 
		call	wxms          ;kurz warten
	goto MainLoop
;
;******************************************************************************
;	Initialisierung							                                  *
;******************************************************************************
Init:
	; 8MHz als interne Frequenz
		movlw	0x70		
		movwf	OSCCON
	; Portdirektionen definieren		
		movlw	0x08
		movwf 	TRISB
		movlw	0x8F
		movwf	TRISC
		clrf	LATC
	; Schnittstellenkonfigurationen
		rcall	canInit
		rcall	uartInit
	; Interrupts konfigurieren
		bsf	INTCON, 7	; Global Int aktivieren
		bsf	INTCON, 6	; Peripherie Int aktivieren
		bsf	PIE3, 0		; Interrupt fuer RXB0 aktivieren
		bsf	PIE1, 5		; Interrupt fuer EUSART receive aktivieren
	return
;
Isr:
		btfss	PIR3, 0		; CAN-Nachricht empfangen?
	goto	uartInt                      ; nein!
canInt:
		bsf		LATC,5
;CAN Nachricht nach UART senden
		call	canRecMsg
		movf	canIDL,w
		xorlw	0x02
		btfss	STATUS,Z
	goto	nloadcanmsg
loadcanmsg:
		movlw	0xFF
		movwf	uartsMsg
		call	uartSendMsg
;		movf	canIDL,w
;		iorlw	0x80
;		movwf	uartsMsg
;		call	uartSendMsg
;		movf	canIDH,w
;		andlw	0xF0
;		iorlw	0x09
;		swapf	WREG
;		movwf	uartsMsg
;		call	uartSendMsg
;		movf	canIDH,w
;		andlw	0x0F
;		iorlw	0xA0
;		movwf	uartsMsg
;		call	uartSendMsg	
;		movf	canDLC,w
;		iorlw	0xC0
;		movwf	uartsMsg
;		call	uartSendMsg
;		movf	canDLC,w
;		btfsc	STATUS,Z
;	goto	nloadcanmsg
;		movwf	tempvar
;		movf	canMsg0,w
;		andlw	0xF0
;		swapf	WREG
;		movwf	uartsMsg
;		call	uartSendMsg
;		movf	canMsg0,w
;		andlw	0x0F
;		movwf	uartsMsg
;		call	uartSendMsg
;		decf	tempvar
;		btfsc	STATUS,Z
;	goto	nloadcanmsg
;		movf	canMsg1,w
;		andlw	0xF0
;		swapf	WREG
;		movwf	uartsMsg
;		call	uartSendMsg
;		movf	canMsg1,w
;		andlw	0x0F
;		movwf	uartsMsg
;		call	uartSendMsg
;		decf	tempvar
;		btfsc	STATUS,Z
;	goto	nloadcanmsg	
;		movf	canMsg2,w
;		andlw	0xF0
;		swapf	WREG
;		movwf	uartsMsg
;		call	uartSendMsg
;		movf	canMsg2,w
;		andlw	0x0F
;		movwf	uartsMsg
;		call	uartSendMsg
;		decf	tempvar
;		btfsc	STATUS,Z
;	goto	nloadcanmsg	
;		movf	canMsg3,w
;		andlw	0xF0
;		swapf	WREG
;		movwf	uartsMsg
;		call	uartSendMsg
;		movf	canMsg3,w
;		andlw	0x0F
;		movwf	uartsMsg
;		call	uartSendMsg
;		decf	tempvar
;		btfsc	STATUS,Z
;	goto	nloadcanmsg	
;		movf	canMsg4,w
;		andlw	0xF0
;		swapf	WREG
;		movwf	uartsMsg
;		call	uartSendMsg
;		movf	canMsg4,w
;		andlw	0x0F
;		movwf	uartsMsg
;		call	uartSendMsg
;		decf	tempvar
;		btfsc	STATUS,Z
;	goto	nloadcanmsg	
;		movf	canMsg5,w
;		andlw	0xF0
;		swapf	WREG
;		movwf	uartsMsg
;		call	uartSendMsg
;		movf	canMsg5,w
;		andlw	0x0F
;		movwf	uartsMsg
;		call	uartSendMsg
;		decf	tempvar
;		btfsc	STATUS,Z
;	goto	nloadcanmsg	
;		movf	canMsg6,w
;		andlw	0xF0
;		swapf	WREG
;		movwf	uartsMsg
;		call	uartSendMsg
;		movf	canMsg6,w
;		andlw	0x0F
;		movwf	uartsMsg
;		call	uartSendMsg
;		decf	tempvar
;		btfsc	STATUS,Z
;	goto	nloadcanmsg	
;		movf	canMsg7,w
;		andlw	0xF0
;		swapf	WREG
;		movwf	uartsMsg
;		call	uartSendMsg
;		movf	canMsg7,w
;		andlw	0x0F
;		movwf	uartsMsg
;		call	uartSendMsg
nloadcanmsg:
		bcf		PIR3,0
	bra		EndIsr
uartInt:
		bsf		LATC,4
;UART Nachricht nach CAN senden
		call	uartRecMsg
EndIsr:
	retfie FAST