20 #include "stm32f4xx_hal.h" 26 static unsigned char flg_have_int = 0;
27 static void (* inth_func)(
unsigned int intnum,
void *sp);
29 static void MX_GPIO_Init(
void)
31 GPIO_InitTypeDef GPIO_InitStruct;
37 GPIO_InitStruct.Pin = GPIO_PIN_13;
39 GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING_FALLING;
41 GPIO_InitStruct.Pull = GPIO_PULLUP;
42 GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
43 HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
49 static void init_gpio(
void)
54 static void inthdr_exti15_10(
unsigned int intnum,
void *sp)
56 __HAL_GPIO_EXTI_CLEAR_IT(EXTI_IMR_MR13);
57 DKPRINTF(0x01,
"INT %d(%d)\n", intnum, HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_13));
59 if(HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_13) == 0) {
62 inth_func(intnum, sp);
69 static int irq_register(
struct st_device *dev,
char *param)
75 register_interrupt(IRQ2VECT(EXTI15_10_IRQn), inthdr_exti15_10);
80 static int irq_ioctl(
struct st_device *dev,
unsigned int com,
unsigned int arg,
void *param)
84 return HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_13);
87 inth_func = (void (*)(
unsigned int,
void *))param;
95 HAL_NVIC_EnableIRQ(EXTI15_10_IRQn);
99 HAL_NVIC_DisableIRQ(EXTI15_10_IRQn);
104 SYSERR_PRINT(
"IOCMD_IRQ_SET_EDGE not support\n");
108 return HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_13);
114 SYSERR_PRINT(
"Unknow command %08lX arg %08lX\n", com, arg);
123 .explan =
"STM32F4 EXIT0-15",
124 .register_dev = irq_register,
外部割り込み(IRQ)ドライバ ioctl 用マクロ定義
#define DEF_DEV_NAME_IRQ
標準外部割り込み(IRQ)ドライバ名
#define IOCMD_IRQ_GET_LEVEL
割込端子のレベルを取得する
#define IOCMD_IRQ_SET_EDGE
割込エッジを設定する[TODO]
#define IOCMD_IRQ_UNREGISTER
割込処理関数を登録解除する
#define IOCMD_IRQ_REGISTER
割込処理関数を登録する
#define IOCMD_IRQ_GET_INT
割込状態を取得する
#define IOCMD_IRQ_ENABLE
割込を有効にする
char name[MAX_DEVNAMELRN]
デバイス名文字列
#define IOCMD_IRQ_DISABLE
割込を無効にする