娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2025年06月04日(星期三)

2018年06月04日 | S3C2440之Camera驅動代碼模板(RealView MDK)

發布者:ShimmeringStar 來源: eefocus關鍵字:S3C2440  Camera  驅動代碼模板 手機看文章 掃描二維碼
隨時隨地手機看文章

好記心不如爛筆頭,為方便以后查看代碼及代碼重復利用,這里貼出S3C2440 Camera驅動代碼。使用友善MINI2440開發板,開發環境為RealView MDK 4.22。

原始工程下載地址:點擊打開鏈接

最初,本人在網上下載了許多mini2440 camera驅動的代碼,但結果都不盡人意,因為這些代碼看起來都比較晦澀難懂,都是直接對寄存器進行位與位或操作,且有的代碼排版布局很亂,對初學者來說難度較大。由于本人接觸了STM32開發后,覺得STM32的庫函數給初學者提供了很大幫助,僅僅通過函數名及變量名就能知道當前操作的是哪個寄存器,這樣在閱讀代碼時就能很容易明白代碼的含義了,增強了程序的可讀性。由此啟發,本人也仿照STM32庫函數的風格,寫了一個基于S3C2440 CAMIF的庫函數,這樣當以后自己回過頭來再看自己寫的代碼時就能很快理解代碼的含義,也能幫助其他學習2440 camera的初學者,讓他們能更容易理解代碼的思路。


結構體定義:


  1. typedef struct   

  2. {  

  3.     //SOURCE FORMAT REGISTER  

  4.     u32 ITU601_656n;  

  5.     u32 UVOffset;  

  6.     u32 SourceHsize;  

  7.     u32 Order422;  

  8.     u32 SourceVsize;  

  9.   

  10.     //WINDOW OPTION REGISTER  

  11.     u32 WinOfsEn;  

  12.     u32 WinHorOfst;  

  13.     u32 WinVerOfst;  

  14.   

  15.     //GLOBAL CONTROL REGISTER  

  16.     u32 TestPattern;  

  17.     u32 InvPolCAMPCLK;  

  18.     u32 InvPolCAMVSYNC;  

  19.     u32 InvPolCAMHREF;  

  20.       

  21. }CAMIF_InitTypeDef;  

  22.   

  23.   

  24. typedef struct  

  25. {  

  26.     //Y START ADDRESS REGISTER  

  27.     u32 YStartAddr1;  

  28.     u32 YStartAddr2;  

  29.     u32 YStartAddr3;  

  30.     u32 YStartAddr4;  

  31.   

  32.     //Cb START ADDRESS REGISTER  

  33.     u32 CbStartAddr1;  

  34.     u32 CbStartAddr2;  

  35.     u32 CbStartAddr3;  

  36.     u32 CbStartAddr4;  

  37.   

  38.     //Cr START ADDRESS REGISTER  

  39.     u32 CrStartAddr1;  

  40.     u32 CrStartAddr2;  

  41.     u32 CrStartAddr3;  

  42.     u32 CrStartAddr4;  

  43.   

  44.     //CODEC TARGET FORMAT REGISTER  

  45.     u32 In422_Co;  

  46.     u32 Out422_Co;  

  47.     u32 TargetHsize_Co;  

  48.     u32 FlipMd_Co;  

  49.     u32 TargetVsize_Co;  

  50.   

  51.     //CODEC DMA CONTROL REGISTER  

  52.     u32 Yburst1_Co;  

  53.     u32 Yburst2_Co;  

  54.     u32 Cburst1_Co;  

  55.     u32 Cburst2_Co;  

  56.   

  57.     //CODEC PRE-SCALER CONTROL REGISTER  

  58.     u32 SHfactor_Co;  

  59.     u32 PreHorRatio_Co;  

  60.     u32 PreVerRatio_Co;  

  61.     u32 PreDstWidth_Co;  

  62.     u32 PreDstHeight_Co;  

  63.   

  64.     //CODEC MAIN-SCALER CONTROL REGISTER  

  65.     u32 ScalerBypass_Co;  

  66.     u32 ScaleUpDown_Co;  

  67.     u32 MainHorRatio_Co;  

  68.     u32 MainVerRatio_Co;  

  69.   

  70.     //CODEC DMA TARGET AREA REGISTER  

  71.     u32 TargetArea_Co;  

  72.   

  73. }CAMIF_CodecInitTypeDef;  

  74.   

  75.   

  76. typedef struct  

  77. {  

  78.     //RGB START ADDRESS REGISTER  

  79.     u32 RGBStartAddr1;  

  80.     u32 RGBStartAddr2;  

  81.     u32 RGBStartAddr3;  

  82.     u32 RGBStartAddr4;  

  83.   

  84.     //PREVIEW TARGET FORMAT REGISTER  

  85.     u32 TargetHsize_Pr;  

  86.     u32 FlipMd_Pr;  

  87.     u32 TargetVsize_Pr;  

  88.   

  89.     //PREVIEW DMA CONTROL REGISTER  

  90.     u32 RGBburst1_Pr;  

  91.     u32 RGBburst2_Pr;  

  92.   

  93.     //PREVIEW PRE-SCALER CONTROL REGISTER   

  94.     u32 SHfactor_Pr;  

  95.     u32 PreHorRatio_Pr;  

  96.     u32 PreVerRatio_Pr;  

  97.     u32 PreDstWidth_Pr;  

  98.     u32 PreDstHeight_Pr;  

  99.   

  100.     //PREVIEW MAIN-SCALER CONTROL REGISTER  

  101.     u32 RGBformat_Pr;  

  102.     u32 ScaleUpDown_Pr;  

  103.     u32 MainHorRatio_Pr;  

  104.     u32 MainVerRatio_Pr;  

  105.       

  106.     //PREVIEW DMA TARGET AREA REGISTER  

  107.     u32 TargetArea_Pr;  

  108.       

  109. }CAMIF_PreviewInitTypeDef;  



