Using DMA to service externel peripherals(FIFO) in PXA255 Processor

From: kwang-sik,kim (kskim_at_zungwon.co.kr)
Date: 07/22/03


Date: 22 Jul 2003 01:53:24 -0700

I've been trying to transfer data from external memory(SDRAM) to
companion chip(FIFO) using DMA.

It was possible to transfer data from external memory to external
memory using DMA, but I can't
if I try to transfer data to FIFO (I always get Bus Error Interrupt
from DCSR)

FIFO range is set at 4th static memory bank.
FIFO's bandwidth is set at 16 bits.
So I set dma controller register's width at 16 bit and 4th static
memory bank register at 16 bit.

Here are my settings,

#define MSC2_VALUE 0x72f07ff8 // 4th and 5th static memory
bank register value

At first, register e_ch1 which is channel 0 at dma setting register
then

DRCMR0 = e_ch1 | DRCMR_MAPVLD;

Followings are my DMA register settings,

DSADR(e_ch1) = dma_src_phys1; // SDRAM's physical address
DTADR(e_ch1) = 0x10000600; // FIFO's physical address

DCMD(e_ch1) = DCMD_INCSRCADDR | DCMD_ENDIRQEN | DCMD_BURST16 |
DCMD_WIDTH2 | 0x200;
DCSR(e_ch1) |= DCSR_RUN;

I would really appreciate it if you can tell me what I was doing wrong
or what improvements can be done.
Or any example source that does Memory to Companion Chip(FIFO) using
DMA would be very welcomed.

Thank you.



Relevant Pages

  • Re: Using DMA to service externel peripherals(FIFO) in PXA255 Processor
    ... >It was possible to transfer data from external memory to external ... >if I try to transfer data to FIFO (I always get Bus Error Interrupt ... I'd hook a bus analyzer on to the FIFO interface, ... capable of handling data transfer as fast as the DMA engine can push it. ...
    (comp.os.linux.embedded)
  • [PATCH] spelling fixes: arch/arm/
    ... copy data to/from buffers located outside the DMA region. ... the remainder of memory is at the top and the DMA memory ... Peers on the PCI bus running ... - * devices are controlles by different NPUs on the same bus, ...
    (Linux-Kernel)
  • [PATCH] [0/13] General DMA zone rework
    ... Traditionally it was designed only for ISA dma which is limited to ... On 32bit i386 with its limited virtual memory space the next zone is ... cannot actually be used for ISA or any other device with <32bit DMA mask. ... I chose to implement a new "maskable memory" allocator to solve these ...
    (Linux-Kernel)
  • Re: Trying to DMA data from PCI bus to IDE
    ... and then use the regular Linux functions to write it to the ... > hdparm has nothing to do with the kernel's in memory caching of disk ... It's still creating a buffer stack somewhere (even ... DMA it directly to the drive by setting the IO ports and registers. ...
    (comp.os.linux.development.system)
  • Re: driver: ddi_dma_alloc_handle issue
    ... and lock down in memory. ... >scatter-gather DMA but needs buffers a lot larger than a single ... >Or, if it's random kernel virtual memory (i.e., memory your driver didn't ... It is a user level process that directly controls the hardware. ...
    (comp.unix.solaris)