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

DMA and manual parallel port

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.
Jeremy Turner