David Fletcher / Mbed 2 deprecated cc3100_Test_websock_Camera_CM4F

Dependencies:   mbed

Files at this revision

API Documentation at this revision

Comitter:
dflet
Date:
Sun Aug 30 21:10:11 2015 +0000
Parent:
15:5433f9d94cd7
Child:
17:acc075ff3fcb
Commit message:
2 cams work now ov2640 and ov5642, the mt9d111 appears to be a hard nut to crack with respect to jpeg. Still have SPI issues, appears to be something to do with the MCO1 clock.

Changed in this revision

FreeRTOS/FreeRTOSConfig.h Show annotated file Show diff for this revision Revisions of this file
camera_app/camera_app.cpp Show annotated file Show diff for this revision Revisions of this file
camera_app/httpserverapp/httpserverapp.cpp 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
simplelink/cc3100.cpp Show annotated file Show diff for this revision Revisions of this file
simplelink/cc3100_driver.cpp Show annotated file Show diff for this revision Revisions of this file
simplelink/cc3100_spi.cpp Show annotated file Show diff for this revision Revisions of this file
simplelink/cc3100_wlan.cpp Show annotated file Show diff for this revision Revisions of this file
utils/app_config.h Show annotated file Show diff for this revision Revisions of this file
--- a/FreeRTOS/FreeRTOSConfig.h	Fri Aug 28 21:04:44 2015 +0000
+++ b/FreeRTOS/FreeRTOSConfig.h	Sun Aug 30 21:10:11 2015 +0000
@@ -86,7 +86,7 @@
 #define configCPU_CLOCK_HZ			( ( unsigned long ) SystemCoreClock )
 #define configTICK_RATE_HZ			( ( portTickType ) 1000 )
 #define configMINIMAL_STACK_SIZE	( ( unsigned short ) 130 )
-#define configTOTAL_HEAP_SIZE		( ( size_t ) (48 * 1024) )
+#define configTOTAL_HEAP_SIZE		( ( size_t ) (36 * 1024) )
 #define configMAX_TASK_NAME_LEN		( 24 )
 #define configUSE_TRACE_FACILITY	1
 #define configUSE_16_BIT_TICKS		0
--- a/camera_app/camera_app.cpp	Fri Aug 28 21:04:44 2015 +0000
+++ b/camera_app/camera_app.cpp	Sun Aug 30 21:10:11 2015 +0000
@@ -429,7 +429,7 @@
     //
     // Create JPEG Header
     //
-#ifndef OV2640_CAM    
+#ifdef MT9D111_CAM    
 #ifdef ENABLE_JPEG
     memset(g_image.g_header, '\0', sizeof(g_image.g_header));
     g_header_length = CreateJpegHeader((char *)&(g_image.g_header[0]), PIXELS_IN_X_AXIS, PIXELS_IN_Y_AXIS, 0, 0x0020, 9);
@@ -449,7 +449,7 @@
 #endif//ENABLE_JPEG
     *WriteBuffer = (char*)Image;
     return(g_header_length += g_frame_size_in_bytes);
-#endif//OV2640_CAM    
+#endif//MT9D111_CAM    
     *WriteBuffer = (char*)Image;
 
     return(g_frame_size_in_bytes);
@@ -470,11 +470,9 @@
 
     phdcmi.Init.SynchroMode      = DCMI_SYNCHRO_HARDWARE;
 #ifdef OV5642_CAM       
-//    phdcmi.Init.PCKPolarity      = DCMI_PCKPOLARITY_FALLING;//Data clocked out on falling edge
     phdcmi.Init.PCKPolarity      = DCMI_PCKPOLARITY_RISING;//Data clocked out on rising edge
