Hmmm, My C might not be good enough.
This line
myspi->SPI_TDR = SPI_PCS(3) | i;
similar to:
spi->SPI_TDR = d | SPI_PCS(ch);
in SPI.cpp, how did you get 3? And why is SPI_PCS(3) bitwise Or'd with the data to be sent? I couldn't work out what SPI_PCS(3) means.
What does the creation of myspi give us? Is this the only way to gain access to SPI_SR etc..?
I just about managed to alter SPI.h to make it work.... (tho I had to run your demo, I couldn't get it to work within my code).
Not much speed difference than the library, it looks like it's the while loop waiting for the clear signal