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

📄 2rheatest.c

📁 OMAP1030 处理器的ARM 侧硬件测试代码 OMAP1030 是TI的双核处理器
💻 C
📖 第 1 页 / 共 2 页
字号:
//
//===============================================================================
//            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 1999, (C) Copyright 1999 Texas Instruments.  All rights reserved.
//===============================================================================


#include "global_types.h"
#include "result.h"
#include "2rheatest.h"
#include "2rhea.h"
#include "test.h"
#include "intvecs.h"

#define inside_function 0xBBBB

//==ASSEMBLER EXTERNAL FUNCTIONS
//==The result is a 16 bits integer value returned inside R0 register
//==under Thumb mode i.e. 16 bits mode state

extern int multiple (int Addr);
extern int str_ldr (int Addr);
extern int w_8(int Addr);
extern int w_16(int Addr);
extern int w_32(int Addr);

#define TIMEOUT_RHEA 0x1F
#define MAX_WAIT_IT_RHEA 10



//-------------------------------------------------------------------------------
// NAME         : RHEA_TestSetConfig
//
// DESCRIPTION  : Set the config requested
//
// PARAMETERS   : BridgeNumber        BRIDGE_1 or BRIDGE_2
//
//                ConfigPattern      CONFIG_PATTERN_0
//                                   CONFIG_PATTERN_1
//                                   CONFIG_PATTERN_2
//
//
// RETURN VALUE : IS_OK or NOT_OK
//
//--------------------------------------------------------------------------------
BOOL RHEA_TestSetConfig(UWORD16 BridgeNumber ,UWORD16 ConfigPattern )
{

	// To enable the Registers Update
	INT_SetSupervisor();

	switch (ConfigPattern)
	{
	  case CONFIG_PATTERN_0 :
	    // init. access factors and timeout
      RHEA_WriteCntlReg( BridgeNumber,RHEA_ACCESSFACTOR_VAL_2, RHEA_ACCESSFACTOR_VAL_2 , TIMEOUT_RHEA);

	    // disable write buffer on strobe 0, disable on strobe 1
      RHEA_WriteArmRheaReg( BridgeNumber, RHEA_WRITE_BUFFER_DISABLE , RHEA_WRITE_BUFFER_DISABLE);

	    // enable timeout access and Irg generation in abort access
	    RHEA_WriteEnhancedReg( BridgeNumber, RHEA_TIMEOUT_ENABLE, RHEA_UNMASK_IT ,
                                            RHEA_HIGH_FREQ, RHEA_ABORT_DISABLE);
	  break;

	  case CONFIG_PATTERN_1 :
	    // init. access factors and timeout
      RHEA_WriteCntlReg( BridgeNumber,RHEA_ACCESSFACTOR_VAL_0, RHEA_ACCESSFACTOR_VAL_0,  TIMEOUT_RHEA);

	    // enable write buffer on strobe 0, enable on strobe 1
      RHEA_WriteArmRheaReg( BridgeNumber, RHEA_WRITE_BUFFER_ENABLE , RHEA_WRITE_BUFFER_ENABLE);

	    // enable timeout access and Irg generation in abort access
	    RHEA_WriteEnhancedReg( BridgeNumber, RHEA_TIMEOUT_ENABLE, RHEA_UNMASK_IT,
                                            RHEA_LOW_FREQ, RHEA_ABORT_DISABLE);
	  break;

	  case LOW_FREQ_PATTERN :
	    // init. access factors and timeout
      RHEA_WriteCntlReg( BridgeNumber,RHEA_ACCESSFACTOR_VAL_0, RHEA_ACCESSFACTOR_VAL_0,  TIMEOUT_RHEA);

	    // enable write buffer on strobe 0, enable on strobe 1
      RHEA_WriteArmRheaReg( BridgeNumber, RHEA_WRITE_BUFFER_ENABLE , RHEA_WRITE_BUFFER_ENABLE);

	    // enable timeout access and Irg generation in abort access
	    RHEA_WriteEnhancedReg( BridgeNumber, RHEA_TIMEOUT_ENABLE, RHEA_UNMASK_IT,
                                            RHEA_LOW_FREQ, RHEA_ABORT_DISABLE);
	  break;

	  case HIGH_FREQ_PATTERN :
	    // init. access factors and timeout
      RHEA_WriteCntlReg( BridgeNumber,RHEA_ACCESSFACTOR_VAL_15, RHEA_ACCESSFACTOR_VAL_15,  TIMEOUT_RHEA);

	    // enable write buffer on strobe 0, enable on strobe 1
      RHEA_WriteArmRheaReg( BridgeNumber, RHEA_WRITE_BUFFER_ENABLE , RHEA_WRITE_BUFFER_ENABLE);

	    // enable timeout access and Irg generation in abort access
	    RHEA_WriteEnhancedReg( BridgeNumber, RHEA_TIMEOUT_ENABLE, RHEA_UNMASK_IT,
                                            RHEA_HIGH_FREQ, RHEA_ABORT_DISABLE);
	  break;


	  case ACCESS_FACTOR_PATTERN :
	    // init. access factors and timeout
      RHEA_WriteCntlReg( BridgeNumber,RHEA_ACCESSFACTOR_VAL_15, RHEA_ACCESSFACTOR_VAL_15,  TIMEOUT_RHEA);

	    // disable write buffer on strobe 0, disable on strobe 1
      RHEA_WriteArmRheaReg( BridgeNumber, RHEA_TIMEOUT_ENABLE, RHEA_WRITE_BUFFER_ENABLE);

	    // enable timeout access and Irg generation in abort access
	    RHEA_WriteEnhancedReg( BridgeNumber, RHEA_TIMEOUT_ENABLE, RHEA_UNMASK_IT,
                                            RHEA_HIGH_FREQ, RHEA_ABORT_DISABLE);
	  break;

	  case WRITE_BUFF_PATTERN :
	    // init. access factors and timeout
      RHEA_WriteCntlReg( BridgeNumber,RHEA_ACCESSFACTOR_VAL_15, RHEA_ACCESSFACTOR_VAL_15,  TIMEOUT_RHEA);

	    // disable write buffer on strobe 0, disable on strobe 1
      RHEA_WriteArmRheaReg( BridgeNumber, RHEA_WRITE_BUFFER_ENABLE , RHEA_WRITE_BUFFER_ENABLE);

	    // enable timeout access and Irg generation in abort access
	    RHEA_WriteEnhancedReg( BridgeNumber, RHEA_TIMEOUT_ENABLE, RHEA_UNMASK_IT,
                                            RHEA_HIGH_FREQ, RHEA_ABORT_DISABLE);
	  break;

	  case CONFIG_PATTERN_ABORT_GENERATION :
	    // init. access factors and timeout
      RHEA_WriteCntlReg( BridgeNumber,RHEA_ACCESSFACTOR_VAL_2, RHEA_ACCESSFACTOR_VAL_2,  TIMEOUT_RHEA);

	    // enable write buffer on strobe 0, enable on strobe 1
      RHEA_WriteArmRheaReg( BridgeNumber, RHEA_WRITE_BUFFER_DISABLE , RHEA_WRITE_BUFFER_DISABLE);

	    // enable timeout access and Irg generation in abort access
	    RHEA_WriteEnhancedReg( BridgeNumber, RHEA_TIMEOUT_ENABLE, RHEA_MASK_IT,
                                            RHEA_LOW_FREQ, RHEA_ABORT_ENABLE);
	  break;

	  default :
	  break;
	}

	// Return to User mode after Register Update done
	INT_SetUser();
 }


