444 lines
10 KiB
C
444 lines
10 KiB
C
#include <fx2.h>
|
|
#include <fx2_regs.h>
|
|
#include <fx2_syncdelay.h>
|
|
|
|
#include <lcd\lcd_7565r.h>
|
|
#include "uvna.h"
|
|
|
|
extern xdata BYTE devSerialNumber [];
|
|
extern xdata BYTE devCapabilities [];
|
|
extern xdata BYTE devIdentifier [];
|
|
|
|
extern bool fx2_i2c_read( BYTE addr, BYTE length, BYTE xdata *dat);
|
|
extern bool fx2_i2c_write( BYTE addr, BYTE length, BYTE xdata *dat);
|
|
|
|
xdata BYTE volatile vna_buffer[4];
|
|
|
|
extern void proto_main(void);
|
|
extern void proto_conf(void);
|
|
|
|
void dump(void);
|
|
|
|
// ================================================================================================
|
|
// main
|
|
// ================================================================================================
|
|
void uvna_main(void)
|
|
{
|
|
// ------------------------------------------------------------------------
|
|
// call "inherited" main()
|
|
// ------------------------------------------------------------------------
|
|
proto_main();
|
|
|
|
// ------------------------------------------------------------------------
|
|
// "uVNA" specific main()
|
|
// ------------------------------------------------------------------------
|
|
lcd_gotoxy(0,0);
|
|
lcd_puts("uVNA",4);
|
|
}
|
|
|
|
// ================================================================================================
|
|
// configure
|
|
// ================================================================================================
|
|
void uvna_conf()
|
|
{
|
|
char rc;
|
|
|
|
// ------------------------------------------------------------------------
|
|
// call "inherited" config()
|
|
// ------------------------------------------------------------------------
|
|
proto_conf();
|
|
|
|
// ------------------------------------------------------------------------
|
|
// temp serial number
|
|
// ------------------------------------------------------------------------
|
|
devSerialNumber[0] = 'U';
|
|
devSerialNumber[1] = '5';
|
|
|
|
// ------------------------------------------------------------------------
|
|
// Board specific initialization
|
|
//
|
|
// TRINITY_1:
|
|
//
|
|
// - 2 layers board
|
|
// - 56 pin mcu
|
|
// - 16 kB flash EEPROM
|
|
//
|
|
// J1 J2
|
|
// -------------------------- --------------------------
|
|
// GND - 1 2 - 5.0V SLWR - 1 2 - SLRD
|
|
// GND - 3 4 - 5.0V CLKOUT - 3 4 - GND
|
|
// PB.2 - 5 6 - PB.3 PD.5 - 5 6 - GND
|
|
// PB.1 - 7 8 - PB.0 PD.6 - 7 8 - PD.7
|
|
// SCL - 9 10 - SDA 3.3V - 9 10 - 3.3V
|
|
// PB.6 - 11 12 - PB.7 3.3V - 11 12 - 3.3V
|
|
// PB.5 - 13 14 - PB.4 PD.4 - 13 14 - GND
|
|
// FLAG.B - 15 16 - FLAG.A PD.3 - 15 16 - PD.2
|
|
// PA.2 - 17 18 - FLAG.C PD.1 - 17 18 - PD.0
|
|
// PA.1 - 19 20 - PA.0 GND - 19 20 - GND
|
|
// PA.7 - 21 22 - PA.3 GND - 21 22 - GND
|
|
// PA.4 - 23 24 - GND GND - 23 24 - GND
|
|
// PA.5 - 25 26 - PA.5 RESET - 25 26 - WU
|
|
//
|
|
//
|
|
// JTAG TOP
|
|
// ----------------
|
|
// T T G G P
|
|
// D C N N W
|
|
// I K D D R
|
|
//
|
|
// 9 7 5 3 1
|
|
// 10 8 6 4 2
|
|
//
|
|
// T T G G T
|
|
// R M N N D
|
|
// S S D D O
|
|
// T
|
|
//
|
|
// If JTAG is used, the following pins are used for JTAG interface:
|
|
// (implemented in JTAG)
|
|
//
|
|
// TCK - PA.0 out
|
|
// TMS - PA.1 out
|
|
// TDI - PA.7 out
|
|
// TDO - PA.3 in
|
|
// ena - PA.4 out
|
|
//
|
|
//
|
|
// If DOG LCD is used, the following pins are used for LCD interface.
|
|
// (implemented in PROTO)
|
|
//
|
|
// RST - PD.6 out
|
|
// CS - PD.5 out
|
|
// A0 - PD.4 out
|
|
// SCL - PD.3 out
|
|
// SI - PD.1 out
|
|
//
|
|
// uVNA specific:
|
|
//
|
|
// - I2C for programming the AD5933 (at address of 0x0D)
|
|
// - SPI for programming Xilinx CPLD clock divider
|
|
//
|
|
// SDI - PB.2
|
|
// SCK - PB.1
|
|
// SS - PB.0
|
|
// ------------------------------------------------------------------------
|
|
IOB &= 0xF8; // clear SPI bits
|
|
OEB |= 0x07; // enable SPI bits (out)
|
|
|
|
rc = fx2_i2c_read( 0x08, 4, vna_buffer);
|
|
|
|
switch(rc)
|
|
{
|
|
case I2C_BERROR:
|
|
lcd_gotoxy(0,6);
|
|
lcd_putc('B');
|
|
|
|
break;
|
|
|
|
case I2C_NACK:
|
|
lcd_gotoxy(0,6);
|
|
lcd_putc('N');
|
|
|
|
break;
|
|
}
|
|
|
|
//fx2_i2c_read( 0x10, 2, vna_buffer);
|
|
return;
|
|
|
|
// -------------------------------------------------------------------
|
|
// initialize uVNA
|
|
// -------------------------------------------------------------------
|
|
uvna_xclock(12);
|
|
|
|
lcd_gotoxy(0,6);
|
|
|
|
|
|
//
|
|
return;
|
|
|
|
|
|
|
|
// start freq
|
|
|
|
vna_buffer[0] = 0x82;
|
|
vna_buffer[1] = 0x0F;
|
|
|
|
fx2_i2c_write( 0x0D, 2, vna_buffer);
|
|
|
|
vna_buffer[0] = 0x83;
|
|
vna_buffer[1] = 0x5C;
|
|
|
|
fx2_i2c_write( 0x0D, 2, vna_buffer);
|
|
|
|
vna_buffer[0] = 0x84;
|
|
vna_buffer[1] = 0x28;
|
|
|
|
// freq increments
|
|
|
|
vna_buffer[0] = 0x85;
|
|
vna_buffer[1] = 0x00;
|
|
|
|
fx2_i2c_write( 0x0D, 2, vna_buffer);
|
|
|
|
vna_buffer[0] = 0x86;
|
|
vna_buffer[1] = 0x20;
|
|
|
|
fx2_i2c_write( 0x0D, 2, vna_buffer);
|
|
|
|
vna_buffer[0] = 0x87;
|
|
vna_buffer[1] = 0x4F;
|
|
|
|
fx2_i2c_write( 0x0D, 2, vna_buffer);
|
|
|
|
// number steps
|
|
vna_buffer[0] = 0x88;
|
|
vna_buffer[1] = 0x00;
|
|
|
|
fx2_i2c_write( 0x0D, 2, vna_buffer);
|
|
|
|
vna_buffer[0] = 0x89;
|
|
vna_buffer[1] = 99;
|
|
|
|
fx2_i2c_write( 0x0D, 2, vna_buffer);
|
|
|
|
// settling cycles
|
|
vna_buffer[0] = 0x8A;
|
|
vna_buffer[1] = 0x00;
|
|
|
|
fx2_i2c_write( 0x0D, 2, vna_buffer);
|
|
|
|
vna_buffer[0] = 0x8B;
|
|
vna_buffer[1] = 0x0A;
|
|
|
|
fx2_i2c_write( 0x0D, 2, vna_buffer);
|
|
|
|
|
|
|
|
// standby
|
|
// -----------------------------------------
|
|
vna_buffer[0] = 0x80;
|
|
vna_buffer[1] = 0xB0;
|
|
|
|
fx2_i2c_write( 0x0D, 2, vna_buffer);
|
|
|
|
vna_buffer[0] = 0x81;
|
|
vna_buffer[1] = 0x00;
|
|
|
|
fx2_i2c_write( 0x0D, 2, vna_buffer);
|
|
|
|
|
|
// ini with start freq
|
|
|
|
vna_buffer[0] = 0x80;
|
|
vna_buffer[1] = 0x10;
|
|
|
|
fx2_i2c_write( 0x0D, 2, vna_buffer);
|
|
|
|
// return;
|
|
|
|
// dump();
|
|
|
|
// start sweep
|
|
vna_buffer[0] = 0x80;
|
|
vna_buffer[1] = 0x20;
|
|
|
|
fx2_i2c_write( 0x0D, 2, vna_buffer);
|
|
|
|
|
|
vna_buffer[0] = 0xB0;
|
|
vna_buffer[1] = 0x8F;
|
|
|
|
fx2_i2c_write( 0x0D, 2, vna_buffer);
|
|
fx2_i2c_read( 0x0D, 1, vna_buffer);
|
|
|
|
while(1)
|
|
{
|
|
while( (vna_buffer[0] & 0x02) == 0)
|
|
{
|
|
vna_buffer[0] = 0xB0;
|
|
vna_buffer[1] = 0x8F;
|
|
|
|
fx2_i2c_write( 0x0D, 2, vna_buffer);
|
|
fx2_i2c_read( 0x0D, 1, vna_buffer);
|
|
|
|
// lcd_gotoxy(19,1);
|
|
// lcd_putx2(vna_buffer[0] & 0x0F | 0x80);
|
|
}
|
|
|
|
if( vna_buffer[0] & 0x04)
|
|
break;
|
|
|
|
// read values
|
|
|
|
// step sweep
|
|
|
|
vna_buffer[0] = 0x80;
|
|
vna_buffer[1] = 0x30;
|
|
|
|
fx2_i2c_write( 0x0D, 2, vna_buffer);
|
|
|
|
vna_buffer[0] = 0xB0;
|
|
vna_buffer[1] = 0x8F;
|
|
|
|
fx2_i2c_write( 0x0D, 2, vna_buffer);
|
|
fx2_i2c_read( 0x0D, 1, vna_buffer);
|
|
|
|
// lcd_gotoxy(19,2);
|
|
// lcd_putx2(vna_buffer[0] & 0x0F | 0x40);
|
|
}
|
|
|
|
|
|
|
|
|
|
dump();
|
|
|
|
|
|
|
|
|
|
return;
|
|
/*
|
|
vna_buffer[0] = 0xAA;
|
|
FX2_Delay(150); i2c_write( 0x0D, 1, vna_buffer);
|
|
FX2_Delay(150); i2c_write( 0x0D, 1, vna_buffer);
|
|
FX2_Delay(150); i2c_write( 0x0D, 1, vna_buffer);
|
|
|
|
vna_buffer[0] = 0xB0;
|
|
vna_buffer[1] = 0x80;
|
|
|
|
FX2_Delay(50); i2c_write( 0x0D, 2, vna_buffer);
|
|
|
|
FX2_Delay(50); i2c_read( 0x0D, 1, vna_buffer); lcd_putx2(vna_buffer[0]);
|
|
FX2_Delay(50); i2c_read( 0x0D, 1, vna_buffer); lcd_putx2(vna_buffer[0]);
|
|
FX2_Delay(50); i2c_read( 0x0D, 1, vna_buffer); lcd_putx2(vna_buffer[0]);
|
|
|
|
return;
|
|
|
|
vna_buffer[0] = 0x82; // adr = 0x82 (start frequency high byte)
|
|
vna_buffer[1] = 0x01; // val = 0x01 (high byte)
|
|
|
|
if (i2c_write( 0x0D, 2, vna_buffer))
|
|
lcd_putc('2');
|
|
else
|
|
lcd_putc('x');
|
|
|
|
FX2_Delay(50);
|
|
|
|
vna_buffer[0] = 0x83; // adr = 0x82 (start frequency mid byte)
|
|
vna_buffer[1] = 0x02; // val = 0x02
|
|
|
|
// i2c_write( 0x0D, 2, vna_buffer);
|
|
|
|
if (i2c_write( 0x0D, 2, vna_buffer))
|
|
lcd_putc('3');
|
|
else
|
|
lcd_putc('x');
|
|
|
|
//
|
|
vna_buffer[0] = 0xB0; // cmd: pointer command
|
|
vna_buffer[1] = 0x82; // cmd: pointer command
|
|
// i2c_write( 0x0D, 2, vna_buffer); //
|
|
|
|
if (i2c_write( 0x0D, 2, vna_buffer))
|
|
lcd_putc('4');
|
|
else
|
|
lcd_putc('x');
|
|
|
|
vna_buffer[0] = 0x01;
|
|
FX2_Delay(50); i2c_write( 0x0D, 1, vna_buffer);
|
|
FX2_Delay(50); i2c_write( 0x0D, 1, vna_buffer);
|
|
FX2_Delay(50); i2c_write( 0x0D, 1, vna_buffer);
|
|
|
|
FX2_Delay(50);
|
|
|
|
vna_buffer[0] = 0xB0; // cmd: pointer command
|
|
vna_buffer[1] = 0x82; // cmd: pointer command
|
|
if (i2c_write( 0x0D, 2, vna_buffer))
|
|
lcd_putc('5');
|
|
else
|
|
lcd_putc('x');
|
|
|
|
FX2_Delay(50);
|
|
i2c_read(0x0D, 1, vna_buffer);
|
|
|
|
|
|
|
|
lcd_gotoxy(0,7);
|
|
lcd_putx2(vna_buffer[0]);
|
|
|
|
*/
|
|
}
|
|
|
|
// ================================================================================================
|
|
// dump uvna registers
|
|
// ================================================================================================
|
|
void dump(void)
|
|
{
|
|
// command
|
|
lcd_gotoxy(0,1); lcd_puts("0x80: ",6);
|
|
|
|
vna_buffer[0] = 0xB0;
|
|
vna_buffer[1] = 0x80;
|
|
|
|
fx2_i2c_write( 0x0D, 2, vna_buffer);
|
|
|
|
fx2_i2c_read( 0x0D, 1, vna_buffer); lcd_putx2(vna_buffer[0]);
|
|
fx2_i2c_read( 0x0D, 1, vna_buffer); lcd_putx2(vna_buffer[0]);
|
|
|
|
// status
|
|
lcd_gotoxy(13,1); lcd_puts("0x8F: ",6);
|
|
|
|
vna_buffer[0] = 0xB0;
|
|
vna_buffer[1] = 0x8F;
|
|
|
|
fx2_i2c_write( 0x0D, 2, vna_buffer);
|
|
|
|
fx2_i2c_read( 0x0D, 1, vna_buffer); lcd_putx2(vna_buffer[0]);
|
|
|
|
|
|
// start freq
|
|
lcd_gotoxy(0,2); lcd_puts("0x82: ",6);
|
|
|
|
vna_buffer[0] = 0xB0;
|
|
vna_buffer[1] = 0x82;
|
|
|
|
fx2_i2c_write( 0x0D, 2, vna_buffer);
|
|
|
|
fx2_i2c_read( 0x0D, 1, vna_buffer); lcd_putx2(vna_buffer[0]);
|
|
fx2_i2c_read( 0x0D, 1, vna_buffer); lcd_putx2(vna_buffer[0]);
|
|
fx2_i2c_read( 0x0D, 1, vna_buffer); lcd_putx2(vna_buffer[0]);
|
|
|
|
// increment
|
|
lcd_gotoxy(0,3); lcd_puts("0x85: ",6);
|
|
|
|
vna_buffer[0] = 0xB0;
|
|
vna_buffer[1] = 0x85;
|
|
|
|
fx2_i2c_write( 0x0D, 2, vna_buffer);
|
|
|
|
fx2_i2c_read( 0x0D, 1, vna_buffer); lcd_putx2(vna_buffer[0]);
|
|
fx2_i2c_read( 0x0D, 1, vna_buffer); lcd_putx2(vna_buffer[0]);
|
|
fx2_i2c_read( 0x0D, 1, vna_buffer); lcd_putx2(vna_buffer[0]);
|
|
|
|
// steps
|
|
lcd_gotoxy(0,4); lcd_puts("0x88: ",6);
|
|
|
|
vna_buffer[0] = 0xB0;
|
|
vna_buffer[1] = 0x88;
|
|
|
|
fx2_i2c_write( 0x0D, 2, vna_buffer);
|
|
|
|
fx2_i2c_read( 0x0D, 1, vna_buffer); lcd_putx2(vna_buffer[0]);
|
|
fx2_i2c_read( 0x0D, 1, vna_buffer); lcd_putx2(vna_buffer[0]);
|
|
|
|
// settling
|
|
lcd_gotoxy(0,5); lcd_puts("0x8A: ",6);
|
|
|
|
vna_buffer[0] = 0xB0;
|
|
vna_buffer[1] = 0x8A;
|
|
|
|
fx2_i2c_write( 0x0D, 2, vna_buffer);
|
|
|
|
fx2_i2c_read( 0x0D, 1, vna_buffer); lcd_putx2(vna_buffer[0]);
|
|
fx2_i2c_read( 0x0D, 1, vna_buffer); lcd_putx2(vna_buffer[0]);
|
|
}
|