Exemplo n.º 1
0
void soft_usart__rx__thread__run(void) {
    VT_BEGIN(soft_usart__rx__thread, soft_usart__rx__thread__ip);

    led_red__set(0);

    uint8_t pin_data0 = PIN_REG(SOFT_USART__RX__PORT);
    COPY_BIT(pin_data0, SOFT_USART__RX__PIN, soft_usart__rx__data, 0);
    VT_YIELD(soft_usart__rx__thread, soft_usart__rx__thread__ip);

    uint8_t pin_data1 = PIN_REG(SOFT_USART__RX__PORT);
    COPY_BIT(pin_data1, SOFT_USART__RX__PIN, soft_usart__rx__data, 1);
    VT_YIELD(soft_usart__rx__thread, soft_usart__rx__thread__ip);

    uint8_t pin_data2 = PIN_REG(SOFT_USART__RX__PORT);
    COPY_BIT(pin_data2, SOFT_USART__RX__PIN, soft_usart__rx__data, 2);
    VT_YIELD(soft_usart__rx__thread, soft_usart__rx__thread__ip);

    uint8_t pin_data3 = PIN_REG(SOFT_USART__RX__PORT);
    COPY_BIT(pin_data3, SOFT_USART__RX__PIN, soft_usart__rx__data, 3);
    VT_YIELD(soft_usart__rx__thread, soft_usart__rx__thread__ip);

    uint8_t pin_data4 = PIN_REG(SOFT_USART__RX__PORT);
    COPY_BIT(pin_data4, SOFT_USART__RX__PIN, soft_usart__rx__data, 4);
    VT_YIELD(soft_usart__rx__thread, soft_usart__rx__thread__ip);

    uint8_t pin_data5 = PIN_REG(SOFT_USART__RX__PORT);
    COPY_BIT(pin_data5, SOFT_USART__RX__PIN, soft_usart__rx__data, 5);
    VT_YIELD(soft_usart__rx__thread, soft_usart__rx__thread__ip);

    uint8_t pin_data6 = PIN_REG(SOFT_USART__RX__PORT);
    COPY_BIT(pin_data6, SOFT_USART__RX__PIN, soft_usart__rx__data, 6);
    VT_YIELD(soft_usart__rx__thread, soft_usart__rx__thread__ip);

    uint8_t pin_data7 = PIN_REG(SOFT_USART__RX__PORT);
    COPY_BIT(pin_data7, SOFT_USART__RX__PIN, soft_usart__rx__data, 7);
    VT_YIELD(soft_usart__rx__thread, soft_usart__rx__thread__ip);

    // In the middle of stop bit
    soft_usart__timer__stop();        
    int0__start();
    led_red__set(1);

    if (soft_usart__rx__data == 42) {
        led_green__set(0);
    }
    else {
        led_green__set(1);
    }


    VT_UNREACHEABLE_END(soft_usart__rx__thread);
}
Exemplo n.º 2
0
void blink_thread__run(void) {
    VT_BEGIN(blink_thread, blink_thread__ip);

    for(;;) {
        VT_MARK(blink_thread, OFF);
        PORTC &= ~(1<<0);
        VT_YIELD(blink_thread, blink_thread__ip);


        VT_MARK(blink_thread, ON);
        PORTC |= (1<<0);
        VT_GOTO(blink_thread, blink_thread__ip, BEGIN);
    }

    VT_UNREACHEABLE_END(blink_thread);
}
Exemplo n.º 3
0
void temperature_reader__thread__run(void) {
    VT_BEGIN(temperature_reader__thread, temperature_reader__thread__ip);
    timer0__overflow__interrupt__pending__clear();
    for (;;) {
//        led1__set(1);
//        led2__set(1);

        onewire__setup_transaction((uint8_t) sizeof(command_convert), 0, command_convert, 0);
        onewire__transaction();
        do {
            VT_YIELD_WITH_MARK(temperature_reader__thread, temperature_reader__thread__ip, COMMAND_CONVERT);
            onewire__thread__run();
        }
        while (onewire__thread__is_alive());

//        led1__set(1);
//        led2__set(0);

        onewire__thread__delay_counter = 46;
        timer0__conf__set(TIMER0_CONF_PRESCALER_1024|TIMER0_CONF_WGM_NORMAL);
        for (;;) {            
            VT_YIELD_WITH_MARK(temperature_reader__thread, temperature_reader__thread__ip, SLEEP);
            timer0__overflow__interrupt__pending__clear();
            if (--onewire__thread__delay_counter == 0) break;
        }

//        led1__set(0);
//        led2__set(1);

        onewire__setup_transaction(sizeof(command), sizeof(response), command, response);
        onewire__transaction();
        do {
            VT_YIELD_WITH_MARK(temperature_reader__thread, temperature_reader__thread__ip, COMMAND_READ);
            onewire__thread__run();
        }
        while (onewire__thread__is_alive());

//        led1__set(0);
//        led2__set(0);

        temperature_reader__reading = (response[0] | (response[1] << 8)) << 4;
        temperature_reader__reading__on_changed();

//        _delay_ms(1);
    }
    VT_UNREACHEABLE_END(temperature_reader__thread);
}