CAMIF接口的配置(主要寄存器的配置):


  1. void CAMIF_Config(unsigned int HorOfst, unsigned int VerOfst)  

  2. {  

  3.     CAMIF_InitTypeDef CAMIF_InitStruct;  

  4.     CAMIF_CodecInitTypeDef CAMIF_CoInitStruct;  

  5.     CAMIF_PreviewInitTypeDef CAMIF_PrInitStruct;  

  6.       

  7.     unsigned int mainburst, remainburst;  

  8.     unsigned int H_Shift, V_Shift;  

  9.     unsigned int PreHorRatio, PreVerRatio;  

  10.     unsigned int MainHorRatio, MainVerRatio;  

  11.     unsigned int SRC_Width, SRC_Height;  

  12.     unsigned int DST_Width, DST_Height;  

  13.   

  14. /*********************** global parameters ****************************/  

  15.     CAMIF_InitStruct.ITU601_656n = ITU_601;  

  16.     CAMIF_InitStruct.UVOffset = UVOffest_0;  

  17.     CAMIF_InitStruct.Order422 = Order_YCbYCr;  

  18.     CAMIF_InitStruct.SourceHsize = CAM_XSIZE;  

  19.     CAMIF_InitStruct.SourceVsize = CAM_YSIZE;  

  20.     CAMIF_InitStruct.WinOfsEn = (HorOfst || VerOfst) ? 1 : 0;  

  21.     CAMIF_InitStruct.WinHorOfst = HorOfst;  

  22.     CAMIF_InitStruct.WinVerOfst = VerOfst;  

  23.     CAMIF_InitStruct.TestPattern = Pattern_Normal;  

  24.     CAMIF_InitStruct.InvPolCAMPCLK = ENABLE;  

  25.     CAMIF_InitStruct.InvPolCAMHREF = DISABLE;  

  26.     CAMIF_InitStruct.InvPolCAMVSYNC = DISABLE;  

  27.     CAMIF_Init(&CAMIF_InitStruct);  

  28.   

  29. /*********************** preview scaler parameters ********************/  

  30.     CAMIF_PrInitStruct.RGBStartAddr1 = (u32)LCD_BUFFER;  

  31.     CAMIF_PrInitStruct.RGBStartAddr2 = (u32)LCD_BUFFER;  

  32.     CAMIF_PrInitStruct.RGBStartAddr3 = (u32)LCD_BUFFER;  

  33.     CAMIF_PrInitStruct.RGBStartAddr4 = (u32)LCD_BUFFER;  

  34.       

  35.     CAMIF_PrInitStruct.RGBformat_Pr = RGBformat_16;  

  36.     CAMIF_PrInitStruct.FlipMd_Pr = FlipMode_Xmirror;  

  37.     CAMIF_PrInitStruct.TargetHsize_Pr = LCD_XSIZE;  

  38.     CAMIF_PrInitStruct.TargetVsize_Pr = LCD_YSIZE;  

  39.     CAMIF_PrInitStruct.TargetArea_Pr = LCD_XSIZE * LCD_YSIZE;  

  40.       

  41.     CalcBurstSize(LCD_XSIZE * 2, &mainburst, &remainburst);  

  42.     CAMIF_PrInitStruct.RGBburst1_Pr = mainburst;  

  43.     CAMIF_PrInitStruct.RGBburst2_Pr = remainburst;  

  44.       

  45.     SRC_Width = CAM_XSIZE - (2 * HorOfst);  

  46.     SRC_Height = CAM_YSIZE - (2 * VerOfst);  

  47.     DST_Width = LCD_XSIZE;  

  48.     DST_Height = LCD_YSIZE;  

  49.     CalcPrescaleParam(SRC_Width, DST_Width, &PreHorRatio, &H_Shift);  

  50.     CalcPrescaleParam(SRC_Height, DST_Height, &PreVerRatio, &V_Shift);  

  51.     CAMIF_PrInitStruct.SHfactor_Pr = 10 - H_Shift - V_Shift;  

  52.     CAMIF_PrInitStruct.PreHorRatio_Pr = PreHorRatio;  

  53.     CAMIF_PrInitStruct.PreVerRatio_Pr = PreVerRatio;  

  54.     CAMIF_PrInitStruct.PreDstWidth_Pr = SRC_Width / PreHorRatio;  

  55.     CAMIF_PrInitStruct.PreDstHeight_Pr = SRC_Height / PreVerRatio;  

  56.       

  57.     MainHorRatio=(SRC_Width << 8) / (DST_Width << H_Shift);  

  58.     MainVerRatio=(SRC_Height << 8) / (DST_Height << V_Shift);  

  59.     CAMIF_PrInitStruct.MainHorRatio_Pr = MainHorRatio;  

  60.     CAMIF_PrInitStruct.MainVerRatio_Pr = MainVerRatio;  

  61.     CAMIF_PrInitStruct.ScaleUpDown_Pr = (SRC_Width <= DST_Width) ? ScaleUp : ScaleDown;  

  62.   

  63.     CAMIF_PreviewInit(&CAMIF_PrInitStruct);  

  64.   

  65. /******************* codec scaler parameters **************************/  

  66.     CAMIF_CoInitStruct.YStartAddr1 = (u32)CaptureY_Buf;  

  67.     CAMIF_CoInitStruct.YStartAddr2 = (u32)CaptureY_Buf;  

  68.     CAMIF_CoInitStruct.YStartAddr3 = (u32)CaptureY_Buf;  

  69.     CAMIF_CoInitStruct.YStartAddr4 = (u32)CaptureY_Buf;  

  70.     CAMIF_CoInitStruct.CbStartAddr1 = (u32)CaptureCb_Buf;  

  71.     CAMIF_CoInitStruct.CbStartAddr2 = (u32)CaptureCb_Buf;  

  72.     CAMIF_CoInitStruct.CbStartAddr3 = (u32)CaptureCb_Buf;  

  73.     CAMIF_CoInitStruct.CbStartAddr4 = (u32)CaptureCb_Buf;  

  74.     CAMIF_CoInitStruct.CrStartAddr1 = (u32)CaptureCr_Buf;  

  75.     CAMIF_CoInitStruct.CrStartAddr2 = (u32)CaptureCr_Buf;  

  76.     CAMIF_CoInitStruct.CrStartAddr3 = (u32)CaptureCr_Buf;  

  77.     CAMIF_CoInitStruct.CrStartAddr4 = (u32)CaptureCr_Buf;  

  78.   

  79.     CAMIF_CoInitStruct.In422_Co = YCbCr_422;  

  80.     CAMIF_CoInitStruct.Out422_Co = YCbCr_422;  

  81.     CAMIF_CoInitStruct.FlipMd_Co = FlipMode_Xmirror;  

  82.     CAMIF_CoInitStruct.TargetHsize_Co = LCD_XSIZE;  

  83.     CAMIF_CoInitStruct.TargetVsize_Co = LCD_YSIZE;  

  84.     CAMIF_CoInitStruct.TargetArea_Co = LCD_XSIZE * LCD_YSIZE;  

  85.       

  86.     CalcBurstSize(LCD_XSIZE, &mainburst, &remainburst);  

  87.     CAMIF_CoInitStruct.Yburst1_Co = mainburst;  

  88.     CAMIF_CoInitStruct.Yburst2_Co = remainburst;  

  89.     CalcBurstSize(LCD_YSIZE/2, &mainburst, &remainburst);  

  90.     CAMIF_CoInitStruct.Cburst1_Co = mainburst;  

  91.     CAMIF_CoInitStruct.Cburst2_Co = remainburst;  

  92.   

  93.     SRC_Width = CAM_XSIZE - (2 * HorOfst);  

  94.     SRC_Height = CAM_YSIZE - (2 * VerOfst);  

  95.     DST_Width = LCD_XSIZE;  

  96.     DST_Height = LCD_YSIZE;  

  97.     CalcPrescaleParam(SRC_Width, DST_Width, &PreHorRatio, &H_Shift);  

  98.     CalcPrescaleParam(SRC_Height, DST_Height, &PreVerRatio, &V_Shift);  

  99.     CAMIF_CoInitStruct.SHfactor_Co = 10 - H_Shift - V_Shift;  

  100.     CAMIF_CoInitStruct.PreHorRatio_Co = PreHorRatio;  

  101.     CAMIF_CoInitStruct.PreVerRatio_Co = PreVerRatio;  

  102.     CAMIF_CoInitStruct.PreDstWidth_Co = SRC_Width / PreHorRatio;  

  103.     CAMIF_CoInitStruct.PreDstHeight_Co = SRC_Height / PreVerRatio;  

  104.   

  105.     MainHorRatio=(SRC_Width << 8) / (DST_Width << H_Shift);  

  106.     MainVerRatio=(SRC_Height << 8) / (DST_Height << V_Shift);  

  107.     CAMIF_CoInitStruct.MainHorRatio_Co = MainHorRatio;  

  108.     CAMIF_CoInitStruct.MainVerRatio_Co = MainVerRatio;  

  109.     CAMIF_CoInitStruct.ScaleUpDown_Co = (SRC_Width <= DST_Width) ? ScaleUp : ScaleDown;  

  110.     CAMIF_CoInitStruct.ScalerBypass_Co = DISABLE;  

  111.   

  112.     CAMIF_CodecInit(&CAMIF_CoInitStruct);  

  113. }  


