I am trying to configure a hmc832a evaluation board in fractional mode, but the output frequency does not match my configuration.
The pll is configured by sending the following data/address pairs through spi (the frequency variable is set to 2200):
uint32_t data[] = {
0x20,//readAddress soft reset
0x2,//reset
0x1,//refDiv
((0x1 << 7) | (vcoDiv)),//vcoSpi rf divider = 1
((0x1F << 7) | (vcoConf << 3)),//vcoSpi
(0x9B << 7 | (vcoPwrCtrl << 3)),//vcoSpi
0x0,//vcoSpi required to write 0 in order to be ready for autocalibration
0xF4A,//sigmaDelta
0x8CD,//lockDetect
0xC1BEEF,//analogEnable
0x393264,//cpReg tbd
0x85,//autoCal
0x4F80E1,//PdReg set 3.3V mode
0x0,//exactFreq disabled
0x1,//gpoSpiRDiv lockdetect when not miso
frequency/50,//nInt
round(fmod(frequency, 50.0)*pow(2,24)/50.0),//nFraq
};
char address[] = {
readAddress,
reset,
refDiv,
vcoSpi,
vcoSpi,
vcoSpi,
vcoSpi,
sigmaDelta,
lockDetect,
analogEnable,
cpReg,
autoCal,
pdReg,
exactFreq,
gpoSpiRDiv,
intReg,
fractReg
};
Reading back from the pll I get:
register 0 = f 32 75
register 1 = 0 0 2
register 2 = 0 0 1
register 3 = 0 0 2c
register 4 = 0 0 0
register 5 = 0 0 0
register 6 = 0 f 4a
register 7 = 0 8 cd
register 8 = c1 be ef
register 9 = 39 32 64
register a = 0 0 85
register b = 4f 80 e1
register c = 0 0 0
register d = 0 0 0
register e = 0 0 0
register f = 0 0 1
register 10 = 0 0 c0
register 11 = 0 b 12
register 12 = 0 0 0
register 13 = 0 12 59
With these configurations, the output frequency is 1.336GHz while I was expecting 2.2GHz.
Have I missed something in my configuration sequence or are there some other possible explanation?