123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- /*
- * File: mcu_gpio.h
- * Date: 23.01.2011
- * Denis Zheleznyakov aka ZiB @ http://ziblog.ru
- */
- #ifndef MCU_GPIO_H_
- #define MCU_GPIO_H_
- // PIN_TEST A, 3, HIGH, INPUT_FLOATING_WITHOUT_ITERRUPT
- #define INPUT_FLOATING_WITHOUT_ITERRUPT INPUT_FLOATING_WITHOUT_ITERRUPT
- #define INPUT_FLOATING_WITH_ITERRUPT INPUT_FLOATING_WITH_ITERRUPT
- #define INPUT_PULL_UP_WITHOUT_ITERRUPT INPUT_PULL_UP_WITHOUT_ITERRUPT
- #define INPUT_PULL_UP_WITH_ITERRUPT INPUT_PULL_UP_WITH_ITERRUPT
- #define OUTPUT_OPEN_DRAIN_NOSPEED_LIMIT OUTPUT_OPEN_DRAIN_NOSPEED_LIMIT
- #define OUTPUT_OPEN_DRAIN_SPEED_LIMIT_10MHZ OUTPUT_OPEN_DRAIN_SPEED_LIMIT_10MHZ
- #define OUTPUT_PUSH_PULL_NOSPEED_LIMIT OUTPUT_PUSH_PULL_NOSPEED_LIMIT
- #define OUTPUT_PUSH_PULL_SPEED_LIMIT_10MHZ OUTPUT_PUSH_PULL_SPEED_LIMIT_10MHZ
- //------------------------------------------------------------------------------
- #define GPIO_PIN_CONFIGURATION_OUTPUT_PUSH_PULL_SPEED_LIMIT_10MHZ(PORT, PIN, LEVEL, MODE) \
- { \
- GPIO##PORT->DDR |= (1 << PIN); \
- GPIO##PORT->CR1 |= (1 << PIN); \
- GPIO##PORT->CR2 |= (1 << PIN); \
- }
- #define GPIO_PIN_CONFIGURATION_OUTPUT_PUSH_PULL_NOSPEED_LIMIT(PORT, PIN, LEVEL, MODE) \
- { \
- GPIO##PORT->DDR |= (1 << PIN); \
- GPIO##PORT->CR1 |= (1 << PIN); \
- GPIO##PORT->CR2 &= (uint8_t)(~(1 << PIN)); \
- }
- #define GPIO_PIN_CONFIGURATION_OUTPUT_OPEN_DRAIN_SPEED_LIMIT_10MHZ(PORT, PIN, LEVEL, MODE) \
- { \
- GPIO##PORT->DDR |= (1 << PIN); \
- GPIO##PORT->CR1 &= (uint8_t)(~(1 << PIN)); \
- GPIO##PORT->CR2 |= (1 << PIN); \
- }
- #define GPIO_PIN_CONFIGURATION_OUTPUT_OPEN_DRAIN_NOSPEED_LIMIT(PORT, PIN, LEVEL, MODE) \
- { \
- GPIO##PORT->DDR |= (1 << PIN); \
- GPIO##PORT->CR1 &= (uint8_t)(~(1 << PIN)); \
- GPIO##PORT->CR2 &= (uint8_t)(~(1 << PIN)); \
- }
- #define GPIO_PIN_CONFIGURATION_INPUT_PULL_UP_WITH_ITERRUPT(PORT, PIN, LEVEL, MODE) \
- { \
- GPIO##PORT->DDR &= (uint8_t)(~(1 << PIN)); \
- GPIO##PORT->CR1 |= (1 << PIN); \
- GPIO##PORT->CR2 |= (1 << PIN); \
- }
- #define GPIO_PIN_CONFIGURATION_INPUT_PULL_UP_WITHOUT_ITERRUPT(PORT, PIN, LEVEL, MODE) \
- { \
- GPIO##PORT->DDR &= (uint8_t)(~(1 << PIN)); \
- GPIO##PORT->CR1 |= (1 << PIN); \
- GPIO##PORT->CR2 &= (uint8_t)(~(1 << PIN)); \
- }
- #define GPIO_PIN_CONFIGURATION_INPUT_FLOATING_WITH_ITERRUPT(PORT, PIN, LEVEL, MODE) \
- { \
- GPIO##PORT->DDR &= (uint8_t)(~(1 << PIN)); \
- GPIO##PORT->CR1 &= (uint8_t)(~(1 << PIN)); \
- GPIO##PORT->CR2 |= (1 << PIN); \
- }
- #define GPIO_PIN_CONFIGURATION_INPUT_FLOATING_WITHOUT_ITERRUPT(PORT, PIN, LEVEL, MODE) \
- { \
- GPIO##PORT->DDR &= (uint8_t)(~(1 << PIN)); \
- GPIO##PORT->CR1 &= (uint8_t)(~(1 << PIN)); \
- GPIO##PORT->CR2 &= (uint8_t)(~(1 << PIN)); \
- }
- //------------------------------------------------------------------------------
- #define GPIO_PIN_CONFIGURATION(PORT, PIN, LEVEL, MODE) \
- { \
- GPIO_PIN_CONFIGURATION_##MODE(PORT, PIN, LEVEL, MODE); \
- }
- //------------------------------------------------------------------------------
- #define GPIO_PIN_OFF_HIGH(PORT, PIN, LEVEL, MODE) \
- { GPIO##PORT->ODR &= (uint8_t)((uint8_t)(~(1 << PIN))); }
- #define GPIO_PIN_OFF_LOW(PORT, PIN, LEVEL, MODE) \
- { GPIO##PORT->ODR |= (1 << PIN); }
- #define GPIO_PIN_OFF(PORT, PIN, LEVEL, MODE) \
- { GPIO_PIN_OFF_##LEVEL(PORT, PIN, LEVEL, MODE) }
- //------------------------------------------------------------------------------
- #define GPIO_PIN_ON_HIGH(PORT, PIN, LEVEL, MODE) \
- { GPIO##PORT->ODR |= (1 << PIN); }
- #define GPIO_PIN_ON_LOW(PORT, PIN, LEVEL, MODE) \
- { GPIO##PORT->ODR &= (uint8_t)(~(1 << PIN)); }
- #define GPIO_PIN_ON(PORT, PIN, LEVEL, MODE) \
- { GPIO_PIN_ON_##LEVEL(PORT, PIN, LEVEL, MODE) }
- //------------------------------------------------------------------------------
- #define GPIO_PIN_TOGGLE(PORT, PIN, LEVEL, MODE) \
- { GPIO##PORT->ODR ^= (uint8_t)(1 << PIN); }
- //------------------------------------------------------------------------------
- #define GPIO_PIN_SIGNAL_HIGH(PORT, PIN, LEVEL, MODE) \
- ( (GPIO##PORT->IDR & (1 << PIN)) == (1 << PIN) )
- #define GPIO_PIN_SIGNAL_LOW(PORT, PIN, LEVEL, MODE) \
- ( (GPIO##PORT->IDR & (1 << PIN)) != (1 << PIN) )
- #define GPIO_PIN_SIGNAL(PORT, PIN, LEVEL, MODE) \
- ( GPIO_PIN_SIGNAL_##LEVEL(PORT, PIN, LEVEL, MODE) )
- //------------------------------------------------------------------------------
- #define PIN_CONFIGURATION(PIN_DESCRIPTION) GPIO_PIN_CONFIGURATION(PIN_DESCRIPTION)
- #define PIN_ON(PIN_DESCRIPTION) GPIO_PIN_ON(PIN_DESCRIPTION)
- #define PIN_OFF(PIN_DESCRIPTION) GPIO_PIN_OFF(PIN_DESCRIPTION)
- #define PIN_TOGGLE(PIN_DESCRIPTION) GPIO_PIN_TOGGLE(PIN_DESCRIPTION)
- #define PIN_SIGNAL(PIN_DESCRIPTION) GPIO_PIN_SIGNAL(PIN_DESCRIPTION)
- #endif /* MCU_GPIO_H_ */
|