diff options
author | Joe Zhao <ztuowen@gmail.com> | 2014-05-23 15:36:51 +0800 |
---|---|---|
committer | Joe Zhao <ztuowen@gmail.com> | 2014-05-23 15:36:51 +0800 |
commit | 07d2ace8b4771e2ad48d4a9e6bf43a2022a25fac (patch) | |
tree | 8f76b7e3ce69ceb6d7822ec9aa8977a830d10c8d /rs422lib/main.c | |
parent | d9c0c179fc4636b8927dd2c8b2cb29d573094731 (diff) | |
download | rsbus-07d2ace8b4771e2ad48d4a9e6bf43a2022a25fac.tar.gz rsbus-07d2ace8b4771e2ad48d4a9e6bf43a2022a25fac.tar.bz2 rsbus-07d2ace8b4771e2ad48d4a9e6bf43a2022a25fac.zip |
Added SYSSTOP & MSTATE macro
New example main.c
Diffstat (limited to 'rs422lib/main.c')
-rw-r--r-- | rs422lib/main.c | 67 |
1 files changed, 65 insertions, 2 deletions
diff --git a/rs422lib/main.c b/rs422lib/main.c index 2a2517f..34cb03e 100644 --- a/rs422lib/main.c +++ b/rs422lib/main.c @@ -4,6 +4,7 @@ #include"sysctl.h" int cnt=0; +int cnt2=0; void port_init(void) { @@ -13,7 +14,52 @@ void port_init(void) void received(unsigned char* str,unsigned int len) { - rsbus_w(0,str,len); + unsigned char ch; + switch (str[0]) + { + case 1:// start + if (!MSTATE) + { + SWITCH_STATE(ST_RUN); + cnt2=0; + STATE(0)=0; + SYSCALL(TEST); + } + RETSTATE; + break; + case 2:// Get Res + if (MSTATE&ST_RUN) + { + ch=(unsigned char)(cnt2-STATE(0)); + rsbus_w(0,&ch,1); + } + else + if (MSTATE&ST_RES) + { + SWITCH_STATE(ST_REST); + ch=(unsigned char)(cnt2); + rsbus_w(0,&ch,1); + } + else + RETSTATE; + break; + case 3:// Stop + if (MSTATE&ST_RUN) + { + SWITCH_STATE(ST_REST); + SYSSTOP(TEST); + } + RETSTATE; + break; + case 4:// Block + if (!MSTATE) + { + cnt2=0; + SWITCH_STATE(ST_BUSY); + } + RETSTATE; + } + //rsbus_w(0,str,len); } // Timer A0 interrupt service routine @@ -24,13 +70,19 @@ __interrupt void Timer_A0 (void) if (cnt==25) { STATE(0)=(STATE(0)+1)&0xFF; + if ((MSTATE&ST_BUSY) && !(MSTATE&ST_RES)) + { + ++cnt2; + if (STATE(0)>200) + SWITCH_STATE(ST_BUSY|ST_RES); + } cnt=0; P1OUT^=BIT6; } } //TIMER A0 initialize - -// desired value: 5ms +// desired value: 40ms void TimerA0_Init(void) { // Configure TimerA0 @@ -60,9 +112,20 @@ void init_devices(void) _BIS_SR(GIE); } +// Clock tick using cycle estimation +void basic_running_ex() +{ + int i; + for (i=950;i>0;--i) + delay_ms(1); + ++cnt2; + SYSCALL(TEST); +} + void main(void) { init_devices(); + sysctl_reghdlr(TEST,basic_running_ex); while(1) sysroutine(); } |