Hello, I use the WinIDEA software and make a new projekt with the lpc2138_uart0_irq projektfiles. I use the external make \winarm\utils\bin\make.exe from the WinARM download files. Now the Problem: the linker doesn' t work in a correct way. The funktions do not have the right adresses. Where mußt I serge the problem? In the crt0.S, LPC2138-ROM.ld or in the makefile? Is it a problem of the linker? Or is it a problem of the address room in the crt0.s file? Thanks for your answers.
Sebastian wrote: > Hello, > I use the WinIDEA software and make a new projekt with the > lpc2138_uart0_irq projektfiles. I use the external make > \winarm\utils\bin\make.exe from the WinARM download files. I have never used this IDE so I can only provide some hints. I suggest to ask the iSystems support. > Now the Problem: > the linker doesn' t work in a correct way. > The funktions do not have the right adresses. > Where mußt I serge the problem? In the crt0.S, LPC2138-ROM.ld or in the > makefile? > Is it a problem of the linker? > Or is it a problem of the address room in the crt0.s file? Can you build the project correctly from the command-line? Are you sure the the correct makefile is used? Is there any output of the build process shown? Which toolchain is used?
Hi, if I programm the code with your ISP Files it works great. If I program your code in the IDEA with the external makefile it works great too.( I do not wrote it before, sorry) But if I modify the code and Init timer2 and start a Interrupt service routine, the programm does not work any longer. I mean the problem is by activating the ISR. Now I think the problem is anyway in the crt0.s file. The programm stopped in the last 6 lines in this part of the code: (undefined, data abort, programm abort) // Runtime Interrupt Vectors // ------------------------- Vectors: b _start // reset - _start ldr pc,_undf // undefined - _undf ldr pc,_swi // SWI - _swi ldr pc,_pabt // program abort - _pabt ldr pc,_dabt // data abort - _dabt nop // reserved ldr pc,[pc,#-0xFF0] // IRQ - read the VIC ldr pc,_fiq // FIQ - _fiq #if 0 // Use this group for production _undf: .word _reset // undefined - _reset _swi: .word _reset // SWI - _reset _pabt: .word _reset // program abort - _reset _dabt: .word _reset // data abort - _reset _irq: .word _reset // IRQ - _reset _fiq: .word _reset // FIQ - _reset #else // Use this group for development _undf: .word __undf // undefined _swi: .word __swi // SWI _pabt: .word __pabt // program abort _dabt: .word __dabt // data abort _irq: .word __irq // IRQ _fiq: .word __fiq // FIQ __undf: b . // undefined __swi: b . // SWI __pabt: b . // program abort __dabt: b . // data abort __irq: b . // IRQ __fiq: b . // FIQ #endif .size _boot, . - _boot .endfunc What could it be? Thanks a lot and a nice weekend. Sebastian
Sebastian wrote: > if I programm the code with your ISP Files it works great. > If I program your code in the IDEA with the external makefile it works > great too.( I do not wrote it before, sorry) > But if I modify the code and Init timer2 and start a Interrupt service > routine, the programm does not work any longer. I mean the problem is by > activating the ISR. In the default setup of the mentioned example UART0 is used in "interrupt-mode". So if the UART ist working as expected the interrupt setup in "core-level" should be correct. I expect the problem is caused by your modifications and additional functions (timer-init, timer-ISR). Difficult to help without looking at your code. Make sure to follow the scheme of creating an ISR with "exit/entry"-macros and "nacked"-attribut since this is the method used in this example (see uartISR.h/.c armVIC.h/.c). > Now I think the problem is anyway in the crt0.s file. I don't think so but more information on you modifications is needed first. > The programm stopped in the last 6 lines in this part of the code: > (undefined, data abort, programm abort) In which of the "endless loops"? >... Martin Thomas
Hello Martin Thomas, hier der Code für den Timer: // Setup für Timer1 Initialisierung void Setup_Timer1(void) { T1IR = 0x000000FF; // Interrupt Register T1TCR = 0x00000011; // Timer Control Register T1TCR = 0x00000001; T1CTCR = 0x00000000; // Count Control Register T1PR = 0x0000000E; //Timer1 prescale 0x00000800 origin T1MR0 = 0x03E8; //Timer1 match Reg 0 T1MCR = 0x00000003; //Reset and interrupt match T1EMR &= 0x00000000; } // Setup für Timer Interrupts void Setup_Timer1_Int(void) { VICSoftIntClear = 0x00000020; VICSoftIntClear = 0x00000000; VICIntSelect &= ~VIC_BIT(VIC_TIMER1); // IRQ to timer1 VICIntEnable = VIC_BIT(VIC_TIMER1); //Timer0 interrupt enable VICVectCntl3 = VIC_ENABLE | VIC_TIMER1; //Interrupt source 5(Timer1) VICVectAddr3 = (unsigned)Int_Irq_Timer1; // Address of the ISR } and here the ISR: // Timer Interrupt Funktion void Int_Irq_Timer1(void) { ISR_ENTRY(); // armVIC.c T1IR = 0xFF; T1IR = 0; toggle++; time_counter++; // interrupt counter VICVectAddr = 0x00000000; //reset VIC ISR_EXIT(); // armVIC.c // recover registers and return } this Code is from an example from winIDEA. there it works without a problem. I didn't touch your code in any way. >> The programm stopped in the last 6 lines in this part of the code: >> (undefined, data abort, programm abort) > > In which of the "endless loops"? The loop is: __dabt: b . // data abort I hope you can help me now.
Hello, I looked again and the programm stopped in several endless loops: In which of the "endless loops"? The loop is: __dabt: b . // data abort __undf: b . // undefined __pabt: b . // program abort MfG Sebastian
add the "naked" function-attribute and give it a try: void Int_Irq_Timer1(void) __attribute__((naked)); void Int_Irq_Timer1(void) { ...
Hello Martin Thomas, thanks for your help, now it works. what a little mistake..... Sebastian Thanks a lot!!!! Martin Thomas wrote: > add the "naked" function-attribute and give it a try: > > void Int_Irq_Timer1(void) __attribute__((naked)); > void Int_Irq_Timer1(void) > { > ...
Please log in before posting. Registration is free and takes only a minute.
Existing account
Do you have a Google/GoogleMail account? No registration required!
Log in with Google account
Log in with Google account
No account? Register here.