HEAD
/* ------------------------------------------------------------ */ ======= 星星之火,可以燎原
/* ------------------------------------------------------------ */ >>>>>>> 4ef99384a791603d1ae54a12162221aa23eb330e /* Include File Definitions */ /* ------------------------------------------------------------ */ #include "display_demo.h" #include <stdio.h> #include "math.h" #include <ctype.h> #include <stdlib.h> #include "xil_types.h" #include "xil_cache.h" #include "xparameters.h" #include "xiicps.h" #include "vdma.h" #include "i2c/PS_i2c.h" #include "xgpiops.h" #include "sleep.h" #include "dp/dp.h" #include "ov5640.h" #include "config.h" #include "demosaic.h" #include "gamma_lut.h" #if P1080 == 1 #define HORSIZE 1920*4 #define VERSIZE 1080 #else #define HORSIZE 1280*4 #define VERSIZE 720 #endif #define CAM_EMIO 78 /* ------------------------------------------------------------ */ /* Global Variables */ /* ------------------------------------------------------------ */ /* * Display Driver structs */ XIicPs ps_i2c0; XGpioPs Gpio; /* * Framebuffers for video data */ u8 frameBuf[DISPLAY_NUM_FRAMES][DEMO_MAX_FRAME] __attribute__ ((aligned(256)));//字节对齐,提高读取效率 u8 *pFrames[DISPLAY_NUM_FRAMES]; //array of pointers to the frame buffers int PsGpioSetup() ; int main(void) { int Status; int i ; //直接将cache关闭,这时不使用cache,无论是CPU还是PL都是直接更新DDR中的数据,所以不存在Cache一致性的问题。 Xil_DCacheDisable(); Xil_ICacheDisable(); /* * Initialize an array of pointers to the 3 frame buffers */ for (i = 0; i < DISPLAY_NUM_FRAMES; i++) { pFrames[i] = frameBuf[i]; //C 库函数 void *memset(void *str, int c, size_t n) //复制字符 c(一个无符号字符)到参数 str 所指向的字符串的前 n 个字符。 //此处用于初始化分配到的空间 memset(pFrames[i], 0, DEMO_MAX_FRAME); } //初始化CAMERA引脚 PsGpioSetup() ; /* * Reset sensor/复位CAMERA引脚 */ XGpioPs_WritePin(&Gpio, CAM_EMIO, 0) ; usleep(1000000); XGpioPs_WritePin(&Gpio, CAM_EMIO, 1) ; usleep(1000000); i2c_init(&ps_i2c0, XPAR_XIICPS_0_DEVICE_ID,100000); /* * DP dma demo */ xil_printf("DPDMA Generic Video Example Test \r\n"); Status = DpdmaVideoExample(&RunCfg, pFrames[0]); if (Status != XST_SUCCESS) { xil_printf("DPDMA Video Example Test Failed\r\n"); return XST_FAILURE; } gamma_lut_init(); demosaic_init(); /* Start Sensor Vdma */ vdma_write_init(XPAR_AXIVDMA_0_DEVICE_ID,HORSIZE,VERSIZE,DEMO_STRIDE,(unsigned int)pFrames[0]); /* * Initialize Sensor */ sensor_init(&ps_i2c0); return 0; } int PsGpioSetup() { XGpioPs_Config *GPIO_CONFIG ; int Status ; GPIO_CONFIG = XGpioPs_LookupConfig(XPAR_XGPIOPS_0_DEVICE_ID) ; Status = XGpioPs_CfgInitialize(&Gpio, GPIO_CONFIG, GPIO_CONFIG->BaseAddr) ; if (Status != XST_SUCCESS) { return XST_FAILURE ; } /* set MIO 54 as output */ XGpioPs_SetDirectionPin(&Gpio, CAM_EMIO, 1) ; XGpioPs_SetOutputEnablePin(&Gpio, CAM_EMIO, 1); return XST_SUCCESS ; }