void DCMI_IRQHandler(void) { GPIO_SetBits(GPIOD, GREEN_LED); // Serial_print(USART2, DCMI->RISR, 16); /* DCMI overrun */ if ( DCMI_GetITStatus(DCMI_IT_OVF) != RESET) { // Overflow interrupt mask while (1){ GPIO_SetBits(GPIOD, GREEN_LED); ms_delay(500); } DCMI_ClearITPendingBit(DCMI_IT_OVF); } if ( DCMI_GetITStatus(DCMI_IT_FRAME) != RESET) { // Frame capture complete interrupt mask DCMI_ClearITPendingBit(DCMI_IT_FRAME); } if ( DCMI_GetITStatus(DCMI_IT_ERR) != RESET) { // Synchronization error interrupt mask while (1) ; DCMI_ClearITPendingBit(DCMI_IT_ERR); } if ( DCMI_GetITStatus(DCMI_IT_LINE) != RESET) { // Line interrupt mask DCMI_ClearITPendingBit(DCMI_IT_LINE); } if ( DCMI_GetITStatus(DCMI_IT_VSYNC) != RESET) { // Line interrupt mask DCMI_ClearITPendingBit(DCMI_IT_VSYNC); } }
void DCMI_IRQHandler(void) { if (DCMI_GetITStatus(DCMI_IT_FRAME) == 1) { DCMI_ClearITPendingBit(DCMI_IT_FRAME); jpegCaptureDoneITFLG = 1; } }
/** * @brief Interrupt handler of DCMI */ void DCMI_IRQHandler(void) { if (DCMI_GetITStatus(DCMI_IT_FRAME) != RESET) { DCMI_ClearITPendingBit(DCMI_IT_FRAME); } return; }
/** * @brief Initialize image capture process (start its thread) * @param None * @retval None */ void IPCAM_ImageCaptureInit(void) { /* Initializes the DCMI interface (I2C and GPIO) used to configure the camera */ OV2640_HW_Init(); /* Read the OV9655/OV2640 Manufacturer identifier */ OV9655_ReadID(&OV9655_Camera_ID); OV2640_ReadID(&OV2640_Camera_ID); if(OV9655_Camera_ID.PID == 0x96) { IPCAM_ImageBuffer.Camera = OV9655_CAMERA; } else if(OV2640_Camera_ID.PIDH == 0x26) { IPCAM_ImageBuffer.Camera = OV2640_CAMERA; } else { ETHERNET_UpdateCameraInit(); return; } if (IPCAM_ImageBuffer.ImageFormat == BMP_QQVGA) { /* Initialize the camera structure */ IPCAM_ImageBuffer.ImageHeaderLen = 159; IPCAM_ImageBuffer.ImageHeader = (uint8_t*)QQVGAImageHeader; IPCAM_ImageBuffer.ImageLen = (160*120*2); IPCAM_ImageBuffer.MaxImageLen = (160*120*3); IPCAM_ImageBuffer.ImageData = (uint8_t*)FSMC_SRAM_ADDRESS; IPCAM_ImageBuffer.BufferStatus = BUFFER_EMPTY; } else if (IPCAM_ImageBuffer.ImageFormat == BMP_QVGA) { /* Initialize the camera structure */ IPCAM_ImageBuffer.ImageHeaderLen = 160; IPCAM_ImageBuffer.ImageHeader = (uint8_t*)QVGAImageHeader; IPCAM_ImageBuffer.ImageLen = (320*240*2); IPCAM_ImageBuffer.MaxImageLen = (320*240*3); IPCAM_ImageBuffer.ImageData = (uint8_t*)FSMC_SRAM_ADDRESS; IPCAM_ImageBuffer.BufferStatus = BUFFER_EMPTY; } /* Configure camera module mounted on STM322xG-EVAL board */ eth_Camera_Config(); /* Clears the DCMI's and DMA's pending bits */ DCMI_ClearITPendingBit(DCMI_IT_FRAME | DCMI_IT_OVF); DMA_ClearITPendingBit(DMA2_Stream1, DMA_IT_TCIF1 | DMA_IT_TEIF1); /* Enable DMA2 stream 1 and DCMI interface then start image capture */ DMA_Cmd(DMA2_Stream1, ENABLE); DCMI_Cmd(ENABLE); DCMI_CaptureCmd(ENABLE); }
void DCMI_IRQHandler(void) { if( DCMI_GetITStatus(DCMI_IT_VSYNC)!= RESET) { DCMI_ClearITPendingBit(DCMI_IT_VSYNC); //LCD_WindowModeDisable(); TFT_Window(0, 0, 240, 320); LCD_WriteRAM_Prepare(); } }
/** * @brief Enable the DMA and DCMI interface to capture new image * @param None * @retval None */ static void IPCAM_CaptureNextImage(void) { /* Mark Image buffer as empty */ IPCAM_ImageBuffer.BufferStatus = BUFFER_EMPTY; /* Clears the DCMI's and DMA's pending bits */ DCMI_ClearITPendingBit(DCMI_IT_FRAME | DCMI_IT_OVF); DMA_ClearITPendingBit(DMA2_Stream1, DMA_IT_TCIF1 | DMA_IT_TEIF1); /* Enable DMA2 stream 1 then start new image capture */ DCMI_CaptureCmd(ENABLE); DMA_Cmd(DMA2_Stream1, ENABLE); }
int main() { SysTick_Config(SystemCoreClock / 1000); InitLeds(); GPIO_SetBits(GPIOD, GREEN_LED); Delay(100); GPIO_ResetBits(GPIOD, GREEN_LED); GPIO_SetBits(GPIOD, ORANGE_LED); Delay(100); GPIO_ResetBits(GPIOD, ORANGE_LED); GPIO_SetBits(GPIOD, RED_LED); Delay(100); GPIO_ResetBits(GPIOD, RED_LED); GPIO_SetBits(GPIOD, BLUE_LED); Delay(100); GPIO_ResetBits(GPIOD, BLUE_LED); /** * USART */ RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE); RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOC, ENABLE); GPIO_PinAFConfig(USART2_TX_PORT, USART2_TX_PIN_SOURCE, GPIO_AF_USART2); GPIO_PinAFConfig(USART2_RX_PORT, USART2_RX_PIN_SOURCE, GPIO_AF_USART2); /* Configure USART Tx as alternate function */ GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Pin = USART2_TX_PIN; GPIO_Init(USART2_TX_PORT, &GPIO_InitStructure); /* Configure USART Rx as alternate function */ GPIO_InitStructure.GPIO_Pin = USART2_RX_PIN; GPIO_Init(USART2_RX_PORT, &GPIO_InitStructure); USART_InitTypeDef USART_InitStructure; USART_InitStructure.USART_BaudRate = 115200; USART_InitStructure.USART_WordLength = USART_WordLength_8b; USART_InitStructure.USART_StopBits = USART_StopBits_1; USART_InitStructure.USART_Parity = USART_Parity_No; USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; USART_Init(USART2, &USART_InitStructure); /* Enable USART */ USART_Cmd(USART2, ENABLE); Serial_print(USART2, "Hello World! -- Compiled on: "); Serial_print(USART2, __DATE__); Serial_print(USART2, " - "); Serial_println(USART2, __TIME__); /** * Interrupts */ NVIC_InitTypeDef NVIC_InitStructure; NVIC_InitStructure.NVIC_IRQChannel = DCMI_IRQn; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_Init(&NVIC_InitStructure); DCMI_ClearITPendingBit(DCMI_IT_FRAME | DCMI_IT_OVF | DCMI_IT_ERR); DCMI_ITConfig(DCMI_IT_FRAME | DCMI_IT_OVF | DCMI_IT_ERR, ENABLE); NVIC_InitStructure.NVIC_IRQChannel = DMA2_Stream1_IRQn; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_Init(&NVIC_InitStructure); DMA_ClearITPendingBit(DMA2_Stream1, DMA_IT_TCIF1 | DMA_IT_TEIF1); DMA_ITConfig(DMA2_Stream1, DMA_IT_TC | DMA_IT_FE | DMA_IT_TE | DMA_IT_DME, ENABLE); Serial_print(USART2, "Interrupts done. \r\n"); /** Camera Reset Pin & Power Down Pin */ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_Speed = GPIO_Low_Speed; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_9; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_SetBits(GPIOA, GPIO_Pin_10); GPIO_ResetBits(GPIOA, GPIO_Pin_9); /** * DCMI */ OV2640_HW_Init(); Serial_print(USART2, "HW_Init done. \r\n"); /* Print camera Id */ OV2640_IDTypeDef camera_id; OV2640_ReadID(&camera_id); Serial_print(USART2, "Camera ID: "); Serial_print(USART2, camera_id.Manufacturer_ID1, 16); Serial_print(USART2, " - "); Serial_print(USART2, camera_id.Manufacturer_ID2, 16); Serial_print(USART2, " - "); Serial_print(USART2, camera_id.PIDH, 16); Serial_print(USART2, " - "); Serial_print(USART2, camera_id.PIDL, 16); Serial_println(USART2, ""); OV2640_QQVGAConfig(); Serial_print(USART2, "QQVGAConfig done. \r\n"); // OV2640_BandWConfig(0x18); // BW OV2640_Init(BMP_QQVGA); Serial_print(USART2, "Init done. \r\n"); // Memset int i; for (i=0; i<160*120; i++) { Targetbuffer[i] = 0xbeef; } DMA_Cmd(DMA2_Stream1, ENABLE); while ( DMA_GetCmdStatus(DMA2_Stream1) != ENABLE ) ; Serial_print(USART2, "DMA Enable done. \r\n"); DCMI_Cmd(ENABLE); Serial_print(USART2, "DCMI Enable done. \r\n"); DCMI_CaptureCmd(ENABLE); Serial_print(USART2, "DCMI Capture start. \r\n"); Serial_print(USART2, "Print: \r\n.\r\n.\r\n"); Serial_print(USART2, "done. \r\n"); Delay(1); // Clear screen Serial_print(USART2, 0x1b); Serial_print(USART2, "[2J"); while (1) { while (DCMI_GetFlagStatus(DCMI_FLAG_FRAMERI) == RESET) ; print_CameraData(); // Move cursor to home position. Serial_print(USART2, 0x1b); Serial_print(USART2, "[H"); } }