Tedd OKANO / Mbed 2 deprecated MARY_CAMERA_Hello

Dependencies:   MARY_CAMERA NokiaLCD mbed

Revision:
2:2e03fc4f485b
Parent:
1:ce27bc7b44d4
Child:
3:152362acd181
diff -r ce27bc7b44d4 -r 2e03fc4f485b main.cpp
--- a/main.cpp	Fri Feb 14 06:56:12 2014 +0000
+++ b/main.cpp	Fri Feb 14 08:33:14 2014 +0000
@@ -47,7 +47,7 @@
 MARMEX_OB_oled   oled1( p5, p7,  p20, p16, p15 ); // mosi, sclk, cs, rst, power_control     -- maple-mini-type-b-slot1
 
 
-SPI         spi( p5, p6, p7 );
+SPI         camspi( p5, p6, p7 );
 DigitalOut  cs2( p22 );
 DigitalOut  vsync( p9 );
 DigitalOut  camera_reset( p26 );
@@ -74,18 +74,18 @@
     }
     
     
-    spi.format(8);
-    spi.frequency( 1000000 );
+    camspi.format(8);
+    camspi.frequency( 1000000 );
     vsync   = 0;
 
 }
 
-int send_spi2( char data )
+int send_camspi2( char data )
 {
     int     tmp;
 
     cs2 = 0;
-    tmp = spi.write( data );
+    tmp = camspi.write( data );
     cs2 = 1;
 
     return ( tmp );
@@ -96,35 +96,49 @@
 
 void transfer_control( int flag )
 {
-    send_spi2( 0x03 );
-    send_spi2( flag );
-    send_spi2( 0x84 );
+    send_camspi2( 0x03 );
+    send_camspi2( flag );          //  1 for PREPARE, 0 for DONE
+    vsync   = flag ? 0 : 1;     //  0 for PREPARE, 1 for DONE
+    send_camspi2( 0x84 );
 
-    while ( (send_spi2( 0x84 ) ^ flag) & 0x1 )
-        ;
+    while ( (send_camspi2( 0x84 ) ^ flag) & 0x1 ); //  wait until LSB becomes '1'(for PREPARE) or '0'(for done)
         
-    vsync   = flag ? 0 : 1;
 }
 
 void open_transfer( void )
 {
-    transfer_control( PREPARE );
+//    transfer_control( PREPARE );
+
+    send_camspi2( 0x03 );
+    send_camspi2( 1 );
+    vsync   = 0;
+    send_camspi2( 0x84 );
+
+    while ( (send_camspi2( 0x84 ) & 0x1) == 0 );
 }
 
 void close_transfer( void )
 {
-    transfer_control( DONE );
+//    transfer_control( DONE );
+
+    send_camspi2( 0x03 );
+    send_camspi2( 0 );
+    send_camspi2( 0x84 );
+
+    while ( (send_camspi2( 0x84 ) & 0x1) );
+
+    vsync   = 1;
 }
 
 
 void set_address( int address )
 {
-    send_spi2( 0x00 );
-    send_spi2( (address >> 0) & 0xFF );
-    send_spi2( 0x01 );
-    send_spi2( (address >> 8) & 0xFF );
-    send_spi2( 0x02 );
-    send_spi2( (address >> 16) & 0xFF );
+    send_camspi2( 0x00 );
+    send_camspi2( (address >> 0) & 0xFF );
+    send_camspi2( 0x01 );
+    send_camspi2( (address >> 8) & 0xFF );
+    send_camspi2( 0x02 );
+    send_camspi2( (address >> 16) & 0xFF );
 }
 
 #define     PIXEL_PER_LINE  176
@@ -134,10 +148,11 @@
 
 void transfer_a_line( short *p, int line_number, int x_offset, int n_of_pixels )
 {
-    set_address( line_number * BYTE_PER_LINE + x_offset * BYTE_PER_PIXEL);
-
+//    set_address( line_number * BYTE_PER_LINE + x_offset * BYTE_PER_PIXEL );
+    set_address( line_number * BYTE_PER_LINE );
+send_camspi2( 0xA8 );
     for( int x = 0; x < n_of_pixels; x++ )
-        *p++    = (send_spi2( 0xA8 ) << 8) | send_spi2( 0xA8 );
+        *p++    = (send_camspi2( 0xA8 ) << 8) | (send_camspi2( 0xA8 ) << 0);
 }
 
 
@@ -204,7 +219,7 @@
     oled1.locate( 0, 3 );
     oled1.printf( "Hello World!" );
     oled1.locate( 0, 4 );
-    oled1.printf( "SPI = %s", MERMEX_OB_SPI_MODE_STR );
+    oled1.printf( "camspi = %s", MERMEX_OB_camspi_MODE_STR );
 
     for (int i = 0; i < MARMEX_OB_oled::WIDTH; i++ ) {
         oled1.pixel( i, 80 + sin( (float)i / 5.0 ) * 10, 0x000000 );