повторяйте трижды в день - никаких магических чисел!
никто не захочет копаться в вашем коде, выискивая по документации, какие числа за что отвечают. У вас же есть файл описания МК, почему не используете определения оттуда? Посему, по соответствию чисел полям регистров не смотрел.
по сабжу - это ТОЧНО всё? никаких прерываний не гуляет? в начале в main явно добавить запрет всех прерываний.
попробовать вставить в два места if((MDR_SSP2->SR&4)>0) {...} else {НОГОДРЫГ} и в while((MDR_UART1->FR&64)!=0) {НОГОДРЫГ} и проверить, он нормально, без остановок дёргается всё время между принятием и отправкой данных?
кстати, ещё!
Цитата
SSP (SPI Texas Instruments) в режиме slave, данные с частотой 1.5 Мбитс частотой 1.5 Мбит
RTFM - частота тактирования SPI slave должна быть емнип минимум в 12 раз выше частоты следования данных. 1,5*12 - 18 МГц.
Попробуйте понизить скорость передачи данных SPI. Ну и проверьте клок на какую частоту настроен...
Код
RST_CLK_PCLKcmd((RST_CLK_PCLK_SSP2 | RST_CLK_PCLK_PORTB | RST_CLK_PCLK_PORTF),ENABLE);
SSP_InitTypeDef sSSP;
SSP_DeInit(MDR_SSP2);
SSP_BRGInit(MDR_SSP2,SSP_HCLKdiv1);
SSP_StructInit (&sSSP);
sSSP.SSP_SCR = 0x1;
sSSP.SSP_CPSDVSR = 2;
sSSP.SSP_Mode = SSP_ModeMaster;
sSSP.SSP_WordLength = SSP_WordLength16b;
sSSP.SSP_SPH = SSP_SPH_2Edge; // фаза сигнала SSPCLKOUT
sSSP.SSP_SPO = SSP_SPO_Low; // полярность сигнала SSPCLKOUT
sSSP.SSP_FRF = SSP_FRF_SPI_Motorola;
sSSP.SSP_HardwareFlowControl = SSP_HardwareFlowControl_None;
SSP_Init (MDR_SSP2,&sSSP);
SSP_Cmd(MDR_SSP2, ENABLE);
Вот вполне себе рабочий код для мастера на 20 МГц 1986ВЕ91Т.