220 lines
5.8 KiB
C
220 lines
5.8 KiB
C
|
|
#include "includes.h"
|
|||
|
|
|
|||
|
|
volatile uint8_t Key_Wakeup = 0; // <20>Ƿ<C7B7><F1B0B4BC><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
// 485<38><35><EFBFBD>ڽ<EFBFBD><DABD>յ<EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
#define KEY_TASKM_DATA_COUNT 3
|
|||
|
|
loopbuff_t Key_TaskM;
|
|||
|
|
uint8_t Key_TaskM_Data[sizeof(uint8_t) * (KEY_TASKM_DATA_COUNT + 1)] = {0};
|
|||
|
|
// 485<38><35><EFBFBD>ڽ<EFBFBD><DABD>յ<EFBFBD><D5B5>ź<EFBFBD><C5BA><EFBFBD>
|
|||
|
|
SemaphoreHandle_t Key_Semaphore = NULL; // <20><>ֵ<EFBFBD>ź<EFBFBD><C5BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
void Key_Init(void)
|
|||
|
|
{
|
|||
|
|
LL_EXTI_InitTypeDef EXTI_InitStruct = {0};
|
|||
|
|
|
|||
|
|
/* GPIO Ports Clock Enable */
|
|||
|
|
LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOB);
|
|||
|
|
|
|||
|
|
/**/
|
|||
|
|
// LL_SYSCFG_SetEXTISource(LL_SYSCFG_EXTI_PORTE, LL_SYSCFG_EXTI_LINE2);
|
|||
|
|
|
|||
|
|
/**/
|
|||
|
|
LL_SYSCFG_SetEXTISource(LL_SYSCFG_EXTI_PORTB, LL_SYSCFG_EXTI_LINE3);
|
|||
|
|
|
|||
|
|
/**/
|
|||
|
|
LL_SYSCFG_SetEXTISource(LL_SYSCFG_EXTI_PORTB, LL_SYSCFG_EXTI_LINE4);
|
|||
|
|
|
|||
|
|
/**/
|
|||
|
|
LL_SYSCFG_SetEXTISource(LL_SYSCFG_EXTI_PORTB, LL_SYSCFG_EXTI_LINE5);
|
|||
|
|
|
|||
|
|
/**/
|
|||
|
|
// LL_SYSCFG_SetEXTISource(LL_SYSCFG_EXTI_PORTE, LL_SYSCFG_EXTI_LINE6);
|
|||
|
|
|
|||
|
|
/**/
|
|||
|
|
// EXTI_InitStruct.Line_0_31 = LL_EXTI_LINE_2;
|
|||
|
|
// EXTI_InitStruct.Line_32_63 = LL_EXTI_LINE_NONE;
|
|||
|
|
// EXTI_InitStruct.LineCommand = ENABLE;
|
|||
|
|
// EXTI_InitStruct.Mode = LL_EXTI_MODE_IT;
|
|||
|
|
// EXTI_InitStruct.Trigger = LL_EXTI_TRIGGER_RISING;
|
|||
|
|
// LL_EXTI_Init(&EXTI_InitStruct);
|
|||
|
|
|
|||
|
|
/**/
|
|||
|
|
EXTI_InitStruct.Line_0_31 = LL_EXTI_LINE_3;
|
|||
|
|
EXTI_InitStruct.Line_32_63 = LL_EXTI_LINE_NONE;
|
|||
|
|
EXTI_InitStruct.LineCommand = ENABLE;
|
|||
|
|
EXTI_InitStruct.Mode = LL_EXTI_MODE_IT;
|
|||
|
|
EXTI_InitStruct.Trigger = LL_EXTI_TRIGGER_FALLING;
|
|||
|
|
LL_EXTI_Init(&EXTI_InitStruct);
|
|||
|
|
|
|||
|
|
/**/
|
|||
|
|
EXTI_InitStruct.Line_0_31 = LL_EXTI_LINE_4;
|
|||
|
|
EXTI_InitStruct.Line_32_63 = LL_EXTI_LINE_NONE;
|
|||
|
|
EXTI_InitStruct.LineCommand = ENABLE;
|
|||
|
|
EXTI_InitStruct.Mode = LL_EXTI_MODE_IT;
|
|||
|
|
EXTI_InitStruct.Trigger = LL_EXTI_TRIGGER_FALLING;
|
|||
|
|
LL_EXTI_Init(&EXTI_InitStruct);
|
|||
|
|
|
|||
|
|
/**/
|
|||
|
|
EXTI_InitStruct.Line_0_31 = LL_EXTI_LINE_5;
|
|||
|
|
EXTI_InitStruct.Line_32_63 = LL_EXTI_LINE_NONE;
|
|||
|
|
EXTI_InitStruct.LineCommand = ENABLE;
|
|||
|
|
EXTI_InitStruct.Mode = LL_EXTI_MODE_IT;
|
|||
|
|
EXTI_InitStruct.Trigger = LL_EXTI_TRIGGER_FALLING;
|
|||
|
|
LL_EXTI_Init(&EXTI_InitStruct);
|
|||
|
|
|
|||
|
|
// /**/
|
|||
|
|
// EXTI_InitStruct.Line_0_31 = LL_EXTI_LINE_6;
|
|||
|
|
// EXTI_InitStruct.Line_32_63 = LL_EXTI_LINE_NONE;
|
|||
|
|
// EXTI_InitStruct.LineCommand = ENABLE;
|
|||
|
|
// EXTI_InitStruct.Mode = LL_EXTI_MODE_IT;
|
|||
|
|
// EXTI_InitStruct.Trigger = LL_EXTI_TRIGGER_FALLING;
|
|||
|
|
// LL_EXTI_Init(&EXTI_InitStruct);
|
|||
|
|
|
|||
|
|
/**/
|
|||
|
|
// LL_GPIO_SetPinPull(GPIOE, LL_GPIO_PIN_2, LL_GPIO_PULL_NO);
|
|||
|
|
|
|||
|
|
/**/
|
|||
|
|
LL_GPIO_SetPinPull(GPIOB, LL_GPIO_PIN_3, LL_GPIO_PULL_NO);
|
|||
|
|
|
|||
|
|
/**/
|
|||
|
|
LL_GPIO_SetPinPull(GPIOB, LL_GPIO_PIN_4, LL_GPIO_PULL_NO);
|
|||
|
|
|
|||
|
|
/**/
|
|||
|
|
LL_GPIO_SetPinPull(GPIOB, LL_GPIO_PIN_5, LL_GPIO_PULL_NO);
|
|||
|
|
|
|||
|
|
/**/
|
|||
|
|
// LL_GPIO_SetPinPull(GPIOE, LL_GPIO_PIN_6, LL_GPIO_PULL_NO);
|
|||
|
|
|
|||
|
|
/**/
|
|||
|
|
// LL_GPIO_SetPinMode(GPIOE, LL_GPIO_PIN_2, LL_GPIO_MODE_INPUT);
|
|||
|
|
|
|||
|
|
/**/
|
|||
|
|
LL_GPIO_SetPinMode(GPIOB, LL_GPIO_PIN_3, LL_GPIO_MODE_INPUT);
|
|||
|
|
|
|||
|
|
/**/
|
|||
|
|
LL_GPIO_SetPinMode(GPIOB, LL_GPIO_PIN_4, LL_GPIO_MODE_INPUT);
|
|||
|
|
|
|||
|
|
/**/
|
|||
|
|
LL_GPIO_SetPinMode(GPIOB, LL_GPIO_PIN_5, LL_GPIO_MODE_INPUT);
|
|||
|
|
|
|||
|
|
/**/
|
|||
|
|
// LL_GPIO_SetPinMode(GPIOE, LL_GPIO_PIN_6, LL_GPIO_MODE_INPUT);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void Key_Open()
|
|||
|
|
{
|
|||
|
|
// <20><><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
LoopBuff_Create(&Key_TaskM, sizeof(uint8_t), KEY_TASKM_DATA_COUNT, 0, (uint32_t) Key_TaskM_Data);
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD><C5BA><EFBFBD>
|
|||
|
|
Key_Semaphore = xSemaphoreCreateBinary();
|
|||
|
|
|
|||
|
|
/* EXTI interrupt init*/
|
|||
|
|
// NVIC_SetPriority(EXTI2_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),5, 0));
|
|||
|
|
// NVIC_EnableIRQ(EXTI2_IRQn);
|
|||
|
|
NVIC_SetPriority(EXTI3_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),5, 0));
|
|||
|
|
NVIC_EnableIRQ(EXTI3_IRQn);
|
|||
|
|
NVIC_SetPriority(EXTI4_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),5, 0));
|
|||
|
|
NVIC_EnableIRQ(EXTI4_IRQn);
|
|||
|
|
NVIC_SetPriority(EXTI9_5_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),5, 0));
|
|||
|
|
NVIC_EnableIRQ(EXTI9_5_IRQn);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
void Key_Handler(void)
|
|||
|
|
{
|
|||
|
|
static uint32_t key_tick = 0;
|
|||
|
|
uint32_t tick = GetTickCount();
|
|||
|
|
uint8_t g_KeyVal = KEY_INVALID;
|
|||
|
|
BaseType_t xHigherPriorityTaskWoken;
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
|||
|
|
uint8_t //pe2 = LL_GPIO_IsInputPinSet(GPIOE, GPIO_PIN_2),
|
|||
|
|
pe3 = LL_GPIO_IsInputPinSet(GPIOB, GPIO_PIN_3),
|
|||
|
|
pe4 = LL_GPIO_IsInputPinSet(GPIOB, GPIO_PIN_4),
|
|||
|
|
pe5 = LL_GPIO_IsInputPinSet(GPIOB, GPIO_PIN_5);
|
|||
|
|
//pe6 = LL_GPIO_IsInputPinSet(GPIOE, GPIO_PIN_6);
|
|||
|
|
|
|||
|
|
// <20><>¼<EFBFBD>Ƿ<C7B7><F1B0B4BC><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
Key_Wakeup = Wakeup_Sleeping;
|
|||
|
|
|
|||
|
|
if(Wakeup_Sleeping)
|
|||
|
|
{
|
|||
|
|
SysTick->CTRL |= (SysTick_CTRL_ENABLE_Msk | SysTick_CTRL_TICKINT_Msk);
|
|||
|
|
//SystemClock_Config();
|
|||
|
|
delay_ms(10);
|
|||
|
|
Vcc_Enable();
|
|||
|
|
delay_ms(40);
|
|||
|
|
Wakeup_Sleeping = 0;
|
|||
|
|
|
|||
|
|
// <20>ж<EFBFBD><D0B6>Ƿ<EFBFBD>Ϊ<EFBFBD>͵<EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD>ų<EFBFBD><C5B3><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if(/*!LL_GPIO_IsInputPinSet(GPIOE, GPIO_PIN_2) &&*/ LL_GPIO_IsInputPinSet(GPIOB, GPIO_PIN_3)
|
|||
|
|
&& LL_GPIO_IsInputPinSet(GPIOB, GPIO_PIN_4) && LL_GPIO_IsInputPinSet(GPIOB, GPIO_PIN_5)
|
|||
|
|
/*&& LL_GPIO_IsInputPinSet(GPIOE, GPIO_PIN_6)*/)
|
|||
|
|
{
|
|||
|
|
printf("\nWakeup by DISTURB2 ...\n");
|
|||
|
|
|
|||
|
|
// <20>ɸ<EFBFBD><C9B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>İ<EFBFBD><C4B0><EFBFBD><EFBFBD>жϣ<D0B6><CFA3><EFBFBD><EFBFBD>ź<EFBFBD><C5BA><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
printf("\n\nWake up by KEY.\n\n");
|
|||
|
|
|
|||
|
|
// <20>ɼ<EFBFBD><C9BC><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
Sample_NotifyFromISR();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>300ms<6D><73><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if((tick >= key_tick && tick - key_tick < 300) || (tick < key_tick && 0xFFFFFFFFul - key_tick + 1 + tick < 300))
|
|||
|
|
return;
|
|||
|
|
|
|||
|
|
g_KeyVal = KEY_INVALID;
|
|||
|
|
// if(pe2 != 0)
|
|||
|
|
// {
|
|||
|
|
// printf("\n----------- Key pe2 pressed -----------\n");
|
|||
|
|
// g_KeyVal = KEY_UP;
|
|||
|
|
// }
|
|||
|
|
// else
|
|||
|
|
if(pe3 == 0)
|
|||
|
|
{
|
|||
|
|
//printf("\n----------- Key pe3 pressed -----------\n");
|
|||
|
|
g_KeyVal = KEY_UP;
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
else if(pe4 == 0)
|
|||
|
|
{
|
|||
|
|
//printf("\n----------- Key pe4 pressed -----------\n");
|
|||
|
|
g_KeyVal = KEY_FUNC;
|
|||
|
|
}
|
|||
|
|
else if(pe5 == 0)
|
|||
|
|
{
|
|||
|
|
//printf("\n----------- Key pe5 pressed -----------\n");
|
|||
|
|
//g_KeyVal = KEY_DOWN;
|
|||
|
|
g_KeyVal = KEY_SET;
|
|||
|
|
}
|
|||
|
|
/*
|
|||
|
|
else if(pe6 == 0)
|
|||
|
|
{
|
|||
|
|
//printf("\n----------- Key pe6 pressed -----------\n");
|
|||
|
|
g_KeyVal = KEY_SET;
|
|||
|
|
}
|
|||
|
|
*/
|
|||
|
|
if(g_KeyVal != KEY_INVALID)
|
|||
|
|
{
|
|||
|
|
key_tick = GetTickCount();
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD>¼<EFBFBD><C2BC><EFBFBD>ʱ<EFBFBD><CAB1>
|
|||
|
|
Form_ResetTimer();
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
LCD_Disabled = 0;
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD>뻺<EFBFBD><EBBBBA>
|
|||
|
|
LoopBuff_PutItem(&Key_TaskM, &g_KeyVal);
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
xSemaphoreGiveFromISR(Key_Semaphore, &xHigherPriorityTaskWoken);
|
|||
|
|
}
|
|||
|
|
}
|