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

 
 
> MRF49XA, Как с ним работать?
MKdemiurg
сообщение Jun 8 2014, 06:41
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 624
Регистрация: 15-06-10
Из: Россия
Пользователь №: 57 939



Собственно сабж!
Заколебался.
Использую режим SPI 0,0 в АВРке.

Подключены 4 линии SPI( SDO,SDI,CS,SCK) , FSEL ,RCLKOUT, INT|DIO, RSSIO,IRQ.

Решил переделать пример из microchipa.

http://www.microchip.com/stellent/idcplg?I...ppnote=en545176

Не могу разобраться, чего ждать, какая логика работы...В русском даташите на аналог TC102 - какая то КАША!

Допустим из примера:

CODE
int SPI_Read(void)
{
char i;
int spidata = 0;

SPI_SDO = 0;
SPI_SCK = 0;
for (i=0;i<8;i=i+1)
{
spidata=spidata<<1;

if(SPI_SDI)
spidata |= 0x01;
else
spidata &= 0xFE;

SPI_SCK = 1;
SPI_SCK = 0;
}
return(spidata);
}

//--------------------------------------------------------------------
// SPI_Write ()
//--------------------------------------------------------------------
void SPI_Write(int spidata)
{
char i;

SPI_SDO = 0;
SPI_SCK = 0;
for (i=0;i<8;i=i+1)
{
if(spidata & 0x80)
SPI_SDO = 1;
else
SPI_SDO = 0;

SPI_SCK = 1;
SPI_SCK = 0;
spidata=spidata<<1;
}

SPI_SDO = 0;
}

SPI_SDO - это выход из контроллера MOSI?(нога контроллера сформирована как выход) Подключено к входу SDI MRF49xa/
SPI_SDI - это вход на контроллер (сформировано как высокоомный вход) . SDO MRF-ки


Тогда тут что такое RF_SDO?


CODE
void MRF49XA_Send_Packet(unsigned char *data, unsigned char length){

int a;
//---- turn off receiver , enable Tx register
SPI_Command(PMCREG); // turn off the transmitter and receiver
SPI_Command(GENCREG | 0x0080); // Enable the Tx register
//---- Packet transmission
// Reset value of the Tx regs are [AA AA], we can start transmission
//---- Enable Tx
SPI_Command(PMCREG |0x0020); // turn on tx

SPI_CS=0; // chip select low
while(!RF_SDO);
SPI_Write16(TXBREG | 0xAA); // preamble
while(!RF_SDO);
SPI_Write16(TXBREG | 0x2D); // sync pattern 1st byte
while(!RF_SDO);
SPI_Write16(TXBREG | 0xD4); // sync pattern 2nd byte
while(!RF_SDO);
SPI_Write16(TXBREG | length);
#ifdef SPECTRUM_TEST
for (a=0;1;){ // endless loop
#else
for (a=0;a<length;a++){ // send payload
#endif
while(!RF_SDO); // wait for SDO, when buffer data <=8 bits
#ifdef SPECTRUM_TEST
SPI_Write16(0xAA); // spectrum test
#else
SPI_Write16(TXBREG | data[a]); // write a byte to tx register
#endif
}
while(!RF_SDO){}
SPI_Write16(TXBREG |0x00); // write a dummy byte since the previous byte is still in buffer
while (!RF_SDO){} // wait for the last byte transmission end
SPI_CS=1; // chip select high, end transmission

//---- Turn off Tx disable the Tx register
SPI_Command(PMCREG | 0x0080); // turn off Tx, turn on the receiver
SPI_Command(GENCREG | 0x0040); // disable the Tx register, Enable the FIFO
}


По факту не могу даже считать ни одного регистра...Чтобы хотя бы проверить - работает оно или нет.

Как проверить хотя бы передачу?
Go to the top of the page
 
+Quote Post



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

 


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


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