void init_a7105(void) { uint8_t i; uint8_t if_calibration1; uint8_t vco_calibration0; uint8_t vco_calibration1; lib_timers_delaymilliseconds(10); //wait 10ms for A7105 wakeup A7105_Reset(); //reset A7105 A7105_WriteID(0x5475c52A); //A7105 id A7105_ReadID((uint8_t*)&aid); // Serial.print(aid[0], HEX); // Serial.print(aid[1], HEX); // Serial.print(aid[2], HEX); // Serial.print(aid[3], HEX); // Serial.println("fin id"); for (i = 0; i < 0x33; i++) { if (A7105_regs[i] != 0xff) A7105_WriteRegister(i, A7105_regs[i]); } A7105_Strobe(A7105_STANDBY); //stand-by A7105_WriteRegister(0x02, 0x01); while (A7105_ReadRegister(0x02)) { if_calibration1 = A7105_ReadRegister(0x22); if (if_calibration1 & 0x10) { //do nothing } } A7105_WriteRegister(0x24, 0x13); A7105_WriteRegister(0x26, 0x3b); A7105_WriteRegister(0x0F, 0x00); //channel 0 A7105_WriteRegister(0x02, 0x02); while (A7105_ReadRegister(0x02)) { vco_calibration0 = A7105_ReadRegister(0x25); if (vco_calibration0 & 0x08) { //do nothing } } A7105_WriteRegister(0x0F, 0xA0); A7105_WriteRegister(0x02, 0x02); while (A7105_ReadRegister(0x02)) { vco_calibration1 = A7105_ReadRegister(0x25); if (vco_calibration1 & 0x08) { //do nothing } } A7105_WriteRegister(0x25, 0x08); A7105_Strobe(A7105_STANDBY); //stand-by }
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; }