| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 | 
							- #ifndef GPIO_H
 
- #define GPIO_H
 
- #include "stm32f4xx_conf.h"
 
- #include "stm32f4xx.h"
 
- #include <stdlib.h>
 
- #include <stdint.h>
 
- #include <stdbool.h>
 
- #include <string.h>
 
- #define GLITCH_TIMEOUT 200
 
- /* 
 
-  * Alternative function numbers definitions
 
-  */
 
- enum af_n {AF0 = 0, AF1, AF2, AF3, AF4, AF5, AF6, AF7,
 
- 	   AF8, AF9, AF10, AF11, AF12, AF13, AF14, AF15};
 
- #define _GPIO_AF_SHIFT   10
 
- /* Flags for gpio init */
 
- #define GPIO_IN		0x01
 
- #define GPIO_IN_PU	0x02
 
- #define GPIO_OUT	0x04
 
- #define GPIO_SET	0x08
 
- #define GPIO_INV	0x10
 
- #define GPIO_OD		0x20
 
- #define GPIO_BKP	0x40
 
- #define GPIO_NOINIT	0x80
 
- #define GPIO_DIR_CHANGE	0x100
 
- #define GPIO_AF		0x200
 
- #define AF_TIM1		((AF1 << _GPIO_AF_SHIFT) | GPIO_AF)
 
- #define AF_TIM2  	((AF1 << _GPIO_AF_SHIFT) | GPIO_AF)
 
- #define AF_TIM3  	((AF2 << _GPIO_AF_SHIFT) | GPIO_AF)
 
- #define AF_TIM4  	((AF2 << _GPIO_AF_SHIFT) | GPIO_AF)
 
- #define AF_TIM5  	((AF2 << _GPIO_AF_SHIFT) | GPIO_AF)
 
- #define AF_TIM8  	((AF3 << _GPIO_AF_SHIFT) | GPIO_AF)
 
- #define AF_TIM9  	((AF3 << _GPIO_AF_SHIFT) | GPIO_AF)
 
- #define AF_TIM10 	((AF3 << _GPIO_AF_SHIFT) | GPIO_AF)
 
- #define AF_TIM11 	((AF3 << _GPIO_AF_SHIFT) | GPIO_AF)
 
- #define AF_I2C1 	((AF4 << _GPIO_AF_SHIFT) | GPIO_AF)
 
- #define AF_I2C2		((AF4 << _GPIO_AF_SHIFT) | GPIO_AF)
 
- #define AF_I2C3 	((AF4 << _GPIO_AF_SHIFT) | GPIO_AF)
 
- #define AF_SPI1 	((AF5 << _GPIO_AF_SHIFT) | GPIO_AF)
 
- #define AF_SPI2 	((AF5 << _GPIO_AF_SHIFT) | GPIO_AF)
 
- #define AF_SPI3 	((AF6 << _GPIO_AF_SHIFT) | GPIO_AF)
 
- #define AF_USART1 	((AF7 << _GPIO_AF_SHIFT) | GPIO_AF)
 
- #define AF_USART2 	((AF7 << _GPIO_AF_SHIFT) | GPIO_AF)
 
- #define AF_USART3	((AF7 << _GPIO_AF_SHIFT) | GPIO_AF)
 
- #define AF_USART4	((AF8 << _GPIO_AF_SHIFT) | GPIO_AF)
 
- #define AF_USART5 	((AF8 << _GPIO_AF_SHIFT) | GPIO_AF)
 
- #define AF_USART6 	((AF8 << _GPIO_AF_SHIFT) | GPIO_AF)
 
- #define AF_CAN1 	((AF9 << _GPIO_AF_SHIFT) | GPIO_AF)
 
- #define AF_CAN2 	((AF9 << _GPIO_AF_SHIFT) | GPIO_AF)
 
- #define AF_TIM12 	((AF9 << _GPIO_AF_SHIFT) | GPIO_AF)
 
- #define AF_TIM13 	((AF9 << _GPIO_AF_SHIFT) | GPIO_AF)
 
- #define AF_TIM14 	((AF9 << _GPIO_AF_SHIFT) | GPIO_AF)
 
- #define AF_OTG_FS 	((AF10 << _GPIO_AF_SHIFT) | GPIO_AF)
 
