Страница 1 из 1
программный SPI для CodeVisionAVR
Добавлено: Пт дек 10, 2010 11:26:18
ESWANT
Здравствуйте!
Дайте кому не жалко и у кого есть программную реализацию SPI (на передачу)
для CodeVisionAVR
Чтобы заменить вызовы типа
spi((text >>

);
spi(text);
потомучто аппаратный SPI использовать не хочу!
Re: программный SPI для CodeVisionAVR
Добавлено: Пт дек 10, 2010 12:39:23
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;
}
вот как-то так
Re: программный SPI для CodeVisionAVR
Добавлено: Пт дек 10, 2010 12:42:08
ESWANT
благодарю!
здорово помогли!
Re: программный SPI для CodeVisionAVR
Добавлено: Пт дек 10, 2010 15:32:50
Yftul
ARV Красивый код: респект и уважуха. Сохранил себе на заметку)
Re: программный SPI для CodeVisionAVR
Добавлено: Вт янв 11, 2011 08:49:09
sdsrem
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;
}
вот как-то так
Доброго здоровья всем.
А не подскажите как читать данные, и потом где они сохраняются, чтото понять не могу.
Re: программный SPI для CodeVisionAVR
Добавлено: Вт янв 11, 2011 14:02:05
ARV
эта самая функция и осуществляет чтение

в SPI чтение и запись ведутся одновременно, поэтому обратились к функции с параметром на передачу - она вам вернула принятый байт.
Re: программный SPI для CodeVisionAVR
Добавлено: Вт янв 11, 2011 17:43:12
sdsrem
ARV писал(а):эта самая функция и осуществляет чтение

в SPI чтение и запись ведутся одновременно, поэтому обратились к функции с параметром на передачу - она вам вернула принятый байт.
Я это к чему спрашиваю, надо считать параметры с микры а как это выглядит не знаю.
В смысле не знаю как прогу расписать.
Выдать код я могу а прочтением ни разу не занимался, может подскажите как эту функцию написать под эту диограмму.
Re: программный SPI для CodeVisionAVR
Добавлено: Ср фев 09, 2011 07:39:35
igor-x
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;
}
вот как-то так
а если использовать не произвольные выводы МК,а SPI + использовать эту функцию, в какой режим надо запрограммировать выводы?
(спрашиваю, потому что не смог разобраться с вводом- выводом SPI c помощью функции SPI в Codevision)
Re: программный SPI для CodeVisionAVR
Добавлено: Ср фев 09, 2011 08:39:36
ARV
MOSI - это ВЫХОД
MISO - это ВХОД
SCK - это ВЫХОД
Re: программный SPI для CodeVisionAVR
Добавлено: Ср фев 09, 2011 09:20:37
md5sum
ARV:
Компилятор разберется, но для удобства восприятия
может стоит так написать?:
А то биту unsigned char присваиваем. Я-бы желтую карточку дал (WARNING)

Re: программный SPI для CodeVisionAVR
Добавлено: Ср фев 09, 2011 09:44:21
ARV
md5sum писал(а):ARV:
Компилятор разберется, но для удобства восприятия
может стоит так написать?:
А то биту unsigned char присваиваем. Я-бы желтую карточку дал (WARNING)

я писал в расчете на синтаксис CVAVR, который сам по себе заслуживает не карточку, а целый желтый фанерный щит
для нормального компилятора Си можно сделать и почти по-вашему, и при помощи if-else
Re: программный SPI для CodeVisionAVR
Добавлено: Ср фев 09, 2011 09:47:56
igor-x
md5sum писал(а):ARV:
Компилятор разберется, но для удобства восприятия
может стоит так написать?:
А то биту unsigned char присваиваем. Я-бы желтую карточку дал (WARNING)

значит достаточно записать в MOSI байт, и он будет передан по SPI?,
, а какая необходима инициализация аппаратного spi?
Re: программный SPI для CodeVisionAVR
Добавлено: Ср фев 09, 2011 09:54:27
ARV
igor-x писал(а):значит достаточно записать в MOSI байт, и он будет передан по SPI?,
, а какая необходима инициализация аппаратного spi?
с чего вы взяли?!
достаточно вызвать вышеупомянутую функцию - и байт будет передан
Re: программный SPI для CodeVisionAVR
Добавлено: Ср фев 09, 2011 09:58:25
md5sum
igor-x писал(а):значит достаточно записать в MOSI байт, и он будет передан по SPI?,
, а какая необходима инициализация аппаратного spi?
Такую реакцию я и подразумевал
А как CV отнесется к MOSI = (data &
& mask);
Re: программный SPI для CodeVisionAVR
Добавлено: Вт ноя 29, 2011 16:04:56
Bonio
А как реализовать программный SPI slave устройства?
Re: программный SPI для CodeVisionAVR
Добавлено: Вс июн 02, 2013 22:22:32
RF-081
расшифруйте пожалуйста что делает каждая строка в этом коде, хочу понять каким он должен быть в моем случае, надо менять или нет... если я реализую ИНУН где МК отправляет байты на ЦАП, мне MISO надо инициализировать или нет? Другими словами МК будет что то принимать от ЦАПа или он просто отправляет байты, а ЦАП должен молча разбираться с принятыми байтами?
#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;
}
Re: программный SPI для CodeVisionAVR
Добавлено: Пт окт 17, 2014 09:04:45
NewBodyCat
Привет всем. Можете еще раз выложить на форум полный код программного spi со всеми инициализациями.