summaryrefslogtreecommitdiff
path: root/rs422lib/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'rs422lib/main.c')
-rw-r--r--rs422lib/main.c67
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();
}