int A7105_Reset() { A7105_WriteReg(0x00, 0x00); usleep(1000); //Set both GPIO as output and low A7105_SetTxRxMode(TXRX_OFF); int result = A7105_ReadReg(0x10) == 0x9E; A7105_Strobe(A7105_STANDBY); return result; }
static int hubsan_init() { u8 if_calibration1; u8 vco_calibration0; u8 vco_calibration1; //u8 vco_current; A7105_WriteID(0x55201041); A7105_WriteReg(A7105_01_MODE_CONTROL, 0x63); A7105_WriteReg(A7105_03_FIFOI, 0x0f); A7105_WriteReg(A7105_0D_CLOCK, 0x05); A7105_WriteReg(A7105_0E_DATA_RATE, 0x04); A7105_WriteReg(A7105_15_TX_II, 0x2b); A7105_WriteReg(A7105_18_RX, 0x62); A7105_WriteReg(A7105_19_RX_GAIN_I, 0x80); A7105_WriteReg(A7105_1C_RX_GAIN_IV, 0x0A); A7105_WriteReg(A7105_1F_CODE_I, 0x07); A7105_WriteReg(A7105_20_CODE_II, 0x17); A7105_WriteReg(A7105_29_RX_DEM_TEST_I, 0x47); A7105_Strobe(A7105_STANDBY); //IF Filter Bank Calibration A7105_WriteReg(0x02, 1); //vco_current = A7105_ReadReg(0x02); u32 ms = CLOCK_getms(); CLOCK_ResetWatchdog(); while(CLOCK_getms() - ms < 500) { if(! A7105_ReadReg(0x02)) break; } if (CLOCK_getms() - ms >= 500) { DEBUG_MSG("calibration failed"); return 0; } if_calibration1 = A7105_ReadReg(A7105_22_IF_CALIB_I); A7105_ReadReg(A7105_24_VCO_CURCAL); if(if_calibration1 & A7105_MASK_FBCF) { //Calibration failed...what do we do? return 0; } //VCO Current Calibration //A7105_WriteReg(0x24, 0x13); //Recomended calibration from A7105 Datasheet //VCO Bank Calibration //A7105_WriteReg(0x26, 0x3b); //Recomended limits from A7105 Datasheet //VCO Bank Calibrate channel 0? //Set Channel A7105_WriteReg(A7105_0F_CHANNEL, 0); //VCO Calibration A7105_WriteReg(0x02, 2); ms = CLOCK_getms(); CLOCK_ResetWatchdog(); while(CLOCK_getms() - ms < 500) { if(! A7105_ReadReg(0x02)) break; } if (CLOCK_getms() - ms >= 500) { return 0; } vco_calibration0 = A7105_ReadReg(A7105_25_VCO_SBCAL_I); if (vco_calibration0 & A7105_MASK_VBCF) { //Calibration failed...what do we do? return 0; } //Calibrate channel 0xa0? //Set Channel A7105_WriteReg(A7105_0F_CHANNEL, 0xa0); //VCO Calibration A7105_WriteReg(A7105_02_CALC, 2); ms = CLOCK_getms(); CLOCK_ResetWatchdog(); while(CLOCK_getms() - ms < 500) { if(! A7105_ReadReg(A7105_02_CALC)) break; } if (CLOCK_getms() - ms >= 500) return 0; vco_calibration1 = A7105_ReadReg(A7105_25_VCO_SBCAL_I); if (vco_calibration1 & A7105_MASK_VBCF) { //Calibration failed...what do we do? } //Reset VCO Band calibration //A7105_WriteReg(0x25, 0x08); A7105_SetTxRxMode(TX_EN); A7105_SetPower(Model.tx_power); A7105_Strobe(A7105_STANDBY); return 1; }