This is the mail archive of the ecos-discuss@sources.redhat.com mailing list for the eCos project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: Simple serial interrupt question (Atmel AT91)


[ bit late I know ]

harri.siirtola@vtt.fi wrote:
> 
> I have my interrupt-driven serial I/O almost working. It uses a DSR routine
> and is modified from PID serial implementation. I try to send a short
> string to this port (AT91X40 port 1, secondary) with cyg_io_write(). The
> problem is:
> 
> Running without breaks results to the first two characters to appear at the
> port. Setting a breakpoint to my xxx_serial_putc() gives the whole string,
> char by char of course.
> 
> So, what does the breakpoint execution do (with interrupt acknowledge or
> something else) that I should add to my implementation?

With a breakpoint, the serial port uses polled mode, not interrupts, so it
wouldn't ack the interrupt. It would just test the status and read bytes.
 
> BTW, trying to send the string in a loop, xxx_serial_start_xmit() seems to
> be called once for each cyg_io_write() call but xxx_serial_stop_xmit() is
> called once before the first cyg_io_write() call. What's the role of these
> functions?

start_xmit ensures the transmitter is going. Generally, it makes sure the
"TX holding register empty" interrupt is enabled. stop_xmit disables it
when we don't want to send anything more - otherwise you'll keep on getting
that interrupt while its empty even though you've nothing to send.

Jifl
-- 
Red Hat, Rustat House, Clifton Road, Cambridge, UK. Tel: +44 (1223) 271062
Maybe this world is another planet's Hell -Aldous Huxley || Opinions==mine
Come to the Red Hat TechWorld open source conference in Brussels!
Keynotes, techie talks and exhibitions    http://www.redhat-techworld.com/


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]