Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: MARY_CAMERA NokiaLCD mbed
Diff: main.cpp
- Revision:
- 2:2e03fc4f485b
- Parent:
- 1:ce27bc7b44d4
- Child:
- 3:152362acd181
--- 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 );