57 lines
1.6 KiB
C
57 lines
1.6 KiB
C
#include "regs.h"
|
|
#include "rom.h"
|
|
#include "gfsk.h"
|
|
|
|
#if (DBG_GFSK)
|
|
#include "dbg.h"
|
|
#define DEBUG(format, ...) debug("<%s,%d>" format "\r\n", __MODULE__, __LINE__, ##__VA_ARGS__)
|
|
#else
|
|
#define DEBUG(format, ...)
|
|
#define debugHex(dat, len)
|
|
#endif
|
|
|
|
void rf_gfsk_init(void)
|
|
{
|
|
RF->FSM_DLY_CTRL0.Word = 0x0045E311;
|
|
RF->FSM_DLY_CTRL1.Word = 0x07120628;
|
|
RF->DATA_DLY_CTRL.Word = 0x0000238B;
|
|
RF->BPFMIX_CTRL.Word = 0x00437D90;
|
|
RF->AGC_CTRL0.Word = 0x050BD572;
|
|
RF->AGC_CTRL1.Word = 0x000966B2;
|
|
RF->AGC_CTRL2.Word = 0x00E0331A;
|
|
|
|
//.BG_RES_TRIM = 0x14
|
|
RF->ANA_TRIM.Word = 0x07DA9351;
|
|
RF->ANAMISC_CTRL1.Word = 0x00000880;
|
|
RF->ANA_PWR_CTRL.Word = 0x07FF7F08;
|
|
RF->ANA_EN_CTRL.Word = 0x00072000;
|
|
RF->PLL_ANA_CTRL.Word = 0x3180FE00;
|
|
RF->RF_RSV = 0x0000B800;
|
|
|
|
RF->DIG_CTRL.Word = 0x000092DB;
|
|
}
|
|
|
|
// ÒÔ2400M(dis=21, frach=0)Ϊ»ù×¼½øÐмÆËã
|
|
// tx_freq_mhz:2402 ~ 2480
|
|
void rf_gfsk_tx_freq(uint16_t tx_freq_mhz)
|
|
{
|
|
if (tx_freq_mhz > 2480)
|
|
tx_freq_mhz = 2480;
|
|
else if (tx_freq_mhz < 2402)
|
|
tx_freq_mhz = 2402;
|
|
|
|
uint8_t pll_dis = ((tx_freq_mhz - 2400) >> 4) + 0x15;
|
|
uint8_t pll_frach = ((tx_freq_mhz - 2400) & 0x0F);
|
|
|
|
pll_frach += (pll_frach & 0x01);
|
|
|
|
|
|
RF->PLL_DYM_CTRL.Word = (0x0F << RF_SW_PA_GAIN_TARGET_LSB);
|
|
btmr_delay(16, 200);
|
|
|
|
RF->PLL_FREQ_CTRL.SW_PLL_DI_S = (pll_dis & 0x1F);
|
|
RF->PLL_FREQ_CTRL.SW_PLL_FRAC = (uint32_t)((pll_frach & 0x0F) << 20);
|
|
RF->PLL_DYM_CTRL.Word = ((0x01 << RF_SW_TX_EN_POS) | (0x0F << RF_SW_PA_GAIN_TARGET_LSB)); // soft cfg en
|
|
btmr_delay(16, 400);
|
|
}
|