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

 
 
 
Closed TopicStart new topic
> Доступ к регистрам CC2520, Криво считываются данные с трансивера
Сергей X
сообщение Feb 19 2011, 18:35
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 15
Регистрация: 21-11-07
Из: Казань
Пользователь №: 32 550



Доброго всем времени суток. Обращаюсь к людям,имеющих опыт общения с мелкосхемой от TI CC2520
Понимаю,что тема избитая,но тем не менее.......
Вобщем собрал на коленках две платы с CC2520. Контроллер Мега88,компилятор CVAVR. Обмен даже наладил,криво правда пока,но данные передаются.
Перерабатывал код от TI для MSP. Так вот,функция чтения из регистров по адресам 0x00-0x3F работает нормально как под отладчиком в пошаговом режиме,так и в "реальном времени"(вывожу через UART на терминал). А вот данные с адресов выше 0x40(CHIPID) нормально считываются только под отладчиком в пошаговом режиме. Если вывожу в терминал,то вижу данные через раз,т.е. считываются значения 0x84 и следом за ним 0x80. В датташите сказано Note that when an address with LSB=0 is read the content of the corresponding address with LSB=1 is buffered. If that address is read immediately after within the same MEMRD instruction, the buffered copy is read. In this way a read of a complete 16 bit word is performed as an atomic operation. Т.е. я считываю буферизированное значение во время второго чтения,но я же это делаю не в одной операции чтения,а в разных! Ткните носом куда копать,4 дня бьюсь над этим. И ещё......Функция чтения регистров при помощи инструкции MEMRD
,взятая из примера для MSP не работает
uint8 CC2520_MEMRD8(uint16 addr)
{
uint8 value;
CC2520_SPI_BEGIN();
CC2520_SPI_TXRX(CC2520_INS_MEMRD | HIBYTE(addr));
CC2520_SPI_TXRX(LOBYTE(addr));
value = CC2520_SPI_TXRX(0x00);
CC2520_SPI_END();
return value;
}

работает вот такая,не подскажете в чём причина,что я не так делаю или хотя бы куда копать надо?
unsigned char MEMRD(unsigned int addr,unsigned char *data,unsigned int size)
{
unsigned char status;
CC2520_CS_ENABLE();

status = spi(0x10 | HIBYTE(addr) );
spi(LOBYTE(addr-1));
spi(0);
spi(0);
while(size--)
{
*data++ = spi(0);
}
CC2520_CS_DISABLE();
return status;
}
Буду очень признателен за любые советы.Самому уже в голву ничего не идёт. Компеловская техподдержка(там покупали трансиверы) ничего вразумительного ответить не может,говорит,что должно всё нормально читаться
Go to the top of the page
 
+Quote Post

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

 


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


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