-
Notifications
You must be signed in to change notification settings - Fork 1
/
HAL.h
422 lines (378 loc) · 16.9 KB
/
HAL.h
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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
/*
* Îïèñàíèå æåëåçà
*
* Created: 08.08.2015 8:39:25
* Author: Kirill
*/
#ifndef HAL_H_
#define HAL_H_
#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdlib.h>
#include "avrlibtypes.h"
#include "bits_macros.h"
//Îñü Õ ---------------------------------------------
//Âðåìåííîå îïèñàíèå øàãîâîãî äâèãàòåëÿ íà îñè X äëÿ ìåçîíèííîé ïëàòû à9377
#define X_DIR_STEP_DRIVE_DDR DDRB
#define X_DIR_STEP_DRIVE_PORT PORTB
#define X_DIR_STEP_DRIVE_OUT PINB5
#define X_STEP_STEP_DRIVE_DDR DDRF
#define X_STEP_STEP_DRIVE_PORT PORTF
#define X_STEP_STEP_DRIVE_OUT PINF3
#define X_SIZE1_STEP_DRIVE_DDR DDRA
#define X_SIZE1_STEP_DRIVE_PORT PORTA
#define X_SIZE1_STEP_DRIVE_OUT PINA0
#define X_SIZE2_STEP_DRIVE_DDR DDRA
#define X_SIZE2_STEP_DRIVE_PORT PORTA
#define X_SIZE2_STEP_DRIVE_OUT PINA1
#define X_MONITOR_SENS_DDR DDRF //Ìîíèòîð øàãîâîãî äâèãàòåëÿ
#define X_MONITOR_SENS_OUT PORTF
#define X_MONITOR_SENS_IN PINF
#define X_MONITOR_SENS_PIN PINF2
//Äàò÷èêè
#define X_MAX_SENS_DDR DDRC
#define X_MAX_SENS_OUT PORTC
#define X_MAX_SENS_IN PINC
#define X_MAX_SENS_PIN PINC1
#define X_MIN_SENS_DDR DDRC
#define X_MIN_SENS_OUT PORTC
#define X_MIN_SENS_IN PINC
#define X_MIN_SENS_PIN PINC0
//Âñïîìîãàòåëüíûé ýíêîäåð
#define X_ENCOD1_SENS_DDR DDRD
#define X_ENCOD1_SENS_OUT PORTD
#define X_ENCOD1_SENS_IN PIND
#define X_ENCOD1_SENS_PIN PIND1
#define X_ENCOD1_SENS_INT_REG EICRA
#define X_ENCOD1_SENS_INT INT1
#define X_ENCOD1_SENS_INT_MASK EIMSK
#define X_ENCOD1_SENS_ISC0 ISC10
#define X_ENCOD1_SENS_ISC1 ISC11
#define X_ENCOD1_SENS_INT_vect INT1_vect
//Îñíîâíîé ýíêîäåð
#define X_ENCOD2_SENS_DDR DDRD
#define X_ENCOD2_SENS_OUT PORTD
#define X_ENCOD2_SENS_IN PIND
#define X_ENCOD2_SENS_PIN PIND0
#define X_ENCOD2_SENS_INT_REG EICRA
#define X_ENCOD2_SENS_INT INT0
#define X_ENCOD2_SENS_INT_MASK EIMSK
#define X_ENCOD2_SENS_ISC0 ISC00
#define X_ENCOD2_SENS_ISC1 ISC01
#define X_ENCOD2_SENS_INT_vect INT0_vect
//Îñü Y ---------------------------------------------
//Øàãîâûé äâèãàòåëü
#define Y_DIR_STEP_DRIVE_DDR DDRG
#define Y_DIR_STEP_DRIVE_PORT PORTG
#define Y_DIR_STEP_DRIVE_OUT PORTG0
#define Y_STEP_STEP_DRIVE_DDR DDRG
#define Y_STEP_STEP_DRIVE_PORT PORTG
#define Y_STEP_STEP_DRIVE_OUT PORTG1
#define Y_SIZE1_STEP_DRIVE_DDR DDRG
#define Y_SIZE1_STEP_DRIVE_PORT PORTG
#define Y_SIZE1_STEP_DRIVE_OUT PORTG2
#define Y_SIZE2_STEP_DRIVE_DDR DDRG
#define Y_SIZE2_STEP_DRIVE_PORT PORTG
#define Y_SIZE2_STEP_DRIVE_OUT PORTG3
#define Y_ENABL_STEP_DRIVE_DDR DDRG
#define Y_ENABL_STEP_DRIVE_PORT PORTG
#define Y_ENABL_STEP_DRIVE_OUT PORTG4
#define Y_MONITOR_SENS_DDR DDRE //Ìîíèòîð øàãîâîãî äâèãàòåëÿ
#define Y_MONITOR_SENS_OUT PORTE
#define Y_MONITOR_SENS_IN PINE
#define Y_MONITOR_SENS_PIN PINE5
#define _YAxisOn() ClearBit(Y_ENABL_STEP_DRIVE_PORT, Y_ENABL_STEP_DRIVE_OUT)
#define _YAxisOff() SetBit(Y_ENABL_STEP_DRIVE_PORT, Y_ENABL_STEP_DRIVE_OUT)
//Äàò÷èêè
#define Y_MAX_SENS_DDR DDRC
#define Y_MAX_SENS_OUT PORTC
#define Y_MAX_SENS_IN PINC
#define Y_MAX_SENS_PIN PINC2
#define Y_MIN_SENS_DDR DDRC
#define Y_MIN_SENS_OUT PORTC
#define Y_MIN_SENS_IN PINC
#define Y_MIN_SENS_PIN PINC3
#define Y_ENCOD1_SENS_DDR DDRE
#define Y_ENCOD1_SENS_OUT PORTE
#define Y_ENCOD1_SENS_IN PINE
#define Y_ENCOD1_SENS_PIN PINE6
#define Y_ENCOD1_SENS_INT_REG EICRB
#define Y_ENCOD1_SENS_INT INT6
#define Y_ENCOD1_SENS_INT_MASK EIMSK
#define Y_ENCOD1_SENS_ISC0 ISC60
#define Y_ENCOD1_SENS_ISC1 ISC61
#define Y_ENCOD1_SENS_INT_vect INT6_vect
#define Y_ENCOD2_SENS_DDR DDRE
#define Y_ENCOD2_SENS_OUT PORTE
#define Y_ENCOD2_SENS_IN PINE
#define Y_ENCOD2_SENS_PIN PINE7
#define Y_ENCOD2_SENS_INT_REG EICRB
#define Y_ENCOD2_SENS_INT INT7
#define Y_ENCOD2_SENS_INT_MASK EIMSK
#define Y_ENCOD2_SENS_ISC0 ISC70
#define Y_ENCOD2_SENS_ISC1 ISC71
#define Y_ENCOD2_SENS_INT_vect INT7_vect
//Îñü Z ---------------------------------------------
//Äâèãàòåëü
#define Z_DRIVE_PLUS_DDR DDRA
#define Z_DRIVE_PLUS_PORT PORTA
#define Z_DRIVE_PLUS_OUT PORTA2
#define Z_DRIVE_MINUS_DDR DDRA
#define Z_DRIVE_MINUS_PORT PORTA
#define Z_DRIVE_MINUS_OUT PORTA3
#define Z_DRIVE_PWM_DDR DDRE //ØÈÌ íà îñü Z
#define Z_DRIVE_PWM_OUT PORTE3
#define Z_DRIVE_PWM_PORT PORTE
#define Z_DRIVE_PWM_REG_A TCCR3A
#define Z_DRIVE_PWM_REG_B TCCR3B
#define Z_DRIVE_PWM_REG_C TCCR3C
#define Z_DRIVE_PWM_COM_0 COM3A0
#define Z_DRIVE_PWM_COM_1 COM3A1
#define Z_DRIVE_WGM0 WGM30
#define Z_DRIVE_WGM1 WGM31
#define Z_DRIVE_WGM2 WGM32
#define Z_DRIVE_WGM3 WGM33
#define Z_DRIVE_CS0 CS30
#define Z_DRIVE_CS1 CS31
#define Z_DRIVE_CS2 CS32
#define Z_DRIVE_TCNT TCNT3
#define Z_DRIVE_OCR OCR3A
//Äàò÷èêè
#define Z_HIGHT_SENS_DDR DDRC
#define Z_HIGHT_SENS_OUT PORTC
#define Z_HIGHT_SENS_IN PINC
#define Z_HIGHT_SENS_PIN PINC4
#define Z_LOW_SENS_DDR DDRC
#define Z_LOW_SENS_OUT PORTC
#define Z_LOW_SENS_IN PINC
#define Z_LOW_SENS_PIN PINC6
#define Z_ENCOD_SENS_DDR DDRC
#define Z_ENCOD_SENS_OUT PORTC
#define Z_ENCOD_SENS_IN PINC
#define Z_ENCOD_SENS_PIN PINC5
//Ñâåðëî ---------------------------------------------
#define DRILL_DRIVE_PLUS_DDR DDRA
#define DRILL_DRIVE_PLUS_PORT PORTA
#define DRILL_DRIVE_PLUS_OUT PORTA4
#define DRILL_DRIVE_MINUS_DDR DDRA
#define DRILL_DRIVE_MINUS_PORT PORTA
#define DRILL_DRIVE_MINUS_OUT PORTA5
#define DRILL_DRIVE_PWM_DDR DDRB //ØÈÌ íà ñâåðëî
#define DRILL_DRIVE_PWM_OUT PORTB4
#define DRILL_DRIVE_PWM_PORT PORTB
#define DRILL_DRIVE_PWM_REG_A TCCR0
#define DRILL_DRIVE_PWM_COM_0 COM00
#define DRILL_DRIVE_PWM_COM_1 COM01
#define DRILL_DRIVE_WGM0 WGM00
#define DRILL_DRIVE_WGM1 WGM01
#define DRILL_DRIVE_CS0 CS00
#define DRILL_DRIVE_CS1 CS01
#define DRILL_DRIVE_CS2 CS02
#define DRILL_DRIVE_TCNT TCNT0
#define DRILL_DRIVE_OCR OCR0
//Êëàâèàòóðà ---------------------------------------------
//Ñïåöèàëüíàÿ îòäåëüíàÿ êëàâèøà ÑÒÎÏ íà îòäåëüíîì ïðåðûâàíèè
#define KEY_STOP_DDR DDRE
#define KEY_STOP_PORT_OUT PORTE
#define KEY_STOP_PORT_IN PINE
#define KEY_STOP_PIN PORTE4
#define KEY_STOP_INT_REG EICRB //Ïðåðûâàíèå äîëæíî áûòü ïî ïåðåõîäó îò 1 ê 0
#define KEY_STOP_INT INT4
#define KEY_STOP_INT_MASK EIMSK
#define KEY_STOP_ISC0 ISC40
#define KEY_STOP_ISC1 ISC41
#define KEY_STOP_INT_vect INT4_vect
//Ìàòðè÷íàÿ êëàâèàòóðà 3õ4
#define KEY_COL1_DDR DDRE //Êîëîíêè - ââîä
#define KEY_COL1_PORT_OUT PORTE
#define KEY_COL1_PORT_IN PINE
#define KEY_COL1_PIN PINE2
#define KEY_COL2_DDR DDRA
#define KEY_COL2_PORT_OUT PORTA
#define KEY_COL2_PORT_IN PINA
#define KEY_COL2_PIN PINA6
#define KEY_COL3_DDR DDRA
#define KEY_COL3_PORT_OUT PORTA
#define KEY_COL3_PORT_IN PINA
#define KEY_COL3_PIN PINA7
#define KEY_COL4_DDR DDRC
#define KEY_COL4_PORT_OUT PORTC
#define KEY_COL4_PORT_IN PINC
#define KEY_COL4_PIN PINC7
#define KEY_ROW1_DDR DDRD //Ñòðîêè - âûâîä
#define KEY_ROW1_PORT_OUT PORTD
#define KEY_ROW1_PORT_IN PIND
#define KEY_ROW1_PIN PORTD7
#define KEY_ROW2_DDR DDRD
#define KEY_ROW2_PORT_OUT PORTD
#define KEY_ROW2_PORT_IN PIND
#define KEY_ROW2_PIN PORTD6
#define KEY_ROW3_DDR DDRD
#define KEY_ROW3_PORT_OUT PORTD
#define KEY_ROW3_PORT_IN PIND
#define KEY_ROW3_PIN PORTD5
#define KEY_PERIOD 100 //Ïåðèîä îïðîñà êëàâèàòóðû
//Ñâåòîäèîä íà êíîïêå íà ìàòðè÷íîé êëàâèàòóðå
#define KEY_LED_DDR DDRD
#define KEY_LED_PORT_OUT PORTD
#define KEY_LED_PORT_IN PIND
#define KEY_LED_PIN PORTD4
#define KeyLedOff() ClearBit(KEY_LED_PORT_OUT, KEY_LED_PIN)
#define KeyLedOn() SetBit(KEY_LED_PORT_OUT, KEY_LED_PIN)
//--------------------- Îïèñàíèå ýíêîäåðîâ
#define ENCODER_MIN 0 //Ìàêñèìàëüíûå è ìèíèìàëüíûå çíà÷åíèÿ ýíêîäåðà
#define ENCODER_OFF 0xffff
typedef struct {
u16 X1;
u16 X2;
u16 Y1;
u16 Y2;
u16 Z;
} tEncoder;
extern volatile tEncoder Encoder, //Òåêóùèå ñ÷åò÷èêè
EncoderOffset, //Ñìåùåíèå íóëÿ äëÿ ðåàëüíîé ïëàòû
EncoderNeed; //Íåîáõîäèìûå çíà÷åíèÿ ýíêîäåðà
//îòêëþ÷èòü íîãó ØÈÌ
#define PWM_PinOff(TimerReg, TimerCom1, TimerCom0) do {TimerReg &= ~((1<<TimerCom1) | (1<<TimerCom0));} while (0)
//âêëþ÷èòü íîãó ØÈÌ
#define PWM_PinOn(TimerReg, TimerCom1, TimerCom0) do {TimerReg = (TimerReg & (~((1<<TimerCom1) | (1<<TimerCom0)))) | ((1<<TimerCom1) | (0<<TimerCom0));} while (0)
//Ïðåðûâàíèå ïî ïåðåïàäó îò 0 ê 1
#define IntRising(Reg, Isc1, Isc0) do {Reg = (Reg & (~((1<<Isc1) | (1<<Isc0)))) | ((1<<Isc1) | (1<<Isc0));} while (0)
//Ïðåðûâàíèå ïî ïåðåïàäó îò 1 ê 0
#define IntFalling(Reg, Isc1, Isc0) do {Reg = (Reg & (~((1<<Isc1) | (1<<Isc0)))) | ((1<<Isc1) | (0<<Isc0));} while (0)
//Ïðåðûâàíèå ïî ëþáîìó ïåðåïàäó íå äëÿ âñåõ ïðåðûâàíèé äîñòóïíî ïîýòîìó íå ñäåëàíî! (äëÿ AtMega64 òîëüêî îò 4 è âûøå)
//Ïðåðûâàíèå ïî íèçêîìó óðîâíþ
#define IntLowLevel(Reg, Isc1, Isc0) do {Reg = (Reg & (~((1<<Isc1) | (1<<Isc0)))) | ((0<<Isc1) | (0<<Isc0));} while (0)
//Ñðàáàòûâàíèå îïòðîííûõ êîíöåâèêîâ. Âûñîêèé óðîâåíü - êîíöåâèê ñðàáîòàë
#define SensorIsAlarmDirect(SensPort, SensPin) BitIsSet(SensPort, SensPin)
//Ñðàáàòûâàíèå êîíöåâèêîâ - âûêëþ÷àòåëåé. Íèçêèé óðîâåíü - êîíöåâèê ñðàáîòàë
#define SensorIsAlarmInvert(SensPort, SensPin) BitIsClear(SensPort, SensPin)
//Îáÿçàòåëüíî äîëæíî áûòü îò 0 äî 3 ïîñêîëüêó èñïîëüçóåòñÿ êàê íîìåðà áèòîâ
enum AxisType{
AXIS_X = 0,
AXIS_Y = 1,
AXIS_Z = 2,
AXIS_DRILL = 3,
};
//------------------------------------ Äâèãàòåëè
//Íàïðàâëåíèÿ âðàùåíèÿ äâèãàòåëåé, ñäåëàíû ðàçíûå ÷òî áû íå ïóòàåòñÿ
enum DirType{
DIR_Z_UP = 0, //Ïîäíÿòü ñâåðëî
DIR_Z_DOWN = 1, //Îïóñòèòü ñâåðëî
DIR_AXIS_TO_MIN = 2, //Ïåðåìåùàòü øïèíäåëü ê ìèíèìàëüíîìó ïîëîæåíèþ
DIR_AXIS_TO_MAX = 3, //Ê ìàêñèìàëüíîìó
DIR_DRILL_CLOCKWISE = 4, //Âðàùàòü ñâåðëîì ïî ÷àñîâîé ñòðåëêå
DIR_DRILL_ANTICLOCKWISE = 5, //Ïðîòèâ ÷àñîâîé
};
#define X_STEP_MIN_PERIOD 1 //Ìàêñèìàëüíàÿ ñêîðîñòü øàãàíèÿ, áîëüøå íåå øàãîâèê íå ìîæåò øàãàòü
#define X_SPEED_START 1 //Ñêîðîñòü øàãàíèÿ â ìèëëèñåêóíäàõ óìíîæåííàÿ íà 2. Ïî äîêóìåíòàì íà äâèãàòåëü M35SP-9 ñêîðîñòü øàãàíèÿ ìîæåò äîñòèãàòü 700 Ãö (1,4 ms)
#define Y_STEP_MIN_PERIOD 1 //Ìàêñèìàëüíàÿ ñêîðîñòü øàãàíèÿ, áîëüøå íåå øàãîâèê íå ìîæåò øàãàòü
#define Y_SPEED_START 50 //Ñêîðîñòü øàãàíèÿ â ìèëëèñåêóíäàõ óìíîæåííàÿ íà 2
//DC ìîòîðû. ×åì áîëüøå çíà÷åíèå òåì áîëüøå ìîùíîñòü íà ìîòîð. Äëÿ 16-è áèòíîãî òàéìåðà 0xff - cêâàæèííîñòü ØÈÌ 25%, 0x1ff - 50%, 0x2ff - 75%
#define Z_SPEED_START 0xf //Z
#define DRIL_SPEED_START 0xf //Íà÷àëüíàÿ ñêîðîñòü âðàùåíèÿ ñâåðëà
#define X_AXIS_MAX 1130 //Â êëèêàõ ýíêîäåðà
#define Z_AXIS_MAX 85 //Ìàêñèìàëüíîå çíà÷åíèå ýíêîäåðà, ïîëó÷åíî ýêñïåðèìåíòàëüíî
#define AXIS_TIME_PROTECT 1000 //Åñëè çà ýòîò ïåðèîä ýíêîäåð íå ñðàáîòàåò, òî îñü çàêëèíèëî è äâèãàòåëü îñè íàäî âûêëþ÷èòü
extern volatile u08 CommonFlags, //Îáùèå ôëàãè
AxisFlags, //Ôëàãè îñåé
AxisStepSize, //Ðàçìåð øàãà äëÿ îñåé ñ øàãîâûìè äâèãàòåëÿìè. Çäåñü òîëüêî óêàçûâàåòñÿ êàêîé øàã íóæåí, à ñàì øàã ïåðåêëþ÷àåòñÿ ïðè ðàçðåøåíèè ñèãíàëà Home
AxisProtect; //Ôëàãè çàùèòû îñåé
//Çíà÷åíèÿ áèòîâ èç CommonFlags
#define X_AXIS_BUSY AXIS_X //0 Îñü X çàíÿòà (èäåò îïåðàöèÿ) - íå ïóòàòü ñ X_AXIS_ON - âêëþ÷åíà!
#define Y_AXIS_BUSY AXIS_Y //1 -/- Y
#define Z_AXIS_BUSY AXIS_Z //2 -/- Z
#define DRiLL_BUSY AXIS_DRILL //3 -/- ñâåðëî
//4
//5
#define KEY_STOP_DOWN 6 //Íàæàòà êíîïêà ñòîï, âñå îïåðàöèè ñ äâèãàòåëÿìè çàïðåùåíû
#define KEY_LED_FLAG 7 //Ìèãàòü ñâåòîäèîäîì íà êëàâèàòóðå
#define KeyLedFlashOn() SetBit(CommonFlags, KEY_LED_FLAG)
#define KeyLedFlashOff() ClearBit(CommonFlags, KEY_LED_FLAG)
//Çíà÷åíèÿ áèòîâ AxisFlag
#define X_AXIS_ON AXIS_X //0 Îñü X âêëþ÷åíà, ò.å. äâèãàòåëü âêëþ÷åí (âûïîëíÿåò øàãè èëè îæèäàåò êîìàíäû ØÀÃ), íå ïóòàòü ñ X_AXIS_BUSY! èäåò îïåðàöèÿ íà îñè X (äâèãàòåëü ìîæåò áûòü âûêëþ÷åí â îæèäàíèè ñòàáèëèçàöèè ñèñòåìû)
#define Y_AXIS_ON AXIS_Y //1 Îñü Y âêëþ÷åíà
#define Z_AXIS_ON AXIS_Z //2 Îñü Z âêëþ÷åíà
#define DRiLL_ON AXIS_DRILL //3 Ñâåðëî ðàáîòàåò
//4
//5
//6
#define Z_AXIS_TO_DOWN 7 //Îñü Z äâèæåòñÿ âíèç
enum StepSizeType{
STEP_SIZE_FULL = 0, //Ñïåöèàëüíûå íîìåðà äëÿ îïðåäåëåíèÿ ìèêðîøàãà
STEP_SIZE_HALF = 1,
STEP_SIZE_QUARTER = 2,
STEP_SIZE_EIGHTH = 3,
};
/* Çíà÷åíèÿ áèòîâ AxisStepSize:
áèò 1 áèò 2 øàã
0 0 Ïîëíûé (Full)
1 0 Ïîëîâèííûé (Half)
0 1 Îäíà ÷åòâåðòàÿ (Quarter)
1 1 Îäíà âîñüìàÿ (Eagtht)
*/
#define X_STEP_SIZE1 0 //Áèòû äëÿ âûâîäîâ ìèêðîøàãà äëÿ îñè X, áèò 1
#define X_STEP_SIZE2 1 //áèò 2
#define Y_STEP_SIZE1 2
#define Y_STEP_SIZE2 3
//4
//5
//6
//7
#define XSizeStepShift 0 //Ñìåùåíèå äëÿ ìàñêè îñè Õ
#define XSizeStepMask (Bit(X_STEP_SIZE1) | Bit(X_STEP_SIZE2))
#define YSizeStepShift 2 //Ñìåùåíèå äëÿ ìàñêè îñè Y
#define YSizeStepMask (Bit(Y_STEP_SIZE1) | Bit(Y_STEP_SIZE2))
//Óñòàíîâèòü òðåáóåìûé ðàçìåð øàãà äëÿ øàãîâîãî äâèãàòåëÿ. Ñàìî ïåðåêëþ÷åíèå áóäåò âûïîëíåíî â ìîìåíò ïîÿâëåíèÿ ñèãíàëà HOME
#define StepSizeSet(SizeStep, AxisMask, AxisShift) do {AxisStepSize = (AxisStepSize & AxisMask) | (SizeStep << AxisShift);} while (0)
#define StepSizeGet(AxisMask, AxisShift) ((AxisStepSize & AxisMask) >> AxisShift)
//Øàãàòü îñüþ X
#define XAxisStepOn() SetBit(AxisFlags, X_AXIS_ON)
#define XAxisStepOff() ClearBit(AxisFlags, X_AXIS_ON)
#define XAxisStepIsOn() BitIsSet(AxisFlags, X_AXIS_ON) //Ïîäà÷à êîìàíäû ØÀà âûêëþ÷åíà
//Íàïðàâëåíèå øàãà
#define XAxisSetToMax() SetBit(X_DIR_STEP_DRIVE_PORT, X_DIR_STEP_DRIVE_OUT)
#define XAxisSetToMin() ClearBit(X_DIR_STEP_DRIVE_PORT, X_DIR_STEP_DRIVE_OUT)
#define XAxisGoesToMax() BitIsSet(X_DIR_STEP_DRIVE_PORT, X_DIR_STEP_DRIVE_OUT)
//Ðàçìåð øàãà
#define XAxisFullStep() do{ClearBit(X_SIZE1_STEP_DRIVE_PORT, X_SIZE1_STEP_DRIVE_OUT); ClearBit(X_SIZE2_STEP_DRIVE_PORT, X_SIZE2_STEP_DRIVE_OUT);}while(0)
#define XAxisHalfStep() do{SetBit(X_SIZE1_STEP_DRIVE_PORT, X_SIZE1_STEP_DRIVE_OUT); ClearBit(X_SIZE2_STEP_DRIVE_PORT, X_SIZE2_STEP_DRIVE_OUT);}while(0)
#define XAxisQuarterStep() do{ClearBit(X_SIZE1_STEP_DRIVE_PORT, X_SIZE1_STEP_DRIVE_OUT); SetBit(X_SIZE2_STEP_DRIVE_PORT, X_SIZE2_STEP_DRIVE_OUT);}while(0)
#define XAxisEighthStep() do{SetBit(X_SIZE1_STEP_DRIVE_PORT, X_SIZE1_STEP_DRIVE_OUT); SetBit(X_SIZE2_STEP_DRIVE_PORT, X_SIZE2_STEP_DRIVE_OUT);}while(0)
//Øàãàòü îñüþ Y
#define YAxisStepOn() SetBit(AxisFlags, Y_AXIS_ON) //Âêëþ÷èòü îñü Y
#define YAxisStepOff() ClearBit(AxisFlags, Y_AXIS_ON)
#define YAxisStepIsOn() BitIsSet(AxisFlags, Y_AXIS_ON) //Ïîäà÷à êîìàíäû ØÀà âûêëþ÷åíà
//Íàðïàâëåíèå øàãà
#define YAxisSetToMax() SetBit(Y_DIR_STEP_DRIVE_PORT, Y_DIR_STEP_DRIVE_OUT)
#define YAxisSetToMin() ClearBit(Y_DIR_STEP_DRIVE_PORT, Y_DIR_STEP_DRIVE_OUT)
//Ðàçìåð øàãà
#define YAxisFullStep() do{ClearBit(Y_SIZE1_STEP_DRIVE_PORT, Y_SIZE1_STEP_DRIVE_OUT); ClearBit(Y_SIZE2_STEP_DRIVE_PORT, Y_SIZE2_STEP_DRIVE_OUT);}while(0)
#define YAxisHalfStep() do{SetBit(Y_SIZE1_STEP_DRIVE_PORT, Y_SIZE1_STEP_DRIVE_OUT); ClearBit(Y_SIZE2_STEP_DRIVE_PORT, Y_SIZE2_STEP_DRIVE_OUT);}while(0)
#define YAxisQuarterStep() do{ClearBit(Y_SIZE1_STEP_DRIVE_PORT, Y_SIZE1_STEP_DRIVE_OUT); SetBit(Y_SIZE2_STEP_DRIVE_PORT, Y_SIZE2_STEP_DRIVE_OUT);}while(0)
#define YAxisEighthStep() do{SetBit(Y_SIZE1_STEP_DRIVE_PORT, Y_SIZE1_STEP_DRIVE_OUT); SetBit(Y_SIZE2_STEP_DRIVE_PORT, Y_SIZE2_STEP_DRIVE_OUT);}while(0)
//Çàíÿòîñòü îñåé, íå ïóòàòü ñ âêëþ÷åíèåì-âûêëþ÷åíèåì! Çàíÿòîñòü îñè ãîâîðèò î òîì ÷òî îïåðàöèÿ ñ îñüþ åøå âûïîëíÿåòñÿ íåñìîòðÿ íà òî ÷òî äâèãàòåëü ìîæåò áûòü âûêëþ÷åí
#define ProcessGoing() ((CommonFlags & (Bit(X_AXIS_ON) | Bit(Y_AXIS_ON) | Bit(Z_AXIS_ON))) != 0) //Èäåò îáðàáîòêà îïåðàöèè ïî îñÿì
#define ProcessIsFree() ((CommonFlags & (Bit(X_AXIS_ON) | Bit(Y_AXIS_ON) | Bit(Z_AXIS_ON))) == 0) //Ñòàíîê ñâîáîäåí
#define ProcessStart(AxisBit) SetBit(CommonFlags, AxisBit) //Çàíÿòü îñü
#define ProcessEnd(AxisBit) ClearBit(CommonFlags, AxisBit) //Îñâîáîäèòü îñü
#define ProcessAxisIsGo(AxisBit) BitIsSet(CommonFlags, AxisBit) //Ðàáîòà ñ îñüþ åùå íå çàêîí÷åíà
#define ZAxisSetToDown() SetBit(AxisFlags, Z_AXIS_TO_DOWN)
#define ZAxisSetToUp() ClearBit(AxisFlags, Z_AXIS_TO_DOWN)
#define ZAxisIsGoesToDown() BitIsSet(AxisFlags, Z_AXIS_TO_DOWN)
void InitHAL(void); //Èíèöèàëèçàöèÿ æåëåçà
void RaiseAlarm(void); //Îñòàíîâèòü âñå ìîòîðû
void AxisScan(void); //Ñêàíèðîâàíèå êîíöåâèêîâ îñåé è ýíêîäåðà îñè Z. Äîëæíà áûòü êàê ìîæíî áûñòðîäåéñòâóþùåé, ò.ê. îòðàáàòûâàåòñÿ â ïðåðûâàíèè
void KeyScan(void); //Ñêàíèðîâàíèå êëàâèàòóðû
void PortInIni(u16 DDRPort, u16 OutPort, u08 Pin);
void PortOutIni(u16 DDRPort, u16 OutPort, u08 Pin);
void AxisPortIni(enum AxisType Axis); //Èíèöèàëèçàöèÿ ïîðòîâ îñè
void DriveDCOn(enum AxisType Axis, enum DirType Dir, u16 Speed); //Âêëþ÷èòü äâèãàòåëü îñè Axis â íàïðàâëåíèè Dir ñî ñêîðîñòüþ Speed
void DriveSteppingOn(enum AxisType Axis, enum DirType Dir, enum StepSizeType StepSize);//Âêëþ÷èòü Stepping äâèãàòåëü îñè Axis â íàïðàâëåíèè Dir ñ øàãîì StepSize
void DriveBreaking(enum AxisType Axis); //Çàòîðìîçèòü äâèãàòåëü
void XAxisOff(void); //Âûêëþ÷åíèå äâèãàòåëåé îñåé
void YAxisOff(void);
void ZAxisOff(void);
void DrillOff(void);
void SetStepSize(enum AxisType Axis, enum StepSizeType Size); //Ðàçìåð øàãà äëÿ øàãîâîãî äâèãàòåëÿ
#endif /* HAL_H_ */