CAMIF_Init函數,實現對全局參數寄存器的配置:


  1. void CAMIF_Init(CAMIF_InitTypeDef *pInitStruct)  

  2. {  

  3.     //SOURCE FORMAT REGISTER  

  4.     rCISRCFMT &= ~(0x1FFF << 0);   

  5.     rCISRCFMT |= (pInitStruct->SourceVsize << 0);  

  6.   

  7.     rCISRCFMT &= ~(3 << 14);  

  8.     rCISRCFMT |= (pInitStruct->Order422 << 14);  

  9.   

  10.     rCISRCFMT &= ~(0x1FFF << 16);   

  11.     rCISRCFMT |= (pInitStruct->SourceHsize << 16);  

  12.   

  13.     rCISRCFMT &= ~(1 << 30);  

  14.     rCISRCFMT |= (pInitStruct->UVOffset << 30);  

  15.   

  16.     rCISRCFMT &= ~(1 << 31);  

  17.     rCISRCFMT |= (pInitStruct->ITU601_656n << 31);  

  18.   

  19.     //WINDOW OPTION REGISTER  

  20.     rCIWDOFST &= ~(0x7FF << 0);  

  21.     rCIWDOFST |= (pInitStruct->WinVerOfst << 0);  

  22.   

  23.     rCIWDOFST &= ~(0x7FF << 16);  

  24.     rCIWDOFST |= (pInitStruct->WinHorOfst << 16);  

  25.   

  26.     rCIWDOFST &= ~(1 << 31);  

  27.     rCIWDOFST |= (pInitStruct->WinOfsEn << 31);  

  28.   

  29.     //GLOBAL CONTROL REGISTER  

  30.     rCIGCTRL &= ~(1 << 24);  

  31.     rCIGCTRL |= (pInitStruct->InvPolCAMVSYNC << 24);  

  32.   

  33.     rCIGCTRL &= ~(1 << 25);  

  34.     rCIGCTRL |= (pInitStruct->InvPolCAMHREF << 25);  

  35.   

  36.     rCIGCTRL &= ~(1 << 26);  

  37.     rCIGCTRL |= (pInitStruct->InvPolCAMPCLK << 26);  

  38.   

  39.     rCIGCTRL &= ~(3 << 27);  

  40.     rCIGCTRL |= (pInitStruct->TestPattern << 27);  

  41.   

  42.     rCIGCTRL |= (1 << 29);  

  43. }  


