I've found that the built-in routines for the HWAFFT module on the C5505/C5515 do not return the correct results if the input/output and scratch buffers provided by the caller do not lie in the same data page. Looking at the corresponding assembly code, it becomes apparent why. Between each stage of FFT computation, there are steps like:
; Start 1st double stage
AR0 = AR4
AR1 = AR5
; Start second double stage
AR2 = AR5
AR3 = AR4
And so on. The two pointers bounce back and forth between the input/output and scratch buffers. However, since the move instruction only references the auxiliary registers and not the extended auxiliary registers (XARn), only the bottom 16 bits are copied. As long as the two buffers are in the same page (so their most-significant 8 bits are the same), then everything works. However, if they are on different pages, data ends up getting fetched from the wrong address and the results are garbage.
Obviously this can't be changed in ROM, but it would probably be a good idea if the HWAFFT documentation specified this requirement.
Jason