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;
}
示例#2
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);
        }
    }
}