CAMIF_PreviewInit函數,實現對Preview參數寄存器的配置:



  1. void CAMIF_PreviewInit(CAMIF_PreviewInitTypeDef *pPreInitStruct)  

  2. {  

  3.     //RGB START ADDRESS REGISTER  

  4.     rCIPRCLRSA1 = pPreInitStruct->RGBStartAddr1;  

  5.     rCIPRCLRSA2 = pPreInitStruct->RGBStartAddr2;  

  6.     rCIPRCLRSA3 = pPreInitStruct->RGBStartAddr3;  

  7.     rCIPRCLRSA4 = pPreInitStruct->RGBStartAddr4;  

  8.   

  9.     //PREVIEW TARGET FORMAT REGISTER  

  10.     rCIPRTRGFMT &= ~(0x1FFF << 0);  

  11.     rCIPRTRGFMT |= (pPreInitStruct->TargetVsize_Pr << 0);  

  12.   

  13.     rCIPRTRGFMT &= ~(3 << 14);  

  14.     rCIPRTRGFMT |= (pPreInitStruct->FlipMd_Pr << 14);  

  15.   

  16.     rCIPRTRGFMT &= ~(0x1FFF << 16);   

  17.     rCIPRTRGFMT |= (pPreInitStruct->TargetHsize_Pr << 16);  

  18.   

  19.     //PREVIEW DMA CONTROL REGISTER  

  20.     rCIPRCTRL &= ~(1 << 2);  

  21.   

  22.     rCIPRCTRL &= ~(0x1F << 14);   

  23.     rCIPRCTRL |= (pPreInitStruct->RGBburst2_Pr << 14);  

  24.   

  25.     rCIPRCTRL &= ~(0x1F << 19);   

  26.     rCIPRCTRL |= (pPreInitStruct->RGBburst1_Pr << 19);  

  27.   

  28.     //PREVIEW PRE-SCALER CONTROL REGISTER  

  29.     rCIPRSCPRERATIO &= ~(0x7F << 0);  

  30.     rCIPRSCPRERATIO |= (pPreInitStruct->PreVerRatio_Pr << 0);  

  31.   

  32.     rCIPRSCPRERATIO &= ~(0x7F << 16);  

  33.     rCIPRSCPRERATIO |= (pPreInitStruct->PreHorRatio_Pr << 16);  

  34.   

  35.     rCIPRSCPRERATIO &= ~(0xF << 28);  

  36.     rCIPRSCPRERATIO |= (pPreInitStruct->SHfactor_Pr << 28);  

  37.   

  38.     rCIPRSCPREDST &= ~(0xFFF << 0);  

  39.     rCIPRSCPREDST |= (pPreInitStruct->PreDstHeight_Pr << 0);  

  40.   

  41.     rCIPRSCPREDST &= ~(0xFFF << 16);  

  42.     rCIPRSCPREDST |= (pPreInitStruct->PreDstWidth_Pr << 16);  

  43.   

  44.     //PREVIEW MAIN-SCALER CONTROL REGISTER  

  45.     rCIPRSCCTRL &= ~(0x1FF << 0);  

  46.     rCIPRSCCTRL |= (pPreInitStruct->MainVerRatio_Pr << 0);  

  47.   

  48.     rCIPRSCCTRL &= ~(1 << 15);  

  49.   

  50.     rCIPRSCCTRL &= ~(0x1FF << 16);  

  51.     rCIPRSCCTRL |= (pPreInitStruct->MainHorRatio_Pr << 16);  

  52.   

  53.     rCIPRSCCTRL &= ~(3 << 28);  

  54.     rCIPRSCCTRL |= (pPreInitStruct->ScaleUpDown_Pr << 28);  

  55.   

  56.     rCIPRSCCTRL &= ~(1 << 30);  

  57.     rCIPRSCCTRL |= (pPreInitStruct->RGBformat_Pr << 30);  

  58.   

  59.     rCIPRSCCTRL |= (1 << 31);  

  60.   

  61.     //PREVIEW DMA TARGET AREA REGISTER  

  62.     rCIPRTAREA = pPreInitStruct->TargetArea_Pr;  

  63. }  


