diff --git a/PROJECT/data/datadesc.c b/PROJECT/data/datadesc.c
index cef03a5..acfc0f1 100644
--- a/PROJECT/data/datadesc.c
+++ b/PROJECT/data/datadesc.c
@@ -149,12 +149,14 @@ CPU_INT08U const CashPulseLenName[] = "
void OnChangeCashPulseLen()
{
CPU_INT32U pulse, pause;
- GetData(&CashPulseLenDesc, &pulse, 0, DATA_FLAG_SYSTEM_INDEX);
- GetData(&CashPauseLenDesc, &pause, 0, DATA_FLAG_SYSTEM_INDEX);
- SetCashPulseParam(pulse, pause);
+ for(int post = 0; post < COUNT_POST; post++)
+ {
+ GetData(&CashPulseLenDesc, &pulse, post, DATA_FLAG_DIRECT_INDEX);
+ GetData(&CashPauseLenDesc, &pause, post, DATA_FLAG_DIRECT_INDEX);
+ SetCashPulseParam(pulse, pause, post);
+ }
}
-
TDataDescStruct const CashPulseLenDesc = {
DATA_DESC_EDIT, // тип дескриптора
DATA_TYPE_ULONG, // тип параметра
@@ -641,7 +643,17 @@ TDataDescStruct const EnableSignalDesc = {
Длительность импульса сигнала печати
*************************************/
TRangeValueULONG const SignalPulseRange = {1, 60};
-CPU_INT08U const SignalPulseName[] = "Длит.сек.";
+CPU_INT08U const SignalPulseName[] = "Длина.имп.,сек.";
+
+void OnChangeSinalPulseLen()
+{
+ CPU_INT32U pulse;
+ for(int post = 0; post < COUNT_POST; post++)
+ {
+ GetData(&SignalPulseDesc, &pulse, post, DATA_FLAG_DIRECT_INDEX);
+ SetSignalPulseParam(pulse, post);
+ }
+}
TDataDescStruct const SignalPulseDesc = {
DATA_DESC_EDIT, // тип дескриптора
@@ -652,7 +664,7 @@ TDataDescStruct const SignalPulseDesc = {
&SignalIndexDesc, // указатель на десриптор индекса массива
(void*)offsetof(TFramMap, signal_pulse_len), // указатель на переменную или адрес FRAM
(void*)&SignalPulseRange, // указатель на границы параметра
- NULL, // функция по изменению
+ OnChangeSinalPulseLen, // функция по изменению
sizeof(CPU_INT32U), // смещение между элементами в массиве
SignalPulseName, // указатель на строку названия параметра
DATA_NO_INDEX, // признак индексного параметра (список строк)
diff --git a/PROJECT/data/datadesc.h b/PROJECT/data/datadesc.h
index 470505c..99b8fa6 100644
--- a/PROJECT/data/datadesc.h
+++ b/PROJECT/data/datadesc.h
@@ -222,6 +222,7 @@ extern void OnChangeServiceName(void);
extern TDataDescStruct const CashPulseLenDesc;
extern TDataDescStruct const CashPauseLenDesc;
extern void OnChangeCashPulseLen();
+extern void OnChangeSinalPulseLen();
extern TDataDescStruct const PrintModeDesc;
extern TDataDescStruct const PrintTimeoutAfterDesc;
diff --git a/PROJECT/services/coin.c b/PROJECT/services/coin.c
index 85ef501..dd22e51 100644
--- a/PROJECT/services/coin.c
+++ b/PROJECT/services/coin.c
@@ -14,47 +14,65 @@ void InitImpInput(void);
CPU_INT32U CoinImpCounter[COUNT_POST + COUNT_VACUUM];
CPU_INT32U CashImpCounter[COUNT_POST + COUNT_VACUUM];
-static CPU_INT32U cash_pulse = 5000;
-static CPU_INT32U cash_pause = 2000;
+static CPU_INT32U cash_pulse[COUNT_POST + COUNT_VACUUM];
+static CPU_INT32U cash_pause[COUNT_POST + COUNT_VACUUM];
static char pend_cash_counter[COUNT_POST + COUNT_VACUUM];
static CPU_INT32U pend_cash_timestamp[COUNT_POST + COUNT_VACUUM];
-void SetCashPulseParam(CPU_INT32U pulse, CPU_INT32U pause)
+static CPU_INT32U signal_pulse[COUNT_POST + COUNT_VACUUM];
+static char pend_signal_counter[COUNT_POST + COUNT_VACUUM];
+
+void SetCashPulseParam(CPU_INT32U pulse, CPU_INT32U pause, CPU_INT32U post)
{
#if OS_CRITICAL_METHOD == 3
OS_CPU_SR cpu_sr = 0;
#endif
OS_ENTER_CRITICAL();
- cash_pulse = pulse * 100;
- cash_pause = pause;
+ cash_pulse[post] = pulse * 100;
+ cash_pause[post] = pause;
+ OS_EXIT_CRITICAL();
+}
+
+void SetSignalPulseParam(CPU_INT32U pulse, CPU_INT32U post)
+{
+ #if OS_CRITICAL_METHOD == 3
+ OS_CPU_SR cpu_sr = 0;
+ #endif
+ OS_ENTER_CRITICAL();
+ signal_pulse[post] = pulse * 2000;
OS_EXIT_CRITICAL();
}
void CoinTask(void *p_arg)
{
- CPU_INT32U enable_coin;
- CPU_INT32U cash_mode;
- CPU_INT32U cash_enable;
+ CPU_INT32U enable_coin[COUNT_POST + COUNT_VACUUM];
+ CPU_INT32U cash_enable[COUNT_POST + COUNT_VACUUM];
+ CPU_INT32U enable_signal[COUNT_POST + COUNT_VACUUM];
+
CPU_INT32U last_cash_count[COUNT_POST + COUNT_VACUUM];
CPU_INT32U last_cash_time[COUNT_POST + COUNT_VACUUM];
CPU_INT32U last_settings_time = 0;
while(1)
{
+ if (OSTimeGet() - last_settings_time > 1000)
+ {
+ for(int i = 0; i < COUNT_POST + COUNT_VACUUM; i++)
+ {
+ GetData(&EnableCoinDesc, &enable_coin[i], i, DATA_FLAG_DIRECT_INDEX);
+ GetData(&EnableValidatorDesc, &cash_enable[i], i, DATA_FLAG_DIRECT_INDEX);
+ GetData(&EnableSignalDesc, &enable_signal[i], i, DATA_FLAG_DIRECT_INDEX);
+ }
+
+ last_settings_time = OSTimeGet();
+ }
+
for(int i = 0; i < COUNT_POST + COUNT_VACUUM; i++)
{
- if (OSTimeGet() - last_settings_time > 1000)
- {
- last_settings_time = OSTimeGet();
- GetData(&EnableCoinDesc, &enable_coin, i, DATA_FLAG_DIRECT_INDEX);
- GetData(&CashModeDesc, &cash_mode, i, DATA_FLAG_DIRECT_INDEX);
- GetData(&EnableValidatorDesc, &cash_enable, i, DATA_FLAG_DIRECT_INDEX);
- }
-
OSTimeDly(1);
- if (enable_coin)
+ if (enable_coin[i])
{
if (GetCoinCount(i))
{
@@ -67,7 +85,16 @@ void CoinTask(void *p_arg)
GetResetCoinCount(i);
}
- if (!cash_enable) {GetResetCashCount(i); continue;}
+ if (enable_signal[i])
+ {
+ if (pend_signal_counter[i])
+ {
+ // есть удержание сигнала печати
+ PostUserEvent(EVENT_CASH_PRINT_CHECK_POST1 + i);
+ }
+ }
+
+ if (!cash_enable[i]) {GetResetCashCount(i); continue;}
if(i >= COUNT_POST) continue;
#if OS_CRITICAL_METHOD == 3
@@ -78,7 +105,7 @@ void CoinTask(void *p_arg)
if (pend_cash_counter[i])
{
// импульсы инкрементируем только после выдержки паузы
- if (OSTimeGet() - pend_cash_timestamp[i] > cash_pause)
+ if (OSTimeGet() - pend_cash_timestamp[i] > cash_pause[i])
{
pend_cash_counter[i] = 0;
CashImpCounter[i]++;
@@ -86,32 +113,25 @@ void CoinTask(void *p_arg)
}
OS_EXIT_CRITICAL();
- if (cash_mode == 1)
- {
- if (GetCashCount(i))
- {
- if (last_cash_count[i] == GetCashCount(i))
- {
- if (labs(OSTimeGet() - last_cash_time[i]) > 500)
- {
- PostUserEvent(EVENT_CASH_INSERTED_POST1 + i);
- }
- }
- else
- {
- last_cash_count[i] = GetCashCount(i);
- last_cash_time[i] = OSTimeGet();
- }
- }
- else
- {
- last_cash_time[i] = OSTimeGet();
- }
- }
- else
- {
- GetResetCashCount(i);
- }
+ if (GetCashCount(i))
+ {
+ if (last_cash_count[i] == GetCashCount(i))
+ {
+ if (labs(OSTimeGet() - last_cash_time[i]) > 500)
+ {
+ PostUserEvent(EVENT_CASH_INSERTED_POST1 + i);
+ }
+ }
+ else
+ {
+ last_cash_count[i] = GetCashCount(i);
+ last_cash_time[i] = OSTimeGet();
+ }
+ }
+ else
+ {
+ last_cash_time[i] = OSTimeGet();
+ }
}
}
}
@@ -195,6 +215,7 @@ void InputCapture_ISR(void)
{
static CPU_INT32U period[COUNT_POST + COUNT_VACUUM];
static CPU_INT32U period_cash[COUNT_POST + COUNT_VACUUM];
+ static CPU_INT32U period_signal[COUNT_POST + COUNT_VACUUM];
static CPU_INT32U T3CR = 0;
// наращиваем тики
@@ -207,8 +228,8 @@ void InputCapture_ISR(void)
CPU_INT32U cr=T3CR;
cr -= period_cash[0];
- if ((cr > (cash_pulse - COIN_IMP_SPAN))
- && (cr < (cash_pulse + COIN_IMP_SPAN)))
+ if ((cr > (cash_pulse[0] - COIN_IMP_SPAN))
+ && (cr < (cash_pulse[0] + COIN_IMP_SPAN)))
{
pend_cash_counter[0] = 1;
pend_cash_timestamp[0] = OSTimeGet();
@@ -236,8 +257,21 @@ void InputCapture_ISR(void)
// сигнал печати чека 1
if (FIO4PIN_bit.P4_28)
- {
- }
+ { // пришел задний фронт
+ CPU_INT32U cr=T3CR;
+ cr -= period_signal[0];
+
+ if ((cr > (signal_pulse[0] - COIN_IMP_SPAN))
+ && (cr < (signal_pulse[0] + COIN_IMP_SPAN)))
+ {
+ pend_signal_counter[0] = 1;
+ }
+ }
+ else
+ { // пришел передний фронт
+ period_signal[0] = T3CR;
+ pend_signal_counter[0] = 0;
+ }
// пост 2
// купюроприемник 2
@@ -246,8 +280,8 @@ void InputCapture_ISR(void)
CPU_INT32U cr=T3CR;
cr -= period_cash[1];
- if ((cr > (cash_pulse - COIN_IMP_SPAN))
- && (cr < (cash_pulse + COIN_IMP_SPAN)))
+ if ((cr > (cash_pulse[1] - COIN_IMP_SPAN))
+ && (cr < (cash_pulse[1] + COIN_IMP_SPAN)))
{
pend_cash_counter[1] = 1;
pend_cash_timestamp[1] = OSTimeGet();
@@ -285,8 +319,8 @@ void InputCapture_ISR(void)
CPU_INT32U cr=T3CR;
cr -= period_cash[2];
- if ((cr > (cash_pulse - COIN_IMP_SPAN))
- && (cr < (cash_pulse + COIN_IMP_SPAN)))
+ if ((cr > (cash_pulse[2] - COIN_IMP_SPAN))
+ && (cr < (cash_pulse[2] + COIN_IMP_SPAN)))
{
pend_cash_counter[2] = 1;
pend_cash_timestamp[2] = OSTimeGet();
@@ -324,8 +358,8 @@ void InputCapture_ISR(void)
CPU_INT32U cr=T3CR;
cr -= period_cash[3];
- if ((cr > (cash_pulse - COIN_IMP_SPAN))
- && (cr < (cash_pulse + COIN_IMP_SPAN)))
+ if ((cr > (cash_pulse[3] - COIN_IMP_SPAN))
+ && (cr < (cash_pulse[3] + COIN_IMP_SPAN)))
{
pend_cash_counter[3] = 1;
pend_cash_timestamp[3] = OSTimeGet();
@@ -363,8 +397,8 @@ void InputCapture_ISR(void)
CPU_INT32U cr=T3CR;
cr -= period_cash[4];
- if ((cr > (cash_pulse - COIN_IMP_SPAN))
- && (cr < (cash_pulse + COIN_IMP_SPAN)))
+ if ((cr > (cash_pulse[4] - COIN_IMP_SPAN))
+ && (cr < (cash_pulse[4] + COIN_IMP_SPAN)))
{
pend_cash_counter[4] = 1;
pend_cash_timestamp[4] = OSTimeGet();
@@ -402,8 +436,8 @@ void InputCapture_ISR(void)
CPU_INT32U cr=T3CR;
cr -= period_cash[5];
- if ((cr > (cash_pulse - COIN_IMP_SPAN))
- && (cr < (cash_pulse + COIN_IMP_SPAN)))
+ if ((cr > (cash_pulse[5] - COIN_IMP_SPAN))
+ && (cr < (cash_pulse[5] + COIN_IMP_SPAN)))
{
pend_cash_counter[5] = 1;
pend_cash_timestamp[5] = OSTimeGet();
@@ -489,11 +523,9 @@ void InitImpInput (void)
#endif
OnChangeCashPulseLen();
+ OnChangeSinalPulseLen();
OS_ENTER_CRITICAL();
-
- PCONP_bit.PCTIM3 = 1;
- PCLKSEL1_bit.PCLK_TIMER3 = 2;
// назначим все ножки
@@ -629,6 +661,9 @@ void InitImpInput (void)
FIO0DIR_bit.P0_10 = 0;
FIO0MASK_bit.P0_10 = 0;
+ PCONP_bit.PCTIM3 = 1;
+ PCLKSEL1_bit.PCLK_TIMER3 = 2;
+
pclk_freq = BSP_CPU_PclkFreq(23);
rld_cnts = pclk_freq / INPUT_CAPTURE_FREQ;
diff --git a/PROJECT/services/coin.h b/PROJECT/services/coin.h
index f389527..c6bc43a 100644
--- a/PROJECT/services/coin.h
+++ b/PROJECT/services/coin.h
@@ -14,7 +14,8 @@ extern void CoinDisable(void);
extern void CoinEnable(void);
extern CPU_INT32U GetCashCount(int index);
extern CPU_INT32U GetResetCashCount(int index);
-extern void SetCashPulseParam(CPU_INT32U pulse, CPU_INT32U pause);
+extern void SetCashPulseParam(CPU_INT32U pulse, CPU_INT32U pause, CPU_INT32U post);
+extern void SetSignalPulseParam(CPU_INT32U pulse, CPU_INT32U post);
#endif //#ifndef _COIN_H_
diff --git a/settings/sk-mlpc2368.dni b/settings/sk-mlpc2368.dni
index 485b643..5646446 100644
--- a/settings/sk-mlpc2368.dni
+++ b/settings/sk-mlpc2368.dni
@@ -14,7 +14,7 @@ Count=0
Enabled=0
ShowSource=1
[DebugChecksum]
-Checksum=-1178438452
+Checksum=206192145
[Exceptions]
StopOnUncaught=_ 0
StopOnThrow=_ 0
@@ -153,7 +153,8 @@ ActionState=1
[Disassemble mode]
mode=0
[Breakpoints2]
-Count=0
+Bp0=_ 1 "EMUL_CODE" "{$PROJ_DIR$\PROJECT\services\coin.c}.222.3" 0 0 1 "" 0 "" 0
+Count=1
[Log file]
LoggingEnabled=_ 0
LogFile=_ ""
diff --git a/settings/sk-mlpc2368.wsdt b/settings/sk-mlpc2368.wsdt
index f52ca93..128a262 100644
--- a/settings/sk-mlpc2368.wsdt
+++ b/settings/sk-mlpc2368.wsdt
@@ -34,7 +34,7 @@
TabID-28963-15244Find in FilesFind-in-Files
- 1
+ 0
TabID-1122-24249
@@ -52,7 +52,7 @@
- TextEditor$WS_DIR$\PROJECT\menu\menu.h04814241424TextEditor$WS_DIR$\OS\app\app_cfg.h005858TextEditor$WS_DIR$\PROJECT\data\data.c032891469146TextEditor$WS_DIR$\..\..\8\positive_6_24\OS\app\app.c02614311431TextEditor$WS_DIR$\PROJECT\app\app_serv.c017849274927TextEditor$WS_DIR$\PROJECT\services\coin.c0196426542655TextEditor$WS_DIR$\PROJECT\services\fr.c04484484TextEditor$WS_DIR$\PROJECT\services\console.c010933323332TextEditor$WS_DIR$\OS\uc\cpu\cpu.h08545784589TextEditor$WS_DIR$\OS\uc\lib\lib_def.h011159735981TextEditor$WS_DIR$\PROJECT\data\fram_map.h04211541154TextEditor$WS_DIR$\PROJECT\app\app_serv.h02811001115TextEditor$WS_DIR$\PROJECT\app\journal.h04432053205TextEditor$WS_DIR$\PROJECT\app\journal.c04211441144TextEditor$WS_DIR$\PROJECT\services\time.c012625625TextEditor$WS_DIR$\OS\app\app.c02911311131TextEditor$WS_DIR$\PROJECT\menu\menu.c020660776077TextEditor$WS_DIR$\OS\bsp\iolpc2368.h04662143604143604TextEditor$WS_DIR$\OS\bsp\bsp.c014966786678TextEditor$WS_DIR$\PROJECT\data\datadesc.c07092888928889TextEditor$WS_DIR$\PROJECT\app\control.h004949TextEditor$WS_DIR$\PROJECT\data\datadesc.h04719751990TextEditor$WS_DIR$\PROJECT\menu\menudesc.c08633624636246TextEditor$WS_DIR$\PROJECT\services\coin.h0043430100000010000001
+ TextEditor$WS_DIR$\PROJECT\menu\menu.h04814241424TextEditor$WS_DIR$\OS\app\app_cfg.h005858TextEditor$WS_DIR$\..\..\8\positive_6_24\OS\app\app.c02614311431TextEditor$WS_DIR$\PROJECT\app\app_serv.c017849274927TextEditor$WS_DIR$\PROJECT\services\fr.c04484484TextEditor$WS_DIR$\PROJECT\services\console.c010933323332TextEditor$WS_DIR$\OS\uc\cpu\cpu.h08545784589TextEditor$WS_DIR$\OS\uc\lib\lib_def.h011159735981TextEditor$WS_DIR$\PROJECT\data\fram_map.h039939939TextEditor$WS_DIR$\PROJECT\app\app_serv.h03115361564TextEditor$WS_DIR$\PROJECT\app\journal.h04432053205TextEditor$WS_DIR$\PROJECT\app\journal.c04211441144TextEditor$WS_DIR$\PROJECT\services\time.c012625625TextEditor$WS_DIR$\OS\app\app.c02911311131TextEditor$WS_DIR$\PROJECT\menu\menu.c020660776077TextEditor$WS_DIR$\OS\bsp\iolpc2368.h04662143604143604TextEditor$WS_DIR$\OS\bsp\bsp.c014966786678TextEditor$WS_DIR$\PROJECT\data\datadesc.c06362921629216TextEditor$WS_DIR$\PROJECT\app\control.h004949TextEditor$WS_DIR$\PROJECT\menu\menudesc.c08633624636246TextEditor$WS_DIR$\PROJECT\data\data.h07316181618TextEditor$WS_DIR$\PROJECT\data\data.c011234873487TextEditor$WS_DIR$\PROJECT\services\coin.c0722296229622TextEditor$WS_DIR$\PROJECT\services\coin.h00163163TextEditor$WS_DIR$\OS\uc\os_ii\source\os_time.c020810123101230100000010000001