Intel 82801EB Universal Remote User Manual


 
Intel® ICH5 AC ’97 Modem Driver
R
52 AC ’97 Programmer’s Reference Manual
The first invocation of the host based modem task provides an initial buffer and one or more
buffers of spurious data (henceforth, spurious buffers). The task chooses or computes each of the
spurious buffer(s) based on signal state at end of immediately preceding buffer. Note that these
buffers do not have to be computed on the fly but can be precomputed and indexed into at run
time. Subsequent invocations overwrite the previously provided spurious data with good data so
that under normal conditions the spurious data is never used or consumed by the DMA engine. In
the event that the host based modem task does not generate the next buffer in time for the DMA
engine to begin consuming it the DMA engine is able to begin consuming the spurious buffer and
thereby maintain seamless connection with the other modem’s datapump.
9.1.1 Spurious Data Algorithm
The following pseudo code presents a conceptual view the algorithm. LastState() is a
function of which returns a unique integer as a function of, for example, the carrier phase and baud
position of the last sample in the buffer. In an actual implementation this value would be computed
during the course of generating the buffer. The SpuriousBufferList is an array of
precomputed spurious buffers.
while (1)
{
compute next buffer;
pNextBuffer = &buffer;
pSpuriousBuffer = &(SpuriousBufferList[LastState(buffer)]);
wait for timer interrupt;
}
In this simplified scenario the device grabs the pNextBuffer address and stores it locally, using
it to request the samples in the buffer one at a time. At the same time the device copies the
pSpuriousBuffer into pNextBuffer so that when it is done with the current buffer it will
get the spurious buffer unless the host software runs and overwrites pNextBuffer with a pointer
to good data. In the next section we show how to implement the spurious data algorithm within the
context of the ICH5 AC ’97 buffer descriptor interface to hardware.
9.1.2 Intel
®
ICH5 AC ’97 Spurious Data Implementation
The following pseudo code presents a modified version of the routine that prepares buffers and
inserts them into the ICH5 AC ’97 buffer descriptor list. In contrast to the version of this routine
given in Section 3.2.3, in this version tail points to the last good (i.e., non-spurious) buffer in
the list. Furthermore, because the ICH5 AC ’97 DMA engine pre-fetches the next buffer descriptor
we split the buffer generated by the datapump into two parts, with the second as small as practical
and denote this size as MinBufferLength (here assumed to be 8 samples = 4 DWORDS = 500
µs. at 16 kHz.). For simplicity we assume that only a single buffer is generated by the datapump at
a time and we ignore checking for the end of the descriptor list (i.e., the addition is implicitly
modulo 32).