📄 gdmatest_omap32.c
字号:
rtn_status = NOT_OK;
break;
}
else if ((UWORD8)(*MemPtr) != (UWORD8)(DMAT_GeneratePattern(Chptr->Pattern,i/4)>>24))
{
DMAT_SpyWriteFailResults( ChannelNumber, i/4, (0x0000FFFF & (*MemPtr)),
(0x0000FFFF & (DMAT_GeneratePattern(Chptr->Pattern,i/4)>>24)));
rtn_status = NOT_OK;
break;
}
if ((i % 4) != 0) // Then end of element
{
if ((((i/4)+1)%Chptr->EltNumber)==0) // Then end of frame
{
MemPtr += Chptr->FrameIndex;
}
else
{
MemPtr += Chptr->EltIndex;
}
}
else
{
MemPtr += 1;
}
}
break;
} // End of case DMA_TYPE_32_BITS
case DMA_TYPE_16_BITS:
{
UWORD8* MemPtr;
for (i = 0; i < (BlockSize * 2); i++)
{
if (i == 0)
{
MemPtr = (UWORD8*)Address;
}
if (((UWORD8)(*MemPtr)) != (UWORD8)DMAT_GeneratePattern(Chptr->Pattern,i/2))
{
DMAT_SpyWriteFailResults( ChannelNumber, i/2, (0x0000FFFF & (*MemPtr)),
(0x0000FFFF & (DMAT_GeneratePattern(Chptr->Pattern,i/2))));
rtn_status = NOT_OK;
break;
}
else if (((UWORD8)(*MemPtr)) != (UWORD8)(DMAT_GeneratePattern(Chptr->Pattern,i/2)>>8))
{
DMAT_SpyWriteFailResults( ChannelNumber, i/2, (0x0000FFFF & (*MemPtr)),
(0x0000FFFF & (DMAT_GeneratePattern(Chptr->Pattern,i/2)>>8)));
rtn_status = NOT_OK;
break;
}
if ((i % 2) != 0) // Then end of element
{
if ((((i/2)+1)%Chptr->EltNumber)==0) // Then end of frame
{
MemPtr += Chptr->FrameIndex;
}
else
{
MemPtr += Chptr->EltIndex;
}
}
else
{
MemPtr += 1;
}
}
break;
} // End of case DMA_TYPE_16_BITS
case DMA_TYPE_8_BITS:
{
UWORD8* MemPtr;
for (i = 0; i < BlockSize; i++)
{
if (i == 0)
{
MemPtr = (UWORD8*)Address;
}
if (((UWORD8)(*MemPtr)) != (UWORD8)DMAT_GeneratePattern(Chptr->Pattern,i))
{
DMAT_SpyWriteFailResults( ChannelNumber, i, (0x0000FFFF & (*MemPtr)),
(0x0000FFFF & (DMAT_GeneratePattern(Chptr->Pattern,i))));
rtn_status = NOT_OK;
}
if (((i+1)%Chptr->EltNumber)==0)
{
MemPtr += Chptr->FrameIndex;
}
else
{
MemPtr += Chptr->EltIndex;
}
}
break;
} // End of case DMA_TYPE_8_BITS
} // End of switch(Chptr->TypeSize)
break;
} // End of case : VERIFY_MEM
} // End of switch(MemMode)
break;
} // End of case DMA_ADD_DOUBINDEX
}//end total switch
return((BOOL)rtn_status);
}
else
{
return((BOOL)rtn_status);
}
}
//-------------------------------------------------------------------------------
// NAME : DMATEST_Transfer_OMAP32
//
// DESCRIPTION : Prepare the data in the source and the destination of the DMA transfer
// then launch the transfer.
//
// PARAMETERS : ChannelNumber DMA_CHANNEL_0
// DMA_CHANNEL_1
// DMA_CHANNEL_2
// DMA_CHANNEL_3
// DMA_CHANNEL_4
// DMA_CHANNEL_5
// DMA_CHANNEL_6
// DMA_CHANNEL_7
// DMA_CHANNEL_8
// DMA_CHANNEL_9
// DMA_CHANNEL_10
// DMA_CHANNEL_11
// DMA_CHANNEL_12
// DMA_CHANNEL_13
// DMA_CHANNEL_14
// DMA_CHANNEL_15
// DMA_CHANNEL_LCD_OMAP32
//
// RETURN VALUE : IS_OK or NOT_OK if something fail
//
//--------------------------------------------------------------------------------
BOOL DMAT_Transfert_OMAP32( UWORD16 ChannelNumber )
{
UWORD16 Counter=0;
#define UP_COUNT_LIMIT 2 * (Chptr->EltNumber) * (Chptr->FrameNumber)
if (ChannelNumber != DMA_CHANNEL_LCD_OMAP32)
{
CHANNEL_DESCRIPTOR_OMAP32* Chptr;
Chptr=&(SystemDma_omap32.DmaChannel[ChannelNumber]);
DMA_Omap32SetupChannel(ChannelNumber);
DMA_Omap32EnableChannel(ChannelNumber);
// wait until the transfer is completed
while ((Chptr->Enable == ENABLE) AND (Counter < UP_COUNT_LIMIT))
{
Counter++;
}
if (Counter >= UP_COUNT_LIMIT)
{
RES_Set(DMA_TRANSFERT_FAIL);
RES_Set(START_ARRAY_DATA);
RES_Set(Counter);
RES_Set(UP_COUNT_LIMIT);
RES_Set(END_ARRAY_DATA);
return((BOOL)NOT_OK);
}
else
{
// Check that data transfered are correct
return(DMAT_InitializeOrVerifyData_OMAP32(ChannelNumber, VERIFY_MEM));
}
}
else
{
return((BOOL)IS_OK);
}
}
//-------------------------------------------------------------------------------
// NAME : DMAT_ConfigPort_OMAP32
//
// DESCRIPTION : Setup port configuration involved with data in the channel
//
//
// PARAMETERS : ChannelNumber DMA_CHANNEL_0
// DMA_CHANNEL_1
// DMA_CHANNEL_2
// DMA_CHANNEL_3
// DMA_CHANNEL_4
// DMA_CHANNEL_5
// DMA_CHANNEL_6
// DMA_CHANNEL_7
// DMA_CHANNEL_8
// DMA_CHANNEL_9
// DMA_CHANNEL_10
// DMA_CHANNEL_11
// DMA_CHANNEL_12
// DMA_CHANNEL_13
// DMA_CHANNEL_14
// DMA_CHANNEL_15
//
// SrcPort
// DMA_EMIFF
// DMA_EMIFS
// DMA_OCPT1
// DMA_RHEA
// DMA_OCPT2
// DMA_RHEA_API
//
// SrcAdd Address of the source
//
// DestPort see SrcPort
//
// DestAdd Address of the destination
//
// RETURN VALUE : IS_OK or NOT_OK if something fail
//
//--------------------------------------------------------------------------------
void DMAT_ConfigPort_OMAP32( UWORD32 ChannelNumber,
UWORD32 SrcPort,
UWORD32 SrcAdd,
UWORD32 DestPort,
UWORD32 DestAdd)
{
CHANNEL_DESCRIPTOR_OMAP32* Chptr;
if (ChannelNumber == DMA_CHANNEL_LCD_OMAP32)
{
return;
}
Chptr=&(SystemDma_omap32.DmaChannel[ChannelNumber]);
//DMA Channel Number
//--------------------
Chptr->ChannelNumb = ChannelNumber;
//DMA Source
//--------------------
Chptr->SrcPort = SrcPort;
Chptr->SrcAdd = SrcAdd;
//DMA Destination
//--------------------
Chptr->DestPort = DestPort;
Chptr->DestAdd = DestAdd;
}
//-------------------------------------------------------------------------------
BOOL DMAT_InitWithPattern_BURST( UWORD16 ChannelNumber ,
UWORD16 Pattern,
//UWORD8 Autogating_on,
//UWORD8 Free,
UWORD8 TypeSize,
UWORD8 SrcBurst,
UWORD8 DestBurst,
UWORD8 SyncNumb,
UWORD8 EventSync,
UWORD8 Priority,
UWORD8 Autoinit,
UWORD8 OMAP31Disable,
UWORD8 SrcAddressMode,
UWORD8 DestAddressMode,
UWORD16 EltNumber,
UWORD16 FrameNumber,
UWORD16 EltIndex,
UWORD16 FrameIndex,
UWORD16 DestElementIndex,
UWORD8 ConstantFillEnable,
UWORD8 TransparentEnable,
UWORD8 BlockSynchronizationEnable,
UWORD8 PacketSizecsfi,
UWORD8 LogicalChannelType,
UWORD8 LogicalChannelInterleave)
{
CHANNEL_DESCRIPTOR_OMAP32* Chptr;
Chptr=&(SystemDma_omap32.DmaChannel[ChannelNumber]);
Chptr->Pattern = Pattern;
//DMA_GCR
//--------------------
//Chptr->AutogatingOn = Autogating_on;
//Chptr->Free = Free;
//DMA_CSDP
//--------------------
Chptr->TypeSize = TypeSize;
Chptr->SrcBurst = SrcBurst;
Chptr->DestBurst = DestBurst;
//DMA_CCR
//-----------------------
Chptr->SyncNumb = SyncNumb;
Chptr->EventSync = EventSync;//fs
Chptr->Priority = Priority;
Chptr->Autoinit = Autoinit;
Chptr->OMAP31Disable = OMAP31Disable;
Chptr->SrcAddressMode = SrcAddressMode;
Chptr->DestAddressMode = DestAddressMode;
//DMA_CEN
//----------------------
Chptr->EltNumber = EltNumber;
//DMA_CFN
//----------------------
Chptr->FrameNumber = FrameNumber;
//DMA_CEI
//----------------------
Chptr->EltIndex = EltIndex;
//DMA_CFI
//----------------------
Chptr->FrameIndex = FrameIndex;
//DMA_CDEI
//----------------------
Chptr->DEltIndex = DestElementIndex;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -