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

 
 
> mega128, инициализация SPI
dudlik
сообщение Dec 18 2008, 17:53
Сообщение #1





Группа: Новичок
Сообщений: 5
Регистрация: 18-12-08
Пользователь №: 42 581



Здравствуйте. Помогите разобраться. Проект пишу в IARе. Отлаживаю в AVR студии самодельным ICE. Оптимизацию кода выключил. Сделал классическую инициализацию spi в меге128
void SPI_MasterInit(void)
{
DDR_SPI |= (1 << DD_MOSI)|(1 << DD_SCK)|(1 << DD_SS); // Set MOSI, SCK and SS as output


SPCR |= (1 << SPE)|(1 << MSTR); // Enable SPI, Master
SPSR |= (1 << SPI2X); // set clock rate fck/2
}

не могу выставить в SPSR бит SPI2X. Причем, в дизасемблере вроде все правильно
(SPSR аомещается в R16 командой ldi, в R16 делается or с битом SPI2X, и затем результат назад в SPSR командой out)
также этот бит не удается выставить и из панели регистров в АВР-студии(не ставятся делители которые используют бит SPI2X, остальные варианты ставятся)

и затем еще не удаётся ничего поместить в SPDR:
void SPI_MasterTransmit(unsigned char cData)
{
SPDR = cData; /* Start transmission */
while(!(SPSR & (1<<SPIF))); /* Wait for transmission complete */
}
в окошке Watch в переменной cData видны конкретные значения, после операции копирования в SPDR пусто(также, в дизасемблере никакого криминала)

В симуляторах всё работает. Причем картина не меняется даже если выключить фьюс SPI, никаких ошибок почемуто. Может кто-нибудь сталкивался?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Сергей Борщ
сообщение Dec 19 2008, 07:22
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(dudlik @ Dec 18 2008, 19:53) *
SPCR |= (1 << SPE)|(1 << MSTR); // Enable SPI, Master
А что было в этом регистре до этой строчки? Вы уверены, что все те единицы, которые там были, вам нужны? Уберите операцию "ИЛИ", оставьте только присваивание. Со следующей строкой еще можно согласиться, если вы одновременно с записью SPI2X хотите сбросить все флаги.

А теперь главный вопрос: Вы сняли фуз совместимости с мегой103? В ней SPI2X не было.

P.S. Используйте кнопку '#' на форме ввода для оформления исходников
Цитата(demiurg_spb @ Dec 18 2008, 20:46) *
Кое что забыли (очистить SPIF):
Он очистится автоматически при следующей записи в SPDR.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post



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

 


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


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