-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathgpio.h
103 lines (80 loc) · 4.12 KB
/
gpio.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
#if !defined(__GPIP_H__)
#define __GPIP_H__
#include "stm32f0xx.h"
// îïðåäåëåíèå ïèíà äîëæíî âûãëÿäèòü
// AINPUT OUT10MHZ PULL_DOWN AF0 0
// INPUT OUT2MHZ 0 PULL_UP AF7 1
// OUTPUT OUT50MHZ OUT_OPENDRAIN 0
// AIO
//#define PIN_NAME PORT, PIN, MODE, SPEED, OUT_MODE, PULL, , AF, SET
// PORT - A, B, C, D è òä - ïîðò ÂÂ
// PIN - íîìåð áèòà â ïîðòå 0, 1 è ò.ä.
// SPEED - ñêîðîñòü
// OUT_MODE - pushpull or open drain
// PULL - ïîäòÿæêà
// SET - çíà÷åíèå ïîñëå èíèöèàëèçàöèè
// ðåæèì
#define AINPUT (GPIO_MODER_MODER0_0|GPIO_MODER_MODER0_1) //àíàëîãîâûé âõîä
#define INPUT 0 // âõîä öèôðîâîé
#define OUTPUT GPIO_MODER_MODER0_0 //âûõîä
#define AIO GPIO_MODER_MODER0_1 //àëòåðíàòèâíûé i/o defined by the pherefery
// ñêîðîñòü. Èìååò ñìûñë òîëüêî äëÿ âûõîäà. Îáúåäèíÿåòñÿ | ñ ðåæèìîì
#define OUT10MHZ GPIO_OSPEEDR_OSPEEDR0_0 // ðåæèì âûõîäà ñðåäíåñêîðîñòíîé - â ïîëå MODE
#define OUT2MHZ 0 // íèçêîñêîðîñòíîé
#define OUT50MHZ (GPIO_OSPEEDR_OSPEEDR0_1|GPIO_OSPEEDR_OSPEEDR0_0) // âûñîêîñêîðîñòíîé
// âûõîäíîé ðåæèì
#define OUT_PUSHPULL 0 // äâóòàêòíûé âûõîä
#define OUT_OPENDRAIN GPIO_OTYPER_OTYPER_OT_0 // îòêðûòûé ñòîê
//ïîäòÿæêà
#define PULL_DOWN GPIO_PUPDR_PUPDR0_1 // ïîäòÿæêà ê çåìëå - íåîáõîäèìî ïðèñâîåíèå ðåãèñòðà óñòíîâêè-ñáðîñà
#define PULL_UP GPIO_PUPDR_PUPDR0_0 // ïîäòÿæêà ê ïèòàíèþ
#define AF0 0x0
#define AF1 0x1
#define AF2 0x2
#define AF3 0x3
#define AF4 0x4
#define AF5 0x5
#define AF6 0x6
#define AF7 0x7
#define _TO_GPIO_2BIT(DEST_PORT, PORT, PIN, BITS) \
((GPIO##DEST_PORT == GPIO##PORT)*((BITS)<<((PIN)*2)))
#define _TO_GPIO_1BIT(DEST_PORT, PORT, PIN, BITS) \
((GPIO##DEST_PORT == GPIO##PORT)*((BITS)<<(PIN)))
#define _TO_GPIO_4LO(DEST_PORT, PORT, PIN, BITS) \
((GPIO##DEST_PORT == GPIO##PORT)*(((PIN)<8)?((BITS)<<(((PIN)<8?(PIN):1)*4)):0))
#define _TO_GPIO_4HI(DEST_PORT, PORT, PIN, BITS) \
((GPIO##DEST_PORT == GPIO##PORT)*(((PIN)>=8)?((BITS)<<(((PIN)>=8?(PIN)-8:1)*4)):0))
//((GPIO##DEST_PORT == GPIO##PORT)*(((PIN)>=8)?((BITS)<<((PIN-8)*4)):0))
#define _TO_GPIO_MODER(DEST_PORT, PORT, PIN, MODE, SPEED, OUT_MODE, PULL, AF, SET) \
_TO_GPIO_2BIT(DEST_PORT, PORT, PIN, MODE)
#define _TO_GPIO_OTYPER(DEST_PORT, PORT, PIN, MODE, SPEED, OUT_MODE, PULL, AF, SET) \
_TO_GPIO_1BIT(DEST_PORT, PORT, PIN, OUT_MODE)
#define _TO_GPIO_OSPEEDR(DEST_PORT, PORT, PIN, MODE, SPEED, OUT_MODE, PULL, AF, SET) \
_TO_GPIO_2BIT(DEST_PORT, PORT, PIN, SPEED)
#define _TO_GPIO_PUPDR(DEST_PORT, PORT, PIN, MODE, SPEED, OUT_MODE, PULL, AF, SET) \
_TO_GPIO_2BIT(DEST_PORT, PORT, PIN, PULL)
#define _TO_GPIO_ODR(DEST_PORT, PORT, PIN, MODE, SPEED, OUT_MODE, PULL, AF, SET) \
_TO_GPIO_1BIT(DEST_PORT, PORT, PIN, SET)
#define _TO_GPIO_AFRL(DEST_PORT, PORT, PIN, MODE, SPEED, OUT_MODE, PULL, AF, SET) \
_TO_GPIO_4LO(DEST_PORT, PORT, PIN, AF)
#define _TO_GPIO_AFRH(DEST_PORT, PORT, PIN, MODE, SPEED, OUT_MODE, PULL, AF, SET) \
_TO_GPIO_4HI(DEST_PORT, PORT, PIN, AF)
#define _GPIO_SET(PORT, PIN, MODE, SPEED, OUT_MODE, PULL, AF, SET) GPIO##PORT->BSRR = (1 << PIN)
#define _GPIO_ISSET(PORT, PIN, MODE, SPEED, OUT_MODE, PULL, AF, SET) (GPIO##PORT->IDR & (1 << PIN))
#define _GPIO_RESET(PORT, PIN, MODE, SPEED, OUT_MODE, PULL, AF, SET) GPIO##PORT->BRR = (1 << PIN)
#define _GPIO_TOGGLE(PORT, PIN, MODE, SPEED, OUT_MODE, PULL, AF, SET) GPIO##PORT->ODR ^= (1 << PIN)
#define _GPIO_BIT(PORT, PIN, MODE, SPEED, OUT_MODE, PULL, AF, SET) (1 << PIN)
#define _GPIO_PORT(PORT, PIN, MODE, SPEED, OUT_MODE, PULL, AF, SET) (GPIO##PORT)
//ñîîòâ ìàêðîñû ðàáîòû ñ ïîðòîì
#define GPIO_SET(PIN_DESC) _GPIO_SET(PIN_DESC)
#define GPIO_RESET(PIN_DESC) _GPIO_RESET(PIN_DESC)
#define GPIO_TOGGLE(PIN_DESC) _GPIO_TOGGLE(PIN_DESC)
#define GPIO_ISSET(PIN_DESC) _GPIO_ISSET(PIN_DESC)
#define GPIO_BIT(PIN_DESC) _GPIO_BIT(PIN_DESC)
#define GPIO_PORT(PIN_DESC) _GPIO_PORT(PIN_DESC)
#define _GPIO_BB(PORT, PIN, MODE, OUT) (*(uint32_t*)(PERIPH_BB_BASE + ((uint32_t)&(GPIO##PORT->ODR) - PERIPH_BASE)*32 + PIN*4))
// ìàêðîñ ðàáîòû ñ ïîðòîì ÷åðåç bit-bang
#define GPIO_BB(PIN_DESC) _GPIO_BB(PIN_DESC)
#include "gpioau.h"
#define GPIO_CONFIG
#endif /* __GPIP_H__ */