[En-Nut-Discussion] samples at 8kHz
Christian Wieser
chwieser at ee.oulu.fi
Thu Nov 11 12:23:58 CET 2004
Hello Harald et al,
we have done part "-B->" and "<-C-" successfully with native
interrupts, and can send out packets at the required pace. However,
calling NutUdpReceiveFrom takes around 80 to 100ms (on an Ethernut
2.1).
Is there a way to decrease the execution time of this function?
We are also facing too long delays it we yield to another thread.
Cheers,
Christian
> Christian,
>
> Well, I think in the first place it should be noted,
> that UDP isn't reliable. There will be no fixed "clock"
> for incoming or outgoing packets. Thus some buffering is
> required:
>
> Ethernet -A-> InBuff -B-> DAC
>
> Ethernet <-D- OutBuff <-C- ADC
>
> The arrows may be viewed as tasks, reading from or writing
> to buffers.
>
> Tasks B and C must be strictly time controlled, best
> using a native timer interrupt. Nut/OS uses timer 0 only.
> For example, timer 1 can be used:
>
> SIGNAL(SIG_OUTPUT_COMPARE1A)
> {
> outb(TCNT1H, 0);
> outb(TCNT1L, 0);
> /* DAC or ADC work here */
> }
>
> /* Timer initialization, see ATmega128 datasheet. */
> void InitTimer1(void)
> {
> NutEnterCritical();
>
> outb(TCCR1A, 0);
> outb(TCCR1B, _BV(CS12));
>
> outb(TCNT1H, 0);
> outb(TCNT1L, 0);
> outb(OCR1AH, 0x01);
> outb(OCR1AL, 0x00);
>
> sbi(TIMSK, OCIE1A);
> NutExitCritical();
> }
>
> However, interrupt latency might be too high to maintain
> ADC/DAC frequency. Thus, extra hardware may be required.
>
> Tasks A and D are simple threads. Note, that it is impossible
> to have UDP packets at exactly every 20 ms. Ethernet is non-
> deterministic. Even switched Ethernets got some jitter, at least
> caused by the CPU in the switching hardware.
>
> Harald
>
> At 16:55 14.10.2004 +0300, you wrote:
> >Hello,
> >
> >I am not sure how to realize the following thing - a simple IP
> >telephone. I have realized the Control Plane by adopting a simplified
> >form of SIP (Session Initialization Protocol)
> >
> >But I come into troubles realizing the Media exchange.
> >
> >The phone should sample voice from ADC0 and makes out of it an RTP
> >(Real Time Protocol) Stream (using G.711 encoding I have to send a UDP
> >packet every 20ms). I have to get a sample every 125us (8kHz) and kick
> >incoming RTP packets piece by piece to an PWM counter.
> >
> >My question now is: Can this be done using NUT/OS? What would be a way
> >to do so?
> >
> >Cheers for any answers,
> >
> >Christian Wieser
> >mailto:chwieser at ee.oulu.fi
> >
> >
> >_______________________________________________
> >En-Nut-Discussion mailing list
> >En-Nut-Discussion at egnite.de
> >http://www.egnite.de/mailman/listinfo.cgi/en-nut-discussion
>
> _______________________________________________
> En-Nut-Discussion mailing list
> En-Nut-Discussion at egnite.de
> http://www.egnite.de/mailman/listinfo.cgi/en-nut-discussion
Christian Wieser
mailto:chwieser at ee.oulu.fi
More information about the En-Nut-Discussion
mailing list