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:
Sun Jul 12 09:13:56 2015 +0000
Parent:
11:404bd8bb7fa6
Child:
13:bf45f592c2b6
Commit message:
WIP commit 13 reworked 12c

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/camera_app.h 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
camera_app/mt9d111/i2cconfig.cpp Show annotated file Show diff for this revision Revisions of this file
camera_app/mt9d111/mt9d111.cpp Show annotated file Show diff for this revision Revisions of this file
http/server/HttpSocket.cpp Show annotated file Show diff for this revision Revisions of this file
http/server/WebSockHandler.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
mbed.bld 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	Tue Jul 07 22:56:31 2015 +0000
+++ b/FreeRTOS/FreeRTOSConfig.h	Sun Jul 12 09:13:56 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 ) (5 * 1024) )
+#define configTOTAL_HEAP_SIZE		( ( size_t ) (20 * 1024) )
 #define configMAX_TASK_NAME_LEN		( 16 )
 #define configUSE_TRACE_FACILITY	1
 #define configUSE_16_BIT_TICKS		0
--- a/camera_app/camera_app.cpp	Tue Jul 07 22:56:31 2015 +0000
+++ b/camera_app/camera_app.cpp	Sun Jul 12 09:13:56 2015 +0000
@@ -79,7 +79,6 @@
 extern int g_uiIpObtained = 0;
 extern int g_uiSimplelinkRole = ROLE_INVALID;
 unsigned int g_uiIpAddress = 0;
-static unsigned int *p_buffer = NULL;
 static unsigned char g_dma_txn_done;
 volatile static unsigned char g_frame_end;
 static unsigned int g_total_dma_intrpts;
@@ -94,16 +93,13 @@
     int FRAME_SIZE_IN_BYTES = (240 * 256 * 2);
 #endif    
 
-//#ifdef ENABLE_JPEG
-unsigned int g_header_length;
-//#endif 
-
 struct ImageBuffer
 {
-//#ifdef ENABLE_JPEG
+#ifdef ENABLE_JPEG
 	char g_header[SMTP_BUF_LEN] /*= {'\0'}*/;
-//#endif
-	uint32_t g_image_buffer[NUM_OF_4B_CHUNKS];//60Kb 15360, 50Kb 12800
+#endif
+//    uint32_t g_image_buffer[NUM_OF_4B_CHUNKS];//60Kb 15360, 50Kb 12800
+	uint32_t g_image_buffer[((IMAGE_BUF_SIZE)/(sizeof(unsigned int)))];//51Kb
 };
 
 ImageBuffer g_image;
@@ -326,14 +322,16 @@
 //!                               
 //
 //*****************************************************************************
