| | 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 | |
| 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); |
| 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 | |