Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Не включается SPI в Atmega128
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Panych
Почему может не включаться SPI?
Дошел до совсем простого, вот код из IAR:
void main( void )
{
#define SETBIT(ADDRESS,BIT) (ADDRESS |= (1<<BIT))
#define CLEARBIT(ADDRESS,BIT) (ADDRESS &= ~(1<<BIT))
#define CHECKBIT(ADDRESS,BIT) (ADDRESS & (1<<BIT))

SETBIT( DDRB, 2 );
SETBIT( DDRB, 1 );
SPCR = 0x53;
SPSR = 0x00;
SPDR = 0x55;
}
Ведь должен выдаться байт наружу? Но SCK и MOSI даже не определены как выходы, причем по первым двум командам - они переводятся на выход, а вот инициализация SPI переводит их обратно.
Чего-то не понимаю?
Плату прозвонил, микруха свежеустановленная...
Liseev
А что у вас творится с ножкой SS?
Если вы используете режим MASTER и SS определен как вход, то низкий уровень на нем будет воспринят контроллером как попытка другим мастером на шине начать цикл передачи, соответственно контроллер автоматически перейдет в режим SLAVE и будет ждать, когда на входе SCK появятся тактовые импульсы...

Смотрите даташит на 128 мегу, стр 166
vesago
Пример:
Код
//::::::::::::::::::::::::::::::::::::::::::::::::::::::
//
//::::::::::::::::::::::::::::::::::::::::::::::::::::::
void SPI_Init(void)
{
  SPI_PORT |= (1<<SCK)|(1<<MOSI)|(1<<MISO);
//  PORT_SPI &= ~(1<<SCK);

  SPI_DDR |= (1<<SCK)|(1<<MOSI);
  SPI_DDR &= ~(1<<MISO);

  SPSR = (1<<SPI2X);
  SPCR = (1<<SPE)|(1<<MSTR);  //Mode 0
}

//::::::::::::::::::::::::::::::::::::::::::::::::::::::
// Записываем байт
//::::::::::::::::::::::::::::::::::::::::::::::::::::::
void SPI_Write_Byte(u8_t b)
{
  SPDR = b;
  while ((SPSR & (1<<SPIF)) == 0);
}

//::::::::::::::::::::::::::::::::::::::::::::::::::::::
// Читаем байт
//::::::::::::::::::::::::::::::::::::::::::::::::::::::
u8_t SPI_Read_Byte(void)
{
  SPDR = 0x00;
  while ((SPSR & (1<<SPIF)) == 0);
  return SPDR;
}
Panych
Цитата(Liseev @ Feb 11 2008, 13:48) *
А что у вас творится с ножкой SS?
Смотрите даташит на 128 мегу, стр 166

Liseev, спасибо, именно в ней дело, не сообразил, хотя даташит конечно читал, но этот момент не прочувствовал.
vesago, спасибо за пример!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.