117 lines
5.9 KiB
C
117 lines
5.9 KiB
C
#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);
|
|
}
|