Да ладно, проблему нашел. У меня семафор занятости SPI для работы с
двумя узлами, все проверено и работает. Не волшебную таблетку
искать нужно, а головой думать и ручками писать. typedef enum {
SPI_FREE=0,
SPI_BUSY_FLASH,
SPI_BUSY_X,
} tSPI_BUSY;
typedef struct _tSPI_REQ{
unsigned short X :1;
unsigned short flash:1;
} tSPI_REQ;
typedef struct _tSPI_SEMA{
tSPI_BUSY busy; // признак занятости SPI
tSPI_REQ request; // запросы SPI от флэш и X
}tSPI_SEMA;
extern volatile tSPI_SEMA spi_sema;
// семафор занятости SPI к флэш или X
if (spi_sema.busy != SPI_BUSY_X) // если не занято SPI
{ spi_sema.busy = SPI_BUSY_FLASH;
доступ();
spi_sema.busy = SPI_FREE;
}
ну а дальше сам по месту расставить формирование запросов, их сброс и т.д.