Changeset 618 in cmucam
- Timestamp:
- 02/17/10 15:16:57 (2 years ago)
- Location:
- trunk
- Files:
-
- 3 edited
-
hal/lpc2103-retkodfuncam/interrupt.h (modified) (1 diff)
-
projects/cmucam1/cmucam1.c (modified) (9 diffs)
-
projects/cmucam1/ppm-fd/ppm-fd.c (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/hal/lpc2103-retkodfuncam/interrupt.h
r614 r618 20 20 #define INTERRUPT_H 21 21 22 #define ROW_BUF_LEN 50022 #define ROW_BUF_LEN 710 23 23 24 24 #include <stdbool.h> -
trunk/projects/cmucam1/cmucam1.c
r615 r618 106 106 107 107 volatile uint32_t row_width; 108 volatile uint32_t dclk_lines[288];109 108 extern volatile uint8_t row_buf[ROW_BUF_LEN]; 110 109 … … 138 137 void my_hblk() 139 138 { 140 if(hblk_cnt< 100)139 if(hblk_cnt<285) 141 140 { 142 141 // New row is starting … … 190 189 exit (1); 191 190 } 192 191 /* 193 192 uint8_t data[] = {0x02, 0x40}; 194 193 n=i2c_test_write_polling(0x3d, data, sizeof data); … … 223 222 224 223 data[0] = 0x1a; 225 data[1] = 0xff; 224 data[1] = 0x00; 225 // data[1] = 0xff; 226 226 n=i2c_test_write_polling(0x3d, data, sizeof data); 227 227 228 228 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; 230 240 n=i2c_test_write_polling(0x3d, data, sizeof data); 231 241 … … 245 255 246 256 data[0] = 0x1f; 247 data[1] = 0x0b; 257 // data[1] = 0x0b; 258 data[1] = 0x01; 248 259 n=i2c_test_write_polling(0x3d, data, sizeof data); 249 260 250 261 data[0] = 0x1e; 251 data[1] = 0xe7; 262 data[1] = 0x7e; 263 // data[1] = 0xe7; 252 264 n=i2c_test_write_polling(0x3d, data, sizeof data); 253 265 … … 256 268 data[1] = 0x1d; 257 269 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 258 379 259 380 … … 267 388 268 389 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 captured281 row=capture_next_row(ROW_BUF_LEN); // 1280 is max282 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);303 390 304 391 /* … … 435 522 print_ACK (); 436 523 print_cr (); 437 row_max=300; 438 col_max=300; 524 439 525 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 ) 442 529 { 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); 476 541 if(red<4) red=4; 477 542 if(green<4) green=4; … … 480 545 cc3_uart0_putchar (green); 481 546 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 502 579 } 503 cc3_uart0_putchar (3);580 cc3_uart0_putchar (3); 504 581 /*old_coi = cc3_g_pixbuf_frame.coi; 505 582 if (n == 1) { -
trunk/projects/cmucam1/ppm-fd/ppm-fd.c
r616 r618 13 13 main (int argc, char *argv[]) 14 14 { 15 int k ;15 int k,j; 16 16 uint8_t c,started; 17 17 … … 98 98 } 99 99 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)); 102 102 for (y = 0; y < y_max; y+=2) 103 103 for (x = 0; x < x_max; x++) 104 104 { 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 } 107 109 } 108 110 fclose (fp);
Note: See TracChangeset
for help on using the changeset viewer.