-    phdcmi.Init.VSPolarity       = DCMI_VSPOLARITY_LOW;//Active low
-//    phdcmi.Init.HSPolarity       = DCMI_HSPOLARITY_LOW;//Active low
-    phdcmi.Init.HSPolarity       = DCMI_HSPOLARITY_HIGH;//Active high
+    phdcmi.Init.VSPolarity       = DCMI_VSPOLARITY_HIGH;//Active high
+    phdcmi.Init.HSPolarity       = DCMI_HSPOLARITY_LOW;//Active low
 #endif    
 #ifdef OV2640_CAM    
     phdcmi.Init.PCKPolarity      = DCMI_PCKPOLARITY_RISING;//Data clocked out on rising edge
@@ -483,10 +481,8 @@
 #endif    
 #ifdef MT9D111_CAM
     phdcmi.Init.PCKPolarity      = DCMI_PCKPOLARITY_RISING;//Data clocked out on rising edge 
-//    phdcmi.Init.PCKPolarity      = DCMI_PCKPOLARITY_FALLING;//Data clocked out on falling edge 
-    phdcmi.Init.VSPolarity       = DCMI_VSPOLARITY_HIGH;//Active high       
-//    phdcmi.Init.VSPolarity       = DCMI_VSPOLARITY_LOW;//Active high
-//    phdcmi.Init.HSPolarity       = DCMI_HSPOLARITY_LOW;//Active low
+//    phdcmi.Init.PCKPolarity      = DCMI_PCKPOLARITY_FALLING;//Data clocked out on falling edge       
+    phdcmi.Init.VSPolarity       = DCMI_VSPOLARITY_LOW;//Active high
     phdcmi.Init.HSPolarity       = DCMI_HSPOLARITY_HIGH;//Active high    
 #endif        
     phdcmi.Init.CaptureRate      = DCMI_CR_ALL_FRAME;
@@ -600,11 +596,11 @@
 
         /*** Configure the NVIC for DCMI and DMA ***/
         /* NVIC configuration for DCMI transfer complete interrupt */
-        HAL_NVIC_SetPriority(DCMI_IRQn, 1, 0);
+        HAL_NVIC_SetPriority(DCMI_IRQn, 3, 0);
         HAL_NVIC_EnableIRQ(DCMI_IRQn);
 
         /* NVIC configuration for DMA2 transfer complete interrupt */
-        HAL_NVIC_SetPriority(DMA2_Stream1_IRQn, 1, 0);
+        HAL_NVIC_SetPriority(DMA2_Stream1_IRQn, 3, 0);
         HAL_NVIC_EnableIRQ(DMA2_Stream1_IRQn);
 
         HAL_DMA_Init(&phdma_dcmi);
--- a/camera_app/httpserverapp/httpserverapp.cpp	Fri Aug 28 21:04:44 2015 +0000
+++ b/camera_app/httpserverapp/httpserverapp.cpp	Sun Aug 30 21:10:11 2015 +0000
@@ -52,7 +52,7 @@
 // Free-RTOS/TI-RTOS include
 #include "FreeRTOS.h"
 #include "osi.h"
-#include "semphr.h"
+//#include "semphr.h"
 
 // HTTP lib includes
 #include "HttpCore.h"
@@ -86,14 +86,6 @@
 UINT16 g_uConnection;
 OsiTaskHandle g_iCameraTaskHdl = 0;
 
