Other Parts Discussed in Thread: OMAP3530
Hello.
I am using an OMAP3530 with a c64x+ dsp. I have successfully been able to run 32-bit FFTs (using code from DSPLIB) on the dsp and read the results from the gpp, largely based on the Readwrite sample application with a few minimal modifications. I have verified that the output is as expected for various test cases.
What is happening now is that I want to perform FFTs larger than the maximum size allowed by the optimized FFT functions from DSPLIB. The best way to do this may be worth another whole separate post on its own (feel free to comment) but what I am trying to do for now is just complete the last few steps of an FFT of size 131072 by performinga bunch of FFTs of maximum size and combining them appropriately. However, when I try to do this I get:
============= Sample Application : DFT ==========
Entered DFT_Create ()
Leaving DFT_Create ()
Entered DFT_Execute ()
DSP MMU Error Fault! MMU_IRQSTATUS = [0x1]. Virtual DSP addr reference that generated the interrupt = [0xd9ce9940].
Leaving DFT_Execute ()
Entered DFT_Delete ()
Leaving DFT_Delete ()
=======================================================
Note that the Virtual address seems to be very different each time, almost random.
This also happens if i perform a bunch of smaller FFTs in a row (of course a lot more of them, a function of the sum of their sizes):
for (i = 0; i < 462; ++i) {
DSP_fft32x32_i (twiddle_array, N, readBuf, writeBuf) ;
}
Decreasing the number to something like 50 (I forget the exact number) for FFTs of size 32, and it will be fine.
I have also tried calling the HAL_cache functions to refresh the cache in between each call.
What do I have to do in order to perform an unlimited number of operations on the dsp?
Thank you,
John