CAMIF_CodecInit函數,實現對Codec參數寄存器的配置:


  1. void CAMIF_CodecInit(CAMIF_CodecInitTypeDef *pCoInitStruct)  

  2. {  

  3.     //Y START ADDRESS REGISTER  

  4.     rCICOYSA1 = (u32)pCoInitStruct->YStartAddr1;  

  5.     rCICOYSA2 = (u32)pCoInitStruct->YStartAddr2;  

  6.     rCICOYSA3 = (u32)pCoInitStruct->YStartAddr3;  

  7.     rCICOYSA4 = (u32)pCoInitStruct->YStartAddr4;  

  8.   

  9.     //CB START ADDRESS REGISTER  

  10.     rCICOCBSA1 = (u32)pCoInitStruct->CbStartAddr1;  

  11.     rCICOCBSA2 = (u32)pCoInitStruct->CbStartAddr2;  

  12.     rCICOCBSA3 = (u32)pCoInitStruct->CbStartAddr3;  

  13.     rCICOCBSA4 = (u32)pCoInitStruct->CbStartAddr4;  

  14.   

  15.     //CR START ADDRESS REGISTER  

  16.     rCICOCRSA1 = (u32)pCoInitStruct->CrStartAddr1;  

  17.     rCICOCRSA2 = (u32)pCoInitStruct->CrStartAddr2;  

  18.     rCICOCRSA3 = (u32)pCoInitStruct->CrStartAddr3;  

  19.     rCICOCRSA4 = (u32)pCoInitStruct->CrStartAddr4;  

  20.   

  21.     //CODEC TARGET FORMAT REGISTER  

  22.     rCICOTRGFMT &= ~(0x1FFF << 0);  

  23.     rCICOTRGFMT |= (pCoInitStruct->TargetVsize_Co << 0);  

  24.   

  25.     rCICOTRGFMT &= ~(3 << 14);  

  26.     rCICOTRGFMT |= (pCoInitStruct->FlipMd_Co << 14);  

  27.   

  28.     rCICOTRGFMT &= ~(0x1FFF << 16);  

  29.     rCICOTRGFMT |= (pCoInitStruct->TargetHsize_Co << 16);  

  30.   

  31.     rCICOTRGFMT &= ~(1 << 30);  

  32.     rCICOTRGFMT |= (pCoInitStruct->Out422_Co << 30);  

  33.   

  34.     rCICOTRGFMT &= ~(1 << 31);  

  35.     rCICOTRGFMT |= (pCoInitStruct->In422_Co << 31);  

  36.   

  37.     //CODEC DMA CONTROL REGISTER  

  38.     rCICOCTRL &= ~(1 << 2);  

  39.   

  40.     rCICOCTRL &= ~(0x1F << 4);  

  41.     rCICOCTRL |= (pCoInitStruct->Cburst2_Co << 4);  

  42.   

  43.     rCICOCTRL &= ~(0x1F << 9);  

  44.     rCICOCTRL |= (pCoInitStruct->Cburst1_Co << 9);  

  45.   

  46.     rCICOCTRL &= ~(0x1F << 14);  

  47.     rCICOCTRL |= (pCoInitStruct->Yburst2_Co << 14);  

  48.   

  49.     rCICOCTRL &= ~(0x1F << 19);  

  50.     rCICOCTRL |= (pCoInitStruct->Yburst1_Co << 19);  

  51.   

  52.     //CODEC PRE-SCALER CONTROL REGISTER  

  53.     rCICOSCPRERATIO &= ~(0x7F << 0);  

  54.     rCICOSCPRERATIO |= (pCoInitStruct->PreVerRatio_Co << 0);  

  55.   

  56.     rCICOSCPRERATIO &= ~(0x7F << 16);  

  57.     rCICOSCPRERATIO |= (pCoInitStruct->PreHorRatio_Co << 16);  

  58.   

  59.     rCICOSCPRERATIO &= ~(0xF << 28);  

  60.     rCICOSCPRERATIO |= (pCoInitStruct->SHfactor_Co << 28);  

  61.   

  62.     rCICOSCPREDST &= ~(0xFFF << 0);  

  63.     rCICOSCPREDST |= (pCoInitStruct->PreDstHeight_Co << 0);  

  64.   

  65.     rCICOSCPREDST &= ~(0xFFF << 16);  

  66.     rCICOSCPREDST |= (pCoInitStruct->PreDstWidth_Co << 16);  

  67.   

  68.     //CODEC MAIN-SCALER CONTROL REGISTER  

  69.     rCICOSCCTRL &= ~(0x1FF << 0);  

  70.     rCICOSCCTRL |= (pCoInitStruct->MainVerRatio_Co << 0);  

  71.   

  72.     rCICOSCCTRL &= ~(1 << 15);  

  73.   

  74.     rCICOSCCTRL &= ~(0x1FF << 16);  

  75.     rCICOSCCTRL |= (pCoInitStruct->MainHorRatio_Co << 16);  

  76.   

  77.     rCICOSCCTRL &= ~(3 << 29);  

  78.     rCICOSCCTRL |= (pCoInitStruct->ScaleUpDown_Co << 29);  

  79.   

  80.     rCICOSCCTRL &= ~(1 << 31);  

  81.     rCICOSCCTRL |= (pCoInitStruct->ScalerBypass_Co << 31);  

  82.   

  83.     //CODEC DMA TARGET AREA REGISTER  

  84.     rCICOTAREA = pCoInitStruct->TargetArea_Co;  

  85. }  


