⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gdmatest.c

📁 OMAP1030 处理器的ARM 侧硬件测试代码 OMAP1030 是TI的双核处理器
💻 C
📖 第 1 页 / 共 5 页
字号:
 
//===============================================================================
//            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 + -