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 LG by
Revision 124:9ae09249f842, committed 2016-04-08
- Comitter:
- Kovalev_D
- Date:
- Fri Apr 08 14:20:35 2016 +0000
- Parent:
- 123:6dd1df6230e9
- Child:
- 125:9400e64d0636
- Commit message:
- Delta500Hz Delta_ext
Changed in this revision
--- a/Command.c Thu Apr 07 20:16:24 2016 +0000
+++ b/Command.c Fri Apr 08 14:20:35 2016 +0000
@@ -11,6 +11,7 @@
unsigned int Param4=0;
unsigned int Consol=123;
unsigned int TempParam=1;
+unsigned int CountParam=0;
/*
void exec_CMD(void) //r. === процедура окончательной дешифрации и исполнения команды
{
@@ -25,34 +26,341 @@
{
BuffTemp[0] = Gyro.SOC_Out;
- BuffTemp[1] = Gyro .My_Addres;
- BuffTemp[2] = Gyro .Firmware_Version;
- BuffTemp[3] = Gyro .GLD_Serial;
+ BuffTemp[1] = Gyro.My_Addres;
+ BuffTemp[2] = Gyro.Firmware_Version;
+ BuffTemp[3] = Gyro.GLD_Serial;
BuffTemp[4]=0x00;
BuffTemp[5]=0x00;
Check(BuffTemp, 8);
WriteConN (BuffTemp,8);
}
-void CMD_Rate3(void)
-{
+void CMD_Delta_500Hz(void)
+{
+ Gyro.Delta500_Event=0;
unsigned int Temp;
- BuffTemp[ 0] = Gyro.SOC_Out;
+ BuffTemp[ 0] = Gyro.SOC_Out;
BuffTemp[ 1] = Gyro.My_Addres;
+
+ Temp = Gyro.CuruAngle;
+ Gyro.CuruAngle = 0;
+
+ BuffTemp[ 2] =(Temp >> 8) & 0xff;//старший байт разности счетчиков
+ BuffTemp[ 3] =(Temp >> 0) & 0xff;//младший байт разности счетчиков
+
+ BuffTemp[ 4] = CountParam;
+ switch(CountParam) {
+
+
+
+ //F_ras
+ case 0:
+ Temp = Gyro.F_ras;
+ BuffTemp[5] = (Temp >> 8) & 0xff;
+ break;
+
+ case 1:
+ BuffTemp[5] = (Temp >> 0) & 0xff;
+ break;
+
+
+
+ //HFO
+ case 2:
+ Temp = 0;//HFO
+ BuffTemp[5] = (Temp >> 8) & 0xff;
+ break;
+
+ case 3:
+ Temp = 0;//HFO
+ BuffTemp[5] = (Temp >> 0) & 0xff;
+ break;
+
+
+
+ //T_Vibro
+ case 4:
+ Temp = (unsigned int)((7680000*16/(Gyro.Frq>>12)));
+ BuffTemp[5] = (Temp >> 8) & 0xff;
+ break;
+
+ case 5:
+ BuffTemp[5] = (Temp >> 0) & 0xff;
+ break;
+
+
+
+ //L_Vibro
+ case 6:
+ Temp = (unsigned int)(((7680000*16/200) *Gyro.AmpPer /(Gyro.Frq>>12)));
+ BuffTemp[5] = (Temp >> 8) & 0xff;
+
+ break;
+
+ case 7:
+ BuffTemp[5] = (Temp >> 0) & 0xff;
+ break;
+
+
+
+ //Напряжение на регуляторе периметра
+ case 8:
+ Temp = Spi.DAC_B - 0x7fff;
+ BuffTemp[5] = (Temp >> 8) & 0xff;
+
+ break;
+
+ case 9:
+ BuffTemp[5] = (Temp >> 0) & 0xff;
+ break;
+
+
+
+ //темпкратурный канал 0
+ case 10:
+ Temp = 100;
+ BuffTemp[5] = (Temp >> 8) & 0xff;
- Temp=0x00;
- BuffTemp[ 2] =(Temp >> 8) & 0xff;//
- BuffTemp[ 3] =(Temp >> 0) & 0xff;//
- Temp=0x00;
- BuffTemp[ 4] =(Temp >> 8) & 0xff;//
- BuffTemp[ 5] =(Temp >> 0) & 0xff;//
+ break;
+
+ case 11:
+ BuffTemp[5] = (Temp >> 0) & 0xff;
+ break;
+
+
+
+ //темпкратурный канал 1
+ case 12:
+ Temp = Gyro.AD_Slow >> 16;
+ BuffTemp[5] = (Temp >> 8) & 0xff;
+
+ break;
+
+ case 13:
+ BuffTemp[5] = (Temp >> 0) & 0xff;
+ break;
+
+
+
+ //ток 1
+ case 14:
+ Temp = Gyro.In1;
+ BuffTemp[5] = (Temp >> 8) & 0xff;//in1//2
+
+ break;
+
+ case 15:
+ BuffTemp[5] = (Temp >> 0) & 0xff;
+ break;
+
+
+
+ //ток 2
+ case 16:
+ Temp = Gyro.In2;
+ BuffTemp[5] = (Temp >> 8) & 0xff;
+ break;
+
+ case 17:
+ BuffTemp[5] = (Temp >> 0) & 0xff;//in2//3
+ break;
+
+
+
+ //разностный температурный канал Delta Temp
+ case 18:
+ Temp = Gyro.DeltaT;
+ BuffTemp[5] = (Temp >> 8) & 0xff;//дельта
+ break;
+
+ case 19:
+ BuffTemp[5] = (Temp >> 0) & 0xff;
+ break;
+
+
+
+ //температурный канал 5
+ case 20:
+ Temp = Gyro.Termo;//0xa4=164
+ BuffTemp[5] =(Temp >> 8) & 0xff;//температура
+
+ break;
+
+ case 21:
+ BuffTemp[5] =(Temp >> 0) & 0xff;//ADC6 sesnsor 5
+ break;
+ }
+ Check(BuffTemp, 6);
+ WriteConN (BuffTemp,6);
+ CountParam++;
+
+ if(CountParam>21)CountParam=0;//зацикливания буфера от 0 до 21
+
+}
+void CMD_Delta_Ext(void)
+{
+ unsigned int Temp;
+ BuffTemp[ 0] = Gyro.SOC_Out;
+ BuffTemp[ 1] = Gyro.My_Addres;
+
+ Temp = Gyro.CuruAngle;
+ Gyro.CuruAngle = 0;
+
+ BuffTemp[ 2] =(Temp >> 8) & 0xff;//старший байт разности счетчиков
+ BuffTemp[ 3] =(Temp >> 0) & 0xff;//младший байт разности счетчиков
+
+ BuffTemp[ 4] = CountParam;
+ switch(CountParam) {
+
+
+
+ //F_ras
+ case 0:
+ Temp = Gyro.F_ras;
+ BuffTemp[5] = (Temp >> 8) & 0xff;
+ break;
+
+ case 1:
+ BuffTemp[5] = (Temp >> 0) & 0xff;
+ break;
+
+
+
+ //HFO
+ case 2:
+ Temp = 0;//HFO
+ BuffTemp[5] = (Temp >> 8) & 0xff;
+ break;
+
+ case 3:
+ Temp = 0;//HFO
+ BuffTemp[5] = (Temp >> 0) & 0xff;
+ break;
+
+
+
+ //T_Vibro
+ case 4:
+ Temp = (unsigned int)((7680000*16/(Gyro.Frq>>12)));
+ BuffTemp[5] = (Temp >> 8) & 0xff;
+ break;
+
+ case 5:
+ BuffTemp[5] = (Temp >> 0) & 0xff;
+ break;
+
+
+
+ //L_Vibro
+ case 6:
+ Temp = (unsigned int)(((7680000*16/200) *Gyro.AmpPer /(Gyro.Frq>>12)));
+ BuffTemp[5] = (Temp >> 8) & 0xff;
- Check(BuffTemp, 44);
- WriteConN (BuffTemp,44);
+ break;
+
+ case 7:
+ BuffTemp[5] = (Temp >> 0) & 0xff;
+ break;
+
+
+
+ //Напряжение на регуляторе периметра
+ case 8:
+ Temp = Spi.DAC_B - 0x7fff;
+ BuffTemp[5] = (Temp >> 8) & 0xff;
+
+ break;
+
+ case 9:
+ BuffTemp[5] = (Temp >> 0) & 0xff;
+ break;
+
+
+
+ //темпкратурный канал 0
+ case 10:
+ Temp = 100;
+ BuffTemp[5] = (Temp >> 8) & 0xff;
+
+ break;
+
+ case 11:
+ BuffTemp[5] = (Temp >> 0) & 0xff;
+ break;
+
+
+
+ //темпкратурный канал 1
+ case 12:
+ Temp = Gyro.AD_Slow >> 16;
+ BuffTemp[5] = (Temp >> 8) & 0xff;
+
+ break;
+
+ case 13:
+ BuffTemp[5] = (Temp >> 0) & 0xff;
+ break;
+
+
+
+ //ток 1
+ case 14:
+ Temp = Gyro.In1;
+ BuffTemp[5] = (Temp >> 8) & 0xff;//in1//2
+
+ break;
+
+ case 15:
+ BuffTemp[5] = (Temp >> 0) & 0xff;
+ break;
+
+
+
+ //ток 2
+ case 16:
+ Temp = Gyro.In2;
+ BuffTemp[5] = (Temp >> 8) & 0xff;
+ break;
+
+ case 17:
+ BuffTemp[5] = (Temp >> 0) & 0xff;//in2//3
+ break;
+
+
+
+ //разностный температурный канал Delta Temp
+ case 18:
+ Temp = Gyro.DeltaT;
+ BuffTemp[5] = (Temp >> 8) & 0xff;//дельта
+ break;
+
+ case 19:
+ BuffTemp[5] = (Temp >> 0) & 0xff;
+ break;
+
+
+
+ //температурный канал 5
+ case 20:
+ Temp = Gyro.Termo;//0xa4=164
+ BuffTemp[5] =(Temp >> 8) & 0xff;//температура
+
+ break;
+
+ case 21:
+ BuffTemp[5] =(Temp >> 0) & 0xff;//ADC6 sesnsor 5
+ break;
+ }
+ Check(BuffTemp, 6);
+ WriteConN (BuffTemp,6);
+ CountParam++;
+
+ if(CountParam>21)CountParam=0;//зацикливания буфера от 0 до 21
}
+
void CMD_Rate2(void)
{
- Rate2VibFlag=0;
+ Gyro.Rate2_Event=0;
BuffTemp[ 0] = Gyro.SOC_Out;
BuffTemp[ 1] = Gyro.My_Addres;
@@ -62,17 +370,15 @@
BuffTemp[ 4] =(Gyro.CaunMin >> 8) & 0xff;//старший байт счетчика -.
BuffTemp[ 5] =(Gyro.CaunMin >> 0) & 0xff;//младший байт счетчика -.
-
-
-
-
+
Check(BuffTemp, 8);
WriteConN (BuffTemp,8);
}
+
void CMD_Rate(void)
{
-
-
+
+ Gyro.Rate1_Event=0;
unsigned int Temp;
Gyro.Firmware_Version=0xff; /// промежуточная затычка
@@ -353,7 +659,13 @@
lengf=6;
CRC_N=44;
break;
-
+
+ case 0xA0://Delta_PS
+ lengf=6;
+ CRC_N=8;
+ break;
+
+
case 0xB0://DeviceMode
lengf=6;
@@ -441,12 +753,19 @@
switch(Gyro.CMD_In) {
Rate_Flag=0;
case 0x99:
- Rate_Flag=0;
+ Gyro.ModeOut=0;
CMD_Maintenance();
-
+ break;
+ case 0xA0:
+ TempParam=(BuffTemp[3]) & 0x90;
+ if (TempParam==Delta_500) CMD_Delta_500Hz();
+ else if (TempParam==Delta_EXT) CMD_Delta_Ext();
+ else if (TempParam==PDelta_500) { Gyro.ModeOut=3; Gyro.Delta500_Event=0; WriteCon("Delta500"); }
+ else if (TempParam==PDelta_EXT) { Gyro.ModeOut=4; Gyro.DeltaEXT_Event=0; WriteCon("deltaEXT"); }
break;
case 0xD8:
CMD_M_Control_D8();
+ break;
case 0xD9:
CMD_M_Control_D9();
break;
@@ -454,13 +773,11 @@
CMD_M_Stymul();
break;
case 0xDD:
- Rate_Flag=0;
- TempParam=(BuffTemp[3]) & 0x9f;
- if (TempParam == 0x01) { Rate_Flag=0; CMD_Rate(); WriteCon("Rate11");}
- else if (TempParam == 0x02) { Rate_Flag=0; CMD_Rate2(); WriteCon("Rate21");}
- else if (TempParam == 0x81) { Rate_Flag=1; WriteCon("Rate12");}
- else if (TempParam == 0x82) { Rate_Flag=2; Rate2VibFlag==0; WriteCon("Rate22");}
-
+ TempParam=(BuffTemp[3]) & 0x9f;
+ if (TempParam == Rate1) { CMD_Rate(); WriteCon("Rate11");}
+ else if (TempParam == Rate2) { CMD_Rate2(); WriteCon("Rate21");}
+ else if (TempParam == PRate1) { Gyro.ModeOut=1; Gyro.Rate1_Event=0; WriteCon("Rate12");}
+ else if (TempParam == PRate2) { Gyro.ModeOut=2; Gyro.Rate2_Event=0; WriteCon("Rate22");}
break;
case 0xE4:
CMD_M_vib();
--- a/Global.c Thu Apr 07 20:16:24 2016 +0000
+++ b/Global.c Fri Apr 08 14:20:35 2016 +0000
@@ -8,11 +8,14 @@
unsigned char BuffTemp[100];
unsigned char Time[500];
unsigned int Event1Hz;
+unsigned int Event500Hz;
unsigned int Event1K ;
unsigned int Event100K;
unsigned int EventVibro;
+
+unsigned int Time100K;
unsigned int Time1K;
-unsigned int Time100K;
+unsigned int Time500Hz;
unsigned int Time1Hz;
unsigned int Clock1Hz;
unsigned int ShiftD;
@@ -48,6 +51,8 @@
Clock1Hz = 0;
ShiftD = 0;
ShiftL = 0;
+ Event500Hz = 0;
+ Time500Hz = 0;
/////////////////////////////////////////////
/////////////////////////////////////////////
--- a/Global.h Thu Apr 07 20:16:24 2016 +0000 +++ b/Global.h Fri Apr 08 14:20:35 2016 +0000 @@ -49,12 +49,14 @@ extern unsigned char BuffTemp[]; extern unsigned char Time[]; extern unsigned int Event1Hz; +extern unsigned int Event500Hz; extern unsigned int Event1K; extern unsigned int Event100K; extern unsigned int EventVibro; extern unsigned int Time1K; extern unsigned int Time100K; extern unsigned int Time1Hz; +extern unsigned int Time500Hz; extern unsigned int Clock1Hz; extern void GLD_Init(void);
--- a/MTimer.c Thu Apr 07 20:16:24 2016 +0000
+++ b/MTimer.c Fri Apr 08 14:20:35 2016 +0000
@@ -13,7 +13,7 @@
//unsigned int CountVf=0 ;
unsigned int CountV31=0;
unsigned int CountV255=0,f ;
-
+int loop=0;
@@ -34,16 +34,13 @@
{ int i,t;
if (Event1Hz)
- {
-
-
-
-
+ {
+ Gyro.Rate1_Event = 1;
Event1Hz--;
Time1Hz++;
Discharg ();
BackLight ();
- if(Rate_Flag == 1) CMD_Rate();
+
}
}
/////////////////////////////////////////////////////
@@ -55,19 +52,35 @@
{
Event1K --;
Time1K++;//первый ++ работает каждые 125 (event100kHz)второй был в 100 кГц
-
- /*
- */
+ Time500Hz++;
+ LoopOn
if (Time1K == 1000)
{
Time1K = 0;
Event1Hz ++;
- /*Time1Hz++;*/
+
}
- // LoopOff
+ if (Time500Hz == 2)
+ {
+ Time500Hz = 0;
+ Event500Hz ++;
+ }
+ LoopOff
}
}
+void Event_500Hz(void)// событие раз в 500 Гц
+{
+ if(Event500Hz)
+ { // if(loop=0)BackLightON
+ // else {BackLightOFF loop=1;}
+ BackLightON
+ Event500Hz--;
+ Gyro.Delta500_Event=1;
+ BackLightOFF
+
+ }
+}
/////////////////////////////////////////////////////
///////////////////// 100kHz //////////////////////////
/////////////////////////////////////////////////////
@@ -75,20 +88,19 @@
{
if (Event100K) {
Event100K --;
-BackLightON
+//BackLightON
- if (OutBufCon1Count) {
- OutBufCon1Count--; // обратный отсчет для управления ногой и формирование задержки на выдачу
- }
-
- PinCheng(); // чтение регистра состояния выводов(вибро, полсветка, поджиг, LED) и управление выводами.
+ if (OutBufCon1Count)OutBufCon1Count--; // обратный отсчет для управления ногой и формирование задержки на выдачу
+
+ PinCheng(); // чтение регистра состояния выводов(вибро, полсветка, поджиг, LED) и управление выводами.
Time100K++;
- if (Time100K == 100) {//(было 100) 125 так 1кГц и 1 Гц ближе к правде.
+ if (Time100K == 100)
+ {
Time100K = 0;
Event1K ++;
- }
-BackLightOFF
+ }
+//BackLightOFF
}
}
/////////////////////////////////////////////////////
@@ -149,7 +161,7 @@
//////////////////////////////////////////////////////////////////////
unsigned int Init_TIM2 (void)
{
- LPC_TIM2->MR0 = 250;
+ LPC_TIM2->MR0 = 257;
LPC_TIM2->MCR = 3; /* Interrupt and Reset on MR0 */
NVIC_EnableIRQ(TIMER2_IRQn);
return 1;
@@ -207,7 +219,7 @@
{
LPC_TIM2->IR = 1;
-LoopOn
+
Global_Time++;
Time_UART++;
@@ -217,5 +229,5 @@
Gyro.VibroOutF=1;
Event100K ++;
-LoopOff
+
}
\ No newline at end of file
--- a/MTimer.h Thu Apr 07 20:16:24 2016 +0000 +++ b/MTimer.h Fri Apr 08 14:20:35 2016 +0000 @@ -9,7 +9,7 @@ extern unsigned int CountV31; extern unsigned int CountV255; - +extern void Event_500Hz(void); extern void Event_1Hz(void); // событие раз в 1 Гц extern void Event_1KHz(void) ; // событие раз в 1 кГц extern void Event_100KHz(void); //событие раз в 100кГц
--- a/main.c Thu Apr 07 20:16:24 2016 +0000
+++ b/main.c Fri Apr 08 14:20:35 2016 +0000
@@ -58,8 +58,8 @@
UART_InitSet (0, 921600, 0x03); // надо проверить, мож чо с ногам
-// UART_InitSet (1, 992600, 0x03);
- UART_InitSet (1, 115200, 0x03);
+ UART_InitSet (1, 921600, 0x03);
+ //UART_InitSet (1, 115200, 0x03);
////////////
//DAC_ADC_Exchange_Init(); // инициализация обмена АЦП и ЦАП.
@@ -260,14 +260,22 @@
Event_100KHz();
Event_1KHz();
+ Event_500Hz();
Event_1Hz();
-
+
Event_Vibro();
-
- if((Rate2VibFlag==1) && (Rate_Flag==2))CMD_Rate2();//набор rate2 выдается по выставлению (логической)ноги в 1.
-
-
-
+
+ switch(Gyro.ModeOut) {
+ case 1:
+ if(Gyro.Rate1_Event==1)CMD_Rate();
+ break;
+ case 2:
+ if(Gyro.Rate2_Event==1)CMD_Rate2();
+ break;
+ case 3:
+ if(Gyro.Delta500_Event==1)CMD_Delta_500Hz();
+ break;
+ }
if (Spi.ADC_NewData == 1) // был приход новых данных по ацп сдесь сделать обработку информации и подготовку для выдачи делается 1 раз за вибро
{
// можно апихнкть в функцию
--- a/system_LPC17xx.c Thu Apr 07 20:16:24 2016 +0000 +++ b/system_LPC17xx.c Fri Apr 08 14:20:35 2016 +0000 @@ -322,7 +322,7 @@ // bits 0...14 - PLL0 multiplier value minus 1. Supported multiplier M range 6...512 // bits 16...23 - PLL0 Pre-Divider value minus 1. Supported divider N range 1...32 // Fcc0 = (2 * M * Fin) / N -#define PLL0CFG_Val 0x00050063//M - 100, N - 6, output = 2 * 100 * 12MHz / 6 = 400MHz +#define PLL0CFG_Val 0x00040055//M - 86, N - 5, output = 2 * 86 * 12MHz / 5 = 400MHz #define PLL1_SETUP 1 #define PLL1CFG_Val 0x00000023//M - 36, N - 1, output = 2 * 36 * 12MHz / 1 = 864MHz?
--- a/uart_m.c Thu Apr 07 20:16:24 2016 +0000
+++ b/uart_m.c Fri Apr 08 14:20:35 2016 +0000
@@ -33,8 +33,8 @@
//#define FPCLK (100000000 / 4) //� pll
-#define FPCLK (100000000) //� pll
-
+//#define FPCLK (100000000) //� pll
+ #define FPCLK (103200000)
//#define FPCLK (25000000) //� pll
@@ -218,7 +218,7 @@
LPC_UART3->DLM = usFdiv / 256;
LPC_UART3->DLL = usFdiv % 256;
LPC_UART3->LCR = SetLsr;
- LPC_UART3->FCR = 0x07;
+ LPC_UART3->FCR = 0x07;
}
--- a/vibro.c Thu Apr 07 20:16:24 2016 +0000
+++ b/vibro.c Fri Apr 08 14:20:35 2016 +0000
@@ -119,6 +119,11 @@
//////////////////////////////////////////////////////////////////////////////
void cheng(void)
{
+
+ /*
+if (CountV255 == 0) Gyro.Rate2_Event=1;
+if (CountV255 == 127) Gyro.Rate2_Event=1;
+*/
switch(CountV31) {
case 0:
@@ -131,7 +136,7 @@
case 16:
Time_vibro=0;
Gyro.VibroFrqRegulF=1;
- Rate2VibFlag=1;
+ Gyro.Rate2_Event=1;
break;
case 24:
--- a/vibro.h Thu Apr 07 20:16:24 2016 +0000
+++ b/vibro.h Fri Apr 08 14:20:35 2016 +0000
@@ -19,11 +19,23 @@
extern int tempAMP;
typedef struct _Gyro {
- unsigned int OutMode;
- #define Rate1 0x1<<0
- #define Rate2 0x1<<1
- #define Delta500 0x1<<2
- #define DeltaEXT 0x1<<3
+ unsigned int ModeOut;
+ unsigned int Rate1_Flag;
+ unsigned int Rate1_Event;
+ unsigned int Rate2_Flag;
+ unsigned int Rate2_Event;
+ #define Rate1 0x01
+ #define Rate2 0x02
+ #define PRate1 0x81
+ #define PRate2 0x82
+
+
+ unsigned int DeltaEXT_Event;
+ unsigned int Delta500_Event;
+ #define Delta_500 0x0
+ #define PDelta_500 0x80
+ #define Delta_EXT 0x10
+ #define PDelta_EXT 0x90
unsigned int RgConA;
unsigned int RgConB;