開啟Preview:


  1. void CAMIF_StartPreview(void)  

  2. {  

  3.     rCIPRSCCTRL |= (1 << 15);  

  4.     rCIIMGCPT |= (1 << 29);  

  5.     rCIIMGCPT |= (1 << 31);  

  6. }  


開啟Codec:


  1. void CAMIF_StartCapture(void)  

  2. {  

  3.     rCICOSCCTRL |= (1 << 15);  

  4.     rCIIMGCPT |= (1 << 30);  

  5.     rCIIMGCPT |= (1 << 31);  

  6. }  


Camera sensor模塊初始化時調用順序:


  1. void OV9650_Init(void)  

  2. {  

  3.     CAMIF_Clock_Init();  

  4.     CAMIF_GPIO_Config();  

  5.     CAMIF_ResetIF();  

  6.     CAMIF_ResetMoudle();  

  7.     CAMIF_Config(0, 0);  

  8.     SCCB_Init();  

  9.     OV9650_CheckPID();  

  10.     OV9650_Config();  

  11.     CAMIF_StartPreview();  

  12.     CAMIF_StartCapture();  

  13. }  


執行到這里,你的LCD上就能顯示預覽的圖像了。關于更詳細的代碼,請下載源碼工程自行研究。


關鍵字:S3C2440  Camera  驅動代碼模板 引用地址:S3C2440之Camera驅動代碼模板(RealView MDK)

