commit
This commit is contained in:
@@ -56,9 +56,20 @@ typedef enum {
|
|||||||
|
|
||||||
}si5351_ClkSource;
|
}si5351_ClkSource;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
|
||||||
|
SI5351_PLL_A = 0,
|
||||||
|
SI5351_PLL_B = 1,
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}si5351_PLLs;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
|
|
||||||
SI5351_REG_PLL_INPUT_SOURCE = 0xf0, // Reg 15
|
SI5351_REG_PLL_INPUT_SOURCE = 0xf0, // Reg 15
|
||||||
|
SI5351_REG_MULTISYNTH_NA_0 = 29,
|
||||||
|
SI5351_REG_MULTISYNTH_NB_0 = 34,
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -262,6 +273,8 @@ typedef struct{
|
|||||||
int cm_si5351_init(si5351_driver *inst, void *i2c_transfer_inst, setGet_I2C_Event_fpt i2c_transfer_evt);
|
int cm_si5351_init(si5351_driver *inst, void *i2c_transfer_inst, setGet_I2C_Event_fpt i2c_transfer_evt);
|
||||||
uint8_t cm_si5351_getRevisionNumber(si5351_driver *inst);
|
uint8_t cm_si5351_getRevisionNumber(si5351_driver *inst);
|
||||||
int cm_setInputSource(si5351_driver *inst, si5351_ClkSource clk_source);
|
int cm_setInputSource(si5351_driver *inst, si5351_ClkSource clk_source);
|
||||||
|
int cm_setPLLParameters(si5351_driver *inst,si5351_PLLs sel_pll, uint32_t a, uint32_t b, uint32_t c);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif /* SI5351_DRIVER_INCLUDE_SI5351_DRIVER_H_ */
|
#endif /* SI5351_DRIVER_INCLUDE_SI5351_DRIVER_H_ */
|
||||||
|
|||||||
@@ -34,6 +34,62 @@ static int writeRegister(si5351_driver *inst,uint8_t data_addr, uint8_t *data, u
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int cm_setPLLParameters(si5351_driver *inst,si5351_PLLs sel_pll, uint32_t a, uint32_t b, uint32_t c){
|
||||||
|
|
||||||
|
uint32_t temp_val = 0;
|
||||||
|
|
||||||
|
switch(sel_pll){
|
||||||
|
|
||||||
|
case SI5351_PLL_A:
|
||||||
|
|
||||||
|
temp_val = (float)128 * (float)a + ((float)128 * ((float)b/(float)c)) - (float)512;
|
||||||
|
|
||||||
|
inst->device_data.multiSynthNAParam.MSNx_P1_17_16 = (temp_val >> 15) & 0x2;
|
||||||
|
inst->device_data.multiSynthNAParam.MSNx_P1_15_8 = (temp_val >> 8) & 0xff;
|
||||||
|
inst->device_data.multiSynthNAParam.MSNx_P1_7_0 = temp_val & 0xff;
|
||||||
|
|
||||||
|
temp_val = 0;
|
||||||
|
|
||||||
|
temp_val = (float)128 * (float)b - (float)c * (float)128 * ((float)b/(float)c);
|
||||||
|
|
||||||
|
inst->device_data.multiSynthNAParam.MSNx_P2_19_16 = (temp_val >> 15) & 0x4;
|
||||||
|
inst->device_data.multiSynthNAParam.MSNx_P2_15_8 = (temp_val >> 7) & 0xff;
|
||||||
|
inst->device_data.multiSynthNAParam.MSNx_P2_7_0 = temp_val & 0xff;
|
||||||
|
|
||||||
|
inst->device_data.multiSynthNAParam.MSNx_P3_19_16 = (c >> 15) & 0x4;
|
||||||
|
inst->device_data.multiSynthNAParam.MSNx_P3_15_8 = (c >> 7) & 0xff;
|
||||||
|
inst->device_data.multiSynthNAParam.MSNx_P3_7_0 = c & 0xff;
|
||||||
|
|
||||||
|
writeRegister(inst,SI5351_REG_MULTISYNTH_NA_0, (uint8_t*) &inst->device_data.multiSynthNAParam, sizeof(si5351_multiSynthNxParameters_t));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SI5351_PLL_B:
|
||||||
|
|
||||||
|
temp_val = 128 * a + (128 * (b/c)) - 512;
|
||||||
|
|
||||||
|
inst->device_data.multiSynthNBParam.MSNx_P1_17_16 = (temp_val >> 15) & 0x2;
|
||||||
|
inst->device_data.multiSynthNBParam.MSNx_P1_15_8 = (temp_val >> 8) & 0xff;
|
||||||
|
inst->device_data.multiSynthNBParam.MSNx_P1_7_0 = temp_val & 0xff;
|
||||||
|
|
||||||
|
temp_val = 0;
|
||||||
|
|
||||||
|
temp_val = 128 * b - c * (128 * (b/c));
|
||||||
|
|
||||||
|
inst->device_data.multiSynthNBParam.MSNx_P2_19_16 = (temp_val >> 15) & 0x4;
|
||||||
|
inst->device_data.multiSynthNBParam.MSNx_P2_15_8 = (temp_val >> 7) & 0xff;
|
||||||
|
inst->device_data.multiSynthNBParam.MSNx_P2_7_0 = temp_val & 0xff;
|
||||||
|
|
||||||
|
inst->device_data.multiSynthNBParam.MSNx_P3_19_16 = (c >> 15) & 0x4;
|
||||||
|
inst->device_data.multiSynthNBParam.MSNx_P3_15_8 = (c >> 7) & 0xff;
|
||||||
|
inst->device_data.multiSynthNBParam.MSNx_P3_7_0 = c & 0xff;
|
||||||
|
|
||||||
|
writeRegister(inst,SI5351_REG_MULTISYNTH_NB_0, (uint8_t*) &inst->device_data.multiSynthNBParam, sizeof(si5351_multiSynthNxParameters_t));
|
||||||
|
break;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
int cm_setInputSource(si5351_driver *inst, si5351_ClkSource clk_source){
|
int cm_setInputSource(si5351_driver *inst, si5351_ClkSource clk_source){
|
||||||
|
|
||||||
switch(clk_source){
|
switch(clk_source){
|
||||||
|
|||||||
Reference in New Issue
Block a user