📄 ia443x_rf.h
字号:
/*
** ============================================================================
**
** FILE
** IA443x_rf.h
**
** DESCRIPTION
** Header file for the RF functions
**
** CREATED
** Silicon Laboratories Hungary Ltd
**
** COPYRIGHT
** Copyright 2008 Silicon Laboratories, Inc.
** http://www.silabs.com
**
** ============================================================================
*/
#ifndef IA443X_RF_H
#define IA443X_RF_H
#include "S8051.h"
/* ======================================= *
* APPLICATION SPECIFIC DEFINITIONS *
* ======================================= */
//default settings
#define PREAMBLE_LENGTH (12) //in bytes
#define PD_LENGTH (4) //in bytes
#define SYNCH_WORD_LENGTH (2)
#define PAYLOAD_LENGTH (20) //must be between 5...64!
#define LENGTH_FIELD (1)
#define MAX_PAYLOAD (64)
#define CRC_LENGTH (2)
/* ======================================= *
* D E F I N I T I O N S *
* ======================================= */
/*definitions for the GPIO Configuration 0,1,2 registers*/
//These functions can be multiplex out to the GPIO pins
#define GPIO_NPOR (0x00) //only on GPIO0
#define GPIO_POR (0x00) //only on GPIO1
#define GPIO_UCLK (0x00) //only on GPIO2
#define GPIO_WUT (0x01)
#define GPIO_LBD (0x02)
#define GPIO_DIN (0x03)
#define GPIO_IT_FALLING (0x04)
#define GPIO_IT_RISING (0x05)
#define GPIO_IT_STATE (0x06)
#define GPIO_ADC (0x07)
#define GPIO_ATB_IN_N (0x08)
#define GPIO_ATB_IN_P (0x09)
#define GPIO_DOUT (0x0A)
#define GPIO_DTB (0x0B)
#define GPIO_ATB_OUT_N (0x0C)
#define GPIO_ATB_OUT_P (0x0D)
#define GPIO_REF (0x0E)
#define GPIO_TX_CLK (0x0F)
#define GPIO_TX_DATA_IN (0x10)
#define GPIO_EXT_RETX (0x11)
#define GPIO_TX_STATE (0xD2)
#define GPIO_TX_FIFO_AFULL (0x13)
#define GPIO_RX_DATA (0x14)
#define GPIO_RX_STATE (0xD5)
#define GPIO_RX_FIFO_AFULL (0x16)
#define GPIO_ANT1_SWITCH (0xD7)
#define GPIO_ANT2_SWITCH (0xD8)
#define GPIO_VALID_PREA (0x19)
#define GPIO_INVALID_PREA (0x1A)
#define GPIO_SYNCH_WORD_DET (0x1B)
#define GPIO_CCA (0x1C)
#define GPIO_VDD (0x1D)
#define GPIO_GND (0x1F)
//Register setting default values
#define RF_MCU_LF_CLK (0)
#define RF_MCU_CLOCK_TAIL (0)
#define RF_MCU_CLK_RATE (0)
//definitions for register usage
#define REG_READ (0x00)
#define REG_WRITE (0x80)
/*definitions for the Modulation Mode Control 2 register*/
//definitions for the TX CLK
#define TX_CLK_OFF (0x00)
#define TX_CLK_ON_GPIO (0x40)
#define TX_CLK_ON_SCK (0x80)
#define TX_CLK_ON_nIRQ (0xC0)
//definitions for the Modulation source
#define MOD_DIRECT_VIA_GPIO (0x00)
#define MOD_DIRECT_VIA_SDI (0x10)
#define MOD_FIFO (0x20)
#define MOD_PN9 (0x30)
#define MOD_INVERT_TX (0x08)
//definition for the modulation type
#define MOD_TYPE_CW (0x00)
#define MOD_TYPE_OOK (0x01)
#define MOD_TYPE_FSK (0x02)
#define MOD_TYPE_GFSK (0x03)
/*definitions for the Data Access Control register*/
//definitions for the packet handler
#define TX_PACKET_HANDLER_DIS (0x00)
#define TX_PACKET_HANDLER_EN (0x08)
#define RX_PACKET_HANDLER_DIS (0x00)
#define RX_PACKET_HANDLER_EN (0x80)
#define LSB_FIRST (0x40)
#define MSB_FIRST (0x00)
#define CRC_DIS (0x00)
#define CRC_CCITT (0x04)
#define CRC_16 (0x05)
#define CRC_IEC16 (0x06)
#define CRC_BIACHEVA (0x07)
#define CRC_DATA_ONLY (0x20)
#define AUTO_PHASE_DETECT_MANCH (0x10)
/*definitions for the TX Power register*/
#define RF_FULL_POWER (0x07)
//time definitions @ 8MHz PIC
#define TX_PACKET_LENGTH (PREAMBLE_LENGTH + SYNCH_WORD_LENGTH + LENGTH_FIELD + MAX_PAYLOAD + CRC_LENGTH + 5)
#define RX_PD_TIMEOUT (PREAMBLE_LENGTH + SYNCH_WORD_LENGTH + 4)
#define RX_PACKET_LENGTH (LENGTH_FIELD + MAX_PAYLOAD + CRC_LENGTH + 3)
#define BYTE_TIME_DIV (TMR2_12)
#define BYTE_TIME_SW_DIV (11)
#define RESET_TIMEOUT (667) //1ms
#define RESET_TIMEOUT_DIV (TMR2_12)
#define RESET_TIMEOUT_SW_DIV (1)
#define XTAL_WAKE_UP_PERIOD (3334) //5ms
#define XTAL_WAKE_UP_PERIOD_DIV (TMR2_12)
#define XTAL_WAKE_UP_PERIOd_SW_DIV (1)
/* ======================================= *
* T Y P E D E C L A R A T I O N *
* ======================================= */
//RF stack enumerations
typedef enum _RF_ENUM
{
RF_OK,
RF_ERROR_STATE,
RF_ERROR_TIMING,
RF_ERROR_PARAMETER,
RF_TIMER_IT,
RF_EXT_IT,
} RF_ENUM;
typedef enum _RF_STATES
{
sRFStandBy = 1,
sRFPOR,
sRFIdle,
sRFWakingUp,
sRFWakeUpError,
sRFTxWaiting,
sRFTransmitting,
sRFTxError,
sRFPacketSent,
sRFRxWaiting,
sRFPreambleSearch,
sRFSynchSearch,
sRFReceiving,
sRFPacketReceived,
} RF_STATES;
typedef enum _RF_PARAMETER
{
pRfFrequency,
pRfGpios,
pRfDigitalOut,
pRfDigitalIn,
pRfTransmitPower,
pRfPreambleLength,
pRfPremableDetection,
pRfSynchronWord,
pRfModulation,
pRfPacketHandler,
pRfAntennaDiversity,
pLowBatteryDetector,
pRfDataInverted,
} RF_PARAMETER;
typedef struct _HEADER
{
uint8 header3;
uint8 header2;
uint8 header1;
uint8 header0;
uint8 enabled_headers;
} HEADER;
typedef struct _HEADER_FLT
{
uint8 all_filter_disable :1;
uint8 header3_flt :1;
uint8 header2_flt :1;
uint8 header1_flt :1;
uint8 header0_flt :1;
uint8 header3_bc_flt :1;
uint8 header2_bc_flt :1;
uint8 header1_bc_flt :1;
uint8 header0_bc_flt :1;
uint8 packet_length_flt :1;
uint8 reserve_bits :6;
} HEADER_FLT;
typedef struct _MESSAGE
{
HEADER header;
uint8 length;
uint8 * payload;
} MESSAGE;
typedef struct _RECEIVE_COMMAND
{
HEADER header;
HEADER_FLT header_flt;
} RECEIVE_COMMAND;
typedef struct _PHY_STATUS
{
uint8 status;
} PHY_STATUS;
typedef struct _RECEIVED_DATA
{
uint8 fPacketReceived;
MESSAGE message;
} RECEIVED_DATA;
typedef enum _ANTENNA_TYPE
{
SEPARATE_RX_TX,
RX_TX_SWITCH,
ANTENNA_DIVERSITY,
DIVERSITY_FIX_A,
DIVERSITY_FIX_B,
} ANTENNA_TYPE;
typedef enum _RF_REG_MAP //revV2
{
DeviceType = 0x00, DeviceVersion = 0x01, DeviceStatus = 0x02, InterruptStatus1 = 0x03, InterruptStatus2 = 0x04, InterruptEnable1 = 0x05, InterruptEnable2 = 0x06, OperatingFunctionControl1 = 0x07, OperatingFunctionControl2 = 0x08, CrystalOscillatorLoadCapacitance = 0x09, MicrocontrollerOutputClock = 0x0A, GPIO0Configuration = 0x0B, GPIO1Configuration = 0x0C,
GPIO2Configuration = 0x0D,
IOPortConfiguration = 0x0E,
ADCConfiguration = 0x0F,
ADCSensorAmplifierOffset = 0x10,
ADCValue = 0x11,
TemperatureSensorControl = 0x12,
TemperatureValueOffset = 0x13,
WakeUpTimerPeriod1 = 0x14, WakeUpTimerPeriod2 = 0x15,
WakeUpTimerPeriod3 = 0x16,
WakeUpTimerValue1 = 0x17,
WakeUpTimerValue2 = 0x18,
LowDutyCycleModeDuration = 0x19, LowBatteryDetectorThreshold = 0x1A, BatteryVoltageLevel = 0x1B,
IFFilterBandwidth = 0x1C, AFCLoopGearshiftOverride = 0x1D,
AFCTimingControl = 0x1E, ClockRecoveryGearshiftOverride = 0x1F, ClockRecoveryOversamplingRatio = 0x20, ClockRecoveryOffset2 = 0x21, ClockRecoveryOffset1 = 0x22, ClockRecoveryOffset0 = 0x23, ClockRecoveryTimingLoopGain1 = 0x24, ClockRecoveryTimingLoopGain0 = 0x25, ReceivedSignalStrengthIndicator = 0x26, RSSIThresholdForClearChannelIndicator = 0x27, AntennaDiversityRegister1 = 0x28,
AntennaDiversityRegister2 = 0x29,
DataAccessControl = 0x30, EZmacStatus = 0x31, HeaderControl1 = 0x32, HeaderControl2 = 0x33, PreambleLength = 0x34, PreambleDetectionControl = 0x35, SyncWord3 = 0x36, SyncWord2 = 0x37, SyncWord1 = 0x38, SyncWord0 = 0x39, TransmitHeader3 = 0x3A, TransmitHeader2 = 0x3B, TransmitHeader1 = 0x3C, TransmitHeader0 = 0x3D, TransmitPacketLength = 0x3E, CheckHeader3 = 0x3F, CheckHeader2 = 0x40, CheckHeader1 = 0x41, CheckHeader0 = 0x42, HeaderEnable3 = 0x43, HeaderEnable2 = 0x44, HeaderEnable1 = 0x45, HeaderEnable0 = 0x46, ReceivedHeader3 = 0x47, ReceivedHeader2 = 0x48, ReceivedHeader1 = 0x49, ReceivedHeader0 = 0x4A,
ReceivedPacketLength = 0x4B,
AnalogTestBus = 0x50, DigitalTestBus = 0x51, TXRampControl = 0x52, PLLTuneTime = 0x53, CalibrationControl = 0x55, ModemTest = 0x56, ChargepumpTest = 0x57, ChargepumpCurrentTrimming_Override = 0x58, DividerCurrentTrimming = 0x59, VCOCurrentTrimming = 0x5A, VCOCalibration_Override = 0x5B, SynthesizerTest = 0x5C, BlockEnableOverride1 = 0x5D, BlockEnableOverride2 = 0x5E, BlockEnableOverride3 = 0x5F, ChannelFilterCoefficientAddress = 0x60, ChannelFilterCoefficientValue = 0x61, CrystalOscillator_ControlTest = 0x62, RCOscillatorCoarseCalibration_Override = 0x63, RCOscillatorFineCalibration_Override = 0x64, LDOControlOverride = 0x65, DeltasigmaADCTuning1 = 0x67, DeltasigmaADCTuning2 = 0x68, AGCOverride1 = 0x69, AGCOverride2 = 0x6A, GFSKFIRFilterCoefficientAddress = 0x6B, GFSKFIRFilterCoefficientValue = 0x6C, TXPower = 0x6D, TXDataRate1 = 0x6E, TXDataRate0 = 0x6F, ModulationModeControl1 = 0x70, ModulationModeControl2 = 0x71, FrequencyDeviation = 0x72, FrequencyOffset = 0x73, FrequencyChannelControl = 0x74,
FrequencyBandSelect = 0x75, NominalCarrierFrequency1 = 0x76, NominalCarrierFrequency0 = 0x77, FrequencyHoppingChannelSelect = 0x79, FrequencyHoppingStepSize = 0x7A, TXFIFOControl1 = 0x7C, TXFIFOControl2 = 0x7D, RXFIFOControl = 0x7E, FIFOAccess = 0x7F,
} RF_REG_MAP;
/* ======================================= *
* F U N C T I O N P R O T O T Y P E S *
* ======================================= */
RF_ENUM RfInitHw(void);
RF_ENUM RFWakeUp(void);
RF_ENUM RFSleep(void);
RF_ENUM RFIdle(void);
RF_ENUM RFSetParameter(RF_PARAMETER parameter, uint8 * value, uint8 length);
RF_ENUM RFSetRfParameters(uint8 modulation_mode, uint8 arib_mode, uint8 data_rate);
RF_ENUM RFDirectTransmit(void);
RF_ENUM RFTransmit(MESSAGE * Struct);
RF_ENUM RFDirectReceive(void);
RF_ENUM RFReceive(RECEIVE_COMMAND * Struct);
RF_ENUM RFGetStatus(PHY_STATUS * Struct);
RF_ENUM RFGetBuffer(RECEIVED_DATA * Struct);
RF_ENUM RFGetRssiResult(uint8 * ant1, uint8 * ant2);
void RFTimerISR(void);
void RFExtISR(void);
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -