Erick / Mbed 2 deprecated ICE-F412

Dependencies:   mbed-rtos mbed

Committer:
jmarkel44
Date:
Tue Jan 24 19:06:45 2017 +0000
Revision:
1:b2e90cda7a5a
Parent:
0:61364762ee0e
Port from IAR F412 project

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jmarkel44 0:61364762ee0e 1 #ifndef _MOD_H_
jmarkel44 0:61364762ee0e 2 #define _MOD_H_
jmarkel44 0:61364762ee0e 3
jmarkel44 0:61364762ee0e 4 // -------------------------------------------------------------------------------------------------
jmarkel44 0:61364762ee0e 5 // globals
jmarkel44 0:61364762ee0e 6
jmarkel44 0:61364762ee0e 7 #define MOD_DATA 4
jmarkel44 0:61364762ee0e 8 #define MOD_IREG 60
jmarkel44 0:61364762ee0e 9 #define MOD_BAUD 19200
jmarkel44 0:61364762ee0e 10
jmarkel44 0:61364762ee0e 11 typedef struct word2byte { union
jmarkel44 0:61364762ee0e 12 {
jmarkel44 0:61364762ee0e 13 unsigned short int value;
jmarkel44 0:61364762ee0e 14 struct { unsigned char byte0; unsigned char byte1; };
jmarkel44 0:61364762ee0e 15 };}
jmarkel44 0:61364762ee0e 16 WORD2BYTE;
jmarkel44 0:61364762ee0e 17
jmarkel44 0:61364762ee0e 18 typedef struct sint2byte { union
jmarkel44 0:61364762ee0e 19 {
jmarkel44 0:61364762ee0e 20 signed long int value;
jmarkel44 0:61364762ee0e 21 struct { unsigned short int word0; unsigned short int word1; };
jmarkel44 0:61364762ee0e 22 struct { unsigned char byte0; unsigned char byte1; unsigned char byte2; unsigned char byte3; };
jmarkel44 0:61364762ee0e 23 };}
jmarkel44 0:61364762ee0e 24 SINT2BYTE;
jmarkel44 0:61364762ee0e 25
jmarkel44 0:61364762ee0e 26 typedef struct uint2byte { union
jmarkel44 0:61364762ee0e 27 {
jmarkel44 0:61364762ee0e 28 unsigned long int value;
jmarkel44 0:61364762ee0e 29 struct { unsigned short int word0; unsigned short int word1; };
jmarkel44 0:61364762ee0e 30 struct { unsigned char byte0; unsigned char byte1; unsigned char byte2; unsigned char byte3; };
jmarkel44 0:61364762ee0e 31 };}
jmarkel44 0:61364762ee0e 32 UINT2BYTE;
jmarkel44 0:61364762ee0e 33
jmarkel44 0:61364762ee0e 34 typedef struct float2byte { union
jmarkel44 0:61364762ee0e 35 {
jmarkel44 0:61364762ee0e 36 float value;
jmarkel44 0:61364762ee0e 37 struct { unsigned short int word0; unsigned short int word1; };
jmarkel44 0:61364762ee0e 38 struct { unsigned char byte0; unsigned char byte1; unsigned char byte2; unsigned char byte3; };
jmarkel44 0:61364762ee0e 39 };}
jmarkel44 0:61364762ee0e 40 FLOAT2BYTE;
jmarkel44 0:61364762ee0e 41
jmarkel44 0:61364762ee0e 42 typedef struct float2uint { union
jmarkel44 0:61364762ee0e 43 {
jmarkel44 0:61364762ee0e 44 float value;
jmarkel44 0:61364762ee0e 45 unsigned long int uint_value;
jmarkel44 0:61364762ee0e 46 };}
jmarkel44 0:61364762ee0e 47 FLOAT2UINT;
jmarkel44 0:61364762ee0e 48
jmarkel44 0:61364762ee0e 49
jmarkel44 0:61364762ee0e 50 extern unsigned short int mod_data[MOD_DATA];
jmarkel44 0:61364762ee0e 51 extern unsigned short int mod_ireg[MOD_IREG];
jmarkel44 0:61364762ee0e 52
jmarkel44 0:61364762ee0e 53 extern int mod_verbose;
jmarkel44 0:61364762ee0e 54
jmarkel44 0:61364762ee0e 55 // -------------------------------------------------------------------------------------------------
jmarkel44 0:61364762ee0e 56 // modbus standard communication structures: (from slave perspective)
jmarkel44 0:61364762ee0e 57 //
jmarkel44 0:61364762ee0e 58 // MOD_FUNC_GET_COIL (NBYT = total bytes of data transmitted)
jmarkel44 0:61364762ee0e 59 // MOD_FUNC_GET_DISC
jmarkel44 0:61364762ee0e 60 //
jmarkel44 0:61364762ee0e 61 // byte: 0 1 2 3 4 5 6 7
jmarkel44 0:61364762ee0e 62 // received: ADDR FUNC SREG-H SREG-L NREG-H NREG-L RCRC-L RCRC-H
jmarkel44 0:61364762ee0e 63 // transmit: ADDR FUNC NBYT DATA-H DATA-L TCRC-L TCRC-H NULL
jmarkel44 0:61364762ee0e 64 //
jmarkel44 0:61364762ee0e 65 // MOD_FUNC_GET_IREG (NBYT = total bytes of data transmitted)
jmarkel44 0:61364762ee0e 66 // MOD_FUNC_GET_HREG
jmarkel44 0:61364762ee0e 67 //
jmarkel44 0:61364762ee0e 68 // byte: 0 1 2 3 4 5 6 7
jmarkel44 0:61364762ee0e 69 // received: ADDR FUNC SREG-H SREG-L NREG-H NREG-L RCRC-L RCRC-H
jmarkel44 0:61364762ee0e 70 // transmit: ADDR FUNC NBYT DATA-H DATA-L TCRC-L TCRC-H NULL
jmarkel44 0:61364762ee0e 71 //
jmarkel44 0:61364762ee0e 72 // MOD_FUNC_SET_COIL
jmarkel44 0:61364762ee0e 73 //
jmarkel44 0:61364762ee0e 74 // byte: 0 1 2 3 4 5 6 7 8
jmarkel44 0:61364762ee0e 75 // received: ADDR FUNC SREG-H SREG-L DATA-H DATA-L RCRC-L RCRC-H
jmarkel44 0:61364762ee0e 76 // transmit: ADDR FUNC SREG-H SREG-L DATA-H DATA-L TCRC-L TCRC-H NULL
jmarkel44 0:61364762ee0e 77 //
jmarkel44 0:61364762ee0e 78 // MOD_FUNC_SET_COILS
jmarkel44 0:61364762ee0e 79 //
jmarkel44 0:61364762ee0e 80 // byte: 0 1 2 3 4 5 6 7 8 9 10
jmarkel44 0:61364762ee0e 81 // received: ADDR FUNC SREG-H SREG-L NREG-H NREG-L NBYT DATA-H DATA-L RCRC-L RCRC-H
jmarkel44 0:61364762ee0e 82 // transmit: ADDR FUNC SREG-H SREG-L NREG-H NREG-L TCRC-L TCRC-H NULL
jmarkel44 0:61364762ee0e 83 //
jmarkel44 0:61364762ee0e 84 // MOD_FUNC_SET_HREG
jmarkel44 0:61364762ee0e 85 //
jmarkel44 0:61364762ee0e 86 // byte: 0 1 2 3 4 5 6 7 8
jmarkel44 0:61364762ee0e 87 // received: ADDR FUNC SREG-H SREG-L DATA-H DATA-L RCRC-L RCRC-H
jmarkel44 0:61364762ee0e 88 // transmit: ADDR FUNC SREG-H SREG-L DATA-H DATA-L TCRC-L TCRC-H NULL
jmarkel44 0:61364762ee0e 89 //
jmarkel44 0:61364762ee0e 90 // MOD_FUNC_SET_HREGS
jmarkel44 0:61364762ee0e 91 //
jmarkel44 0:61364762ee0e 92 // byte: 0 1 2 3 4 5 6 7 8 9 10
jmarkel44 0:61364762ee0e 93 // received: ADDR FUNC SREG-H SREG-L NREG-H NREG-L NBYT DATA-H DATA-L RCRC-L RCRC-H
jmarkel44 0:61364762ee0e 94 // transmit: ADDR FUNC SREG-H SREG-L NREG-H NREG-L TCRC-L TCRC-H NULL
jmarkel44 0:61364762ee0e 95 //
jmarkel44 0:61364762ee0e 96 // response after error (EFUNC = FUNC + 0x80)
jmarkel44 0:61364762ee0e 97 //
jmarkel44 0:61364762ee0e 98 // byte: 0 1 2 3 4 5
jmarkel44 0:61364762ee0e 99 // transmit: ADDR EFUNC ERROR TCRC-L TCRC-H NULL
jmarkel44 0:61364762ee0e 100 //
jmarkel44 0:61364762ee0e 101 // -----------------------------------------------------------------------------
jmarkel44 0:61364762ee0e 102 // modbus definitions
jmarkel44 0:61364762ee0e 103
jmarkel44 0:61364762ee0e 104 enum // function codes
jmarkel44 0:61364762ee0e 105 {
jmarkel44 0:61364762ee0e 106 MOD_FUNC_00,
jmarkel44 0:61364762ee0e 107 MOD_FUNC_GET_COIL, // 01: read coil status
jmarkel44 0:61364762ee0e 108 MOD_FUNC_GET_DISC, // 02: read discrete inputs
jmarkel44 0:61364762ee0e 109 MOD_FUNC_GET_HREG, // 03: read holding registers
jmarkel44 0:61364762ee0e 110 MOD_FUNC_GET_IREG, // 04: read input registers
jmarkel44 0:61364762ee0e 111 MOD_FUNC_SET_COIL, // 05: force single coil
jmarkel44 0:61364762ee0e 112 MOD_FUNC_SET_HREG, // 06: preset single register
jmarkel44 0:61364762ee0e 113 MOD_FUNC_07,
jmarkel44 0:61364762ee0e 114 MOD_FUNC_08,
jmarkel44 0:61364762ee0e 115 MOD_FUNC_09,
jmarkel44 0:61364762ee0e 116 MOD_FUNC_10,
jmarkel44 0:61364762ee0e 117 MOD_FUNC_11,
jmarkel44 0:61364762ee0e 118 MOD_FUNC_12,
jmarkel44 0:61364762ee0e 119 MOD_FUNC_13,
jmarkel44 0:61364762ee0e 120 MOD_FUNC_14,
jmarkel44 0:61364762ee0e 121 MOD_FUNC_SET_COILS, // 15: force multiple coils
jmarkel44 0:61364762ee0e 122 MOD_FUNC_SET_HREGS, // 16: preset multiple registers
jmarkel44 0:61364762ee0e 123 MOD_FUNC_NUM
jmarkel44 0:61364762ee0e 124 };
jmarkel44 0:61364762ee0e 125
jmarkel44 0:61364762ee0e 126 enum // error codes ( * = used by Nubio )
jmarkel44 0:61364762ee0e 127 {
jmarkel44 0:61364762ee0e 128 MOD_ERROR_NONE,
jmarkel44 0:61364762ee0e 129 MOD_ERROR_ILL_FUNC, // 01: * slave received illegal function code
jmarkel44 0:61364762ee0e 130 MOD_ERROR_ILL_ADDR, // 02: * slave received illegal register address
jmarkel44 0:61364762ee0e 131 MOD_ERROR_ILL_DATA, // 03: * slave received illegal register value
jmarkel44 0:61364762ee0e 132 MOD_ERROR_SLAVE_FAIL, // 04: * slave device-specific failure
jmarkel44 0:61364762ee0e 133 MOD_ERROR_SLAVE_ACK, // 05: * slave ACK
jmarkel44 0:61364762ee0e 134 MOD_ERROR_SLAVE_BUSY, // 06: slave is busy
jmarkel44 0:61364762ee0e 135 MOD_ERROR_SLAVE_NACK, // 07: * slave NACK (Nubio returns this for CRC error)
jmarkel44 0:61364762ee0e 136 MOD_ERROR_SLAVE_PARITY, // 08: slave memory parity error
jmarkel44 0:61364762ee0e 137 MOD_ERROR_RX_TIMEOUT, // 09: master receive timeout
jmarkel44 0:61364762ee0e 138 MOD_ERROR_TX_TIMEOUT, // 10: master transmit timeout
jmarkel44 0:61364762ee0e 139 MOD_ERROR_CRC, // 11: master CRC error
jmarkel44 0:61364762ee0e 140 MOD_ERROR_NUM
jmarkel44 0:61364762ee0e 141 };
jmarkel44 0:61364762ee0e 142
jmarkel44 0:61364762ee0e 143 // -------------------------------------------------------------------------------------------------
jmarkel44 0:61364762ee0e 144 // function prototypes
jmarkel44 0:61364762ee0e 145
jmarkel44 0:61364762ee0e 146 void mod_init(void);
jmarkel44 0:61364762ee0e 147 void mod_clear(void);
jmarkel44 0:61364762ee0e 148
jmarkel44 0:61364762ee0e 149 void mod_process(void);
jmarkel44 0:61364762ee0e 150
jmarkel44 0:61364762ee0e 151 void mod_ireg_dump(void);
jmarkel44 0:61364762ee0e 152
jmarkel44 0:61364762ee0e 153 unsigned short int mod_calc_crc(unsigned char *buffer, int length);
jmarkel44 0:61364762ee0e 154
jmarkel44 0:61364762ee0e 155 int mod_read(int inp_addr, int inp_func, int inp_sreg, int inp_nreg, unsigned char *rd_buf);
jmarkel44 0:61364762ee0e 156 int mod_write(int inp_addr, int inp_func, int inp_sreg, int inp_nreg, unsigned char *xmt_buf);
jmarkel44 0:61364762ee0e 157
jmarkel44 0:61364762ee0e 158 // -------------------------------------------------------------------------------------------------
jmarkel44 0:61364762ee0e 159
jmarkel44 0:61364762ee0e 160 #endif // _MOD_H_