Спасибо за помощь.
Вот как я реализовал Slave (если интересно):
// Формат запроса от Master - |Команда|Данные1|...|ДанныеN|
void Init_SPI0(byte speed)
{
IE |= 0x40;//SPI0 interrupt enable
IP |= 0x40;//SPI0 priority enable
XBR0 |= 0x02;//routed SPI to crossbar
SPI0CKR=speed; //max speed=0 ; min = 0xFF
SPI0CFG=_0b00010000;
SPI0CN= _0b00000101;
}
void SPI0_ISR (void) interrupt 6 using 2
{
static data char *p_buf;
static data char Rsv_N=0;
static data char N=0;
EA=0;
if(SPIF){
SPIF = 0;
if (N != Rsv_N){
//tmp=p_buf[Rsv_N]; //передача данных +
p_buf[N++]=SPI0DAT; //прием данных |
//SPI0DAT=tmp; // <-----+
}else{
//Прием первого байта и определение операции
switch(SPI0DAT)//Команды от мастера
{
case GET_KEY: //p_buf=&key;
SPI0DAT=key; //передача key
Rsv_N=0;
break;
case SET_HD: p_buf=Dis_Buf; //Загружаю адрес приемника
Rsv_N=SIZE_HD; //и его длину
break;
case SET_LED: p_buf=LED;
Rsv_N=SIZE_LED;
break;
case SET_BEEP: p_buf=bp.buf;
Rsv_N=SIZE_BEEP;
break;
default: p_buf=0;
Rsv_N=0;
break;
}
N=0;
//SPI0DAT=p_buf[N]; //передача данных
}
}else{
WCOL = 0;
MODF = 0;
RXOVRN = 0;
}
EA=1;
}
Все работает, только почемуто при ответе на запрос GET_KEY:
case GET_KEY: //p_buf=&key;
SPI0DAT=key; //передача key
Rsv_N=0;
break;
Master получает всегда 0x00, хотя значение key изменяется.
Не врубаюсь в чем дело.