ADF4350
ADF4350.cpp
- Committer:
- nguyenmanhthao996tn
- Date:
- 2017-09-30
- Revision:
- 0:a37afa334923
File content as of revision 0:a37afa334923:
#include "ADF4350.h" void __ADF4350_WriteRegister32(const uint32_t value) // Program a 32bits register { le = 0; for (int i = 3; i >= 0; i--) // loop on 4 x 8 bits adf.sendData((value >> 8 * i) & 0xFF); // offset, byte masking and sending via SPI le = 1; le = 0; } void __ADF4350_SetADF(void) // Program all the registers of the ADF4351 { int i = 5; for (; i >= 0; i--) { // Programming ADF4351 starting with R5 __ADF4350_WriteRegister32(registers[i]); } } void __ADF4350_bitSet(uint32_t *destination, int position) { *destination |= (1 << position); } void __ADF4350_bitClear(uint32_t *destination, int position) { *destination &= ~(1 << position); } void __ADF4350_bitWrite(uint32_t *destination, int position, int value) { if (value == 0) { __ADF4350_bitClear(destination, position); } else if (value == 1) { __ADF4350_bitSet(destination, position); } } void ADF4350_reset(void) { __ADF4350_WriteRegister32(0x18004E62); } void ADF4350_Init(void) { le = 1; ce = 1; ADF4350_reset(); delay_ms(1); } void ADF4350_SetFrequency(double RFout) { if (RFout >= 2200) { OutputDivider = 1; __ADF4350_bitWrite(®isters[4], 22, 0); __ADF4350_bitWrite(®isters[4], 21, 0); __ADF4350_bitWrite(®isters[4], 20, 0); } if (RFout < 2200) { OutputDivider = 2; __ADF4350_bitWrite(®isters[4], 22, 0); __ADF4350_bitWrite(®isters[4], 21, 0); __ADF4350_bitWrite(®isters[4], 20, 1); } if (RFout < 1100) { OutputDivider = 4; __ADF4350_bitWrite(®isters[4], 22, 0); __ADF4350_bitWrite(®isters[4], 21, 1); __ADF4350_bitWrite(®isters[4], 20, 0); } if (RFout < 550) { OutputDivider = 8; __ADF4350_bitWrite(®isters[4], 22, 0); __ADF4350_bitWrite(®isters[4], 21, 1); __ADF4350_bitWrite(®isters[4], 20, 1); } if (RFout < 275) { OutputDivider = 16; __ADF4350_bitWrite(®isters[4], 22, 1); __ADF4350_bitWrite(®isters[4], 21, 0); __ADF4350_bitWrite(®isters[4], 20, 0); } if (RFout < 137.5) { OutputDivider = 32; __ADF4350_bitWrite(®isters[4], 22, 1); __ADF4350_bitWrite(®isters[4], 21, 0); __ADF4350_bitWrite(®isters[4], 20, 1); } if (RFout < 68.75) { OutputDivider = 64; __ADF4350_bitWrite(®isters[4], 22, 1); __ADF4350_bitWrite(®isters[4], 21, 1); __ADF4350_bitWrite(®isters[4], 20, 0); } INTA = (RFout * OutputDivider) / PFDRFout; MOD = (PFDRFout / OutputChannelSpacing); FRACF = (((RFout * OutputDivider) / PFDRFout) - INTA) * MOD; FRAC = floor(FRACF); registers[0] = 0; registers[0] = INTA << 15; // OK FRAC = FRAC << 3; registers[0] = registers[0] + FRAC; registers[1] = 0; registers[1] = MOD << 3; registers[1] = registers[1] + 1; // Adding the address "001" __ADF4350_bitSet(®isters[1], 27); // Prescaler on 8/9 __ADF4350_bitSet(®isters[2], 28); // Digital lock == "110" sur b28 b27 b26 __ADF4350_bitSet(®isters[2], 27); // digital lock __ADF4350_bitClear(®isters[2], 26); // digital lock __ADF4350_SetADF(); // Program all the registers of the ADF4351 }