Keisuke Fujii
/
OV7670_register_set_copy
read.h@0:6c241f54042f, 2012-02-12 (annotated)
- Committer:
- Keisuke_Fujii
- Date:
- Sun Feb 12 03:47:23 2012 +0000
- Revision:
- 0:6c241f54042f
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Keisuke_Fujii | 0:6c241f54042f | 1 | void tran_frame( void ); |
Keisuke_Fujii | 0:6c241f54042f | 2 | void camera( void ); |
Keisuke_Fujii | 0:6c241f54042f | 3 | void i2c( char, int, int, char ); |
Keisuke_Fujii | 0:6c241f54042f | 4 | void write( char ); |
Keisuke_Fujii | 0:6c241f54042f | 5 | void read( int ); |
Keisuke_Fujii | 0:6c241f54042f | 6 | void start( void ); |
Keisuke_Fujii | 0:6c241f54042f | 7 | void stop( void ); |
Keisuke_Fujii | 0:6c241f54042f | 8 | |
Keisuke_Fujii | 0:6c241f54042f | 9 | const char WRITE = 0x42; |
Keisuke_Fujii | 0:6c241f54042f | 10 | const char READ = 0x43; |
Keisuke_Fujii | 0:6c241f54042f | 11 | const char TWO-WIRE = 0; |
Keisuke_Fujii | 0:6c241f54042f | 12 | const char THREE-WIRE = 1; |
Keisuke_Fujii | 0:6c241f54042f | 13 | unsigned char data[201]; |
Keisuke_Fujii | 0:6c241f54042f | 14 | unsigned short int byte = 0x00; |
Keisuke_Fujii | 0:6c241f54042f | 15 | |
Keisuke_Fujii | 0:6c241f54042f | 16 | void reset( void ) |
Keisuke_Fujii | 0:6c241f54042f | 17 | { |
Keisuke_Fujii | 0:6c241f54042f | 18 | OV7670.stop(); |
Keisuke_Fujii | 0:6c241f54042f | 19 | OV7670.frequency( 300000 ); |
Keisuke_Fujii | 0:6c241f54042f | 20 | wait_ms( 10 ); |
Keisuke_Fujii | 0:6c241f54042f | 21 | |
Keisuke_Fujii | 0:6c241f54042f | 22 | i2c( WRITE, 0x12, THREE-WIRE, 0x80 ); //reset |
Keisuke_Fujii | 0:6c241f54042f | 23 | } |
Keisuke_Fujii | 0:6c241f54042f | 24 | |
Keisuke_Fujii | 0:6c241f54042f | 25 | void tran_frame( void ) |
Keisuke_Fujii | 0:6c241f54042f | 26 | { |
Keisuke_Fujii | 0:6c241f54042f | 27 | OV7670.stop(); |
Keisuke_Fujii | 0:6c241f54042f | 28 | OV7670.frequency( 200000 ); |
Keisuke_Fujii | 0:6c241f54042f | 29 | wait_ms( 10 ); |
Keisuke_Fujii | 0:6c241f54042f | 30 | |
Keisuke_Fujii | 0:6c241f54042f | 31 | i2c( WRITE, 0x12, THREE-WIRE, 0x80 ); //reset |
Keisuke_Fujii | 0:6c241f54042f | 32 | wait_ms( 10 ); |
Keisuke_Fujii | 0:6c241f54042f | 33 | /*i2c( WRITE, 0x12, 1, 0x08 ); |
Keisuke_Fujii | 0:6c241f54042f | 34 | wait_ms( 10 ); |
Keisuke_Fujii | 0:6c241f54042f | 35 | //i2c( WRITE, 0x18, 1, 0x27 ); //HSTOP |
Keisuke_Fujii | 0:6c241f54042f | 36 | wait_ms( 10 ); |
Keisuke_Fujii | 0:6c241f54042f | 37 | //i2c( WRITE, 0x1A, 1, 0x27 ); //VSTOP*/ |
Keisuke_Fujii | 0:6c241f54042f | 38 | //i2c( WRITE, 0x11, 1, 0x83 ); //48[MHz] -> 12[MHz] |
Keisuke_Fujii | 0:6c241f54042f | 39 | //i2c( WRITE, 0x11, 1, 0x80 ); //24[MHz] -> 24[MHz] |
Keisuke_Fujii | 0:6c241f54042f | 40 | } |
Keisuke_Fujii | 0:6c241f54042f | 41 | |
Keisuke_Fujii | 0:6c241f54042f | 42 | void camera( void ) |
Keisuke_Fujii | 0:6c241f54042f | 43 | { |
Keisuke_Fujii | 0:6c241f54042f | 44 | OV7670.stop(); |
Keisuke_Fujii | 0:6c241f54042f | 45 | |
Keisuke_Fujii | 0:6c241f54042f | 46 | wait_ms( 10 ); |
Keisuke_Fujii | 0:6c241f54042f | 47 | for( int a = 0; a < 202; a ++ ) |
Keisuke_Fujii | 0:6c241f54042f | 48 | { |
Keisuke_Fujii | 0:6c241f54042f | 49 | i2c( WRITE, a, TWO-WIRE, 0 ); |
Keisuke_Fujii | 0:6c241f54042f | 50 | i2c( READ, a, TWO-WIRE, 0 ); |
Keisuke_Fujii | 0:6c241f54042f | 51 | } |
Keisuke_Fujii | 0:6c241f54042f | 52 | for( int b = 1; b <= 202; b ++ ) |
Keisuke_Fujii | 0:6c241f54042f | 53 | { |
Keisuke_Fujii | 0:6c241f54042f | 54 | device.printf("|%s : %2x ", address_name[b], data[b - 1]); |
Keisuke_Fujii | 0:6c241f54042f | 55 | if( ( b % 6 ) == 0 ) device.printf("|\n"); |
Keisuke_Fujii | 0:6c241f54042f | 56 | if( b == 202 ) device.printf("|\n"); |
Keisuke_Fujii | 0:6c241f54042f | 57 | } |
Keisuke_Fujii | 0:6c241f54042f | 58 | } |
Keisuke_Fujii | 0:6c241f54042f | 59 | |
Keisuke_Fujii | 0:6c241f54042f | 60 | void i2c( char mode, int a, int flag, char data ) |
Keisuke_Fujii | 0:6c241f54042f | 61 | { |
Keisuke_Fujii | 0:6c241f54042f | 62 | OV7670.start(); |
Keisuke_Fujii | 0:6c241f54042f | 63 | |
Keisuke_Fujii | 0:6c241f54042f | 64 | while( !( OV7670.write( mode ) ) ); |
Keisuke_Fujii | 0:6c241f54042f | 65 | wait_ms( 10 ); |
Keisuke_Fujii | 0:6c241f54042f | 66 | |
Keisuke_Fujii | 0:6c241f54042f | 67 | if( mode == 0x42 ) |
Keisuke_Fujii | 0:6c241f54042f | 68 | { |
Keisuke_Fujii | 0:6c241f54042f | 69 | write( a ); |
Keisuke_Fujii | 0:6c241f54042f | 70 | if( flag == 1 ) write( data ); |
Keisuke_Fujii | 0:6c241f54042f | 71 | } |
Keisuke_Fujii | 0:6c241f54042f | 72 | else if( mode == 0x43 ) read( a ); |
Keisuke_Fujii | 0:6c241f54042f | 73 | |
Keisuke_Fujii | 0:6c241f54042f | 74 | OV7670.stop(); |
Keisuke_Fujii | 0:6c241f54042f | 75 | wait_ms( 10 ); |
Keisuke_Fujii | 0:6c241f54042f | 76 | } |
Keisuke_Fujii | 0:6c241f54042f | 77 | |
Keisuke_Fujii | 0:6c241f54042f | 78 | void write( char reg_add ) |
Keisuke_Fujii | 0:6c241f54042f | 79 | { |
Keisuke_Fujii | 0:6c241f54042f | 80 | while( !( OV7670.write( reg_add ) ) ); |
Keisuke_Fujii | 0:6c241f54042f | 81 | } |
Keisuke_Fujii | 0:6c241f54042f | 82 | |
Keisuke_Fujii | 0:6c241f54042f | 83 | void read( int a ) |
Keisuke_Fujii | 0:6c241f54042f | 84 | { |
Keisuke_Fujii | 0:6c241f54042f | 85 | data[a] = OV7670.read( 0 ); |
Keisuke_Fujii | 0:6c241f54042f | 86 | } |