int main (void) { // Configire LEDS pio_config_set (LED0_PIO, PIO_OUTPUT_HIGH); pio_config_set (LED1_PIO, PIO_OUTPUT_HIGH); pio_config_set (LED2_PIO, PIO_OUTPUT_HIGH); pio_config_set (LED3_PIO, PIO_OUTPUT_HIGH); i2c_slave1 = i2c_slave_init (&i2c_bus_cfg, &i2c_slave1_cfg); // Initialise as I2C slave extint1 = extint_init (&extint1_cfg); // Initialise I2C Interrupt // Initialise comms_data uint8_t cd_photo_ready = 0; uint8_t cd_fault = 0; comms_data[CD_PHOTO_READY-ARRAY_OFFSET] = &cd_photo_ready; comms_data[CD_PHOTO_NEXT_LINE-ARRAY_OFFSET] = image; comms_data[CD_FAULT-ARRAY_OFFSET] = &cd_fault; extint_enable (extint1); // Enable I2C Interrupt tcm8230_init (&cfg); // Initialise Camera kernel_init (); // Initialise Kernel // Register Tasks for kernel kernel_taskRegister (command_task, COMMAND_TASK, &comms_data, 200); kernel_taskRegister (capture_task, CAPTURE_TASK, 0, 500); kernel_taskRegister (photo_ready_flash_task, PHOTO_READY_FLASH_TASK, 0, 200); // Block any currently uneeded task kernelTaskBlocked (CAPTURE_TASK); kernelTaskBlocked (PHOTO_READY_FLASH_TASK); // Finally start the kernel, no code beyone here will be run kernel_start (); return 0; }
int main (void) { led_t leds[LEDS_NUM]; usb_cdc_t usb_cdc; int i; /* Initialise LEDs. */ for (i = 0; i < LEDS_NUM; i++) leds[i] = led_init (&leds_cfg[i]); led_set (leds[0], 0); led_set (leds[1], 0); led_set (leds[2], 0); usb_cdc = usb_cdc_init (); sys_redirect_stdin ((void *)usb_cdc_read, usb_cdc); sys_redirect_stdout ((void *)usb_cdc_write, usb_cdc); sys_redirect_stderr ((void *)usb_cdc_write, usb_cdc); tcm8230_init (&cfg); /* Wait until USB configured. */ while (! usb_cdc_update ()) continue; led_set (leds[0], 1); while (1) { int32_t ret; led_set (leds[1], 1); while ( tcm8230_frame_ready_p ()) continue; led_set (leds[1], 0); while (! tcm8230_frame_ready_p ()) continue; led_set (leds[1], 1); ret = tcm8230_capture (image, sizeof(image), 200); if (usb_cdc_update ()) { led_set (leds[0], 1); led_set (leds[2], 1); if (ret < 0) fprintf (stderr, "TCM8230 error: %d\r\n", (int)ret); else image_dump(image, SQCIF_HEIGHT, SQCIF_WIDTH); led_set (leds[2], 0); } else { /* USB disconnected. */ led_set (leds[0], 0); } } }