2 часа

This commit is contained in:
Dmitriy 2021-02-10 21:48:26 +03:00
parent 32efe9ebcb
commit d91ced8f65
4 changed files with 372 additions and 124 deletions

View File

@ -8,19 +8,57 @@
#include "modem.h"
#include <stdlib.h>
OS_STK CoinTaskStk[COIN_TASK_STK_SIZE];
void InitImpInput(void);
CPU_INT32U CoinImpCounter;
CPU_INT32U CashImpCounter;
static CPU_INT32U CoinImpCounter;
static CPU_INT32U CashImpCounter;
static CPU_INT32U BankImpCounter;
static CPU_INT32U HopperImpCounter;
static CPU_INT32U cash_pulse = 5000;
static CPU_INT32U cash_pause = 2000;
static CPU_INT32U coin_pulse = 50;
static CPU_INT32U coin_pause = 20;
static char pend_coin_counter = 0;
static CPU_INT32U pend_coin_timestamp;
static CPU_INT32U cash_pulse = 50;
static CPU_INT32U cash_pause = 20;
static char pend_cash_counter = 0;
static CPU_INT32U pend_cash_timestamp;
static CPU_INT32U bank_pulse = 50;
static CPU_INT32U bank_pause = 20;
static char pend_bank_counter = 0;
static CPU_INT32U pend_bank_timestamp;
static CPU_INT32U hopper_pulse = 50;
static CPU_INT32U hopper_pause = 20;
static char pend_hopper_counter = 0;
static CPU_INT32U pend_hopper_timestamp;
static CPU_INT32U signal_error_hopper_pulse = 1000;
static char pend_upsignal_error_hopper_counter;
static char pend_downsignal_error_hopper_counter;
static CPU_INT32U pend_signal_error_hopper_timestamp;
static CPU_INT32U signal_nomoney_hopper_pulse = 1000;
static char pend_upsignal_nomoney_hopper_counter;
static char pend_downsignal_nomoney_hopper_counter;
static CPU_INT32U pend_signal_nomoney_hopper_timestamp;
static CPU_INT32U cashLevel;
static CPU_INT32U coinLevel;
static CPU_INT32U bankLevel;
static CPU_INT32U hopperLevel;
static CPU_INT32U SignalHopperLevel;
CPU_INT32U period;
CPU_INT32U period_cash;
CPU_INT32U period_bank;
CPU_INT32U period_signal;
CPU_INT32U period_hopper;
void SetCashPulseParam(CPU_INT32U pulse, CPU_INT32U pause)
{
#if OS_CRITICAL_METHOD == 3
@ -178,6 +216,56 @@ CPU_INT32U GetResetCashCount(void)
return ctr;
}
// ïîëó÷èòü ÷èñëî èìïóëüñîâ îò áàíêîâñêîãî òåðìèíàëà
CPU_INT32U GetbankCount()
{
#if OS_CRITICAL_METHOD == 3
OS_CPU_SR cpu_sr = 0;
#endif
OS_ENTER_CRITICAL();
CPU_INT32U ctr = BankImpCounter;
OS_EXIT_CRITICAL();
return ctr;
}
// ïîëó÷èòü ÷èñëî èìïóëüñîâ îò áàíêîâñêîãî òåðìèíàëà è ñáðîñèòü ñ÷åò÷èê
CPU_INT32U GetResetbankCount()
{
#if OS_CRITICAL_METHOD == 3
OS_CPU_SR cpu_sr = 0;
#endif
OS_ENTER_CRITICAL();
CPU_INT32U ctr = BankImpCounter;
BankImpCounter = 0;
OS_EXIT_CRITICAL();
return ctr;
}
// ïîëó÷èòü ÷èñëî èìïóëüñîâ îò õîïïåðà
CPU_INT32U GetHopperCount()
{
#if OS_CRITICAL_METHOD == 3
OS_CPU_SR cpu_sr = 0;
#endif
OS_ENTER_CRITICAL();
CPU_INT32U ctr = HopperImpCounter;
OS_EXIT_CRITICAL();
return ctr;
}
// ïîëó÷èòü ÷èñëî èìïóëüñîâ îò õîïïåðà è ñáðîñèòü ñ÷åò÷èê
CPU_INT32U GetHopperbankCount()
{
#if OS_CRITICAL_METHOD == 3
OS_CPU_SR cpu_sr = 0;
#endif
OS_ENTER_CRITICAL();
CPU_INT32U ctr = HopperImpCounter;
HopperImpCounter = 0;
OS_EXIT_CRITICAL();
return ctr;
}
// èíèöèàëèçàöèÿ ìîíåòîïðèåìíèêà
void InitCoin(void)
{
@ -187,64 +275,206 @@ void InitCoin(void)
OSTaskCreate(CoinTask, (void *)0, (OS_STK *)&CoinTaskStk[COIN_TASK_STK_SIZE-1], COIN_TASK_PRIO);
}
CPU_INT32U input_register()
{
CPU_INT32U input = 0;
// 0 áèò ìîíåòîïðèåìíèê
if (FIO0PIN_bit.P0_23)
{
SETBIT(input, 0);
}
// 1 áèò
if (FIO0PIN_bit.P0_26)
{
SETBIT(input, 1);
}
// 2 áèò
if (FIO1PIN_bit.P1_25)
{
SETBIT(input, 2);
}
// 3 áèò
if (FIO1PIN_bit.P1_24)
{
SETBIT(input, 2);
}
// 4 áèò
if (FIO1PIN_bit.P1_23)
{
SETBIT(input, 3);
}
return input;
}
static CPU_INT32U input_event = 0;
static CPU_INT32U prev_input = 0;
static CPU_INT32U curr_input = 0;
CPU_INT32U T3CR = 0;
void InputCapture_ISR(void)
{
CPU_INT08U ir = T3IR;
static CPU_INT32U period = 0;
static CPU_INT32U period_cash = 0;
T3IR = 0xFF;
if (ir & 0x10)
{// CR0 interrupt
if (FIO0PIN_bit.P0_23)
{// ïðèøåë çàäíèé ôðîíò
CPU_INT32U cr=T3CR0;
if (((cr-period) > COIN_IMP_MIN_LEN)
&& ((cr-period) < COIN_IMP_MAX_LEN))
CoinImpCounter++;
}
else
{// ïðèøåë ïåðåäíèé ôðîíò
period = T3CR0;
}
}
// íàðàùèâàåì òèêè
T3CR++;
if (ir & 0x20)
{// CR1 interrupt
curr_input = input_register();
input_event = curr_input^prev_input;
prev_input = curr_input;
// ìîíåòîïðèåìíèê
if(TSTBIT(input_event, 0))
{
if ((!FIO0PIN_bit.P0_23 && cashLevel) || (FIO0PIN_bit.P0_23 && !cashLevel))
{ // ïðèøåë çàäíèé ôðîíò
CPU_INT32U cr=T3CR;
cr -= period_cash;
if (cr > (cash_pulse - COIN_IMP_SPAN))
{
pend_cash_counter = 1;
pend_cash_timestamp = OSTimeGet();
}
}
else
{ // ïðèøåë ïåðåäíèé ôðîíò
period_cash = T3CR;
pend_cash_counter = 0;
}
}
// áàíêîâñêèé òåðìèíàë
if(TSTBIT(input_event, 1))
{
if ((!FIO0PIN_bit.P0_26 && bankLevel) || (FIO0PIN_bit.P0_26 && !bankLevel))
{ // ïðèøåë çàäíèé ôðîíò
CPU_INT32U cr=T3CR;
cr -= period_bank;
if (cr > (bank_pulse - COIN_IMP_SPAN))
{
pend_bank_counter = 1;
pend_bank_timestamp = OSTimeGet();
}
}
else
{ // ïðèøåë ïåðåäíèé ôðîíò
period_bank = T3CR;
pend_bank_counter = 0;
}
}
// õîïïåð â ðåæèìå èìïóëüñîâ
if(TSTBIT(input_event, 2))
{
if ((!FIO1PIN_bit.P1_25 && hopperLevel) || (FIO1PIN_bit.P1_25 && !hopperLevel))
{ // ïðèøåë çàäíèé ôðîíò
CPU_INT32U cr=T3CR;
cr -= period_hopper;
if (cr > (hopper_pulse - COIN_IMP_SPAN))
{
pend_hopper_counter = 1;
pend_hopper_timestamp = OSTimeGet();
}
}
else
{ // ïðèøåë ïåðåäíèé ôðîíò
period_hopper = T3CR;
pend_hopper_counter = 0;
}
}
if (FIO0PIN_bit.P0_24)
{// ïðèøåë çàäíèé ôðîíò
CPU_INT32U cr=T3CR1;
cr -= period_cash;
if ((cr > (cash_pulse - COIN_IMP_SPAN))
&& (cr < (cash_pulse + COIN_IMP_SPAN)))
{
pend_cash_counter = 1;
pend_cash_timestamp = OSTimeGet();
}
}
else
{// ïðèøåë ïåðåäíèé ôðîíò
period_cash = T3CR1;
pend_cash_counter = 0;
}
}
// ñèãíàë îøèáêè õîïïåðà
if(TSTBIT(input_event, 3))
{
pend_signal_error_hopper_timestamp = OSTimeGet();
if ((FIO1PIN_bit.P1_23 && SignalHopperLevel) || (!FIO1PIN_bit.P1_23 && !SignalHopperLevel))
{
pend_upsignal_error_hopper_counter = 1;
pend_downsignal_error_hopper_counter = 0;
}
else
{
pend_upsignal_error_hopper_counter = 0;
pend_downsignal_error_hopper_counter = 1;
}
}
// ñèãíàë îòñóòñòâèÿ äåíåã â õîïïåðå
if(TSTBIT(input_event, 4))
{
pend_signal_nomoney_hopper_timestamp = OSTimeGet();
if ((FIO1PIN_bit.P1_24 && SignalHopperLevel) || (!FIO1PIN_bit.P1_24 && !SignalHopperLevel))
{
pend_upsignal_nomoney_hopper_counter = 1;
pend_downsignal_nomoney_hopper_counter = 0;
}
else
{
pend_upsignal_nomoney_hopper_counter = 0;
pend_downsignal_nomoney_hopper_counter = 1;
}
}
}
extern CPU_INT32U BSP_CPU_PclkFreq (CPU_INT08U pclk);
void InitInputPorts()
{
// ìîíåòîïðèåìíèê
PINSEL1_bit.P0_23 = 0;
if(cashLevel)PINMODE1_bit.P0_23 = 3;
else PINMODE1_bit.P0_23 = 0;
FIO0DIR_bit.P0_23 = 0;
FIO0MASK_bit.P0_23 = 0;
// áàíêîâñêèé òåðìèíàë
PINSEL1_bit.P0_26 = 0;
if(cashLevel)PINMODE1_bit.P0_26 = 3;
else PINMODE1_bit.P0_26 = 0;
FIO0DIR_bit.P0_26 = 0;
FIO0MASK_bit.P0_26 = 0;
// õîïïåð â ðåæèìå èìïóëüñîâ
PINSEL3_bit.P1_25 = 0;
if(bankLevel)PINMODE3_bit.P1_25 = 3;
else PINMODE3_bit.P1_25 = 0;
FIO1DIR_bit.P1_25 = 0;
FIO1MASK_bit.P1_25 = 0;
// ñèãíàë ñîñòîÿíèÿ õîïïåðà
PINSEL3_bit.P1_23 = 0;
PINMODE3_bit.P1_23 = 0;
FIO1DIR_bit.P1_23 = 0;
FIO1MASK_bit.P1_23 = 0;
// ñèãíàë íàëè÷èÿ ìîíåò â õîïïåðå
PINSEL3_bit.P1_24 = 0;
PINMODE3_bit.P1_24 = 0;
FIO1DIR_bit.P1_24 = 0;
FIO1MASK_bit.P1_24 = 0;
}
/*
P0.23 MK_P9 IMPULSE OUTPUT (èìïóëüñíûé âûõîä ìîíåòîïðèåìíèêà)
P0.24 MK_P8 INHIBIT (áëîêèðîâêà)
P0.23 MK_P9 èìïóëüñíûé âûõîä ìîíåòîïðèåìíèêà
P0.26 MK_P6 èìïóëüñíûé âûõîä áàíêîâñêîãî òåðìèíàëà
P1.25 MK_P39 èìïóëüñíûé âûõîä õîïïåðà
P1.23 MK_P37 Security Output ñ õîïïåðîì âñå â ïîðÿäêå - LOW
P1.24 MK_P38 Íèçêèé óðîâåíü ìîíåò. Åñòü ìîíåòû - ñèãíàë LOW.
*/
// èíèöèàëèçàöèÿ èìïóëüñíîãî âõîäà
// èñïîëüçóåòñÿ CAP3.0
void InitImpInput (void)
{
#define INPUT_CAPTURE_FREQ 100000 // ÷àñòîòà òàêòèðîâàíèÿ ÷àñòîòíûõ âõîäîâ
#define INPUT_CAPTURE_FREQ 1000 // ÷àñòîòà òàêòèðîâàíèÿ ÷àñòîòíûõ âõîäîâ
CPU_INT32U pclk_freq;
CPU_INT32U rld_cnts;
@ -253,31 +483,30 @@ void InitImpInput (void)
OS_CPU_SR cpu_sr = 0;
#endif
OnChangeCoinPulseLen();
OnChangeCashPulseLen();
OnChangeBankPulseLen();
OnChangeHopperPulseLen();
OS_ENTER_CRITICAL();
// íàçíà÷èì âñå íîæêè
InitInputPorts();
PCONP_bit.PCTIM3 = 1;
PCLKSEL1_bit.PCLK_TIMER3 = 2;
PINSEL1_bit.P0_23 = 0x3;
PINMODE1_bit.P0_23 = 0;
FIO0DIR_bit.P0_23 = 0;
FIO0MASK_bit.P0_23 = 0;
PINSEL1_bit.P0_24 = 0x3;
PINMODE1_bit.P0_24 = 0;
FIO0DIR_bit.P0_24 = 0;
FIO0MASK_bit.P0_24 = 0;
pclk_freq = BSP_CPU_PclkFreq(23);
rld_cnts = pclk_freq / INPUT_CAPTURE_FREQ;
rld_cnts = pclk_freq / INPUT_CAPTURE_FREQ / 2;
T3CTCR_bit.CTM = 0;
T3CTCR_bit.CIS = 0; // select CAP3.0 input
T3PR = rld_cnts-1;
T3MCR = 0;
T3CCR = 0x3F;
T3MR0 = 1;
T3MCR = 3;
T3CCR = 0x00;
T3EMR = 0;
T3TCR = 0x03;
T3TCR = 0x01;
@ -288,7 +517,7 @@ void InitImpInput (void)
VICINTENABLE = (1 << VIC_TIMER3);
T3IR = 0xFF;
OS_EXIT_CRITICAL();
}

