AnsweredAssumed Answered

How to disable DMA Address Alignment Checking?

Question asked by Vito Marolda on Oct 13, 2015
Latest reply on Feb 2, 2016 by Marek Neuzil

Hi, I am using KL46Z SPI with DMA, and I do receive a block using the following code (which works flawlessly):

 

SPIMasterLDD_1_ReceiveBlock(SPIMasterLDD_1_TDD_Ptr,reg_data,cnt);
SPIMasterLDD_1_SendBlock(SPIMasterLDD_1_TDD_Ptr,reg_data,cnt);
while(SPIMasterLDD_1_GetBlockReceivedStatus(SPIMasterLDD_1_TDD_Ptr)==FALSE);

 

I use slow clock in order to save battery (core=8MHz).

I noticed a long delay (120us) before rx/tx, and I finally figured it out the delay is due to SetDestinationAddress/SetSourceAddress:

 

LDD_TError DMA1_SetSourceAddress(DMA1_TChanDeviceData *ChanDeviceDataPtr, LDD_DMA_TData *Address)
{
  /* This test can be disabled by setting the "Ignore state checking"
     property to the "yes" value in the "Configuration inspector" */
  if (((uint32_t)Address % GetTransactionUnitSize(((DMA1_TChnDevData *)ChanDeviceDataPtr)->TCDPtr)) != 0U) {
    return ERR_PARAM_ADDRESS;
  }
  DMA1__SetSrcAddress(((DMA1_TChnDevData *)ChanDeviceDataPtr)->TCDPtr, (uint32_t)Address);
  return ERR_OK;
}

 

they both perform a 32 bit modulo operation for preliminary address alignment checking. I would like to disable this test. Comment on the function states:

This test can be disabled by setting the "Ignore state checking"  property to the "yes" value in the "Configuration inspector"

But such option does not exist on KDS3.0.0:

Does anybody know how to disable DMA Address Alignment checking?

Thank you in advance.

Best Regards.

Vito.

Outcomes