A "Hello" program for MARMEX_VB library. This application may work 40pin type mbed platforms ;) This application expects to have the MARMEX_VB module on a "MAPLE mini type-B (MARM03-BASE)" baseboard (slot2) with a MARMEX_OB module (on slot1)

Dependencies:   MARMEX_VB NokiaLCD mbed

Sample code for MARMEX-VB (MARY-VB) camera module.
/media/uploads/nxpfan/dsc_0497s.png

This is a very simple program just copies the data from camera to OELD.
/media/uploads/nxpfan/dsc_0513.jpg

Revision:
2:7294334432d4
Parent:
1:715bb00d7008
--- a/MARMEX_OB_oled.h	Mon Jun 16 14:04:33 2014 +0000
+++ b/MARMEX_OB_oled.h	Fri Jun 20 09:19:00 2014 +0000
@@ -2,8 +2,8 @@
  *
  *  @class   MARMEX_OB_oled
  *  @author  tedd
- *  @version 0.53 (optimized for "line data transfer")
- *  @date    16-Jun-2014
+ *  @version 0.55 (optimized for "line data transfer")
+ *  @date    20-Jun-2014
  *
  *  Released under the MIT License: http://mbed.org/license/mit
  *
@@ -22,6 +22,19 @@
 #include    "mbed.h"
 #include    "NokiaLCD.h"
 
+//#define   LINE_WRITE_OPT   NO_OPTIMIZATION
+//#define     LINE_WRITE_OPT   LOOP_UNROLL
+#define   LINE_WRITE_OPT   USING_SSP_FIFO
+
+/*  Setting for "LINE_WRITE_OPT == USING_SSP_FIFO"
+ *      Choose one line from next 3 lines when the FIFO option is taken
+ */
+#define     SSP_AUTO_SELECTION  //  for demo setup on "MAPLE mini type-B (MARM03-BASE)" baseboard (slot2) with a MARMEX_OB module (on slot1)
+//#define   SSP_USE_SSP0
+//#define   SSP_USE_SSP1
+
+
+
 /** @def MARMEX_OB_SPI_8BIT_MODE
  *
  *  MARMEX_OB_oled_oled OLED screen SPI access length setting
@@ -320,10 +333,24 @@
     }
 
     void blit565( int x, int y, int width, int height, short* colour ) {
+
+        //  OPTION REFERENCE NUMBER (DO NOT EDIT)
+        #define NO_OPTIMIZATION 0
+        #define LOOP_UNROLL     1
+        #define USING_SSP_FIFO  2
+
         _window( x, y, width, height );
 
-#define OPTIMIZE_KEEP_ASSERTING_CS_DURING_LINE_DATA_TRANSFER
-#ifdef  OPTIMIZE_KEEP_ASSERTING_CS_DURING_LINE_DATA_TRANSFER
+#if ( LINE_WRITE_OPT == NO_OPTIMIZATION )
+
+        for (int i = 0; i < width * height; i++ ) {
+            _putp565( colour[i] );
+        }
+
+#endif
+
+
+#if ( LINE_WRITE_OPT == LOOP_UNROLL )
 
         _cs = 0;
 
@@ -352,18 +379,63 @@
             _spi.write( 0x100 | (*colour >> 8) );
             _spi.write( 0x100 | *colour++ );
         }
-        
+
+        _cs = 1;
+#endif
+
+
+#if ( LINE_WRITE_OPT == USING_SSP_FIFO )
+
+    #define FIFO_DEPTH  4
+
+    #if defined( SSP_AUTO_SELECTION )
+        #if defined( TARGET_MBED_LPC1768 )
+            #define SPI_PORT_SELECTOR   LPC_SSP1
+        #elif defined( TARGET_LPC11U35_501 ) || defined( TARGET_LPC11U24_401 )
+            #define SPI_PORT_SELECTOR   LPC_SSP0
+        #endif
+    #elif defined( SSP_USE_SSP0 )
+        #define SPI_PORT_SELECTOR   LPC_SSP0
+    #elif defined( SSP_USE_SSP1 )
+        #define SPI_PORT_SELECTOR   LPC_SSP1
+    #else
+        #error when using FIFO option for the optimization, choose one of definition from SSP_AUTO_SELECTION, SSP_USE_SSP0 or SSP_USE_SSP1
+    #endif   //  #if defined( SSP_AUTO_SELECTION )
+
+        int     length  = width * height;
+        char    dummy;
+        int     n;
+
         _cs = 0;
 
-#else
-        for (int i = 0; i < width * height; i++ ) {
-            _putp565( colour[i] );
+        for(n = (FIFO_DEPTH >> 1); n > 0; n--) {
+            SPI_PORT_SELECTOR->DR = (*colour >> 8) | 0x100;
+            SPI_PORT_SELECTOR->DR = ((*colour++) & 0xFF) | 0x100;
         }
+
+        do {
+#pragma diag_suppress 550   //  surpressing a warning messase of "Variable "dummy" was set but never used"
+
+            while (!(SPI_PORT_SELECTOR->SR & 0x4));
+            dummy   = SPI_PORT_SELECTOR->DR;
+
+            if (n < length - (FIFO_DEPTH >> 1))
+                SPI_PORT_SELECTOR->DR = (*colour >> 8) | 0x100;
+
+            while (!(SPI_PORT_SELECTOR->SR & 0x4));
+            dummy   = SPI_PORT_SELECTOR->DR;
+
+            if (n++ < length - (FIFO_DEPTH >> 1))
+                SPI_PORT_SELECTOR->DR = ((*colour++) & 0xFF) | 0x100;
+
+
+        } while(n < length);
 #endif
 
+        _cs = 1;
         _window( 0, 0, WIDTH, HEIGHT );
-        _cs = 1;
     }
+
     void bitblit( int x, int y, int width, int height, const char* bitstream ) {
         _cs = 0;
         _window( x, y, width, height );
@@ -527,4 +599,3 @@
 
 
 
-