Добрый день. Есть такая, на мой взгляд, не тривиальная задача. Нужно организовать передачу данных между ПЛИС(slave) и МК(master) по SPI. Т.к. с такими системами отладки я не знаком, то не придумал ничего умнее, как на время отладки заменить ПЛИС микроконтроллером с программным SPI. Полазил по форуму и нашел решение программного SPI для mastera и переделал под slave.
Код: Выделить всё
#define MOSI PINA.0
#define MISO PORTA.1
#define SS PINA.2
#define SCK PORTB.3
char data[96]; // в плисене в очереди на передачу стоит 96 бит данных. м.б. тип данных тут другой нужен?
unsigned char spi(char *data){
unsigned char mosi = 0;
unsigned char mask = 0x01; // если надо начинать со старшего бита - заменить на 0x80
if (SS==0)
{
for( ; mask; mask <<= 1){ // если надо начинать со старшего бита - заменить на mask >>= 1;
MISO = data & mask;
SCK = 1;
if(MOSI) mosi |= mask;
SCK = 0;
}
}
return mosi;
}
void main(void)
{
//инициализацию портов пропускаю
spi(data);
}
пока возникли 2 вопроса:
1. здесь линия SCK программно настраивается, а в ПЛИС она аппаратная. Как реализовать это здесь сохранив программный SPI?
2. Нужно передать 12 байт данных, а тут после байта программа завершает свою работу. Чего не хватает?
Буду благодарен за любую помощь