//-------------------------------------------------------------------------------
// NAME         : RHEA_TestRw8BitsTest
//
// DESCRIPTION  : Does 1 write on each strobe at the address specified
//
// PARAMETERS   : BridgeNumber        BRIDGE_1 or BRIDGE_2
//
//                ConfigPattern       Predefined rhea initialization
//
//               Strobe0Address       Address on Strobe 0
//
//               Strobe1Address       Address on Strobe 1
//
//
// RETURN VALUE : Value of the register
//
//--------------------------------------------------------------------------------
BOOL RHEA_TestRw8BitsTest(BOOL BridgeNumber, UWORD16 ConfigPattern ,UWORD32 Strobe0Address ,UWORD32 Strobe1Address)
{
UWORD16 logresult=0;

    RHEA_TestSetConfig(BridgeNumber,ConfigPattern);

    logresult=TEST_OK;

    if (w_8(Strobe0Address)!=RES_OK)
      logresult=RHEA_ACCESS8_FAIL;

    if (w_8(Strobe1Address)!=RES_OK)
      logresult=RHEA_ACCESS8_FAIL;

    RES_Set(logresult);

}


//-------------------------------------------------------------------------------
// NAME         : RHEA_TestRw16BitsTest
//
// DESCRIPTION  : Does 1 write on each strobe at the address specified
//
// PARAMETERS   : BridgeNumber        BRIDGE_1 or BRIDGE_2
//
//                ConfigPattern       Predefined rhea initialization
//
//               Strobe0Address       Address on Strobe 0
//
//               Strobe1Address       Address on Strobe 1
//
//
// RETURN VALUE : Value of the register
//
//--------------------------------------------------------------------------------
BOOL RHEA_TestRw16BitsTest(BOOL BridgeNumber, UWORD16 ConfigPattern ,UWORD32 Strobe0Address ,UWORD32 Strobe1Address)
{
UWORD16 logresult=0;

    RHEA_TestSetConfig(BridgeNumber,ConfigPattern);

    logresult=TEST_OK;

    if (w_16(Strobe0Address)!=RES_OK)
      logresult=RHEA_ACCESS8_FAIL;

    if (w_16(Strobe1Address)!=RES_OK)
      logresult=RHEA_ACCESS8_FAIL;

    RES_Set(logresult);

}

