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

📄 iic.lst

📁 NOVATEK公司的LCD_CONTROLLER源代码 液晶显示器驱动板源代码NT68521
💻 LST
📖 第 1 页 / 共 5 页
字号:
 102   1      unsigned short device,addr;
 103   1              DDC_CTRL = 0;
 104   1              p = &DDCPtr;
 105   1              if(ddcsw == 0){
 106   2      /*              if((PortC & BIT_1) == 0){       //digital
 107   2                              flag2 &= ~BIT_7;
 108   2                              addr = (unsigned char)DDC_EEP_Addr_D;
 109   2                              device = (unsigned char)(DDC_EEP_Addr_D >> 7) & 0x0e;
 110   2                              if((flag3 & BIT_2) != 0x00)
 111   2                                      printf("Load Digital EDID\r\n");
 112   2                      }
 113   2                      else{           //analog
 114   2                              flag2 |= BIT_7;
 115   2                              addr = (unsigned char)DDC_EEP_Addr_A;
 116   2                              device = (unsigned char)(DDC_EEP_Addr_A >> 7) & 0x0e;
 117   2                              if((flag3 & BIT_2) != 0x00)
 118   2                                      printf("Load Analog EDID\r\n");
 119   2                      }*/
 120   2              }
 121   1              else if(ddcsw == 1){    //analog
 122   2                      flag2 |= BIT_7;
 123   2                      addr = (unsigned char)DDC_EEP_Addr_A;
 124   2                      device = (unsigned char)(DDC_EEP_Addr_A >> 7) & 0x0e;
 125   2                      if((flag3 & BIT_2) != 0x00)
 126   2                              printf("\n Load Analog EDID\r\n");
 127   2              }
 128   1              else{           //digital
 129   2                      flag2 &= ~BIT_7;
 130   2                      addr = (unsigned char)DDC_EEP_Addr_D;
 131   2                      device = (unsigned char)(DDC_EEP_Addr_D >> 7) & 0x0e;
 132   2                      if((flag3 & BIT_2) != 0x00)
 133   2                              printf("Load Digital EDID\r\n");
 134   2              }
 135   1              device |= EEPROM;
 136   1      /* start bit */
 137   1      /* transmit device */
 138   1              INTIIC1_FLG = 0xff;
 139   1              IIC1_DATA = device;