-SemaphoreHandle_t xSemaphore = NULL;
-void createMutex()
-{
-
-    xSemaphore = xSemaphoreCreateMutex();
-}
-
-
 void WebSocketCloseSessionHandler()
 {
 	g_close = 1;
--- a/main.cpp	Fri Aug 28 21:04:44 2015 +0000
+++ b/main.cpp	Sun Aug 30 21:10:11 2015 +0000
@@ -52,13 +52,13 @@
 #include "httpserverapp.h"
 
 //#include "stm32f4xx_hal.h"
-#include "stm32f4xx_hal_rcc.h"
+//#include "stm32f4xx_hal_rcc.h"
 
 /* Free-RTOS includes */
 #include "FreeRTOS.h"
-#include "task.h"
-#include "semphr.h"
-#include "portmacro.h"
+//#include "task.h"
+//#include "semphr.h"
+//#include "portmacro.h"
 
 #include "osi.h"
 
@@ -114,22 +114,23 @@
     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;
+    //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 
+//    #ifndef MT9D111_CAM 
     /* MCO1 output 16MHz */   
-    HAL_RCC_MCOConfig(RCC_MCO1, RCC_MCO1SOURCE_HSE, RCC_MCODIV_1);
-#else 
+//    HAL_RCC_MCOConfig(RCC_MCO1, RCC_MCO1SOURCE_HSI, RCC_MCODIV_1);
+//#else 
     /* MCO1 output 8MHz */   
-    HAL_RCC_MCOConfig(RCC_MCO1, RCC_MCO1SOURCE_HSE, RCC_MCODIV_2);
-#endif
+//    HAL_RCC_MCOConfig(RCC_MCO1, RCC_MCO1SOURCE_HSI, RCC_MCODIV_2);
+//#endif
     wait_ms(500);
+    
 }
 
 void toggleLed(int ind){
@@ -170,10 +171,9 @@
 //							MAIN FUNCTION
 //****************************************************************************
 int main(void) {
+ 
+   int rv = 0;
 
-   SCB->SHCSR |= 0x00070000; 
-   int rv = 0;
-   
    //
    // Configuring UART
    //
@@ -212,7 +212,7 @@
     //
     DisplayBanner(APP_NAME);
     
-    createMutex();
+//    createMutex();
     
 //#endif
 
@@ -233,7 +233,7 @@
                         NULL );
 
     Uart_Write((uint8_t*)"HttpServerApp Initializing \n\r");
-
+    
     //
     // Start the task scheduler
     //
@@ -242,143 +242,7 @@
 	return 0;
 }
 
-/**
-  * @brief  This function handles Hard Fault exception.
-  * @param  None
-  * @retval None
-  */
-extern "C" void HardFault_Handler(void)
-{
-  /* Go to infinite loop when Hard Fault exception occurs */
-  Uart_Write((uint8_t*)"\n\rHardFault_Handler \n\r");
-  printf("Hard Fault Register SCB->HSFR     0x%X \r\n",SCB->HFSR);
-  printf("Fault bits set SCB->CFSR          0x%X \r\n",SCB->CFSR);
-  printf("Call to Memory Address SCB->BFAR  0x%X ERROR!\r\n",SCB->BFAR);
-  printf("Call to Memory Address SCB->MMFAR 0x%X ERROR!\r\n",SCB->MMFAR);
-  Uart_Write((uint8_t*)"HardFault_Handler \n\r");
-  while (1)
-  {
-  }
-}
 
