//-------------------------------------------------------------------------------
// Texas Instruments TFP410 PanelBus DVI Transmitter 165MHz: XJEase device file
// TFP410.xje Revision: 2.0
// (c)2003-2007 XJTAG Limited
//
// Disclaimer: XJTAG makes no guarantees whatsoever
// about this code.  You use it at your own risk ...
// This code requires XJTAG version 1.4 or later.
//
// This file tests Non-JTAG Video Device using Test()(INT result)
//-------------------------------------------------------------------------------

DEVICE NAME := "TFP410 PanelBus DVI Transmitter"

  PINS
    RA    := 36,37,38,39,40,41,42,43;
    GA    := 44,45,46,47,50,51,52,53;
    BA    := 54,55,58,59,60,61,62,63;
    ICLK  := 57,56;
    HSYNC := 4;
    VSYNC := 5;
    RST   := 13;
    SCL   := 15;
    SDA   := 14;
  END;

  TEST COVERAGE
    SCL := OPEN HI LO;
    SDA := OPEN HI LO;
    RST := OPEN HI LO;
    RA  := SHORTS OPEN HI LO;
  END;

  FILES
    "IIC.xje";
  END;

END;

//------------------------------------------------------
// Constants
//------------------------------------------------------

CONST INT IIC_ADDRESS         := 0x70;
CONST INT IIC_ADDRESS_BYTES   := 1;
CONST INT IIC_WRITE_PAGE_SIZE := 1;
CONST INT IIC_READ_PAGE_SIZE  := 1;

// Device Register map
CONST INT REG_VEN_ID_LO  := 0x00;
CONST INT REG_VEN_ID_HI  := 0x01;
CONST INT REG_DEV_ID_LO  := 0x02;
CONST INT REG_DEV_ID_HI  := 0x03;
CONST INT REG_REV_ID     := 0x04;
CONST INT REG_CFG        := 0x0B;
CONST INT REG_DE_DLY     := 0x32;

// Register values
CONST INT VENDOR_ID      := 0x014C;
CONST INT DEVICE_ID      := 0x0410;
CONST INT DE_DLY_DEFAULT := 0x00;

// Debug
CONST INT DEBUG          := FALSE;
CONST INT EXIT_ON_ERROR  := FALSE;

//------------------------------------------------------
Test()(INT result)
//------------------------------------------------------

  INT i, localResult;
  
  result := RESULT_FAIL;

  SET RST := 0;
  SET RST := 1;

  IIC_Read(REG_VEN_ID_LO, 1)(i, localResult);
  IF (localResult) THEN IF EXIT_ON_ERROR THEN RETURN; END; END;
  IF (i != VENDOR_ID[7..0]) THEN PRINT("DVI OP chip ",DEVICE_REF," IIC failed to read vendor ID (LO)");
    IF EXIT_ON_ERROR THEN RETURN; END;
  END;

  IIC_Read(REG_VEN_ID_HI, 1)(i, localResult);
  IF (localResult) THEN IF EXIT_ON_ERROR THEN RETURN; END;; END;
  IF (i != VENDOR_ID[15..8]) THEN PRINT("DVI OP chip ",DEVICE_REF," IIC failed to read vendor ID (HI)\n");
    IF EXIT_ON_ERROR THEN RETURN; END;
  END;

  IIC_Read(REG_DEV_ID_LO, 1)(i, localResult);
  IF (localResult) THEN IF EXIT_ON_ERROR THEN RETURN; END;; END;
  IF (i != DEVICE_ID[7..0]) THEN PRINT("DVI OP chip ",DEVICE_REF," IIC failed to read device ID (LO)\n");
    IF EXIT_ON_ERROR THEN RETURN; END;
  END;

  IIC_Read(REG_DEV_ID_HI, 1)(i, localResult);
  IF (localResult) THEN IF EXIT_ON_ERROR THEN RETURN; END;; END;
  IF (i != DEVICE_ID[15..8]) THEN PRINT("DVI OP chip ",DEVICE_REF," IIC failed to read device ID (HI)\n");
    IF EXIT_ON_ERROR THEN RETURN; END;
  END;

  IIC_Read(REG_DE_DLY, 1)(i, localResult);
  IF (localResult) THEN IF EXIT_ON_ERROR THEN RETURN; END;; END;
  IF (i != DE_DLY_DEFAULT) THEN PRINT("DVI OP chip ",DEVICE_REF," IIC failed to read DE_DLY register\n");
    IF EXIT_ON_ERROR THEN RETURN; END;
  END;

  IIC_Write(REG_DE_DLY, 1,0xFF)(localResult);
  IF (localResult) THEN PRINT("DVI OP chip ",DEVICE_REF," IIC failed to write DE_DLY register\n");
    IF EXIT_ON_ERROR THEN RETURN; END;
  END;
  IIC_Read(REG_DE_DLY, 1)(i, localResult);
  IF (localResult) THEN IF EXIT_ON_ERROR THEN RETURN; END;; END;
  IF (i != 0xFF) THEN PRINT("DVI OP chip ",DEVICE_REF," IIC failed to read DE_DLY register\n");
    IF EXIT_ON_ERROR THEN RETURN; END;
  END;

  SET RST := 0;
  SET RST := 1;
  IIC_Read(REG_DE_DLY, 1)(i, localResult);
  IF (localResult) THEN IF EXIT_ON_ERROR THEN RETURN; END;; END;
  IF (i != DE_DLY_DEFAULT) THEN PRINT("DVI OP chip ",DEVICE_REF," reset failed.\n");
    IF EXIT_ON_ERROR THEN RETURN; END;
  END;

  SET RA := 0x55;
  IIC_Read(REG_CFG, 1)(i, localResult);
  IF (localResult) THEN IF EXIT_ON_ERROR THEN RETURN; END;; END;
  IF (i != 0x55) THEN PRINT("DVI OP chip ",DEVICE_REF," D[23:16] failed.\n");
    IF EXIT_ON_ERROR THEN RETURN; END;
  END;

  SET RA := 0xAA;
  IIC_Read(REG_CFG, 1)(i, localResult);
  IF (localResult) THEN IF EXIT_ON_ERROR THEN RETURN; END;; END;
  IF (i != 0xAA) THEN PRINT("DVI OP chip ",DEVICE_REF," D[23:16] failed.\n");
    IF EXIT_ON_ERROR THEN RETURN; END;
  END;

  result := RESULT_PASS;

END;