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

Files at this revision

API Documentation at this revision

Comitter:
dflet
Date:
Fri Jun 26 22:53:54 2015 +0000
Parent:
2:b92db44a29b4
Child:
4:c27adffcfec2
Commit message:
WIP commit 4

Changed in this revision

camera_app/camera_app.cpp Show annotated file Show diff for this revision Revisions of this file
camera_app/stm32f4xx_msp.c Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
utils/Led_config.cpp Show annotated file Show diff for this revision Revisions of this file
utils/Led_config.h Show annotated file Show diff for this revision Revisions of this file
--- a/camera_app/camera_app.cpp	Fri Jun 26 16:49:04 2015 +0000
+++ b/camera_app/camera_app.cpp	Fri Jun 26 22:53:54 2015 +0000
@@ -54,6 +54,7 @@
 #include "mt9d111.h"
 #include "i2cconfig.h"
 #include "cli_uart.h"
+#include "Led_config.h"
 
 using namespace mbed_cc3100;
 
@@ -358,15 +359,20 @@
     // Perform Image Capture 
     //
     Uart_Write((uint8_t*)"CaptureImage Start\n\r");
+    
+    HAL_NVIC_EnableIRQ(DMA2_Stream1_IRQn);
+    HAL_NVIC_EnableIRQ(DCMI_IRQn);
     HAL_DCMI_Start_DMA(&hdcmi, DCMI_MODE_SNAPSHOT, (uint32_t)p_buffer, sizeof(g_image.g_image_buffer)); 
     
     /* Wait for frame */
     while ((DCMI->CR & DCMI_CR_CAPTURE) != 0) {
- 
+         GPIO_IF_LedToggle(MCU_RED_LED_GPIO);
     }
+    HAL_NVIC_DisableIRQ(DCMI_IRQn);
+    HAL_NVIC_DisableIRQ(DMA2_Stream1_IRQn);
     g_frame_end = 1;
     
-    Uart_Write((uint8_t*)"CaptureImage Complete\n\r");
+    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 */
--- a/camera_app/stm32f4xx_msp.c	Fri Jun 26 16:49:04 2015 +0000
+++ b/camera_app/stm32f4xx_msp.c	Fri Jun 26 22:53:54 2015 +0000
@@ -98,7 +98,7 @@
     PB6     ------> DCMI_D5
     PB7     ------> DCMI_VSYNC 
     */
-    GPIO_InitStruct.Pin = GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6;
+    GPIO_InitStruct.Pin = GPIO_PIN_1|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6;
     GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
     GPIO_InitStruct.Pull = GPIO_NOPULL;
     GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
@@ -118,6 +118,14 @@
     GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
     GPIO_InitStruct.Alternate = GPIO_AF13_DCMI;
     HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
+    
+    /*Configure GPIO pin : PC9 */
+    GPIO_InitStruct.Pin = GPIO_PIN_9;
+    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
+    GPIO_InitStruct.Pull = GPIO_NOPULL;
+    GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
+    GPIO_InitStruct.Alternate = GPIO_AF0_MCO;
+    HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
 
     GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7;
     GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
@@ -147,7 +155,7 @@
 
   /* System interrupt init*/
     HAL_NVIC_SetPriority(DCMI_IRQn, 0, 0);
-    HAL_NVIC_EnableIRQ(DCMI_IRQn);
+//    HAL_NVIC_EnableIRQ(DCMI_IRQn);
   /* USER CODE BEGIN DCMI_MspInit 1 */
 //  Uart_Write((uint8_t*)"HAL_DCMI_MspInit complete \n\r");
   /* USER CODE END DCMI_MspInit 1 */
@@ -186,7 +194,7 @@
 
     HAL_GPIO_DeInit(GPIOA, GPIO_PIN_4|GPIO_PIN_6|GPIO_PIN_9|GPIO_PIN_10);
 
-    HAL_GPIO_DeInit(GPIOC, GPIO_PIN_8);
+    HAL_GPIO_DeInit(GPIOC, GPIO_PIN_9|GPIO_PIN_8);
 
     HAL_GPIO_DeInit(GPIOB, GPIO_PIN_6|GPIO_PIN_7);
 
--- a/main.cpp	Fri Jun 26 16:49:04 2015 +0000
+++ b/main.cpp	Fri Jun 26 22:53:54 2015 +0000
@@ -97,7 +97,8 @@
   
   RCC_OscInitTypeDef RCC_OscInitStruct;
   RCC_ClkInitTypeDef RCC_ClkInitStruct;
-
+//  RCC_PeriphCLKInitTypeDef PeriphClkInitStruct;//Used for ov7670 test
+  
   __PWR_CLK_ENABLE();
 
   __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
@@ -120,15 +121,25 @@
   RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;
   HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5);
   
