Access.c
上传用户:xmyjxjd
上传日期:2013-05-04
资源大小:1517k
文件大小:23k
开发平台:

C/C++

  1. #define __ACCESS__
  2. #include "reg52.h"
  3. #include "intrins.h"
  4. #include "HeaderMAIN_DEF.H"
  5. #include "HeaderACCESS.h"
  6. #include "HeaderCONFIG.H"
  7. #include "HeaderMTV512.H"
  8. #include "HeaderOSD.H"
  9. #include "HeaderPower_Ctrl.h"
  10. #if(MCU_TYPE == MCU_MTV512)
  11. ///////////////////////////////////////////////////////////////////////
  12. // SCL Processor                                                                                                //
  13. ///////////////////////////////////////////////////////////////////////
  14. void MCU_WriteI2cScl(bit Status)
  15. {
  16.        bIIC_SCL = Status;
  17. }
  18. ///////////////////////////////////////////////////////////////////////
  19. // SDA Processor                                                                                               //
  20. ///////////////////////////////////////////////////////////////////////
  21. void MCU_WriteI2cSda(bit Status)
  22. {
  23.        bIIC_SDA = Status;
  24. }
  25. bit MCU_ReadI2cSda(void)
  26. {
  27.        return(bIIC_SDA);
  28. }
  29. ///////////////////////////////////////////////////////////////////////
  30. // RTD Reset Processor                                                                                      //
  31. ///////////////////////////////////////////////////////////////////////
  32. #if(RESET_TYPE == RESET_IN)
  33. void MCU_WriteRtdReset(bit Status)
  34. {
  35.        bRTD_RST = Status;
  36. }
  37. bit MCU_ReadRtdReset(void)
  38. {
  39.        return(bRTD_RST);
  40. }
  41. #endif
  42. ///////////////////////////////////////////////////////////////////////
  43. // RTD SDIO Processor                                                                                       //
  44. ///////////////////////////////////////////////////////////////////////
  45. /*
  46. void MCU_WriteRtdSdio(bit Status)
  47. {
  48.        bRTD_SDIO_0 = Status;
  49. }
  50. bit MCU_ReadRtdSdio(void)
  51. {
  52.        return(bRTD_SDIO_0);
  53. }
  54. */
  55. ///////////////////////////////////////////////////////////////////////
  56. // RTD Sclk Processor                                                                                        //
  57. ///////////////////////////////////////////////////////////////////////
  58. void MCU_WriteRtdSclk(bit Status)
  59. {
  60.        bRTD_SCLK = Status;
  61. }
  62. ///////////////////////////////////////////////////////////////////////
  63. // RTD Scsb Processor                                                                                       //
  64. ///////////////////////////////////////////////////////////////////////
  65. void MCU_WriteRtdScsb(bit Status)
  66. {
  67.        bRTD_SCSB = Status;
  68. }
  69. ///////////////////////////////////////////////////////////////////////
  70. // VIDEO POWER Processor                                                                                //
  71. ///////////////////////////////////////////////////////////////////////
  72. #if (VIDEO_CHIP != VDC_NONE)
  73. void MCU_WriteVideoPower(bit Status)
  74. {
  75.        bVDC_PWR = Status;
  76. }
  77. #endif
  78. ///////////////////////////////////////////////////////////////////////
  79. // PANEL POWER Processor                                                                                 //
  80. ///////////////////////////////////////////////////////////////////////
  81. void MCU_WritePanelPower(bit Status)
  82. {
  83.        bPANEL_PWR = Status;
  84.        bPanel_Status = Status ? 1 : 0;
  85. }
  86. /*
  87. bit MCU_ReadPanelPower(void)
  88. {
  89.        return(bPANEL_PWR);
  90. }
  91. */
  92. ///////////////////////////////////////////////////////////////////////
  93. // BACKLIGHT POWER Processor                                                                         //
  94. ///////////////////////////////////////////////////////////////////////
  95. void MCU_WriteBacklightPower(bit Status)
  96. {
  97.        bLIGHT_PWR = (Status);
  98. }
  99. ///////////////////////////////////////////////////////////////////////
  100. // VGA CONNECT Processor                                                                                //
  101. ///////////////////////////////////////////////////////////////////////
  102. bit MCU_ReadVgaConnect(void)
  103. {
  104.        return(bVGA_CONNECT);
  105. }
  106. #endif
  107. void BitDly(void)
  108. {
  109.     _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
  110.     _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
  111.     _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
  112.     _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
  113. }
  114. void I2CRead(unsigned char addr, unsigned char index, unsigned char count)
  115. {
  116.     unsigned char   n;
  117.     if (count)
  118.     {
  119.         I2CSendAddr(addr, index, 0);
  120.         
  121.         I2CSendAddr(addr, 0, 1);
  122.         count   = count - 1;
  123.         for (n = 0; n < count; n++)     Data[n] = I2CGetByte(0);
  124.         Data[count] = I2CGetByte(1);
  125.         I2CSendStop();
  126.     }
  127. }
  128. void I2CWrite(unsigned char *array)
  129. {
  130.     unsigned char   n, len;
  131.     if (3 <= array[0])
  132.     {
  133.         len     = array[0];
  134.         I2CSendAddr(array[1], array[2], 0);     
  135.         for (n = 3; n < len; n++)   I2CSendByte(array[n]);
  136.         I2CSendStop();
  137.     }
  138. }
  139. unsigned char I2CGetByte(unsigned char ack) 
  140. {
  141.     unsigned char   r, m;
  142.     r = 0;
  143. #if(MCU_TYPE == MCU_WINBOND)
  144.     for (m = 0; m < 8; m++)         // Each bit at a time, MSB first
  145.     {
  146.         bIIC_SCL    = 1;
  147.         BitDly();                   // Delay
  148.         r   = (r << 1) | bIIC_SDA;
  149.         bIIC_SCL    = 0;
  150.         BitDly();                   // Delay
  151.     }  
  152.     // Send ACK according to 'ack'
  153.     bIIC_SDA    = (bit)(ack & 0x01);
  154.     BitDly();                       // Delay
  155.     
  156.     bIIC_SCL    = 1; 
  157.     BitDly();                       // Delay
  158.     
  159.     bIIC_SCL    = 0; 
  160.     BitDly();                       // Delay
  161.     
  162.     bIIC_SDA    = 1;
  163. #else
  164.    
  165.     for (m = 0; m < 8; m++)         // Each bit at a time, MSB first
  166.     {
  167.         MCU_WriteI2cScl(_HIGH);
  168.         BitDly();                   // Delay
  169.         r   = (r << 1) | MCU_ReadI2cSda();
  170.         MCU_WriteI2cScl(_LOW);
  171.         BitDly();                   // Delay
  172.     }  
  173.     // Send ACK according to 'ack'
  174.     MCU_WriteI2cSda((bit)(ack & 0x01));
  175.     BitDly();                       // Delay
  176.     MCU_WriteI2cScl(_HIGH);
  177.     BitDly();                       // Delay
  178.     MCU_WriteI2cScl(_LOW);
  179.     BitDly();                       // Delay
  180.     MCU_WriteI2cSda(_HIGH);
  181. #endif
  182.     return (r);
  183. }
  184. void I2CSendByte(unsigned char send)
  185. {
  186.     unsigned char   m;
  187. #if(MCU_TYPE == MCU_WINBOND)    
  188.     for (m = 0; m < 8; m++)
  189.     {
  190.         bIIC_SDA    = (bit)(send & 0x80);   // Send each bit, MSB first
  191.         BitDly();
  192.         bIIC_SCL    = 1;
  193.         BitDly();
  194.         bIIC_SCL    = 0;
  195.         send    = send << 1;
  196.     }
  197.     bIIC_SDA    = 1;
  198.     bIIC_SCL    = 1;
  199.     BitDly();
  200.     bIIC_SCL    = 0;
  201.     BitDly();
  202. #else
  203.     for (m = 0; m < 8; m++)
  204.     {
  205.         MCU_WriteI2cSda((bit)(send & 0x80));   // Send each bit, MSB first
  206.         BitDly();
  207.         MCU_WriteI2cScl(_HIGH);
  208.         BitDly();
  209.         MCU_WriteI2cScl(_LOW);;
  210.         send    = send << 1;
  211.     }
  212.     MCU_WriteI2cSda(_HIGH);
  213.     MCU_WriteI2cScl(_HIGH);
  214.     BitDly();
  215.     MCU_WriteI2cScl(_LOW);;
  216.     BitDly();
  217. #endif
  218. void I2CSendAddr(unsigned char addr, unsigned char index, unsigned char rd)
  219. {         
  220. #if(MCU_TYPE == MCU_WINBOND)         
  221.     bIIC_SCL    = 1;
  222.     bIIC_SDA    = 0;    // Start
  223.     BitDly();
  224.     bIIC_SCL    = 0;
  225.     I2CSendByte(addr + rd);             // Send address byte
  226.     if (0 == rd)    I2CSendByte(index); // Send index byte  
  227. #else
  228.     MCU_WriteI2cScl(_HIGH);
  229.     MCU_WriteI2cSda(_LOW);    // Start
  230.     BitDly();
  231.     MCU_WriteI2cScl(_LOW);;
  232.     I2CSendByte(addr + rd);             // Send address byte
  233.     if (0 == rd)    I2CSendByte(index); // Send index byte 
  234. #endif
  235. }
  236. void I2CSendStop(void)
  237. {
  238. #if(MCU_TYPE == MCU_WINBOND)
  239.     bIIC_SDA    = 0; 
  240.     BitDly();
  241.     bIIC_SCL    = 1;
  242.     BitDly();
  243.     bIIC_SDA    = 1;
  244.     BitDly();
  245. #else
  246.     MCU_WriteI2cSda(_LOW); 
  247.     BitDly();
  248.     MCU_WriteI2cScl(_HIGH);
  249.     BitDly();
  250.     MCU_WriteI2cSda(_HIGH);
  251.     BitDly();
  252. #endif
  253. }
  254. unsigned char RTDGetByte(void) 
  255. {
  256. #if(PARALLEL_PORT)
  257. #if(1)
  258.    bRTD_SCLK = 1;
  259.    bRTD_SCLK = 0;
  260.    r0        = bRTD_SDIO_0;
  261.    r1        = bRTD_SDIO_1;
  262.    r2        = bRTD_SDIO_2;
  263.    r3        = bRTD_SDIO_3;
  264.    bRTD_SCLK = 1;
  265.    bRTD_SCLK = 0;
  266.    r4        = bRTD_SDIO_0;
  267.    r5        = bRTD_SDIO_1;
  268.    r6        = bRTD_SDIO_2;
  269.    r7        = bRTD_SDIO_3;
  270.    bRTD_SCLK   = 1;
  271. #else
  272.    bRTD_SCLK = 1;
  273.    bRTD_SCLK = 0;
  274.    Reg = P0 & 0x0f;
  275.    bRTD_SCLK = 1;
  276.    bRTD_SCLK = 0;
  277.    Reg = Reg | ((P0 & 0x0f) << 4);
  278.    bRTD_SCLK   = 1;
  279. #endif
  280. #else //serial port
  281.     bRTD_SCLK   = 1;
  282.     bRTD_SCLK   = 0;
  283.     r0          = bRTD_SDIO_0;
  284.     bRTD_SCLK   = 1;
  285.     bRTD_SCLK   = 0;
  286.     r1          = bRTD_SDIO_0;
  287.     bRTD_SCLK   = 1;
  288.     bRTD_SCLK   = 0;
  289.     r2          = bRTD_SDIO_0;
  290.     bRTD_SCLK   = 1;
  291.     bRTD_SCLK   = 0;
  292.     r3          = bRTD_SDIO_0;
  293.     bRTD_SCLK   = 1;
  294.     bRTD_SCLK   = 0;
  295.     r4          = bRTD_SDIO_0;
  296.     bRTD_SCLK   = 1;
  297.     bRTD_SCLK   = 0;
  298.     r5          = bRTD_SDIO_0;
  299.     bRTD_SCLK   = 1;
  300.     bRTD_SCLK   = 0;
  301.     r6          = bRTD_SDIO_0;
  302.     bRTD_SCLK   = 1;
  303.     bRTD_SCLK   = 0;
  304.     r7          = bRTD_SDIO_0;
  305.     bRTD_SCLK   = 1;
  306. #endif
  307.     return Reg;
  308. }
  309. void RTDSendByte(unsigned char send)
  310. {
  311. #if(PARALLEL_PORT)
  312. #if(1)
  313.     bRTD_SDIO_0 = (bit)(send & 0x01);
  314. bRTD_SDIO_1 = (bit)(send & 0x02);
  315. bRTD_SDIO_2 = (bit)(send & 0x04);
  316. bRTD_SDIO_3 = (bit)(send & 0x08);
  317. bRTD_SCLK   = 1;
  318.     bRTD_SCLK   = 0;
  319. bRTD_SDIO_0 = (bit)(send & 0x10);
  320. bRTD_SDIO_1 = (bit)(send & 0x20);
  321. bRTD_SDIO_2 = (bit)(send & 0x40);
  322. bRTD_SDIO_3 = (bit)(send & 0x80);
  323. bRTD_SCLK   = 1;
  324.     bRTD_SCLK   = 0;
  325. bRTD_SDIO_0 = 1;
  326. bRTD_SDIO_1 = 1;
  327. bRTD_SDIO_2 = 1;
  328. bRTD_SDIO_3 = 1;
  329. bRTD_SCLK   = 1;
  330. #else
  331.     unsigned char ucTemp;
  332. ucTemp = P0 & 0xf0;
  333.     P0 = ucTemp | (send & 0x0f);
  334.     bRTD_SCLK   = 1;
  335.     bRTD_SCLK   = 0;
  336.     P0 = ucTemp | (send >> 4);
  337.     bRTD_SCLK   = 1;
  338.     bRTD_SCLK   = 0;
  339.     P0 = ucTemp | 0x0f;
  340.     bRTD_SCLK   = 1;
  341. #endif
  342. #else //serial port
  343.     bRTD_SDIO_0 = (bit)(send & 0x01);
  344.     bRTD_SCLK   = 1;
  345.     bRTD_SCLK   = 0;
  346.     bRTD_SDIO_0 = (bit)(send & 0x02);
  347.     bRTD_SCLK   = 1;
  348.     bRTD_SCLK   = 0;
  349.     bRTD_SDIO_0 = (bit)(send & 0x04);
  350.     bRTD_SCLK   = 1;
  351.     bRTD_SCLK   = 0;
  352.     bRTD_SDIO_0 = (bit)(send & 0x08);
  353.     bRTD_SCLK   = 1;
  354.     bRTD_SCLK   = 0;
  355.     bRTD_SDIO_0 = (bit)(send & 0x10);
  356.     bRTD_SCLK   = 1;
  357.     bRTD_SCLK   = 0;
  358.     bRTD_SDIO_0 = (bit)(send & 0x20);
  359.     bRTD_SCLK   = 1;
  360.     bRTD_SCLK   = 0;
  361.     bRTD_SDIO_0 = (bit)(send & 0x40);
  362.     bRTD_SCLK   = 1;
  363.     bRTD_SCLK   = 0;
  364.     bRTD_SDIO_0 = (bit)(send & 0x80);
  365.     bRTD_SCLK   = 1;
  366.     bRTD_SCLK   = 0;
  367.     bRTD_SDIO_0 = 1;
  368.     bRTD_SCLK   = 1;
  369. #endif
  370. }
  371. void RTDSendAddr(unsigned char addr, unsigned char rd, unsigned char inc)   // rd   : 0 - Write, 1 - Read
  372. {
  373. #if(PARALLEL_PORT)
  374.     RTDSendByte(addr);
  375. bRTD_SDIO_0 = (bit)(rd & 0x01);
  376. bRTD_SDIO_1 = (bit)(inc & 0x01);
  377. bRTD_SCLK = 0;
  378. bRTD_SDIO_0 = 1;
  379. bRTD_SDIO_1 = 1;
  380. bRTD_SCLK = 1;
  381. #else // serial port
  382.     RTDSendByte(addr);
  383.     bRTD_SDIO_0 = 1;
  384.     bRTD_SCLK   = 1;        
  385.     bRTD_SDIO_0 = (bit)(rd & 0x01); 
  386.     bRTD_SCLK   = 1;
  387.     bRTD_SCLK   = 0;
  388.     bRTD_SDIO_0 = (bit)(inc & 0x01); 
  389.     bRTD_SCLK   = 1;
  390.     bRTD_SCLK   = 0;
  391.     bRTD_SDIO_0 = 1;
  392. #endif
  393. }
  394. void RTDSendStop(void)
  395. {
  396.         bRTD_SCLK   = 0;
  397.         bRTD_SCLK   = 1; 
  398.         bRTD_SCSB   = 1;
  399. }
  400. void RTDRead(unsigned char index, unsigned char count, unsigned char inc)
  401. {
  402.     if (count)
  403.     {
  404.         bRTD_SCSB   = 0;
  405.         RTDSendAddr(index, 1, inc);
  406.         index   = 0;
  407.         do
  408.         {
  409.             Data[index++]   = RTDGetByte();
  410.         }
  411.         while (--count);
  412. RTDSendStop();
  413.     }
  414. }
  415. void RTDWrite(unsigned char data *array)
  416. {
  417.     unsigned char   len, m;
  418.     do
  419.     {
  420.         if (0 == (array[0] & 0xfc))     return;
  421.         len     = array[0] - 3;
  422.         array   = array + 1;
  423.         bRTD_SCSB   = 0;
  424.         if (BURST == array[0])
  425.         {
  426.             RTDSendAddr(array[1], 0, N_INC);
  427.             array   = array + 2;
  428.             m       = array[0];
  429.             do
  430.             {
  431.                 RTDSendByte(m);
  432.             }
  433.             while (--len);
  434.             array   = array + 1;
  435.         }
  436.         else
  437.         {
  438.             RTDSendAddr(array[1], 0, array[0]);
  439.             array   = array + 2;
  440.             do
  441.             {
  442.                 RTDSendByte(*array++);
  443.             }
  444.             while (--len);
  445.         }
  446. RTDSendStop();
  447.     }
  448.     while (1);
  449. }
  450. void RTDCodeW(unsigned char code *array)
  451. {
  452.     unsigned char   len, m;
  453.     do
  454.     {
  455.         if (0 == (array[0] & 0xfc))     return;
  456.         len     = array[0] - 3;
  457.         array   = array + 1;
  458.         bRTD_SCSB   = 0;
  459.         if (BURST == array[0])
  460.         {
  461.             RTDSendAddr(array[1], 0, N_INC);
  462.             array   = array + 2;
  463.             m       = array[0];
  464.             
  465.             do
  466.             {
  467.                 RTDSendByte(m);
  468.             }
  469.             while (--len);
  470.             array   = array + 1;
  471.         }
  472.         else
  473.         {
  474.             RTDSendAddr(array[1], 0, array[0]);
  475.             array   = array + 2;
  476.             do
  477.             {
  478.                 RTDSendByte(*array++);
  479.             }
  480.             while (--len);
  481.         }
  482. RTDSendStop();
  483.     }
  484.     while (1);
  485. }
  486. void RTDOSDW(unsigned char code *array)
  487. {
  488.     unsigned char   len;
  489.     do
  490.     {
  491.         if (array[0] == _end_)     return;
  492.     
  493. bRTD_SCSB   = 0;
  494.         RTDSendAddr(OSD_ROW_90,WRITE,Y_INC);
  495.         RTDSendByte(*array++);
  496.         RTDSendByte(*array++);
  497. RTDSendStop();
  498. bRTD_SCSB   = 0;
  499.         RTDSendAddr(OSD_DATA_92,WRITE,N_INC);
  500.         do
  501. {
  502.            if(array[0] == _ext_)
  503.            {
  504.                if(array[2] == _bb_)
  505.                {
  506.                   do
  507.                   {
  508.                      len = array[3] - 1;
  509.                      RTDSendByte(_ext_ + array[1]);
  510.                    }while(len--);
  511.                    array += 4;
  512.                }
  513.                else
  514.                {
  515.                    RTDSendByte(_ext_ + array[1]);
  516.                    array += 2;
  517.                }
  518.            }
  519.            else if(array[1] == _bb_)
  520.    {
  521.        len = array[2] - 1;
  522.    do
  523.    {
  524.       RTDSendByte(*array);
  525.    }while(len--);
  526.        
  527.    array += 3;
  528.    }
  529.    else
  530.        RTDSendByte(*array++);
  531. }while(array[0] != _nn_);
  532. array +=1 ;
  533. RTDSendStop();
  534.     }
  535.     while (1);
  536. }
  537. void RTDSetByte(unsigned char addr, unsigned char val)
  538. {
  539.     // Set Write Address
  540.     bRTD_SCSB   = 0;   
  541.     RTDSendAddr(addr, 0, 1);
  542.     // Write one Byte
  543.     RTDSendByte(val);
  544. RTDSendStop();
  545. }
  546. void RTDSetBit(unsigned char addr, unsigned char and, unsigned char or)
  547. {
  548.     // Set Read Address
  549.     bRTD_SCSB   = 0;
  550.     RTDSendAddr(addr, 1, 1);
  551.     // Read 1 Byte
  552.     or      = (RTDGetByte() & and) | or;
  553. RTDSendStop();
  554.     // Set Write Address
  555.     bRTD_SCSB   = 0;   
  556.     RTDSendAddr(addr, 0, 1);
  557.     // Write one Byte
  558.     RTDSendByte(or);
  559. RTDSendStop();
  560. }
  561. #if(VLC_COMPRESS)
  562. void Load_VLC_Font(unsigned char code *array, unsigned int start, unsigned int length)
  563. {
  564. unsigned char n,m;
  565. unsigned char ucTemp[3];
  566. unsigned char idata ucTemp_VLD[3];
  567. #if(PARALLEL_PORT)
  568. // unsigned char ucTemp1;
  569. #endif
  570. start += FONT_BASE_ADDRESS;
  571. bRTD_SCSB   = 0;   
  572. RTDSendAddr(OSD_ROW_90, WRITE, Y_INC);
  573. ucTemp[0] = (unsigned char)((start >> 8) & 0x000f) | 0xd0;
  574. RTDSendByte(ucTemp[0]);
  575. ucTemp[0] = (unsigned char)(start & 0x00ff);
  576. RTDSendByte(ucTemp[0]);
  577. RTDSendStop();
  578. bRTD_SCSB   = 0;   
  579. RTDSendAddr(OSD_DATA_92, WRITE, N_INC);
  580. ucCnt = 0;
  581. uiCount = 0;
  582. bBit = 0;
  583. ucByte_Temp = 0;
  584. do
  585. {
  586. for(m=0; m<9; m++)
  587. {
  588. ucTemp_VLD[0] = Get_VLD(array) << 4;
  589. ucTemp_VLD[0] |= Get_VLD(array);
  590. ucTemp_VLD[1] = Get_VLD(array) << 4;
  591. ucTemp_VLD[1] |= Get_VLD(array);
  592. ucTemp_VLD[2] = Get_VLD(array) << 4;
  593. ucTemp_VLD[2] |= Get_VLD(array);
  594. //Rearrange the byte order
  595. ucTemp[0] = (ucTemp_VLD[1] << 4) | (ucTemp_VLD[2] & 0x0f);
  596. ucTemp[1] = (ucTemp_VLD[2] & 0xf0) | (ucTemp_VLD[0] & 0x0f);
  597. ucTemp[2] = (ucTemp_VLD[0] & 0xf0) | (ucTemp_VLD[1] >> 4);
  598. for(n=0;n<3;n++)
  599. {
  600. #if(PARALLEL_PORT)
  601. #if(KINGMICE)
  602. bRTD_SDIO_0 = (bit)(ucTemp[n] & 0x01);
  603. bRTD_SDIO_1 = (bit)(ucTemp[n] & 0x02);
  604. bRTD_SDIO_2 = (bit)(ucTemp[n] & 0x04);
  605. bRTD_SDIO_3 = (bit)(ucTemp[n] & 0x08);
  606. bRTD_SCLK   = 1;
  607. bRTD_SCLK   = 0;
  608. bRTD_SDIO_0 = (bit)(ucTemp[n] & 0x10);
  609. bRTD_SDIO_1 = (bit)(ucTemp[n] & 0x20);
  610. bRTD_SDIO_2 = (bit)(ucTemp[n] & 0x40);
  611. bRTD_SDIO_3 = (bit)(ucTemp[n] & 0x80);
  612. bRTD_SCLK   = 1;
  613. bRTD_SCLK   = 0;
  614. bRTD_SDIO_0 = 1;
  615. bRTD_SDIO_1 = 1;
  616. bRTD_SDIO_2 = 1;
  617. bRTD_SDIO_3 = 1;
  618. bRTD_SCLK   = 1;
  619. #else
  620. ucTemp1 = P0 & 0xf0;
  621. P0 = ucTemp1 | (ucTemp[n] & 0x0f);
  622. bRTD_SCLK   = 1;
  623. bRTD_SCLK   = 0;
  624. P0 = ucTemp1 | (ucTemp[n] >> 4);
  625. bRTD_SCLK   = 1;
  626. bRTD_SCLK   = 0;
  627. P0 = ucTemp1 | 0x0f;
  628. bRTD_SCLK   = 1;
  629. #endif
  630. #else
  631. bRTD_SDIO_0 = (bit)(ucTemp[n] & 0x01);
  632. bRTD_SCLK   = 1;
  633. bRTD_SCLK   = 0;
  634. bRTD_SDIO_0 = (bit)(ucTemp[n] & 0x02);
  635. bRTD_SCLK   = 1;
  636. bRTD_SCLK   = 0;
  637. bRTD_SDIO_0 = (bit)(ucTemp[n] & 0x04);
  638. bRTD_SCLK   = 1;
  639. bRTD_SCLK   = 0;
  640. bRTD_SDIO_0 = (bit)(ucTemp[n] & 0x08);
  641. bRTD_SCLK   = 1;
  642. bRTD_SCLK   = 0;
  643. bRTD_SDIO_0 = (bit)(ucTemp[n] & 0x10);
  644. bRTD_SCLK   = 1;
  645. bRTD_SCLK   = 0;
  646. bRTD_SDIO_0 = (bit)(ucTemp[n] & 0x20);
  647. bRTD_SCLK   = 1;
  648. bRTD_SCLK   = 0;
  649. bRTD_SDIO_0 = (bit)(ucTemp[n] & 0x40);
  650. bRTD_SCLK   = 1;
  651. bRTD_SCLK   = 0;
  652. bRTD_SDIO_0 = (bit)(ucTemp[n] & 0x80);
  653. bRTD_SCLK   = 1;
  654. bRTD_SCLK   = 0;
  655. bRTD_SDIO_0 = 1;
  656. bRTD_SCLK   = 1;
  657. #endif
  658. }
  659. }
  660. }
  661. while (--length);
  662. RTDSendStop();
  663. }
  664. unsigned char Get_VLD(unsigned char code *array)
  665. {
  666. unsigned char data ucZero_Cnt = 0;
  667. bit bSec_Part = 0;
  668. while(1)
  669. {
  670. if( ucCnt == 0 )
  671. {
  672. ucByte_Temp = *(array + uiCount);
  673. ucCnt = 0x80;
  674. uiCount++;
  675. }
  676. while( ucCnt > 0 )
  677. {
  678. bBit = (bit)(ucByte_Temp & ucCnt);
  679. ucCnt >>= 1;
  680. if( (bBit) && (bSec_Part == 0) )
  681. {
  682. bSec_Part = 1;
  683. }
  684. else
  685. {
  686. ucZero_Cnt++;
  687. }
  688. if( bSec_Part == 1 )
  689. {
  690. switch(ucZero_Cnt)
  691. {
  692. case 0:
  693. bSec_Part = 0;
  694. ucZero_Cnt = 0;
  695. return 0;
  696. case 1:
  697. Getbit(array);
  698. bSec_Part = 0;
  699. ucZero_Cnt = 0;
  700. if(!bBit)
  701. {
  702. return 1;
  703. }
  704. else
  705. {
  706. return 15;
  707. }
  708. case 2:
  709. Getbit(array);
  710. bSec_Part = 0;
  711. ucZero_Cnt = 0;
  712. if(!bBit)
  713. {
  714. return 2;
  715. }
  716. else
  717. {
  718. return 8;
  719. }
  720. case 3:
  721. Getbit(array);
  722. bSec_Part = 0;
  723. ucZero_Cnt = 0;
  724. if(!bBit)
  725. {
  726. return 12;
  727. }
  728. else
  729. {
  730. return 7;
  731. }
  732. case 4:
  733. Getbit(array);
  734. bSec_Part = 0;
  735. ucZero_Cnt = 0;
  736. if(bBit)
  737. {
  738. Getbit(array);
  739. if(!bBit)
  740. {
  741. return 4;
  742. }
  743. else
  744. {
  745. return 9;
  746. }
  747. }
  748. else
  749. {
  750. Getbit(array);
  751. if(!bBit)
  752. {
  753. Getbit(array);
  754. if(!bBit)
  755. {
  756. return 3;
  757. }
  758. else
  759. {
  760. return 11;
  761. }
  762. }
  763. else
  764. {
  765. Getbit(array);
  766. if(!bBit)
  767. {
  768. return 10;
  769. }
  770. else
  771. {
  772. return 5;
  773. }
  774. }
  775. }
  776. case 5:
  777. Getbit(array);
  778. bSec_Part = 0;
  779. ucZero_Cnt = 0;
  780. if(bBit)
  781. {
  782. Getbit(array);
  783. if(!bBit)
  784. {
  785. return 14;
  786. }
  787. else
  788. {
  789. return 13;
  790. }
  791. }
  792. else
  793. {
  794. Getbit(array);
  795. if(bBit)
  796. {
  797. return 6;
  798. }
  799. }
  800. }
  801. }
  802. }
  803. }
  804. }
  805. void Getbit(unsigned char code *array)
  806. {
  807. if( ucCnt == 0 )
  808. {
  809. ucByte_Temp = *(array + uiCount);
  810. ucCnt = 0x80;
  811. uiCount++;
  812. }
  813. bBit = (bit)(ucByte_Temp & ucCnt);
  814. ucCnt >>= 1;
  815. }
  816. #else
  817. //length represent the number of character
  818. // character number of 1 bit font  = 1
  819. // character number of 2 bit font  = 2
  820. // character number of 4 bit font  = 4
  821. // length = (1 bit font amount) x 1 + (2 bit font amount) x 2 + (4 bit font amount) x 4
  822. void Load_Font(unsigned char code *array, unsigned int start, unsigned int length)
  823. {
  824.     unsigned char   n,m;
  825.     unsigned char   ucTemp[3];
  826. #if(PARALLEL_PORT)
  827. // unsigned char ucTemp1;
  828. #endif
  829.     start = start * 9;
  830.     start += FONT_BASE_ADDRESS;
  831. bRTD_SCSB   = 0;   
  832. RTDSendAddr(OSD_ROW_90, WRITE, Y_INC);
  833. ucTemp[0] = (unsigned char)((start >> 8) & 0x000f) | 0xd0;
  834. RTDSendByte(ucTemp[0]);
  835. ucTemp[0] = (unsigned char)(start & 0x00ff);
  836. RTDSendByte(ucTemp[0]);
  837. RTDSendStop();
  838. bRTD_SCSB   = 0;   
  839. RTDSendAddr(OSD_DATA_92, WRITE, N_INC);
  840.     do
  841.     {
  842.         for(m=0; m<9; m++)
  843.         {
  844. //Rearrange the byte order
  845.             ucTemp[0] = (*(array + 1) << 4) | (*(array + 2) & 0x0f);
  846. ucTemp[1] = (*(array + 2) & 0xf0) | (*array & 0x0f);
  847. ucTemp[2] = (*array & 0xf0) | (*(array + 1) >> 4);
  848. for(n=0;n<3;n++)
  849. {
  850. #if(PARALLEL_PORT)
  851. #if(1)
  852. bRTD_SDIO_0 = (bit)(ucTemp[n] & 0x01);
  853. bRTD_SDIO_1 = (bit)(ucTemp[n] & 0x02);
  854. bRTD_SDIO_2 = (bit)(ucTemp[n] & 0x04);
  855. bRTD_SDIO_3 = (bit)(ucTemp[n] & 0x08);
  856.                 bRTD_SCLK   = 1;
  857. bRTD_SCLK   = 0;
  858. bRTD_SDIO_0 = (bit)(ucTemp[n] & 0x10);
  859. bRTD_SDIO_1 = (bit)(ucTemp[n] & 0x20);
  860. bRTD_SDIO_2 = (bit)(ucTemp[n] & 0x40);
  861. bRTD_SDIO_3 = (bit)(ucTemp[n] & 0x80);
  862. bRTD_SCLK   = 1;
  863. bRTD_SCLK   = 0;
  864. bRTD_SDIO_0 = 1;
  865. bRTD_SDIO_1 = 1;
  866. bRTD_SDIO_2 = 1;
  867. bRTD_SDIO_3 = 1;
  868. bRTD_SCLK   = 1;
  869. #else
  870. ucTemp1 = P0 & 0xf0;
  871. P0 = ucTemp1 | (ucTemp[n] & 0x0f);
  872. bRTD_SCLK   = 1;
  873. bRTD_SCLK   = 0;
  874. P0 = ucTemp1 | (ucTemp[n] >> 4);
  875. bRTD_SCLK   = 1;
  876. bRTD_SCLK   = 0;
  877. P0 = ucTemp1 | 0x0f;
  878. bRTD_SCLK   = 1;
  879. #endif
  880. #else
  881. bRTD_SDIO_0 = (bit)(ucTemp[n] & 0x01);
  882. bRTD_SCLK   = 1;
  883. bRTD_SCLK   = 0;
  884. bRTD_SDIO_0 = (bit)(ucTemp[n] & 0x02);
  885. bRTD_SCLK   = 1;
  886. bRTD_SCLK   = 0;
  887. bRTD_SDIO_0 = (bit)(ucTemp[n] & 0x04);
  888. bRTD_SCLK   = 1;
  889. bRTD_SCLK   = 0;
  890. bRTD_SDIO_0 = (bit)(ucTemp[n] & 0x08);
  891. bRTD_SCLK   = 1;
  892. bRTD_SCLK   = 0;
  893. bRTD_SDIO_0 = (bit)(ucTemp[n] & 0x10);
  894. bRTD_SCLK   = 1;
  895. bRTD_SCLK   = 0;
  896. bRTD_SDIO_0 = (bit)(ucTemp[n] & 0x20);
  897. bRTD_SCLK   = 1;
  898. bRTD_SCLK   = 0;
  899. bRTD_SDIO_0 = (bit)(ucTemp[n] & 0x40);
  900. bRTD_SCLK   = 1;
  901. bRTD_SCLK   = 0;
  902. bRTD_SDIO_0 = (bit)(ucTemp[n] & 0x80);
  903. bRTD_SCLK   = 1;
  904. bRTD_SCLK   = 0;
  905. bRTD_SDIO_0 = 1;
  906. bRTD_SCLK   = 1;
  907. #endif
  908.             }
  909.             array += 3;
  910.         }
  911.     }
  912.     while (--length);
  913. RTDSendStop();
  914. }
  915. #endif
  916. #if(HDCP_ENABLE)
  917. void KEYCodeW(unsigned char code *array)
  918. {
  919.     unsigned int m;  
  920.    RTDSetBit(DVI_CTRL1_AF, 0x7f,0x00);  //Reset the HDCP key download index
  921.    RTDSetBit(DVI_CTRL1_AF, 0x7f,0x80);
  922.     for(m = 0; m < 320; m++)   //Key 0 ~ Key39   
  923.     {
  924. RTDSetByte(0xb1,array[m]);
  925.     }
  926.     RTDSetBit(DVI_CTRL1_AF, 0x7f,0x00);  //Disable the Key Access Download port
  927.     RTDSetBit(TMDS_INPUT_ENA_A1, 0x7f, 0x00);   // Turn on HDCP DDC channel  
  928. }
  929. #endif