English
Language : 

PXD10RM Datasheet, PDF (475/1332 Pages) Freescale Semiconductor, Inc – PXD10 Microcontroller
case 2:
src_xfr_size = 4;
break;
case 3:
src_xfr_size = 8;
break;
case 4:
src_xfr_size = 16;
break;
case 5:
src_xfr_size = 32;
break;
}
/* 32-bit transfer */
/* 64-bit transfer */
/* 16-byte burst transfer */
/* 32-byte burst transfer */
/* convert the destination transfer size into a byte count */
switch (dma_engine.dsize) {
case 0:
/* 8-bit transfer */
dest_xfr_size = 1;
break;
case 1:
/* 16-bit transfer */
dest_xfr_size = 2;
break;
case 2:
/* 32-bit transfer */
dest_xfr_size = 4;
break;
case 3:
/* 64-bit transfer */
dest_xfr_size = 8;
break;
case 4:
/* 16-byte burst transfer */
dest_xfr_size = 16;
break;
case 5:
/* 32-byte burst transfer */
dest_xfr_size = 32;
break;
}
/* determine the larger of the two transfer sizes, this value reflects */
/* the number of bytes transferred per read->write sequence. */
/* number of iterations of the minor loop = nbytes / xfer_size */
if (dma_engine.ssize < dma_engine.dsize)
xfr_size = dest_xfer_size;
else
xfr_size = src_xfer_size;
/* process the source address, READ data into the buffer*/
/* read “xfr_size” bytes from the source */
/* if the ssize < dsize, do multiple reads to equal the dsize */
/* if the ssize => dsize, do a single read of source data */
number_of_source_reads = xfer_size / src_xfer_size;
for (number_of_source_reads) {
dma_engine.data = read_from_amba-ahb (dma_engine.saddr, src_xfr_size);
/* generate the next-state source address */
/* sum the current saddr with the signed source offset */
ns_addr = dma_engine.saddr + (int) dma_engine.soff; }
Freescale Semiconductor
PXD10 Microcontroller Reference Manual, Rev. 1
Preliminary—Subject to Change Without Notice
15-5