diff options
author | Joe Zhao <ztuowen@gmail.com> | 2014-05-16 16:41:30 +0800 |
---|---|---|
committer | Joe Zhao <ztuowen@gmail.com> | 2014-05-16 16:41:30 +0800 |
commit | b038c3b87564e9f4acac0019b18fd6d20692ac38 (patch) | |
tree | 4e795aeb88fbb67f6ecdfcdc0d75fdf2e15150bb | |
parent | d78e451d6bb81823c77d421e327a738bc54dc943 (diff) | |
download | rsbus-b038c3b87564e9f4acac0019b18fd6d20692ac38.tar.gz rsbus-b038c3b87564e9f4acac0019b18fd6d20692ac38.tar.bz2 rsbus-b038c3b87564e9f4acac0019b18fd6d20692ac38.zip |
Tangential change
-rw-r--r-- | rs422lib/precomp.h | 2 | ||||
-rw-r--r-- | rs422lib/rsbus.c | 16 | ||||
-rw-r--r-- | rs422lib/rsbus.h | 16 |
3 files changed, 18 insertions, 16 deletions
diff --git a/rs422lib/precomp.h b/rs422lib/precomp.h index 3c7c016..11f64be 100644 --- a/rs422lib/precomp.h +++ b/rs422lib/precomp.h @@ -19,7 +19,7 @@ #define RSADDR (1)
-#define MACTYPE (TYPE0)
+#define MACTYPE (0x00) //TYPE 0 is a dummy used for debug
// Change it in real implementation
//define delay func
diff --git a/rs422lib/rsbus.c b/rs422lib/rsbus.c index 4c0fcb2..2b548a6 100644 --- a/rs422lib/rsbus.c +++ b/rs422lib/rsbus.c @@ -10,6 +10,11 @@ #define SYSRET (0xF0)
#define INSREP (0x0F)
+// Maximum size of receive buffer
+#define RSMAX (20)
+
+#define CODE_LEN (6)
+
unsigned char rs_rxbuf[RSMAX];
unsigned char len;
unsigned char pch;
@@ -17,7 +22,7 @@ rshdlr rxhdlr; enum rs_stat{REST,ST,ADDR,READ,DISCARD,ED,DED};
enum rs_stat rs_st=REST;
-unsigned char rs_tx[20]={STBIT1,0,RSADDR,MACTYPE};
+unsigned char rs_tx[CODE_LEN+RS_MAX]={STBIT1,0,RSADDR,MACTYPE};
volatile unsigned char tx_len;
volatile unsigned char tx_pos=255;
@@ -36,6 +41,7 @@ __interrupt void USCI0TX_ISR(void) UCA0TXBUF = rs_tx[tx_pos++]; // TX next character
}
+// Inline send for ISR
#pragma FUNC_ALWAYS_INLINE(rsbus_w_irq)
static __inline void rsbus_w_irq(unsigned char* buf,unsigned int len)
{
@@ -46,8 +52,6 @@ static __inline void rsbus_w_irq(unsigned char* buf,unsigned int len) tx_len=len+7;
unsigned int parity=MACTYPE^RSADDR;
rs_tx[1]=0; // Useless addr spec
- rs_tx[2]=RSADDR;
- rs_tx[3]=MACTYPE;
for (i=0;i<len;++i)
parity^=(rs_tx[4+i]=buf[i]);
rs_tx[4+len]=parity;
@@ -132,19 +136,19 @@ __interrupt void rsbus_rx(void) }
}
+// Send something to the rs422 bus
+// Length must not exceeds RS_MAX
void rsbus_w(int addr,unsigned char* buf,unsigned int len)
{
while (tx_pos < tx_len) // This shouldn't happen
__delay_cycles(100); // Race condition -> wait
unsigned int i;
- if (len>14)
+ if (len>RS_MAX)
return;
RSOUT |= RSPIN;
tx_len=len+7;
unsigned int parity=addr^MACTYPE^RSADDR;
rs_tx[1]=addr; // Useless addr spec
- rs_tx[2]=RSADDR;
- rs_tx[3]=MACTYPE;
for (i=0;i<len;++i)
parity^=(rs_tx[4+i]=buf[i]);
rs_tx[4+len]=parity;
diff --git a/rs422lib/rsbus.h b/rs422lib/rsbus.h index ea66148..2faf620 100644 --- a/rs422lib/rsbus.h +++ b/rs422lib/rsbus.h @@ -18,29 +18,27 @@ #include<msp430g2553.h>
#include"precomp.h"
+// MAXIMUM length to be send
+#define RS_MAX (14)
+
#define ST_BUSY (0x04)
#define ST_RUN (0x02)
#define ST_RES (0x01)
#define ST_REST (0x00)
+// Switch the machine to a new state specified above
+// This will shown on the network -> must call
#define SWITCH_STATE(STATE) (mac_stat[0]=STATE)
+// Changing the state value (unsigned char) ->
+// Available indices 0,1,2
#define STATE(X) (mac_stat[X+1])
-#define TYPE0 (0x00) //TYPE 0 is a dummy used for debug
-
-#define TYPE1 (0x01)
-#define TYPE2 (0x02)
-
#define STBIT0 (0x5B)
#define STBIT1 (0xAD)
#define EDBIT0 (0xA4)
#define EDBIT1 (0x52)
-#define TXLEN (4)
-
-#define RSMAX (20)
-
typedef void (*rshdlr)(unsigned char*,int);
void rsbus_init(rshdlr);
|