Toets structs

Dependencies:   mbed

Committer:
RobGrimmer
Date:
Fri Apr 05 12:19:37 2019 +0000
Revision:
0:9959d360b987
Vir Mertin

Who changed what in which revision?

UserRevisionLine numberNew contents of line
RobGrimmer 0:9959d360b987 1 /*
RobGrimmer 0:9959d360b987 2 Author: Jan Conradie
RobGrimmer 0:9959d360b987 3 Date: 09-04-2019
RobGrimmer 0:9959d360b987 4
RobGrimmer 0:9959d360b987 5 The following software is written specifically for the Lochtron Local Oscillator using the LMX2954 chip.
RobGrimmer 0:9959d360b987 6 The PCB in question is documented as LLO_20G_100u.
RobGrimmer 0:9959d360b987 7
RobGrimmer 0:9959d360b987 8 The following libraries are PCB specific:
RobGrimmer 0:9959d360b987 9 Attenuator library
RobGrimmer 0:9959d360b987 10 AM2005_ATTEN.h
RobGrimmer 0:9959d360b987 11 AM2005_ATTEN.c
RobGrimmer 0:9959d360b987 12
RobGrimmer 0:9959d360b987 13 LED, RF switches and power line control library
RobGrimmer 0:9959d360b987 14 DIGITAL_CTRL.h
RobGrimmer 0:9959d360b987 15 DIGITAL_CTRL.c
RobGrimmer 0:9959d360b987 16
RobGrimmer 0:9959d360b987 17 The following libraries are meant to be portable to other projects:
RobGrimmer 0:9959d360b987 18 Synthesiser library
RobGrimmer 0:9959d360b987 19 LMX2594_PLL.h
RobGrimmer 0:9959d360b987 20 LMX2594_PLL.c
RobGrimmer 0:9959d360b987 21
RobGrimmer 0:9959d360b987 22 EEPROM library
RobGrimmer 0:9959d360b987 23 25LC1024_EEP.h
RobGrimmer 0:9959d360b987 24 25LC1024_EEP.c
RobGrimmer 0:9959d360b987 25
RobGrimmer 0:9959d360b987 26 */
RobGrimmer 0:9959d360b987 27
RobGrimmer 0:9959d360b987 28 //Include libraries
RobGrimmer 0:9959d360b987 29 #include "mbed.h"
RobGrimmer 0:9959d360b987 30 #include "main.h"
RobGrimmer 0:9959d360b987 31 #include "math.h"
RobGrimmer 0:9959d360b987 32 #include "stdlib.h"
RobGrimmer 0:9959d360b987 33 #include "LMX2594_PLL.h"
RobGrimmer 0:9959d360b987 34 //#include "AM2005_ATTEN.h"
RobGrimmer 0:9959d360b987 35 //#include "DIGITAL_CTRL.h"
RobGrimmer 0:9959d360b987 36
RobGrimmer 0:9959d360b987 37
RobGrimmer 0:9959d360b987 38 //#include "25LC1024_EEP.h"
RobGrimmer 0:9959d360b987 39
RobGrimmer 0:9959d360b987 40 //Initialise serial port.
RobGrimmer 0:9959d360b987 41 Serial sbus(MBED_SBUS_TX,MBED_SBUS_RX); //SBUS conneciton
RobGrimmer 0:9959d360b987 42 Serial USB(USBTX , USBRX); // USB to serial connection from the PC to the Mbed
RobGrimmer 0:9959d360b987 43 //Serial uart(MBED_REG_TX,MBED_SBUS_RX); //Regular UART
RobGrimmer 0:9959d360b987 44
RobGrimmer 0:9959d360b987 45
RobGrimmer 0:9959d360b987 46 //Initialise IOs:
RobGrimmer 0:9959d360b987 47
RobGrimmer 0:9959d360b987 48 //Digital Out
RobGrimmer 0:9959d360b987 49 DigitalOut DOUBLER_EN(MBED_DD_EN);
RobGrimmer 0:9959d360b987 50 DigitalOut OSC_EN(MBED_OSC_EN);
RobGrimmer 0:9959d360b987 51 DigitalOut AMP1_EN(MBED_AMP1_EN);
RobGrimmer 0:9959d360b987 52 DigitalOut AMP2_EN(MBED_AMP2_EN);
RobGrimmer 0:9959d360b987 53
RobGrimmer 0:9959d360b987 54 DigitalOut ATT_PIN_A(MBED_ATT_A);
RobGrimmer 0:9959d360b987 55 DigitalOut ATT_PIN_B(MBED_ATT_B);
RobGrimmer 0:9959d360b987 56 DigitalOut ATT_PIN_C(MBED_ATT_C);
RobGrimmer 0:9959d360b987 57 DigitalOut ATT_PIN_D(MBED_ATT_D);
RobGrimmer 0:9959d360b987 58 DigitalOut ATT_PIN_E(MBED_ATT_E);
RobGrimmer 0:9959d360b987 59
RobGrimmer 0:9959d360b987 60 DigitalOut LED_PCB(MBED_LED1);
RobGrimmer 0:9959d360b987 61 DigitalOut LED_STATUS_GREEN(MBED_LED2);
RobGrimmer 0:9959d360b987 62 DigitalOut LED_STATUS_RED(MBED_LED3);
RobGrimmer 0:9959d360b987 63
RobGrimmer 0:9959d360b987 64 DigitalOut SW1(MBED_SW1);
RobGrimmer 0:9959d360b987 65 DigitalOut MSW1(MBED_MSW1);
RobGrimmer 0:9959d360b987 66 DigitalOut MSW2(MBED_MSW2);
RobGrimmer 0:9959d360b987 67
RobGrimmer 0:9959d360b987 68 //LMX Debug IO (Digital Inputs)
RobGrimmer 0:9959d360b987 69 DigitalIn RDIR_LMX(MBED_RDIR_SYNTH);
RobGrimmer 0:9959d360b987 70 DigitalIn RCLK_LMX(MBED_RCLK_SYNTH);
RobGrimmer 0:9959d360b987 71
RobGrimmer 0:9959d360b987 72 //Analogue Inputs
RobGrimmer 0:9959d360b987 73 AnalogIn ADC_TEMP_LMX(MBED_TEMP_LMX);
RobGrimmer 0:9959d360b987 74 AnalogIn ADC_PEAK_DET(MBED_PEAK_DET_IN);
RobGrimmer 0:9959d360b987 75
RobGrimmer 0:9959d360b987 76 //DAC Output
RobGrimmer 0:9959d360b987 77 AnalogOut DAC_OSC(MBED_DAC);
RobGrimmer 0:9959d360b987 78
RobGrimmer 0:9959d360b987 79 //SPI PIN initialise for LMX2594
RobGrimmer 0:9959d360b987 80 DigitalOut CS_LMX(MBED_CSB_LMX);
RobGrimmer 0:9959d360b987 81 DigitalOut CLK_LMX(MBED_CLK_LMX);
RobGrimmer 0:9959d360b987 82 DigitalOut MOSI_LMX(MBED_MOSI_LMX);
RobGrimmer 0:9959d360b987 83 DigitalIn MUX_LMX(MBED_MUX_SYNTH); //MISO
RobGrimmer 0:9959d360b987 84
RobGrimmer 0:9959d360b987 85
RobGrimmer 0:9959d360b987 86
RobGrimmer 0:9959d360b987 87 int main()
RobGrimmer 0:9959d360b987 88 {
RobGrimmer 0:9959d360b987 89
RobGrimmer 0:9959d360b987 90 // Variables
RobGrimmer 0:9959d360b987 91
RobGrimmer 0:9959d360b987 92 //unsigned short PLL_REG[113] = {0}; //Create main SPI register
RobGrimmer 0:9959d360b987 93
RobGrimmer 0:9959d360b987 94 //Setup serial ports
RobGrimmer 0:9959d360b987 95 USB.baud(115200);
RobGrimmer 0:9959d360b987 96 sbus.baud(115200);
RobGrimmer 0:9959d360b987 97 //uart.baud(115200);
RobGrimmer 0:9959d360b987 98
RobGrimmer 0:9959d360b987 99 // Wait for board startup
RobGrimmer 0:9959d360b987 100 wait(1);
RobGrimmer 0:9959d360b987 101 LMX2594_Load_Defaults(LM2594_PLL_reg); //Load LMX2594 default register values
RobGrimmer 0:9959d360b987 102
RobGrimmer 0:9959d360b987 103 Startup_Splash();
RobGrimmer 0:9959d360b987 104
RobGrimmer 0:9959d360b987 105 //Device ready to use
RobGrimmer 0:9959d360b987 106 while(1)
RobGrimmer 0:9959d360b987 107 {
RobGrimmer 0:9959d360b987 108 //Set_FrequencyA(7000.10); //Euraka when possible
RobGrimmer 0:9959d360b987 109
RobGrimmer 0:9959d360b987 110 }
RobGrimmer 0:9959d360b987 111
RobGrimmer 0:9959d360b987 112 }
RobGrimmer 0:9959d360b987 113
RobGrimmer 0:9959d360b987 114 void Startup_Splash(void)
RobGrimmer 0:9959d360b987 115 {
RobGrimmer 0:9959d360b987 116 if(DEBUG)
RobGrimmer 0:9959d360b987 117 {
RobGrimmer 0:9959d360b987 118 USB.printf("LLO_20G_100u Starting up\r\n");
RobGrimmer 0:9959d360b987 119 USB.printf("Software version 1.0\r\n");
RobGrimmer 0:9959d360b987 120 }
RobGrimmer 0:9959d360b987 121
RobGrimmer 0:9959d360b987 122 }
RobGrimmer 0:9959d360b987 123
RobGrimmer 0:9959d360b987 124 void LMX2594_Spi_Write(char address, unsigned short data)
RobGrimmer 0:9959d360b987 125 {
RobGrimmer 0:9959d360b987 126 CS_LMX.write(0);
RobGrimmer 0:9959d360b987 127 wait_us(SPI_CLK_SPEED); //delay is determined by slave device
RobGrimmer 0:9959d360b987 128 MOSI_LMX.write(0); //Set R/W bit to 0 for write
RobGrimmer 0:9959d360b987 129 CLK_LMX.write(0);
RobGrimmer 0:9959d360b987 130
RobGrimmer 0:9959d360b987 131 wait_us(SPI_CLK_SPEED); //delay is determined by slave device
RobGrimmer 0:9959d360b987 132 CLK_LMX.write(1); //Complete first bit transmission
RobGrimmer 0:9959d360b987 133 wait_us(SPI_CLK_SPEED); //delay is determined by slave device
RobGrimmer 0:9959d360b987 134
RobGrimmer 0:9959d360b987 135 char address_length = 7; // Adapt data type to be the correct bit length
RobGrimmer 0:9959d360b987 136 unsigned short data_length = 16;
RobGrimmer 0:9959d360b987 137
RobGrimmer 0:9959d360b987 138 for(int l = address_length-1; l >= 0; l--) //Start at the second MSB
RobGrimmer 0:9959d360b987 139 {
RobGrimmer 0:9959d360b987 140 CLK_LMX.write(0);
RobGrimmer 0:9959d360b987 141 MOSI_LMX = (address>> l) & 0x01; //Shift bits through from MSB
RobGrimmer 0:9959d360b987 142 wait_us(SPI_CLK_SPEED); //delay is determined by slave device
RobGrimmer 0:9959d360b987 143 CLK_LMX.write(1);
RobGrimmer 0:9959d360b987 144 wait_us(SPI_CLK_SPEED); //delay is determined by slave device
RobGrimmer 0:9959d360b987 145 }
RobGrimmer 0:9959d360b987 146
RobGrimmer 0:9959d360b987 147 for(int l = data_length-1; l >= 0; l--)
RobGrimmer 0:9959d360b987 148 {
RobGrimmer 0:9959d360b987 149 CLK_LMX.write(0);
RobGrimmer 0:9959d360b987 150 MOSI_LMX = (data>> l) & 0x01; //Shift bits through from MSB
RobGrimmer 0:9959d360b987 151 wait_us(SPI_CLK_SPEED); //delay is determined by slave device
RobGrimmer 0:9959d360b987 152 CLK_LMX.write(1);
RobGrimmer 0:9959d360b987 153 wait_us(SPI_CLK_SPEED); //delay is determined by slave device
RobGrimmer 0:9959d360b987 154 }
RobGrimmer 0:9959d360b987 155 wait_us(SPI_CLK_SPEED); //delay is determined by slave device
RobGrimmer 0:9959d360b987 156 CS_LMX.write(1); //End transaction
RobGrimmer 0:9959d360b987 157 }
RobGrimmer 0:9959d360b987 158
RobGrimmer 0:9959d360b987 159
RobGrimmer 0:9959d360b987 160 int LMX2594_Spi_Read(char address)
RobGrimmer 0:9959d360b987 161 {
RobGrimmer 0:9959d360b987 162 CS_LMX.write(0);
RobGrimmer 0:9959d360b987 163 wait_us(SPI_CLK_SPEED); //delay is determined by slave device
RobGrimmer 0:9959d360b987 164
RobGrimmer 0:9959d360b987 165 MOSI_LMX.write(1); //Set R/W bit to 1 for read.
RobGrimmer 0:9959d360b987 166 CLK_LMX.write(0);
RobGrimmer 0:9959d360b987 167
RobGrimmer 0:9959d360b987 168 wait_us(SPI_CLK_SPEED); //delay is determined by slave device
RobGrimmer 0:9959d360b987 169 CLK_LMX.write(1); //Complete first bit transmission
RobGrimmer 0:9959d360b987 170 wait_us(SPI_CLK_SPEED); //delay is determined by slave device
RobGrimmer 0:9959d360b987 171 char address_length = 7; // Adapt data type to be the correct bit length
RobGrimmer 0:9959d360b987 172 unsigned short data_length = 16;
RobGrimmer 0:9959d360b987 173 int spi_data_value = 0; // Adapt data type to be the correct bit length
RobGrimmer 0:9959d360b987 174
RobGrimmer 0:9959d360b987 175
RobGrimmer 0:9959d360b987 176 for(int l = address_length-1; l >= 0; l--) //Start at the second MSB
RobGrimmer 0:9959d360b987 177 {
RobGrimmer 0:9959d360b987 178 CLK_LMX.write(0);
RobGrimmer 0:9959d360b987 179 MOSI_LMX = (address>> l) & 0x01; //Shift bits through from MSB
RobGrimmer 0:9959d360b987 180 wait_us(SPI_CLK_SPEED); //delay is determined by slave device
RobGrimmer 0:9959d360b987 181 CLK_LMX.write(1);
RobGrimmer 0:9959d360b987 182 wait_us(SPI_CLK_SPEED); //delay is determined by slave device
RobGrimmer 0:9959d360b987 183 }
RobGrimmer 0:9959d360b987 184
RobGrimmer 0:9959d360b987 185 for(int l = data_length-1; l >= 0; l--)
RobGrimmer 0:9959d360b987 186 {
RobGrimmer 0:9959d360b987 187 CLK_LMX.write(0);
RobGrimmer 0:9959d360b987 188 wait_us(SPI_CLK_SPEED); //delay is determined by slave device
RobGrimmer 0:9959d360b987 189 spi_data_value = spi_data_value + (MUX_LMX.read() << l);
RobGrimmer 0:9959d360b987 190 CLK_LMX.write(1);
RobGrimmer 0:9959d360b987 191 wait_us(SPI_CLK_SPEED); //delay is determined by slave device
RobGrimmer 0:9959d360b987 192 }
RobGrimmer 0:9959d360b987 193
RobGrimmer 0:9959d360b987 194 CS_LMX.write(1); //End transaction
RobGrimmer 0:9959d360b987 195 wait_us(SPI_CLK_SPEED); //delay is determined by slave device
RobGrimmer 0:9959d360b987 196
RobGrimmer 0:9959d360b987 197 return spi_data_value;
RobGrimmer 0:9959d360b987 198 }
RobGrimmer 0:9959d360b987 199
RobGrimmer 0:9959d360b987 200 void LMX2594_Read_All_Registers(void)
RobGrimmer 0:9959d360b987 201 {
RobGrimmer 0:9959d360b987 202 //Ensure that LMX2594 MUX pin is in read mode
RobGrimmer 0:9959d360b987 203 char spi_address = 0x00;
RobGrimmer 0:9959d360b987 204 unsigned short spi_data = 0x2518;
RobGrimmer 0:9959d360b987 205 LMX2594_Spi_Write(spi_address, spi_data);
RobGrimmer 0:9959d360b987 206
RobGrimmer 0:9959d360b987 207 char read_address = 0x70; //112
RobGrimmer 0:9959d360b987 208 //Read all registers
RobGrimmer 0:9959d360b987 209 for(int c=112; c>=0; c--)
RobGrimmer 0:9959d360b987 210 {
RobGrimmer 0:9959d360b987 211 USB.printf("Register[%d] = %x\r\n",c,LMX2594_Spi_Read(read_address));
RobGrimmer 0:9959d360b987 212 read_address--;
RobGrimmer 0:9959d360b987 213 }
RobGrimmer 0:9959d360b987 214 }