You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
392 lines
6.9 KiB
392 lines
6.9 KiB
|
|
#pragma once
|
|
#include "../chip/iflytop_no_os.h"
|
|
|
|
namespace iflytop {
|
|
|
|
#define STM32_GPIO_LISTENER_NUM 10
|
|
class STM32_GPIO;
|
|
class STM32_GPIO_LISTENER;
|
|
class STM32_GPIO {
|
|
public:
|
|
typedef enum {
|
|
kRisingIrqEvent,
|
|
kFallingIrqEvent,
|
|
} IrqTypeEvent_t;
|
|
|
|
typedef enum {
|
|
kOutput_nopull,
|
|
kOutput_pullup,
|
|
kOutput_pulldown,
|
|
kOutput_od,
|
|
kInput_noIrq,
|
|
kInput_risingIrq,
|
|
kInput_fallingIrq,
|
|
kInput_risingAndFallingIrq,
|
|
} GPIOMode_t;
|
|
|
|
private:
|
|
const char *m_name;
|
|
GPIO_TypeDef *m_gpio;
|
|
uint16_t m_pin;
|
|
GPIOMode_t m_mode;
|
|
bool m_mirror;
|
|
bool lastLevel;
|
|
|
|
STM32_GPIO_LISTENER *m_listener;
|
|
|
|
private:
|
|
void init(GPIOMode_t gpiomode, bool mirror, bool initLevel);
|
|
|
|
public:
|
|
STM32_GPIO(const char *name, GPIO_TypeDef *gpio, uint16_t pin) : m_name(name), m_gpio(gpio), m_pin(pin) { m_mirror = false; }
|
|
|
|
void initAsOutput(GPIOMode_t gpiomode, bool mirror, bool initLevel);
|
|
void initAsOutput(bool initLevel);
|
|
void initAsInput(GPIOMode_t gpiomode, bool mirror);
|
|
void initAsInput();
|
|
|
|
void initAsMirrorInput();
|
|
|
|
void regListener(STM32_GPIO_LISTENER *listener);
|
|
|
|
bool isMirror();
|
|
|
|
bool isItRisingEXITGPIO();
|
|
bool isItFallingEXITGPIO();
|
|
bool isItRisingAndItFallingEXITGPIO();
|
|
|
|
/*******************************************************************************
|
|
* 基本状态读写 *
|
|
*******************************************************************************/
|
|
|
|
bool getState();
|
|
uint32_t getStateUint32();
|
|
bool setState(bool state);
|
|
void toggleState();
|
|
|
|
/*******************************************************************************
|
|
* 辅助方法 *
|
|
*******************************************************************************/
|
|
IRQn_Type getEXTIIRQn();
|
|
GPIO_TypeDef *getPort() { return m_gpio; }
|
|
uint16_t getPin() { return m_pin; }
|
|
|
|
bool tryTriggerIRQ(uint16_t GPIO_Pin);
|
|
|
|
private:
|
|
bool enableClock();
|
|
};
|
|
|
|
class STM32_GPIO_LISTENER {
|
|
public:
|
|
virtual void STM32_GPIO_onIRQ(STM32_GPIO *GPIO_Pin, STM32_GPIO::IrqTypeEvent_t irqevent) {}
|
|
};
|
|
|
|
#ifdef GPIOA
|
|
#ifdef GPIO_PIN_0
|
|
extern STM32_GPIO PA0;
|
|
#endif
|
|
#ifdef GPIO_PIN_1
|
|
extern STM32_GPIO PA1;
|
|
#endif
|
|
#ifdef GPIO_PIN_2
|
|
extern STM32_GPIO PA2;
|
|
#endif
|
|
#ifdef GPIO_PIN_3
|
|
extern STM32_GPIO PA3;
|
|
#endif
|
|
#ifdef GPIO_PIN_4
|
|
extern STM32_GPIO PA4;
|
|
#endif
|
|
#ifdef GPIO_PIN_5
|
|
extern STM32_GPIO PA5;
|
|
#endif
|
|
#ifdef GPIO_PIN_6
|
|
extern STM32_GPIO PA6;
|
|
#endif
|
|
#ifdef GPIO_PIN_7
|
|
extern STM32_GPIO PA7;
|
|
#endif
|
|
#ifdef GPIO_PIN_8
|
|
extern STM32_GPIO PA8;
|
|
#endif
|
|
#ifdef GPIO_PIN_9
|
|
extern STM32_GPIO PA9;
|
|
#endif
|
|
#ifdef GPIO_PIN_10
|
|
extern STM32_GPIO PA10;
|
|
#endif
|
|
#ifdef GPIO_PIN_11
|
|
extern STM32_GPIO PA11;
|
|
#endif
|
|
#ifdef GPIO_PIN_12
|
|
extern STM32_GPIO PA12;
|
|
#endif
|
|
#ifdef GPIO_PIN_13
|
|
extern STM32_GPIO PA13;
|
|
#endif
|
|
#ifdef GPIO_PIN_14
|
|
extern STM32_GPIO PA14;
|
|
#endif
|
|
#ifdef GPIO_PIN_15
|
|
extern STM32_GPIO PA15;
|
|
#endif
|
|
#endif
|
|
|
|
#ifdef GPIOB
|
|
#ifdef GPIO_PIN_0
|
|
extern STM32_GPIO PB0;
|
|
#endif
|
|
#ifdef GPIO_PIN_1
|
|
extern STM32_GPIO PB1;
|
|
#endif
|
|
#ifdef GPIO_PIN_2
|
|
extern STM32_GPIO PB2;
|
|
#endif
|
|
#ifdef GPIO_PIN_3
|
|
extern STM32_GPIO PB3;
|
|
#endif
|
|
#ifdef GPIO_PIN_4
|
|
extern STM32_GPIO PB4;
|
|
#endif
|
|
#ifdef GPIO_PIN_5
|
|
extern STM32_GPIO PB5;
|
|
#endif
|
|
#ifdef GPIO_PIN_6
|
|
extern STM32_GPIO PB6;
|
|
#endif
|
|
#ifdef GPIO_PIN_7
|
|
extern STM32_GPIO PB7;
|
|
#endif
|
|
#ifdef GPIO_PIN_8
|
|
extern STM32_GPIO PB8;
|
|
#endif
|
|
#ifdef GPIO_PIN_9
|
|
extern STM32_GPIO PB9;
|
|
#endif
|
|
#ifdef GPIO_PIN_10
|
|
extern STM32_GPIO PB10;
|
|
#endif
|
|
#ifdef GPIO_PIN_11
|
|
extern STM32_GPIO PB11;
|
|
#endif
|
|
#ifdef GPIO_PIN_12
|
|
extern STM32_GPIO PB12;
|
|
#endif
|
|
#ifdef GPIO_PIN_13
|
|
extern STM32_GPIO PB13;
|
|
#endif
|
|
#ifdef GPIO_PIN_14
|
|
extern STM32_GPIO PB14;
|
|
#endif
|
|
#ifdef GPIO_PIN_15
|
|
extern STM32_GPIO PB15;
|
|
#endif
|
|
#endif
|
|
|
|
#ifdef GPIOC
|
|
#ifdef GPIO_PIN_0
|
|
extern STM32_GPIO PC0;
|
|
#endif
|
|
#ifdef GPIO_PIN_1
|
|
extern STM32_GPIO PC1;
|
|
#endif
|
|
#ifdef GPIO_PIN_2
|
|
extern STM32_GPIO PC2;
|
|
#endif
|
|
#ifdef GPIO_PIN_3
|
|
extern STM32_GPIO PC3;
|
|
#endif
|
|
#ifdef GPIO_PIN_4
|
|
extern STM32_GPIO PC4;
|
|
#endif
|
|
#ifdef GPIO_PIN_5
|
|
extern STM32_GPIO PC5;
|
|
#endif
|
|
#ifdef GPIO_PIN_6
|
|
extern STM32_GPIO PC6;
|
|
#endif
|
|
#ifdef GPIO_PIN_7
|
|
extern STM32_GPIO PC7;
|
|
#endif
|
|
#ifdef GPIO_PIN_8
|
|
extern STM32_GPIO PC8;
|
|
#endif
|
|
#ifdef GPIO_PIN_9
|
|
extern STM32_GPIO PC9;
|
|
#endif
|
|
#ifdef GPIO_PIN_10
|
|
extern STM32_GPIO PC10;
|
|
#endif
|
|
#ifdef GPIO_PIN_11
|
|
extern STM32_GPIO PC11;
|
|
#endif
|
|
#ifdef GPIO_PIN_12
|
|
extern STM32_GPIO PC12;
|
|
#endif
|
|
#ifdef GPIO_PIN_13
|
|
extern STM32_GPIO PC13;
|
|
#endif
|
|
#ifdef GPIO_PIN_14
|
|
extern STM32_GPIO PC14;
|
|
#endif
|
|
#ifdef GPIO_PIN_15
|
|
extern STM32_GPIO PC15;
|
|
#endif
|
|
#endif
|
|
|
|
#ifdef GPIOD
|
|
#ifdef GPIO_PIN_0
|
|
extern STM32_GPIO PD0;
|
|
#endif
|
|
#ifdef GPIO_PIN_1
|
|
extern STM32_GPIO PD1;
|
|
#endif
|
|
#ifdef GPIO_PIN_2
|
|
extern STM32_GPIO PD2;
|
|
#endif
|
|
#ifdef GPIO_PIN_3
|
|
extern STM32_GPIO PD3;
|
|
#endif
|
|
#ifdef GPIO_PIN_4
|
|
extern STM32_GPIO PD4;
|
|
#endif
|
|
#ifdef GPIO_PIN_5
|
|
extern STM32_GPIO PD5;
|
|
#endif
|
|
#ifdef GPIO_PIN_6
|
|
extern STM32_GPIO PD6;
|
|
#endif
|
|
#ifdef GPIO_PIN_7
|
|
extern STM32_GPIO PD7;
|
|
#endif
|
|
#ifdef GPIO_PIN_8
|
|
extern STM32_GPIO PD8;
|
|
#endif
|
|
#ifdef GPIO_PIN_9
|
|
extern STM32_GPIO PD9;
|
|
#endif
|
|
#ifdef GPIO_PIN_10
|
|
extern STM32_GPIO PD10;
|
|
#endif
|
|
#ifdef GPIO_PIN_11
|
|
extern STM32_GPIO PD11;
|
|
#endif
|
|
#ifdef GPIO_PIN_12
|
|
extern STM32_GPIO PD12;
|
|
#endif
|
|
#ifdef GPIO_PIN_13
|
|
extern STM32_GPIO PD13;
|
|
#endif
|
|
#ifdef GPIO_PIN_14
|
|
extern STM32_GPIO PD14;
|
|
#endif
|
|
#ifdef GPIO_PIN_15
|
|
extern STM32_GPIO PD15;
|
|
#endif
|
|
#endif
|
|
|
|
#ifdef GPIOE
|
|
#ifdef GPIO_PIN_0
|
|
extern STM32_GPIO PE0;
|
|
#endif
|
|
#ifdef GPIO_PIN_1
|
|
extern STM32_GPIO PE1;
|
|
#endif
|
|
#ifdef GPIO_PIN_2
|
|
extern STM32_GPIO PE2;
|
|
#endif
|
|
#ifdef GPIO_PIN_3
|
|
extern STM32_GPIO PE3;
|
|
#endif
|
|
#ifdef GPIO_PIN_4
|
|
extern STM32_GPIO PE4;
|
|
#endif
|
|
#ifdef GPIO_PIN_5
|
|
extern STM32_GPIO PE5;
|
|
#endif
|
|
#ifdef GPIO_PIN_6
|
|
extern STM32_GPIO PE6;
|
|
#endif
|
|
#ifdef GPIO_PIN_7
|
|
extern STM32_GPIO PE7;
|
|
#endif
|
|
#ifdef GPIO_PIN_8
|
|
extern STM32_GPIO PE8;
|
|
#endif
|
|
#ifdef GPIO_PIN_9
|
|
extern STM32_GPIO PE9;
|
|
#endif
|
|
#ifdef GPIO_PIN_10
|
|
extern STM32_GPIO PE10;
|
|
#endif
|
|
#ifdef GPIO_PIN_11
|
|
extern STM32_GPIO PE11;
|
|
#endif
|
|
#ifdef GPIO_PIN_12
|
|
extern STM32_GPIO PE12;
|
|
#endif
|
|
#ifdef GPIO_PIN_13
|
|
extern STM32_GPIO PE13;
|
|
#endif
|
|
#ifdef GPIO_PIN_14
|
|
extern STM32_GPIO PE14;
|
|
#endif
|
|
#ifdef GPIO_PIN_15
|
|
extern STM32_GPIO PE15;
|
|
#endif
|
|
#endif
|
|
|
|
#ifdef GPIOF
|
|
#ifdef GPIO_PIN_0
|
|
extern STM32_GPIO PF0;
|
|
#endif
|
|
#ifdef GPIO_PIN_1
|
|
extern STM32_GPIO PF1;
|
|
#endif
|
|
#ifdef GPIO_PIN_2
|
|
extern STM32_GPIO PF2;
|
|
#endif
|
|
#ifdef GPIO_PIN_3
|
|
extern STM32_GPIO PF3;
|
|
#endif
|
|
#ifdef GPIO_PIN_4
|
|
extern STM32_GPIO PF4;
|
|
#endif
|
|
#ifdef GPIO_PIN_5
|
|
extern STM32_GPIO PF5;
|
|
#endif
|
|
#ifdef GPIO_PIN_6
|
|
extern STM32_GPIO PF6;
|
|
#endif
|
|
#ifdef GPIO_PIN_7
|
|
extern STM32_GPIO PF7;
|
|
#endif
|
|
#ifdef GPIO_PIN_8
|
|
extern STM32_GPIO PF8;
|
|
#endif
|
|
#ifdef GPIO_PIN_9
|
|
extern STM32_GPIO PF9;
|
|
#endif
|
|
#ifdef GPIO_PIN_10
|
|
extern STM32_GPIO PF10;
|
|
#endif
|
|
#ifdef GPIO_PIN_11
|
|
extern STM32_GPIO PF11;
|
|
#endif
|
|
#ifdef GPIO_PIN_12
|
|
extern STM32_GPIO PF12;
|
|
#endif
|
|
#ifdef GPIO_PIN_13
|
|
extern STM32_GPIO PF13;
|
|
#endif
|
|
#ifdef GPIO_PIN_14
|
|
extern STM32_GPIO PF14;
|
|
#endif
|
|
#ifdef GPIO_PIN_15
|
|
extern STM32_GPIO PF15;
|
|
#endif
|
|
#endif
|
|
|
|
} // namespace iflytop
|