[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: DMA and manual parallel port



Hi,

Thanks a lot for your help. I was planning on looking at hooking up a couple
of pins to "emulate" reverse ECP mode using general I/O, so I guess thats
what I'll do. The device can be clocked slower, but is transfering a lot of
data (300k+), so faster is always better!

I'll write back and let people know how fast is possible.

Thanks

Jeremy Turner

> Hi,
>
> DMA operation is not available in manual mode.
>
> I think you need to use reverse ECP mode in some way,
> or maybe the IEEE-1284 Byte mode.
>
> Both these modes assume handshaking, with the peripheral
> using nAck and the host (ETRAX 100LX) using nAutoFd.
> But if you run slowly enough I think it is possible for
> the peripheral to ignore the handshaking and just clock
> in data to ETRAX.
>
> What is "slowly enough" then ? I don't know, maybe a few Mbytes/s
> I guess. 10 Mbytes/s is too fast anyway.
>
> Per Zander
>
> On Mon, 9 Aug 2004, Jeremy Turner wrote:
>
> > Hi,
> >
> > Hardware: Axis Device Server 83, ETRAX 100 LX, on linux 2.4.20
> >
> > I've been reading through the archives trying to find a bit more info
> > on using the parallel port in manual mode. I can currently read data
> > from par0 using a polling scheme, but would like to use DMA if possible.
> > I understand there is a skeleton parallel port driver with DMA
> > available? The device I am connecting to does not have any handshaking,
> > except for a data clock (p0ack), and can output the data very fast
> > (>10Mbytes/sec), so I would like the parallel port to run as fast as
> > possible.
> >
> > I have tried doing this using the parallel port in manual mode,
> > but the DMA never reads any data.
> >
> > Steps taken:
> >
> > 1) Configure the parallel port to be in manual mode, using dma via
> > R_PAR0_CONFIG etc.
> >
> > 2) connect DMA 2 and 3 to parallel port 0 in R_GEN_CONFIG (all
> > conflicting devices are removed from the kernel configuration)
> >
> > 3) Reset the DMA and wait
> >
> > 4) Clear interrupts , then set up DMA channel 3 interrupt lines d_eol,
> > and d_descr
> >
> > 5) Initialise the DMA descriptor using virt_to_phys where appropriate
> >
> > 6) Point R_DMA_CH3_FIRST to the descriptor, and start the DMA transfer.
> >
> > 7) Start the peripheral device data transfer.
> >
> >
> > When I look at the R_DMA_CH3_STATUS, the buffer is always empty (= 0).
> > also the R_DMA_CH3_CMD is always in START mode (= 1). I looked at the
> > other registers with R_DMA_CH3, and the _FIRST field is correct, but the
> > _NEXT and _DESCR fields don't look right (they are not the info in the
> > descriptor). Also _HWSW doesn't show the correct size of the buffer.
> >
> > Does anyone have any idea on what could be causing this? I could attach
> > my source code if required.
> >
> > Or if someone has a parallel port DMA driver in manual mode they could
> > give me, that would be great.
> >
> > Thanks
> >
> > Jeremy Turner
> >
>