/** * @brief This function handles DMA2 Stream1 Interrupt * @param None * @retval None */ void Ethernet_IRQHandler(void) { /* This DMA is used for transferring the DCMI Data */ if(DMA_GetITStatus(DMA2_Stream1, DMA_IT_TCIF1) != RESET) { /* Mark buffer as filled */ IPCAM_ImageBuffer.BufferStatus = BUFFER_FILLED; /* Clear interrupt pending bit */ DMA_ClearITPendingBit(DMA2_Stream1, DMA_IT_TCIF1); } /* Half Transfer complete interrupt */ else if (DMA_GetFlagStatus(DMA2_Stream1, DMA_FLAG_HTIF1) != RESET) { /* Clear the Interrupt flag */ DMA_ClearFlag(DMA2_Stream1, DMA_FLAG_HTIF1); } /* FIFO Error interrupt */ else if (DMA_GetFlagStatus(DMA2_Stream1, DMA_FLAG_FEIF1) != RESET) { /* Clear the Interrupt flag */ DMA_ClearFlag(DMA2_Stream1, DMA_FLAG_FEIF1); } /* Tranfer error interrupt */ else if (DMA_GetFlagStatus(DMA2_Stream1, DMA_FLAG_TEIF1) != RESET) { DCMI_ClearFlag(DCMI_FLAG_OVFRI); /* Clear interrupt pending bit */ DMA_ClearITPendingBit(DMA2_Stream1, DMA_IT_TEIF1); /* Mark buffer as empty */ IPCAM_ImageBuffer.BufferStatus = BUFFER_EMPTY; } }
/** * Interrupt Handler for DCMI */ void DCMI_IRQHandler() { if (DCMI_GetFlagStatus(DCMI_FLAG_FRAMERI) == SET) { DCMI_ClearFlag(DCMI_FLAG_FRAMERI); #ifdef CAM cam.ProcessData(); #endif } else if (DCMI_GetFlagStatus(DCMI_FLAG_OVFRI) == SET) { DCMI_ClearFlag(DCMI_FLAG_OVFRI); } else if (DCMI_GetFlagStatus(DCMI_FLAG_ERRRI) == SET) { DCMI_ClearFlag(DCMI_FLAG_ERRRI); } DCMI_CaptureCmd(DISABLE); DCMI_Cmd(DISABLE); DMA_Cmd(DMA2_Stream1, DISABLE); DCMI_Cmd(DISABLE); DCMI_ITConfig(DCMI_IT_FRAME, DISABLE); image = true; }