Browse Source

fix: 1.修复oid关机重启后不工作的问题;2.新增一个系统状态:PWR_WAIT_ON

pcb_v3
Zhangwen 3 months ago
parent
commit
f785594a67
  1. 2
      source/app/app_config.c
  2. 13
      source/app/app_config.h
  3. 1
      source/app/app_eeprom.c
  4. 57
      source/app/main.c
  5. 2
      source/app/task_adc.c
  6. 16
      source/app/task_appstatus.c
  7. 7
      source/app/task_game.c
  8. 2
      source/app/task_keystatus.c
  9. 26
      source/bsp/bsp_WT2605B.c
  10. 4
      source/bsp/bsp_WT2605B.h
  11. 6
      source/bsp/bsp_config.h
  12. 4
      source/bsp/bsp_led.h
  13. 1
      source/bsp/bsp_oid.c
  14. 2
      source/msp/msp_adc.c

2
source/app/app_config.c

@ -22,7 +22,7 @@ void L3_param_init(void)
G.volume = 0x15;
//U8 i;
G.debug = 1;
G.debug = 0;
//station模式状态
G.st_status = 0; //0:none 1:wifi_ok 2:tcp_connect_ok
//station模式sid

13
source/app/app_config.h

@ -42,12 +42,13 @@ typedef struct pen_point
typedef enum
{
POW_OFF = 0, //关机状态
POW_ON = 1, //开机状态
WIFI_CONFIG = 2, //WIFI配网模式
WIFI_CONFIG_Phone = 3, //WIFI配网——手机APP配置连接中
WIFI_CONFIG_COMPLETE = 4, //WIFI配网成功
WIFI_CONNECTED = 5, //WIFI连接成功
TCP_CONNECTED = 6, //TCP连接成功
POW_ON_WAIT = 1, //等待开机状态
POW_ON = 2, //开机状态
WIFI_CONFIG = 3, //WIFI配网模式
WIFI_CONFIG_Phone = 4, //WIFI配网——手机APP配置连接中
WIFI_CONFIG_COMPLETE = 5, //WIFI配网成功
WIFI_CONNECTED = 6, //WIFI连接成功
TCP_CONNECTED = 7, //TCP连接成功
}APP_STATUS;

1
source/app/app_eeprom.c

