Port of TI's CC3100 Websock camera demo. Using FreeRTOS, mbedTLS, also parts of Arducam for cams ov5642 and 0v2640. Can also use MT9D111. Work in progress. Be warned some parts maybe a bit flacky. This is for Seeed Arch max only, for an M3, see the demo for CM3 using the 0v5642 aducam mini.

Dependencies:   mbed

Revision:
4:c27adffcfec2
Parent:
3:7643714ec664
Child:
5:75fcfdb7cae7
--- a/camera_app/camera_app.cpp	Fri Jun 26 22:53:54 2015 +0000
+++ b/camera_app/camera_app.cpp	Tue Jun 30 22:51:05 2015 +0000
@@ -41,7 +41,7 @@
 //! @{
 //
 //*****************************************************************************
-#include "mbed.h"
+//#include "mbed.h"
 #include <stdio.h>
 #include <string.h>
 #include <stdlib.h>
@@ -49,10 +49,13 @@
 // SimpleLink include
 #include "cc3100_simplelink.h"
 
+//#include "stm32f4xx_hal_dma.h"
+//#include "stm32f4xx_hal_dcmi.h"
+
 #include "camera_app.h"
-
 #include "mt9d111.h"
 #include "i2cconfig.h"
+
 #include "cli_uart.h"
 #include "Led_config.h"
 
@@ -99,7 +102,7 @@
 #ifdef ENABLE_JPEG
 	char g_header[SMTP_BUF_LEN] /*= {'\0'}*/;
 #endif
-	unsigned int g_image_buffer[NUM_OF_4B_CHUNKS];
+	unsigned int g_image_buffer[NUM_OF_4B_CHUNKS];//12800
 };
 
 ImageBuffer g_image;
@@ -360,8 +363,15 @@
     //
     Uart_Write((uint8_t*)"CaptureImage Start\n\r");
     
+    /* Enable the DCMI */
+//    __HAL_DCMI_ENABLE(&hdcmi);
+    /* Enable the DMA */
+//    __HAL_DMA_ENABLE(&hdma_dcmi);
+    
     HAL_NVIC_EnableIRQ(DMA2_Stream1_IRQn);
     HAL_NVIC_EnableIRQ(DCMI_IRQn);
+    wait(1);
+    printf("\r\nBuffer size = %d\r\n",sizeof(g_image.g_image_buffer));
     HAL_DCMI_Start_DMA(&hdcmi, DCMI_MODE_SNAPSHOT, (uint32_t)p_buffer, sizeof(g_image.g_image_buffer)); 
     
     /* Wait for frame */
@@ -370,17 +380,23 @@
     }
     HAL_NVIC_DisableIRQ(DCMI_IRQn);
     HAL_NVIC_DisableIRQ(DMA2_Stream1_IRQn);
+    
+    /* Disable the DMA */
+//    __HAL_DMA_DISABLE(&hdma_dcmi);
+    /* Disable the DCMI */
+//    __HAL_DCMI_DISABLE(&hdcmi);
+    
     g_frame_end = 1;
     
     Uart_Write((uint8_t*)"\n\rCaptureImage Complete\n\r");
     /* The frame is finished, but DMA still waiting
        for data because we set max frame size
        so we need to abort the DMA transfer here */
-    HAL_DMA_Abort(&hdma_dcmi);//need this???
+//    HAL_DMA_Abort(&hdma_dcmi);//need this???
  
     /* Read the number of data items transferred */
     uint16_t image_size = (FRAME_SIZE_IN_BYTES - hdma_dcmi.Instance->NDTR)*4;      
-
+    printf("image_size = %d\r\n",image_size);
     //
     // Create JPEG Header
     //
@@ -501,32 +517,6 @@
 //    MAP_CameraIntEnable(CAMERA_BASE, CAM_INT_FE);
 //    MAP_CameraDMAEnable(CAMERA_BASE);
 
-//  hdcmi.Instance = DCMI;
-//  hdcmi.Init.SynchroMode = DCMI_SYNCHRO_HARDWARE;
-//  hdcmi.Init.PCKPolarity = DCMI_PCKPOLARITY_FALLING;
-//  hdcmi.Init.VSPolarity = DCMI_VSPOLARITY_LOW;
-//  hdcmi.Init.HSPolarity = DCMI_HSPOLARITY_LOW;
-//  hdcmi.Init.CaptureRate = DCMI_CR_ALL_FRAME;
-//  hdcmi.Init.ExtendedDataMode = DCMI_EXTEND_DATA_8B;
-//#ifdef ENABLE_JPEG  
-//  hdcmi.Init.JPEGMode = DCMI_JPEG_ENABLE;
-//#else
-//  hdcmi.Init.JPEGMode = DCMI_JPEG_DISABLE;
-//#endif    
-//  HAL_DCMI_Init(&hdcmi);
-
-/*
-  hdcmi.Instance = DCMI;
-  hdcmi.Init.SynchroMode = DCMI_SYNCHRO_EMBEDDED;
-  hdcmi.Init.PCKPolarity = DCMI_PCKPOLARITY_FALLING;
-  hdcmi.Init.ExtendedDataMode = DCMI_EXTEND_DATA_8B;
-  hdcmi.Init.SyncroCode.FrameEndCode = 0;
-  hdcmi.Init.SyncroCode.FrameStartCode = 0;
-  hdcmi.Init.SyncroCode.LineStartCode = 0;
-  hdcmi.Init.SyncroCode.LineEndCode = 0;
-  HAL_DCMI_Init(&hdcmi);
-*/
-
 }
 
 
@@ -541,8 +531,8 @@
 static void CameraIntHandler()
 {
 	Uart_Write((uint8_t*)"CameraIntHandler \n\r");
-	DCMI_HandleTypeDef hdcmi;
-    DMA_HandleTypeDef hdma_dcmi;
+//	DCMI_HandleTypeDef hdcmi;
+//    DMA_HandleTypeDef hdma_dcmi;
 	//MAP_CameraIntClear(CAMERA_BASE, CAM_INT_FE);
  //   if(g_total_dma_intrpts > 1 && MAP_CameraIntStatus(CAMERA_BASE) & CAM_INT_FE)
 //    {