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

📄 iic.lst

📁 NT68521源代码
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.50   IIC                                                                   03/18/2008 22:04:55 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE IIC
OBJECT MODULE PLACED IN .\BIN\IIC.obj
COMPILER INVOKED BY: D:\设计软件\Keil\C51\BIN\C51.EXE SRC\IIC.C BROWSE DEBUG OBJECTEXTEND PRINT(.\LST\IIC.lst) OBJECT(.\
                    -BIN\IIC.obj)

line level    source

   1          #include "stdio.h"
   2          #include "8051.H"
   3          #include "RAM.H"
   4          #include "IIC.H"
   5          #include "MCU.H"
   6          #include "ROM_MAP.H"
   7          #include "MyDef.H"
   8          #include "F63REG.H"
   9          #include "UserAdj.H"
  10          #include "Scaler.H"
  11          #include "SAA7114.H"
  12          #include "TUNER.H"
  13          
  14          void Delay(void)
  15          {
  16   1      unsigned char ys;
  17   1              for(ys=0;ys<70;ys++) ;
  18   1      }
  19          unsigned char Read24C16(unsigned short addr16)
  20          {
  21   1      unsigned char ch;
  22   1      unsigned short device,addr;
  23   1              addr = addr16 & 0x0ff;
  24   1              device = (addr16 >> 7) & 0x0e;
  25   1              device |= EEPROM;
  26   1              ch = ReadIIC_HW(device,addr);
  27   1              return ch;
  28   1      }
  29          
  30          void InitEEPROM(void)
  31          {
  32   1      unsigned short addr;
  33   1              for(addr=0; addr<0x280; addr=addr+16){
  34   2                      WritePage24C16(addr,addr,MCU_DataMap);
  35   2              }
  36   1              for(addr=0; addr<50; addr++){
  37   2                      Write24C16(0x290+addr*2,MCU_DataMap[0x104+addr*8]);
  38   2                      Write24C16(0x291+addr*2,MCU_DataMap[0x105+addr*8]);
  39   2              }
  40   1      
  41   1              Write24C16(0xe8,0x55);
  42   1              Write24C16(0xe9,0xaa);
  43   1              Write24C16(0xea,Version);
  44   1              Write24C16(0xeb,Reversion);
  45   1      }
  46          
  47          void Write24C16(unsigned short k,unsigned char ch)
  48          {
  49   1      unsigned char device,addr;
  50   1              addr = (unsigned char)k;
  51   1              device = (unsigned char)((k>>7)&0x0e);
  52   1              device |= EEPROM;
  53   1              WriteIIC_HW(device,addr,ch);
  54   1              Sleep(12);
C51 COMPILER V7.50   IIC                                                                   03/18/2008 22:04:55 PAGE 2   

  55   1      }
  56          
  57          void WritePage24C16(unsigned short addr1,unsigned short addr2,unsigned char *p)
  58          {
  59   1      unsigned char i,ch;
  60   1              i = (unsigned char)((addr1 >>7 ) & 0x0e);
  61   1              i |= EEPROM;
  62   1      /* start bit */
  63   1      /* transmit device */
  64   1              INTIIC1_FLG = 0xff;
  65   1              IIC1_DATA = i;
  66   1              IIC1_CLK = 0x20 | IIC_BaudRate;
  67   1              IIC1_CON = 0x00;
  68   1      /* transmit addr */
  69   1              MasterSendByte(addr1);
  70   1      /* transmit data */
  71   1              for(i=0; i<16; i++){
  72   2                      ch = p[addr2 + i];
  73   2                      MasterSendByte(ch);
  74   2              }
  75   1      /* transmit dumy data for stop bit */
  76   1              WaitTx();
  77   1      /* stop bit */
  78   1              IIC1_CLK = 0xA0|IIC_BaudRate;
  79   1      //      IIC1_CON = 0x00;
  80   1              WaitStop();
  81   1              Sleep(12);
  82   1      }
  83          
  84          void WriteWordIIC_HW(unsigned char device,unsigned char addr,unsigned short value)
  85          {
  86   1      /* start bit */
  87   1      /* transmit device */
  88   1              INTIIC1_FLG = 0xff;
  89   1              IIC1_DATA = device;
  90   1              IIC1_CLK = 0x20 | IIC_BaudRate;
  91   1              IIC1_CON = 0x00;
  92   1      /* transmit addr */
  93   1              MasterSendByte(addr);
  94   1      /* transmit data */
  95   1              MasterSendByte((unsigned char)value);
  96   1              MasterSendByte((unsigned char)(value >> 8));
  97   1      /* transmit dumy data for stop bit */
  98   1              WaitTx();
  99   1      /* stop bit */
 100   1              IIC1_CLK = 0xA0|IIC_BaudRate;
 101   1      //      IIC1_CON = 0x00;
 102   1              WaitStop();
 103   1      }
 104          
 105          void LoadDDCData(unsigned char ddcsw)
 106          {
 107   1      unsigned char *p,i;
 108   1      unsigned short device,addr;
 109   1              DDC_CTRL = 0;
 110   1              p = &DDCPtr;
 111   1              if(ddcsw == 0){
 112   2                      if((PortC & BIT_1) == 0){       //digital
 113   3                              flag2 &= ~BIT_7;
 114   3                              addr = (unsigned char)DDC_EEP_Addr_D;
 115   3                              device = (unsigned char)(DDC_EEP_Addr_D >> 7) & 0x0e;
 116   3                              if((flag3 & BIT_2) != 0x00)
C51 COMPILER V7.50   IIC                                                                   03/18/2008 22:04:55 PAGE 3   

 117   3                                      printf("Load Digital EDID\r\n");
 118   3                      }
 119   2                      else{           //analog
 120   3                              flag2 |= BIT_7;
 121   3                              addr = (unsigned char)DDC_EEP_Addr_A;
 122   3                              device = (unsigned char)(DDC_EEP_Addr_A >> 7) & 0x0e;
 123   3                              if((flag3 & BIT_2) != 0x00)
 124   3                                      printf("Load Analog EDID\r\n");
 125   3                      }
 126   2              }
 127   1              else if(ddcsw == 1){    //analog
 128   2                      flag2 |= BIT_7;
 129   2                      addr = (unsigned char)DDC_EEP_Addr_A;
 130   2                      device = (unsigned char)(DDC_EEP_Addr_A >> 7) & 0x0e;
 131   2                      if((flag3 & BIT_2) != 0x00)
 132   2                              printf("Load Analog EDID\r\n");
 133   2              }
 134   1              else{           //digital
 135   2                      flag2 &= ~BIT_7;
 136   2                      addr = (unsigned char)DDC_EEP_Addr_D;
 137   2                      device = (unsigned char)(DDC_EEP_Addr_D >> 7) & 0x0e;
 138   2                      if((flag3 & BIT_2) != 0x00)
 139   2                              printf("Load Digital EDID\r\n");
 140   2              }
 141   1              device |= EEPROM;
 142   1      /* start bit */
 143   1      /* transmit device */
 144   1              INTIIC1_FLG = 0xff;
 145   1              IIC1_DATA = device;
 146   1              IIC1_CLK = 0x20 | IIC_BaudRate;
 147   1      /* transmit addr */
 148   1              MasterSendByte(addr);
 149   1      /* transmit dumy data for restart bit */
 150   1              WaitTx();
 151   1      /* stop bit */
 152   1              IIC1_CLK = 0xA0|IIC_BaudRate;
 153   1      //      IIC1_CON = 0x00;
 154   1      /* restart bit */
 155   1              WaitStop();
 156   1      /* transmit device */
 157   1              IIC1_DATA = device+1;
 158   1              IIC1_CLK = 0x60 | IIC_BaudRate;
 159   1              WaitTx();
 160   1      /* read data */
 161   1              for(i=0; i<128; i++){
 162   2                      if(i == 127)
 163   2                              IIC1_CON = 0x02;
 164   2                      else
 165   2                              IIC1_CON = 0x00;
 166   2                      *p = MasterReadByte();
 167   2                      p++;
 168   2              }
 169   1      /* no ack */
 170   1      /* stop bit */
 171   1      //      IIC1_CLK = 0xA0|IIC_BaudRate;
 172   1      //      IIC1_CON = 0x00;
 173   1              WaitStop();
 174   1              DDC_CTRL = (EN_DDC |WPT_DDC | CLR_UPD | CLR_PTR);
 175   1      //      if((flag3 & BIT_0) == 0)
 176   1      //              DDC_CTRL = (EN_DDC | WPT_DDC | MODE_DDC);
 177   1      //      else    
 178   1                      DDC_CTRL = (EN_DDC | MODE_DDC);
C51 COMPILER V7.50   IIC                                                                   03/18/2008 22:04:55 PAGE 4   

 179   1      }
 180          /*
 181          void SaveDDCData(unsigned char ddcsw)
 182          {
 183          unsigned char *p,i;
 184                  DDC_CTRL = (EN_DDC | MODE_DDC | CLR_UPD);       
 185                  Timer3 = DDC_DelayTime;
 186                  while(Timer3 != 0){
 187                          if((INTIIC0_FLG & INTSTOP) != 0){
 188                                  INTIIC0_FLG = INTSTOP;
 189                                  Timer3 = DDC_DelayTime;
 190                          }
 191                          if((DDC_REG & UPD_DDC) != 0){           //up date ddc
 192                                  DDC_CTRL = (EN_DDC | MODE_DDC | CLR_UPD);       
 193                                  Timer3 = DDC_DelayTime;
 194                          }
 195                  }
 196                  p = &DDCPtr;
 197                  if(ddcsw == 0){
 198                          if((PortC & BIT_1) == 0){       //digital
 199                                  for(i=0; i<128; i=i+16){
 200                                          do{
 201                                                  DDC_REG = WR_SUCC;
 202                                                  WritePage24C16(DDC_EEP_Addr_D+i,i,p);
 203                                                  if((DDC_REG & UPD_DDC) != 0){           //up date ddc
 204                                                          return;
 205                                                  }
 206                                          }while((DDC_REG & WR_SUCC) == 0);               //unsuccessful
 207                                  }
 208                          }
 209                          else{           //analog                                                                                         
             -                                 c
 210                                  for(i=0; i<128; i=i+16){
 211                                          do{
 212                                                  DDC_REG = WR_SUCC;
 213                                                  WritePage24C16(DDC_EEP_Addr_A+i,i,p);
 214                                                  if((DDC_REG & UPD_DDC) != 0){           //up date ddc
 215                                                          return;
 216                                                  }
 217                                          }while((DDC_REG & WR_SUCC) == 0);               //unsuccessful
 218                                  }
 219                          }
 220                  }
 221                  else if(ddcsw == 1){    //analog
 222                          for(i=0; i<128; i=i+16){
 223                                  do{
 224                                          DDC_REG = WR_SUCC;
 225                                          WritePage24C16(DDC_EEP_Addr_A+i,i,p);
 226                                          if((DDC_REG & UPD_DDC) != 0){           //up date ddc
 227                                                  return;
 228                                          }
 229                                  }while((DDC_REG & WR_SUCC) == 0);               //unsuccessful
 230                          }
 231                  }
 232                  else{                                   //digital
 233                          for(i=0; i<128; i=i+16){
 234                                  do{
 235                                          DDC_REG = WR_SUCC;
 236                                          WritePage24C16(DDC_EEP_Addr_D+i,i,p);
 237                                          if((DDC_REG & UPD_DDC) != 0){           //up date ddc
 238                                                  return;
 239                                          }
C51 COMPILER V7.50   IIC                                                                   03/18/2008 22:04:55 PAGE 5   

 240                                  }while((DDC_REG & WR_SUCC) == 0);               //unsuccessful
 241                          }
 242                  }
 243          }
 244          */
 245          void WriteIIC_HW(unsigned char device,unsigned char addr,unsigned char ch)
 246          {
 247   1      /* start bit */
 248   1      /* transmit device */
 249   1              INTIIC1_FLG = 0xff;
 250   1              IIC1_DATA = device;
 251   1              IIC1_CLK = 0x20 | IIC_BaudRate;
 252   1              IIC1_CON = 0x00;
 253   1      /* transmit addr */
 254   1              MasterSendByte(addr);
 255   1      /* transmit data */
 256   1              MasterSendByte(ch);
 257   1      /* transmit dumy data for stop bit */
 258   1              WaitTx();
 259   1      /* stop bit */
 260   1              IIC1_CLK = 0xA0|IIC_BaudRate;
 261   1      //      IIC1_CON = 0x00;
 262   1              Delay();
 263   1              WaitStop();
 264   1      }
 265          
 266          void MasterSendByte(unsigned char i)
 267          {
 268   1              Timer1 = 100;
 269   1              while((INTIIC1_FLG & INTTX) == 0){
 270   2                      if(Timer1 == 0){
 271   3                              if((flag3 & BIT_2) != 0x00){
 272   4                                      printf("ACK Fail2\r\n");
 273   4                              }
 274   3                              EA = 0;
 275   3                              break;
 276   3                      }
 277   2              } 
 278   1              INTIIC1_FLG = INTTX;
 279   1              IIC1_DATA = i;
 280   1      }
 281          
 282          void WaitTx(void)
 283          {
 284   1              Timer1 = 100;
 285   1              while((INTIIC1_FLG & INTTX) == 0){
 286   2                      if(Timer1 == 0){
 287   3                              if((flag3 & BIT_2) != 0x00){
 288   4                                      printf("ACK Fail3\r\n");
 289   4                              }
 290   3                              EA = 0;
 291   3                              break;
 292   3                      }
 293   2              } 
 294   1              INTIIC1_FLG = INTTX;

⌨️ 快捷键说明

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