View File

@ -19,6 +19,13 @@ extern CPU_INT32U GetCashCount(void);
extern CPU_INT32U GetResetCashCount(void);
extern void SetCashPulseParam(CPU_INT32U pulse, CPU_INT32U pause);
#define BIT(bit) (1UL << (bit))
#define SETBIT(Val,bit) ((Val) |= BIT(bit))
#define CLRBIT(Val,bit) ((Val) &= ~BIT(bit))
#define XORBIT(Val,bit) ((Val) ^= BIT(bit))
#define TSTBIT(Val,bit) ((Val) & BIT(bit))
#endif //#ifndef _COIN_H_

View File

@ -10,7 +10,7 @@
<Static>
<Workspace>
<ColumnWidths>
<Column0>210</Column0>
<Column0>177</Column0>
<Column1>27</Column1>
<Column2>27</Column2>
<Column3>27</Column3>
@ -76,75 +76,83 @@
<Factory>TextEditor</Factory>
<Filename>$WS_DIR$\PROJECT\app\app_serv.c</Filename>
<XPos>0</XPos>
<YPos>292</YPos>
<SelStart>17841</SelStart>
<SelEnd>17858</SelEnd>
</Tab>
<Tab>
<Factory>TextEditor</Factory>
<Filename>$WS_DIR$\PROJECT\services\ftp_client.c</Filename>
<XPos>0</XPos>
<YPos>735</YPos>
<SelStart>21346</SelStart>
<SelEnd>21346</SelEnd>
</Tab>
<Tab>
<Factory>TextEditor</Factory>
<Filename>$WS_DIR$\PROJECT\app\host_app.c</Filename>
<XPos>0</XPos>
<YPos>272</YPos>
<SelStart>7189</SelStart>
<SelEnd>7189</SelEnd>
</Tab>
<Tab>
<Factory>TextEditor</Factory>
<Filename>$WS_DIR$\PROJECT\app\ftp_app.c</Filename>
<XPos>0</XPos>
<YPos>3</YPos>
<SelStart>55</SelStart>
<SelEnd>55</SelEnd>
</Tab>
<Tab>
<Factory>TextEditor</Factory>
<Filename>$WS_DIR$\PROJECT\app\host_app.h</Filename>
<XPos>0</XPos>
<YPos>0</YPos>
<SelStart>776</SelStart>
<SelEnd>776</SelEnd>
</Tab>
<Tab>
<Factory>TextEditor</Factory>
<Filename>$WS_DIR$\PROJECT\drivers\lcd\lcd.c</Filename>
<XPos>0</XPos>
<YPos>457</YPos>
<SelStart>11064</SelStart>
<SelEnd>11064</SelEnd>
<YPos>566</YPos>
<SelStart>18843</SelStart>
<SelEnd>18843</SelEnd>
</Tab>
<Tab>
<Factory>TextEditor</Factory>
<Filename>$WS_DIR$\PROJECT\services\validator.c</Filename>
<XPos>0</XPos>
<YPos>285</YPos>
<SelStart>10320</SelStart>
<SelEnd>10336</SelEnd>
<YPos>338</YPos>
<SelStart>8384</SelStart>
<SelEnd>8384</SelEnd>
</Tab>
<Tab>
<Factory>TextEditor</Factory>
<Filename>$WS_DIR$\OS\app\app.c</Filename>
<Filename>$WS_DIR$\PROJECT\services\coin.c</Filename>
<XPos>0</XPos>
<YPos>33</YPos>
<SelStart>1131</SelStart>
<SelEnd>1131</SelEnd>
<YPos>221</YPos>
<SelStart>5327</SelStart>
<SelEnd>5327</SelEnd>
</Tab>
<ActiveTab>2</ActiveTab>
<Tab>
<Factory>TextEditor</Factory>
<Filename>$WS_DIR$\PROJECT\menu\menu.h</Filename>
<Filename>$WS_DIR$\PROJECT\services\coin.h</Filename>
<XPos>0</XPos>
<YPos>0</YPos>
<SelStart>314</SelStart>
<SelEnd>314</SelEnd>
<SelStart>741</SelStart>
<SelEnd>741</SelEnd>
</Tab>
<Tab>
<Factory>TextEditor</Factory>
<Filename>$WS_DIR$\PROJECT\services\time.c</Filename>
<XPos>0</XPos>
<YPos>55</YPos>
<SelStart>1532</SelStart>
<SelEnd>1532</SelEnd>
</Tab>
<Tab>
<Factory>TextEditor</Factory>
<Filename>$WS_DIR$\PROJECT\drivers\ccnet\CCRSProtocol.h</Filename>
<XPos>0</XPos>
<YPos>0</YPos>
<SelStart>434</SelStart>
<SelEnd>434</SelEnd>
</Tab>
<Tab>
<Factory>TextEditor</Factory>
<Filename>$WS_DIR$\PROJECT\app\app_serv.h</Filename>
<XPos>0</XPos>
<YPos>27</YPos>
<SelStart>1127</SelStart>
<SelEnd>1127</SelEnd>
</Tab>
<Tab>
<Factory>TextEditor</Factory>
<Filename>$WS_DIR$\PROJECT\data\datadesc.h</Filename>
<XPos>0</XPos>
<YPos>201</YPos>
<SelStart>7402</SelStart>
<SelEnd>7402</SelEnd>
</Tab>
<Tab>
<Factory>TextEditor</Factory>
<Filename>$WS_DIR$\PROJECT\data\datadesc.c</Filename>
<XPos>0</XPos>
<YPos>136</YPos>
<SelStart>6348</SelStart>
<SelEnd>6348</SelEnd>
</Tab>
<Tab>
<Factory>TextEditor</Factory>
<Filename>$WS_DIR$\OS\bsp\iolpc2368.h</Filename>
<XPos>0</XPos>
<YPos>797</YPos>
<SelStart>17962</SelStart>
<SelEnd>17962</SelEnd>
</Tab>
<ActiveTab>8</ActiveTab>
</Pane>
<ActivePane>0</ActivePane>
<Sizes>
@ -175,16 +183,16 @@
<Rect>
<Top>-2</Top>
<Left>-2</Left>
<Bottom>498</Bottom>
<Right>301</Right>
<Bottom>517</Bottom>
<Right>268</Right>
<x>-2</x>
<y>-2</y>
<xscreen>200</xscreen>
<yscreen>200</yscreen>
<sizeHorzCX>146413</sizeHorzCX>
<sizeHorzCY>275862</sizeHorzCY>
<sizeVertCX>221816</sizeVertCX>
<sizeVertCY>689655</sizeVertCY>
<sizeVertCX>197657</sizeVertCX>
<sizeVertCY>715862</sizeVertCY>
</Rect>
</Wnd2>
</Sizes>
@ -202,14 +210,14 @@
<Rect>
<Top>-2</Top>
<Left>-2</Left>
<Bottom>182</Bottom>
<Bottom>163</Bottom>
<Right>1368</Right>
<x>-2</x>
<y>-2</y>
<xscreen>1370</xscreen>
<yscreen>184</yscreen>
<yscreen>165</yscreen>
<sizeHorzCX>1002928</sizeHorzCX>
<sizeHorzCY>253793</sizeHorzCY>
<sizeHorzCY>227586</sizeHorzCY>
<sizeVertCX>146413</sizeVertCX>
<sizeVertCY>275862</sizeVertCY>
</Rect>

View File

@ -1734,6 +1734,10 @@
</tool>
</outputs>
<inputs>
<tool>
<name>BICOMP</name>
<file> 100 299 295 300 296 297 298 242 243 311 314 313 304 308 301 306 315 302 305 303 316 312 88 309 104 98 85 107 94 97 99 115 106 307 317 86 206 230 1 84 192 227 220 222 209 225 199 219 233 92 205 112 116 195 118 232 212 226 223 197 191 218 213 271 273 279 246 255 290 288 266 291 258 252 272 210 253 236</file>
</tool>
<tool>
<name>ICCARM</name>
<file> 100 299 295 300 296 338 297 298 242 243 311 314 313 304 308 301 306 315 302 305 303 316 312 88 309 104 98 85 107 94 97 99 115 106 307 317 86 206 230 1 84 192 227 220 222 209 225 199 219 233 92 205 112 116 195 118 232 212 226 223 197 191 218 213 271 273 279 246 255 290 288 266 291 258 252 272 210 253 236</file>