3.11 DMA - Direct Memory Access
3.11.1 Introduction
The MPLAB® Code Configurator (MCC) Melody Direct Memory Access Peripheral Library (PLIBs) drivers generates APIs to support DMA-specific peripheral functionality on target MCUs.
The Direct Memory Access (DMA) module is designed to service data transfers between different memory regions directly, without intervention from the CPU. By eliminating the need for CPU-intensive management of handling interrupts intended for data transfers, the CPU now can spend more time on other tasks. The DMA modules can be independently programmed to transfer data between different memory locations, move different data sizes, and use a wide range of hardware triggers to initiate transfers. The DMA modules can even be programmed to work together and to carry out more complex data transfers without CPU overhead.
3.11.2 Supported Device Families
PIC18F-K42 | PIC18F-K83 | PIC18F-Q20 |
PIC18F-Q24 | PIC18F-Q40 | PIC18F-Q41 |
PIC18F-Q43 | PIC18F-Q71 | PIC18F-Q83 |
PIC18F-Q84 |
3.11.3 Required header files
#include "mcc_generated_files/dma/dma[X].h"
3.11.4 Module Documentation
3.11.4.1 DMAx
This file contains the API prototypes for the Direct Memory Access (DMA) driver.
3.11.4.1.1 Module description
This file contains the API prototypes for the Direct Memory Access (DMA) driver.
Functions
void DMAx_DefaultInterruptHandler (void)
Default interrupt handler for all interrupt events.
void DMAx_Initialize (void)
Initializes the DMAX module. This is called only once before calling other DMAX APIs.
void DMAx_Enable (void)
Enables the DMAx.
void DMAx_Disable (void)
Disables the DMAx.
void DMAx_SourceRegionSelect (uint8_t region)
Sets the source region.
void DMAx_SourceAddressSet (uint24_t address)
Sets the source address for the DMA packet.
uint24_t DMAx_SourceAddressGet (void)
Returns the DMA source address.
void DMAx_DestinationAddressSet (uint16_t address)
Sets the destination address for the DMA packet.
uint16_t DMAx_DestinationAddressGet (void)
Returns the DMA destination address.
void DMAx_SourceSizeSet (uint16_t size)
Sets the size of the source array.
uint16_t DMAx_SourceSizeGet (void)
Returns the size of the DMA source message.
void DMAx_DestinationSizeSet (uint16_t size)
Sets the size of the destination array.
uint16_t DMAx_DestinationSizeGet (void)
Returns the size of the DMA destination message.
uint24_t DMAx_SourcePointerGet (void)
Returns the current location read by the DMA.
uint16_t DMAx_DestinationPointerGet (void)
Returns the current location written by the DMA.
uint16_t DMAx_SourceCountGet (void)
Returns the DMA source count value.
uint16_t DMAx_DestinationCountGet (void)
Returns the DMA destination count value.
void DMAx_StartTriggerSet (uint8_t sirq)
Sets the Start Trigger for the DMA. It does not start the transfer.
void DMAx_AbortTriggerSet (uint8_t airq)
Sets the Abort Trigger for the DMA. It does not start the transfer.
void DMAx_TransferStart (void)
Starts the DMA Transfer.
void DMAx_TransferWithTriggerStart (void)
Starts the DMA transfer based on the requested interrupt source.
void DMAx_TransferStop (void)
Stops the DMA transfer.
void DMAx_DMAPrioritySet (uint8_t priority)
Sets the priority of the arbiter.
void DMAx_SCNTIInterruptHandlerSet (void(*InterruptHandler)(void))
Sets the Callback function for the source count interrupt event.
void DMAx_DMASCNTI_ISR (void)
Implements the Interrupt Service Routine (ISR) for the DMAX source count interrupt.
void DMAx_DCNTIInterruptHandlerSet (void(*InterruptHandler)(void))
Sets the Callback function for the destination count interrupt event.
void DMAx_DMADCNTI_ISR (void)
Implements the ISR for the DMAX destination count interrupt events.
void DMAx_AIInterruptHandlerSet (void(*InterruptHandler)(void))
Sets the Callback function for the abort interrupt request event.
void DMAx_DMAAI_ISR (void)
Implements the ISR for the DMAX Abort Trigger interrupt events.
void DMAx_ORIInterruptHandlerSet (void(*InterruptHandler)(void))
Sets the callback function for the overrun interrupt event.
void DMAx_DMAORI_ISR (void)
Implements the ISR for the DMAX overrun interrupt events.
3.11.4.1.2 Function Documentation
DMAx_AbortTriggerSet()
void DMAx_AbortTriggerSet (uint8_t airq)
Sets the Abort Trigger for the DMA. It does not start the transfer.
in | airq |
- Abort trigger source. |
None. |
DMAx_AIInterruptHandlerSet()
void DMAx_AIInterruptHandlerSet (void(*)(void) InterruptHandler)
Sets the Callback function for the abort interrupt request event.
*InterruptHandler |
- Callback function for the abort interrupt event. |
None. |
DMAx_DCNTIInterruptHandlerSet()
void DMAx_DCNTIInterruptHandlerSet (void(*)(void) InterruptHandler)
Sets the Callback function for the destination count interrupt event.
*InterruptHandler |
- Callback function for the destination count interrupt event. |
None. |
DMAx_DefaultInterruptHandler()
void DMAx_DefaultInterruptHandler (void )
Default interrupt handler for all interrupt events.
None. |
None. |
DMAx_DestinationAddressGet()
uint16_t DMAx_DestinationAddressGet (void )
Returns the DMA destination address.
None. |
16-bit DMA destination address. |
DMAx_DestinationAddressSet()
void DMAx_DestinationAddressSet (uint16_t address)
Sets the destination address for the DMA packet.
in | address |
- Desired destination address. |
None. |
DMAx_DestinationCountGet()
uint16_t DMAx_DestinationCountGet (void )
Returns the DMA destination count value.
None. |
Current 16-bit destination counter value. |
DMAx_DestinationPointerGet()
uint16_t DMAx_DestinationPointerGet (void )
Returns the current location written by the DMA.
None. |
Current address pointer to the destination. |
DMAx_DestinationSizeGet()
uint16_t DMAx_DestinationSizeGet (void )
Returns the size of the DMA destination message.
None. |
16-bit DMA destination message size value. |
DMAx_DestinationSizeSet()
void DMAx_DestinationSizeSet (uint16_t size)
Sets the size of the destination array.
in | size |
- Size of the destination array in bytes. |
None. |
DMAx_Disable()
void DMAx_Disable (void )
Disables the DMAx.
None. |
None. |
DMAx_DMAAI_ISR()
void DMAx_DMAAI_ISR (void )
Implements the ISR for the DMAX Abort Trigger interrupt events.
None. |
None. |
DMAx_DMADCNTI_ISR()
void DMAx_DMADCNTI_ISR (void )
Implements the ISR for the DMAX destination count interrupt events.
None. |
None. |
DMAx_DMAORI_ISR()
void DMAx_DMAORI_ISR (void )
Implements the ISR for the DMAX overrun interrupt events.
None. |
None. |
DMAx_DMAPrioritySet()
void DMAx_DMAPrioritySet (uint8_t priority)
Sets the priority of the arbiter.
in | priority |
- Priority of the DMA. |
None. NOTE: This function is dependent on the PR1WAY CONFIG bit. |
DMAx_DMASCNTI_ISR()
void DMAx_DMASCNTI_ISR (void )
Implements the Interrupt Service Routine (ISR) for the DMAX source count interrupt.
None. |
None. |
DMAx_Enable()
void DMAx_Enable (void )
Enables the DMAx.
None. |
None. |
DMAx_Initialize()
void DMAx_Initialize (void )
Initializes the DMAX module. This is called only once before calling other DMAX APIs.
None. |
None. |
DMAx_ORIInterruptHandlerSet()
void DMAx_ORIInterruptHandlerSet (void(*)(void) InterruptHandler)
Sets the callback function for the overrun interrupt event.
*InterruptHandler |
- Callback function for the overrun interrupt event. |
None. |
DMAx_SCNTIInterruptHandlerSet()
void DMAx_SCNTIInterruptHandlerSet (void(*)(void) InterruptHandler)
Sets the Callback function for the source count interrupt event.
*InterruptHandler |
- Callback function for the source count interrupt event. |
None. |
DMAx_SourceAddressGet()
uint24_t DMAx_SourceAddressGet (void )
Returns the DMA source address.
None. |
24-bit DMA source address. |
DMAx_SourceAddressSet()
void DMAx_SourceAddressSet (uint24_t address)
Sets the source address for the DMA packet.
in | address |
- Desired source address. |
None. |
DMAx_SourceCountGet()
uint16_t DMAx_SourceCountGet (void )
Returns the DMA source count value.
None. |
Current 16-bit source counter value. |
DMAx_SourcePointerGet()
uint24_t DMAx_SourcePointerGet (void )
Returns the current location read by the DMA.
None. |
Current address pointer to the source. |
DMAx_SourceRegionSelect()
void DMAx_SourceRegionSelect (uint8_t region)
Sets the source region.
in | region |
- Desired source region. |
None. |
DMAx_SourceSizeGet()
uint16_t DMAx_SourceSizeGet (void )
Returns the size of the DMA source message.
None. |
16-bit DMA source message size value. |
DMAx_SourceSizeSet()
void DMAx_SourceSizeSet (uint16_t size)
Sets the size of the source array.
in | size |
- Size of the source array in bytes. |
None. |
DMAx_StartTriggerSet()
void DMAx_StartTriggerSet (uint8_t sirq)
Sets the Start Trigger for the DMA. It does not start the transfer.
in | sirq |
- Start trigger source. |
None. |
DMAx_TransferStart()
void DMAx_TransferStart (void )
Starts the DMA Transfer.
None. |
None. |
DMAx_TransferStop()
void DMAx_TransferStop (void )
Stops the DMA transfer.
None. |
None. |
DMAx_TransferWithTriggerStart()
void DMAx_TransferWithTriggerStart (void )
Starts the DMA transfer based on the requested interrupt source.
None. |
None. |
3.11.5 File Documentation
3.11.5.1 source/dmax.c File Reference
This file contains the API implementations for the DMAx driver.
#include <xc.h> #include "../dmax.h"
3.11.5.1.1 Functions
void DMAx_DefaultInterruptHandler (void)
Default interrupt handler for all interrupt events.
void DMAx_Initialize (void)
Initializes the DMAX module. This is called only once before calling other DMAX APIs.
void DMAx_Enable (void)
Enables the DMAx.
void DMAx_Disable (void)
Disables the DMAx.
void DMAx_SourceRegionSelect (uint8_t region)
Sets the source region.
void DMAx_SourceAddressSet (uint24_t address)
Sets the source address for the DMA packet.
uint24_t DMAx_SourceAddressGet (void)
Returns the DMA source address.
void DMAx_DestinationAddressSet (uint16_t address)
Sets the destination address for the DMA packet.
uint16_t DMAx_DestinationAddressGet (void)
Returns the DMA Destination Address.
void DMAx_SourceSizeSet (uint16_t size)
Sets the size of the source array.
uint16_t DMAx_SourceSizeGet (void)
Returns the size of the DMA source message.
void DMAx_DestinationSizeSet (uint16_t size)
Sets the size of the destination array.
uint16_t DMAx_DestinationSizeGet (void)
Returns the size of the DMA destination message.
uint24_t DMAx_SourcePointerGet (void)
Returns the current location read by the DMA.
uint16_t DMAx_DestinationPointerGet (void)
Returns the current location written by the DMA.
uint16_t DMAx_SourceCountGet (void)
Returns the DMA source count value.
uint16_t DMAx_DestinationCountGet (void)
Returns the DMA destination count value.
void DMAx_StartTriggerSet (uint8_t sirq)
Sets the Start Trigger for the DMA. It does not start the transfer.
void DMAx_AbortTriggerSet (uint8_t airq)
Sets the Abort Trigger for the DMA. It does not start the transfer.
void DMAx_TransferStart (void)
Starts the DMA Transfer.
void DMAx_TransferWithTriggerStart (void)
Starts the DMA transfer based on the requested interrupt source.
void DMAx_TransferStop (void)
Stops the DMA transfer.
void DMAx_DMAPrioritySet (uint8_t priority)
Sets the priority of the arbiter.
void DMAx_DMASCNTI_ISR (void)
Implements the Interrupt Service Routine (ISR) for the DMAX source count interrupt.
void DMAx_SCNTIInterruptHandlerSet (void(*InterruptHandler)(void))
Sets the Callback function for the source count interrupt event.
void DMAx_DMADCNTI_ISR (void)
Implements the ISR for the DMAX destination count interrupt events.
void DMAx_SetDCNTIInterruptHandler (void(*InterruptHandler)(void))
void DMAx_DMAAI_ISR (void)
Implements the ISR for the DMAX Abort Trigger interrupt events.
void DMAx_AIInterruptHandlerSet (void(*InterruptHandler)(void))
Sets the Callback function for the abort interrupt request event.
void DMAx_DMAORI_ISR (void)
Implements the ISR for the DMAX overrun interrupt events.
void DMAx_ORIInterruptHandlerSet (void(*InterruptHandler)(void))
Sets the callback function for the overrun interrupt event.
3.11.5.1.2 Variables
void(* DMAx_SCNTI_InterruptHandler )(void)
void(* DMAx_DCNTI_InterruptHandler )(void)
void(* DMAx_AI_InterruptHandler )(void)
void(* DMAx_ORI_InterruptHandler )(void)
3.11.5.1.3 Detailed Description
This file contains the API implementations for the DMAx driver.
DMAx Generated Driver File.
3.11.5.1.4 Function Documentation
DMAx_SetDCNTIInterruptHandler()
void DMAx_SetDCNTIInterruptHandler (void(*)(void) InterruptHandler)
3.11.5.1.5 Variable Documentation
DMAx_AI_InterruptHandler
void(* DMAx_AI_InterruptHandler) (void)
DMAx_DCNTI_InterruptHandler
void(* DMAx_DCNTI_InterruptHandler) (void)
DMAx_ORI_InterruptHandler
void(* DMAx_ORI_InterruptHandler) (void)
DMAx_SCNTI_InterruptHandler
void(* DMAx_SCNTI_InterruptHandler) (void)
Section: Included Files
3.11.5.2 source/dmax.h File Reference
#include <stdint.h>
3.11.5.2.1 Functions
void DMAx_Initialize (void)
Initializes the DMAX module. This is called only once before calling other DMAX APIs.
void DMAx_Enable (void)
Enables the DMAx.
void DMAx_Disable (void)
Disables the DMAx.
void DMAx_SourceRegionSelect (uint8_t region)
Sets the source region.
void DMAx_SourceAddressSet (uint24_t address)
Sets the source address for the DMA packet.
uint24_t DMAx_SourceAddressGet (void)
Returns the DMA source address.
void DMAx_DestinationAddressSet (uint16_t address)
Sets the destination address for the DMA packet.
uint16_t DMAx_DestinationAddressGet (void)
Returns the DMA Destination Address.
void DMAx_SourceSizeSet (uint16_t size)
Sets the size of the source array.
uint16_t DMAx_SourceSizeGet (void)
Returns the size of the DMA source message.
void DMAx_DestinationSizeSet (uint16_t size)
Sets the size of the destination array.
uint16_t DMAx_DestinationSizeGet (void)
Returns the size of the DMA destination message.
uint24_t DMAx_SourcePointerGet (void)
Returns the current location read by the DMA.
uint16_t DMAx_DestinationPointerGet (void)
Returns the current location written by the DMA.
uint16_t DMAx_SourceCountGet (void)
Returns the DMA source count value.
uint16_t DMAx_DestinationCountGet (void)
Returns the DMA destination count value.
void DMAx_StartTriggerSet (uint8_t sirq)
Sets the Start Trigger for the DMA. It does not start the transfer.
void DMAx_AbortTriggerSet (uint8_t airq)
Sets the Abort Trigger for the DMA. It does not start the transfer.
void DMAx_TransferStart (void)
Starts the DMA Transfer.
void DMAx_TransferWithTriggerStart (void)
Starts the DMA transfer based on the requested interrupt source.
void DMAx_TransferStop (void)
Stops the DMA transfer.
void DMAx_DMAPrioritySet (uint8_t priority)
Sets the priority of the arbiter.
void DMAx_SCNTIInterruptHandlerSet (void(*InterruptHandler)(void))
Sets the Callback function for the source count interrupt event.
void DMAx_DMASCNTI_ISR (void)
Implements the Interrupt Service Routine (ISR) for the DMAX source count interrupt.
void DMAx_DCNTIInterruptHandlerSet (void(*InterruptHandler)(void))
Sets the Callback function for the destination count interrupt event.
void DMAx_DMADCNTI_ISR (void)
Implements the ISR for the DMAX destination count interrupt events.
void DMAx_AIInterruptHandlerSet (void(*InterruptHandler)(void))
Sets the Callback function for the abort interrupt request event.
void DMAx_DMAAI_ISR (void)
Implements the ISR for the DMAX Abort Trigger interrupt events.
void DMAx_ORIInterruptHandlerSet (void(*InterruptHandler)(void))
Sets the callback function for the overrun interrupt event.
void DMAx_DMAORI_ISR (void)
Implements the ISR for the DMAX overrun interrupt events.
3.11.5.2.2 Macros
API Name Macros
Section: Included Files
Macros used to map the APIs to the custom API names:
#define myDMAx_Initialize DMAx_Initialize
#define myDMAx_Enable DMAx_Enable
#define myDMAx_Disable DMAx_Disable
#define myDMAx_DestinationAddressSet DMAx_DestinationAddressSet
#define myDMAx_DestinationAddressGet DMAx_DestinationAddressGet
#define myDMAx_DestinationPointerGet DMAx_DestinationPointerGet
#define myDMAx_TransferWithTriggerStart DMAx_TransferWithTriggerStart
#define myDMAx_TransferStop DMAx_TransferStop
#define myDMAx_SCNTIInterruptHandlerSet DMAx_SCNTIInterruptHandlerSet
#define myDMAx_DMASCNTI_ISR DMAx_DMASCNTI_ISR
#define myDMAx_DCNTIInterruptHandlerSet DMAx_DCNTIInterruptHandlerSet
#define myDMAx_DMADCNTI_ISR DMAx_DMADCNTI_ISR
#define myDMAx_AIInterruptHandlerSet DMAx_AIInterruptHandlerSet
#define myDMAx_DMAAI_ISR DMAx_DMAAI_ISR
#define myDMAx_ORIInterruptHandlerSet DMAx_ORIInterruptHandlerSet
#define myDMAx_DMAORI_ISR DMAx_DMAORI_ISR
3.11.5.2.3 Classic API Name Macros
Macros used to map the APIs to the deprecated API names:
#define DMAx_SetDestinationAddress DMAx_DestinationAddressSet
#define DMAx_SetSourceSize DMAx_SourceSizeSet
#define DMAx_GetDestinationPointer DMAx_DestinationPointerGet
#define DMAx_StartTransfer DMAx_TransferStart
#define DMAx_StartTransferWithTrigger DMAx_TransferWithTriggerStart
#define DMAx_StopTransfer DMAx_TransferStop
#define DMAx_SetSCNTIInterruptHandler DMAx_SCNTIInterruptHandlerSet
#define DMAx_SetDCNTIInterruptHandler DMAx_DCNTIInterruptHandlerSet
#define DMAx_SetAIInterruptHandler DMAx_AIInterruptHandlerSet
#define DMAx_SetORIInterruptHandler DMAx_ORIInterruptHandlerSet
3.11.5.2.4 Detailed Description
DMAx Generated Driver API Header File.
3.11.5.2.5 Macro Definition Documentation
DMAx_GetDestinationPointer
#define DMAx_GetDestinationPointer DMAx_DestinationPointerGet
DMAx_GetSourcePointer
#define DMAx_GetSourcePointer DMAx_SourcePointerGet
DMAx_SelectSourceRegion
#define DMAx_SelectSourceRegion DMAx_SourceRegionSelect
DMAx_SetAbortTrigger
#define DMAx_SetAbortTrigger DMAx_AbortTriggerSet
DMAx_SetAIInterruptHandler
#define DMAx_SetAIInterruptHandler DMAx_AIInterruptHandlerSet
DMAx_SetDCNTIInterruptHandler
#define DMAx_SetDCNTIInterruptHandler DMAx_DCNTIInterruptHandlerSet
DMAx_SetDestinationAddress
#define DMAx_SetDestinationAddress DMAx_DestinationAddressSet
DMAx_SetDestinationSize
#define DMAx_SetDestinationSize DMAx_DestinationSizeSet
DMAx_SetDMAPriority
#define DMAx_SetDMAPriority DMAx_DMAPrioritySet
DMAx_SetORIInterruptHandler
#define DMAx_SetORIInterruptHandler DMAx_ORIInterruptHandlerSet
DMAx_SetSCNTIInterruptHandler
#define DMAx_SetSCNTIInterruptHandler DMAx_SCNTIInterruptHandlerSet
DMAx_SetSourceAddress
#define DMAx_SetSourceAddress DMAx_SourceAddressSet
DMAx_SetSourceSize
#define DMAx_SetSourceSize DMAx_SourceSizeSet
DMAx_SetStartTrigger
#define DMAx_SetStartTrigger DMAx_StartTriggerSet
DMAx_StartTransfer
#define DMAx_StartTransfer DMAx_TransferStart
DMAx_StartTransferWithTrigger
#define DMAx_StartTransferWithTrigger DMAx_TransferWithTriggerStart
DMAx_StopTransfer
#define DMAx_StopTransfer DMAx_TransferStop
myDMAx_AbortTriggerSet
#define myDMAx_AbortTriggerSet DMAx_AbortTriggerSet
myDMAx_AIInterruptHandlerSet
#define myDMAx_AIInterruptHandlerSet DMAx_AIInterruptHandlerSet
myDMAx_DCNTIInterruptHandlerSet
#define myDMAx_DCNTIInterruptHandlerSet DMAx_DCNTIInterruptHandlerSet
myDMAx_DestinationAddressGet
#define myDMAx_DestinationAddressGet DMAx_DestinationAddressGet
myDMAx_DestinationAddressSet
#define myDMAx_DestinationAddressSet DMAx_DestinationAddressSet
myDMAx_DestinationCountGet
#define myDMAx_DestinationCountGet DMAx_DestinationCountGet
myDMAx_DestinationPointerGet
#define myDMAx_DestinationPointerGet DMAx_DestinationPointerGet
myDMAx_DestinationSizeGet
#define myDMAx_DestinationSizeGet DMAx_DestinationSizeGet
myDMAx_DestinationSizeSet
#define myDMAx_DestinationSizeSet DMAx_DestinationSizeSet
myDMAx_Disable
#define myDMAx_Disable DMAx_Disable
myDMAx_DMAAI_ISR
#define myDMAx_DMAAI_ISR DMAx_DMAAI_ISR
myDMAx_DMADCNTI_ISR
#define myDMAx_DMADCNTI_ISR DMAx_DMADCNTI_ISR
myDMAx_DMAORI_ISR
#define myDMAx_DMAORI_ISR DMAx_DMAORI_ISR
myDMAx_DMAPrioritySet
#define myDMAx_DMAPrioritySet DMAx_DMAPrioritySet
myDMAx_DMASCNTI_ISR
#define myDMAx_DMASCNTI_ISR DMAx_DMASCNTI_ISR
myDMAx_Enable
#define myDMAx_Enable DMAx_Enable
myDMAx_Initialize
#define myDMAx_Initialize DMAx_Initialize
myDMAx_ORIInterruptHandlerSet
#define myDMAx_ORIInterruptHandlerSet DMAx_ORIInterruptHandlerSet
myDMAx_SCNTIInterruptHandlerSet
#define myDMAx_SCNTIInterruptHandlerSet DMAx_SCNTIInterruptHandlerSet
myDMAx_SourceAddressGet
#define myDMAx_SourceAddressGet DMAx_SourceAddressGet
myDMAx_SourceAddressSet
#define myDMAx_SourceAddressSet DMAx_SourceAddressSet
myDMAx_SourceCountGet
#define myDMAx_SourceCountGet DMAx_SourceCountGet
myDMAx_SourcePointerGet
#define myDMAx_SourcePointerGet DMAx_SourcePointerGet
myDMAx_SourceRegionSelect
#define myDMAx_SourceRegionSelect DMAx_SourceRegionSelect
myDMAx_SourceSizeGet
#define myDMAx_SourceSizeGet DMAx_SourceSizeGet
myDMAx_SourceSizeSet
#define myDMAx_SourceSizeSet DMAx_SourceSizeSet
myDMAx_StartTriggerSet
#define myDMAx_StartTriggerSet DMAx_StartTriggerSet
myDMAx_TransferStart
#define myDMAx_TransferStart DMAx_TransferStart
myDMAx_TransferStop
#define myDMAx_TransferStop DMAx_TransferStop
myDMAx_TransferWithTriggerStart
#define myDMAx_TransferWithTriggerStart DMAx_TransferWithTriggerStart