Страница 1 из 1

MRF49XA - как с ней работать?

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

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

Решил переделать пример из microchipa.
http://www.microchip.com/stellent/idcpl ... e=en545176

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

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

Код: Выделить всё

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?

Код: Выделить всё

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
}
По факту не могу даже считать ни одного регистра...Чтобы хотя бы проверить - работает оно или нет.

Как проверить хотя бы передачу?