上一篇:STM32F429 CAN2通信
下一篇:S3C2440之UART驅動代碼模板(RealView MDK)

推薦閱讀

據印度媒體報道,中國智能手機制造商酷派(Coolpad)或將向印度法院提起訴訟,指控競爭對手小米公司專利侵權。今年1月以來,酷派在中國國內已經向兩家不同的法院提起了7起這樣的訴訟。酷派首席知識產權官張娜(Nancy Zhang)對印度經濟時報表示,印度法律保護專利持有者的權益,因此這個南亞國家的法院就成為酷派強有力的訴訟選擇。她引用愛立信起訴小米作為...
進入6月,以“防風險、除隱患、遏事故”為主題的“安全生產月”和“安全生產萬里行”活動在全國拉開序幕。對于電網企業,安全是必須堅守的。當前,全球電力發展面臨的環境越來越復雜。本文結合近年來重大停電事故,剖析電網發展面臨的新局面和風險點,并結合專家觀點提出應對建議。 今年6月是全國第十八個“安全生產月”,各行各業都要開展相關安全...
89C51芯片沒有自帶PWM發生器,如果要用51來產生PWM波就必須要用軟件編程的方法來模擬。方法大概可以分為軟件延時和定時器產生兩種方法。下面將逐一介紹。1 軟件延時法利用軟件延時函數,控制電平持續的時間,達到模擬pwm的效果。程序如下:#includesbit pwm=P1^0;main(){while(1){pwm=1;delayus(60);//置高電平后延時60us,占空比60%pwm=0;delayus(40);}...
集微網報道,歷時一年多的“缺芯潮”,目前還未有緩解之勢。期間,汽車廠商無疑“受傷”最重。從美國的福特和通用汽車,英國的本田車廠再到中國的電動汽車制造商蔚來,這些大廠都因為汽車芯片短缺,不得不削減汽車產量。為了緩解車用芯片危機,今年初,德國、日本及美國紛紛求助臺積電等晶圓代工廠協助本國汽車芯片生產。在政府的干預下,臺積電也表示正重...

