программный SPI для CodeVisionAVR

Обсуждаем контроллеры компании Atmel.
Ответить
Встал на лапы
Сообщения: 98
Зарегистрирован: Пн дек 06, 2010 12:26:45

Сообщение ESWANT »

Здравствуйте!
Дайте кому не жалко и у кого есть программную реализацию SPI (на передачу)
для CodeVisionAVR

Чтобы заменить вызовы типа

spi((text >> 8));

spi(text);

потомучто аппаратный SPI использовать не хочу!
Реклама
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18786
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение 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;
}
вот как-то так
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Встал на лапы
Сообщения: 98
Зарегистрирован: Пн дек 06, 2010 12:26:45

Сообщение ESWANT »

благодарю!
здорово помогли!
Вымогатель припоя
Аватара пользователя
Сообщения: 540
Зарегистрирован: Пт фев 20, 2009 12:26:26

Сообщение Yftul »

ARV Красивый код: респект и уважуха. Сохранил себе на заметку)
Реклама
Эиком - электронные компоненты и радиодетали
Открыл глаза
Сообщения: 53
Зарегистрирован: Вт апр 13, 2010 03:00:00

Сообщение 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;
}
вот как-то так

Доброго здоровья всем.
А не подскажите как читать данные, и потом где они сохраняются, чтото понять не могу.
Реклама
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18786
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

эта самая функция и осуществляет чтение :) в SPI чтение и запись ведутся одновременно, поэтому обратились к функции с параметром на передачу - она вам вернула принятый байт.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Открыл глаза
Сообщения: 53
Зарегистрирован: Вт апр 13, 2010 03:00:00

Сообщение sdsrem »

ARV писал(а):эта самая функция и осуществляет чтение :) в SPI чтение и запись ведутся одновременно, поэтому обратились к функции с параметром на передачу - она вам вернула принятый байт.

Я это к чему спрашиваю, надо считать параметры с микры а как это выглядит не знаю.
В смысле не знаю как прогу расписать.
Выдать код я могу а прочтением ни разу не занимался, может подскажите как эту функцию написать под эту диограмму.
345.jpg
(23.03 КБ) 1140 скачиваний
Мудрый кот
Аватара пользователя
Сообщения: 1817
Зарегистрирован: Пн ноя 29, 2010 15:58:43

Сообщение 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)
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18786
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

MOSI - это ВЫХОД
MISO - это ВХОД
SCK - это ВЫХОД
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Вымогатель припоя
Аватара пользователя
Сообщения: 672
Зарегистрирован: Вт окт 27, 2009 22:39:19
Откуда: Москва

Сообщение md5sum »

ARV:

Код: Выделить всё

MOSI = data & mask;
Компилятор разберется, но для удобства восприятия
может стоит так написать?:

Код: Выделить всё

MOSI = (data & mask)?0:1;
А то биту unsigned char присваиваем. Я-бы желтую карточку дал (WARNING) :)))
— Не говорите мне что делать и я не скажу куда Вам идти...
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18786
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

md5sum писал(а):ARV:

Код: Выделить всё

MOSI = data & mask;
Компилятор разберется, но для удобства восприятия
может стоит так написать?:

Код: Выделить всё

MOSI = (data & mask)?0:1;
А то биту unsigned char присваиваем. Я-бы желтую карточку дал (WARNING) :)))
я писал в расчете на синтаксис CVAVR, который сам по себе заслуживает не карточку, а целый желтый фанерный щит :)))
для нормального компилятора Си можно сделать и почти по-вашему, и при помощи if-else
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Мудрый кот
Аватара пользователя
Сообщения: 1817
Зарегистрирован: Пн ноя 29, 2010 15:58:43

Сообщение igor-x »

md5sum писал(а):ARV:

Код: Выделить всё

MOSI = data & mask;
Компилятор разберется, но для удобства восприятия
может стоит так написать?:

Код: Выделить всё

MOSI = (data & mask)?0:1;
А то биту unsigned char присваиваем. Я-бы желтую карточку дал (WARNING) :)))
значит достаточно записать в MOSI байт, и он будет передан по SPI?,
, а какая необходима инициализация аппаратного spi?
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18786
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

igor-x писал(а):значит достаточно записать в MOSI байт, и он будет передан по SPI?,
, а какая необходима инициализация аппаратного spi?
с чего вы взяли?! достаточно вызвать вышеупомянутую функцию - и байт будет передан
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Вымогатель припоя
Аватара пользователя
Сообщения: 672
Зарегистрирован: Вт окт 27, 2009 22:39:19
Откуда: Москва

Сообщение md5sum »

igor-x писал(а):значит достаточно записать в MOSI байт, и он будет передан по SPI?,
, а какая необходима инициализация аппаратного spi?
Такую реакцию я и подразумевал :kill:
А как CV отнесется к MOSI = (data && mask);
— Не говорите мне что делать и я не скажу куда Вам идти...
Прорезались зубы
Аватара пользователя
Сообщения: 230
Зарегистрирован: Вт сен 27, 2011 21:23:36

Сообщение Bonio »

А как реализовать программный SPI slave устройства?
Родился
Сообщения: 2
Зарегистрирован: Вс июн 02, 2013 21:57:21

Сообщение 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;
}
Родился
Сообщения: 1
Зарегистрирован: Пт окт 17, 2014 08:56:48

Сообщение NewBodyCat »

Привет всем. Можете еще раз выложить на форум полный код программного spi со всеми инициализациями.
Ответить

Вернуться в «AVR»