Changeset 618

Show
Ignore:
Timestamp:
02/17/10 15:16:57 (5 months ago)
Author:
anthony_rowe
Message:

fixed buffer memory size

Location:
trunk
Files:
3 modified

Legend:

Unmodified
Added
Removed
  • trunk/hal/lpc2103-retkodfuncam/interrupt.h

    r614 r618  
    2020#define INTERRUPT_H 
    2121 
    22 #define ROW_BUF_LEN             500 
     22#define ROW_BUF_LEN     710      
    2323 
    2424#include <stdbool.h> 
  • trunk/projects/cmucam1/cmucam1.c

    r615 r618  
    106106 
    107107volatile uint32_t row_width; 
    108 volatile uint32_t dclk_lines[288]; 
    109108extern volatile uint8_t row_buf[ROW_BUF_LEN]; 
    110109 
     
    138137void my_hblk() 
    139138{ 
    140         if(hblk_cnt<100)  
     139        if(hblk_cnt<285)  
    141140        { 
    142141                // New row is starting 
     
    190189    exit (1); 
    191190  } 
    192  
     191/* 
    193192  uint8_t data[] = {0x02, 0x40}; 
    194193  n=i2c_test_write_polling(0x3d, data, sizeof data); 
     
    223222 
    224223  data[0] = 0x1a; 
    225   data[1] = 0xff; 
     224  data[1] = 0x00; 
     225//  data[1] = 0xff; 
    226226  n=i2c_test_write_polling(0x3d, data, sizeof data); 
    227227 
    228228  data[0] = 0x1b; 
    229   data[1] = 0xb3; 
     229  data[1] = 0x00; 
     230//  data[1] = 0xb3; 
     231  n=i2c_test_write_polling(0x3d, data, sizeof data); 
     232 
     233  // agr new since cmucam1 frame dump 
     234  data[0] = 0x1c; 
     235  data[1] = 0x00; 
     236  n=i2c_test_write_polling(0x3d, data, sizeof data); 
     237 
     238  data[0] = 0x1c; 
     239  data[1] = 0x00; 
    230240  n=i2c_test_write_polling(0x3d, data, sizeof data); 
    231241 
     
    245255 
    246256  data[0] = 0x1f; 
    247   data[1] = 0x0b; 
     257//  data[1] = 0x0b; 
     258  data[1] = 0x01; 
    248259  n=i2c_test_write_polling(0x3d, data, sizeof data); 
    249260 
    250261  data[0] = 0x1e; 
    251   data[1] = 0xe7; 
     262  data[1] = 0x7e; 
     263//  data[1] = 0xe7; 
    252264  n=i2c_test_write_polling(0x3d, data, sizeof data); 
    253265 
     
    256268  data[1] = 0x1d; 
    257269  n=i2c_test_write_polling(0x3d, data, sizeof data); 
     270*/ 
     271 
     272 
     273  uint8_t data[] = {0x02, 0x40}; 
     274  n=i2c_test_write_polling(0x3d, data, sizeof data); 
     275 
     276  data[0] = 0x0d; 
     277  data[1] = 0x01; 
     278  n=i2c_test_write_polling(0x3d, data, sizeof data); 
     279 
     280  data[0] = 0x0b; 
     281  data[1] = 0x00; 
     282  n=i2c_test_write_polling(0x3d, data, sizeof data); 
     283 
     284  data[0] = 0x6d; 
     285  data[1] = 0xa1; 
     286  n=i2c_test_write_polling(0x3d, data, sizeof data); 
     287 
     288  data[0] = 0x58; 
     289  data[1] = 0x10; 
     290  n=i2c_test_write_polling(0x3d, data, sizeof data); 
     291 
     292  data[0] = 0x05; 
     293  data[1] = 0x00; 
     294  n=i2c_test_write_polling(0x3d, data, sizeof data); 
     295 
     296  data[0] = 0x1a; 
     297  data[1] = 0xff; 
     298  n=i2c_test_write_polling(0x3d, data, sizeof data); 
     299 
     300  data[0] = 0x1b; 
     301  data[1] = 0xb3; 
     302  n=i2c_test_write_polling(0x3d, data, sizeof data); 
     303 
     304  data[0] = 0x0e; 
     305  data[1] = 0x1c; 
     306  n=i2c_test_write_polling(0x3d, data, sizeof data); 
     307 
     308  data[0] = 0x11; 
     309  data[1] = 0x4a; 
     310  n=i2c_test_write_polling(0x3d, data, sizeof data); 
     311 
     312  data[0] = 0x14; 
     313  data[1] = 0x33; 
     314  n=i2c_test_write_polling(0x3d, data, sizeof data); 
     315 
     316  data[0] = 0x1f; 
     317  data[1] = 0x0b; 
     318  n=i2c_test_write_polling(0x3d, data, sizeof data); 
     319 
     320  data[0] = 0x1e; 
     321  data[1] = 0xe7; 
     322  n=i2c_test_write_polling(0x3d, data, sizeof data); 
     323 
     324  data[0] = 0x04; 
     325   data[1] = 0x1d;   //YUV 
     326  // data[1] = 0x19;   //RGB 
     327  n=i2c_test_write_polling(0x3d, data, sizeof data); 
     328 
     329 
     330 
     331        /* 
     332 uint8_t data[] = {0x02, 0x40}; 
     333  n=i2c_test_write_polling(0x3d, data, sizeof data); 
     334 
     335  data[0] = 0x0d; data[1] = 0x01; 
     336  n=i2c_test_write_polling(0x3d, data, sizeof data); 
     337 
     338  data[0] = 0x0b; data[1] = 0x00; 
     339  n=i2c_test_write_polling(0x3d, data, sizeof data); 
     340 
     341  data[0] = 0x6d; data[1] = 0xa1; 
     342  n=i2c_test_write_polling(0x3d, data, sizeof data); 
     343 
     344  data[0] = 0x58; data[1] = 0x10; 
     345  n=i2c_test_write_polling(0x3d, data, sizeof data); 
     346 
     347  data[0] = 0x05; data[1] = 0x00; 
     348  n=i2c_test_write_polling(0x3d, data, sizeof data); 
     349 
     350  data[0] = 0x1a; data[1] = 0x00; 
     351  n=i2c_test_write_polling(0x3d, data, sizeof data); 
     352 
     353  data[0] = 0x1b; data[1] = 0x00; 
     354  n=i2c_test_write_polling(0x3d, data, sizeof data); 
     355 
     356//  data[0] = 0x1c; data[1] = 0x00; 
     357//  n=i2c_test_write_polling(0x3d, data, sizeof data); 
     358 
     359  data[0] = 0x1e; data[1] = 0x7e; 
     360  n=i2c_test_write_polling(0x3d, data, sizeof data); 
     361 
     362  data[0] = 0x1f; data[1] = 0x01; 
     363  n=i2c_test_write_polling(0x3d, data, sizeof data); 
     364 
     365  data[0] = 0x0e; data[1] = 0xac; 
     366  n=i2c_test_write_polling(0x3d, data, sizeof data); 
     367 
     368  data[0] = 0x04; data[1] = 0x1d; 
     369  n=i2c_test_write_polling(0x3d, data, sizeof data); 
     370 
     371  data[0] = 0x11; data[1] = 0x4a; 
     372  n=i2c_test_write_polling(0x3d, data, sizeof data); 
     373 
     374  data[0] = 0x14; data[1] = 0x33; 
     375  n=i2c_test_write_polling(0x3d, data, sizeof data); 
     376*/ 
     377 
     378 
    258379 
    259380 
     
    267388 
    268389   
    269  
    270  
    271         cc3_uart0_putchar (1); 
    272         // Start next frame capture (vblk stops at end of frame) 
    273    
    274         for(x=0; x<200; x+=4 ) 
    275         { 
    276                 cc3_uart0_putchar (2); 
    277                 frame_done=0; 
    278                 enable_vblk_interrupt();  
    279                 do { 
    280                         // ask for a row of size n, return which row was captured 
    281                         row=capture_next_row(ROW_BUF_LEN); // 1280 is max 
    282  
    283                         y1=row_buf[x]; 
    284                         u=row_buf[x+1]; 
    285                         y2=row_buf[x+2]; 
    286                         v=row_buf[x+3]; 
    287  
    288                         if(y1<4) y1=4; 
    289                         if(y2<4) y2=4; 
    290                         if(u<4) u=4; 
    291                         if(v<4) v=4; 
    292                         cc3_uart0_putchar (y1); 
    293                         cc3_uart0_putchar (u); 
    294                         cc3_uart0_putchar (v); 
    295          
    296                         cc3_uart0_putchar (y2); 
    297                         cc3_uart0_putchar (u); 
    298                         cc3_uart0_putchar (v); 
    299                 } while(!frame_done); 
    300         } 
    301 cc3_uart0_putchar (3); 
    302 while(1); 
    303390 
    304391/* 
     
    435522        print_ACK (); 
    436523        print_cr (); 
    437         row_max=300; 
    438         col_max=300; 
     524 
    439525        cc3_uart0_putchar (1); 
    440         cc3_uart0_putchar (2); 
    441         for(col=0; col<col_max; col++ ) 
     526        // Start next frame capture (vblk stops at end of frame) 
     527   
     528        for(x=0; x<704; x+=4  ) 
    442529        { 
    443         while (REG (GPIO_IOPIN) & _CC3_CAM_VBLK);    
    444         while (!(REG (GPIO_IOPIN) & _CC3_CAM_VBLK));  
    445         // for now don't put putc here to make sure we aren't missing data       
    446         // wait until vblk goes low to high 
    447  
    448                 for(row=0; row<row_max; row++ ) 
    449                 { 
    450                 // wait until hblk goes high wait until previous row completes 
    451                 while ((REG (GPIO_IOPIN) & _CC3_CAM_HBLK)); 
    452                 while (!(REG (GPIO_IOPIN) & _CC3_CAM_HBLK)); 
    453  
    454                 // enable fiq and start counting pixels 
    455                 // traverse current col value into row  
    456                 for(j=0; j<col+1; j++ ) 
    457                 { 
    458                         // for(i=0; i<2; i++ )   // For RGB  
    459                          for(i=0; i<4; i++ )   // For YUV  
    460                                 { 
    461                                 // Read pix value on rising edge 
    462                                 //do{ 
    463                                 //raw_pix_data_tmp=REG(GPIO_IOPIN); 
    464                                 //} while((raw_pix_data_tmp & _CC3_CAM_DCLK)==0 ); 
    465                                 //raw_pix_data[i]=raw_pix_data_tmp; 
    466                                 while (!(REG (GPIO_IOPIN) & _CC3_CAM_DCLK));  
    467                                 raw_pix_data[i]=REG(GPIO_IOPIN);  
    468                                 while (REG (GPIO_IOPIN) & _CC3_CAM_DCLK); 
    469                                 }        
    470                                  
    471                 } 
    472      /*  
    473                 red=pix_data[1] & 0xf8;  
    474                 blue=pix_data[0] & 0x1f<<3;  
    475                 green=(pix_data[0] & 0xe0>>5) | (pix_data[1]<<5);  
     530                cc3_uart0_putchar (2); 
     531                frame_done=0; 
     532                enable_vblk_interrupt();  
     533                do { 
     534                        // ask for a row of size n, return which row was captured 
     535                        row=capture_next_row(ROW_BUF_LEN); // 1280 is max 
     536                /* 
     537                // RGB 
     538                red=row_buf[x] & 0xf8;  
     539                blue=row_buf[x+1] & 0x1f<<3;  
     540                green=(row_buf[x+1] & 0xe0>>5) | (row_buf[x]<<5);  
    476541                if(red<4) red=4; 
    477542                if(green<4) green=4; 
     
    480545                cc3_uart0_putchar (green); 
    481546                cc3_uart0_putchar (blue); 
    482 */               
    483                  
    484                 // Filter out control characters         
    485                 for(i=0; i<4; i++ ) {  
    486                         pix_data[i]=raw_pix_data[i]>>24; 
    487                         if(pix_data[i]<4) pix_data[i]=4; 
    488                 } 
    489  
    490                 cc3_uart0_putchar (pix_data[1]); 
    491                 cc3_uart0_putchar (pix_data[0]); 
    492                 cc3_uart0_putchar (pix_data[2]); 
    493                  
    494                 cc3_uart0_putchar (pix_data[3]); 
    495                 cc3_uart0_putchar (pix_data[0]); 
    496                 cc3_uart0_putchar (pix_data[2]); 
    497          
    498                 } 
    499         cc3_led_set_state(0, led_state);  
    500         led_state=!led_state; 
    501         cc3_uart0_putchar (2); 
     547 
     548                red=row_buf[x+2] & 0xf8;  
     549                blue=row_buf[x+3] & 0x1f<<3;  
     550                green=(row_buf[x+3] & 0xe0>>5) | (row_buf[x+2]<<5);  
     551                if(red<4) red=4; 
     552                if(green<4) green=4; 
     553                if(blue<4) blue=4; 
     554                cc3_uart0_putchar (red); 
     555                cc3_uart0_putchar (green); 
     556                cc3_uart0_putchar (blue); 
     557                */ 
     558                         
     559                        // YUV 
     560                        y1=row_buf[x]; 
     561                        v=row_buf[x+1]; 
     562                        y2=row_buf[x+2]; 
     563                        u=row_buf[x+3]; 
     564 
     565                        if(y1<4) y1=4; 
     566                        if(y2<4) y2=4; 
     567                        if(u<4) u=4; 
     568                        if(v<4) v=4; 
     569                        cc3_uart0_putchar (y1); 
     570                        cc3_uart0_putchar (u); 
     571                        cc3_uart0_putchar (v); 
     572                        // Strange interlacing to get second pixel, fix later    
     573                        cc3_uart0_putchar (y2); 
     574                        cc3_uart0_putchar (u); 
     575                        cc3_uart0_putchar (v); 
     576 
     577                } while(!frame_done); 
     578 
    502579        } 
    503         cc3_uart0_putchar (3); 
     580        cc3_uart0_putchar (3); 
    504581        /*old_coi = cc3_g_pixbuf_frame.coi; 
    505582        if (n == 1) { 
  • trunk/projects/cmucam1/ppm-fd/ppm-fd.c

    r616 r618  
    1313main (int argc, char *argv[]) 
    1414{ 
    15   int k; 
     15  int k,j; 
    1616  uint8_t c,started; 
    1717 
     
    9898    } 
    9999 
    100   printf( "x_max=%d y_max=%d\n",x_max*2, y_max/2 ); 
    101   fprintf (fp, "P6\n%d %d\n255\n", x_max*2, y_max/2); 
     100  printf( "x_max=%d y_max=%d\n",x_max*2, y_max/(2) ); 
     101  fprintf (fp, "P6\n%d %d\n255\n", x_max*2, y_max/(2)); 
    102102  for (y = 0; y < y_max; y+=2) 
    103103    for (x = 0; x < x_max; x++) 
    104104    { 
    105       for (k = 0; k < 3; k++) fprintf (fp, "%c", img[x][y][k]); 
    106       for (k = 0; k < 3; k++) fprintf (fp, "%c", img[x][y+1][k]); 
     105      for(j=0; j<2; j++ ) 
     106      { 
     107        for (k = 0; k < 3; k++) fprintf (fp, "%c", img[x][y+j][k]); 
     108      } 
    107109    } 
    108110  fclose (fp);