史海拾趣

問答坊 | AI 解惑

8962以太網學習筆記

因為單位封了博客....所以只能在論壇記錄每天的工作內容了...初學水平大家見諒...主要目的是為了督促自己   使用LM3S8962 開發板 學習以太網的相關開發   8962集成了mac 和 phy 貌似沒有協議棧, 現在還沒看懂例程的lwip 所以索性先隨 ...…

查看全部問答∨

修改調試串口的問題,我該怎么改啊?

原來開發板給的是將物理串口0作為調試串口,現在我想把調試串口改為由串口1來做調試輸出,我的物理串口1需要使用別的通信,這個該怎么該啊,請教各位了。…

查看全部問答∨

s3c2410 CE6.0 三個串口使用問題

三星s3c2410手冊上寫了支持3個串口,但是一般的bsp上帶的只有2個串口的驅動,系統調試過程中還需要占用其中一個串口。 小弟初學,不知道怎么驅動第三個串口? 現在三個串口都需要使用,需要將系統調試占用的串口也進行回收使用,不讓其作為調試信 ...…

查看全部問答∨

電子技術基礎布置的一些作業,大家討論下,分不夠在加

請回答時能加上哪張圖和標題,麻煩了謝謝。分不夠我在加。 [img=http://pic.wenwen.soso.com/p/20100615/20100615121134-105367426.jpg[/img]…

查看全部問答∨

我用EVC下載到PDA上時提示the arm unknown cpu does not support configuration test - win32(

我用EVC下載到PDA上時提示the arm unknown cpu does not support configuration  test - win32(wce armv4)…

查看全部問答∨

為什么窗口函數放在含非主函數的.cpp文件下屬性頁就彈不出來??

為什么創建屬性頁的WM_command函數(LPARAM CommandShowProp())放在主函數WINMAIN的.cpp文件 中可以用彈出屬性頁,把函數(LPARAM CommandShowProp())放在其他.cpp函數下屬性頁就彈不出來??…

查看全部問答∨

電路分析

本人菜鳥,求大俠幫忙分析下面這個簡單的電路....盡量詳盡,感激不盡!!…

查看全部問答∨

STM8S已經量產了!我還以為沒樣品呢,看來信息閉塞啊。

                                 問代理才知道。。…

查看全部問答∨
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 东光县| 灌南县| 金门县| 永顺县| 防城港市| 芮城县| 安康市| 呈贡县| 铜鼓县| 昌都县| 渑池县| 台东县| 军事| 平潭县| 溆浦县| 通州区| 五河县| 凯里市| 黄浦区| 博爱县| 镇巴县| 榆树市| 三明市| 泗阳县| 镇坪县| 延川县| 棋牌| 乾安县| 石柱| 衡水市| 罗源县| 巨鹿县| 凤城市| 沂源县| 民乐县| 永新县| 明水县| 札达县| 古丈县| 随州市| 富锦市|