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

Есть проблема с Si1000

Добрый день! Есть проблема с записью и считыванием регистра SPI1DAT и в передатчике и в приемнике Si1000. Не пишутся данные в SPI1DAT. При записи отображается 0х00. Среда разработки IDE v4.20.00. Кто-нибудь сталкивался с такой проблемой? Что может быть?.

 

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


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

SFRPAGE до того не переключали случаем? Там д.б. ноль, если даташит не врёт. :)

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


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

SFRPAGE до того не переключали случаем? Там д.б. ноль, если даташит не врёт. :)

 

SFRPAGE =0; С этим все чисто. Т.е 3-х проводной интерфейс SPI1 в режиме мастер (напр. для передатчика), и при записи значения в SPI1DAT, SPI1CN=0х03. После записи SPI1CN=0х01. Вроде все чисто, но SPI1DAT при этом = 0х00.

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


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

SFRPAGE =0; С этим все чисто. Т.е 3-х проводной интерфейс SPI1 в режиме мастер (напр. для передатчика), и при записи значения в SPI1DAT, SPI1CN=0х03. После записи SPI1CN=0х01. Вроде все чисто, но SPI1DAT при этом = 0х00.

Кроссбар и порты правильно настроены?

Я начинал с примеров от HopeRF RFM50. Там тоже SI1000. Все заработало сразу.

Вот исходники.

http://www.hoperf.com/upload/rf/rf50_code.rar

Посмотрите как там spi сделан.

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


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

Кусок своего кода для ыш-1000 прилагаю, но я использовал, кажется, 3-wire и NSS дергал вручную, не помню уже почему

 

void ForceReg ( bit rw, unsigned char addr, unsigned char dataToReg ){
  // Send SPI data using double buffered write
 EA = 0;

  NSS1 = 0;                           // drive NSS low
  SPIF1 = 0;    
  if( rw ){                      // clear SPIF
    SPI1DAT = (addr | 0x80 );             // write reg address
  } else {
    SPI1DAT = (addr );             // write reg address
  }
  while(!TXBMT1);                     // wait on TXBMT
  SPI1DAT = dataToReg;                    // write value
  while(!TXBMT1);                     // wait on TXBMT
  while((SPI1CFG & 0x80) == 0x80);    // wait on SPIBSY

  curReg.dataFromReg = SPI1DAT;

  SPIF1 = 0;                          // leave SPIF cleared
  NSS1 = 1;      

 EA = 1;                     // drive NSS high
}

 

Кроссбар и порты получаются утилитой, целый файл наверное нет смысла класть.

Хотел сказать посмотрите осцилом что там реально получается, но тут это затруднительно :)

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


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

Отладка на камне или в симуляторе??? Если на камне, то осцилограф рассудит. Если в симуляторе, то не вся перефирия и не увсех камней поддерживается. Иногда поддерживается криво.

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


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

at90, спасибо. Проблема была в иницилизации. Да и сложно было искать на рабочем изделии (сигнальные образцы TR и RF)

 

Vladimir Prokofi..., редактор Отладка на камне. Спектроанализатора на 500МГц нет, да и осц. на 500МГц тоже (раб.частота 434МГц), а осциллографом (по низкой) смотреть на SPI1 не получается, он наружу не выведен.

 

Что касается SPI1DAT, то отладчик IDE не показывает его состояние и о работоспособности можно судить только косвенно по возвращаемым значениям.

Всем еще раз спасибо

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


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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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