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

📄 camc1regtst.c

📁 OMAP1030 处理器的ARM 侧硬件测试代码 OMAP1030 是TI的双核处理器
💻 C
📖 第 1 页 / 共 4 页
字号:
            {
                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_UP_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_UP_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_UP_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_UP_ZEROS_FAIL(r.regType, r.address, regVal);
                }
            }
            break;
        }
        default:
            break;
        }
    }

    MSG_END_RE_UP_TESTS;
}

void CAMC1RegisterExclusivityTestDown(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 = CAMC1_EXCLUSIVITY_REGISTERS-1; i>=0 ; i-- )
    {
        r =  CAMC1RegisterExclusivityData[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 = CAMC1_EXCLUSIVITY_REGISTERS-1; i>=0 ; i-- )
    {

        r =  CAMC1RegisterExclusivityData[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 CAMC1RegisterIntegrityTest(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 < CAMC1_INTEGRITY_REGISTERS ; i++ )
    {
        r = CAMC1RegisterData[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);

⌨️ 快捷键说明

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