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

 
 
> LPC2478 SPI Slave, Write collision
-= Александр =-
сообщение Nov 2 2010, 14:48
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 123
Регистрация: 15-10-07
Из: Санкт-Петербург
Пользователь №: 31 370



Пытаюсь заставить работать LPC2478 как SPI Slave - вылазят глюки...
Прерывание происходит только первый раз, байт принимаетсмя и все.
После приема картина такая:

S0SPSR=0xC0
Тоесть Write collision

Если отправлять еще - прерывания не происходит, зато вылазит вот это:
S0SPSR=0xE0
Тоесть Write collision + Read overrun

Что эта хрень значит и как с ней бороться?

Инициализация выглядит так: (Пишу в uVision4)
Код
void init_SPI( void )
{
  PCONP |= (1 << 8);    //SPI0 Power ON
  //S0SPCR = 0x00;
  PINSEL0|=(1U<<30)|(1U<<31); //SCK
  PINSEL1|=(1U<<0 )|(1U<<1 ); //SSEL
  PINSEL1|=(1U<<2 )|(1U<<3 ); //MISO
  PINSEL1|=(1U<<4 )|(1U<<5 ); //MOSI
  S0SPCCR = 0x8;         //Clock select - max clock speed = PLCK/8
  S0SPCR = 0x089C;         // 8 bit, CPHA=1, CPOL=1, slave mode, MSB first, interrupt enabled
             //0898
  if ( install_irq( SPI0_INT, (void *)SPI0Handler, HIGHEST_PRIORITY) == FALSE ) //Install IRQ
    {
    while(1);
    }
  
}


Обработчик прерывания такой:

Код
void SPI0Handler (void) __irq
{
  DWORD regValue;
  unsigned int data_spi;

  S0SPINT = SPI0_INT_FLAG;        /* clear interrupt flag */
  data_spi=S0SPDR;
  //IENABLE;                        /* handles nested interrupt */
  S0SPDR=spi_counter;
  spi_counter++;
  
  regValue = S0SPSR;
  if ( regValue & WCOL )
  {
    //SPI0Status |= SPI0_COL;
  }
  if ( regValue & SPIF )
  {
    //SPI0Status |= SPI0_TX_DONE;
    //TxCounter++;
  }
  
  //IDISABLE;
  VICVectAddr = 0;        /* Acknowledge Interrupt */
}


Еще такой момент: нужно ли после каждого передаооного байта дергать селект или можно его один раз выставить и пачку байт прогнать? По даташиту вроде как в режиме CPHA=1 синхронизация идет только по тактам...

Сообщение отредактировал -= Александр =- - Nov 2 2010, 14:54


--------------------
Ниндзя - круче всех. Они умеют ходить по воде, делить на ноль и угадывать шаффл в АйПоде.
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 1st July 2025 - 13:51
Рейтинг@Mail.ru


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