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

 
 
> 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



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

 


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


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