Hello Bruno,
I have tried to reproduce the error but I can build the application without any error. The DmaMemMapPtr is defined as a local variable in the HandleInterrupt function, see below. Could you send me the project to reproduce the error, please?
/*
** ===================================================================
** Method : HandleInterrupt (component DMAController)
**
** Description :
** This method is internal. It is used by Processor Expert only.
** ===================================================================
*/
static void HandleInterrupt(DMA1_TChnDevData *ChnDevDataPtr)
{
DMA1_TChnDevConst const *ChnDevConstPtr = ChnDevDataPtr->ChnDevConstPtr;
DMA_MemMapPtr DmaMemMapPtr = ChnDevConstPtr->DmaMemMapPtr;
uint32_t ErrorStatus;
if (DMA1__GetChannelErrorInterruptFlag(DmaMemMapPtr, ChnDevConstPtr->PhyChnMask)) {
/* Channel error detected */
/* Transfer error */
ErrorStatus = DMA1__GetErrorStatus(DmaMemMapPtr); /* Get error flags */
if (DMA1__GetErrorValidFlags(ErrorStatus)) { /* Any error flags valid? */
if (DMA1__GetErrorChannelNumber(ErrorStatus) == ChnDevConstPtr->PhyChnNum) { /* Channel error flags valid? */
/* Remember all (device and channel) error flags */
ChnDevDataPtr->ErrorFlags |= DMA1__GetErrorFlags(ErrorStatus);
} else {
/* Remember device error flags only (if any flag set) */
ChnDevDataPtr->ErrorFlags |= DMA1__GetDeviceErrorFlags(ErrorStatus);
/* Remember channel error flags are not valid */
ChnDevDataPtr->ErrorFlags |= LDD_DMA_UNKNOWN_ERROR;
}
} else {
/* Error flags not valid */
ChnDevDataPtr->ErrorFlags |= LDD_DMA_UNKNOWN_ERROR;
}
DMA1__DisableRequest(DmaMemMapPtr, ChnDevConstPtr->PhyChnNum);
DMA1__ClearChannelErrorInterruptFlag(DmaMemMapPtr, ChnDevConstPtr->PhyChnNum);
if (ChnDevDataPtr->Events.OnErrorFnPtr != NULL) {
ChnDevDataPtr->Events.OnErrorFnPtr(ChnDevDataPtr->UserDataPtr);
}
} else if (DMA1__GetTransferDoneFlag(ChnDevConstPtr->TCDPtr)) {
/* Transfer done without error */
DMA1__ClearChannelInterruptFlag(DmaMemMapPtr, ChnDevConstPtr->PhyChnNum);
DMA1__ClearDoneFlag(DmaMemMapPtr, ChnDevConstPtr->PhyChnNum);
if (ChnDevDataPtr->Events.OnCompleteFnPtr != NULL) {
ChnDevDataPtr->Events.OnCompleteFnPtr(ChnDevDataPtr->UserDataPtr);
}
} else {
}
}
Best Regards,
Marek Neuzil