Hi
Yes one can queue up to 4 words deep transmission and also have up to 4 words waiting to be read.
How are you writing the words? The write needs to contain the data plus some flags to tell the DSPI how to behave with it - eg.
SPI2_PUSHR = (byte | SPI_PUSHR_CONT | ulChipSelectLine | SPI_PUSHR_CTAS_CTAR0);
Apart from the fact that one has to carefully control which word resets the CS line and the strange behaviour of the Rx flag I found the DSPI efficient and easy to use and used it for several SPI Flash drivers and SD card FAT. At the moment I don't understand what is going wrong in your project.
I have attached the uTasker ATMEL AT45DBxxx driver as reference (it shows the FIFOs being used) and don't forget that all code is available in the uTasker project to work with the DSPI and embedded or FAT file systems in SPI based Flash and SD cards (as well as using the SDHC interface).
Regards
Mark
Notes:
#define WRITE_SPI_CMD0(byte) SPI2_PUSHR = (byte | SPI_PUSHR_CONT | ulChipSelectLine | SPI_PUSHR_CTAS_CTAR0) // write a single byte to the output FIFO - assert CS line
#define WRITE_SPI_CMD0_LAST(byte) SPI2_PUSHR = (byte | SPI_PUSHR_EOQ | ulChipSelectLine | SPI_PUSHR_CTAS_CTAR0) // write final byte to output FIFO - this will negate the CS line when complete
#define READ_SPI_FLASH_DATA() (unsigned char)SPI2_POPR
#define WAIT_SPI_RECEPTION_END() while (!(SPI2_SR & SPI_SR_RFDF)) {}
#define CLEAR_RECEPTION_FLAG() SPI2_SR |= SPI_SR_RFDF