From: Colin S. <co...@ab...> - 2006-01-30 23:11:04
|
> Date: Mon, 30 Jan 2006 13:42:05 -0800 > From: Dave Hylands <dhy...@gm...> > To: gum...@li... > Subject: Re: [Gumstix-users] Input Capture Pin and external interrupts on > the robostix > Reply-To: gum...@li... > > > Just wanted to make sure that you were aware that the ATMega128 has > two hardware UARTs. So it isn't clear to me why you would want to use > INT2 to do a software UART when you could jsut use the hardware UART. > > Or are you trying to do the trick where you rely on the 0v and 5v to > work with an external device that has RS-232 outputs? You'll > definitely want some kind of protection circuitry on the input side. > If a device presents a real -12v you could fry your robostix. Yeah thats what i'm trying to do. The device i've been testing with (an old Psion 5mx PDA) seems to give about -10v, but I guess a PC might be more and I'll definately need some resistors if I do hook it up to a PC which goes any higher. Which may defeat the point of this exercise which was to avoid using a MAX232. I've used the same trick before between a Basic Stamp and the Psion and that worked fine. Although it was a lot easier as the Stamp has an invert mode in its hardware UART. Even if I don't end up using the software UART, I'd like to get an interrupt handler working as I need to use external interrupts for other things. > > Which pin are you connecting your input to? (you mention interrupt pin > - but I just wanted to clarify exactly which physical pin you're using > on the robostix. The UART1 recevive pin. Basically i'm using the same pins i'd use if I were using UART1, but they are being driven by software instead of hardware. > > I don't see anything obvious wrong with your code. I'll try compiling > it and running it on my robostix when I get home. I think the problem lies in the interrupt vector table. When I disassemble the code in AVR Studio, the vector table shows no entry for the handler and when I trigger the interrupt in the AVR Studio simulator it just causes a reset. I think this maybe caused by me lacking a compiler option (or using one that I shouldn't be). I've been doing the compilation by just hitting compile in AVR Studio. -- Colin Sauze PhD Student Room: C57 Intelligent Robotics Group Department of Computer Science University of Wales, Aberystwyth Aberystwyth Ceredigion UK SY23 3DB Email: co...@ab... Webpage: http://users.aber.ac.uk/cos |
From: Dave H. <dhy...@gm...> - 2006-01-30 23:33:25
|
Hi Colin, > I think the problem lies in the interrupt vector table. When I disassembl= e > the code in AVR Studio, the vector table shows no entry for the handler > and when I trigger the interrupt in the AVR Studio simulator it just > causes a reset. I think this maybe caused by me lacking a compiler option > (or using one that I shouldn't be). I've been doing the compilation by > just hitting compile in AVR Studio. So you must be using WinAVR? Are you using the version that was just released a day or two ago? The ISR macro is new, which is why I ask. The older WinAVR requires this definition instead: #include <signal.h> SIGNAL( SIG_INTERRUPT2 ) If you run avr-nm on your inttest.o file you should see a symbol __vector_3 If you don't see that symbol, then your interrupt handler isn't being calle= d. -- Dave Hylands Vancouver, BC, Canada http://www.DaveHylands.com/ |
From: Dave H. <dhy...@gm...> - 2006-01-31 09:40:14
|
Hi Colin, > > I think the problem lies in the interrupt vector table. When I disassem= ble > > the code in AVR Studio, the vector table shows no entry for the handler > > and when I trigger the interrupt in the AVR Studio simulator it just > > causes a reset. I think this maybe caused by me lacking a compiler opti= on > > (or using one that I shouldn't be). I've been doing the compilation by > > just hitting compile in AVR Studio. If I took your file exactly as presented and compiled using the older version of WinAVR (which is what I have installed): avr-gcc -c -mmcu=3Datmega128 inttest,c and then run avr-nm inttest.o then I get this output: U __do_clear_bss U __do_copy_data 0000003e a __SP_H__ 0000003d a __SP_L__ 0000003f a __SREG__ U __stack 00000000 a __tmp_reg__ 00000001 a __zero_reg__ 00000072 T ISR 00000000 T main If I add #include <avr/signal.h> and use: SIGNAL(SIG_INTERRUPT2) instead of ISR(INT2_vect) then I get the following output from avr-nm inttest.o U __do_clear_bss U __do_copy_data 0000003e a __SP_H__ 0000003d a __SP_L__ 0000003f a __SREG__ U __stack 00000000 a __tmp_reg__ 00000072 T __vector_3 00000001 a __zero_reg__ 00000000 T main And here you can see the __vector_3, which is the actual interrupt handler. -- Dave Hylands Vancouver, BC, Canada http://www.DaveHylands.com/ |