#include "McuSelfDestructionDrv.h" /* 自毁中断回调函数 */ static GpioTypeCallback gMcuSelfDestructionDrvCallback; /* 终端触发IO口1 */ #define MCU_DRV_SELF_DESTRUCTION_INPUT1_INT_GPIO_PIN GPIO_PIN_10 #define MCU_DRV_SELF_DESTRUCTION_INPUT1_INT_GPIO_PORT GPIOE #define MCU_DRV_SELF_DESTRUCTION_INPUT1_INT_GPIO_MODE GPIO_MODE_OUTPUT_PP #define MCU_DRV_SELF_DESTRUCTION_INPUT1_INT_GPIO_PULL GPIO_PULLDOWN #define MCU_DRV_SELF_DESTRUCTION_INPUT1_INT_GPIO_SPEED GPIO_SPEED_FREQ_HIGH /* 终端触发IO口2 */ #define MCU_DRV_SELF_DESTRUCTION_INPUT2_INT_GPIO_PIN GPIO_PIN_11 #define MCU_DRV_SELF_DESTRUCTION_INPUT2_INT_GPIO_PORT GPIOE #define MCU_DRV_SELF_DESTRUCTION_INPUT2_INT_GPIO_MODE GPIO_MODE_OUTPUT_PP #define MCU_DRV_SELF_DESTRUCTION_INPUT2_INT_GPIO_PULL GPIO_PULLDOWN #define MCU_DRV_SELF_DESTRUCTION_INPUT2_INT_GPIO_SPEED GPIO_SPEED_FREQ_HIGH /* 终端触发IO口3 */ #define MCU_DRV_SELF_DESTRUCTION_INPUT3_INT_GPIO_PIN GPIO_PIN_12 #define MCU_DRV_SELF_DESTRUCTION_INPUT3_INT_GPIO_PORT GPIOE #define MCU_DRV_SELF_DESTRUCTION_INPUT3_INT_GPIO_MODE GPIO_MODE_OUTPUT_PP #define MCU_DRV_SELF_DESTRUCTION_INPUT3_INT_GPIO_PULL GPIO_PULLDOWN #define MCU_DRV_SELF_DESTRUCTION_INPUT3_INT_GPIO_SPEED GPIO_SPEED_FREQ_HIGH /* 终端触发IO口4 */ #define MCU_DRV_SELF_DESTRUCTION_INPUT4_INT_GPIO_PIN GPIO_PIN_13 #define MCU_DRV_SELF_DESTRUCTION_INPUT4_INT_GPIO_PORT GPIOE #define MCU_DRV_SELF_DESTRUCTION_INPUT4_INT_GPIO_MODE GPIO_MODE_OUTPUT_PP #define MCU_DRV_SELF_DESTRUCTION_INPUT4_INT_GPIO_PULL GPIO_PULLDOWN #define MCU_DRV_SELF_DESTRUCTION_INPUT4_INT_GPIO_SPEED GPIO_SPEED_FREQ_HIGH /* 终端响应口 */ #define MCU_DRV_SELF_DESTRUCTION_CTRL_POWER_GPIO_PIN GPIO_PIN_14 #define MCU_DRV_SELF_DESTRUCTION_CTRL_POWER_GPIO_PORT GPIOD #define MCU_DRV_SELF_DESTRUCTION_CTRL_POWER_GPIO_MODE GPIO_MODE_OUTPUT_PP #define MCU_DRV_SELF_DESTRUCTION_CTRL_POWER_GPIO_PULL GPIO_PULLDOWN #define MCU_DRV_SELF_DESTRUCTION_CTRL_POWER_GPIO_SPEED GPIO_SPEED_FREQ_HIGH /* 关闭自毁监检测 */ static void McuSelfDestructionDrvOffCheck(void); /* 打开自毁检测 */ static void McuSelfDestructionDrvOnCheck(void); /* 初始化 */ void McuSelfDestructionDrvInit(GpioTypeCallback Callback) { McuBspGpioInit(MCU_DRV_SELF_DESTRUCTION_CTRL_POWER_GPIO_PORT, MCU_DRV_SELF_DESTRUCTION_CTRL_POWER_GPIO_PIN, MCU_DRV_SELF_DESTRUCTION_CTRL_POWER_GPIO_MODE, MCU_DRV_SELF_DESTRUCTION_CTRL_POWER_GPIO_SPEED, MCU_DRV_SELF_DESTRUCTION_CTRL_POWER_GPIO_PULL, 0, NULL); McuBspGpioSetLevel(MCU_DRV_SELF_DESTRUCTION_CTRL_POWER_GPIO_PORT, MCU_DRV_SELF_DESTRUCTION_CTRL_POWER_GPIO_PIN, MCU_BSP_GPIO_OUT_LOW); gMcuSelfDestructionDrvCallback = Callback; } /* 设置自毁模式 */ void McuSelfDestructionDrvSetMode(uint32_t mode) { if (mode != 0) { McuSelfDestructionDrvOnCheck(); } else { McuSelfDestructionDrvOffCheck(); } } /* 打开或关闭自毁信号 */ void McuSelfDestructionDrvOnOff(int OnOff) { if (OnOff == 0) { McuBspGpioSetLevel(MCU_DRV_SELF_DESTRUCTION_CTRL_POWER_GPIO_PORT, MCU_DRV_SELF_DESTRUCTION_CTRL_POWER_GPIO_PIN, MCU_BSP_GPIO_OUT_LOW); } else { McuBspGpioSetLevel(MCU_DRV_SELF_DESTRUCTION_CTRL_POWER_GPIO_PORT, MCU_DRV_SELF_DESTRUCTION_CTRL_POWER_GPIO_PIN, MCU_BSP_GPIO_OUT_HIGH); } } /* 获取当前引脚的状态 */ int McuSelfDestructionDrvGetSta(void) { int rt = 0; if (1 == McuBspGpioGetLevel(MCU_DRV_SELF_DESTRUCTION_INPUT1_INT_GPIO_PORT, MCU_DRV_SELF_DESTRUCTION_INPUT1_INT_GPIO_PIN)) { rt = 1; } if (1 == McuBspGpioGetLevel(MCU_DRV_SELF_DESTRUCTION_INPUT2_INT_GPIO_PORT, MCU_DRV_SELF_DESTRUCTION_INPUT2_INT_GPIO_PIN)) { rt = 1; } if (1 == McuBspGpioGetLevel(MCU_DRV_SELF_DESTRUCTION_INPUT3_INT_GPIO_PORT, MCU_DRV_SELF_DESTRUCTION_INPUT3_INT_GPIO_PIN)) { rt = 1; } if (1 == McuBspGpioGetLevel(MCU_DRV_SELF_DESTRUCTION_INPUT4_INT_GPIO_PORT, MCU_DRV_SELF_DESTRUCTION_INPUT4_INT_GPIO_PIN)) { rt = 1; } return rt; } /* 关闭自毁监检测 */ static void McuSelfDestructionDrvOffCheck(void) { McuBspGpioInit(MCU_DRV_SELF_DESTRUCTION_INPUT1_INT_GPIO_PORT, MCU_DRV_SELF_DESTRUCTION_INPUT1_INT_GPIO_PIN, GPIO_MODE_ANALOG, GPIO_SPEED_FREQ_LOW, GPIO_PULLDOWN, 0, NULL); McuBspGpioInit(MCU_DRV_SELF_DESTRUCTION_INPUT2_INT_GPIO_PORT, MCU_DRV_SELF_DESTRUCTION_INPUT2_INT_GPIO_PIN, GPIO_MODE_ANALOG, GPIO_SPEED_FREQ_LOW, GPIO_PULLDOWN, 0, NULL); McuBspGpioInit(MCU_DRV_SELF_DESTRUCTION_INPUT3_INT_GPIO_PORT, MCU_DRV_SELF_DESTRUCTION_INPUT3_INT_GPIO_PIN, GPIO_MODE_ANALOG, GPIO_SPEED_FREQ_LOW, GPIO_PULLDOWN, 0, NULL); McuBspGpioInit(MCU_DRV_SELF_DESTRUCTION_INPUT4_INT_GPIO_PORT, MCU_DRV_SELF_DESTRUCTION_INPUT4_INT_GPIO_PIN, GPIO_MODE_ANALOG, GPIO_SPEED_FREQ_LOW, GPIO_PULLDOWN, 0, NULL); } /* 打开自毁检测 */ static void McuSelfDestructionDrvOnCheck(void) { McuBspGpioInit(MCU_DRV_SELF_DESTRUCTION_INPUT1_INT_GPIO_PORT, MCU_DRV_SELF_DESTRUCTION_INPUT1_INT_GPIO_PIN, GPIO_MODE_IT_RISING_FALLING, GPIO_SPEED_FREQ_HIGH, GPIO_PULLDOWN, MCU_BSP_GPIO_EXTI15_10, gMcuSelfDestructionDrvCallback); McuBspGpioInit(MCU_DRV_SELF_DESTRUCTION_INPUT2_INT_GPIO_PORT, MCU_DRV_SELF_DESTRUCTION_INPUT2_INT_GPIO_PIN, GPIO_MODE_IT_RISING_FALLING, GPIO_SPEED_FREQ_HIGH, GPIO_PULLDOWN, MCU_BSP_GPIO_EXTI15_10, gMcuSelfDestructionDrvCallback); McuBspGpioInit(MCU_DRV_SELF_DESTRUCTION_INPUT3_INT_GPIO_PORT, MCU_DRV_SELF_DESTRUCTION_INPUT3_INT_GPIO_PIN, GPIO_MODE_IT_RISING_FALLING, GPIO_SPEED_FREQ_HIGH, GPIO_PULLDOWN, MCU_BSP_GPIO_EXTI15_10, gMcuSelfDestructionDrvCallback); McuBspGpioInit(MCU_DRV_SELF_DESTRUCTION_INPUT4_INT_GPIO_PORT, MCU_DRV_SELF_DESTRUCTION_INPUT4_INT_GPIO_PIN, GPIO_MODE_IT_RISING_FALLING, GPIO_SPEED_FREQ_HIGH, GPIO_PULLDOWN, MCU_BSP_GPIO_EXTI15_10, gMcuSelfDestructionDrvCallback); }