-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsimple_master.h
More file actions
134 lines (104 loc) · 3.33 KB
/
simple_master.h
File metadata and controls
134 lines (104 loc) · 3.33 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
#ifndef SIMPLE_MASTER_H
#define SIMPLE_MASTER_H
// ===========================================================
// CONFIGURACIÓN DEL DRIVER (puede redefinirse desde main)
// ===========================================================
#define SMODBUS_INT_RDA 7777
#define SMODBUS_INT_RDA2 6666
#define SMODBUS_INT_RDA3 5555
#define SMODBUS_INT_RDA4 4444
#define SMODBUS_INT_RDA5 3333
// Si no se define en main, se aplican defaults
#ifndef SMODBUS_SERIAL_INT
#define SMODBUS_SERIAL_INT SMODBUS_INT_RDA // Select between external interrupt
#endif
#ifndef SMODBUS_BAUD
#define SMODBUS_BAUD 9600
#endif
#ifndef SMODBUS_TX_PIN
#define SMODBUS_TX_PIN PIN_C6
#endif
#ifndef SMODBUS_RX_PIN
#define SMODBUS_RX_PIN PIN_C7
#endif
#ifndef SMODBUS_DE_PIN
#define SMODBUS_DE_PIN 0
#endif
#ifndef SMODBUS_RE_PIN
#define SMODBUS_RE_PIN 0
#endif
#ifndef SMODBUS_RING_SIZE
#define SMODBUS_RING_SIZE 128
#endif
#ifndef SMODBUS_TIMEOUT_MS
#define SMODBUS_TIMEOUT_MS 200
#endif
#ifndef SMODBUS_GAP_MS
#define SMODBUS_GAP_MS 5
#endif
#ifndef SMODBUS_DEBUG
#define SMODBUS_DEBUG 0
#endif
// ===========================================================
// ENUM DE ESTADOS DEL DRIVER
// ===========================================================
typedef enum {
SMODBUS_OK = 0,
SMODBUS_ERR_TIMEOUT,
SMODBUS_ERR_CRC,
SMODBUS_ERR_FRAME,
SMODBUS_ERR_EXCEPTION
} smodbus_status_t;
// =============================================
// DEBUG (activar con #define SMODBUS_DEBUG 1)
// =============================================
#ifndef SMODBUS_DEBUG
#define SMODBUS_DEBUG 0
#endif
// Salida de debug (usa printf de CCS)
void smodbus_debug_hex(char *label, unsigned int8 *data, unsigned int8 len);
void smodbus_debug_tx(unsigned int8 *frame, unsigned int8 len);
void smodbus_debug_rx(unsigned int8 *frame, unsigned int8 len);
// ===========================================================
// API PÚBLICA DEL SIMPLE MASTER
// ===========================================================
// ---- Inicialización general del driver ----
void smodbus_init(void);
// ---- Buffer y flags del receptor ----
int1 smodbus_rx_available(void);
unsigned int8 smodbus_rx_get(void);
void smodbus_rx_flush(void);
int1 smodbus_rx_overflowed(void);
// ---- Primitivas Modbus RTU ----
smodbus_status_t smodbus_read_holding(
unsigned int8 slave,
unsigned int16 start_address,
unsigned int16 quantity,
unsigned int16 *dest
);
smodbus_status_t smodbus_read_holding_u16(
unsigned int8 slave,
unsigned int16 reg_address,
unsigned int16 *value
);
smodbus_status_t smodbus_write_u16(
unsigned int8 slave,
unsigned int16 reg_address,
unsigned int16 value
);
// 0x04: Read Input Registers
smodbus_status_t smodbus_read_input(unsigned int8 slave,
unsigned int16 start_address,
unsigned int16 quantity,
unsigned int16 *dest);
// ===========================================================
// NOTA IMPORTANTE
//
// El usuario debe incluir master_simple.c en su proyecto
//
// Ejemplo:
// #define SMODBUS_BAUD 115200
// #include "master_simple.c"
//
// ===========================================================
#endif // SIMPLE_MASTER_H