コード例 #1
0
ファイル: main.c プロジェクト: semicontinuity/embedded
int main(void) {
    led__init();
    schedule();

    for(;;) {
        if (timer0__overflow__interrupt__pending__get()) {
            timer0__overflow__interrupt__pending__clear();
            timer0__conf__set(TIMER0_CONF_DEFAULT);
            led__toggle();
            schedule();
        }
    }
}
コード例 #2
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);
}
コード例 #3
0
ファイル: main.c プロジェクト: semicontinuity/embedded
void schedule(void) {
    timer0__value__set(0);
    timer0__conf__set(TIMER0_CONF_PRESCALER_64|TIMER0_CONF_WGM_NORMAL);
}
コード例 #4
0
ファイル: main.c プロジェクト: semicontinuity/embedded
/**
 * 1-wire thread function.
 * Invoked when it's time to render new bit on the bus.
 * Other interrupts in the system should not take much time (say, less than 3uS) not to skrew up 1-wire timings.
 */
void onewire__thread__run(void) {
    timer0__overflow__interrupt__pending__clear();

    VT_BEGIN(onewire__thread, onewire__thread__ip);
//    timer0__conf__set(TIMER0_CONF_DEFAULT);

    led__toggle();
    VT_YIELD(onewire__thread, onewire__thread__ip);
    led__toggle();
    VT_YIELD(onewire__thread, onewire__thread__ip);
    led__toggle();
    VT_YIELD(onewire__thread, onewire__thread__ip);
    led__toggle();
    VT_YIELD(onewire__thread, onewire__thread__ip);

    timer0__conf__set(TIMER0_CONF_DEFAULT);

    /*
        onewire__bus__set(0);
        timer0__value__set(0); // 0.5uS * 256 = 128uS timeout
        timer0__conf__set(ONEWIRE__BIT_SPAN_TIMER__FAST_CONF);
        VT_YIELD(onewire__thread, onewire__thread__ip);

        onewire__bus__set(1);
        timer0__conf__set(TIMER0_CONF_DEFAULT);
    */

    /*
        onewire__bus__set(0);
        timer0__value__set(0); // 0.5uS * 256 = 128uS timeout
        timer0__conf__set(ONEWIRE__BIT_SPAN_TIMER__FAST_CONF);
        VT_YIELD(onewire__thread, onewire__thread__ip);
        onewire__bus__set(1);
        timer0__conf__set(TIMER0_CONF_DEFAULT);

        onewire__bus__set(0);
        timer0__value__set(0); // 0.5uS * 256 = 128uS timeout
        timer0__conf__set(ONEWIRE__BIT_SPAN_TIMER__FAST_CONF);
        VT_YIELD(onewire__thread, onewire__thread__ip);
        onewire__bus__set(1);
        timer0__conf__set(TIMER0_CONF_DEFAULT);

        onewire__bus__set(0);
        timer0__value__set(0); // 0.5uS * 256 = 128uS timeout
        timer0__conf__set(ONEWIRE__BIT_SPAN_TIMER__FAST_CONF);
        VT_YIELD(onewire__thread, onewire__thread__ip);
        onewire__bus__set(1);
        timer0__conf__set(TIMER0_CONF_DEFAULT);
    */

    /*
        //Render "0" bit
        onewire__bus__set(0);
        timer2__compare_a__value__set(238); // 238
        timer2__value__set(118); // start from 118, count till 238 = 120, 60uS
        timer2__conf__set(ONEWIRE__BIT_FORM_TIMER__FAST_CONF);
        timer2__compare_a__interrupt__enable();
        timer0__value__set(0); // 0.5uS * 256 = 128uS timeout
        timer0__conf__set(ONEWIRE__BIT_SPAN_TIMER__FAST_CONF);

        VT_YIELD(onewire__thread, onewire__thread__ip);

        timer0__conf__set(TIMER0_CONF_DEFAULT);
        timer2__conf__set(TIMER2_CONF_DEFAULT);
        timer2__compare_a__interrupt__disable();


        // Render 32uS low pulse
        onewire__bus__set(0);
        timer2__compare_a__value__set(238);
        timer2__value__set(174); // start from 174, count till 238 = 64, 32uS
        timer2__conf__set(ONEWIRE__BIT_FORM_TIMER__FAST_CONF);
        timer2__compare_a__interrupt__enable();
        timer0__value__set(0); // 0.5uS * 256 = 128uS timeout
        timer0__conf__set(ONEWIRE__BIT_SPAN_TIMER__FAST_CONF);

        VT_YIELD(onewire__thread, onewire__thread__ip);


        timer0__conf__set(TIMER0_CONF_DEFAULT);
        timer2__conf__set(TIMER2_CONF_DEFAULT);
        timer2__compare_a__interrupt__disable();


        // Render "1" bit
        onewire__bus__set(0);
        timer2__compare_a__value__set(238); // 238
        timer2__value__set(226); // start from 226, count till 238 = 12, 6uS
        timer2__conf__set(ONEWIRE__BIT_FORM_TIMER__FAST_CONF);
        timer2__compare_a__interrupt__enable();
        timer0__value__set(0); // 0.5uS * 256 = 128uS timeout
        timer0__conf__set(ONEWIRE__BIT_SPAN_TIMER__FAST_CONF);

        VT_YIELD(onewire__thread, onewire__thread__ip);


        timer0__conf__set(TIMER0_CONF_DEFAULT);
        timer2__conf__set(TIMER2_CONF_DEFAULT);
        timer2__compare_a__interrupt__disable();
    */
    onewire__thread__alive__set(false);
    VT_END(onewire__thread);
}
コード例 #5
0
ファイル: main.c プロジェクト: semicontinuity/embedded
/** Starts the thread */
void onewire__thread__start(void) {
    VT_INIT(onewire__thread, onewire__thread__ip);
    onewire__thread__alive__set(true);
    timer0__conf__set(ONEWIRE__BIT_SPAN_TIMER__FAST_CONF);
}
コード例 #6
0
void temperature_reader__thread__start(void) {
    VT_INIT(temperature_reader__thread, temperature_reader__thread__ip);
    timer0__conf__set(TIMER0_CONF_PRESCALER_1024|TIMER0_CONF_WGM_NORMAL);
}