From ea558ae8c738dedaa92b7561f5db6411478ff051 Mon Sep 17 00:00:00 2001 From: dimoniche Date: Tue, 4 Jun 2019 01:04:28 +0300 Subject: [PATCH] =?UTF-8?q?=D1=80=D0=B0=D0=B7=D0=B1=D0=B8=D1=80=D0=B0?= =?UTF-8?q?=D0=B5=D0=BC=D1=81=D1=8F=20=D1=81=20=D1=82=D0=B0=D0=B9=D0=BC?= =?UTF-8?q?=D0=B5=D1=80=D0=BE=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PROJECT/data/datadesc.c | 24 ++++-- PROJECT/data/datadesc.h | 1 + PROJECT/services/coin.c | 159 +++++++++++++++++++++++--------------- PROJECT/services/coin.h | 3 +- settings/sk-mlpc2368.dni | 5 +- settings/sk-mlpc2368.wsdt | 4 +- 6 files changed, 123 insertions(+), 73 deletions(-) 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