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

📄 inth2.c

📁 OMAP1030 处理器的ARM 侧硬件测试代码 OMAP1030 是TI的双核处理器
💻 C
📖 第 1 页 / 共 2 页
字号:
//
// PARAMETERS   : None
//
// RETURN VALUE : None
//
// LIMITATIONS  : Result must be initialized
//#####################################################################
BOOL INTH2_GetAndTestResetLev2Inth(void)
{
  UWORD16 index=0;
  UWORD16 logresult=TEST_OK;
  UWORD16 i;
  UWORD16 TempArray[11];

  UWORD32 TempReg;
  UWORD32 ErrorIndex=0;
  UWORD32 TempReg2;
  volatile UWORD32* PtLevelReg;


  TempReg=REG32(LEV2_INTH_IT_REG_SUPERVISOR_ADDR);
  TempArray[0]=(UWORD16)TempReg;
  TempArray[1]=(UWORD16)(TempReg>>16);
  if (TempReg!=LEV2_INTH_IT_REG_RESET_VALUE)
  {
    logresult=LEV2_INTH_WRONG_RESET_VALUE;
    ErrorIndex|=0x1;
  }

  TempReg=REG32(LEV2_INTH_MASK_IT_REG_USER_ADDR);
  TempArray[2]=(UWORD16)TempReg;
  TempArray[3]=(UWORD16)(TempReg>>16);
  if (TempReg!=LEV2_INTH_MASK_IT_REG_RESET_VALUE)
  {
    logresult=LEV2_INTH_WRONG_RESET_VALUE;
    ErrorIndex|=0x2;
  }

  TempReg=REG32(LEV2_INTH_SOURCE_BIN_IRQ_REG_ADDR)&LEV2_INTH_SOURCE_BIN_IRQ_MASK;
  TempArray[4]=(UWORD16)TempReg;
  TempArray[5]=(UWORD16)(TempReg>>16);
  if (TempReg!=LEV2_INTH_SOURCE_BIN_IRQ_RESET_VALUE)
  {
    logresult=LEV2_INTH_WRONG_RESET_VALUE;
    ErrorIndex|=0x4;
  }


  TempReg=REG32(LEV2_INTH_SOURCE_BIN_FIQ_REG_ADDR)&LEV2_INTH_SOURCE_BIN_FIQ_MASK;
  TempArray[6]=(UWORD16)TempReg;
  TempArray[7]=(UWORD16)(TempReg>>16);
  if (TempReg!=LEV2_INTH_SOURCE_BIN_FIQ_RESET_VALUE)
  {
    logresult=LEV2_INTH_WRONG_RESET_VALUE;
    ErrorIndex|=0x8;
  }

  TempReg=REG32(LEV2_INTH_CTRL_REG_USER_ADDR)&LEV2_INTH_CTRL_MASK;
  TempArray[8]=(UWORD16)TempReg;
  TempArray[9]=(UWORD16)(TempReg>>16);
  if (TempReg!=LEV2_INTH_CTRL_RESET_VALUE)
  {
    logresult=LEV2_INTH_WRONG_RESET_VALUE;
    ErrorIndex|=0x10;
  }

  for(i=0;i<19;i++)// Test only the external interrupts ILR
  {
    PtLevelReg  = (UWORD32*)LEV2_INTH_IT_LEVEL_REG_SUPERVISOR_ADDR + i;
    TempReg=(*PtLevelReg)&LEV2_INTH_IT_LEVEL_MASK;
    if (TempReg!=LEV2_INTH_IT_LEVEL_RESET_VALUE)
	  {
      logresult=LEV2_INTH_WRONG_RESET_VALUE;
      ErrorIndex|=0x1<<(i+5);
	  }
  }
  TempArray[10]=(UWORD16)TempReg;
  TempArray[11]=(UWORD16)(TempReg>>16);

  RES_Set(RESULT_SEPARATOR);
  RES_Set(START_ARRAY_DATA);
  for (index = 0 ; index < 12 ; index++)
    RES_Set(TempArray[index]);

  RES_Set(ErrorIndex);
  RES_Set(END_ARRAY_DATA);

  RES_Set(logresult);

}

//#####################################################################
// NAME         : INTH2_TestResetValues
//
// DESCRIPTION  : Call all the test and reset functions
//
// PARAMETERS   : None
//
// RETURN VALUE : None
//
// LIMITATIONS  : None
//#####################################################################
void INTH2_TestResetValues(void)
{
  INTH_GetAndTestResetInth();
  INTH2_GetAndTestResetLev2Inth();
}