+  //Used for ov7670 test
+//  PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_PLLI2S;
+//  PeriphClkInitStruct.PLLI2S.PLLI2SN = 192;
+//  PeriphClkInitStruct.PLLI2S.PLLI2SR = 2;
+//  HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct);
+  
   /* RCC_MCODIV_5 33.6MHz mco output on pin PC_9 (cam xclk) */
   /* RCC_MCODIV_4 42MHz mco output on pin PC_9 (cam xclk) */
   /* RCC_MCODIV_3 56MHz mco output on pin PC_9 (cam xclk) */
   HAL_RCC_MCOConfig(RCC_MCO2, RCC_MCO2SOURCE_SYSCLK, RCC_MCODIV_5);
+  //Used for ov7670 test
+  /* RCC_MCODIV_4 24MHz mco output on pin PC_9 (cam xclk) */
+//  HAL_RCC_MCOConfig(RCC_MCO2, RCC_MCO2SOURCE_PLLI2SCLK, RCC_MCODIV_4);
 
   HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);
-
-
-
+  
+  //Used for ov7670 test
+//  HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);
+  
 }
  
 void MX_DCMI_Init()
@@ -136,7 +147,7 @@
 
   hdcmi.Instance = DCMI;
   hdcmi.Init.SynchroMode = DCMI_SYNCHRO_HARDWARE;
-  hdcmi.Init.PCKPolarity = DCMI_PCKPOLARITY_FALLING;
+  hdcmi.Init.PCKPolarity = DCMI_PCKPOLARITY_RISING;//FALLING
   hdcmi.Init.VSPolarity = DCMI_VSPOLARITY_LOW;
   hdcmi.Init.HSPolarity = DCMI_HSPOLARITY_LOW;
   hdcmi.Init.CaptureRate = DCMI_CR_ALL_FRAME;
@@ -160,7 +171,7 @@
 
   /* DMA interrupt init */
   HAL_NVIC_SetPriority(DMA2_Stream1_IRQn, 0, 0);
-  HAL_NVIC_EnableIRQ(DMA2_Stream1_IRQn);
+//  HAL_NVIC_EnableIRQ(DMA2_Stream1_IRQn);
 
 }
 
@@ -239,7 +250,9 @@
 int main(void) {
 
    int rv = 0;
+   
    SystemClock_Config();
+   
    //
    // Configuring UART
    //
--- a/utils/Led_config.cpp	Fri Jun 26 16:49:04 2015 +0000
+++ b/utils/Led_config.cpp	Fri Jun 26 22:53:54 2015 +0000
@@ -13,7 +13,7 @@
 //!
 //! \return none
 //!
-//! \brief  Turns a specific LED Off
+//! \brief  Turns a specific LED On
 //
 //*****************************************************************************
 void
--- a/utils/Led_config.h	Fri Jun 26 16:49:04 2015 +0000
+++ b/utils/Led_config.h	Fri Jun 26 22:53:54 2015 +0000
@@ -8,7 +8,7 @@
     NO_LED,
     led3 = 0x1, /* RED LED D7/GP9/Pin64 */
     led4 = 0x2, /* ORANGE LED D6/GP10/Pin1 */
-    led5 = 0x4  /* GREEN LED D5/GP11/Pin2 */
+    led5 = 0x3  /* GREEN LED D5/GP11/Pin2 */
 
 } ledEnum;
 
@@ -16,7 +16,7 @@
 typedef enum
 {
     NO_LED_IND = NO_LED,
-    MCU_SENDING_DATA_IND = led3,
+    MCU_SENDING_DATA_IND = 4,
     MCU_ASSOCIATED_IND, /* Device associated to an AP */
     MCU_IP_ALLOC_IND, /* Device acquired an IP */
     MCU_SERVER_INIT_IND, /* Device connected to remote server */
@@ -24,10 +24,10 @@
     MCU_ON_IND,              /* Device SLHost invoked successfully */
     MCU_EXECUTE_SUCCESS_IND, /* Task executed sucessfully */
     MCU_EXECUTE_FAIL_IND, /* Task execution failed */
-    MCU_RED_LED_GPIO,   /* GP09 for LED RED as per LP 3.0 */
-    MCU_ORANGE_LED_GPIO,/* GP10 for LED ORANGE as per LP 3.0 */
-    MCU_GREEN_LED_GPIO, /* GP11 for LED GREEN as per LP 3.0 */
-    MCU_ALL_LED_IND
+    MCU_RED_LED_GPIO = led3,   /* GP09 for LED RED as per LP 3.0 */
+    MCU_ORANGE_LED_GPIO = led4,/* GP10 for LED ORANGE as per LP 3.0 */
+    MCU_GREEN_LED_GPIO = led5, /* GP11 for LED GREEN as per LP 3.0 */
+    MCU_ALL_LED_IND = 12
 } ledNames;
 
 //*****************************************************************************