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

📄 autofunc.lst

📁 MSTARXX.rar
💻 LST
📖 第 1 页 / 共 3 页
字号:
 631   4              }
 632   3      
 633   3              if (msAutoCheckSyncLoss()) // check no signal
 634   3                  return FALSE;
 635   3          } // for
 636   2      
 637   2          g_ModeSetting.Phase = ucBestPhase2;
 638   2      }
 639   1      #endif
 640   1      
 641   1      #ifdef AUTO_DEBUG_EN
                  printf("\r\nAuto Phase = %x", g_ModeSetting.Phase);
              #endif
 644   1          msAdjustAdcPhase(g_ModeSetting.Phase);
 645   1      
 646   1          return TRUE;
 647   1      }
 648          
 649          ///////////////////////////////////////////////////////////////////////////////
 650          // <Function>: msAutoTuneOffset
 651          //
 652          // <Description>: auto-tune R/G/B Offset.
 653          //
 654          // <Returns> : Success status.
 655          //
 656          // <Parameter>:  -  <Flow>  -  <Description>
 657          //-----------------------------------------------------------------------------
 658          //  ucVSyncTime  -    In    -   VSync time
 659          ///////////////////////////////////////////////////////////////////////////////
 660          BOOL msAutoTuneOffset(BYTE ucVSyncTime)
 661          {
 662   1          BYTE ucRedOffset = 0x80, ucGreenOffset = 0x80, ucBlueOffset = 0x80;
 663   1          BYTE ucOffsetDelta = 0x80; // adjust step
 664   1          BYTE ucATGStatus; // auto gain status
 665   1          BYTE ucFlowFlag = 0x00; // underflow or overflow flag
 666   1          BYTE ucBank;
 667   1      
 668   1          ucBank = msReadByte( BK0_00_REGBK);
 669   1      
 670   1      #ifdef AUTO_DEBUG_EN
C51 COMPILER V8.18   AUTOFUNC                                                              09/29/2009 23:58:04 PAGE 12  

                  putstr("\r\nAuto Offset:");
              #endif
 673   1      
 674   1          while(1)
 675   1          {
 676   2              ucOffsetDelta /= 2; // next
 677   2              if (ucOffsetDelta == 0x00) // check end
 678   2                  break;
 679   2      
 680   2              msAdjustAdcOffset(ucRedOffset, ucGreenOffset, ucBlueOffset); // program R/G/B offset
 681   2              Delay1ms_WatchDog(ucVSyncTime * 3); // wait stable
 682   2      
 683   2              msWriteByte( BK0_00_REGBK, REG_BANK_SCALER );
 684   2              msAutoWaitStatusReady(BK0_C8_ATGCTRL, _BIT1);
 685   2      
 686   2              ucATGStatus = msReadByte(BK0_C9_ATGST); // get auto gain status
 687   2      
 688   2              // red
 689   2              if (_bit2_(ucATGStatus))
 690   2              {
 691   3                  ucRedOffset += ucOffsetDelta;
 692   3                  ucFlowFlag |= _BIT0;
 693   3              }
 694   2              else
 695   2              {
 696   3                  ucRedOffset -= ucOffsetDelta;
 697   3                  ucFlowFlag |= _BIT1;
 698   3              }
 699   2      
 700   2              // green
 701   2              if (_bit1_(ucATGStatus))
 702   2              {
 703   3                  ucGreenOffset += ucOffsetDelta;
 704   3                  ucFlowFlag |= _BIT2;
 705   3              }
 706   2              else
 707   2              {
 708   3                  ucGreenOffset -= ucOffsetDelta;
 709   3                  ucFlowFlag |= _BIT3;
 710   3              }
 711   2      
 712   2              // blue
 713   2              if (_bit0_(ucATGStatus))
 714   2              {
 715   3                  ucBlueOffset += ucOffsetDelta;
 716   3                  ucFlowFlag |= _BIT4;
 717   3              }
 718   2              else
 719   2              {
 720   3                  ucBlueOffset -= ucOffsetDelta;
 721   3                  ucFlowFlag |= _BIT5;
 722   3              }
 723   2          } // while
 724   1      
 725   1          // adjust offset after auto-tune
 726   1          g_PcSetting.AdcRedOffset= ucRedOffset;
 727   1          g_PcSetting.AdcGreenOffset= ucGreenOffset;
 728   1          g_PcSetting.AdcBlueOffset= ucBlueOffset;
 729   1          msAdjustAdcOffset(g_PcSetting.AdcRedOffset, g_PcSetting.AdcGreenOffset, g_PcSetting.AdcBlueOffset);
 730   1      
 731   1          msWriteByte( BK0_00_REGBK, ucBank );
 732   1      
C51 COMPILER V8.18   AUTOFUNC                                                              09/29/2009 23:58:04 PAGE 13  

 733   1          if (ucFlowFlag == 0x3f)
 734   1             return TRUE;
 735   1          else
 736   1             return FALSE;
 737   1      }
 738          
 739          ///////////////////////////////////////////////////////////////////////////////
 740          // <Function>: msAutoTuneGain
 741          //
 742          // <Description>: auto-tune R/G/B gain.
 743          //
 744          // <Returns> : Success status.
 745          //
 746          // <Parameter>:  -  <Flow>  -  <Description>
 747          //-----------------------------------------------------------------------------
 748          //  ucVSyncTime  -    In    -   VSync time
 749          ///////////////////////////////////////////////////////////////////////////////
 750          BOOL msAutoTuneGain(BYTE ucVSyncTime)
 751          {
 752   1          BYTE ucRedGain = 0x80, ucGreenGain = 0x80, ucBlueGain = 0x80;
 753   1          BYTE ucGainDelta = 0x80; // adjust step
 754   1          BYTE ucATGStatus; // auto gain status
 755   1          BYTE ucFlowFlag = 0x00; // underflow or overflow flag
 756   1          BYTE ucResultR,ucResultB;
 757   1          BYTE ucBank;
 758   1      
 759   1          ucBank = msReadByte( BK0_00_REGBK);
 760   1      
 761   1      #ifdef AUTO_DEBUG_EN
                      putstr("\r\nAuto Gain:");
              #endif
 764   1      
 765   1          while(1)
 766   1          {
 767   2              ucGainDelta /= 2; // next
 768   2              if (ucGainDelta == 0x00) // check end
 769   2                  break;
 770   2      
 771   2              msAdjustAdcGain(ucRedGain, ucGreenGain, ucBlueGain); // program R/G/B gain
 772   2              Delay1ms_WatchDog(ucVSyncTime * 3); // wait stable
 773   2      
 774   2              msWriteByte( BK0_00_REGBK, REG_BANK_SCALER );
 775   2              msAutoWaitStatusReady(BK0_C8_ATGCTRL, _BIT1);
 776   2      
 777   2              ucATGStatus = msReadByte(BK0_C8_ATGCTRL); // get auto gain status
 778   2      #ifdef AUTO_PATCH_01
 779   2              msWriteByte(BK0_CA_ATFCHSEL, 0x03);
 780   2              ucResultR = msReadByte(BK0_CD_ATGVALUE);
 781   2              msWriteByte(BK0_CA_ATFCHSEL, 0x05);
 782   2              ucResultB = msReadByte(BK0_CD_ATGVALUE);
 783   2      
 784   2              if( ucResultR == 0xFF )
 785   2                  ucATGStatus |= _BIT7;
 786   2              else
 787   2                  ucATGStatus &= ~_BIT7;
 788   2      
 789   2              if( ucResultB == 0xFF )
 790   2                  ucATGStatus |= _BIT5;
 791   2              else
 792   2                  ucATGStatus &= ~_BIT5;
 793   2      #endif
 794   2      
C51 COMPILER V8.18   AUTOFUNC                                                              09/29/2009 23:58:04 PAGE 14  

 795   2              // red
 796   2              if (_bit7_(ucATGStatus))
 797   2              {
 798   3                  ucRedGain -= ucGainDelta;
 799   3                  ucFlowFlag |= _BIT0;
 800   3              }
 801   2              else
 802   2              {
 803   3                  ucRedGain += ucGainDelta;
 804   3                  ucFlowFlag |= _BIT1;
 805   3              }
 806   2      
 807   2              // green
 808   2              if (_bit6_(ucATGStatus))
 809   2              {
 810   3                  ucGreenGain -= ucGainDelta;
 811   3                  ucFlowFlag |= _BIT2;
 812   3              }
 813   2              else
 814   2              {
 815   3                  ucGreenGain += ucGainDelta;
 816   3                  ucFlowFlag |= _BIT3;
 817   3              }
 818   2      
 819   2              // blue
 820   2              if (_bit5_(ucATGStatus))
 821   2              {
 822   3                  ucBlueGain -= ucGainDelta;
 823   3                  ucFlowFlag |= _BIT4;
 824   3              }
 825   2              else
 826   2              {
 827   3                  ucBlueGain += ucGainDelta;
 828   3                  ucFlowFlag |= _BIT5;
 829   3              }
 830   2          } // while
 831   1      
 832   1          // adjust gain after auto-tune
 833   1          g_PcSetting.AdcRedGain= ucRedGain;
 834   1          g_PcSetting.AdcGreenGain= ucGreenGain;
 835   1          g_PcSetting.AdcBlueGain= ucBlueGain;
 836   1          msAdjustAdcGain(g_PcSetting.AdcRedGain, g_PcSetting.AdcGreenGain, g_PcSetting.AdcBlueGain);
 837   1      
 838   1          msWriteByte( BK0_00_REGBK, ucBank );
 839   1      
 840   1          if (ucFlowFlag == 0x3f)
 841   1             return TRUE;
 842   1          else
 843   1             return FALSE;
 844   1      }
 845          
 846          /*
 847          BOOL msAutoColorYUV(BYTE ucVSyncTime)
 848          {
 849              BYTE ucBank; // bank buffer
 850              BYTE ucRedGain, ucGreenGain, ucBlueGain, ucTmp, ucATGStatus, ucFlowFlag=0;
 851          
 852              ucBank = msReadByte(BK0_00_REGBK); // store bank
 853          
 854              msAdjustAdcOffset(0x7C, 0x7F, 0x7C); // Should be in default value
 855              msAdjustAdcGain(0x80, 0x80, 0x80);
 856              Delay1ms_WatchDog(ucVSyncTime*3);
C51 COMPILER V8.18   AUTOFUNC                                                              09/29/2009 23:58:04 PAGE 15  

 857          
 858              msWriteByte(BK0_00_REGBK, REG_BANK1_ADC_ACE_MCU);
 859              msWriteByte(BK1_18_CALEN, 0x1C); // CALEN
 860              Delay1ms_WatchDog(ucVSyncTime*3);
 861          
 862              ucRedGain = 130; // Should be SMPTE 75% color pattern
 863              ucGreenGain = 30;
 864              ucBlueGain = 130; // Should be SMPTE 75% color pattern
 865          
 866              msWriteByte(BK0_00_REGBK, REG_BANK_SCALER);
 867              for (ucTmp=0; ucTmp<0xFF; ucTmp++)
 868              {
 869                  msAdjustAdcGain(ucRedGain, ucGreenGain, ucBlueGain);
 870                  Delay1ms_WatchDog(ucVSyncTime*3);
 871                  msAutoWaitStatusReady(BK0_C8_ATGCTRL, _BIT1);
 872                  ucATGStatus = msReadByte(BK0_C8_ATGCTRL); // get auto gain status
 873          
 874                  // Red - Pr
 875                  if ( !(ucFlowFlag&_BIT0) )
 876                  {
 877                      if (_bit7_(ucATGStatus))
 878                      {
 879                          g_PcSetting.AdcRedGain= ucRedGain; // Save your ADC value
 880                          ucFlowFlag |= _BIT0;
 881                      }
 882                      else
 883                      {
 884                          ucRedGain++;
 885                          ucFlowFlag |= _BIT1;
 886                      }
 887                  }
 888          
 889                  // Green - Y
 890                  if ( !(ucFlowFlag&_BIT2) )
 891                  {
 892                      if (_bit6_(ucATGStatus))
 893                      {
 894                          g_PcSetting.AdcGreenGain= ucGreenGain; // Save your ADC value
 895                          ucFlowFlag |= _BIT2;
 896                      }
 897                      else
 898                      {
 899                          ucGreenGain++;
 900                          ucFlowFlag |= _BIT3;
 901                      }
 902                  }
 903          
 904                  // Blue - Pb
 905                  if ( !(ucFlowFlag&_BIT4) )
 906                  {
 907                      if (_bit5_(ucATGStatus))
 908                      {
 909                          g_PcSetting.AdcBlueGain = ucBlueGain; // Save your ADC value
 910                          ucFlowFlag |= _BIT4;
 911                      }
 912                      else
 913                      {
 914                          ucBlueGain++;
 915                          ucFlowFlag |= _BIT5;
 916                      }
 917                  }
 918          
C51 COMPILER V8.18   AUTOFUNC                                                              09/29/2009 23:58:04 PAGE 16  

 919                  if ( ucFlowFlag==0x3F )
 920                      break;
 921              }
 922          
 923              msWriteByte(BK0_00_REGBK, REG_BANK1_ADC_ACE_MCU);
 924              msWriteByte(BK1_18_CALEN, 0xFC); // CALEN
 925          
 926              msWriteByte(BK0_00_REGBK, ucBank);
 927          
 928              if (ucFlowFlag == 0x3f)
 929                 return TRUE;
 930              else
 931                 return FALSE;
 932          }
 933          */
 934          
 935          #endif


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   2359    ----
   CONSTANT SIZE    =     14    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      79
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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