//-------------------------------------------------------------------------------
// NAME         : RHEA_TestRw32BitsTest
//
// DESCRIPTION  : Does 1 write on each strobe at the address specified
//
// PARAMETERS   : BridgeNumber        BRIDGE_1 or BRIDGE_2
//
//                ConfigPattern       Predefined rhea initialization
//
//               Strobe0Address       Address on Strobe 0
//
//               Strobe1Address       Address on Strobe 1
//
//
// RETURN VALUE : Value of the register
//
//--------------------------------------------------------------------------------
BOOL RHEA_TestRw32BitsTest(BOOL BridgeNumber, UWORD16 ConfigPattern ,UWORD32 Strobe0Address ,UWORD32 Strobe1Address)
{
UWORD16 logresult=0;

    RHEA_TestSetConfig(BridgeNumber,ConfigPattern);

    logresult=TEST_OK;

    if (w_32(Strobe0Address)!=RES_OK)
      logresult=RHEA_ACCESS8_FAIL;

    if (w_32(Strobe1Address)!=RES_OK)
      logresult=RHEA_ACCESS8_FAIL;

    RES_Set(logresult);

}


//-------------------------------------------------------------------------------
// NAME         : RHEA_TestResetValuesTest
//
// DESCRIPTION  : Test all the reset values of the specified bridge
//
// PARAMETERS   : BridgeNumber        BRIDGE_1 or BRIDGE_2
//
//
//
//
// RETURN VALUE : None
//
//--------------------------------------------------------------------------------
BOOL RHEA_TestResetValuesTest(BOOL BridgeNumber )
{
UWORD16 logresult=0;
UWORD16 Temp;

// RHEA_CNTL
//---------------------------
    Temp= RHEA_ReadRegisters(BridgeNumber,RHEA_CNTL);
    logresult=TEST_OK;
    if (GetGroupBits(Temp, RHEA_ACCESS_FACTOR0_POS, RHEA_ACCESS_FACTOR0_NUMB)!=RHEA_ACCESS_FACTOR0_RESET_VAL)
      logresult=RHEA_CNTL_RESET_FAIL;


    if (GetGroupBits(Temp, RHEA_ACCESS_FACTOR1_POS, RHEA_ACCESS_FACTOR1_NUMB)!=RHEA_ACCESS_FACTOR1_RESET_VAL)
      logresult=RHEA_CNTL_RESET_FAIL;


    if (GetGroupBits(Temp, RHEA_ACCESS_TIMEOUT_POS, RHEA_ACCESS_TIMEOUT_NUMB )!=RHEA_ACCESS_TIMEOUT_RESET_VAL)
      logresult=RHEA_CNTL_RESET_FAIL;


    RES_Set(logresult);

// RHEA_BUS_ALLOC
//---------------------------
    Temp= RHEA_ReadRegisters(BridgeNumber, RHEA_BUS_ALLOC);
    logresult=TEST_OK;
    if (GetGroupBits(Temp, RHEA_PRIORITY_POS, RHEA_PRIORITY_NUMB)!=RHEA_PRIORITY_RESET_VAL)
      logresult=RHEA_BUS_ALLOCL_RESET_FAIL;


    if (GetGroupBits(Temp, RHEA_PRIORITY_EN_POS, RHEA_PRIORITY_EN_NUMB)!=RHEA_PRIORITY_EN_RESET_VAL)
      logresult=RHEA_BUS_ALLOCL_RESET_FAIL;


    RES_Set(logresult);


// RHEA_ARM_RHEA
//---------------------------
    Temp= RHEA_ReadRegisters(BridgeNumber,RHEA_ARM_RHEA);
    logresult=TEST_OK;
    if (GetGroupBits(Temp,RHEA_WBUFF_EN0_POS ,RHEA_WBUFF_EN0_NUMB)!=RHEA_WBUFF_EN0_RESET_VAL)
      logresult= RHEA_ARM_RHEA_RESET_FAIL;


    if (GetGroupBits(Temp,RHEA_WBUFF_EN1_POS ,RHEA_WBUFF_EN1_NUMB)!=RHEA_WBUFF_EN1_RESET_VAL)
      logresult= RHEA_ARM_RHEA_RESET_FAIL;


    RES_Set(logresult);


// RHEA_ENHANCED_REG
//---------------------------
    Temp= RHEA_ReadRegisters(BridgeNumber,RHEA_ENHANCED_REG );
    logresult=TEST_OK;
    if (GetGroupBits(Temp,RHEA_TIMEOUT_EN_POS ,RHEA_TIMEOUT_EN_NUMB)!=RHEA_TIMEOUT_EN_RESET_VAL)
      logresult= RHEA_ENHANCED_REG_RESET_FAIL;


    if (GetGroupBits(Temp,RHEA_MASK_IT_POS ,RHEA_MASK_IT_NUMB )!=RHEA_MASK_IT_RESET_VAL)
      logresult= RHEA_ENHANCED_REG_RESET_FAIL;


    if (GetGroupBits(Temp, RHEA_HIGH_FREQ_POS, RHEA_HIGH_FREQ_NUMB )!=RHEA_HIGH_FREQ_RESET_VAL)
      logresult= RHEA_ENHANCED_REG_RESET_FAIL;

    RES_Set(logresult);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -