Mercurial > hg > fxanalyse
diff DDS4xAD9912.c @ 0:d9aae7d7f2c6
Import
author | Daniele Nicolodi <daniele.nicolodi@obspm.fr> |
---|---|
date | Tue, 03 Jul 2012 10:38:59 +0200 |
parents | |
children | 0e9f95525a8f |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/DDS4xAD9912.c Tue Jul 03 10:38:59 2012 +0200 @@ -0,0 +1,232 @@ +#include <utility.h> + +//============================================================================== +// +// Title: DDS4xAD9912.c +// Purpose: +// +// Created on: by Volodimer Laurent, modified by YLC +// Copyright: syrte. All Rights Reserved. +// +//============================================================================== + +//============================================================================== +// Include files + +#include "DDS4xAD9912.h" +#include <userint.h> +#include <tcpsupp.h> +#include <ansi_c.h> + +//============================================================================== +// Global functions + +static int OnTCPEvent(unsigned handle, int xType, int errCode, void *callbackData) + { + switch(xType) + { + case TCP_DISCONNECT : + break; + case TCP_DATAREADY : + ClientTCPRead (handle, Response, sizeof(Response), 0); + break; + } + return 0; + } + + +//============================================================================== +// DDS4xAD9912_SendCmd +// +// FUNC : envoie une chaine de caracteres sur un port du serveur TCP/IP de la foxboard +// PARAM : DDSNum contient le numero de la DDS (1,2,3 ou 4) +// PARAM : Buffer contenant la chaîne de caractères à envoyer +// RETURN : 0 si la connexion et l'ecriture sur le serveur TCP/IP sont OK +//============================================================================== + + +static int DDS4xAD9912_SendCmd(int DDSNum, char * Buffer) // essentially a private function + { + int res_1,res_2; + + switch(DDSNum) + { + case 1: + res_1=ConnectToTCPServer (&hConv, Port1, Adress, OnTCPEvent, 0, 0); + if(res_1 <0) MessagePopup("DDS4xAD9912_1 Serveur", "Connection to server failed !"); + break; + case 2: + res_1=ConnectToTCPServer (&hConv, Port2, Adress, OnTCPEvent, 0, 0); + if(res_1 <0) MessagePopup("DDS4xAD9912_2 Serveur", "Connection to server failed !"); + break; + + case 3: + res_1=ConnectToTCPServer (&hConv, Port3, Adress, OnTCPEvent, 0, 0); + if(res_1 <0) MessagePopup("DDS4xAD9912_3 Serveur", "Connection to server failed !"); + break; + + case 4: + res_1=ConnectToTCPServer (&hConv, Port4, Adress, OnTCPEvent, 0, 0); + if(res_1 <0) MessagePopup("DDS4xAD9912_4 Serveur", "Connection to server failed !"); + break; + + } + + res_2=ClientTCPWrite (hConv, Buffer, strlen(Buffer)+1, 0); + if(res_2 <0) MessagePopup("DDS Serveur", "Write to server failed !"); + DisconnectFromTCPServer (hConv); + return (res_1+res_2) ; + } + + +//============================================================================== +// DDS4xAD9912_Reset +// +// FUNC : reset des 4 DDS +// PARAM : +// RETURN : 0 si le reset de la DDS 1 , DDS 2, DDS3 et DDS4 est OK +//============================================================================== + + int DDS4xAD9912_Reset(DDS4xAD9912_Data * Instance) + { + int res_1,res_2; + + sprintf(Request,"set;%i;%i",1,17); + res_1 = DDS4xAD9912_SendCmd(1,Request) ; + if(res_1 <0) { + MessagePopup("DDS Serveur", "DDS4xAD9912_1 Reset failed !") ; + } + else Instance->Frequency1 = 0.0 ; + + sprintf(Request,"set;%i;%i",1,17); + res_2 = DDS4xAD9912_SendCmd(2,Request) ; + if(res_2 <0) { + MessagePopup("DDS Serveur", "DDS4xAD9912_2 Reset failed !") ; + } + else Instance->Frequency2 = 0.0; + + sprintf(Request,"set;%i;%i",1,17); + res_2 = DDS4xAD9912_SendCmd(3,Request) ; + if(res_2 <0) { + MessagePopup("DDS Serveur", "DDS4xAD9912_3 Reset failed !") ; + } + else Instance->Frequency3 = 0.0; + + sprintf(Request,"set;%i;%i",1,17); + res_2 = DDS4xAD9912_SendCmd(4,Request) ; + if(res_2 <0) { + MessagePopup("DDS Serveur", "DDS4xAD9912_4 Reset failed !") ; + } + else Instance->Frequency4 = 0.0; + + + return (res_1+res_2); + } + + +//============================================================================== +// DDS4xAD9912_SetFreq +// +// FUNC : sort une fréquence sur la DDS1 ,DDS2, DDS3 ou DDS4 +// PARAM : DDSNum contient le numero de la DDS (1, 2 , 3 ou 4) +// RETURN : 0 si la connexion et l'ecriture sur le serveur TCP/IP sont OK +//============================================================================== +int DDS4xAD9912_SetFrequency(DDS4xAD9912_Data * Instance, int DDSNum, double Freq) + { + + double Word=WORD(Freq,Clk) ; + double reste ; + int res_0 ; + unsigned char b5,b4,b3,b2,b1,b0 ; + + b5=(unsigned char)(Word/E40); + b4=(unsigned char)((Word - E40*b5)/E32); + b3=(unsigned char)((Word - E40*b5 - E32*b4)/E24); + b2=(unsigned char)((Word - E40*b5 - E32*b4 - E24*b3)/E16); + b1=(unsigned char)((Word - E40*b5 - E32*b4 - E24*b3 - E16*b2)/E8); + b0=(unsigned char)((Word - E40*b5 - E32*b4 - E24*b3 - E16*b2 - E8*b1)/1.0); + reste = (Word - E40*b5 -E32*b4 -E24*b3 -E16*b2 -E8*b1-1.0*b0) ; + + sprintf(Request,"set;%i;%i;%i;%i;%i;%i;%i;%i",0,10,b5,b4,b3,b2,b1,b0); + res_0 = DDS4xAD9912_SendCmd(DDSNum, Request) ; + if (res_0 <0) { + MessagePopup("DDS Serveur", "SetFrequency function failed !") ; + } + else { + if (DDSNum==1) Instance->Frequency1 = Freq - reste*Clk/E48 ; + if (DDSNum==2) Instance->Frequency2 = Freq - reste*Clk/E48 ; + if (DDSNum==3) Instance->Frequency3 = Freq - reste*Clk/E48 ; + if (DDSNum==4) Instance->Frequency4 = Freq - reste*Clk/E48 ; + } ; + + sprintf(Request,"set;%i;%i",0,18); // IO_Update logiciel + res_0 = DDS4xAD9912_SendCmd(DDSNum, Request) ; + if (res_0 <0) { + MessagePopup("DDS Serveur", "IO_Update function failed !") ; + } + return(res_0) ; + + } + + + +int DDS4xAD9912_FrequencyRampe ( DDS4xAD9912_Data * Instance, int DDSNum, double Frequin,double Frequout, double Step ) +{ + int i=0,imax=0; + double Frequactu=0; + time_t Time ; + double delaysecond=0.01; + + + if ( (Frequout - Frequin)>0) + { + if ((Frequout-Frequin) > Step) + { + imax= (Frequout-Frequin)/Step ; + for (i=0; i<imax;i++) + { + Delay(delaysecond); + Frequactu= Frequin+i*Step; + DDS4xAD9912_SetFrequency(Instance, DDSNum, Frequactu); + + } + } + } + + else + { + if ((Frequin-Frequout) > Step) + { + imax= (Frequin-Frequout)/Step ; + for (i=0; i<imax;i++) + { + Delay(delaysecond); + Frequactu= Frequin-i*Step; + DDS4xAD9912_SetFrequency(Instance, DDSNum, Frequactu); + } + } + + } + + DDS4xAD9912_SetFrequency(Instance, DDSNum, Frequout); + return(0); + +} + +/*Word=WORD(Frequactu,Clk); + b5=(unsigned char)(Word/E48); + b4=(unsigned char)((Word - E48*b5)/E32); + b3=(unsigned char)((Word - E48*b5 -E32*b4)/E24); + b2=(unsigned char)((Word - E48*b5 -E32*b4 -E24*b3)/E16); + b1=(unsigned char)((Word - E48*b5 -E32*b4 -E24*b3 -E16*b2)/E8); + b0=(unsigned char)((Word - E48*b5 -E32*b4 -E24*b3 -E16*b2 -E8*b1)/1.0); + reste = (Word - E48*b5 -E32*b4 -E24*b3 -E16*b2 -E8*b1-1.0*b0) ; + sprintf(Request,"set;%i;%i;%i;%i;%i;%i;%i;%i",0,10,b5,b4,b3,b2,b1,b0); + res_0 = DDS4xAD9912_SendCmd(DDSNum, Request) ; + if (DDSNum==1) Instance->Frequency1 = Frequactu - reste*Clk/E48 ; + if (DDSNum==2) Instance->Frequency2 = Frequactu - reste*Clk/E48 ; + if (DDSNum==3) Instance->Frequency3 = Frequactu - reste*Clk/E48 ; + if (DDSNum==4) Instance->Frequency4 = Frequactu - reste*Clk/E48 ; + sprintf(Request,"set;%i;%i",0,18); + res_0 = DDS4xAD9912_SendCmd(DDSNum, Request) ; */ +