📄 autofunc.lst
字号:
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 + -