- #define AF_OTG_HS 	((AF10 << _GPIO_AF_SHIFT) | GPIO_AF)
 
- #define AF_ETH		((AF11 << _GPIO_AF_SHIFT) | GPIO_AF)
 
- #define AF_FSMC 	((AF12 << _GPIO_AF_SHIFT) | GPIO_AF)
 
- #define AF_SDIO 	((AF12 << _GPIO_AF_SHIFT) | GPIO_AF)
 
- #define AF_OTG_HS_FS	((AF12 << _GPIO_AF_SHIFT) | GPIO_AF)
 
- #define AF_DCMI 	((AF13 << _GPIO_AF_SHIFT) | GPIO_AF)
 
- #define AF_EVENTOUT	((AF14 << _GPIO_AF_SHIFT) | GPIO_AF)
 
- typedef struct {
 
- 	GPIO_TypeDef *port;
 
- 	uint8_t pin;
 
- 	uint16_t flags;
 
- } gpio_pindef_t;
 
- #include "board.h"
 
- extern gpio_pindef_t gpio_pins[GPIO_TOTAL_COUNT];
 
- /*
 
-  * GPIO register bitmasks
 
-  */
 
- #define GPIO_MODER_MASK		0x03
 
- #define GPIO_TYPER_MASK		0x01
 
- #define GPIO_SPEEDR_MASK	0x03
 
- #define GPIO_PUPDR_MASK		0x03
 
- #define GPIO_AFR_MASK		0x0f
 
- /* 
 
-  * Port configuration values.
 
-  * A configuration is passing to gpio_hw_config_pin() bitwise in
 
-  * a 16-bit 'conf' parameter where low byte representing a port
 
-  * configuration and high using only for representing a number of an
 
-  * alternative function (if GPIO_MODE_AF is chosen).
 
-  * Shifts is using to encode/decode the config bits to/from 'conf'.
 
-  */
 
- #define GPIO_MODE_CFG_SHIFT	0
 
- #define GPIO_TYPE_CFG_SHIFT 	2
 
- #define GPIO_SPEED_CFG_SHIFT 	4
 
- #define GPIO_PUPD_CFG_SHIFT	6
 
- #define GPIO_MODE_IN_CFG	(0x00 << GPIO_MODE_CFG_SHIFT)
 
- #define GPIO_MODE_OUT_CFG	(0x01 << GPIO_MODE_CFG_SHIFT)
 
- #define GPIO_MODE_AF_CFG	(0x02 << GPIO_MODE_CFG_SHIFT)
 
- #define GPIO_MODE_ANALOG_CFG	(0x03 << GPIO_MODE_CFG_SHIFT)
 
- #define GPIO_TYPE_PP_CFG	(0x00 << GPIO_TYPE_CFG_SHIFT)
 
- #define GPIO_TYPE_OD_CFG	(0x01 << GPIO_TYPE_CFG_SHIFT)
 
- #define GPIO_SPEED_LOW_CFG	(0x00 << GPIO_SPEED_CFG_SHIFT)
 
- #define GPIO_SPEED_MED_CFG	(0x01 << GPIO_SPEED_CFG_SHIFT)
 
- #define GPIO_SPEED_FAST_CFG	(0x02 << GPIO_SPEED_CFG_SHIFT)
 
- #define GPIO_SPEED_HIGH_CFG	(0x03 << GPIO_SPEED_CFG_SHIFT)
 
- #define GPIO_PU_CFG		(0x01 << GPIO_PUPD_CFG_SHIFT)
 
- #define GPIO_PD_CFG		(0x02 << GPIO_PUPD_CFG_SHIFT)
 
- void gpio_init(void);
 
- void gpio_set(gpio_t pin, bool value);
 
- void gpio_invert_output(gpio_t pin);
 
- bool gpio_get(gpio_t pin);
 
- bool gpio_is_output(gpio_t pin);
 
- void gpio_set_direction(gpio_t pin, bool out);
 
- void gpio_hw_config_pin(GPIO_TypeDef *port, uint8_t pin, uint16_t conf);
 
- //void gpio_connect_af(GPIO_TypeDef *port, uint8_t pin, uint8_t af);
 
- void gpio_connect_af(gpio_t id, uint8_t af_n);
 
- void exti_handler(void);
 
- void gpio_test(void);
 
- #endif /* GPIO_H */
 
 
  |