-/**
-  * @brief  This function handles Memory Manage exception.
-  * @param  None
-  * @retval None
-  */
-extern "C" void MemManage_Handler(void)
-{ 
-  Uart_Write((uint8_t*)"\n\rMemManage_Handler \n\r");
-  printf("Fault bits set SCB->CFSR          0x%X \r\n",SCB->CFSR); 
-  printf("Call to Memory Address SCB->BFAR  0x%X ERROR!\r\n",SCB->BFAR);
-  printf("Call to Memory Address SCB->MMFAR 0x%X ERROR!\r\n",SCB->MMFAR);
-  Uart_Write((uint8_t*)"MemManage_Handler \n\r");
-  /* Go to infinite loop when Memory Manage exception occurs */
-  while (1)
-  {
-  }
-}
-
-/**
-  * @brief  This function handles Bus Fault exception.
-  * @param  None
-  * @retval None
-  */
-extern "C" void BusFault_Handler(void)
-{
-  Uart_Write((uint8_t*)"\n\rBusFault_Handler \n\r");
-  printf("Fault bits set SCB->CFSR          0x%X \r\n",SCB->CFSR); 
-  printf("Call to Memory Address SCB->BFAR  0x%X ERROR!\r\n",SCB->BFAR);
-  printf("Call to Memory Address SCB->MMFAR 0x%X ERROR!\r\n",SCB->MMFAR);
-  Uart_Write((uint8_t*)"BusFault_Handler \n\r");
-  /* Go to infinite loop when Bus Fault exception occurs */
-  while (1)
-  {
-  }
-}
-
-/**
-  * @brief  This function handles Usage Fault exception.
-  * @param  None
-  * @retval None
-  */
-extern "C" void UsageFault_Handler(void)
-{
-  Uart_Write((uint8_t*)"UsageFault_Handler \n\r");
-  /* Go to infinite loop when Usage Fault exception occurs */
-  while (1)
-  {
-  }
-}
-
-/**
-  * @brief  This function handles SVCall exception.
-  * @param  None
-  * @retval None
-  */
-/*  
-extern "C" void SVC_Handler(void)
-{
-	Uart_Write((uint8_t*)"SVC_Handler \n\r");
-}
-*/
-/**
-  * @brief  This function handles Debug Monitor exception.
-  * @param  None
-  * @retval None
-  */
-extern "C" void DebugMon_Handler(void)
-{
-	Uart_Write((uint8_t*)"DebugMon_Handler \n\r");
-}
-
-/**
-  * @brief  This function handles PendSVC exception.
-  * @param  None
-  * @retval None
-  */
-/*  
-extern "C" void PendSV_Handler(void)
-{
-	Uart_Write((uint8_t*)"PendSV_Handler \n\r");
-}
-*/
-/**
-  * @brief  This function handles SysTick Handler.
-  * @param  None
-  * @retval None
-  */
-/*  
-extern "C" void SysTick_Handler(void)
-{
-  Uart_Write((uint8_t*)"SysTick_Handler \n\r");
-  HAL_IncTick();
-}
-*/
-/**
-  * @brief  DMA interrupt handler.
-  * @param  None
-  * @retval None
-  */
-/*    
-void DMA2_Stream1_IRQHandler(void)
-{
-  Uart_Write((uint8_t*)"DMA2_Stream1_IRQHandler \n\r");
-  HAL_DMA_IRQHandler(&hdma_dcmi);  
-}
-*/
-/**
-  * @brief  DCMI interrupt handler.
-  * @param  None
-  * @retval None
-  */ 
- /* 
-void DCMI_IRQHandler(void)
-{
-  Uart_Write((uint8_t*)"DCMI_IRQHandler \n\r");
-  HAL_DCMI_IRQHandler(&hdcmi);
-}
-*/
 //*****************************************************************************
 //
 // Close the Doxygen group.
--- a/simplelink/cc3100.cpp	Fri Aug 28 21:04:44 2015 +0000
+++ b/simplelink/cc3100.cpp	Sun Aug 30 21:10:11 2015 +0000
@@ -229,7 +229,7 @@
     // Note that all profiles and persistent settings that were done on the
     // device will be lost
     //
-    Uart_Write((uint8_t*)"Starting configureSimpleLinkToDefaultState \n\r");
+    
     lRetVal = configureSimpleLinkToDefaultState();
     if(lRetVal < 0)
     {
@@ -368,17 +368,17 @@
             }
 #endif            
         }
-        
+       
         /* Switch to STA role and restart */
         retVal = _wlan.sl_WlanSetMode(ROLE_STA);
         ASSERT_ON_ERROR(retVal);
-        
+    
         retVal = sl_Stop(SL_STOP_TIMEOUT);
         ASSERT_ON_ERROR(retVal);
-
+    
         retVal = sl_Start(0, 0, 0);
         ASSERT_ON_ERROR(retVal);
