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:
14:90603ea1e85b
Parent:
13:bf45f592c2b6
Child:
15:5433f9d94cd7
--- a/main.cpp	Mon Jul 13 08:20:40 2015 +0000
+++ b/main.cpp	Tue Aug 25 22:03:00 2015 +0000
@@ -64,80 +64,12 @@
 
 using namespace mbed_cc3100;
 
-static void SystemClock_Config(void);
+extern DCMI_HandleTypeDef hdcmi;
+extern DMA_HandleTypeDef hdma_dcmi;
 
 void DCMI_IRQHandler(void);
 void DMA2_Stream1_IRQHandler(void);
 
-/** System Clock Configuration
-*/
-static void SystemClock_Config(void)
-{
-  
-//  SystemCoreClockUpdate();
-/*  
-  RCC_OscInitTypeDef RCC_OscInitStruct;
-  RCC_ClkInitTypeDef RCC_ClkInitStruct;
-//  RCC_PeriphCLKInitTypeDef PeriphClkInitStruct;//Used for ov7670 test
-  
-  __PWR_CLK_ENABLE();
-//  __GPIOH_CLK_ENABLE(); //Enable HSE Clock 8MHz 
-  __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
-
-  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
-  RCC_OscInitStruct.HSEState = RCC_HSE_ON;
-  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
-  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
-  RCC_OscInitStruct.PLL.PLLM = 8;
-  RCC_OscInitStruct.PLL.PLLN = 336;
-  RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
-  RCC_OscInitStruct.PLL.PLLQ = 7;
-  HAL_RCC_OscConfig(&RCC_OscInitStruct);
-
-  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1
-                              |RCC_CLOCKTYPE_PCLK2;
-  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
-  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
-  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
-  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;
-  HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5);
-  
-  //Used for ov7670 test
-//  PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_PLLI2S;//|RCC_PERIPHCLK_I2S;
-//  PeriphClkInitStruct.PLLI2S.PLLI2SN = 192;
-//  PeriphClkInitStruct.PLLI2S.PLLI2SR = 2;
-//  HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct);
-*/  
-  /* RCC_MCODIV_5 33.6MHz mco2 output on pin PC_9 (cam xclk) */
-  /* RCC_MCODIV_4 42MHz mco2 output on pin PC_9 (cam xclk) */
-  /* RCC_MCODIV_3 56MHz mco2 output on pin PC_9 (cam xclk) */
-//  HAL_RCC_MCOConfig(RCC_MCO2, RCC_MCO2SOURCE_SYSCLK, RCC_MCODIV_4);
-
-  /* RCC_MCODIV_1 16MHz mco1 output on pin PA_8 (cam xclk) */
-//  HAL_RCC_MCOConfig(RCC_MCO1, RCC_MCO1SOURCE_HSI, RCC_MCODIV_1);
-
-  /* RCC_MCODIV_1 8MHz mco2 output on pin PC_9 (cam xclk) */ 
-  /* RCC_MCODIV_2 4MHz mco2 output on pin PC_9 (cam xclk) */ 
-  /* RCC_MCODIV_4 2MHz mco2 output on pin PC_9 (cam xclk) */  
-  HAL_RCC_MCOConfig(RCC_MCO2, RCC_MCO2SOURCE_HSE, RCC_MCODIV_1);
-
-  //Used for ov7670 test
-  /* RCC_MCODIV_4 24MHz mco2 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);
-  
-//  HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);
-
-/* STM32F405x/407x/415x/417x Revision Z devices: prefetch is supported  */
-//  if (HAL_GetREVID() == 0x1001)
-//  {
-    /* Enable the Flash prefetch */
-//    __HAL_FLASH_PREFETCH_BUFFER_ENABLE();
-//  }
-  
-}
-
 /* Warning if pin changes are made below then the same changes have to be made in the following files.
  * httpserverapp.cpp
  * HttpCore.cpp
@@ -149,9 +81,10 @@
 /* Off board leds */
   DigitalOut led1(PB_15);
   DigitalOut led2(PB_14);
