[alsa-devel] playback write error (DMA or IRQ trouble)

Harsha priya gupta harshapriya at gmail.com
Mon Jun 2 12:09:07 CEST 2008


OK. So can i assume that its compulsory to raise at least a timer interrupt
every 1 second (for 48K sample/ 48 kHz). if its 96Khz, then i would have to
raise the timer interrupt every 2 seconds... correct?

On Mon, Jun 2, 2008 at 3:32 PM, Takashi Iwai <tiwai at suse.de> wrote:

> At Mon, 2 Jun 2008 15:16:06 +0530,
> Harsha priya gupta wrote:
> >
> > Is there any way to avoid the timer part? Because i do not want the cpu
> to
> > bother with anything till the hardware has done its part.
>
> But your hardware doesn't do what we need.  A basic part is missing.
>
> > after the hardware
> > interrupts, can i manipulate someway to get the next buffer rather than
> > interrupting every 1 sec to say that the period has been processed.
>
> Well, how would you handle "the next buffer"?
>
> Suppose all samples on the buffer are processed and an irq is issued.
> At this moment, you have no data on the buffer.  It means that the
> device is already in a buffer-underrun error state.
>
> The period-based transfer is the basis of ALSA PCM transfer model.
> In this way, you can write programs requiring a precise timing
> control, too.
>
>
> Takashi
>
> >
> > On Mon, Jun 2, 2008 at 3:10 PM, Takashi Iwai <tiwai at suse.de> wrote:
> >
> >     At Mon, 2 Jun 2008 15:06:03 +0530,
> >     Harsha priya gupta wrote:
> >     >
> >     > Say if my hardware is such that it shall interrupt only after it
> has
> >     processed
> >     > entire sample and not ever period or sample. What will ensure that
> i get
> >     my
> >     > next buffer down? Will calling the snd_pcm_period_elapsed in the
> >     interrupt
> >     > function help?
> >
> >     So, your hardware has only a single ring buffer and can issue an
> >     interrupt only at the end of the buffer?
> >
> >     If so, you might need to seek for another interrupt source, such as a
> >     system timer.
> >
> >     Takashi
> >
> >     > On Mon, Jun 2, 2008 at 2:54 PM, Takashi Iwai <tiwai at suse.de>
> wrote:
> >     >
> >     >     At Mon, 2 Jun 2008 14:33:14 +0530,
> >     >     Harsha priya gupta wrote:
> >     >     >
> >     >     > Quick question
> >     >     >
> >     >     > From my copy function after I pass the buffer to HW, what
> would
> >     happen if
> >     >     i
> >     >     > call snd_pcm_period_elapsed.
> >     >
> >     >     It's invalid and a misdesign.
> >     >
> >     >     I guess you are misunderstanding about when to
> >     >     callsnd_pcm_period_elapsed().  snd_pcm_period_elapsed() is
> called
> >     when
> >     >     one period of samples on the hardware is *processed*.  It
> doesn't
> >     mean
> >     >     that the samples are transferred to the hardware.
> >     >
> >     >     Suppose that you have period_size = 48000 (frames) for 48kHz
> samples.
> >     >     Then, the first snd_pcm_period_epased() shall be called just
> one
> >     >     second after starting the PCM stream.  The second call be
> another one
> >     >     second later, and so on.  It doesn't matter how quick the copy
> to h/w
> >     >     is done (via copy callback).
> >     >
> >     >     Takashi
> >     >
> >     >     >
> >     >     > On Mon, Jun 2, 2008 at 1:37 PM, Takashi Iwai <tiwai at suse.de>
> wrote:
> >     >     >
> >     >     >     At Mon, 2 Jun 2008 13:26:01 +0530,
> >     >     >     Harsha priya gupta wrote:
> >     >     >     >
> >     >     >     > I implemented the copy function and immediately
> transfered
> >     the user
> >     >     block
> >     >     >     data
> >     >     >     > to the hardware.
> >     >     >     >
> >     >     >     > Correct me if am wrong;
> >     >     >     > .pointer implementation - passes the current buffer
> pointer.
> >     When
> >     >     the
> >     >     >     .pointer
> >     >     >     > function returns the size of the buffer = user buffer
> size
> >     >     logically I
> >     >     >     need to
> >     >     >     > expect the hardware to send an interrupt because buffer
> is
> >     consumed
> >     >     and I
> >     >     >     > should call snd_pcm_period_elapsed after that.
> >     >     >     >
> >     >     >     > what would happen if i call the snd_pcm_period_elapsed
> from
> >     the
> >     >     pointer
> >     >     >     > function once the buffer is consumed from hardware.
> Would
> >     that be
> >     >     right?
> >     >     >      This
> >     >     >     > is what i am trying to do
> >     >     >
> >     >     >     The logic is reversed.
> >     >     >     The pointer callback is a passive one that does nothing
> but
> >     returning
> >     >     >     the current h/w buffer position.  This is called either
> from
> >     >     >     snd_pcm_period_elapsed() or at the PCM status update.
> >     >     >
> >     >     >     You must call snd_pcm_period_elapsed() somewhere in your
> driver
> >     >     >     *explicitly* at the timing that one period is finished.
> >      Usually,
> >     >     this
> >     >     >     is done in an IRQ handler the h/w generates at the period
> >     >     ("fragment",
> >     >     >     "half-buffer", or whatever) boundary.
> >     >     >
> >     >     >     And note that the valid value from the pointer callback
> is
> >     between 0
> >     >     >     and buffer_size-1 as it handles the buffer as a
> ring-buffer.
> >      The
> >     >     >     value buffer_size is invalid.
> >     >     >
> >     >     >     Takashi
> >     >     >
> >     >     >     > On Mon, Jun 2, 2008 at 1:02 PM, Takashi Iwai <
> tiwai at suse.de>
> >     wrote:
> >     >     >     >
> >     >     >     >     At Mon, 2 Jun 2008 12:39:31 +0530,
> >     >     >     >     Harsha priya gupta wrote:
> >     >     >     >     >
> >     >     >     >     > Can anyone give me a clue as to when i would get
> such
> >     an
> >     >     error?
> >     >     >     >
> >     >     >     >     ... only if you give more clue what exactly you
> did.
> >     >     >     >
> >     >     >     >     In general, it implies that an interrupt isn't
> issued
> >     properly
> >     >     at PCM
> >     >     >     >     period boundary.
> >     >     >     >
> >     >     >     >     Takashi
> >     >     >     >
> >     >     >     > --
> >     >     >     > -Harsha
> >     >     >     >
> >     >     >     >
> >     >     >
> >     >     > --
> >     >     > -Harsha
> >     >     >
> >     >     >
> >     >
> >     > --
> >     > -Harsha
> >     >
> >     >
> >
> > --
> > -Harsha
> >
> >
>



-- 
-Harsha


More information about the Alsa-devel mailing list