@ -6,6 +6,7 @@
void L3_param_read(void)
{
L0_Iap_Read_array(EEPROM_DATA_ADDR, (U8*)&G,sizeof(G));
if(G.head[0] != HEAD0 || G.head[1] != HEAD1 || G.tail[0] != TAIL0 || G.tail[1] != TAIL1)
{
L3_param_init();

57
source/app/main.c

@ -35,10 +35,8 @@ void L0_BSP_init(void)
L2_WT2605B_init();
// WIFI初始化
L2_Wifi_init();
// OID初始化
L0_Oid_Init();
LED2 = 0;
// // OID初始化
// L0_Oid_Init();
}
void L0_TASK_init(void)
@ -61,17 +59,6 @@ void L0_TASK_init(void)
//adc任务初始化
L3_task_Adc_init();
// //游戏任务初始化
// L3_task_game_init();
// //寄存器监听任务初始化
// L3_task_reglisten_init();
// //笔头任务初始化
// L1_oid_init();
// //语音模块初始化
// L3_task_speech_init();
// //tcp轮询任务初始化
// L3_task_tcp_init();
// L3_task_tcp_control_init();
}
//===============================================
//主函数
@ -90,48 +77,26 @@ void main(void)
//获取mcu id
L0_id_get_rom(G.mcu_id);
L0_uart0_sendstr("MCU_ID = ");
L0_uart0_0d0a();
L0_uart0_sendArrayHex(G.mcu_id,7);
L0_uart0_0d0a();
//打印程序版本信息
L0_uart0_sendArray("PEN_V2",6);
//版本信息
L0_uart0_sendstr("Version info : ");
L0_uart0_sendArray("PEN_V3",6);
L0_uart0_0d0a();
while(1)
{
// OID数据采集
// L1_Oid_readoid();
if(1 == s_nos_tick.t1s_heartbeat)//1s
{
s_nos_tick.t1s_heartbeat = 0;//置0清空
L0_uart0_uc('.');
L0_uart0_sendstr("ADC = ");
L0_uart0_ushex(_s_task_adc.adc_val[_s_task_adc.index]);
L0_uart0_0d0a();
L0_uart0_sendstr("Vin = ");
L0_uart0_ushex(G.Vin);
// L0_uart0_sendstr("ADC = ");
// L0_uart0_ushex(_s_task_adc.adc_val[_s_task_adc.index]);
// L0_uart0_0d0a();
// L0_uart0_sendstr("Vin = ");
// L0_uart0_ushex(G.Vin);
// L2_WT2605B_Broadcast(&audio_tcp_noplan);
}
// if (ts_oid.ok == 1)
// {
// ts_oid.ok = 0;
// L0_uart0_sendstr("ts_oid.Xint = ");
// L0_uart0_ushex(ts_oid.Xint);
// L0_uart0_0d0a();
// L0_uart0_sendstr("ts_oid.Yint = ");
// L0_uart0_ushex(ts_oid.Yint);
// L0_uart0_0d0a();
// L0_uart0_sendstr("ts_oid.Xdec = ");
// L0_uart0_ushex(ts_oid.Xdec);
// L0_uart0_0d0a();
// L0_uart0_sendstr("ts_oid.Ydec = ");
// L0_uart0_ushex(ts_oid.Ydec);
// L0_uart0_0d0a();
// L0_uart0_sendstr("oid_p");
// }
// 系统状态任务
L3_task_appstatus_handler(&_s_task_appstatus);
@ -139,7 +104,7 @@ void main(void)
L3_task_keystatus_handler(&_s_task_keystatus);
// WIFI任务
if (R.app_status != POW_OFF)
if (R.app_status >= POW_ON)
{
// WIFI数据解析
L3_uart2_wifi_parse();

2
source/app/task_adc.c

@ -77,7 +77,7 @@ void L3_task_Adc_handler(S_TASK_ADC *s)
s->LowPower_Count ++;
if (s->LowPower_Count > Count_Max)
{
L0_uart0_sendstr("s->Aver = ");
L0_uart0_sendstr(" Battery Capacity Low !!!");
s->LowPower_Flag = 1;
// 语音提醒
L2_WT2605B_Broadcast(&audio_low_power);

16
source/app/task_appstatus.c

@ -66,23 +66,19 @@ void L3_task_appstatus_handler(S_TASK_APPSTATUS *s)
{
// LED灯灭
L2_LED_OFF();
// // 音频播放关机语音后断电
// 播放关机语音
L2_WT2605B_Broadcast(&audio_powerdown);
// Lc_delay_ms(1000);
// L2_WT2605B_PWROFF();
// OID、WIFI关闭
L2_OID_WIFI_Close();
}
else if (s->status == POW_ON)
else if (s->status == POW_ON_WAIT)
{
// LED红灯常亮,LED绿灯灭
L2_RED_LED_ON();
// 音频通电后播放开机语音
// L2_WT2605B_PWRON();
// Lc_delay_ms(1000);
L2_WT2605B_Broadcast(&audio_poweron);
// OID、WIFI开启
L2_OID_WIFI_Open();
// 通电后播放开机语音
L2_WT2605B_Broadcast(&audio_poweron);
//wifi任务初始化
L3_task_W600_flow_init(W600_ST);
// Adc任务初始化
@ -90,8 +86,8 @@ void L3_task_appstatus_handler(S_TASK_APPSTATUS *s)
// game任务初始化
L3_task_game_init();
L0_Oid_Init();
L2_WT2605B_init();
s->status = POW_ON;
R.app_status = POW_ON;
}
else if (s->status == WIFI_CONFIG)

7
source/app/task_game.c

@ -254,6 +254,7 @@ void L3_task_game_init(void)
}
#define D_task_READ_OID 0x50
#define D_task_INIT_OID 0x59
#define D_task_GAME_SWITCH 0x51
#define D_task_GAME_PLAY 0x52
#define D_task_GAME_TIMEOUT 0x53
@ -266,7 +267,11 @@ void L3_task_game_handler(S_TASK_GAME *s)
{
TTSS_Task_init()
L2_task_go(D_task_GAME_TIMEOUT);
L2_task_go_Tdelay(D_task_INIT_OID,D_Tdelay_4s);
TTSS_Task_step(D_task_INIT_OID)
L0_Oid_Init();
L2_task_go_Tdelay(D_task_GAME_TIMEOUT,D_Tdelay_100ms);
TTSS_Task_step(D_task_GAME_TIMEOUT)
if (s->game_info_index != -1 && (s_nos_tick.t_1s - s->start_seconds > s->game_info[s->game_info_index].game_timeout_seconds))

2
source/app/task_keystatus.c

@ -56,7 +56,7 @@ void L3_task_keystatus_handler(S_TASK_KEYSTATUS *s)
{
if (R.app_status == POW_OFF)
{
R.app_status = POW_ON;
R.app_status = POW_ON_WAIT;
s->Key3_Down_Begin_Time = 0;
s->Key3_handled = 1;
}

26
source/bsp/bsp_WT2605B.c

@ -53,26 +53,27 @@ TS_SPEECH_VOLUME volume_control = {0x7E,0x04,0xAE,0x1E,0xD0,0xEF}; //音
void L2_WT2605B_init()
{
// 初始化管脚
D_stdIO_P0(BITN0);
D_stdIO_P0(BITN1);
// 电源控制引脚
// D_HighI_P0(BITN5);
// L2_WT2605B_PWRON();
// 初始化功放控制引脚P26
// 0 开启 1 关闭
D_stdIO_P2(BITN6);
// 初始化音量
L2_WT2605B_VolumeControl(G.volume);
// 功放控制引脚P26 0 开启 1 关闭
D_HighI_P2(BITN6);
P26 = 0;
L2_WT2605B_ON();
}
void L2_WT2605B_PWRON()
void L2_WT2605B_ON()
{
D_P05_ON();
D_P26_OFF();
}
void L2_WT2605B_PWROFF()
void L2_WT2605B_OFF()
{
D_P05_OFF();
D_P26_ON();
}
void L2_WT2605B_Broadcast(TS_SPEECH_AUDIO *music)
@ -96,8 +97,7 @@ void L2_WT2605B_Broadcast_TPC(U8* GameID)
}
}
// 音量控制
void L2_WT2605B_VolumeControl(U8 grade)
{
volume_control.grade = grade;
@ -105,6 +105,7 @@ void L2_WT2605B_VolumeControl(U8 grade)
L0_uart3_sendArray((U8 *)&volume_control,6);
}
// 音量设置6个档位:0x15,0x17,0x19,0x1B,0x1D,0x1F
// 音量增大
void L2_WT2605B_VioceUp(void)
{
if (volume_control.grade >= 0x15 && volume_control.grade < 0x1F)
@ -123,6 +124,7 @@ void L2_WT2605B_VioceUp(void)
L2_WT2605B_Broadcast(&audio_volume_up);
}
// 音量减小
void L2_WT2605B_VioceDown(void)
{
if (volume_control.grade > 0x15 && volume_control.grade <= 0x1F)

4
source/bsp/bsp_WT2605B.h

@ -71,8 +71,8 @@ extern TS_SPEECH_AUDIO audio_low_power;
extern TS_SPEECH_VOLUME volume_control;
extern void L2_WT2605B_init();
extern void L2_WT2605B_PWRON();
extern void L2_WT2605B_PWROFF();
extern void L2_WT2605B_ON();
extern void L2_WT2605B_OFF();
extern void L2_WT2605B_Broadcast(TS_SPEECH_AUDIO *music);
extern void L2_WT2605B_Broadcast_TPC(U8* GameID);
extern void L2_WT2605B_VolumeControl(U8 grade);

6
source/bsp/bsp_config.h

@ -158,12 +158,6 @@
#define D_MODBUS_SPLIT_ENTRY L1_modbus_split //modbus切割函数,在tpc_modbus.c中实现,依据实际情况修改
#define D_MODBUS_REG_MAX_NUM 32 //每次最多读取/写入的寄存器数量,此处的数量要注意和 D_tp_handle_x_len 对应
//外设定义
#define LED1 P27 //D4
#define LED2 P55 //D4
#define LED3 P02 //D4
//#define LED4 P26 //D4
//笔头
#define SCK P34
#define SDIO P50

4
source/bsp/bsp_led.h

@ -4,8 +4,8 @@
#include "bsp_config.h"
#define RED_LED P12 //双色红灯
#define GREEN_LED P47 //双色绿灯
#define GREEN_LED P12 //双色红灯
#define RED_LED P47 //双色绿灯
#define LED_ON 0
#define LED_OFF 1

1
source/bsp/bsp_oid.c

@ -497,6 +497,7 @@ void L1_Oid_readoid(void)
void L1_Oid_Rec_PRINT(void)
{
// d[7]
L0_uart0_0d0a();
L0_uart0_sendstr("ts_oid.rec.d[0] = ");
L0_uart0_uchex(ts_oid.rec.d[0]);
L0_uart0_0d0a();

2
source/msp/msp_adc.c

@ -21,8 +21,6 @@ void L0_ADC_init(void)
Lc_delay_ms(1); //给MCU的内部ADC模块电源打开后,需等待约1ms,等MCU内部的ADC电源稳定后再让ADC工作
D_ADC_CH(D_ADC_CH_12); //选择ADC12(P04)
D_ADC_START();
L0_uart0_sendstr("\r\n L0_ADC_init on");
}

Loading…
Cancel
Save