Дайте кому не жалко и у кого есть программную реализацию SPI (на передачу)
для CodeVisionAVR
Чтобы заменить вызовы типа
spi((text >>
spi(text);
потомучто аппаратный SPI использовать не хочу!
Код: Выделить всё
#define MOSI PORTB.1
#define MISO PINB.2
#define SCK PORTB.3
unsigned char spi(unsigned char data){
unsigned char miso = 0;
unsigned char mask = 0x01; // если надо начинать со старшего бита - заменить на 0x80
for( ; mask; mask <<= 1){ // если надо начинать со старшего бита - заменить на mask >>= 1;
MOSI = data & mask;
SCK = 1;
if(MISO) miso |= mask;
SCK = 0;
}
return miso;
}ARV писал(а):вот как-то такКод: Выделить всё
#define MOSI PORTB.1 #define MISO PINB.2 #define SCK PORTB.3 unsigned char spi(unsigned char data){ unsigned char miso = 0; unsigned char mask = 0x01; // если надо начинать со старшего бита - заменить на 0x80 for( ; mask; mask <<= 1){ // если надо начинать со старшего бита - заменить на mask >>= 1; MOSI = data & mask; SCK = 1; if(MISO) miso |= mask; SCK = 0; } return miso; }
ARV писал(а):эта самая функция и осуществляет чтениев SPI чтение и запись ведутся одновременно, поэтому обратились к функции с параметром на передачу - она вам вернула принятый байт.
а если использовать не произвольные выводы МК,а SPI + использовать эту функцию, в какой режим надо запрограммировать выводы?ARV писал(а):вот как-то такКод: Выделить всё
#define MOSI PORTB.1 #define MISO PINB.2 #define SCK PORTB.3 unsigned char spi(unsigned char data){ unsigned char miso = 0; unsigned char mask = 0x01; // если надо начинать со старшего бита - заменить на 0x80 for( ; mask; mask <<= 1){ // если надо начинать со старшего бита - заменить на mask >>= 1; MOSI = data & mask; SCK = 1; if(MISO) miso |= mask; SCK = 0; } return miso; }
Код: Выделить всё
MOSI = data & mask;Код: Выделить всё
MOSI = (data & mask)?0:1;я писал в расчете на синтаксис CVAVR, который сам по себе заслуживает не карточку, а целый желтый фанерный щитmd5sum писал(а):ARV:Компилятор разберется, но для удобства восприятияКод: Выделить всё
MOSI = data & mask;
может стоит так написать?:А то биту unsigned char присваиваем. Я-бы желтую карточку дал (WARNING)Код: Выделить всё
MOSI = (data & mask)?0:1;
значит достаточно записать в MOSI байт, и он будет передан по SPI?,md5sum писал(а):ARV:Компилятор разберется, но для удобства восприятияКод: Выделить всё
MOSI = data & mask;
может стоит так написать?:А то биту unsigned char присваиваем. Я-бы желтую карточку дал (WARNING)Код: Выделить всё
MOSI = (data & mask)?0:1;
с чего вы взяли?! достаточно вызвать вышеупомянутую функцию - и байт будет переданigor-x писал(а):значит достаточно записать в MOSI байт, и он будет передан по SPI?,
, а какая необходима инициализация аппаратного spi?
Такую реакцию я и подразумевалigor-x писал(а):значит достаточно записать в MOSI байт, и он будет передан по SPI?,
, а какая необходима инициализация аппаратного spi?