1.35.5 Memory to Memory (MEM2MEM)

The Memory to Memory (MEM2MEM) module allows the Peripheral DMA Controller (PDC) to perform memory to memory transfer without CPU intervention. The transfer size can be configured in byte, half-word or word. Two PDC channels are required to perform the transfer; one channel defines the source of the transfer and the other defines the destination.

Using The Library

This library used PDC to transfer data from memory to memory without CPU intervention.

	 // Transfer 10 bytes of data from one buffer to another using MEM2MEM
	 MY_APP_OBJ myAppObj;
	 uint8_t buf[10] = {0,1,2,3,4,5,6,7,8,9};
	 uint8_t buf2[10] = {};
	 void *srcAddr = (uint8_t *) buf;
	 void *destAddr = (uin8_t*) buf2;
	 size_t size = 10;

	 // User registers an event handler with PLIB. This is done once.
	 MEM2MEM_ChannelCallbackRegister(APP_MEM2MEMTransferEventHandler,
	 (uintptr_t)&myAppObj);

	 if(MEM2MEM_ChannelTransfer(srcAddr, destAddr, size,MEM2MEM_TRANSFER_WIDTH_BYTE) == true)
	 {
	 // do something
	 }
	 else
	 {
	 // try again?
	 }
 

Library Interface

Memory to Memory peripheral library provides the following interfaces:

Functions

Name Description
MEM2MEM_ChannelCallbackRegister This function allows a MEM2MEM PLIB client to set a callback
MEM2MEM_ChannelTransfer Registers a DMA transfer using MEM2MEM

Data types and constants

Name Type Description
MEM2MEM_TRANSFER_WIDTH Enum Identifies the transfer width to be used
MEM2MEM_TRANSFER_EVENT Enum Enumeration of possible MEM2MEM transfer events
MEM2MEM_CALLBACK Typedef Pointer to a MEM2MEM Transfer Event handler function