void INTH2_TestResetValue(void)
{
  int ITNumber;

  TEST_REGISTER_RESET_VALUE32(LEV2_INTH_IT_REG);
  TEST_REGISTER_RESET_VALUE32(LEV2_INTH_MASK_IT_REG);

  for(ITNumber=0; ITNumber<32; ITNumber++)
  {
    if(GetGroupBits32(REG32(LEV2_INTH_IT_LEVEL_REG_USER_ADDR+(ITNumber<<2)),
                      (LEV2_INTH_LEVEL_FIQ_POS),
                      (LEV2_INTH_LEVEL_FIQ_NUMB))!=
                        (LEV2_INTH_LEVEL_FIQ_RES_VAL))
    {
      RES_Set(LEV2_INTH_LEVEL_FIQ_BAD_RESET_VALUE);
      RES_Set(DATA_STORE);
      RES_Set(ITNumber);
    }

    if(GetGroupBits32(REG32(LEV2_INTH_IT_LEVEL_REG_USER_ADDR+(ITNumber<<2)),
                      (LEV2_INTH_LEVEL_SENSEDGE_POS),
                      (LEV2_INTH_LEVEL_SENSEDGE_NUMB))!=
                        (LEV2_INTH_LEVEL_SENSEDGE_RES_VAL))
    {
      RES_Set(LEV2_INTH_LEVEL_SENSEDGE_BAD_RESET_VALUE);
      RES_Set(DATA_STORE);
      RES_Set(ITNumber);
    }

    if(GetGroupBits32(REG32(LEV2_INTH_IT_LEVEL_REG_USER_ADDR+(ITNumber<<2)),
                      (LEV2_INTH_LEVEL_PRIORITY_POS),
                      (LEV2_INTH_LEVEL_PRIORITY_NUMB))!=
                        (LEV2_INTH_LEVEL_PRIORITY_RES_VAL))
    {
      RES_Set(LEV2_INTH_LEVEL_PRIORITY_BAD_RESET_VALUE);
      RES_Set(DATA_STORE);
      RES_Set(ITNumber);
    }

  }
/*TEST_FIELD_RESET_VALUE32(LEV2_INTH_IT_LEVEL_REG_USER_ADDR,
                           LEV2_INTH_LEVEL_FIQ);
  TEST_FIELD_RESET_VALUE32(LEV2_INTH_IT_LEVEL_REG_USER_ADDR,
                           LEV2_INTH_LEVEL_SENSEDGE);
  TEST_FIELD_RESET_VALUE32(LEV2_INTH_IT_LEVEL_REG_USER_ADDR,
                           LEV2_INTH_LEVEL_PRIORITY);*/

  TEST_REGISTER_RESET_VALUE32(LEV2_INTH_SOURCE_IRQ_REG);
  TEST_REGISTER_RESET_VALUE32(LEV2_INTH_SOURCE_FIQ_REG);

  TEST_FIELD_RESET_VALUE32(LEV2_INTH_SOURCE_BIN_IRQ_REG_ADDR,
                           LEV2_INTH_SOURCE_BIN_IRQNUM);

  TEST_FIELD_RESET_VALUE32(LEV2_INTH_SOURCE_BIN_FIQ_REG_ADDR,
                           LEV2_INTH_SOURCE_BIN_FIQNUM);

  TEST_FIELD_RESET_VALUE32(LEV2_INTH_CTRL_REG_USER_ADDR,
                           LEV2_INTH_CTRL_NEWIRQAGR);
  TEST_FIELD_RESET_VALUE32(LEV2_INTH_CTRL_REG_USER_ADDR,
                           LEV2_INTH_CTRL_NEWFIQAGR);
  TEST_FIELD_RESET_VALUE32(LEV2_INTH_CTRL_REG_USER_ADDR,
                           LEV2_INTH_CTRL_NEWFIQAGR);

  PRINT_CURRENT_ERROR_STATUS(INTH2_TEST_RESET_VALUE_SUCCEEDED);
}

