?? si4432.c
字號:
+ NOTES:
+
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
RF_ENUM RFIdle(void)
{
SpiWriteAddressData((REG_WRITE | OperatingFunctionControl1), 0x01);
//diasble all ITs
SpiWriteAddressData((REG_WRITE | InterruptEnable1), 0x00);
SpiWriteAddressData((REG_WRITE | InterruptEnable2), 0x00);
SpiReadWriteWord(InterruptStatus1 << 8);
SpiReadWriteWord(InterruptStatus2 << 8);
return RF_OK;
}
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+ FUNCTION NAME: RF_ENUM RFTransmit(uint8 * packet, uint8 length)
+
+ DESCRIPTION: starts packet transmission
+
+ INPUT: MESSAGE structure
+
+ RETURN: RF_OK: the packet sent correctly
+ RF_ERROR_TIMING: timing poblem -> the packet didn't send within timeout
+ RF_ERROR_PARAMETER: the command is ignored, some of the
+ input parameter(s) are
+ out of the valid range
+
+ NOTES:
+
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
RF_ENUM RFTransmit(uint8 * packet, uint8 length)
{
xdata uint8 temp8;
//set packet content
SpiWriteAddressData((REG_WRITE | TransmitPacketLength), length);
for(temp8=0;temp8<length;temp8++)
{
SpiWriteAddressData((REG_WRITE | FIFOAccess),packet[temp8]);
}
//enable the wanted ITs
SpiWriteAddressData((REG_WRITE | InterruptEnable1), 0x04);
SpiWriteAddressData((REG_WRITE | InterruptEnable2), 0x00);
SpiReadWriteWord(InterruptStatus1 << 8);
SpiReadWriteWord(InterruptStatus2 << 8);
//enable transmitter
SpiWriteAddressData((REG_WRITE | OperatingFunctionControl1), 0x09);
while(RF_NIRQ_PIN == 1);
return RF_OK;
}
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+ FUNCTION NAME: RF_ENUM RFReceive(void)
+
+ DESCRIPTION: starts packet reception
+
+ INPUT: None
+
+ RETURN: RF_OK: the operation was succesfull
+
+ NOTES:
+
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
RF_ENUM RFReceive(void)
{
//enable the packet valid interrupt
SpiWriteAddressData((REG_WRITE | InterruptEnable1), 0x02);
SpiWriteAddressData((REG_WRITE | InterruptEnable2), 0x00);
SpiReadWriteWord(InterruptStatus1 << 8);
SpiReadWriteWord(InterruptStatus2 << 8);
//enable receiver chain
SpiWriteAddressData((REG_WRITE | OperatingFunctionControl1), 0x05);
return RF_OK;
}
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+ FUNCTION NAME: RF_ENUM RFPacketReceived(uint8 * packet, uint8 * length)
+
+ DESCRIPTION: check wheter the packet received or not.
+
+ INPUT: pointers for storing data and length
+
+ RETURN: RF_PACKET_RECEIVED: packet received
+ RF_NO_PACKET: packet is not yet received
+
+ NOTES:
+
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
RF_ENUM RFPacketReceived(uint8 * packet, uint8 * length)
{
xdata uint8 i;
if( RF_NIRQ_PIN == 0 )
{
i = (uint8)(0x00FF & SpiReadWriteWord(InterruptStatus1 << 8));
if( (i & 0x01) == 0x01 )
{//CRC error
//disable receiver
SpiWriteAddressData((REG_WRITE | OperatingFunctionControl1), 0x01);
return RF_CRC_ERROR;
}
if( (i & 0x02) == 0x02 )
{//packet received
//read buffer
*length = (uint8)(0x00FF & SpiReadWriteWord(ReceivedPacketLength << 8)) ;
for(i=0;i<*length;i++)
{
*packet++ = (uint8)(0x00FF & SpiReadWriteWord(FIFOAccess << 8));
}
//disable receiver
SpiWriteAddressData((REG_WRITE | OperatingFunctionControl1), 0x01);
return RF_PACKET_RECEIVED;
}
}
return RF_NO_PACKET;
}
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+ FUNCTION NAME: void RFCWTest(void)
+
+ DESCRIPTION: set the chip into CW mode
+
+ INPUT: None
+
+ RETURN: None
+
+ NOTES:
+
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
void RFCWTest(void)
{
//enable CW mode
SpiWriteAddressData((REG_WRITE | ModulationModeControl2), 0x00);
//disable packet handler & CRC16
SpiWriteAddressData((REG_WRITE | DataAccessControl), 0x00);
//enable transmitter
SpiWriteAddressData((REG_WRITE | OperatingFunctionControl1), 0x09);
//disable all the ITs
SpiWriteAddressData((REG_WRITE | InterruptEnable1), 0x00);
SpiWriteAddressData((REG_WRITE | InterruptEnable2), 0x00);
//set GPIO0 to RX_DATA
SpiWriteAddressData((REG_WRITE | GPIO0Configuration), 0x14);
//set GPIO1 & GPIO2 to control the TRX switch
SpiWriteAddressData((REG_WRITE | GPIO1Configuration), 0x12);
SpiWriteAddressData((REG_WRITE | GPIO2Configuration), 0x15);
TR_LED_PIN = 1;
}
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+ FUNCTION NAME: RF_ENUM RxFIFOReset(void)
+
+ DESCRIPTION: reset the RX FIFO after receiving
+
+ INPUT: None
+
+ RETURN: None
+
+ NOTES:
+
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
RF_ENUM RxFIFOReset(void)
{
SpiWriteAddressData((REG_WRITE | OperatingFunctionControl2), 0x02);
SpiWriteAddressData((REG_WRITE | OperatingFunctionControl2), 0x00);
return RF_OK;
}
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+ FUNCTION NAME: RF_ENUM TxFIFOReset(void)
+
+ DESCRIPTION: reset the TX FIFO before transmitting
+
+ INPUT: None
+
+ RETURN: None
+
+ NOTES:
+
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
RF_ENUM TxFIFOReset(void)
{
SpiWriteAddressData((REG_WRITE | OperatingFunctionControl2), 0x01);
SpiWriteAddressData((REG_WRITE | OperatingFunctionControl2), 0x00);
return RF_OK;
}
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+ FUNCTION NAME: RF_ENUM set_dr(RF_SAMPLE_SETTINGS setting)
+
+ DESCRIPTION: set the datarate
+
+ INPUT: the number of the modem parameter settings
+
+ RETURN: None
+
+ NOTES:
+
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
RF_ENUM set_dr(RF_SAMPLE_SETTINGS setting)
{
//set the registers according the selected RF settings
RFSetRfParameters(setting);
return RF_OK;
}
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+ FUNCTION NAME: RF_ENUM set_pwr(uint8 pwr)
+
+ DESCRIPTION: set the TX power
+
+ INPUT: TXPower register content
+
+ RETURN: None
+
+ NOTES:
+
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
RF_ENUM set_pwr(uint8 pwr)
{
SpiWriteAddressData((REG_WRITE | TXPower), (pwr|0x18));
return RF_OK;
}
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+ FUNCTION NAME: RF_ENUM set_frq(uint8 frq)
+
+ DESCRIPTION: set the TX frequency
+
+ INPUT: the number of the frequency channel
+
+ RETURN: None
+
+ NOTES:
+
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
RF_ENUM set_frq(uint8 frq)
{
//set frequency
SpiWriteAddressData((REG_WRITE | NominalCarrierFrequency1), FreqSettings[1][rf_dr] );
SpiWriteAddressData((REG_WRITE | NominalCarrierFrequency0), FreqSettings[2][rf_dr] );
SpiWriteAddressData((REG_WRITE | FrequencyHoppingStepSize), FreqSettings[3][rf_dr] );
SpiWriteAddressData((REG_WRITE | FrequencyHoppingChannelSelect), frq);
return RF_OK;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -