aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Embedded_SW/Embedded/Modules/Control
diff options
context:
space:
mode:
Diffstat (limited to 'Software/Embedded_SW/Embedded/Modules/Control')
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c169
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.h8
2 files changed, 173 insertions, 4 deletions
diff --git a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c
index 968e52d7d..db6624fd4 100644
--- a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c
+++ b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c
@@ -40,6 +40,13 @@
#include "modules/thread/thread_ex.h"
#include "modules/ids/ids_ex.h"
+#include "drivers/Flash_Memory/Flash_Memory.h"
+#include "drivers/Flash_Memory/fatfs/ff.h"
+#include "drivers/Flash_ram/FlashProgram.h"
+
+#include "third_party/fatfs/src/ffconf.h"
+#include "Common/SWUpdate/FileSystem.h"
+
#include "Communication/Connection.h"
Task_Handle Millisecond_Task_Handle;
@@ -147,7 +154,11 @@ void MillisecStop(void)
MillisecRestart = false;
ADCAcquireStop();
}
+#ifdef HUNDRED_MICROSECONDS_DANCER_READ
+#define HIGH_TASK_FREQUENCY 12000
+#else
#define HIGH_TASK_FREQUENCY 120000
+#endif
void MillisecStart(void)
{
MillisecRestart = true;
@@ -164,6 +175,8 @@ void OneMilliSecondMillisecInterrupt(UArg arg0)
{
MillisecMessageStruc MillisecMessage;
uint32_t Tenmsec_millisecondCounter = 0;
+#ifndef HUNDRED_MICROSECONDS_DANCER_READ
+
ROM_IntMasterDisable();
ROM_TimerIntClear(Millisec_timerBase, TIMER_TIMA_TIMEOUT); // Clear the timer interrupt
if (MillisecRestart == true)
@@ -176,6 +189,7 @@ void OneMilliSecondMillisecInterrupt(UArg arg0)
ROM_IntMasterEnable();
return;
}
+#endif
if (msec_millisecondCounter%10 == 0)
{
Tenmsec_millisecondCounter = msec_millisecondCounter;
@@ -420,10 +434,13 @@ uint32_t MillisecLoop(uint32_t tick)
}
}
}
+#ifdef HUNDRED_MICROSECONDS_DANCER_READ
+ SaveLogData();
+#else
Dancer_Data[FEEDER_DANCER] = Read_Dancer_Position(FEEDER_DANCER);
Dancer_Data[POOLER_DANCER] = Read_Dancer_Position(POOLER_DANCER);
Dancer_Data[WINDER_DANCER] = Read_Dancer_Position(WINDER_DANCER);
-
+#endif
return OK;
}
uint32_t MillisecLowLoop(uint32_t tick)
@@ -489,10 +506,10 @@ uint32_t MillisecLowLoop(uint32_t tick)
if (isMotorConfigured(Motor_i))
MotorGetStatusFromFPGA(Motor_i);
}
- /* for (Heater_i = 0;Heater_i < NUM_OF_HEATERS;Heater_i++)
+ for (Heater_i = 0;Heater_i < NUM_OF_HEATERS;Heater_i++)
{
- Read_Head_MixChip_Heaters_Current(Heater_i);
- }*/
+ Read_Heaters_Current(Heater_i);
+ }
}
if (OneMinute_Tick)
{
@@ -600,3 +617,147 @@ uint32_t getDrawerFansStatus(void)
{
return DrawerFansStatus;
}
+#ifdef HUNDRED_MICROSECONDS_DANCER_READ
+uint32_t DancerData[NUM_OF_DANCERS];
+uint32_t Control_Read_Dancer_Position(HardwareDancerType DancerId, uint32_t Parameter1, uint32_t Parameter2)
+{
+ return DancerData[DancerId];
+}
+uint32_t dancer1;
+uint32_t dancer2;
+uint32_t dancer3;
+uint32_t dancer1sum;
+uint32_t dancer2sum;
+uint32_t dancer3sum;
+uint32_t dancer_count;
+/*-----------------------*/
+uint32_t StoreBuffer[2][128];
+//char * StoreBuffer[2][512];
+/*-----------------------*/
+int StoreBufferId = 0;
+int StoreBufferCounter=0;
+uint32_t BufferCounter=0xEEEEEEEE;
+bool storeData=false;
+uint8_t len=0;
+void HundredMicroTimerInterrupt(int ARG0)
+{
+ ROM_IntMasterDisable();
+ ROM_TimerIntClear(Millisec_timerBase, TIMER_TIMA_TIMEOUT); // Clear the timer interrupt
+ if (MillisecRestart == true)
+ {
+ ROM_TimerLoadSet(Millisec_timerBase, TIMER_A,HIGH_TASK_FREQUENCY);
+ }
+ else
+ {
+ ROM_TimerDisable(Millisec_timerBase,TIMER_A);
+ ROM_IntMasterEnable();
+ return;
+ }
+ dancer1 = Read_Dancer_Position(WINDER_DANCER);
+ dancer2 = Read_Dancer_Position(POOLER_DANCER);
+ dancer3 = Read_Dancer_Position(FEEDER_DANCER);
+//data store - logging
+//double buffer switch
+ /*-----------------------*/
+ if (StoreBufferCounter>125)
+ //if (StoreBufferCounter>490)
+ /*-----------------------*/
+ {
+ StoreBufferId = 1-StoreBufferId;//switch buffer
+ StoreBufferCounter=0;
+ storeData = true;
+ }
+//double buffer initialize
+ /*-----------------------*/
+ if (StoreBufferCounter==0)
+ {
+ StoreBuffer[StoreBufferId][StoreBufferCounter] = BufferCounter++;
+ StoreBufferCounter++;
+ }
+ /*-----------------------*/
+//store data
+ /*-----------------------*/
+ StoreBuffer[StoreBufferId][StoreBufferCounter++] = dancer1;
+ StoreBuffer[StoreBufferId][StoreBufferCounter++] = dancer2;
+ StoreBuffer[StoreBufferId][StoreBufferCounter++] = dancer3;
+ /*-----------------------*/
+ //len = usprintf(&StoreBuffer[StoreBufferId][StoreBufferCounter], "\r\n%d %d %d", dancer1[dancer_count],dancer2[dancer_count],dancer3[dancer_count]);
+ //StoreBufferCounter+=(len+1);
+ /*-----------------------*/
+ dancer1sum+=dancer1;
+ dancer2sum+=dancer2;
+ dancer3sum+=dancer3;
+ dancer_count++;
+
+
+ if (dancer_count == 10)
+ {
+ DancerData[WINDER_DANCER] = dancer1sum/dancer_count;
+ DancerData[POOLER_DANCER] = dancer2sum/dancer_count;
+ DancerData[FEEDER_DANCER] = dancer3sum/dancer_count;
+ dancer_count = 0;
+ dancer1sum = 0;
+ dancer2sum = 0;
+ dancer3sum = 0;
+ OneMilliSecondMillisecInterrupt(ARG0);
+ }
+ ROM_IntMasterEnable();
+ return ;
+
+}
+char MillisecPath[50] = "0://SysInfo//Millisec.txt";
+FIL *FileHandle;
+void SaveLogData(void)
+{
+ uint32_t WrittenBytes = 0;
+ int BufferID = 1- StoreBufferId;
+
+ if (storeData == true)
+ {
+ if (FileHandle)
+ {
+ f_write(FileHandle,StoreBuffer[BufferID],512,&WrittenBytes );
+ storeData = false;
+ }
+ }
+}
+void MillisecLogInit(void)
+{
+ FRESULT Fresult = FR_OK;
+ ROM_IntMasterDisable();
+ BufferCounter = 0;
+ FileHandle = my_malloc(sizeof(FIL));
+ if (FileHandle == 0)
+ Fresult = FR_DENIED;
+ else
+ Fresult = f_open(FileHandle,MillisecPath,FA_WRITE | FA_OPEN_ALWAYS);
+ ROM_IntMasterEnable();
+ return ;
+
+}
+void MillisecLogClose(void)
+{
+ FRESULT Fresult = FR_OK;
+ if (FileHandle == 0)
+ Fresult = FR_DENIED;
+ else
+ {
+ storeData = false;
+ ROM_IntMasterDisable();
+ Fresult = f_close(FileHandle);
+ my_free(FileHandle);
+ FileHandle = 0;
+ ROM_IntMasterEnable();
+ }
+ return ;
+
+}
+#endif
+void MillisecInterrupt(UArg arg0)
+{
+#ifdef HUNDRED_MICROSECONDS_DANCER_READ
+ HundredMicroTimerInterrupt(arg0);
+#else
+ OneMilliSecondMillisecInterrupt(arg0);
+#endif
+}
diff --git a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.h b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.h
index 517716c08..61c7df7ee 100644
--- a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.h
+++ b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.h
@@ -36,6 +36,14 @@ void MillisecInit(void);
void MillisecStop(void);
void MillisecStart(void);
+#ifdef HUNDRED_MICROSECONDS_DANCER_READ
+void SaveLogData(void);
+void MillisecLogInit(void);
+void MillisecLogClose(void);
+
+#endif
+
+
extern bool watchdogCriticalAlarm;
extern Task_Handle Millisecond_Task_Handle;