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