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

 
 
> atmega и 9-bit SPI, как лучше реализовать?
sonycman
сообщение Nov 15 2008, 20:49
Сообщение #1


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Нужно задействовать ЖКИ от нокии 6510, который требует девяти битного SPI.
Камень ATmega324 (или ATmega88).
Выход в написании софтовых процедур передачи данных (только на запись), или можно как-то заюзать аппаратный интерфейс камня?
Думаю, если передавать девятый бит руками (отключая каждый раз SPI, а потом снова включая), дело пойдёт пошустрее, чем чисто программно? Или это невозможно?

ЗЫ: кстати, никто не имел дела с вышеназванными ЖКИ? В них точно установлен контроллер OM6211?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
AHTOXA
сообщение Nov 15 2008, 21:20
Сообщение #2


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(sonycman @ Nov 16 2008, 02:49) *
Думаю, если передавать девятый бит руками (отключая каждый раз SPI, а потом снова включая), дело пойдёт пошустрее, чем чисто программно? Или это невозможно?

Да, так выходит побыстрее. Гляньте примеры для s65, там вроде так сделано.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
sonycman
сообщение Nov 16 2008, 00:06
Сообщение #3


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Цитата(AHTOXA @ Nov 16 2008, 01:20) *
Да, так выходит побыстрее. Гляньте примеры для s65, там вроде так сделано.

Спасибо, но что-то ковыряться в библиотеке и куче асмовых файлов желания мало 05.gif
Включить и выключить SPI - не проблема. Всего-то один бит сменить.
Но вот не придётся ли при этом реинициализировать его регистры?

Ладно, попробую сначала чисто софтом, запущу дисплей, а потом буду извращаться с аппаратным SPI... biggrin.gif

ЗЫ: после ARM почему-то стало казаться, что и в AVRовском интерфейсе можно менять разрядность sad.gif
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Nov 16 2008, 09:34
Сообщение #4


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(sonycman @ Nov 16 2008, 06:06) *
Спасибо, но что-то ковыряться в библиотеке и куче асмовых файлов желания мало 05.gif


Значит я перепуталsmile.gif
Вот рабочий кусок (оба варианта):
CODE

#ifdef USE_SOFT_SPI
static void nokia_spi(uint8_t data)
{
off(NOKIA_DOUT);
if (data & 0x80) on(NOKIA_DOUT);
off(NOKIA_SCK);
on(NOKIA_SCK);

off(NOKIA_DOUT);
if (data & 0x40) on(NOKIA_DOUT);
off(NOKIA_SCK);
on(NOKIA_SCK);

off(NOKIA_DOUT);
if (data & 0x20) on(NOKIA_DOUT);
off(NOKIA_SCK);
on(NOKIA_SCK);

off(NOKIA_DOUT);
if (data & 0x10) on(NOKIA_DOUT);
off(NOKIA_SCK);
on(NOKIA_SCK);

off(NOKIA_DOUT);
if (data & 0x08) on(NOKIA_DOUT);
off(NOKIA_SCK);
on(NOKIA_SCK);

off(NOKIA_DOUT);
if (data & 0x04) on(NOKIA_DOUT);
off(NOKIA_SCK);
on(NOKIA_SCK);

off(NOKIA_DOUT);
if (data & 0x02) on(NOKIA_DOUT);
off(NOKIA_SCK);
on(NOKIA_SCK);

off(NOKIA_DOUT);
if (data & 0x01) on(NOKIA_DOUT);
off(NOKIA_SCK);
on(NOKIA_SCK);
}

#else // USE_SOFT_SPI

static inline __attribute__((__always_inline__)) void nokia_spi(uint8_t data)
{
SPCR = (0<<SPIE)|(1<<SPE)|(0<<DORD)|(1<<MSTR)|(1<<CPOL)|(1<<CPHA)|(0<<SPR1)|(0<<SPR0);
SPDR = data;
while(!(SPSR & (1<<SPIF)));
SPCR = 0;
}

#endif // USE_SOFT_SPI

static void nokia_cmd(uint8_t cmd)
{
off(NOKIA_DOUT);
on(NOKIA_CS);
off(NOKIA_SCK);
on(NOKIA_SCK);

nokia_spi(cmd);

off(NOKIA_CS);
}

static void nokia_data(uint8_t data)
{
on(NOKIA_DOUT);
on(NOKIA_CS);
off(NOKIA_SCK);
on(NOKIA_SCK);

nokia_spi(data);

off(NOKIA_CS);
}


На всякий случай напомню, что нога SS должна быть выходом или подтянута к единице, иначе SPI не заработает.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post



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

 


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


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