/** * @brief Configures all needed resources (I2C, DCMI and DMA) to interface with * the OV9655 camera module * @param None * @retval 0x00 Camera module configured correctly * 0xFF Camera module configuration failed */ uint8_t DCMI_OV9655Config(void) { uint8_t readvalue; char str[8]; uint8_t opmask=MODE|LEN|OEN_TRI_SEL_MASK; /* I2C1 will be used for camera configuration */ I2C1_Config(); // - Read ID and check readvalue=DCMI_SingleRandomRead(OV9655_DEVICE_READ_ADDRESS,ID); sprintf(str,"ID=%x,",readvalue); USART_puts(USART2,str); //- Write opform register //Mode=0, Len=0, rest default tw9910_mask_set(OV9655_DEVICE_WRITE_ADDRESS, OPFORM, opmask, 0x00|OEN_TRI_SEL_ALL_ON); //- set resolution(vscale,hscale or vactive,hactive and vdelay hdelay) /* OV9655 Camera size setup */ DCMI_OV9655_QVGASizeSetup(); //- write the hsync vsync pin configuration(output control 0x05) DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS, OUTCTR1, 0x02);//**0x11,0x01,0x10? //- write clock DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS, OUTCTR2, 0x00); //- write vbi control register for invalid bit settings and Hactive enable tw9910_mask_set(OV9655_DEVICE_WRITE_ADDRESS,VBICNTL,0x18, 0x18);//Enable HA_EN**0,1? and cntl656 //- read and print status registers(Nicely! - normal status, detected format etc.) readvalue=DCMI_SingleRandomRead(OV9655_DEVICE_READ_ADDRESS,STATUS1); sprintf(str,"St1=%x,",readvalue); USART_puts(USART2,str); while((DCMI_SingleRandomRead(OV9655_DEVICE_READ_ADDRESS,STATUS1)&~0x10)!=0x68){ Delay(10); } readvalue=DCMI_SingleRandomRead(OV9655_DEVICE_READ_ADDRESS,STATUS1); sprintf(str,"St1=%x,",readvalue); // USART_puts(USART2,str); readvalue=DCMI_SingleRandomRead(OV9655_DEVICE_READ_ADDRESS,STATUS2); sprintf(str,"St2=%x,",readvalue); USART_puts(USART2,str); readvalue=DCMI_SingleRandomRead(OV9655_DEVICE_READ_ADDRESS,SDT); sprintf(str,"Sdt=%x\n",readvalue); USART_puts(USART2,str); /* Configure the DCMI to interface with the OV9655 camera module */ DCMI_Config(); return (0x00); }
/** * @brief Configures all needed resources (I2C, DCMI and DMA) to interface with * the OV9655 camera module * @param None * @retval 0x00 Camera module configured correctly * 0xFF Camera module configuration failed */ uint8_t DCMI_OV9655Config(void) { /* I2C1 will be used for OV9655 camera configuration */ I2C1_Config(); /* Reset and check the presence of the OV9655 camera module */ if (DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x12, 0x80)) { return (0xFF); } /* OV9655 Camera size setup */ DCMI_OV9655_QVGASizeSetup(); /* Set the RGB565 mode */ DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS, OV9655_COM7, 0x63); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS, OV9655_COM15, 0x10); /* Invert the HRef signal*/ DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS, OV9655_COM10, 0x08); /* Configure the DCMI to interface with the OV9655 camera module */ DCMI_Config(); return (0x00); }
/** * @brief Select the RGB format option * @param OV9665_RGBOption: the RGB Format option. * This parameter can be one of the following value: * @arg RGB_NORMAL * @arg RGB_565 * @arg RGB_555 * @retval None */ void DCMI_OV9655_SelectRGBOption(uint8_t OV9665_RGBOption) { DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS, OV9655_COM15, OV9665_RGBOption); }
/** * @brief Select the HREF Control signal option * @param OV9665_HREFControl: the HREF Control signal option. * This parameter can be one of the following value: * @arg OV9665_HREFControl_Opt1: HREF edge offset to data output. * @arg OV9665_HREFControl_Opt2: HREF end 3 LSB * @arg OV9665_HREFControl_Opt3: HREF start 3 LSB * @retval None */ void DCMI_OV9655_HREFControl(uint8_t OV9665_HREFControl) { DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS, OV9655_HREF, OV9665_HREFControl); }
/** * @brief Set the new value of OV9655 registers * @param OV9655_Register: the OV9655 Register to be configured. * @param Register_Val: The new value to be set * @retval None */ void DCMI_OV9655_SetRegister(uint8_t OV9655_Register, uint8_t Register_Val) { DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS, OV9655_Register, Register_Val); }
/** * @brief Select the Output Format Resolution. * @param OV9655_FormatResolution: the Resolution of the ouput Data. * This parameter can be one of the following values: * @arg FORMAT_CTRL_15fpsVGA * @arg FORMAT_CTRL_30fpsVGA_NoVArioPixel * @arg FORMAT_CTRL_30fpsVGA_VArioPixel * @retval None */ void DCMI_OV9655_SelectFormatResolution(uint8_t OV9655_FormatResolution) { DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS, OV9655_COM7, OV9655_FormatResolution); }
/** * @brief Select the Output Format. * @param OV9655_OuputFormat: the Format of the ouput Data. * This parameter can be one of the following values: * @arg OUTPUT_FORMAT_RAWRGB_DATA * @arg OUTPUT_FORMAT_RAWRGB_INTERP * @arg OUTPUT_FORMAT_YUV * @arg OUTPUT_FORMAT_RGB * @retval None */ void DCMI_OV9655_SelectOutputFormat(uint8_t OV9655_OuputFormat) { DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS, OV9655_COM7, OV9655_OuputFormat); }
/** * @brief Set the Internal Clock Prescaler. * @param OV9655_Prescaler: the new value of the prescaler. * This parameter can be a value between 0x0 and 0x1F * @retval None */ void DCMI_OV9655_SetPrescaler(uint8_t OV9655_Prescaler) { DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS, OV9655_CLKRC, OV9655_Prescaler); }
/** * @brief Set the QQVGA size(120*160). * @param None * @retval None */ void DCMI_OV9655_QQVGASizeSetup(void) { Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x00, 0x00); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x01, 0x80); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x02, 0x80); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x03, 0x02); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x04, 0x03); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x09, 0x01); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x0b, 0x57); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x0e, 0x61); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x0f, 0x40); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x11, 0x01); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x12, 0x62); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x13, 0xc7); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x14, 0x3a); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x16, 0x24); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x17, 0x18); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x18, 0x04); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x19, 0x01); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x1a, 0x81); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x1e, 0x20); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x24, 0x3c); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x25, 0x36); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x26, 0x72); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x27, 0x08); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x28, 0x08); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x29, 0x15); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x2a, 0x00); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x2b, 0x00); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x2c, 0x08); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x32, 0xa4); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x33, 0x00); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x34, 0x3f); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x35, 0x00); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x36, 0x3a); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x38, 0x72); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x39, 0x57); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x3a, 0xcc); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x3b, 0x04); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x3d, 0x99); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x3e, 0x0e); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x3f, 0xc1); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x40, 0xc0); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x41, 0x41); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x42, 0xc0); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x43, 0x0a); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x44, 0xf0); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x45, 0x46); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x46, 0x62); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x47, 0x2a); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x48, 0x3c); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x4a, 0xfc); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x4b, 0xfc); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x4c, 0x7f); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x4d, 0x7f); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x4e, 0x7f); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x4f, 0x98); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x50, 0x98); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x51, 0x00); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x52, 0x28); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x53, 0x70); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x54, 0x98); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x58, 0x1a); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x59, 0x85); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x5a, 0xa9); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x5b, 0x64); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x5c, 0x84); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x5d, 0x53); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x5e, 0x0e); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x5f, 0xf0); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x60, 0xf0); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x61, 0xf0); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x62, 0x00); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x63, 0x00); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x64, 0x02); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x65, 0x20); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x66, 0x00); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x69, 0x0a); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x6b, 0x5a); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x6c, 0x04); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x6d, 0x55); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x6e, 0x00); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x6f, 0x9d); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x70, 0x21); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x71, 0x78); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x72, 0x22); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x73, 0x02); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x74, 0x10); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x75, 0x10); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x76, 0x01); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x77, 0x02); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x7A, 0x12); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x7B, 0x08); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x7C, 0x16); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x7D, 0x30); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x7E, 0x5e); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x7F, 0x72); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x80, 0x82); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x81, 0x8e); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x82, 0x9a); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x83, 0xa4); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x84, 0xac); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x85, 0xb8); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x86, 0xc3); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x87, 0xd6); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x88, 0xe6); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x89, 0xf2); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x8a, 0x24); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x8c, 0x80); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x90, 0x7d); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x91, 0x7b); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x9d, 0x02); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x9e, 0x02); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0x9f, 0x7a); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0xa0, 0x79); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0xa1, 0x40); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0xa4, 0x50); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0xa5, 0x68); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0xa6, 0x4a); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0xa8, 0xc1); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0xa9, 0xef); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0xaa, 0x92); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0xab, 0x04); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0xac, 0x80); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0xad, 0x80); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0xae, 0x80); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0xaf, 0x80); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0xb2, 0xf2); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0xb3, 0x20); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0xb4, 0x20); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0xb5, 0x00); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0xb6, 0xaf); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0xb6, 0xaf); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0xbb, 0xae); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0xbc, 0x7f); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0xbd, 0x7f); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0xbe, 0x7f); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0xbf, 0x7f); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0xbf, 0x7f); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0xc0, 0xaa); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0xc1, 0xc0); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0xc2, 0x01); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0xc3, 0x4e); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0xc6, 0x05); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0xc7, 0x82); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0xc9, 0xe0); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0xca, 0xe8); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0xcb, 0xf0); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0xcc, 0xd8); Delay(TIMEOUT); DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS,0xcd, 0x93); Delay(TIMEOUT); }
/** * @brief Reset the OV9655 SCCB registers. * @param None * @retval None */ void DCMI_OV9655_Reset(void) { DCMI_SingleRandomWrite(OV9655_DEVICE_WRITE_ADDRESS, OV9655_COM7, SCCB_REG_RESET); }