⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 si4432.c

📁 si4432官方的程序
💻 C
📖 第 1 页 / 共 2 页
字号:
  + 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 + -