Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of LGstaandart by
host/Source/App/Command.c
- Committer:
- Kovalev_D
- Date:
- 2016-02-03
- Revision:
- 23:12e6183f04d4
File content as of revision 23:12e6183f04d4:
#include "stdlib.h"
#include "lpc17xx.h"
#include "Command.h"
#include "el_lin.h"
#include "vibro.h"
#include "Global.h"
#include "uart_m.h"
#include "CntrlGLD.h"
#include "QEI.h"
#include "InputOutput.h"
#include "SPI.h"
unsigned int Rate_Flag;
unsigned int PC_Comand;
unsigned int n;
unsigned int CountBuFFIn;
unsigned int ParamIn;
unsigned int Err;
unsigned int N=0,CRC_N;
unsigned int Param1=0;
unsigned int Param2=0;
unsigned int Param3=0;
unsigned int Param4=0;
/*
void exec_CMD(void) //r. === ïðîöåäóðà îêîí÷àòåëüíîé äåøèôðàöèè è èñïîëíåíèÿ êîìàíäû
{
unsigned int Comand_code;
//rx_buf_copy = 1; //r. ïðåäóñòàíîâ ôëàãà êîïèðîâàíèÿ ïðèåìíîãî áóôåðà
Comand_code = (rcv_buf[2] & 0xFF) << 8;
PC_Comand = Comand_code | (rcv_buf[3] & 0xFF); //e. save it in the memory for echo-transmission //r. ñîõðàíèòü åãî â ïàìÿòè äëÿ îáðàòíîé ïåðåäà÷è
}*/
void CMD_Maintenance(void)
{
BuffTemp[0] = Main.SOC_Out;
BuffTemp[1] = Main.My_Addres;
BuffTemp[2] = Main.Firmware_Version;
BuffTemp[3] = Main.GLD_Serial;
BuffTemp[4]=0x00;
BuffTemp[5]=0x00;
Check(BuffTemp, 8);
WriteConN (BuffTemp,8);
}
void CMD_Rate(void)
{
unsigned int T_VibH , T_VibL; // ×àñòîòà âèáðîïðèâîäà.
unsigned int Cnt_PlsL , Cnt_PlsH; // Ñ÷åò÷èê +.
unsigned int Cnt_MnsL , Cnt_MnsH; // Ñ÷åò÷èê -.
unsigned int Cnt_DifL , Cnt_DifH; // Ðàçíîñòü ñ÷åò÷èêîâ.
unsigned int F_rasL , F_rasH; // ×àñòîòà ðàñùåïëåíèÿ.
unsigned int HF_regL , HF_regH; // Âûõîä ðåãóëÿòîðà ÃÂ×. ÍÅ ÑÄÅËÀÍÎ
unsigned int HF_difL , HF_difH; // Ñèãíàë îøèáêè ðåãóëÿ÷òîðà ÃÂ×. ÍÅ ÑÄÅËÀÍÎ
unsigned int WP_regL , WP_regH;
unsigned int ADC1L, ADC2L, ADC3L, ADC4L, ADC5L;
unsigned int ADC1H, ADC2H, ADC3H, ADC4H, ADC5H;
LoopOn
// Main.T_Vib=(unsigned int)((7680000*16/Main.Frq)*4096);
Main.T_Vib=(unsigned int)((7680000*16/(Main.Frq>>12)));
Main.Firmware_Version=0xff; /// ïðîìåæóòî÷íàÿ çàòû÷êà
T_VibH = ( Main.T_Vib>>8 ) TakeByte;
T_VibL = ( Main.T_Vib ) TakeByte;
Cnt_PlsH = ( Main.Cnt_Pls>>8) TakeByte;
Cnt_PlsL = ( Main.Cnt_Pls ) TakeByte;
Cnt_MnsH = ( Main.Cnt_Mns>>8) TakeByte;
Cnt_MnsL = ( Main.Cnt_Mns ) TakeByte;
Cnt_DifH = ( Main.Cnt_Dif>>8) TakeByte;
Cnt_DifL = ( Main.Cnt_Dif ) TakeByte;
F_rasH = ( Main.F_ras>>8 ) TakeByte;
F_rasL = ( Main.F_ras ) TakeByte;
ADC1H = ( Spi.ADC1>>8 ) TakeByte;
ADC1L = ( Spi.ADC1 ) TakeByte;
ADC2H = ( Spi.ADC2>>8 ) TakeByte;
ADC2L = ( Spi.ADC2 ) TakeByte;
ADC3H = ( Spi.ADC3>>8 ) TakeByte;
ADC3L = ( Spi.ADC3 ) TakeByte;
ADC4H = ( Spi.ADC4>>8 ) TakeByte;
ADC4L = ( Spi.ADC4 ) TakeByte;
ADC5H = ( Spi.ADC5>>8 ) TakeByte;
ADC5L = ( Spi.ADC5 ) TakeByte;
WP_regH = ( Spi.DAC_B>>8 ) TakeByte;
WP_regL = ( Spi.DAC_B ) TakeByte;
HF_regH=0xff;
HF_regL=0xff;
HF_difH=0xff;
HF_difL=0xff;
BuffTemp[ 0] = Main.SOC_Out;
BuffTemp[ 1] = Main.My_Addres;
BuffTemp[ 2] = Cnt_PlsH;//ñòàðøèé áàéò ñ÷åò÷èêà +.
BuffTemp[ 3] = Cnt_PlsL;//ìëàäøèé áàéò ñ÷åò÷èêà +.
BuffTemp[ 4] = Cnt_MnsH;//ñòàðøèé áàéò ñ÷åò÷èêà -.
BuffTemp[ 5] = Cnt_MnsL;//ìëàäøèé áàéò ñ÷åò÷èêà -.
BuffTemp[ 6] = Cnt_DifH;//ñòàðøèé áàéò ðàçíîñòè ñ÷åò÷èêîâ
BuffTemp[ 7] = Cnt_DifL;//ìëàäøèé áàéò ðàçíîñòè ñ÷åò÷èêîâ
BuffTemp[ 8] = F_rasH;
BuffTemp[ 9] = F_rasL;
BuffTemp[10] = HF_regH;
BuffTemp[11] = HF_regL;
BuffTemp[12] = HF_difH;
BuffTemp[13] = HF_difL;
BuffTemp[14] = T_VibH ;//
BuffTemp[15] = T_VibL; //?
BuffTemp[16] = Main.Firmware_Version;//ÕÇ
BuffTemp[17] = Main.Firmware_Version;//ÕÇ
BuffTemp[18] = T_VibH>>1;
BuffTemp[19] = T_VibL;
BuffTemp[20] = Main.Firmware_Version;//ÕÇ
BuffTemp[21] = Main.Firmware_Version;//ÕÇ
BuffTemp[22] = WP_regH; //ÑÐÏ Spi.DAC_B
BuffTemp[23] = WP_regL; //ÑÐÏ
BuffTemp[24] = Main.Firmware_Version;// ÕÇ
BuffTemp[25] = Main.Firmware_Version;// ÕÇ
BuffTemp[26] = ADC1H;
BuffTemp[27] = ADC1L;
BuffTemp[28] = ADC1H;
BuffTemp[29] = ADC1L;
BuffTemp[30] = ADC1H;
BuffTemp[31] = ADC1L;
BuffTemp[32] = ADC1H;
BuffTemp[33] = ADC1L;
BuffTemp[34] = ADC1H;
BuffTemp[35] = ADC1L;
BuffTemp[36] = 0x00;//ADC6
BuffTemp[37] = 0x00;//ADC6
BuffTemp[38] = Main.Firmware_Version;
BuffTemp[39] = Main.Firmware_Version;
BuffTemp[40] = Main.Firmware_Version;
BuffTemp[41] = Main.Firmware_Version;
Check(BuffTemp, 44);
WriteConN (BuffTemp,44);
LoopOff
}
void CMD_M_Control_D8()///óñòàíîâêà\ñáðîñ ðåãèñòðîâ óïðàâëåíèÿ
{
int bit,NReg;
BuffTemp[0] = Main.SOC_Out; //DD
BuffTemp[1] = Main.My_Addres; //00
BuffTemp[2] = Main.CMD_In; //D8
//10?
if((Param1&0x80))
{
bit=1;
}
else
{
bit=0;
}
if ((Param1 & 0x10) == 0)
{
NReg=0;
switch(Param1&0xf) // Main.RgConA
{
case 0x0:
Main.RgConA|=bit;
break;
case 0x1:
Main.RgConA|=bit<<0x1;
break;
case 0x2:
Main.RgConA|=bit<<0x2;
break;
case 0x3:
Main.RgConA|=bit<<0x3;
break;
case 0x4:
Main.RgConA|=bit<<0x4;
break;
case 0x5:
Main.RgConA|=bit<<0x5;
break;
case 0x6:
Main.RgConA|=bit<<0x6;
break;
case 0x7:
Main.RgConA|=bit<<0x7;
break;
}
BuffTemp[3] = NReg<<4;
BuffTemp[4] = (Main.RgConA>>8 )& 0xff;
BuffTemp[5] = Main.RgConA & 0xff;
}
else
{
NReg=1; // Main.RgConB
switch(Param1&0xf) // Main.RgConB
{
case 0x0:
Main.RgConB|=bit;
break;
case 0x1:
Main.RgConB|=bit<1;
break;
case 0x2:
Main.RgConB|=bit<2;
break;
}
BuffTemp[3] = NReg<<4;
BuffTemp[4] = (Main.RgConB>>8 ) & 0xff;
BuffTemp[5] = Main.RgConB & 0xff;
}
Check(BuffTemp, CRC_N);
WriteConN (BuffTemp,CRC_N);
}
void CMD_M_Control_D9()///÷òåíèå ðåãèñòðîâ óïðàâëåíèÿ
{
int bit,NReg;
BuffTemp[0] = Main.SOC_Out; //DD
BuffTemp[1] = Main.My_Addres; //00
BuffTemp[2] = Main.CMD_In; //D9
if ((Param1 & 0x10) == 0)
{
BuffTemp[3]=0<<4;
BuffTemp[4] = (Main.RgConA>>8 )& 0xff;
BuffTemp[5] = Main.RgConA & 0xff;
}
else
{
BuffTemp[3]=1<<4;
BuffTemp[4] = (Main.RgConB>>8 ) & 0xff;
BuffTemp[5] = Main.RgConB & 0xff;
}
Check(BuffTemp, CRC_N);
WriteConN (BuffTemp,CRC_N);
}
// (íîìåð (êîä) ÖÀÏà 0...3, ñòàðøèé áàéò òðåáóåìîãî ÖÀÏà, ìëàäøèé áàéò òðåá ÖÀÏà)
void CMD_M_Stymul()
{
int temp;
temp =((BuffTemp[4]<<8) | BuffTemp[5]);
// temp=0;
temp=temp&0xFFFF;
DACF =(temp*K_DAC)+deltaDAC;
Spi.DAC_B =(unsigned int)(DACF) /*(unsigned int)(temp*K_DAC+deltaDAC)*/; // K_DAC);
//int temp;
// temp =((BuffTemp[4]<<8) | BuffTemp[5]);
//temp = 65535 - temp;
/*if(temp<1000)
{
temp=0;
}
else if(temp>60000)
{
temp=65535;
}*/
//Spi.DAC_B =(((BuffTemp[4]<<8) | BuffTemp[5])*K_DAC+deltaDAC);/*((BuffTemp[4]<<8) | BuffTemp[5])-0xFFFF*///; //((rcv_buf[4] << 8) | (int)rcv_buf[5]);K_DAC+deltaDAC
//BuffTemp[0] = temp; //DD
//WriteConN (BuffTemp,1);
}
unsigned int Check(char *c, unsigned int Count)
{
int i=1;
unsigned int temp,CRC;
temp=1;
CRC=0;
for(;i<Count-2;i++)
{
CRC+=c[i];
}
if(c[Count-2]!=((CRC>>8)&0xFF))
{
temp=0;
Main.RsErrLine = (Main.RsErrLine)&=0x2;
}
if(c[Count-1]!=((CRC>>0)&0xFF))
{
temp=0;
// Main.RsErrLine= (Main.RsErrLine)=0x2;
}
c[Count-2]=(CRC>>8)&0xFF;
c[Count-1]=(CRC>>0)&0xFF;
return temp;
}
int Getlengf(void)
{
unsigned int lengf=0;
switch(Main.CMD_In)
{
case 0x99://maintainance
lengf=6;
CRC_N=8;
break;
case 0x0A: //m_stymul
lengf=8;
break;
case 0xA5://DeviceMode
lengf=6;
CRC_N=8;
break;
case 0xDD://m_rate
lengf=6;
CRC_N=44;
break;
case 0xB0://DeviceMode
lengf=6;
CRC_N=8;
break;
case 0xD8://m_control
lengf=6;
CRC_N=8;
break;
case 0xD9://m_control
lengf=6;
CRC_N=8;
break;
}
return lengf;
}
void Read_CMD(void)
{
Main.SOC_Out=0xDD;
Main.RsErrLine = (Main.RsErrLine)& 0xffff;
CountBuFFIn=ReadChekCon(BuffTemp);
if(CountBuFFIn==1)
{
if (BuffTemp[0] != SOC_In)
{
ReadCon(BuffTemp);
Main.RsErrLine += 0x100;//WriteCon("\n\r ...Error.... ");
BuffTemp[99]=Main.RsErrLine;
}
}
else if(CountBuFFIn==2)
{
if (BuffTemp[1] != Main.My_Addres)
{
ReadCon(BuffTemp);
Main.RsErrLine += 0x1;//WriteCon("\n\r ...Error_ADDRES.... ");
}
}
else if(CountBuFFIn==3)
{
Main.CMD_In=BuffTemp[2];
N=Getlengf();
}
else if(CountBuFFIn==4 && N==6)
{
Param1=BuffTemp[3];
}
else if((CountBuFFIn==5)&&(N==7))
{
//LoopOn
Param1=BuffTemp[3];
Param2=BuffTemp[4];
}
else if((CountBuFFIn==6)&&(N==8))
{
Param1=BuffTemp[3];
Param2=BuffTemp[4];
Param3=BuffTemp[5];
}
else if(CountBuFFIn > (N-1))
{
ReadCon(BuffTemp);
if(Check(BuffTemp, CountBuFFIn))
{
switch(Main.CMD_In)
{
case CMD_MAINT:
CMD_Maintenance();
break;
case 0xD8:
CMD_M_Control_D8();
case 0xD9:
CMD_M_Control_D9();
break;
case 0x0A:
CMD_M_Stymul(Param1,Param2,Param3);
break;
case 0xDD:
Rate_Flag=1;
break;
Main.RsErrLine = 0;
}
}
}
}
