void enc_transmit_pbuf(struct pbuf *buf)
{
    uint16_t length = buf->tot_len;

    /** @todo check buffer size */
    transmit_start();
    while(1) {
        transmit_partial(buf->payload, buf->len);
        if (buf->len == buf->tot_len)
            break;
        buf = buf->next;
    }
    transmit_end(length);
}
Beispiel #2
0
void sense_measure(uint8_t txchan, uint8_t rxchan, uint8_t n) {

    uint8_t phase = 0;
    uint8_t count = 0;
    uint8_t done = 0;
    
    // This needs to be signed
    int16_t samp;

    measurement[0] = 0;
    measurement[1] = 0;
    measurement[2] = 0;
    measurement[3] = 0;
    
    transmit_select(txchan);
    transmit_start();
    sense_start();
    
    ADMUX |= rxchan;
    _delay_us(290);
    _delay_loop_1(3);
    NOP;

    ADCSRA |= (1<<ADEN);
    ADCSRA |= (1<<ADSC);

    while(!done) {
        while(!adc_done);
        samp = ADC - 512;
        adc_done = 0;
        if(phase & 2) {
            measurement[phase & 1] += samp;
        } else {
            measurement[phase & 1] -= samp;
        }
        if(phase == 3) count++;
        phase = (phase + 1) & 3;
        if(count == n) done = 1;
    }

    sense_finish();
}