Files
mcu.fx2.tri/prj/tri.proto/src/uvna/uvna_conf.c
T
2026-01-03 19:05:48 +01:00

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]);
}