void INTH2_TestRegistersAccess(void)
{
  int ITNumber;

  MODIFY_REGISTER_RESET_VALUE32(LEV2_INTH_MASK_IT_REG);

  for(ITNumber=0; ITNumber<32; ITNumber++)
  {
    SetGroupBits32(REG32(LEV2_INTH_IT_LEVEL_REG_USER_ADDR+(ITNumber<<2)),
                   (LEV2_INTH_LEVEL_FIQ_POS),
                   (LEV2_INTH_LEVEL_FIQ_NUMB),
                   (~LEV2_INTH_LEVEL_FIQ_RES_VAL));
    if(GetGroupBits32(REG32(LEV2_INTH_IT_LEVEL_REG_USER_ADDR+(ITNumber<<2)),
                      (LEV2_INTH_LEVEL_FIQ_POS),
                      (LEV2_INTH_LEVEL_FIQ_NUMB))!=
       GetGroupBits32(~LEV2_INTH_LEVEL_FIQ_RES_VAL,
                       LEV2_INTH_LEVEL_FIQ_POS,
                       LEV2_INTH_LEVEL_FIQ_NUMB))
    {
      RES_Set(LEV2_INTH_LEVEL_FIQ_BAD_REG_ACCESS+(ITNumber<<2));
      RES_Set(DATA_STORE);
      RES_Set(ITNumber);
    }
    SetGroupBits32(REG32(LEV2_INTH_IT_LEVEL_REG_USER_ADDR+(ITNumber<<2)),
                   (LEV2_INTH_LEVEL_FIQ_POS),
                   (LEV2_INTH_LEVEL_FIQ_NUMB),
                   (LEV2_INTH_LEVEL_FIQ_RES_VAL));

    SetGroupBits32(REG32(LEV2_INTH_IT_LEVEL_REG_USER_ADDR+(ITNumber<<2)),
                   (LEV2_INTH_LEVEL_SENSEDGE_POS),
                   (LEV2_INTH_LEVEL_SENSEDGE_NUMB),
                   (~LEV2_INTH_LEVEL_SENSEDGE_RES_VAL));
    if(GetGroupBits32(REG32(LEV2_INTH_IT_LEVEL_REG_USER_ADDR+(ITNumber<<2)),
                      (LEV2_INTH_LEVEL_SENSEDGE_POS),
                      (LEV2_INTH_LEVEL_SENSEDGE_NUMB))!=
       GetGroupBits32(~LEV2_INTH_LEVEL_SENSEDGE_RES_VAL,
                       LEV2_INTH_LEVEL_FIQ_POS,
                       LEV2_INTH_LEVEL_FIQ_NUMB))
    {
      RES_Set(LEV2_INTH_LEVEL_SENSEDGE_BAD_REG_ACCESS);
      RES_Set(DATA_STORE);
      RES_Set(ITNumber);
    }
    SetGroupBits32(REG32(LEV2_INTH_IT_LEVEL_REG_USER_ADDR+(ITNumber<<2)),
                   (LEV2_INTH_LEVEL_SENSEDGE_POS),
                   (LEV2_INTH_LEVEL_SENSEDGE_NUMB),
                   (LEV2_INTH_LEVEL_SENSEDGE_RES_VAL));

    SetGroupBits32(REG32(LEV2_INTH_IT_LEVEL_REG_USER_ADDR+(ITNumber<<2)),
                   (LEV2_INTH_LEVEL_PRIORITY_POS),
                   (LEV2_INTH_LEVEL_PRIORITY_NUMB),
                   (~LEV2_INTH_LEVEL_PRIORITY_RES_VAL));
    if(GetGroupBits32(REG32(LEV2_INTH_IT_LEVEL_REG_USER_ADDR+(ITNumber<<2)),
                      (LEV2_INTH_LEVEL_PRIORITY_POS),
                      (LEV2_INTH_LEVEL_PRIORITY_NUMB))!=
       GetGroupBits32(~LEV2_INTH_LEVEL_PRIORITY_RES_VAL,
                       LEV2_INTH_LEVEL_PRIORITY_POS,
                       LEV2_INTH_LEVEL_PRIORITY_NUMB))
    {
      RES_Set(LEV2_INTH_LEVEL_PRIORITY_BAD_RESET_VALUE);
      RES_Set(DATA_STORE);
      RES_Set(ITNumber);
    }
    SetGroupBits32(REG32(LEV2_INTH_IT_LEVEL_REG_USER_ADDR+(ITNumber<<2)),
                   (LEV2_INTH_LEVEL_PRIORITY_POS),
                   (LEV2_INTH_LEVEL_PRIORITY_NUMB),
                   (LEV2_INTH_LEVEL_PRIORITY_RES_VAL));

  }
/*MODIFY_FIELD_RESET_VALUE32(LEV2_INTH_IT_LEVEL_REG_USER_ADDR,
                             LEV2_INTH_LEVEL_FIQ);
  MODIFY_FIELD_RESET_VALUE32(LEV2_INTH_IT_LEVEL_REG_USER_ADDR,
                             LEV2_INTH_LEVEL_SENSEDGE);
  MODIFY_FIELD_RESET_VALUE32(LEV2_INTH_IT_LEVEL_REG_USER_ADDR,
                             LEV2_INTH_LEVEL_PRIORITY);*/

  PRINT_CURRENT_ERROR_STATUS(INTH2_TEST_REGISTER_ACCESS_SUCCEEDED);
}

⌨️ 快捷键说明

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