-static unsigned short CaptureImage(char** WriteBuffer)
+uint16_t CaptureImage(char** WriteBuffer)
 {
+//    Uart_Write((uint8_t*)"CaptureImage \n\r");
 	DCMI_HandleTypeDef phdcmi;
     DMA_HandleTypeDef hdma_dcmi;
-//    Uart_Write((uint8_t*)"CaptureImage \n\r");
-    memset(g_image.g_image_buffer,0xF80F,sizeof(g_image.g_image_buffer));
-//    memset(g_image.g_image_buffer,0x0F,sizeof(g_image.g_image_buffer));
-    p_buffer = &(g_image.g_image_buffer[0]);
+
+    uint32_t g_header_length = 0;
+//    memset(g_image.g_image_buffer,0xF80F,sizeof(g_image.g_image_buffer));
+    memset(g_image.g_image_buffer,0x0F,sizeof(g_image.g_image_buffer));
+    uint32_t *p_buffer = &(g_image.g_image_buffer[0]);
     
     DMAConfig();
 
@@ -341,18 +339,18 @@
     // Perform Image Capture 
     //
 //    wait_ms(500);
+
 #ifdef ENABLE_JPEG
     HAL_DCMI_Start_DMA(&phdcmi, DCMI_MODE_SNAPSHOT, (uint32_t)p_buffer, NUM_OF_4B_CHUNKS);
 #else
     HAL_DCMI_Start_DMA(&phdcmi, DCMI_MODE_CONTINUOUS, (uint32_t)p_buffer, NUM_OF_4B_CHUNKS);
-#endif
-    HttpDebug("CaptureImage Complete\n\r");    
+#endif   
     g_frame_end = 1;
  
-    /* Read the number of data items transferred (4 x uint = 4 bytes) */
+    /* Read the number of data items transferred in bytes ((4x) uint = 4 bytes) */
     g_frame_size_in_bytes = 4*(NUM_OF_4B_CHUNKS - hdma_dcmi.Instance->NDTR);
-    if(g_frame_size_in_bytes <= 0){
-    	HttpDebug("\r\nFailed to capture any data, check camera connections!\r\n");
+    if(g_frame_size_in_bytes <= 0 || g_frame_size_in_bytes > (NUM_OF_4B_CHUNKS *4)){
+    	HttpDebug("\r\nFailed to capture or data over-run, check camera connections!\r\n");
     	HAL_DCMI_MspDeInit(&phdcmi);
     	while(1){
     		wait(0.5);
@@ -361,14 +359,14 @@
     g_dma_txn_done = 1;
     g_total_dma_intrpts = 1;
     
-    HttpDebug("g_frame_size_in_bytes = 0x%x \r\n",g_frame_size_in_bytes);
+//    HttpDebug("frame size = 0x%x \r\n",g_frame_size_in_bytes);
     
     uint8_t* Image = reinterpret_cast<uint8_t*>(&g_image.g_image_buffer);
-//#if 0    
+#if 0    
     for(int i =0;i< 10;i++){
     	HttpDebug("0x%x ",Image[i]);
     }
-//#endif//if 0    
+#endif//if 0    
     //
     // Create JPEG Header
     //
@@ -376,10 +374,12 @@
     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);
-
+//    HttpDebug("g_header_length = 0x%x \r\n",g_header_length);
     // This pushes the header to the start of the array so that the entire picture can be contiguous in memory
-    memcpy(Image + g_header_length, Image, g_frame_size_in_bytes);
-    memcpy(Image, g_image.g_header, g_header_length);
+//    memcpy(Image + g_header_length, Image, g_frame_size_in_bytes);
+//    memcpy(Image, g_image.g_header, g_header_length);
+    // This pushes the header to the end of the array so that the entire picture can be contiguous in memory
+    memcpy(Image + g_frame_size_in_bytes, g_image.g_header, g_header_length);
 #if 0    
     for(int i =624;i< 725;i++){
     	HttpDebug("0x%x ",Image[i]);
@@ -401,7 +401,7 @@
 //!     \return                     None                  
 //
 //*****************************************************************************
-static void DMAConfig()
+void DMAConfig()
 {
 	DCMI_HandleTypeDef phdcmi;
     DMA_HandleTypeDef hdma_dcmi;
@@ -415,8 +415,8 @@
     hdma_dcmi.Init.Direction           = DMA_PERIPH_TO_MEMORY;
     hdma_dcmi.Init.PeriphInc           = DMA_PINC_DISABLE;
     hdma_dcmi.Init.MemInc              = DMA_MINC_ENABLE;
-    hdma_dcmi.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;//Cam is 1 byte wide data (8 bits) should this be word?????
-    hdma_dcmi.Init.MemDataAlignment    = DMA_PDATAALIGN_WORD;//Memory is defined as uint (1 word)
+    hdma_dcmi.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD;//Cam is 1 byte wide data (8 bits) should this be word?????
+    hdma_dcmi.Init.MemDataAlignment    = DMA_PDATAALIGN_WORD;//Memory has been defined as uint (1 word)
     hdma_dcmi.Init.Mode                = DMA_CIRCULAR;
     hdma_dcmi.Init.Priority            = DMA_PRIORITY_HIGH;
     hdma_dcmi.Init.FIFOMode            = DMA_FIFOMODE_DISABLE;
@@ -428,7 +428,7 @@
     __HAL_LINKDMA(&phdcmi, DMA_Handle, hdma_dcmi);
     
      /* DMA interrupt init */
-    HAL_NVIC_SetPriority(DMA2_Stream1_IRQn, 5, 0);
+    HAL_NVIC_SetPriority(DMA2_Stream1_IRQn, 0, 0);
     HAL_NVIC_EnableIRQ(DMA2_Stream1_IRQn);
     
     /* Peripheral DCMI init*/
@@ -437,9 +437,12 @@
     __DCMI_CLK_ENABLE();    
  
     phdcmi.Init.SynchroMode      = DCMI_SYNCHRO_HARDWARE;
-    phdcmi.Init.PCKPolarity      = DCMI_PCKPOLARITY_RISING;
-    phdcmi.Init.VSPolarity       = DCMI_VSPOLARITY_LOW;
-    phdcmi.Init.HSPolarity       = DCMI_HSPOLARITY_LOW;
+    phdcmi.Init.PCKPolarity      = DCMI_PCKPOLARITY_FALLING;
+//    phdcmi.Init.PCKPolarity      = DCMI_PCKPOLARITY_RISING;
+    phdcmi.Init.VSPolarity       = DCMI_VSPOLARITY_HIGH;
+//    phdcmi.Init.VSPolarity       = DCMI_VSPOLARITY_LOW;
+    phdcmi.Init.HSPolarity       = DCMI_HSPOLARITY_HIGH;
+//    phdcmi.Init.HSPolarity       = DCMI_HSPOLARITY_LOW;
     phdcmi.Init.CaptureRate      = DCMI_CR_ALL_FRAME;
     phdcmi.Init.ExtendedDataMode = DCMI_EXTEND_DATA_8B;    
 #ifdef ENABLE_JPEG  
@@ -474,7 +477,7 @@
     PA6     ------> DCMI_PIXCK
     PA4     ------> DCMI_HSYNC
     PB7     ------> DCMI_VSYNC
-    PC9     ------> MCLK 
+    
     */
     /* D3 D4 D6 D7 */
     GPIO_InitStruct.Pin = GPIO_PIN_1|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6;
@@ -500,22 +503,22 @@
     GPIO_InitStruct.Alternate = GPIO_AF13_DCMI;
     HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
     
-    /*Configure GPIO pin : GPIO_AF0_MCO PC9 */
+    /*Configure GPIO pin : GPIO_AF0_MCO PC9 
     GPIO_InitStruct.Pin = GPIO_PIN_9;
     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(GPIOC, &GPIO_InitStruct);
-    
-    /*Configure GPIO pin : PA8 */
+*/    
+    /*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);
-    
+*/    
     /* D5 VSYNC */
     GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7;
     GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
@@ -525,7 +528,7 @@
     HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
 
   /* System interrupt init*/
-    HAL_NVIC_SetPriority(DCMI_IRQn, 5, 0);
+    HAL_NVIC_SetPriority(DCMI_IRQn, 0, 0);
     HAL_NVIC_EnableIRQ(DCMI_IRQn);
 
     HAL_DMA_Init(&hdma_dcmi);
--- a/camera_app/camera_app.h	Tue Jul 07 22:56:31 2015 +0000
+++ b/camera_app/camera_app.h	Sun Jul 12 09:13:56 2015 +0000
@@ -60,7 +60,8 @@
 extern int PIXELS_IN_X_AXIS; 
 extern int PIXELS_IN_X_AXIS;
 extern int FRAME_SIZE_IN_BYTES;
-#define NUM_OF_1KB_BUFFERS      50//50
+//#define NUM_OF_1KB_BUFFERS      50
+#define NUM_OF_1KB_BUFFERS      51//50
 
 
 #define BYTES_PER_PIXEL             (2)       // RGB 565 
@@ -68,7 +69,8 @@
 #define ONE_KB                      (1024)
 #define IMAGE_BUF_SIZE              (ONE_KB * NUM_OF_1KB_BUFFERS)
 
-#define NUM_OF_4B_CHUNKS            ((IMAGE_BUF_SIZE)/(sizeof(unsigned int)))
+//#define NUM_OF_4B_CHUNKS            ((IMAGE_BUF_SIZE)/(sizeof(unsigned int)))
+#define NUM_OF_4B_CHUNKS            ((IMAGE_BUF_SIZE - ONE_KB)/(sizeof(unsigned int)))
 #define NUM_OF_1KB_CHUNKS           (IMAGE_BUF_SIZE/ONE_KB)
 #define NUM_OF_4B_CHUNKS_IN_1KB     (ONE_KB/(sizeof(unsigned int)))
 
@@ -100,8 +102,8 @@
 
 static void CamControllerInit(void);
 static void CameraIntHandler(void);
-static unsigned short CaptureImage(char **WriteBuffer);
-static void DMAConfig(void);
+uint16_t CaptureImage(char **WriteBuffer);
+void DMAConfig(void);
 
 /****************************************************************************/
 /*                      LOCAL FUNCTION PROTOTYPES                           */
--- a/camera_app/httpserverapp/httpserverapp.cpp	Tue Jul 07 22:56:31 2015 +0000
+++ b/camera_app/httpserverapp/httpserverapp.cpp	Sun Jul 12 09:13:56 2015 +0000
@@ -105,7 +105,7 @@
 		if(g_close == 0)
 		{
 			Write.uLength = StartCamera((char **)&Write.pData);
-//            HttpDebug("Data Len = 0x%x \n\r",Write.uLength);
+            HttpDebug("Data Len = 0x%x \n\r",Write.uLength);
 			if(!sl_WebSocketSend(g_uConnection, Write, Opcode))
 			{
 				Uart_Write((uint8_t*)"sl_WebSocketSend failed.\n\r");
--- a/camera_app/mt9d111/i2cconfig.cpp	Tue Jul 07 22:56:31 2015 +0000
+++ b/camera_app/mt9d111/i2cconfig.cpp	Sun Jul 12 09:13:56 2015 +0000
@@ -90,18 +90,24 @@
 //	Uart_Write((uint8_t*)"I2CBufferRead \n\r");
 //    uint32_t ulNdx;
     bool err;
-    if(ucFlags == I2C_SEND_START){
+/*    if(ucFlags == I2C_SEND_START){
     	i2c.start(); 	   
     }
-    
+*/    
     // Set I2C slave address
-    err = i2c.read(ucDevAddr, ucBuffer, ulSize);
-    if(!err){
-    	return 1;
-    }
+    err = i2c.read(0xBB, ucBuffer, ulSize);
+/*    
     if(ucFlags == I2C_SEND_STOP){
     	i2c.stop();
     }
+*/    
+//    for(int i = 0;i<ulSize;i++){
+//    	printf("0x%x ",ucBuffer[i]);
+//    }
+//    printf("\r\n");	
+//    if(err){
+//    	return 1;
+//    }
     
     return 0;
 }
@@ -128,18 +134,20 @@
 //	Uart_Write((uint8_t*)"I2CBufferWrite \n\r");
 //    uint32_t ulNdx;
     bool err;
-    if(ucFlags == I2C_SEND_START){
+/*    if(ucFlags == I2C_SEND_START){
     	i2c.start(); 	   
     }
-    
+*/    
    // Set I2C slave address
     err = i2c.write(ucDevAddr, ucBuffer, ulSize);
-    if(!err){
-    	return 1;
-    }
+/*    
     if(ucFlags == I2C_SEND_STOP){
     	i2c.stop();
     }
+*/    
+//    if(!err){
+//    	return 1;
+//    }
 
     return 0;
 }
--- a/camera_app/mt9d111/mt9d111.cpp	Tue Jul 07 22:56:31 2015 +0000
+++ b/camera_app/mt9d111/mt9d111.cpp	Sun Jul 12 09:13:56 2015 +0000
@@ -53,7 +53,8 @@
 #define RET_OK                  0
 #define RET_ERROR               -1
 #define SENSOR_PAGE_REG         0xF0
-#define CAM_I2C_SLAVE_ADDR      ((0xBA >> 1))
+#define CAM_I2C_SLAVE_ADDR      0xBA//((0xBA >> 1))//Write
+//#define CAM_I2C_SLAVE_ADDR      0xBB((0xBB >> 1))//Read
 
 #ifndef ENABLE_JPEG
 static const s_RegList preview_on_cmd_list[]= {
@@ -431,7 +432,7 @@
         if(pRegLst->ucPageAddr == 100)
         {
             // PageAddr == 100, insret a delay equal to reg value 
-            wait_us(pRegLst->usValue);// * 80000/3);
+            wait_ms(pRegLst->usValue);// * 80000/3);
         }
         else if(pRegLst->ucPageAddr == 111)
         {
@@ -460,7 +461,7 @@
             ucBuffer[2] = (unsigned char)(pRegLst->ucPageAddr);
             if(0 != I2CBufferWrite(CAM_I2C_SLAVE_ADDR,ucBuffer,3,I2C_SEND_STOP))
             {
-                Uart_Write((uint8_t*)"\n\rError writing ucBuffer \n\r");
+                Uart_Write((uint8_t*)"\n\rError writing SENSOR_PAGE_REG \n\r");
                 return RET_ERROR;
             }
 
@@ -500,7 +501,7 @@
             if(0 != I2CBufferWrite(CAM_I2C_SLAVE_ADDR,ucBuffer,
                                                       ulSize,I2C_SEND_STOP))
             {
-                Uart_Write((uint8_t*)"\n\rError writting I2C_SEND_STOP \n\r");
+                Uart_Write((uint8_t*)"\n\rError i2c write \n\r");
                 return RET_ERROR;
             }
         }
--- a/http/server/HttpSocket.cpp	Tue Jul 07 22:56:31 2015 +0000
+++ b/http/server/HttpSocket.cpp	Sun Jul 12 09:13:56 2015 +0000
@@ -215,7 +215,7 @@
 
 int ClientSocketSend(long socket, char * buffer, unsigned int len)
 {
-//  HttpDebug("\r\n ClientSocketSend\n\r");
+  HttpDebug("\r\n ClientSocketSend\n\r");
   int send_len = 0, Ittr = 0;
 
   do
--- a/http/server/WebSockHandler.cpp	Tue Jul 07 22:56:31 2015 +0000
+++ b/http/server/WebSockHandler.cpp	Sun Jul 12 09:13:56 2015 +0000
@@ -290,7 +290,7 @@
  */
 int WSCore_DataSend(UINT16 uConnection, struct HttpBlob PayLoad, UINT8 Opcode)
 {
-//	Uart_Write((uint8_t*)"WSCore_DataSend\n\r");
+	Uart_Write((uint8_t*)"WSCore_DataSend\n\r");
 	UINT16 usTotalLength;
 	UINT8 usNextBlock;
 	UINT16 usPayloadLen;	// The heap cannot support beyond 65kb
--- a/main.cpp	Tue Jul 07 22:56:31 2015 +0000
+++ b/main.cpp	Sun Jul 12 09:13:56 2015 +0000
@@ -60,6 +60,7 @@
 #include "cli_uart.h"
 #include "app_config.h"
 #include "myBoardInit.h"
+#include "camera_app.h"
 
 using namespace mbed_cc3100;
 
@@ -73,8 +74,8 @@
 static void SystemClock_Config(void)
 {
   
-  SystemCoreClockUpdate();
-  
+//  SystemCoreClockUpdate();
+/*  
   RCC_OscInitTypeDef RCC_OscInitStruct;
   RCC_ClkInitTypeDef RCC_ClkInitStruct;
 //  RCC_PeriphCLKInitTypeDef PeriphClkInitStruct;//Used for ov7670 test
@@ -106,27 +107,27 @@
 //  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);
+  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_4);
+//  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_Config(HAL_RCC_GetHCLKFreq()/1000);
   
-  HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);
+//  HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);
 
 /* STM32F405x/407x/415x/417x Revision Z devices: prefetch is supported  */
 //  if (HAL_GetREVID() == 0x1001)
@@ -211,11 +212,13 @@
 //****************************************************************************
 int main(void) {
 
+   SCB->SHCSR |= 0x00070000; 
    int rv = 0;
    
-   HAL_Init();
+//   HAL_Init();
    
    SystemClock_Config();
+//   DMAConfig();
    
    //
    // Configuring UART
@@ -282,11 +285,11 @@
 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("Call to Memory Address SCB->BFAR  0x%X ERROR!\r\n",SCB->BFAR);
   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)
   {
@@ -299,7 +302,11 @@
   * @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)
@@ -314,6 +321,10 @@
   */
 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)
--- a/mbed.bld	Tue Jul 07 22:56:31 2015 +0000
+++ b/mbed.bld	Sun Jul 12 09:13:56 2015 +0000
@@ -1,1 +1,1 @@
-http://mbed.org/users/mbed_official/code/mbed/builds/7cff1c4259d7
\ No newline at end of file
+http://mbed.org/users/mbed_official/code/mbed/builds/da0ca467f8b5
\ No newline at end of file
--- a/utils/app_config.h	Tue Jul 07 22:56:31 2015 +0000
+++ b/utils/app_config.h	Sun Jul 12 09:13:56 2015 +0000
@@ -6,7 +6,7 @@
 #define SPAWN_TASK_PRIORITY            7//9
 #define HTTP_SERVER_APP_TASK_PRIORITY  1//1
 #define CAMERA_SERVICE_PRIORITY        1
-#define OSI_STACK_SIZE                 2048
+#define OSI_STACK_SIZE                 16 * 1024