C51 COMPILER V7.20   IIC                                                                   09/14/2004 12:20:59 PAGE 15  

 140   1              IIC1_CLK = 0x20 | IIC_BaudRate;
 141   1      /* transmit addr */
 142   1              MasterSendByte(addr);
 143   1      /* transmit dumy data for restart bit */
 144   1              WaitTx();
 145   1      /* stop bit */
 146   1              IIC1_CLK = 0xA0|IIC_BaudRate;
 147   1      //      IIC1_CON = 0x00;
 148   1      /* restart bit */
 149   1              WaitStop();
 150   1      /* transmit device */
 151   1              IIC1_DATA = device+1;
 152   1              IIC1_CLK = 0x60 | IIC_BaudRate;
 153   1              WaitTx();
 154   1      /* read data */
 155   1              for(i=128; i>0; i--){
 156   2                      *p = MasterReadByte(i);
 157   2                      p++;
 158   2              }
 159   1      /* no ack */
 160   1      /* stop bit */
 161   1      //      IIC1_CLK = 0xA0|IIC_BaudRate;
 162   1      //      IIC1_CON = 0x00;
 163   1              WaitStop();
 164   1              DDC_CTRL = (EN_DDC |WPT_DDC | CLR_UPD | CLR_PTR);
 165   1      //      if((flag3 & BIT_0) == 0)
 166   1      //              DDC_CTRL = (EN_DDC | WPT_DDC | MODE_DDC);
 167   1      //      else    
 168   1                      DDC_CTRL = (EN_DDC | MODE_DDC);
 169   1      }
 170          
 171          void SaveDDCData(unsigned char ddcsw)
 172          {
 173   1      unsigned char *p,i;
 174   1              LED_GrnOff();
 175   1              LED_RedOn();
 176   1              DDC_CTRL = (EN_DDC | MODE_DDC | CLR_UPD);       
 177   1              Timer3 = DDC_DelayTime;
 178   1              while(Timer3 != 0){
 179   2                      if((INTIIC0_FLG & INTSTOP) != 0){
 180   3                              INTIIC0_FLG = INTSTOP;
 181   3                              Timer3 = DDC_DelayTime;
 182   3                      }
 183   2                      if((DDC_REG & UPD_DDC) != 0){           //up date ddc
 184   3                              DDC_CTRL = (EN_DDC | MODE_DDC | CLR_UPD);       
 185   3                              Timer3 = DDC_DelayTime;
 186   3                      }
 187   2              }
 188   1              p = &DDCPtr;
 189   1              if(ddcsw == 0){
 190   2      /*              if((PortC & BIT_1) == 0){       //digital
 191   2                              for(i=0; i<128; i=i+16){
 192   2                                      do{
 193   2                                              DDC_REG = WR_SUCC;
 194   2                                              WritePage24C16(DDC_EEP_Addr_D+i,i,p);
 195   2                                              if((DDC_REG & UPD_DDC) != 0){           //up date ddc
 196   2                                                      return;
 197   2                                              }
 198   2                                      }while((DDC_REG & WR_SUCC) == 0);               //unsuccessful
 199   2                              }
 200   2                      }
 201   2                      else{           //analog                                                                                         
C51 COMPILER V7.20   IIC                                                                   09/14/2004 12:20:59 PAGE 16  

             -                                 c
 202   2                              for(i=0; i<128; i=i+16){
 203   2                                      do{
 204   2                                              DDC_REG = WR_SUCC;
 205   2                                              WritePage24C16(DDC_EEP_Addr_A+i,i,p);
 206   2                                              if((DDC_REG & UPD_DDC) != 0){           //up date ddc
 207   2                                                      return;
 208   2                                              }
 209   2                                      }while((DDC_REG & WR_SUCC) == 0);               //unsuccessful
 210   2                              }
 211   2                      }*/
 212   2              }
 213   1              else if(ddcsw == 1){    //analog
 214   2                      for(i=0; i<128; i=i+16){
 215   3                              do{
 216   4                                      DDC_REG = WR_SUCC;
 217   4                                      WritePage24C16(DDC_EEP_Addr_A+i,i,p);
 218   4                                      if((DDC_REG & UPD_DDC) != 0){           //up date ddc
 219   5                                              return;
 220   5                                      }
 221   4                              }while((DDC_REG & WR_SUCC) == 0);               //unsuccessful
 222   3                      }
 223   2              }
 224   1              else{                                   //digital
 225   2                      for(i=0; i<128; i=i+16){
 226   3                              do{
 227   4                                      DDC_REG = WR_SUCC;
 228   4                                      WritePage24C16(DDC_EEP_Addr_D+i,i,p);
 229   4                                      if((DDC_REG & UPD_DDC) != 0){           //up date ddc
 230   5                                              return;
 231   5                                      }
 232   4                              }while((DDC_REG & WR_SUCC) == 0);               //unsuccessful
 233   3                      }
 234   2              }
 235   1              LED_GrnOn();
 236   1              LED_RedOff();
 237   1      }
 238          void WriteIIC_HW(unsigned char device,unsigned char addr,unsigned char ch)
 239          {
 240   1      /* start bit */
 241   1      /* transmit device */
 242   1              INTIIC1_FLG = 0xff;
 243   1              IIC1_DATA = device;
 244   1              IIC1_CLK = 0x20 | IIC_BaudRate;
 245   1              IIC1_CON = 0x00;
 246   1      /* transmit addr */
 247   1              MasterSendByte(addr);
 248   1      /* transmit data */
 249   1              MasterSendByte(ch);
 250   1      /* transmit dumy data for stop bit */
 251   1              WaitTx();
 252   1      /* stop bit */
 253   1              IIC1_CLK = 0xA0|IIC_BaudRate;
 254   1      //      IIC1_CON = 0x00;
 255   1              WaitStop();
 256   1      }
 257          
 258          void MasterSendByte(unsigned char i)
 259          {
 260   1              Timer1 = 100;
 261   1              while((INTIIC1_FLG & INTTX) == 0){
 262   2                      if(Timer1 == 0){
C51 COMPILER V7.20   IIC                                                                   09/14/2004 12:20:59 PAGE 17  

 263   3                              if((flag3 & BIT_2) != 0x00){
 264   4                                      printf("ACK Fail2\r\n");
 265   4                              }
 266   3                              EA = 0;
 267   3                              break;
 268   3                      }
 269   2              } 
 270   1              INTIIC1_FLG = INTTX;
 271   1              IIC1_DATA = i;
 272   1      }
 273          
 274          void WaitTx(void)
 275          {
 276   1              Timer1 = 100;
 277   1              while((INTIIC1_FLG & INTTX) == 0){
 278   2                      if(Timer1 == 0){
 279   3                              if((flag3 & BIT_2) != 0x00){
 280   4                                      printf("ACK Fail3\r\n");
 281   4                              }
 282   3                              EA = 0;
 283   3                              break;
 284   3                      }
 285   2              } 
 286   1              INTIIC1_FLG = INTTX;
 287   1      }
 288          
 289          void WriteIICV_HW(unsigned char device,unsigned char addr,unsigned char ch)
 290          {
 291   1      /* start bit */
 292   1      /* transmit device */
 293   1              INTIIC1_FLG = 0xff;
 294   1              IIC1_DATA = device;
 295   1              IIC1_CLK = 0x20 | IIC_BaudRate;
 296   1              IIC1_CON = 0x00;
 297   1      /* transmit addr */
 298   1              MasterSendByte(addr);
 299   1      /* transmit data */
 300   1              MasterSendByteV(ch);
 301   1      /* transmit dumy data for stop bit */
 302   1              WaitTx();
 303   1      /* stop bit */
 304   1              IIC1_CLK = 0xA0|IIC_BaudRate;
 305   1      //      IIC1_CON = 0x00;
 306   1              WaitStop();
 307   1      }
 308          
 309          void MasterSendByteV(unsigned char i)
 310          {
 311   1              Timer1 = 100;
 312   1              while((INTIIC1_FLG & INTTX) == 0){
 313   2                      if(Timer1 == 0){
 314   3                              if((flag3 & BIT_2) != 0x00){
 315   4                                      printf("ACK Fail6\r\n");
 316   4                              }
 317   3                              EA = 0;
 318   3                              break;
 319   3                      }
 320   2              } 
 321   1              INTHV_FLG |= INT_V;
 322   1              Timer1 = 40;
 323   1              while(Timer1 != 0){
 324   2                      if((INTHV_FLG & INT_V) != 0)
C51 COMPILER V7.20   IIC                                                                   09/14/2004 12:20:59 PAGE 18  

 325   2                              break;
 326   2              }
 327   1              INTIIC1_FLG = INTTX;
 328   1              IIC1_DATA = i;
 329   1              if(Timer1 == 0){
 330   2                      BackLightOff();
 331   2                      flag2 |= BIT_0;
 332   2                      H_SYNC_Temp = 0xffff;
 333   2                      V_SYNC_Temp = 0xffff;
 334   2                      if((flag3 & BIT_2) != 0x00){
 335   3                              printf("Mode change\r\n");
 336   3                      }
 337   2              }
 338   1      }
 339          #if 0
              unsigned long ReadDWordIIC_HW(unsigned char device,unsigned char addr)
              {
              typedef union
              {
                      unsigned long dw;
                      unsigned short w[2];
                      unsigned char b[4];
              }Union;
              
                      Union value;
              /* start bit */
              /* transmit device */
                      INTIIC1_FLG = 0xff;
                      IIC1_DATA = device;
                      IIC1_CLK = 0x20 | IIC_BaudRate;
              /* transmit addr */
                      MasterSendByte(addr);
              /* transmit dumy data for restart bit */
                      WaitTx();
              /* stop bit */
                      IIC1_CLK = 0xA0|IIC_BaudRate;
              //      IIC1_CON = 0x00;
              /* restart bit */
                      WaitStop();
              /* transmit device */
                      IIC1_DATA = device+1;
                      IIC1_CLK = 0x60 | IIC_BaudRate;
                      WaitTx();
              /* read data */
                      IIC1_CON = 0x00;
                      value.b[0] = MasterReadByte();
                      IIC1_CON = 0x00;
                      value.b[1] = MasterReadByte();
                      IIC1_CON = 0x00;
                      value.b[2] = MasterReadByte();
                      IIC1_CON = 0x02;
                      value.b[3] = MasterReadByte();
              /* no ack */
              /* stop bit */

⌨️ 快捷键说明

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