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

 
 
> Кто использовал SPI в slave mode AT91SAM7S?
vladimir_m
сообщение Sep 20 2008, 13:33
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 17
Регистрация: 9-07-08
Пользователь №: 38 830



Инициализация:
Код
    AT91F_PMC_EnablePeriphClock ( AT91C_BASE_PMC, 1 << AT91C_ID_SPI );
            AT91F_SPI_Disable(AT91C_BASE_SPI);
            AT91F_SPI_Reset(AT91C_BASE_SPI);
    AT91F_SPI_CfgMode(AT91C_BASE_SPI,  AT91C_SPI_PS_FIXED |  AT91C_SPI_MODFDIS);
    AT91F_SPI_CfgCs(AT91C_BASE_SPI,
                    0,
                    AT91C_SPI_BITS_16 |
                    ((50 <<  8) & AT91C_SPI_SCBR) //Serial Clock Baud Rate ?????
                     );

    AT91F_AIC_ConfigureIt (AT91C_BASE_AIC, AT91C_ID_SPI, SPI_INTERRUPT_LEVEL,  AT91C_AIC_SRCTYPE_INT_POSITIVE_EDGE, spi_irq_handler);
    AT91F_SPI_EnableIt (AT91C_BASE_SPI,  AT91C_SPI_RDRF);
    AT91F_AIC_EnableIt (AT91C_BASE_AIC, AT91C_ID_SPI);
    AT91F_SPI_Enable(AT91C_BASE_SPI);

Прерывание:
Код
void spi_irq_handler(){
  unsigned int status = AT91C_BASE_SPI->SPI_SR;
  if (status & AT91C_SPI_RDRF)
  {
    debug_cnt++;
    ssc_buf_in[0] = ssc_buf_in[1];
    ssc_buf_in[1] = ssc_buf_in[2];
    ssc_buf_in[2] = AT91C_BASE_SPI->SPI_RDR;

  }
}

Передается последовательно 0xAA55, 0xAA56, 0xAA57. Смотрел осциллографом - все четко.
Принимается каша. При каждом запуске - разное. Причем такое впечатление, что начинает
вдвигаться в регистр SPI слово не с первого байта, а со случайного. В результате в приемном буфере
может оказаться, например 12 последних бит первого слова и 4 бита второго.
Передача идет на частоте 100КГц. Режимы передатчика и приемника совпадают.
Иногда, очень редко, все работает правильно.
В чем могут быть грабли?

Сообщение отредактировал vladimir_m - Sep 20 2008, 13:44
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
mstr
сообщение Sep 22 2008, 08:32
Сообщение #2


Участник
*

Группа: Новичок
Сообщений: 36
Регистрация: 6-03-07
Из: Воронеж
Пользователь №: 25 931



GPIO для SPI-slave настроены нормально?
Go to the top of the page
 
+Quote Post
vladimir_m
сообщение Sep 22 2008, 12:17
Сообщение #3


Участник
*

Группа: Новичок
Сообщений: 17
Регистрация: 9-07-08
Пользователь №: 38 830



Цитата(mstr @ Sep 22 2008, 11:32) *
GPIO для SPI-slave настроены нормально?

Два раза проверял - нормально...

Цитата(gormih @ Sep 21 2008, 11:41) *
Передатчик и приемник включаются/инициализируются одновременно?

В общем-то я не придавал этому значения. Передатчик и приемник рассинхронизированы.
По идее для SPI - это не проблема, т.к. первод NSS в неактивное состояние должден сбрасывать всякие счетчики в SPI.
Но в конце концов я решил это проверить. Сделал так. При старте настраиваю ножку NSS на вход общего назначения и дожидаюсь неактивного состояния сигнала, после чего присваиваю ей аппаратную функцию:
Код
  while (NSS);
  while (NSS == 0);
  AT91F_PIO_CfgPeriph(AT91C_BASE_PIOA, ( NSS_mask ), ( 0));

Здесь NSS и NSS_mask - макросы.
После этого запускаю SPI
Код
  AT91F_SPI_Enable(AT91C_BASE_SPI);

Вроде бы так работает. Что-то в errate я про это не читал...
Go to the top of the page
 
+Quote Post
gormih
сообщение Sep 23 2008, 08:57
Сообщение #4


nofb
***

Группа: Свой
Сообщений: 430
Регистрация: 18-05-06
Из: Москва, Зеленоград
Пользователь №: 17 218



Цитата(vladimir_m @ Sep 22 2008, 16:17) *
Вроде бы так работает. Что-то в errate я про это не читал...


errdate здесь не при чем. Дело в том, что на старте до окончания сброса ноги микроконтроллера могут находиться в произвольном состоянии. Соответственно, эти состояния воспринимаются приемникам как некие сигналы.


--------------------
Это не то что вы подумали ...

Go to the top of the page
 
+Quote Post
vladimir_m
сообщение Sep 23 2008, 13:58
Сообщение #5


Участник
*

Группа: Новичок
Сообщений: 17
Регистрация: 9-07-08
Пользователь №: 38 830



И что? Допустим первый раз, два, три будут ошибочные чтения. Но потом должно все устаканится. NSS в "1" - и SPI в исходное состояние. Но этого же нет!?
Go to the top of the page
 
+Quote Post



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

 


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


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