-
+    
         /* Check if the device is in station again */
         if (ROLE_STA != retVal) {
             /* We don't want to proceed if the device is not coming up in station-mode */
@@ -1194,7 +1194,6 @@
 #if _SL_INCLUDE_FUNC(sl_Start)
 int16_t cc3100::sl_Start(const void* pIfHdl, int8_t*  pDevName, const P_INIT_CALLBACK pInitCallBack)
 {
-
     int16_t ObjIdx = MAX_CONCURRENT_ACTIONS;
     InitComplete_t  AsyncRsp;
 
--- a/simplelink/cc3100_driver.cpp	Fri Aug 28 21:04:44 2015 +0000
+++ b/simplelink/cc3100_driver.cpp	Sun Aug 30 21:10:11 2015 +0000
@@ -358,11 +358,9 @@
 *****************************************************************************/
 _SlReturnVal_t cc3100_driver::_SlDrvCmdOp(_SlCmdCtrl_t *pCmdCtrl,void* pTxRxDescBuff, _SlCmdExt_t *pCmdExt)
 {
-    //printf("_SlDrvCmdOp\r\n");
     _SlReturnVal_t RetVal;
     
     _SlDrvObjLockWaitForever(&g_pCB->GlobalLockObj);
-    
     g_pCB->IsCmdRespWaited = TRUE;
     SL_TRACE0(DBG_MSG, MSG_312, "_SlDrvCmdOp: call _SlDrvMsgWrite");
     
@@ -382,7 +380,6 @@
         /* wait for respond */
         RetVal = _SlDrvMsgReadCmdCtx(); /* will free global lock */
         SL_TRACE0(DBG_MSG, MSG_314, "_SlDrvCmdOp: exited _SlDrvMsgReadCmdCtx");
-        
     } else 
     {
         _SlDrvObjUnLock(&g_pCB->GlobalLockObj);
@@ -625,7 +622,6 @@
 
     
     VERIFY_RET_OK(_SlDrvRxHdrRead((uint8_t*)(uBuf.TempBuf), &AlignSize));
-
     OpCode = OPCODE(uBuf.TempBuf);
     RespPayloadLen = RSP_PAYLOAD_LEN(uBuf.TempBuf);
 
@@ -640,10 +636,9 @@
             _SlDrvSyncObjSignal(&g_pCB->FlowContCB.TxSyncObj);
         }
     }
-
+   
     /* Find the RX messaage class and set its async event handler */
     _SlDrvClassifyRxMsg(OpCode);
-    
     RxMsgClass = g_pCB->FunctionParams.AsyncExt.RxMsgClass;
 
 
@@ -913,7 +908,6 @@
 /* ******************************************************************************/
 _SlReturnVal_t cc3100_driver::_SlDrvMsgReadCmdCtx(void)
 {
-
     /*  after command response is received and isCmdRespWaited */
     /*  flag is set FALSE, it is necessary to read out all */
     /*  Async messages in Commands context, because ssiDma_IsrHandleSignalFromSlave */
@@ -927,7 +921,7 @@
                        
             VERIFY_RET_OK(_SlDrvMsgRead());
             g_pCB->RxDoneCnt++;
-           
+            
             if (CMD_RESP_CLASS == g_pCB->FunctionParams.AsyncExt.RxMsgClass) {
                 g_pCB->IsCmdRespWaited = FALSE;
 
@@ -946,7 +940,7 @@
                 /*  temporary context, i.e less waste of CPU and faster buffer */
                 /*  release. */
                 _SlAsyncEventGenericHandler();
-
+               
 #ifdef SL_MEMORY_MGMT_DYNAMIC
                 sl_Free(g_pCB->FunctionParams.AsyncExt.pAsyncBuf);
 #else
@@ -1106,20 +1100,23 @@
 _SlReturnVal_t  cc3100_driver::_SlDrvRxHdrRead(uint8_t *pBuf, uint8_t *pAlignSize)
 {
     uint32_t       SyncCnt  = 0;
-    uint8_t        ShiftIdx;      
+    uint8_t        ShiftIdx;    
     
 #ifndef SL_IF_TYPE_UART
     /*  1. Write CNYS pattern to NWP when working in SPI mode only  */
     _spi.spi_Write(g_pCB->FD, (uint8_t *)&g_H2NCnysPattern.Short, SYNC_PATTERN_LEN);
 #endif
-
+  
     /*  2. Read 4 bytes (protocol aligned) */
     _spi.spi_Read(g_pCB->FD, &pBuf[0], 4);
     _SL_DBG_SYNC_LOG(SyncCnt,pBuf);
-
+ 
     /* Wait for SYNC_PATTERN_LEN from the device */
     while ( ! N2H_SYNC_PATTERN_MATCH(pBuf, g_pCB->TxSeqNum) ) {
         /*  3. Debug limit of scan */
+        if(SyncCnt >= SL_SYNC_SCAN_THRESHOLD){
+        	printf("SPI Sync pattern match fault\n\r");
+        }
         VERIFY_PROTOCOL(SyncCnt < SL_SYNC_SCAN_THRESHOLD);
 
         /*  4. Read next 4 bytes to Low 4 bytes of buffer */
--- a/simplelink/cc3100_spi.cpp	Fri Aug 28 21:04:44 2015 +0000
+++ b/simplelink/cc3100_spi.cpp	Sun Aug 30 21:10:11 2015 +0000
@@ -55,7 +55,7 @@
 {
 
     _wlan_spi.format(8,1);
-    _wlan_spi.frequency(12000000);
+    _wlan_spi.frequency(16000000);
     _wlan_irq.rise(this, &cc3100_spi::IntSpiGPIOHandler);      //_SlDrvRxIrqHandler is called from IntSpiGPIOHandler
 //    _sw1_irq.rise(this, &cc3100_spi::buttonHandler_1);
 //    _sw2_irq.rise(this, &cc3100_spi::buttonHandler_2);
@@ -140,12 +140,14 @@
     int len_to_return = len;
 //    Uart_Write((uint8_t*)"Write\r\n");
     _wlan_cs = 0;
-
+//    for(int i = 0;i<len;i++){
+//        printf(" %x",pBuff[i]);
+//    }    
     while(len) {
         _wlan_spi.write(*pBuff++);
         len--;
     }
-
+//    printf("\r\n");
     _wlan_cs = 1;
     
     return len_to_return;
@@ -159,8 +161,9 @@
 
     for (i = 0; i < len; i++) {
         pBuff[i] = _wlan_spi.write(0xFF);
+//        printf(" %x",pBuff[i]);
     }
-
+//    printf("\r\n");
     _wlan_cs = 1;
     return len;
 }
--- a/simplelink/cc3100_wlan.cpp	Fri Aug 28 21:04:44 2015 +0000
+++ b/simplelink/cc3100_wlan.cpp	Sun Aug 30 21:10:11 2015 +0000
@@ -688,7 +688,7 @@
     Msg.Cmd.mode  = mode;
 
     VERIFY_RET_OK(_driver._SlDrvCmdOp((_SlCmdCtrl_t *)&_SlWlanSetModeCmdCtrl , &Msg, NULL));
-
+    
     return (int16_t)Msg.Rsp.status;
 
 }
--- a/utils/app_config.h	Fri Aug 28 21:04:44 2015 +0000
+++ b/utils/app_config.h	Sun Aug 30 21:10:11 2015 +0000
@@ -15,8 +15,8 @@
 
 #define ENABLE_JPEG
 //#define MT9D111_CAM
-//#define OV5642_CAM
-#define OV2640_CAM
+#define OV5642_CAM
+//#define OV2640_CAM
 
 //#define XGA_FRAME
 //#define VGA_FRAME
@@ -34,9 +34,9 @@
 #define sensor_addr  0x78
 #endif
 
-#define SPAWN_TASK_PRIORITY            7//9
-#define HTTP_SERVER_APP_TASK_PRIORITY  3//1
-#define CAMERA_SERVICE_PRIORITY        3
+#define SPAWN_TASK_PRIORITY            9//9
+#define HTTP_SERVER_APP_TASK_PRIORITY  1//1
+#define CAMERA_SERVICE_PRIORITY        1
 #define OSI_STACK_SIZE                 12 * 1024
 
 //*****************************************************************************