Gast
#3539789
Hallo Zusammen, Ich verwende einen Atmel Prozessor AT90CAN32. Ich bin mir nicht ganz sicher ob die Fuses korrekt programmiert werden. Ich habe derzeit das Hackal bei diesen Fuses gesetzt: JTAGEN, SPIEN, EESAVE, BOOTSZ: Boot Flash size = 4096 words start address =$3000 SUT_CKSEL: Ext. Crystal Osc. 8.0- MHz; Startup time: 258CK + 4.1ms Nicht gesetzt: TA0SEL, OCDEN,WDTON,BOOTRST,CKDIV8,CKOUT, BODLEVEL disabled Verwende einen externen Quarz von 16 MHz. Ist die Start up time 258CK + 4.1ms richtig eingestellt, bzw. was bedeutet das genau? Ist die Boot Flash size und start address richtig eingestellt? Außerdem bekomme ich nach gewisser Zeit im Debug Modus einen IDR Event 0xFF vom JTAG ICE mkII. Deswegen bin ich jetzt auf der Suche nach dem Fehler ( Eben auch ob überhaupt alle FUses richtig gesetzt sind). Instabile Spannungsversorgung kann ich ausschließen. Die Taktung während des Debuggens ist 4Mhz ( eingestellt im AVR Studio4). Was Probleme sein könnten, dass es dazu kommt dass das JTAG ICE mkII abstürzt: - Return stack wird überschritten Nur wie kann ich das überprüfen ob dass der Fehler ist.. Im Programm alle calls, pushs usw suchen nachverfolgen? Programm ist leider ziemlich groß. Oder kann ichs auch testen indem ich die return stack configuration im compiler vergrößere und dann teste ob es noch zu einem Absturz kommt. http://support.atmel.com/bin/customer.exe?=&action=viewKbEntry&id=397 In dem Link sind die Problemmöglichkeiten von IDR Event 0xFF beschrieben. Unter anderem: The return stack problem can be fixed by simply increasing the return stack configuration in the compiler. If the problem disappears doing this, make sure to read the compiler documenation to understand how to calculate sufficient return stack size. Habe aber keine Ahnung wie ich die return stack configuration vergrößern kann? Bin für Hilfe sehr dankbar! Habe leider sonst keinen den ich hierbei fragen könnte. PS:Wenn ich das Programm ganz normal laufe lasse ohne Debuggen dann funktioniert alles wunderbar, zumindest fällt mir kein Fehler auf.. Hier noch ein Code für Interruptvektoren. .cseg ;Beginn eines Code-Segmentes .org 0x0000 ;Startadresse=0 rjmp init .org 0x0002 jmp int0_interrupt .org 0x0004 jmp int1_interrupt .org 0x0006 jmp int2_interrupt .org 0x0008 jmp int3_interrupt .org 0x000A jmp int4_interrupt .org 0x000C jmp int5_interrupt .org 0x000E jmp int6_interrupt .org 0x0010 jmp int7_interrupt .org 0x0012 jmp timer2_compare .org 0x0014 jmp timer2_overflow .org 0x0016 jmp timer1_capture .org 0x0018 jmp timer1_compareA .org 0x001A jmp timer1_compareB .org 0x001C jmp timer1_compareC .org 0x001E jmp timer1_overflow ;INTERRUPT .org 0x0020 jmp timer0_compare .org 0x0022 jmp timer0_overflow .org 0x0024 jmp CAN_TCOE ; CAN Transfer Complete or Error .org 0x0026 jmp CAN_TIMOVR ; CAN Timer Overrun .org 0x0028 jmp SPI_STC .org 0x002A jmp USART0_RX0 .org 0x002C jmp USART0_UDRE .org 0x002E jmp USART0_TX .org 0x0030 jmp ANALOG_COMP .org 0x0032 jmp ADC_Interrupt .org 0x0034 jmp EE_READY_Interrupt .org 0x0036 jmp TIMER3_CAPTURE .org 0x0038 jmp TIMER3_COMPARE_A .org 0x003A jmp TIMER3_COMPARE_B .org 0x003C jmp TIMER3_COMPARE_C .org 0x003E jmp TIMER3_OVERFLOW .org 0x0040 jmp USART1_RX .org 0x0042 jmp USART1_UDRE .org 0x0044 jmp USART1_TX .org 0x0046 jmp TWI_Interrupt .org 0x0048 jmp SPM_READY init: //RAM initialisieren ldi temp, HIGH(RAMEND) ; HIGH-Byte der obersten RAM-Adresse out SPH, temp ldi temp, LOW(RAMEND) ; LOW-Byte der obersten RAM-Adresse out SPL, temp