I cannot find DMA interrupts initialization in steps, or, better, an example for BF70x processors.
It seems me, that it is more complicated than in BF5xx case.
Please find the attached SPORT code for ADSP-BF706 processor. This code can be directly run on the ADSP-BF706 EZ-Kit MINI evaluation board. You can understand the working of the code from the comments embedded within.
For more information we suggest you to refer the Data Transfers and Interrupts section in SPORT chapter (PageNo:1583 / 2223) in the ADSP-BF70x Blackfin+ Processor Hardware Reference Manual. You can find the HRM here.
Thank You Jithul !
You missed attachement.
maybe the attached program is useful for you.
It demonstrates the use of DMA and interrupts
for audio processing.
Bug fix. The following lines are missing in the SPORT0_RX_interrupt_handler:
if (*pREG_DMA1_STAT & ENUM_DMA_STAT_IRQDONE) *pREG_DMA1_STAT = ENUM_DMA_STAT_IRQDONE;
The attached version BF706_Audio_Filter_v2 should be correct.
thanks a lot for the shared example code, it works nicely on the BF706-EZmini.
One issue I couldn't figure out is using the compiler optimization. If switched on (I tried from 25% to 100%) audio is lost and the code seems to hang in the idle() loop.
Using "static volatile int32_t audio_buffer[BUFFER_SIZE]" (audio processing buffer) doesn't help, the code doesn't allow to have "static int32_t SP0A_buffer[BUFFER_SIZE]" (DMA TX buffer) and "static int32_t SP0B_buffer[BUFFER_SIZE]" ( DMA RX buffer) to be volatile.
Any suggestion to avoid audio muting when optimizing the code. Seems to be a general Blackfin CC problem though.