Hi Andy,
try this:
void UART_TX_DMA_SetAfterTransferSourceAddressAdjust(LDD_TDeviceData *DeviceDataPtr, int32_t AddressAdjustment)
{
(*((DMA1_TTCD **)DeviceDataPtr))->DMA_TCD_SLAST_Reg = (uint32_t)AddressAdjustment;
}
int main(void) {
LDD_TDeviceData* hDmaChannel;
/*** Processor Expert internal initialization. DON'T REMOVE THIS CODE!!! ***/
PE_low_level_init();
/*** End of Processor Expert internal initialization. ***/
hDmaChannel = UART_TX_DMA_Init(NULL);
UART_TX_DMA_SetSourceAddress(hDmaChannel, (LDD_DMA_TData *)0x12345678);
UART_TX_DMA_SetAfterTransferSourceAddressAdjust(hDmaChannel, -2);
} /*** End of main routine. DO NOT MODIFY THIS TEXT!!! ***/
Note: hDmaChannel returned by UART_TX_DMA_Init() method is pointer to DMA1_TChnDevData structure:
/* Channel device data structure prototype */
typedef struct DMA1_TChnDevData_stuct {
DMA1_TTCD *TCDPtr; /*!< Channel TCD address */
DMA1_TChnDevConst const *ChnDevConstPtr; /*!< Channel device constants structure address */
LDD_DMA_TErrorFlags ErrorFlags; /*!< Channel error flags */
LDD_TUserData *UserDataPtr; /*!< User data pointer */
DMA1_TEvents Events; /*!< Events state variable */
} DMA1_TChnDevData, *DMA1_TChnDevDataPtr;
As you can see the first item in the TChnDevData structure is:
DMA1_TTCD *TCDPtr; /*!< Channel TCD address */
This TCDPtr pointer is initialized in the UART_TX_DMA_Init() method to the TCD address of the selected DMA channel (=address of real HW registers for this DMA channel).
Best Regards
Marek Varecha