-
+//Serial pc(USBTX, USBRX);
 cc3100 _cc3100(NC, NC, PD_12, PD_13, PD_11, SPI(PB_5, PB_4, PB_3));//Seeed_Arch_Max  irq, nHib, cs, mosi, miso, sck
 
+static void Start_MCO1(void);
 void initLEDs(void);
 void toggleLed(int ind);
 static void DisplayBanner(char * AppName);
@@ -173,6 +106,30 @@
 	
 }
 
+static void Start_MCO1()
+{
+    
+    GPIO_InitTypeDef GPIO_InitStruct;
+    __GPIOA_CLK_ENABLE();
+    
+    /*Configure GPIO pin : GPIO_AF0_MCO PA8 */     
+    GPIO_InitStruct.Pin = GPIO_PIN_8;
+    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
+    GPIO_InitStruct.Pull = GPIO_PULLUP;
+    GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
+    GPIO_InitStruct.Alternate = GPIO_AF0_MCO;
+    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
+    
+#if defined OV5642_CAM || defined OV2640_CAM
+    /* MCO1 output 16MHz */   
+    HAL_RCC_MCOConfig(RCC_MCO1, RCC_MCO1SOURCE_HSE, RCC_MCODIV_1);
+#else 
+    /* MCO1 output 8MHz */   
+    HAL_RCC_MCOConfig(RCC_MCO1, RCC_MCO1SOURCE_HSE, RCC_MCODIV_2);
+#endif
+    wait_ms(500);
+}
+
 void toggleLed(int ind){
 	
 	if(ind == 1){
@@ -215,24 +172,28 @@
    SCB->SHCSR |= 0x00070000; 
    int rv = 0;
    
-//   HAL_Init();
-   
-   SystemClock_Config();
-//   DMAConfig();
-   
    //
    // Configuring UART
    //
    CLI_Configure();
+   
+#if defined OV5642_CAM   
+   Uart_Write((uint8_t*)"\n\rOV5642 Camera \n\r");
+#elif defined OV2640_CAM 
+   Uart_Write((uint8_t*)"\n\rOV2640 Camera \n\r");
+#elif defined MT9D111_CAM     
+   Uart_Write((uint8_t*)"\n\rMT9D111 Camera \n\r");
+#endif
+   
+   /* Start Camera Master Clock */
+   Start_MCO1();
+   
+   
+   
    initLEDs();
 
 //   toggleLed(1);
 //#ifndef NOTERM
-
-	//
-	// Configuring UART
-	//
-//    CLI_Configure();
     
     memset(print_buf, 0x00, PRINT_BUF_LEN);
     sprintf((char*) print_buf, " \r\nSystemCoreClock = %dMHz\r\n ", SystemCoreClock /1000000);
@@ -267,7 +228,7 @@
                         HTTP_SERVER_APP_TASK_PRIORITY,
                         NULL );
 
-    Uart_Write((uint8_t*)"HttpServerApp Initialized \n\r");
+    Uart_Write((uint8_t*)"HttpServerApp Initializing \n\r");
 
     //
     // Start the task scheduler
@@ -395,10 +356,9 @@
   * @param  None
   * @retval None
   */
-/*  
+/*    
 void DMA2_Stream1_IRQHandler(void)
 {
-  DMA_HandleTypeDef hdma_dcmi;
   Uart_Write((uint8_t*)"DMA2_Stream1_IRQHandler \n\r");
   HAL_DMA_IRQHandler(&hdma_dcmi);  
 }
@@ -407,11 +367,10 @@
   * @brief  DCMI interrupt handler.
   * @param  None
   * @retval None
-  */
-/*  
+  */ 
+ /* 
 void DCMI_IRQHandler(void)
 {
-  DCMI_HandleTypeDef hdcmi;
   Uart_Write((uint8_t*)"DCMI_IRQHandler \n\r");
   HAL_DCMI_IRQHandler(&hdcmi);
 }
@@ -423,3 +382,6 @@
 //
 //*****************************************************************************
 
+
+
+