コード例 #1
0
ファイル: rx_flysky.c プロジェクト: TheSmartGerman/bradwii-X4
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
}
コード例 #2
0
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;
}