📄 tmp.c
字号:
MSG_END_RE_UP_TESTS;
}
void CAM1RegisterExclusivityTestDown(const UWORD32 baseAddress)
{
WORD32 i;
UWORD32 regVal;
registerExclusivityStruct r;
UWORD32 ONES32;
UWORD32 ZEROS32;
UWORD16 ONES16;
UWORD16 ZEROS16;
UWORD8 ONES8;
UWORD8 ZEROS8;
MSG_START_RE_DOWN_TESTS;
for( i = CAM1_EXCLUSIVITY_REGISTERS-1; i>=0 ; i-- )
{
r = CAM1RegisterExclusivityData[i];
MSG_RE_DOWN_TEST_PART1(r.regType, r.address);
ONES32 = (0xffffffff & r.includeMask) | (r.powerOnValue & ~r.includeMask);
ZEROS32 = r.powerOnValue & ~r.includeMask;
ONES16 = (0xffff & (UWORD16)r.includeMask) | ((UWORD16)r.powerOnValue & ~(UWORD16)r.includeMask);
ZEROS16 = (UWORD16)r.powerOnValue & ~(UWORD16)r.includeMask;
ONES8 = (0xff & (UWORD8)r.includeMask) | ((UWORD8)r.powerOnValue & ~(UWORD8)r.includeMask);
ZEROS8 = (UWORD8)r.powerOnValue & ~(UWORD8)r.includeMask;
switch( r.regType )
{
case ACC_32BIT:
{
if( (READ_ONLY == r.IOstatus) || (READ_WRITE == r.IOstatus) )
{
regVal = RD_MEM_32_VOLATILE(r.address + baseAddress);
if( (regVal& r.powerOnMask) != (((r.powerOnValue & r.rsrvdReturnZerosMask) | r.rsrvdReturnOnesMask) & r.powerOnMask))
{
MSG_RE_DOWN_POWER_ON_FAIL(r.regType, r.address, regVal);
}
}
if( (WRITE_ONLY == r.IOstatus) || (READ_WRITE == r.IOstatus) )
{
WR_MEM_32_VOLATILE(r.address + baseAddress, ONES32);
}
if( READ_WRITE == r.IOstatus )
{
regVal = RD_MEM_32_VOLATILE(r.address + baseAddress);
if( (((ONES32 & r.rsrvdReturnZerosMask) | r.rsrvdReturnOnesMask) & r.readMask) != (regVal & r.readMask) )
{
MSG_RE_DOWN_ONES_FAIL(r.regType, r.address, regVal);
}
}
break;
}
case ACC_16BIT:
{
if( (READ_ONLY == r.IOstatus) || (READ_WRITE == r.IOstatus) )
{
regVal = RD_MEM_16_VOLATILE(r.address + baseAddress);
if( (regVal & r.powerOnMask) != (((r.powerOnValue & r.rsrvdReturnZerosMask) | r.rsrvdReturnOnesMask) & r.powerOnMask))
{
MSG_RE_DOWN_POWER_ON_FAIL(r.regType, r.address, regVal);
}
}
if( (WRITE_ONLY == r.IOstatus) || (READ_WRITE == r.IOstatus) )
{
WR_MEM_16_VOLATILE(r.address + baseAddress, ONES16);
}
if( READ_WRITE == r.IOstatus )
{
regVal = RD_MEM_16_VOLATILE(r.address + baseAddress);
if( (((ONES16 & r.rsrvdReturnZerosMask) | r.rsrvdReturnOnesMask) & r.readMask) != (regVal & r.readMask) )
{
MSG_RE_DOWN_ONES_FAIL(r.regType, r.address, regVal);
}
}
break;
}
case ACC_8BIT:
{
if( (READ_ONLY == r.IOstatus) || (READ_WRITE == r.IOstatus) )
{
regVal = RD_MEM_8_VOLATILE(r.address + baseAddress);
if( (regVal & r.powerOnMask) != (((r.powerOnValue & r.rsrvdReturnZerosMask) | r.rsrvdReturnOnesMask) & r.powerOnMask))
{
MSG_RE_DOWN_POWER_ON_FAIL(r.regType, r.address, regVal);
}
}
if( (WRITE_ONLY == r.IOstatus) || (READ_WRITE == r.IOstatus) )
{
WR_MEM_8_VOLATILE(r.address + baseAddress, ONES8);
}
if( READ_WRITE == r.IOstatus )
{
regVal = RD_MEM_8_VOLATILE(r.address + baseAddress);
if( (((ONES8 & r.rsrvdReturnZerosMask) | r.rsrvdReturnOnesMask) & r.readMask) != (regVal & r.readMask) )
{
MSG_RE_DOWN_ONES_FAIL(r.regType, r.address, regVal);
}
}
break;
}
default:
break;
}
}
for( i = CAM1_EXCLUSIVITY_REGISTERS-1; i>=0 ; i-- )
{
r = CAM1RegisterExclusivityData[i];
MSG_RE_DOWN_TEST_PART2(r.regType, r.address);
ONES32 = (0xffffffff & r.includeMask) | (r.powerOnValue & ~r.includeMask);
ZEROS32 = r.powerOnValue & ~r.includeMask;
ONES16 = (0xffff & (UWORD16)r.includeMask) | ((UWORD16)r.powerOnValue & ~(UWORD16)r.includeMask);
ZEROS16 = (UWORD16)r.powerOnValue & ~(UWORD16)r.includeMask;
ONES8 = (0xff & (UWORD8)r.includeMask) | ((UWORD8)r.powerOnValue & ~(UWORD8)r.includeMask);
ZEROS8 = (UWORD8)r.powerOnValue & ~(UWORD8)r.includeMask;
switch( r.regType )
{
case ACC_32BIT:
{
if( READ_ONLY == r.IOstatus )
{
regVal = RD_MEM_32_VOLATILE(r.address + baseAddress);
if( (regVal & r.powerOnMask) != (((r.powerOnValue & r.rsrvdReturnZerosMask) | r.rsrvdReturnOnesMask) & r.powerOnMask))
{
MSG_RE_DOWN_POWER_ON_FAIL(r.regType, r.address, regVal);
}
}
else if( READ_WRITE == r.IOstatus )
{
regVal = RD_MEM_32_VOLATILE(r.address + baseAddress);
if( (((ONES32 & r.rsrvdReturnZerosMask) | r.rsrvdReturnOnesMask) & r.readMask) != (regVal & r.readMask) )
{
MSG_RE_DOWN_ONES_FAIL(r.regType, r.address, regVal);
}
}
if( (WRITE_ONLY == r.IOstatus) || (READ_WRITE == r.IOstatus) )
{
WR_MEM_32_VOLATILE(r.address + baseAddress, ZEROS32);
}
if( READ_WRITE == r.IOstatus )
{
regVal = RD_MEM_32_VOLATILE(r.address + baseAddress);
if( ((ZEROS32 & r.rsrvdReturnZerosMask) | r.rsrvdReturnOnesMask) != (regVal & r.readMask) )
{
MSG_RE_DOWN_ZEROS_FAIL(r.regType, r.address, regVal);
}
}
break;
}
case ACC_16BIT:
{
if( READ_ONLY == r.IOstatus )
{
regVal = RD_MEM_16_VOLATILE(r.address + baseAddress);
if( (regVal & r.powerOnMask) != (((r.powerOnValue & r.rsrvdReturnZerosMask) | r.rsrvdReturnOnesMask) & r.powerOnMask))
{
MSG_RE_DOWN_POWER_ON_FAIL(r.regType, r.address, regVal);
}
}
else if( READ_WRITE == r.IOstatus )
{
regVal = RD_MEM_16_VOLATILE(r.address + baseAddress);
if( (((ONES16 & r.rsrvdReturnZerosMask) | r.rsrvdReturnOnesMask) & r.readMask) != (regVal & r.readMask) )
{
MSG_RE_DOWN_POWER_ON_FAIL(r.regType, r.address, regVal);
}
}
if( (WRITE_ONLY == r.IOstatus) || (READ_WRITE == r.IOstatus) )
{
WR_MEM_16_VOLATILE(r.address + baseAddress, ZEROS16);
}
if( READ_WRITE == r.IOstatus )
{
regVal = RD_MEM_16_VOLATILE(r.address + baseAddress);
if( ((ZEROS16 & r.rsrvdReturnZerosMask) | r.rsrvdReturnOnesMask) != (regVal & r.readMask) )
{
MSG_RE_DOWN_ZEROS_FAIL(r.regType, r.address, regVal);
}
}
break;
}
case ACC_8BIT:
{
if( READ_ONLY == r.IOstatus )
{
regVal = RD_MEM_8_VOLATILE(r.address + baseAddress);
if( ( regVal & r.powerOnMask) != (((r.powerOnValue & r.rsrvdReturnZerosMask) | r.rsrvdReturnOnesMask) & r.powerOnMask))
{
MSG_RE_DOWN_POWER_ON_FAIL(r.regType, r.address, regVal);
}
}
else if( READ_WRITE == r.IOstatus )
{
regVal = RD_MEM_8_VOLATILE(r.address + baseAddress);
if( (((ONES8 & r.rsrvdReturnZerosMask) | r.rsrvdReturnOnesMask) & r.readMask) != (regVal & r.readMask) )
{
MSG_RE_DOWN_ONES_FAIL(r.regType, r.address, regVal);
}
}
if( (WRITE_ONLY == r.IOstatus) || (READ_WRITE == r.IOstatus) )
{
WR_MEM_8_VOLATILE(r.address + baseAddress, ZEROS8);
}
if( READ_WRITE == r.IOstatus )
{
regVal = RD_MEM_8_VOLATILE(r.address + baseAddress);
if( ((ZEROS8 & r.rsrvdReturnZerosMask) | r.rsrvdReturnOnesMask) != (regVal & r.readMask) )
{
MSG_RE_DOWN_POWER_ON_FAIL(r.regType, r.address, regVal);
}
}
break;
}
default:
break;
}
}
MSG_END_RE_DOWN_TESTS;
}
void CAM1RegisterIntegrityTest(const UWORD32 baseAddress)
{
UWORD32 i;
registerIntegrityStruct r;
UWORD32 regVal32;
UWORD32 ONES32;
UWORD32 AAAAS32;
UWORD32 FIVES32;
UWORD32 ZEROS32;
UWORD16 regVal16;
UWORD16 ONES16;
UWORD16 AAAAS16;
UWORD16 FIVES16;
UWORD16 ZEROS16;
UWORD8 regVal8;
UWORD8 ONES8;
UWORD8 AAAAS8;
UWORD8 FIVES8;
UWORD8 ZEROS8;
MSG_START_RI_TESTS;
for( i = 0 ; i < CAM1_INTEGRITY_REGISTERS ; i++ )
{
r = CAM1RegisterData[i];
MSG_RI_TEST(r.regType, r.address);
ONES32 = (0xffffffff & r.includeMask) | (r.powerOnValue & ~r.includeMask);
AAAAS32 = (0xaaaaaaaa & r.includeMask) | (r.powerOnValue & ~r.includeMask);
FIVES32 = (0x55555555 & r.includeMask) | (r.powerOnValue & ~r.includeMask);
ZEROS32 = r.powerOnValue & ~r.includeMask;
ONES16 = (0xffff & (UWORD16)r.includeMask) | ((UWORD16)r.powerOnValue & ~(UWORD16)r.includeMask);
AAAAS16 = (0xaaaa & (UWORD16)r.includeMask) | ((UWORD16)r.powerOnValue & ~(UWORD16)r.includeMask);
FIVES16 = (0x5555 & (UWORD16)r.includeMask) | ((UWORD16)r.powerOnValue & ~(UWORD16)r.includeMask);
ZEROS16 = (UWORD16)r.powerOnValue & ~(UWORD16)r.includeMask;
ONES8 = (0xff & (UWORD8)r.includeMask) | ((UWORD8)r.powerOnValue & ~(UWORD8)r.includeMask);
AAAAS8 = (0xaa & (UWORD8)r.includeMask) | ((UWORD8)r.powerOnValue & ~(UWORD8)r.includeMask);
FIVES8 = (0x55 & (UWORD8)r.includeMask) | ((UWORD8)r.powerOnValue & ~(UWORD8)r.includeMask);
ZEROS8 = (UWORD8)r.powerOnValue & ~(UWORD8)r.includeMask;
switch( r.regType )
{
case ACC_32BIT:
{
// write ONES32
MSG_RI_ONES(r.regType, r.address);
WR_MEM_32_VOLATILE(r.address + baseAddress, ONES32);
// now change data bus
DUMMY_WRITE(ZEROS32);
// now check back value of register
regVal32 = RD_MEM_32_VOLATILE(r.address + baseAddress);
if ( (regVal32 & r.readMask) != (((ONES32 & r.rsrvdReturnZerosMask) | r.rsrvdReturnOnesMask) & r.readMask) )
{
MSG_RI_FAIL_ONES(r.regType, r.address, regVal32);
}
// write FIVES32
MSG_RI_FIVES(r.regType, r.address);
WR_MEM_32_VOLATILE(r.address + baseAddress, FIVES32);
// now change data bus
DUMMY_WRITE(AAAAS32);
// now check back value of register
regVal32 = RD_MEM_32_VOLATILE(r.address + baseAddress);
if ( (regVal32 & r.readMask) != (((FIVES32 & r.rsrvdReturnZerosMask) | r.rsrvdReturnOnesMask) & r.readMask) )
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -