Я тоже как-то столкнулся с глюками (правда f310) cygnal'a. В итоге выяснилось, что это мои глюки

.
Вот как я реализовал SPI-master для связи двух f310 микрокнтр. Возможно пригодится.
Код
void Init_SPI0(byte speed)
{
XBR0 |= 0x02;//routed SPI to crossbar
SPI0CKR=speed; //max speed=0; min = 0xFF
SPI0CFG=_0b01010000;
SPI0CN= _0b00001001;
}
void delay(char d)
{
while((d--)>0) _nop_();
}
byte SPI_Transfer(byte SPI_byte)//MODE_3
{
SPIF=0;
SPI0DAT=SPI_byte;
while(SPIF==0);
return SPI0DAT;
}
void set_spi(byte *buf, byte n)
{
byte i;
SPI0CN&=~0x04;
delay(2);
for(i=0;i<n;i++){
SPI_Transfer(buf[i]);
}
SPI0CN|=0x04;
}
void main() {
unsigned char buf [20]="1234567890 ";
// init Potrs
//SCK (SPI0), Push-Pull output , Digital
//MISO (SPI0), open-drain input, Digital
//MOSI (SPI0), Push-Pull output , Digital
//NSS (SPI0), Push-Pull output , Digital
Init_SPI0(20);// 20 - max speed for slave devise on f310
set_spi(buf, 20);
while(1);
}