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