代码暂存 优化完善letter shell功能
This commit is contained in:
parent
d8c6878e8b
commit
623a53b7a1
|
@ -40,7 +40,7 @@
|
||||||
#define SBP_PHY_UPDATE_DELAY 2400
|
#define SBP_PHY_UPDATE_DELAY 2400
|
||||||
|
|
||||||
// What is the advertising interval when device is discoverable (units of 625us, 80=50ms)
|
// What is the advertising interval when device is discoverable (units of 625us, 80=50ms)
|
||||||
#define DEFAULT_ADVERTISING_INTERVAL (160 * 20) //160 * 10
|
#define DEFAULT_ADVERTISING_INTERVAL (160 * 15) //160 * 10
|
||||||
|
|
||||||
// Limited discoverable mode advertises for 30.72s, and then stops
|
// Limited discoverable mode advertises for 30.72s, and then stops
|
||||||
// General discoverable mode advertises indefinitely
|
// General discoverable mode advertises indefinitely
|
||||||
|
|
|
@ -58,7 +58,7 @@ void app_task_handler(TeAppEvtType app_evt_type)
|
||||||
BSP_KEY_EnterLowpower();
|
BSP_KEY_EnterLowpower();
|
||||||
// DelayMs(10);
|
// DelayMs(10);
|
||||||
BSP_RequestSleep();
|
BSP_RequestSleep();
|
||||||
logDebug("gpio relase;BSP_RequestSleep");
|
logDebug("gpio relase;BSP_RequestSleep ");
|
||||||
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -1,2 +1,3 @@
|
||||||
不开启睡眠正常
|
系统进入睡眠模式后,需要长按键盘按键来激活letter shell
|
||||||
开启睡眠不初始化任何外设的情况下letter shell卡死,只有初始化4G后正常
|
激活后可正常使用letter shell
|
||||||
|
30秒无操作后自动进入睡眠
|
||||||
|
|
|
@ -8,6 +8,8 @@
|
||||||
#define UART3_RX_PIN GPIO_Pin_20 //PB20 日志打印
|
#define UART3_RX_PIN GPIO_Pin_20 //PB20 日志打印
|
||||||
#define UART3_TX_PIN GPIO_Pin_21 // PB21
|
#define UART3_TX_PIN GPIO_Pin_21 // PB21
|
||||||
|
|
||||||
|
// 定义Shell活动超时时间(毫秒)
|
||||||
|
#define SHELL_ACTIVITY_TIMEOUT 30000 // 30秒无活动后允许系统睡眠
|
||||||
|
|
||||||
void BSP_UART1_Init(void);
|
void BSP_UART1_Init(void);
|
||||||
unsigned int BSP_Uart1_Receive_Data(void *buf, unsigned int len);
|
unsigned int BSP_Uart1_Receive_Data(void *buf, unsigned int len);
|
||||||
|
@ -19,19 +21,5 @@ unsigned int BSP_Uart3_Send_Data(const void *buf, unsigned int len);
|
||||||
void BSP_Shell_Loop(void);
|
void BSP_Shell_Loop(void);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -19,6 +19,9 @@ tmosTaskID key_task_id = INVALID_TASK_ID;
|
||||||
volatile uint8_t key_wakeup_flag = 0;
|
volatile uint8_t key_wakeup_flag = 0;
|
||||||
volatile uint8_t key_timeout_flag = 0;
|
volatile uint8_t key_timeout_flag = 0;
|
||||||
|
|
||||||
|
// 声明外部函数
|
||||||
|
extern void BSP_UART3_HandleWakeupInterrupt(void);
|
||||||
|
|
||||||
static app_task_evt_handler_t p_handler = NULL;
|
static app_task_evt_handler_t p_handler = NULL;
|
||||||
|
|
||||||
static volatile uint8_t key_timeout_cnt = 0;
|
static volatile uint8_t key_timeout_cnt = 0;
|
||||||
|
@ -133,8 +136,6 @@ void BSP_KEY_EnterLowpower(void)
|
||||||
|
|
||||||
// 开启GPIOB中断
|
// 开启GPIOB中断
|
||||||
PFIC_EnableIRQ(GPIO_B_IRQn);
|
PFIC_EnableIRQ(GPIO_B_IRQn);
|
||||||
|
|
||||||
BSP_RequestSleep();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void BSP_KEY_ExitLowpower(void)
|
void BSP_KEY_ExitLowpower(void)
|
||||||
|
@ -320,12 +321,15 @@ __INTERRUPT // 告诉编译器使用硬件压栈
|
||||||
__HIGH_CODE // 放到RAM里
|
__HIGH_CODE // 放到RAM里
|
||||||
void GPIOB_IRQHandler(void)
|
void GPIOB_IRQHandler(void)
|
||||||
{
|
{
|
||||||
|
printf("GPIOB_IRQHandler \r\n");
|
||||||
|
if (GPIOB_ReadITFlagBit(KEY_B_PIN))
|
||||||
|
{
|
||||||
// 阻止睡眠
|
// 阻止睡眠
|
||||||
BSP_BlockSleep();
|
BSP_BlockSleep();
|
||||||
// 关按键中断
|
// 关按键中断
|
||||||
BSP_KEY_ExitLowpower();
|
BSP_KEY_ExitLowpower();
|
||||||
|
|
||||||
logDebug("KEY IRQ");
|
printf("KEY IRQ");
|
||||||
|
|
||||||
GPIOB_ClearITFlagBit(KEY_B_PIN);
|
GPIOB_ClearITFlagBit(KEY_B_PIN);
|
||||||
|
|
||||||
|
@ -341,4 +345,11 @@ void GPIOB_IRQHandler(void)
|
||||||
// BSP_KEY_ExitLowpower();
|
// BSP_KEY_ExitLowpower();
|
||||||
// }
|
// }
|
||||||
// tmos_set_event(key_task_id,KEY_SCAN_EVT);
|
// tmos_set_event(key_task_id,KEY_SCAN_EVT);
|
||||||
|
}
|
||||||
|
// else if (R16_PB_INT_IF & (1 << (20 % 16)))
|
||||||
|
// {
|
||||||
|
// printf("UART3 RX start Wake IRQ \r\n");
|
||||||
|
// // 调用UART3唤醒处理函数
|
||||||
|
// BSP_UART3_HandleWakeupInterrupt();
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,9 @@
|
||||||
#include "lwrb.h"
|
#include "lwrb.h"
|
||||||
#include "CH58x_uart.h"
|
#include "CH58x_uart.h"
|
||||||
#include "shell_port.h"
|
#include "shell_port.h"
|
||||||
|
#include "SLEEP.h"
|
||||||
|
#include "CONFIG.h"
|
||||||
|
#include "log.h"
|
||||||
|
|
||||||
#define UART1_RX_BUFFER_LENGTH 512U
|
#define UART1_RX_BUFFER_LENGTH 512U
|
||||||
#define UART1_TX_BUFFER_LENGTH 512U
|
#define UART1_TX_BUFFER_LENGTH 512U
|
||||||
|
@ -10,6 +13,8 @@
|
||||||
#define UART3_RX_BUFFER_LENGTH 1024U
|
#define UART3_RX_BUFFER_LENGTH 1024U
|
||||||
#define UART3_TX_BUFFER_LENGTH 1024U
|
#define UART3_TX_BUFFER_LENGTH 1024U
|
||||||
|
|
||||||
|
void BSP_Shell_SetActive(void);
|
||||||
|
|
||||||
|
|
||||||
lwrb_t uart1_rx_t;
|
lwrb_t uart1_rx_t;
|
||||||
lwrb_t uart1_tx_t;
|
lwrb_t uart1_tx_t;
|
||||||
|
@ -116,8 +121,9 @@ void BSP_UART3_Init(void)
|
||||||
GPIOB_ModeCfg(UART3_RX_PIN, GPIO_ModeIN_PU); // RXD-配置上拉输入
|
GPIOB_ModeCfg(UART3_RX_PIN, GPIO_ModeIN_PU); // RXD-配置上拉输入
|
||||||
GPIOB_ModeCfg(UART3_TX_PIN, GPIO_ModeOut_PP_5mA); // TXD-配置推挽输出,注意先让IO口输出高电平
|
GPIOB_ModeCfg(UART3_TX_PIN, GPIO_ModeOut_PP_5mA); // TXD-配置推挽输出,注意先让IO口输出高电平
|
||||||
UART3_DefInit();
|
UART3_DefInit();
|
||||||
UART3_BaudRateCfg(460800);
|
UART3_BaudRateCfg(115200); //460800
|
||||||
UART3_ByteTrigCfg(UART_1BYTE_TRIG);
|
UART3_ByteTrigCfg(UART_1BYTE_TRIG);
|
||||||
|
|
||||||
// 中断方式接收数据
|
// 中断方式接收数据
|
||||||
UART3_INTCfg(ENABLE, RB_IER_LINE_STAT | RB_IER_RECV_RDY | RB_IER_THR_EMPTY);
|
UART3_INTCfg(ENABLE, RB_IER_LINE_STAT | RB_IER_RECV_RDY | RB_IER_THR_EMPTY);
|
||||||
PFIC_EnableIRQ(UART3_IRQn);
|
PFIC_EnableIRQ(UART3_IRQn);
|
||||||
|
@ -126,6 +132,48 @@ void BSP_UART3_Init(void)
|
||||||
userShellInit();
|
userShellInit();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static tmosTaskID shell_timeout_task_id = INVALID_TASK_ID;
|
||||||
|
#define SHELL_TIMEOUT_EVT 0x0001
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief 超时后系统睡眠
|
||||||
|
*/
|
||||||
|
static uint16_t BSP_Shell_TimeoutTask(uint8_t task_id, uint16_t events)
|
||||||
|
{
|
||||||
|
if (events & SHELL_TIMEOUT_EVT)
|
||||||
|
{
|
||||||
|
printf("Shell_Timeout UART3 enter low power mode\r\n");
|
||||||
|
BSP_RequestSleep();
|
||||||
|
return (events ^ SHELL_TIMEOUT_EVT);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief 启动Shell活动超时定时器
|
||||||
|
*/
|
||||||
|
void BSP_Shell_StartTimeoutTimer(void)
|
||||||
|
{
|
||||||
|
if (shell_timeout_task_id == INVALID_TASK_ID)
|
||||||
|
{
|
||||||
|
shell_timeout_task_id = TMOS_ProcessEventRegister(BSP_Shell_TimeoutTask);
|
||||||
|
}
|
||||||
|
tmos_stop_task(shell_timeout_task_id, SHELL_TIMEOUT_EVT);
|
||||||
|
tmos_start_task(shell_timeout_task_id, SHELL_TIMEOUT_EVT, MS1_TO_SYSTEM_TIME(SHELL_ACTIVITY_TIMEOUT));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief 将Shell设置为活动状态,阻止系统睡眠
|
||||||
|
*/
|
||||||
|
void BSP_Shell_SetActive(void)
|
||||||
|
{
|
||||||
|
BSP_BlockSleep();
|
||||||
|
BSP_Shell_StartTimeoutTimer();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*********************************************************************
|
/*********************************************************************
|
||||||
* @fn UART1_IRQHandler
|
* @fn UART1_IRQHandler
|
||||||
*
|
*
|
||||||
|
@ -199,10 +247,10 @@ void UART3_IRQHandler(void)
|
||||||
}
|
}
|
||||||
case UART_II_RECV_RDY:
|
case UART_II_RECV_RDY:
|
||||||
case UART_II_RECV_TOUT: //接收超时
|
case UART_II_RECV_TOUT: //接收超时
|
||||||
printf("UART_II_RECV_TOUT \r\n");
|
BSP_Shell_SetActive();
|
||||||
while(R8_UART3_RFC)
|
while(R8_UART3_RFC)
|
||||||
{
|
{
|
||||||
printf("shellHandler \r\n");
|
logDebug("shellHandler \r\n");
|
||||||
shellHandler(&shell, R8_UART3_RBR);
|
shellHandler(&shell, R8_UART3_RBR);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -226,3 +274,4 @@ void UART3_IRQHandler(void)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -144,6 +144,39 @@ SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0)|SHELL_CMD_TYPE(SHELL_TYPE_CMD_FUNC),
|
||||||
logSetLevel, logSetLevel, set log level\r\n logSetLevel [log] [level]);
|
logSetLevel, logSetLevel, set log level\r\n logSetLevel [log] [level]);
|
||||||
#endif /** SHELL_USING_COMPANION == 1 */
|
#endif /** SHELL_USING_COMPANION == 1 */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief 开启所有日志功能
|
||||||
|
*/
|
||||||
|
void logOpen(void)
|
||||||
|
{
|
||||||
|
for (short i = 0; i < LOG_MAX_NUMBER; i++)
|
||||||
|
{
|
||||||
|
if (logList[i])
|
||||||
|
{
|
||||||
|
logList[i]->active = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0)|SHELL_CMD_TYPE(SHELL_TYPE_CMD_FUNC),
|
||||||
|
logon, logOpen, set log Open);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief 关闭所有日志功能
|
||||||
|
*/
|
||||||
|
void logClose(void)
|
||||||
|
{
|
||||||
|
for (short i = 0; i < LOG_MAX_NUMBER; i++)
|
||||||
|
{
|
||||||
|
if (logList[i])
|
||||||
|
{
|
||||||
|
logList[i]->active = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0)|SHELL_CMD_TYPE(SHELL_TYPE_CMD_FUNC),
|
||||||
|
logoff, logClose, set log Close);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief log写buffer
|
* @brief log写buffer
|
||||||
|
|
Loading…
Reference in New Issue