📄 si4432.c.svn-base
字号:
+ 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 + -