Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Микроконтроллеры и их применение»

Ответ:

Отправлено Mim 09 апреля 2009, г. 16:50
В ответ на: Кто еще сталкивался с проблемой по ссылке, подскажите пожалуста(+) отправлено пользователем Mim 09 апреля 2009, г. 16:04


#define BV(bit) (1<<(bit))

void spiInit(void)
{
PORTB|=BV(PB1)|BV(PB2)|BV(PB0)|BV(PB3);//|BV(PB4); //SCK, MOSI, #SS - 1
DDRB|=BV(PB1)|BV(PB2)|BV(PB0);//|BV(PB4); //SCK, MOSI, #SS - выход
DDRB&=~BV(PB3);//|BV(PB0)); //MISO - вход
//SPIE = 0 - работа без прерываний
//SPE = 1 - интерфейс включить
//DORD = 0 - передача старшего бита сначала
//MSTR = 1 - режим "мастер"
//CPOL = 1, CPHA = 1 spi mode 3
//SPR1 =0, SPR0 = 1 Fclk = fosc/4
SPCR|=BV(SPE)|BV(MSTR);//BV(CPOL)|BV(CPHA);
//SPSR|=BV(SPI2X); //Удвоенная скорость работы
//!!!Если кварц больше 10 МГц - скорость нужно снижать
//DDRB|=(1<<PB0);
//PORTB|=(1<<PB0);

}

//Помещает аргумент в регистр приема-передачи, ждет окончание передачи
//возвращает содержимое регистра приема-передачи
char spiRollByte(const char byte)
{
u08 t = SPSR;
t = SPDR;
SPDR = byte;
while(!(SPSR & (1<<SPIF)));
f3++;
return SPDR;
}

void main()
{
------------------
spiInit();
------------------
while(1)
{
------------------
spiRollByte(0x55);
------------------
}
}


В майне срабатывает несколько сот раз и виснет намертво


Составить ответ | Вернуться на конференцию.

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
введите число 34:

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru