📄 gdmatest.c
字号:
//===============================================================================
// TEXAS INSTRUMENTS INCORPORATED PROPRIETARY INFORMATION
//
// Property of Texas Instruments
// For Unrestricted Internal Use Only
// Unauthorized reproduction and/or distribution is strictly prohibited.
// This product is protected under copyright law and trade secret law
// as an unpublished work.
// Created 2000, (C) Copyright 2000 Texas Instruments. All rights reserved.
//
//===============================================================================
//
// Modification: 02/14/2000 edgarg@ti.com modified contents of DMA_PATTERN_0
// from 32 bit to 16 bit, and added element number.
// 02/17/2000 edgarg@ti.com added DMAT_ConfigPort and
// DMA_EnableIntFlags, and added pattern prototype to
// DMAT_InitWithPattern.
// 03/03/2000 v-bour@ti.com, add specific function for lcd channel
// DMAT_LcdConfigPort
// DMAT_LcdFrameMode
// add DMA_PATTERN_LCD_0 in DMAT_GeneratePattern function.
// add DMA_CONFIG_LCD_32_0 in DMAT_InitWithPattern function.
#include "global_types.h"
#include "result.h"
#include "test.h"
#include "intvecs.h"
#include "gdmatest.h"
#include "gdma.h"
#include "gdma_omap32.h"
#include <stdlib.h>
extern DMA_SYSTEM_STRUCT SystemDma;
//-------------------------------------------------------------------------------
// NAME : DMAT_GeneratePattern
//
// DESCRIPTION : Prepare the data in the source and the destination of the DMA transfert
//
// PARAMETERS : Pattern specify which algorithm to choose to fill the memory
// PATTERN_0
// PATTERN_1
// PATTERN_2
// PATTERN_3
// PATTERN_4
// PATTERN_5
// ...
//
//
// RETURN VALUE : UWORD32 value generated
//
//--------------------------------------------------------------------------------
UWORD32 DMAT_GeneratePattern( UWORD16 Pattern, UWORD32 Index )
{
#define PAT_HEAD4 0xA0040000
#define PAT_HEAD5 0xA0050000
#define PAT_HEAD6 0xA0060000
switch(Pattern)
{
case DMA_PATTERN_0 :
{
return((UWORD32)Index);
}
case DMA_PATTERN_1 :
{
if (Index==0)
{
srand(0);
}
return((UWORD32)(0xFF*rand()));
}
case DMA_PATTERN_2 :
{
if (Index==0)
{
srand(1);
}
return((UWORD32)(0xFF*rand()));
}
case DMA_PATTERN_3 :
{// 32 bits word 0x00000000 0x11111111 0x22222222 0x33333333 ....
UWORD32 Temp;
Index=Index%16;
Temp=((Index<<12)+(Index<<8)+(Index<<4)+Index);
return((UWORD32)((Temp<<16)+Temp));
}
case DMA_PATTERN_4 :
{
UWORD32 Temp;
Index=Index%16;
Temp=((Index<<12)+(Index<<8)+(Index<<4)+Index);
return((UWORD32)((PAT_HEAD4)+Temp));
}
case DMA_PATTERN_5 :
{// 32 bits word 0x00000000 0x11111111 0x22222222 0x33333333 ....
Index=(Index/4)%16;
return((UWORD32)(Index<<4+Index));
}
case DMA_PATTERN_LCD_0 :
{
return(0);
}
case DMA_PATTERN_CAMIF_0:
case DMA_PATTERN_UART:
{
return(0);
}
default :
{
return((UWORD32)0xBAD);
}
}//end switch
}
//-------------------------------------------------------------------------------
// NAME : DMAT_SpyWriteFailResults
//
// DESCRIPTION : Verify the data in the destination using the same algorithm
// than for the source
//
// 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_LCD
// i Loop counter value
// FailData Memory read data to write into spy
// ExpectedData Generated pattern data expected from memory.
//
//
// RETURN VALUE : none
//
//--------------------------------------------------------------------------------
BOOL DMAT_SpyWriteFailResults( UWORD16 ChannelNumber, UWORD16 i, UWORD16 FailData,
UWORD16 ExpectedData)
{
CHANNEL_DESCRIPTOR* Chptr;
Chptr=&(SystemDma.DmaChannel[ChannelNumber]);
RES_Set(START_ARRAY_DATA);
RES_Set(i);
RES_Set(ExpectedData);
RES_Set(FailData);
RES_Set(END_ARRAY_DATA);
switch(Chptr->DestAddressMode)
{
case DMA_ADD_CONSTANT :
{
RES_Set(DMA_VERIF_CONSTANT_ERR);
break;
}
case DMA_ADD_POSTINC :
{
RES_Set(DMA_VERIF_POSTINC_ERR);
break;
}
case DMA_ADD_SINGLE_INDEX :
{
RES_Set(DMA_VERIF_SINGLEADD_ERR);
break;
}
case DMA_ADD_DOUBINDEX :
{
RES_Set(DMA_VERIF_DOUBLEADD_ERR);
break;
}
default:
{
RES_StopVhdl();
break;
}
}
RES_StopVhdl();
return((BOOL)TRUE);
}
//-------------------------------------------------------------------------------
// NAME : DMAT_InitializeOrVerifyData
//
// DESCRIPTION : Either initialize or Verify the data involved in the DMA 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_LCD
// MemMode INITIALIZE_MEM
// VERIFY_MEM
//
//
// RETURN VALUE : IS_OK or NOT_OK if something fail
//
//--------------------------------------------------------------------------------
BOOL DMAT_InitializeOrVerifyData( UWORD16 ChannelNumber, UWORD16 MemMode )
{
UWORD32 BlockSize, i, rtn_status, AddressMode;
CHANNEL_DESCRIPTOR* Chptr;
rtn_status = IS_OK;
Chptr=&(SystemDma.DmaChannel[ChannelNumber]);
if (ChannelNumber != DMA_CHANNEL_LCD)
{
BlockSize = Chptr->EltNumber * Chptr->FrameNumber;
if (MemMode == INITIALIZE_MEM)
{
AddressMode = (Chptr->SrcAddressMode);
}
else
{
AddressMode = (Chptr->DestAddressMode);
}
switch(AddressMode)
{
//--------------------------------------------------------------------------------
case DMA_ADD_CONSTANT :
{
switch(Chptr->TypeSize)
{
case DMA_TYPE_32_BITS:
{
UWORD32* MemPtr;
i = 32;
if (MemMode == INITIALIZE_MEM) // Initialize memory with data . . .
{
MemPtr = (UWORD32*) (Chptr->SrcAdd);
*MemPtr = DMAT_GeneratePattern(Chptr->Pattern,i);
}
else // Verify mode - Validate transfer
{
MemPtr = (UWORD32*) (Chptr->DestAdd);
if (*MemPtr != DMAT_GeneratePattern(Chptr->Pattern,i))
{
DMAT_SpyWriteFailResults( ChannelNumber, i, (0x0000FFFF & (*MemPtr)),
(0x0000FFFF & (DMAT_GeneratePattern(Chptr->Pattern,i))));
rtn_status = NOT_OK;
}
}
break;
}
case DMA_TYPE_16_BITS:
{
UWORD16* MemPtr;
i = 16;
if (MemMode == INITIALIZE_MEM) // Initialize memory with data . . .
{
MemPtr = (UWORD16*) (Chptr->SrcAdd);
*MemPtr = (0x0000FFFF & DMAT_GeneratePattern(Chptr->Pattern,i));
}
else // Verify mode - Validate transfer
{
MemPtr = (UWORD16*) (Chptr->DestAdd);
if ((0x0000FFFF & (*MemPtr)) != (0x0000FFFF & DMAT_GeneratePattern(Chptr->Pattern,i)))
{
DMAT_SpyWriteFailResults( ChannelNumber, i, (0x0000FFFF & (*MemPtr)),
(0x0000FFFF & (DMAT_GeneratePattern(Chptr->Pattern,i))));
rtn_status = NOT_OK;
}
}
break;
}
case DMA_TYPE_8_BITS:
{
UWORD8* MemPtr;
i = 8;
if (MemMode == INITIALIZE_MEM) // Initialize memory with data . . .
{
MemPtr = (UWORD8*) (Chptr->SrcAdd);
*MemPtr = (0x000000FF & DMAT_GeneratePattern(Chptr->Pattern,i));
}
else // Verify mode - Validate transfer
{
MemPtr = (UWORD8*) (Chptr->DestAdd);
if ((0x000000FF & (*MemPtr)) != (0x000000FF & DMAT_GeneratePattern(Chptr->Pattern,i)))
{
DMAT_SpyWriteFailResults( ChannelNumber, i, (0x000000FF & (*MemPtr)),
(0x000000FF & (DMAT_GeneratePattern(Chptr->Pattern,i))));
rtn_status = NOT_OK;
}
}
break;
}
default:
{
RES_StopVhdl();
break;
}
}
break;
}
//--------------------------------------------------------------------------------
case DMA_ADD_POSTINC :
{
switch(Chptr->TypeSize)
{
case DMA_TYPE_32_BITS:
{
UWORD32* MemPtr;
for (i = 0; i < BlockSize ; i++)
{
if (MemMode == INITIALIZE_MEM) // Initialize memory with data . . .
{
if (i == 0)
{
MemPtr = (UWORD32*) (Chptr->SrcAdd);
}
*MemPtr = DMAT_GeneratePattern(Chptr->Pattern,i);
}
else // Verify mode - Validate transfer
{
if (i == 0)
{
MemPtr = (UWORD32*) (Chptr->DestAdd);
}
if (*MemPtr != DMAT_GeneratePattern(Chptr->Pattern,i))
{
DMAT_SpyWriteFailResults( ChannelNumber, i, (0x0000FFFF & (*MemPtr)),
(0x0000FFFF & (DMAT_GeneratePattern(Chptr->Pattern,i))));
rtn_status = NOT_OK;
}
}
MemPtr++;
}
break;
}
case DMA_TYPE_16_BITS:
{
UWORD16* MemPtr;
for (i = 0; i < BlockSize ; i++)
{
if (MemMode == INITIALIZE_MEM) // Initialize memory with data . . .
{
if (i == 0)
{
MemPtr = (UWORD16*) (Chptr->SrcAdd);
}
*MemPtr = (0x0000FFFF & DMAT_GeneratePattern(Chptr->Pattern,i));
}
else // Verify mode - Validate transfer
{
if (i == 0)
{
MemPtr = (UWORD16*) (Chptr->DestAdd);
}
if ((0x0000FFFF & (*MemPtr)) != (0x0000FFFF & DMAT_GeneratePattern(Chptr->Pattern,i)))
{
DMAT_SpyWriteFailResults( ChannelNumber, i, (0x0000FFFF & (*MemPtr)),
(0x0000FFFF & (DMAT_GeneratePattern(Chptr->Pattern,i))));
rtn_status = NOT_OK;
}
}
MemPtr++;
}
break;
}
case DMA_TYPE_8_BITS:
{
UWORD8* MemPtr;
for (i = 0; i < BlockSize ; i++)
{
if (MemMode == INITIALIZE_MEM) // Initialize memory with data . . .
{
if (i == 0)
{
MemPtr = ((UWORD8*)(Chptr->SrcAdd));
}
*MemPtr = ((UWORD8)(0x000000FF & ((UWORD32)(DMAT_GeneratePattern(Chptr->Pattern,i)))));
}
else // Verify mode - Validate transfer
{
if (i == 0)
{
MemPtr = ((UWORD8*)(Chptr->DestAdd));
}
if ((0x000000FF & ((UWORD32)(*MemPtr))) != (0x000000FF & ((UWORD32)(DMAT_GeneratePattern(Chptr->Pattern,i)))))
{
DMAT_SpyWriteFailResults( ChannelNumber, i, (0x000000FF & ((UWORD32)(*MemPtr))),
(0x000000FF & ((UWORD32)((DMAT_GeneratePattern(Chptr->Pattern,i))))));
rtn_status = NOT_OK;
}
}
MemPtr++;
}
break;
}
default:
{
RES_StopVhdl();
break;
}
}
break;
}//end switch POST_INC
//--------------------------------------------------------------------------------
case DMA_ADD_SINGLE_INDEX :
{
switch(Chptr->TypeSize)
{
case DMA_TYPE_32_BITS:
{
UWORD32* MemPtr;
for (i = 0; i < BlockSize ; i++)
{
if (MemMode == INITIALIZE_MEM) // Initialize memory with data . . .
{
if (i == 0)
{
MemPtr = (UWORD32*) (Chptr->SrcAdd);
}
*MemPtr = DMAT_GeneratePattern(Chptr->Pattern,i);
}
else // Verify mode - Validate transfer
{
if (i == 0)
{
MemPtr = (UWORD32*) (Chptr->DestAdd);
}
if (*MemPtr != DMAT_GeneratePattern(Chptr->Pattern,i))
{
DMAT_SpyWriteFailResults( ChannelNumber, i, (0x0000FFFF & (*MemPtr)),
(0x0000FFFF & (DMAT_GeneratePattern(Chptr->Pattern,i))));
rtn_status = NOT_OK;
}
}
if (((i+1)%4)==0)
{
MemPtr+=Chptr->EltIndex;
}
else
{
MemPtr++;
}
}
break;
}
case DMA_TYPE_16_BITS:
{
UWORD16* MemPtr;
for (i = 0; i < BlockSize ; i++)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -