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

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. #if(MCU_TYPE == MCU_MTV512)
  10. ///////////////////////////////////////////////////////////////////////
  11. // SCL Processor                                                                                                //
  12. ///////////////////////////////////////////////////////////////////////
  13. void MCU_WriteI2cScl(bit Status)
  14. {
  15.        bIIC_SCL = Status;
  16. }
  17. ///////////////////////////////////////////////////////////////////////
  18. // SDA Processor                                                                                               //
  19. ///////////////////////////////////////////////////////////////////////
  20. void MCU_WriteI2cSda(bit Status)
  21. {
  22.        bIIC_SDA = Status;
  23. }
  24. bit MCU_ReadI2cSda(void)
  25. {
  26.        return(bIIC_SDA);
  27. }
  28. ///////////////////////////////////////////////////////////////////////
  29. // RTD Reset Processor                                                                                      //
  30. ///////////////////////////////////////////////////////////////////////
  31. void MCU_WriteRtdReset(bit Status)
  32. {
  33.        bRTD_RST = Status;
  34. }
  35. bit MCU_ReadRtdReset(void)
  36. {
  37.        return(bRTD_RST);
  38. }
  39. ///////////////////////////////////////////////////////////////////////
  40. // RTD SDIO Processor                                                                                       //
  41. ///////////////////////////////////////////////////////////////////////
  42. void MCU_WriteRtdSdio(bit Status)
  43. {
  44.        bRTD_SDO = Status;
  45. }
  46. bit MCU_ReadRtdSdio(void)
  47. {
  48.        return(bRTD_SDI);
  49. }
  50. ///////////////////////////////////////////////////////////////////////
  51. // RTD Sclk Processor                                                                                        //
  52. ///////////////////////////////////////////////////////////////////////
  53. void MCU_WriteRtdSclk(bit Status)
  54. {
  55.        bRTD_SCLK = Status;
  56. }
  57. ///////////////////////////////////////////////////////////////////////
  58. // RTD Scsb Processor                                                                                       //
  59. ///////////////////////////////////////////////////////////////////////
  60. void MCU_WriteRtdScsb(bit Status)
  61. {
  62.        bRTD_SCSB = Status;
  63. }
  64. ///////////////////////////////////////////////////////////////////////
  65. // VIDEO POWER Processor                                                                                //
  66. ///////////////////////////////////////////////////////////////////////
  67. #if (VIDEO_CHIP != VDC_NONE)
  68. void MCU_WriteVideoPower(bit Status)
  69. {
  70.        bVDC_PWR = Status;
  71. }
  72. #endif
  73. ///////////////////////////////////////////////////////////////////////
  74. // PANEL POWER Processor                                                                                 //
  75. ///////////////////////////////////////////////////////////////////////
  76. void MCU_WritePanelPower(bit Status)
  77. {
  78.        bPANEL_PWR = Status;
  79.        bPanel_Status = Status ? 1 : 0;
  80. }
  81. bit MCU_ReadPanelPower(void)
  82. {
  83.        return(bPANEL_PWR);
  84. }
  85. ///////////////////////////////////////////////////////////////////////
  86. // BACKLIGHT POWER Processor                                                                         //
  87. ///////////////////////////////////////////////////////////////////////
  88. void MCU_WriteBacklightPower(bit Status)
  89. {
  90.        bLIGHT_PWR = (Status);
  91. }
  92. ///////////////////////////////////////////////////////////////////////
  93. // VGA CONNECT Processor                                                                                //
  94. ///////////////////////////////////////////////////////////////////////
  95. bit MCU_ReadVgaConnect(void)
  96. {
  97.        return(bVGA_CONNECT);
  98. }
  99. #endif
  100. void BitDly(void)
  101. {
  102.     _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
  103.     _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
  104.     _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
  105.     _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
  106. }
  107. void I2CRead(unsigned char addr, unsigned char index, unsigned char count)
  108. {
  109.     unsigned char   n;
  110.     if (count)
  111.     {
  112.         I2CSendAddr(addr, index, 0);
  113.         
  114.         I2CSendAddr(addr, 0, 1);
  115.         count   = count - 1;
  116.         for (n = 0; n < count; n++)     Data[n] = I2CGetByte(0);
  117.         Data[count] = I2CGetByte(1);
  118.         I2CSendStop();
  119.     }
  120. }
  121. void I2CWrite(unsigned char *array)
  122. {
  123.     unsigned char   n, len;
  124.     if (3 <= array[0])
  125.     {
  126.         len     = array[0];
  127.         I2CSendAddr(array[1], array[2], 0);     
  128.         for (n = 3; n < len; n++)   I2CSendByte(array[n]);
  129.         I2CSendStop();
  130.     }
  131. }
  132. unsigned char I2CGetByte(unsigned char ack) 
  133. {
  134.     unsigned char   r, m;
  135.     r = 0;
  136. #if(MCU_TYPE == MCU_WINBOND)
  137.     for (m = 0; m < 8; m++)         // Each bit at a time, MSB first
  138.     {
  139.         bIIC_SCL    = 1;
  140.         BitDly();                   // Delay
  141.         r   = (r << 1) | bIIC_SDA;
  142.         bIIC_SCL    = 0;
  143.         BitDly();                   // Delay
  144.     }  
  145.     // Send ACK according to 'ack'
  146.     bIIC_SDA    = (bit)(ack & 0x01);
  147.     BitDly();                       // Delay
  148.     
  149.     bIIC_SCL    = 1; 
  150.     BitDly();                       // Delay
  151.     
  152.     bIIC_SCL    = 0; 
  153.     BitDly();                       // Delay
  154.     
  155.     bIIC_SDA    = 1;
  156. #else
  157.    
  158.     for (m = 0; m < 8; m++)         // Each bit at a time, MSB first
  159.     {
  160.         MCU_WriteI2cScl(HIGH);
  161.         BitDly();                   // Delay
  162.         r   = (r << 1) | MCU_ReadI2cSda();
  163.         MCU_WriteI2cScl(LOW);
  164.         BitDly();                   // Delay
  165.     }  
  166.     // Send ACK according to 'ack'
  167.     MCU_WriteI2cSda((bit)(ack & 0x01));
  168.     BitDly();                       // Delay
  169.     MCU_WriteI2cScl(HIGH);
  170.     BitDly();                       // Delay
  171.     MCU_WriteI2cScl(LOW);
  172.     BitDly();                       // Delay
  173.     MCU_WriteI2cSda(HIGH);
  174. #endif
  175.     return (r);
  176. }
  177. void I2CSendByte(unsigned char send)
  178. {
  179.     unsigned char   m;
  180. #if(MCU_TYPE == MCU_WINBOND)    
  181.     for (m = 0; m < 8; m++)
  182.     {
  183.         bIIC_SDA    = (bit)(send & 0x80);   // Send each bit, MSB first
  184.         BitDly();
  185.         bIIC_SCL    = 1;
  186.         BitDly();
  187.         bIIC_SCL    = 0;
  188.         send    = send << 1;
  189.     }
  190.     bIIC_SDA    = 1;
  191.     bIIC_SCL    = 1;
  192.     BitDly();
  193.     bIIC_SCL    = 0;
  194.     BitDly();
  195. #else
  196.     for (m = 0; m < 8; m++)
  197.     {
  198.         MCU_WriteI2cSda((bit)(send & 0x80));   // Send each bit, MSB first
  199.         BitDly();
  200.         MCU_WriteI2cScl(HIGH);
  201.         BitDly();
  202.         MCU_WriteI2cScl(LOW);;
  203.         send    = send << 1;
  204.     }
  205.     MCU_WriteI2cSda(HIGH);
  206.     MCU_WriteI2cScl(HIGH);
  207.     BitDly();
  208.     MCU_WriteI2cScl(LOW);;
  209.     BitDly();
  210. #endif
  211. void I2CSendAddr(unsigned char addr, unsigned char index, unsigned char rd)
  212. {         
  213. #if(MCU_TYPE == MCU_WINBOND)         
  214.     bIIC_SCL    = 1;
  215.     bIIC_SDA    = 0;    // Start
  216.     BitDly();
  217.     bIIC_SCL    = 0;
  218.     I2CSendByte(addr + rd);             // Send address byte
  219.     if (0 == rd)    I2CSendByte(index); // Send index byte  
  220. #else
  221.     MCU_WriteI2cScl(HIGH);
  222.     MCU_WriteI2cSda(LOW);    // Start
  223.     BitDly();
  224.     MCU_WriteI2cScl(LOW);;
  225.     I2CSendByte(addr + rd);             // Send address byte
  226.     if (0 == rd)    I2CSendByte(index); // Send index byte 
  227. #endif
  228. }
  229. void I2CSendStop(void)
  230. {
  231. #if(MCU_TYPE == MCU_WINBOND)
  232.     bIIC_SDA    = 0; 
  233.     BitDly();
  234.     bIIC_SCL    = 1;
  235.     BitDly();
  236.     bIIC_SDA    = 1;
  237.     BitDly();
  238. #else
  239.     MCU_WriteI2cSda(LOW); 
  240.     BitDly();
  241.     MCU_WriteI2cScl(HIGH);
  242.     BitDly();
  243.     MCU_WriteI2cSda(HIGH);
  244.     BitDly();
  245. #endif
  246. }
  247. unsigned char RTDGetByte(void) 
  248. {
  249. #if(PARALLEL_PORT)
  250. #if(1)
  251.    bRTD_SCLK = 1;
  252.    bRTD_SCLK = 0;
  253.    r0        = bRTD_SDIO_0;
  254.    r1        = bRTD_SDIO_1;
  255.    r2        = bRTD_SDIO_2;
  256.    r3        = bRTD_SDIO_3;
  257.    bRTD_SCLK = 1;
  258.    bRTD_SCLK = 0;
  259.    r4        = bRTD_SDIO_0;
  260.    r5        = bRTD_SDIO_1;
  261.    r6        = bRTD_SDIO_2;
  262.    r7        = bRTD_SDIO_3;
  263.    bRTD_SCLK   = 1;
  264. #else
  265.    bRTD_SCLK = 1;
  266.    bRTD_SCLK = 0;
  267.    Reg = P0 & 0x0f;
  268.    bRTD_SCLK = 1;
  269.    bRTD_SCLK = 0;
  270.    Reg = Reg | ((P0 & 0x0f) << 4);
  271.    bRTD_SCLK   = 1;
  272. #endif
  273. #else //serial port
  274.     bRTD_SCLK   = 1;
  275.     bRTD_SCLK   = 0;
  276.     r0          = bRTD_SDIO_0;
  277.     bRTD_SCLK   = 1;
  278.     bRTD_SCLK   = 0;
  279.     r1          = bRTD_SDIO_0;
  280.     bRTD_SCLK   = 1;
  281.     bRTD_SCLK   = 0;
  282.     r2          = bRTD_SDIO_0;
  283.     bRTD_SCLK   = 1;
  284.     bRTD_SCLK   = 0;
  285.     r3          = bRTD_SDIO_0;
  286.     bRTD_SCLK   = 1;
  287.     bRTD_SCLK   = 0;
  288.     r4          = bRTD_SDIO_0;
  289.     bRTD_SCLK   = 1;
  290.     bRTD_SCLK   = 0;
  291.     r5          = bRTD_SDIO_0;
  292.     bRTD_SCLK   = 1;
  293.     bRTD_SCLK   = 0;
  294.     r6          = bRTD_SDIO_0;
  295.     bRTD_SCLK   = 1;
  296.     bRTD_SCLK   = 0;
  297.     r7          = bRTD_SDIO_0;
  298.     bRTD_SCLK   = 1;
  299. #endif
  300.     return Reg;
  301. }
  302. void RTDSendByte(unsigned char send)
  303. {
  304. #if(PARALLEL_PORT)
  305. #if(1)
  306.     bRTD_SDIO_0 = (bit)(send & 0x01);
  307. bRTD_SDIO_1 = (bit)(send & 0x02);
  308. bRTD_SDIO_2 = (bit)(send & 0x04);
  309. bRTD_SDIO_3 = (bit)(send & 0x08);
  310. bRTD_SCLK   = 1;
  311.     bRTD_SCLK   = 0;
  312. bRTD_SDIO_0 = (bit)(send & 0x10);
  313. bRTD_SDIO_1 = (bit)(send & 0x20);
  314. bRTD_SDIO_2 = (bit)(send & 0x40);
  315. bRTD_SDIO_3 = (bit)(send & 0x80);
  316. bRTD_SCLK   = 1;
  317.     bRTD_SCLK   = 0;
  318. bRTD_SDIO_0 = 1;
  319. bRTD_SDIO_1 = 1;
  320. bRTD_SDIO_2 = 1;
  321. bRTD_SDIO_3 = 1;
  322. bRTD_SCLK   = 1;
  323. #else
  324.     unsigned char ucTemp;
  325. ucTemp = P0 & 0xf0;
  326.     P0 = ucTemp | (send & 0x0f);
  327.     bRTD_SCLK   = 1;
  328.     bRTD_SCLK   = 0;
  329.     P0 = ucTemp | (send >> 4);
  330.     bRTD_SCLK   = 1;
  331.     bRTD_SCLK   = 0;
  332.     P0 = ucTemp | 0x0f;
  333.     bRTD_SCLK   = 1;
  334. #endif
  335. #else //serial port
  336.     bRTD_SDIO_0 = (bit)(send & 0x01);
  337.     bRTD_SCLK   = 1;
  338.     bRTD_SCLK   = 0;
  339.     bRTD_SDIO_0 = (bit)(send & 0x02);
  340.     bRTD_SCLK   = 1;
  341.     bRTD_SCLK   = 0;
  342.     bRTD_SDIO_0 = (bit)(send & 0x04);
  343.     bRTD_SCLK   = 1;
  344.     bRTD_SCLK   = 0;
  345.     bRTD_SDIO_0 = (bit)(send & 0x08);
  346.     bRTD_SCLK   = 1;
  347.     bRTD_SCLK   = 0;
  348.     bRTD_SDIO_0 = (bit)(send & 0x10);
  349.     bRTD_SCLK   = 1;
  350.     bRTD_SCLK   = 0;
  351.     bRTD_SDIO_0 = (bit)(send & 0x20);
  352.     bRTD_SCLK   = 1;
  353.     bRTD_SCLK   = 0;
  354.     bRTD_SDIO_0 = (bit)(send & 0x40);
  355.     bRTD_SCLK   = 1;
  356.     bRTD_SCLK   = 0;
  357.     bRTD_SDIO_0 = (bit)(send & 0x80);
  358.     bRTD_SCLK   = 1;
  359.     bRTD_SCLK   = 0;
  360.     bRTD_SDIO_0 = 1;
  361.     bRTD_SCLK   = 1;
  362. #endif
  363. }
  364. void RTDSendAddr(unsigned char addr, unsigned char rd, unsigned char inc)   // rd   : 0 - Write, 1 - Read
  365. {
  366. #if(PARALLEL_PORT)
  367.     RTDSendByte(addr);
  368. bRTD_SDIO_0 = (bit)(rd & 0x01);
  369. bRTD_SDIO_1 = (bit)(inc & 0x01);
  370. bRTD_SCLK = 0;
  371. bRTD_SDIO_0 = 1;
  372. bRTD_SDIO_1 = 1;
  373. bRTD_SCLK = 1;
  374. #else // serial port
  375.     RTDSendByte(addr);
  376.     bRTD_SDIO_0 = 1;
  377.     bRTD_SCLK   = 1;        
  378.     bRTD_SDIO_0 = (bit)(rd & 0x01); 
  379.     bRTD_SCLK   = 1;
  380.     bRTD_SCLK   = 0;
  381.     bRTD_SDIO_0 = (bit)(inc & 0x01); 
  382.     bRTD_SCLK   = 1;
  383.     bRTD_SCLK   = 0;
  384.     bRTD_SDIO_0 = 1;
  385. #endif
  386. }
  387. void RTDSendStop(void)
  388. {
  389.         bRTD_SCLK   = 0;
  390.         bRTD_SCLK   = 1; 
  391.         bRTD_SCSB   = 1;
  392. }
  393. void RTDRead(unsigned char index, unsigned char count, unsigned char inc)
  394. {
  395.     if (count)
  396.     {
  397.         bRTD_SCSB   = 0;
  398.         RTDSendAddr(index, 1, inc);
  399.         index   = 0;
  400.         do
  401.         {
  402.             Data[index++]   = RTDGetByte();
  403.         }
  404.         while (--count);
  405. RTDSendStop();
  406.     }
  407. }
  408. void RTDWrite(unsigned char data *array)
  409. {
  410.     unsigned char   len, m;
  411.     do
  412.     {
  413.         if (0 == (array[0] & 0xfc))     return;
  414.         len     = array[0] - 3;
  415.         array   = array + 1;
  416.         bRTD_SCSB   = 0;
  417.         if (BURST == array[0])
  418.         {
  419.             RTDSendAddr(array[1], 0, N_INC);
  420.             array   = array + 2;
  421.             m       = array[0];
  422.             do
  423.             {
  424.                 RTDSendByte(m);
  425.             }
  426.             while (--len);
  427.             array   = array + 1;
  428.         }
  429.         else
  430.         {
  431.             RTDSendAddr(array[1], 0, array[0]);
  432.             array   = array + 2;
  433.             do
  434.             {
  435.                 RTDSendByte(*array++);
  436.             }
  437.             while (--len);
  438.         }
  439. RTDSendStop();
  440.     }
  441.     while (1);
  442. }
  443. void RTDCodeW(unsigned char code *array)
  444. {
  445.     unsigned char   len, m;
  446.     do
  447.     {
  448.         if (0 == (array[0] & 0xfc))     return;
  449.         len     = array[0] - 3;
  450.         array   = array + 1;
  451.         bRTD_SCSB   = 0;
  452.         if (BURST == array[0])
  453.         {
  454.             RTDSendAddr(array[1], 0, N_INC);
  455.             array   = array + 2;
  456.             m       = array[0];
  457.             
  458.             do
  459.             {
  460.                 RTDSendByte(m);
  461.             }
  462.             while (--len);
  463.             array   = array + 1;
  464.         }
  465.         else
  466.         {
  467.             RTDSendAddr(array[1], 0, array[0]);
  468.             array   = array + 2;
  469.             do
  470.             {
  471.                 RTDSendByte(*array++);
  472.             }
  473.             while (--len);
  474.         }
  475. RTDSendStop();
  476.     }
  477.     while (1);
  478. }
  479. void RTDOSDW(unsigned char code *array)
  480. {
  481.     unsigned char   len;
  482.     do
  483.     {
  484.         if (array[0] == _end_)     return;
  485.     
  486. bRTD_SCSB   = 0;
  487.         RTDSendAddr(OSD_ROW_90,WRITE,Y_INC);
  488.         RTDSendByte(*array++);
  489.         RTDSendByte(*array++);
  490. RTDSendStop();
  491. bRTD_SCSB   = 0;
  492.         RTDSendAddr(OSD_DATA_92,WRITE,N_INC);
  493.         do
  494. {
  495.            if(array[1] == _bb_)
  496.    {
  497.        len = array[2] - 1;
  498.    do
  499.    {
  500.       RTDSendByte(*array);
  501.    }while(len--);
  502.        
  503.    array = array + 3;
  504.    }
  505.    else
  506.        RTDSendByte(*array++);
  507. }while(array[0] != _nn_);
  508. array +=1 ;
  509. RTDSendStop();
  510.     }
  511.     while (1);
  512. }
  513. void RTDSetByte(unsigned char addr, unsigned char val)
  514. {
  515.     // Set Write Address
  516.     bRTD_SCSB   = 0;   
  517.     RTDSendAddr(addr, 0, 1);
  518.     // Write one Byte
  519.     RTDSendByte(val);
  520. RTDSendStop();
  521. }
  522. void RTDSetBit(unsigned char addr, unsigned char and, unsigned char or)
  523. {
  524.     // Set Read Address
  525.     bRTD_SCSB   = 0;
  526.     RTDSendAddr(addr, 1, 1);
  527.     // Read 1 Byte
  528.     or      = (RTDGetByte() & and) | or;
  529. RTDSendStop();
  530.     // Set Write Address
  531.     bRTD_SCSB   = 0;   
  532.     RTDSendAddr(addr, 0, 1);
  533.     // Write one Byte
  534.     RTDSendByte(or);
  535. RTDSendStop();
  536. }
  537. //length represent the number of character
  538. // character number of 1 bit font  = 1
  539. // character number of 2 bit font  = 2
  540. // character number of 4 bit font  = 4
  541. // length = (1 bit font amount) x 1 + (2 bit font amount) x 2 + (4 bit font amount) x 4
  542. void Load_Font(unsigned char code *array, unsigned int start, unsigned int length)
  543. {
  544.     unsigned char   n,m;
  545.     unsigned char   ucTemp[3];
  546. #if(PARALLEL_PORT)
  547. unsigned char ucTemp1;
  548. #endif
  549.     start = start * 9;
  550.     start += FONT_BASE_ADDRESS;
  551. bRTD_SCSB   = 0;   
  552. RTDSendAddr(OSD_ROW_90, WRITE, Y_INC);
  553. ucTemp[0] = (unsigned char)((start >> 8) & 0x000f) | 0xd0;
  554. RTDSendByte(ucTemp[0]);
  555. ucTemp[0] = (unsigned char)(start & 0x00ff);
  556. RTDSendByte(ucTemp[0]);
  557. RTDSendStop();
  558. bRTD_SCSB   = 0;   
  559. RTDSendAddr(OSD_DATA_92, WRITE, N_INC);
  560.     do
  561.     {
  562.         for(m=0; m<9; m++)
  563.         {
  564. //Rearrange the byte order
  565.             ucTemp[0] = (*(array + 1) << 4) | (*(array + 2) & 0x0f);
  566. ucTemp[1] = (*(array + 2) & 0xf0) | (*array & 0x0f);
  567. ucTemp[2] = (*array & 0xf0) | (*(array + 1) >> 4);
  568. for(n=0;n<3;n++)
  569. {
  570. #if(PARALLEL_PORT)
  571. #if(1)
  572. bRTD_SDIO_0 = (bit)(ucTemp[n] & 0x01);
  573. bRTD_SDIO_1 = (bit)(ucTemp[n] & 0x02);
  574. bRTD_SDIO_2 = (bit)(ucTemp[n] & 0x04);
  575. bRTD_SDIO_3 = (bit)(ucTemp[n] & 0x08);
  576.                 bRTD_SCLK   = 1;
  577. bRTD_SCLK   = 0;
  578. bRTD_SDIO_0 = (bit)(ucTemp[n] & 0x10);
  579. bRTD_SDIO_1 = (bit)(ucTemp[n] & 0x20);
  580. bRTD_SDIO_2 = (bit)(ucTemp[n] & 0x40);
  581. bRTD_SDIO_3 = (bit)(ucTemp[n] & 0x80);
  582. bRTD_SCLK   = 1;
  583. bRTD_SCLK   = 0;
  584. bRTD_SDIO_0 = 1;
  585. bRTD_SDIO_1 = 1;
  586. bRTD_SDIO_2 = 1;
  587. bRTD_SDIO_3 = 1;
  588. bRTD_SCLK   = 1;
  589. #else
  590. ucTemp1 = P0 & 0xf0;
  591. P0 = ucTemp1 | (ucTemp[n] & 0x0f);
  592. bRTD_SCLK   = 1;
  593. bRTD_SCLK   = 0;
  594. P0 = ucTemp1 | (ucTemp[n] >> 4);
  595. bRTD_SCLK   = 1;
  596. bRTD_SCLK   = 0;
  597. P0 = ucTemp1 | 0x0f;
  598. bRTD_SCLK   = 1;
  599. #endif
  600. #else
  601. bRTD_SDIO_0 = (bit)(ucTemp[n] & 0x01);
  602. bRTD_SCLK   = 1;
  603. bRTD_SCLK   = 0;
  604. bRTD_SDIO_0 = (bit)(ucTemp[n] & 0x02);
  605. bRTD_SCLK   = 1;
  606. bRTD_SCLK   = 0;
  607. bRTD_SDIO_0 = (bit)(ucTemp[n] & 0x04);
  608. bRTD_SCLK   = 1;
  609. bRTD_SCLK   = 0;
  610. bRTD_SDIO_0 = (bit)(ucTemp[n] & 0x08);
  611. bRTD_SCLK   = 1;
  612. bRTD_SCLK   = 0;
  613. bRTD_SDIO_0 = (bit)(ucTemp[n] & 0x10);
  614. bRTD_SCLK   = 1;
  615. bRTD_SCLK   = 0;
  616. bRTD_SDIO_0 = (bit)(ucTemp[n] & 0x20);
  617. bRTD_SCLK   = 1;
  618. bRTD_SCLK   = 0;
  619. bRTD_SDIO_0 = (bit)(ucTemp[n] & 0x40);
  620. bRTD_SCLK   = 1;
  621. bRTD_SCLK   = 0;
  622. bRTD_SDIO_0 = (bit)(ucTemp[n] & 0x80);
  623. bRTD_SCLK   = 1;
  624. bRTD_SCLK   = 0;
  625. bRTD_SDIO_0 = 1;
  626. bRTD_SCLK   = 1;
  627. #endif
  628.             }
  629.             array += 3;
  630.         }
  631.     }
  632.     while (--length);
  633. RTDSendStop();
  634. }
  635. #if(HDCP_ENABLE)
  636. void KEYCodeW(unsigned char code *array)
  637. {
  638.     unsigned int m;  
  639.    RTDSetBit(DVI_CTRL1_AF, 0x7f,0x00);  //Reset the HDCP key download index
  640.    RTDSetBit(DVI_CTRL1_AF, 0x7f,0x80);
  641.     for(m = 0; m < 320; m++)   //Key 0 ~ Key39   
  642.     {
  643. RTDSetByte(0xb1,array[m]);
  644.     }
  645.     RTDSetBit(DVI_CTRL1_AF, 0x7f,0x00);  //Disable the Key Access Download port
  646.     RTDSetBit(TMDS_INPUT_ENA_A1, 0x7f, 0x00);   // Turn on HDCP DDC channel  
  647. }
  648. #endif