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.
Revision 3:7643714ec664, committed 2015-06-26
- 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
--- 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; //*****************************************************************************