реклама на сайте
подробности

 
 
> Помогите разобраться с микросхемой работающей по SPI
zheka
сообщение Jan 25 2011, 15:11
Сообщение #1


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



Господа, разбираюсь с микросхемой TLE7230R. Она управляется по SPI, даташит прилагаю внизу.

Я конечно плохо разбираюсь в SPI, в основном приходилось пользоваться готовыми библиотеками. А как столкнулся с голым даташитом - обломал зуб. У меня почему-то складывается ощущение, что с этой микросхемой придется городить аппаратный SPI...

В общем делаю я так:
Код
ubyte Send2SPI_TLE(ubyte data, unsigned char chip) // микросхем несколько, в дальнейшем планирую использовать chip для указания микросхемы.
//Передает по SPI данные data и возвращает принятый байт
{
  CS_1=0;
  SPDR = data;
  while(!(SPSR & (1<<SPIF)));
  CS_1 = 1;
  return SPDR;


//****************

}


ubyte SendWord2SPI_TLE(uword data)
//Отсылает двухбайтовое число по SPI младшим байтом вперед
//возвращает последний принятый байт
{
  Send2SPI_TLE(data,1);
  return Send2SPI_TLE(data>>8,1);
}

................
// в некоей функции инициализирую SPI
SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR1)|(1<<CPOL)|(1<<CPHA); //

void main()

uword TLE_WORD;

TLE_WORD=SendWord2SPI_TLE(0b1100000111010101); // пытаюсь записать (код записи 11) по адресу 001 (регистр MAP) число 11010101
TLE_WORD=SendWord2SPI_TLE(0b0100000100000000); // пытаюсь прочитать (код чтения  01) по адресу 001 (регистр MAP). Чему должны равняться ненужные младшие 8 бит - понятия не имею.

    
// А дальше - не смейтесь - для наглядности вывожу содержимое 16-тибитного слова TLE_WORD в виде цветных квадратиков.
for(i=0;i<16;i++)
   {
FillRect(100+i*40,60,120+i*40,80,clWhite,clWhite);
     if  ((TLE_WORD & (1<<i))!=0)
     FillRect(100+i*40,100,120+i*40,120,clRed,clRed); else FillRect(100+i*40,100,120+i*40,120,clBlue,clBlue);
          
   }


В итоге старшие 8 бит равны единицам, младшие - нулям, что бы я не писал в тот регистр.

Я понимаю, что что-то делаю не так, помогите разобраться...
Функцию Send2SPI - выдрал из библиотеки для работы с дисплеем, может с ней что не так?



P.S. Работаю в CodeVision 2, контроллер ATmega32 частота 8 МГц

Сообщение отредактировал zheka - Jan 25 2011, 15:15
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
zheka
сообщение Jan 28 2011, 03:20
Сообщение #2


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



Получилось! По крайней мере пару регистров прочел и записал. Спасибо за помощь.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 29th July 2025 - 15:28
Рейтинг@Mail.ru


Страница сгенерированна за 0.01375 секунд с 7
ELECTRONIX ©2004-2016