📄 2rheatest.c
字号:
// RHEA_DEBUG_ADDRESS
//---------------------------
Temp= RHEA_ReadRegisters(BridgeNumber, RHEA_DEBUG_ADDRESS);
logresult=TEST_OK;
if (GetGroupBits(Temp, RHEA_DEBUG_ADDRESS_POS, RHEA_DEBUG_ADDRESS_NUMB )!=RHEA_DEBUG_ADDRESS_RESET_VAL)
logresult= RHEA_DEBUG_ADDRESS_RESET_FAIL;
RES_Set(logresult);
// RHEA_DATA_LSB
//---------------------------
Temp= RHEA_ReadRegisters(BridgeNumber,RHEA_DATA_LSB );
logresult=TEST_OK;
if (GetGroupBits(Temp, RHEA_DATA_DBG_LOW_POS, RHEA_DATA_DBG_LOW_NUMB )!=RHEA_DATA_DBG_LOW_RESET_VAL)
logresult= RHEA_DATA_LSB_RESET_FAIL;
RES_Set(logresult);
// RHEA_DATA_MSB
//---------------------------
Temp= RHEA_ReadRegisters(BridgeNumber,RHEA_DATA_MSB );
logresult=TEST_OK;
if (GetGroupBits(Temp, RHEA_DATA_DBG_HIGH_POS, RHEA_DATA_DBG_HIGH_NUMB )!=RHEA_DATA_DBG_LOW_RESET_VAL)
logresult= RHEA_DATA_MSB_RESET_FAIL;
RES_Set(logresult);
// RHEA_DEBUG_CTRL
//--------------------------
Temp= RHEA_ReadRegisters(BridgeNumber,RHEA_DEBUG_CTRL );
logresult=TEST_OK;
if (GetGroupBits(Temp,RHEA_ABORT_FLAG_POS,RHEA_ABORT_FLAG_NUMB )!=RHEA_ABORT_FLAG_RESET_VAL )
logresult= RHEA_DEBUG_CTRL_RESET_FAIL;
logresult=TEST_OK;
if (GetGroupBits(Temp,RHEA_WR_SIZE_FLAG_POS,RHEA_WR_SIZE_FLAG_NUMB )!=RHEA_WR_SIZE_FLAG_RESET_VAL )
logresult= RHEA_DEBUG_CTRL_RESET_FAIL;
logresult=TEST_OK;
if (GetGroupBits(Temp,RHEA_RNW_POS ,RHEA_RNW_NUMB )!=RHEA_RNW_RESET_VAL )
logresult= RHEA_DEBUG_CTRL_RESET_FAIL;
logresult=TEST_OK;
if (GetGroupBits(Temp,RHEA_MAS_POS ,RHEA_MAS_NUMB )!=RHEA_MAS_RESET_VAL )
logresult= RHEA_DEBUG_CTRL_RESET_FAIL;
logresult=TEST_OK;
if (GetGroupBits(Temp,RHEA_PERHMAS_POS ,RHEA_PERHMAS_NUMB )!=RHEA_PERHMAS_RESET_VAL )
logresult= RHEA_DEBUG_CTRL_RESET_FAIL;
RES_Set(logresult);
}
//-------------------------------------------------------------------------------
// NAME : RHEA_TestTestStoreLoad
//
// DESCRIPTION : Test all the reset values of the specified bridge
//
// PARAMETERS : BridgeNumber BRIDGE_1 or BRIDGE_2
//
// ConfigPattern CONFIG_PATTERN_0
// CONFIG_PATTERN_1
// CONFIG_PATTERN_2 ...
// Strobe0Address
//
// Strobe1Address
//
// RETURN VALUE : Value of the register
//
//--------------------------------------------------------------------------------
BOOL RHEA_TestTestStoreLoad(BOOL BridgeNumber, UWORD16 ConfigPattern, UWORD32 Strobe0Address, UWORD32 Strobe1Address)
{
UWORD16 logresult=0;
RHEA_TestSetConfig(BridgeNumber,ConfigPattern);
logresult=TEST_OK;
if (str_ldr(Strobe0Address)!=RES_OK)
logresult=RHEA_STRLD_FAIL;
if (str_ldr(Strobe1Address)!=RES_OK)
logresult=RHEA_STRLD_FAIL;
RES_Set(logresult);
}
//-------------------------------------------------------------------------------
// NAME : RHEA_TestTestMultipleAccess
//
// DESCRIPTION : Test the access on the specified address
//
// PARAMETERS : BridgeNumber BRIDGE_1 or BRIDGE_2
//
// Strobe0Address
//
// Strobe1Address
//
//
// RETURN VALUE : IS_OK or NOT_OK
//
//--------------------------------------------------------------------------------
BOOL RHEA_TestTestMultipleAccess(UWORD16 BridgeNumber, UWORD32 Strobe0Address, UWORD32 Strobe1Address)
{
UWORD16 logresult=0;
RHEA_TestSetConfig(BridgeNumber,CONFIG_PATTERN_1);
logresult=TEST_OK;
if (multiple(Strobe0Address)!=RES_OK)
logresult=RHEA_MULTI_FAIL;
if (multiple(Strobe1Address)!=RES_OK)
logresult=RHEA_MULTI_FAIL;
RES_Set(logresult);
}
//-------------------------------------------------------------------------------
// NAME : RHEA_TestTestAccess
//
// DESCRIPTION : Test the access on the specified address
//
// PARAMETERS : BridgeNumber BRIDGE_1 or BRIDGE_2
//
// Strobe0Address
//
// Strobe1Address
//
// MemoryWidth
//
// RETURN VALUE : Value of the register
//
//--------------------------------------------------------------------------------
UWORD16 RHEA_TestTestAccess(UWORD32 Strobe0Address, UWORD32 Strobe1Address, UWORD16 MemoryWidth)
{
static UWORD8 strobe0_value_8bits =0x55;
static UWORD8 strobe1_value_8bits =0xaa;
static UWORD16 strobe0_value_16bits =0xa1a2;
static UWORD16 strobe1_value_16bits =0x5152;
static UWORD32 strobe0_value_32bits =0xabcdef59;
static UWORD32 strobe1_value_32bits =0xf417278c;
BOOL ok;
switch (MemoryWidth)
{
case RHEA_BITS8_SIZE :
{
// write to the fast and slow strobe domains with 8 bits access
//omap3 now supports strobe 0 for external peripherals - JP
*(UWORD8*) (Strobe0Address) = strobe0_value_8bits;
*(UWORD8*) (Strobe1Address) = strobe1_value_8bits;
// Check that data transfered into strobe 0 & 1 are correct
ok=(*(UWORD8*) (Strobe0Address) == strobe0_value_8bits && *(UWORD8*) (Strobe1Address) == strobe1_value_8bits );
// increment test values so that next test is perform on different values
strobe0_value_8bits++;
strobe1_value_8bits++;
break;
}
case RHEA_BITS16_SIZE :
{
// write to the fast and slow strobe domains with 16 bits access
*(UWORD16*) (Strobe0Address) = strobe0_value_16bits;
*(UWORD16*) (Strobe1Address) = strobe1_value_16bits;
// Check that data transfered into strobe 0 & 1 are correct
ok=(( *(UWORD16*) (Strobe0Address) == strobe0_value_16bits ) && ( *(UWORD16*) (Strobe1Address) == strobe1_value_16bits ));
// increment test values so that next test is perform on different values
strobe0_value_16bits++;
strobe1_value_16bits++;
break;
}
case RHEA_BITS32_SIZE :
{
// write to the fast and slow strobe domains with 32 bits access
*(UWORD32*) (Strobe0Address) = strobe0_value_32bits;
*(UWORD32*) (Strobe1Address) = strobe1_value_32bits;
// Check that data transfered into strobe 0 & 1 are correct
ok=(( *(UWORD32*) (Strobe0Address) == strobe0_value_32bits ) && ( *(UWORD32*) (Strobe1Address) == strobe1_value_32bits ));
// increment test values so that next test is perform on different values
strobe0_value_32bits++;
strobe1_value_32bits++;
break;
}
}//switch (MemoryWidth)
if(ok)
return IS_OK;
else
return NOT_OK;
}
//-------------------------------------------------------------------------------
// NAME : RHEA_TestWriteTest
//
// DESCRIPTION : Test the access on the specified address
//
// PARAMETERS : BridgeNumber BRIDGE_1 or BRIDGE_2
//
// Strobe0Address
//
// Strobe1Address
//
// MemoryWidth
//
// RETURN VALUE : IS_OK or NOT_OK
//
//--------------------------------------------------------------------------------
BOOL RHEA_TestWriteTest(BOOL BridgeNumber, UWORD16 ConfigPattern, UWORD32 Strobe0Address, UWORD32 Strobe1Address, UWORD16 MemoryWidth)
{
UWORD16 logresult=0;
RHEA_TestSetConfig(BridgeNumber, ConfigPattern);
logresult=TEST_OK;
if (RHEA_TestTestAccess(Strobe0Address, Strobe1Address,MemoryWidth)!=RES_OK)
logresult=RHEA_LOWFREQ_FAIL;
RES_Set(logresult);
}
//-------------------------------------------------------------------------------
// NAME : RHEA_TestGenerateAbort
//
// DESCRIPTION : Test the access on the specified address
//
// PARAMETERS : BridgeNumber BRIDGE_1 or BRIDGE_2
//
// ConfigPattern CONFIG_PATTERN_0
// CONFIG_PATTERN_1
// CONFIG_PATTERN_2
//
// MissingPerif Address of a missing perif
//
//
// RETURN VALUE : IS_OK or NOT_OK
//
//--------------------------------------------------------------------------------
BOOL RHEA_TestGenerateAbort(BOOL BridgeNumber, UWORD16 ConfigPattern, UWORD32 MissingPerif)
{
RHEA_TestSetConfig(BridgeNumber, ConfigPattern);
// WARNING:
// The following operations should generate an abort data
// Write a value on a missing peripheral on strobe 0
REG16(MissingPerif) = 0xAA;
// if we execute something after the latest instruction, it is not OK
return(NOT_OK);
}
//---------------------------------------------------------------------------------------
// NAME : RHEA_TestTimeoutTest
//
// DESCRIPTION : Test the access on the specified Missing address, it generate a timeout
//
// PARAMETERS : BridgeNumber BRIDGE_1 or BRIDGE_2
//
// ConfigPattern CONFIG_PATTERN_0
// CONFIG_PATTERN_1
// CONFIG_PATTERN_2
//
// MissingPerif Address of a missing perif
//
// Bridge_Irq_Counter_ptr pointer of irq counter
//
// RETURN VALUE : IS_OK or NOT_OK
//
//----------------------------------------------------------------------------------------
void RHEA_TestTimeoutTest( UWORD16 BridgeNumber, UWORD32 MissAdd, UWORD8 * Bridge_Irq_Counter_ptr)
{
UWORD16 Temp,i,logresult;
RHEA_TestSetConfig(BridgeNumber,CONFIG_PATTERN_0);
Bridge_Irq_Counter_ptr=0;
//===================================================
// Write a value on a missing peripheral
//===================================================
REG16(MissAdd) = 0x1234;
// wait for interrupt event
for(i=0; ((*Bridge_Irq_Counter_ptr) == 0) && (i<MAX_WAIT_IT_RHEA); i++);
logresult=TEST_OK;
if (i>=MAX_WAIT_IT_RHEA)
{
logresult=RHEA_TIMEOUT_FAIL;
}
else
{
Temp=RHEA_ReadRegisters(BridgeNumber, RHEA_DEBUG_CTRL);
}
RES_Set(logresult);
//==================================================
// Read a value on a missing peripheral on strobe 0
//==================================================
Temp=REG16(MissAdd);
// wait for interrupt event
for(i=0; ((*Bridge_Irq_Counter_ptr) == 0) && (i<MAX_WAIT_IT_RHEA); i++);
logresult=TEST_OK;
if (i>=MAX_WAIT_IT_RHEA)
{
logresult=RHEA_TIMEOUT_FAIL;
}
else
{
Temp=RHEA_ReadRegisters(BridgeNumber, RHEA_DEBUG_CTRL);
}
RES_Set(logresult);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -