Перейти к содержанию
    

Не включается SPI в Atmega128

Почему может не включаться 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 переводит их обратно.

Чего-то не понимаю?

Плату прозвонил, микруха свежеустановленная...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А что у вас творится с ножкой SS?

Если вы используете режим MASTER и SS определен как вход, то низкий уровень на нем будет воспринят контроллером как попытка другим мастером на шине начать цикл передачи, соответственно контроллер автоматически перейдет в режим SLAVE и будет ждать, когда на входе SCK появятся тактовые импульсы...

 

Смотрите даташит на 128 мегу, стр 166

Изменено пользователем Liseev

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пример:

//::::::::::::::::::::::::::::::::::::::::::::::::::::::
//
//::::::::::::::::::::::::::::::::::::::::::::::::::::::
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;
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А что у вас творится с ножкой SS?

Смотрите даташит на 128 мегу, стр 166

Liseev, спасибо, именно в ней дело, не сообразил, хотя даташит конечно читал, но этот момент не прочувствовал.

vesago, спасибо за пример!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...