I have an audio in-out program in C for the ADSP-BF706 EZ-KIT mini, about 80 lines in length. It's simple and very easy to understand. It's also completely self-contained - it doesn't use any of the header files that the "TalkThrough_BF706Mini.c" program uses (supplied with the kit). It includes a basic TWI driver, SPORT0 set up and configuration routine for the on board codec (ADAU1761). With some simple modifications it can be used for filtering, both FIR and IIR. The file is attached. All welcome to use free.
Double buffering is not necessary as long as you do sample by sample processing.This is often a good choice producing the lowest possible audio latency.It is also quite efficient (<5% overhead). More than 400 biquad filters canbe performed at 48kHz sampling rate (32 bit, C++, inline, release mode).Blackfin+ is a very powerful processor!
However, if block processing is needed (to implement FFT based algorithms likeoverlap save) some sort of double buffering is necessary:
During the processing of one audio buffer new samples are stored a separate buffer.If one block is full, the recording and processing buffers are swapped.The same is true for audio output. One buffer is sent to the output while a separatebuffer is filled with input. I have implemented this manually in BF706_Block_Filter.zip (main.cpp).
2D-DMA is a clever way to do this automatically: BF706 2D DMA Audio Loopback
Did you find another way to implement this?