Hi jingpan,
I know that vsync generates two times, first is start of frame and second is end of frame meanwhile two time vsync pulse generates for one frame am I right ??
I have added below code for vsync interrupt till I am getting image data slightly shift from left side as attached image.
How to moniter CITER value in debug ?
Void main()
{
stop=1;
start=0;
while (1)
{
while(stop)
{
FLEXIO_Ov7670StartCapture(1);
}
Stop=1; // again start capture
}
}
void BOARD_VSYNC_IRQHandler(void)
{
PORT_Type *portBase[] = PORT_BASE_PTRS;
PORT_ClearPinsInterruptFlags(portBase[BOARD_VSYNC_PORT_INDEX], 1U << BOARD_VSYNC_PIN_INDEX);
// printf("v pulse\n");
FLEXIO_Ov7670AsynCallback();
}
void FLEXIO_Ov7670StartCapture(uint8_t bufferIndex)
{
s_FlexioStartCapture = bufferIndex;
}
void FLEXIO_Ov7670AsynCallback(void)
{
FLEXIO_CAMERA_ClearStatusFlags(&s_FlexioCameraDevice,
kFLEXIO_CAMERA_RxDataRegFullFlag | kFLEXIO_CAMERA_RxErrorFlag);
FLEXIO_CAMERA_EnableRxDMA(&s_FlexioCameraDevice, false);
if (s_FlexioStartCapture > 0 && start<10)
{
start=start+1;
/* Reset the EDMA source, dest address and transfer counter to sync picture frame */
DMA0->TCD[FLEXIO_DMA_CHANNEL].SADDR = FLEXIO_CAMERA_GetRxBufferAddress(&s_FlexioCameraDevice);
DMA0->TCD[FLEXIO_DMA_CHANNEL].DADDR = (uint32_t)&g_FlexioCameraFrameBuffer[0][0];
DMA0->TCD[FLEXIO_DMA_CHANNEL].CITER_ELINKNO = ((OV7670_FRAME_BYTES >> 5));//00000010010110000000
DMA0->TCD[FLEXIO_DMA_CHANNEL].BITER_ELINKNO = ((OV7670_FRAME_BYTES >> 5));
FLEXIO_CAMERA_EnableRxDMA(&s_FlexioCameraDevice, true);
s_FlexioStartCapture = 0;
}
else
{
stop=0;
s_FlexioStartCapture = 0;
}
}
Regards with
Nilesh Ravaliya
8980035565
Access Computech Pvt. Ltd.