262 lines
6.5 KiB
C
262 lines
6.5 KiB
C
#include "type.h"
|
||
#include "UWater_adc_driver.h"
|
||
#include "UWater_power_app.h"
|
||
#include "UWater_eeprom_driver.h"
|
||
#include "UWater_frame_app.h"
|
||
#include "UWater_timer1us_driver.h"
|
||
#include "UWater_rtcc_app.h"
|
||
#include "UWater_ir_app.h"
|
||
#include "UWater_self_test.h"
|
||
#include "UWater_pt_app.h"
|
||
#include "UWater_lptimer_driver.h"
|
||
|
||
static MCU_MAC temp_mcu_mac;
|
||
static u8 g_testself_ee_msg_temp = 0;
|
||
static u8 g_testself_ee_buf[7];
|
||
static u32 g_testself_tickstart = 0;
|
||
static u32 g_testself_adc_result=0;
|
||
//static u8 g_testself_adc_done=0;
|
||
static u8 g_test_self_buf[32];
|
||
|
||
u16 g_testself_result=0;
|
||
|
||
u8 step_TestSelf=TEST_SELF_MAC_GET;
|
||
|
||
|
||
static void McuUidCodeToMac(MCU_MAC *pmac)
|
||
{
|
||
u8 temp_uid=0;
|
||
//u8 temp_buf_uid[12];
|
||
u8 i=0,j=0;
|
||
for (i = 0; i < 10; i++)
|
||
{
|
||
temp_uid = *((u8*)(0x00100E74 + i));
|
||
if(temp_uid != 0)
|
||
{
|
||
if(j<7)
|
||
{
|
||
pmac->buf[j] = temp_uid;
|
||
j++;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
void SelfTest_Proc(void)
|
||
{
|
||
switch(step_TestSelf)
|
||
{
|
||
case TEST_SELF_IDLE:
|
||
{
|
||
break;
|
||
}
|
||
case TEST_SELF_MAC_GET://生成物理地址,写入EEROM
|
||
{
|
||
g_testself_result =0;//测试结果清0
|
||
McuUidCodeToMac(&temp_mcu_mac);
|
||
//if(PowerIfSleepSys() == 1)
|
||
{
|
||
RtccSetTimer(RTCC_TIMER_BAT_NUM, 3); //3s后检测电池电压
|
||
}
|
||
step_TestSelf = TEST_SELF_EE_WR;
|
||
break;
|
||
}
|
||
case TEST_SELF_EE_WR://写EE物理地址
|
||
{
|
||
if (TASK_IDLE == EepIfIdle())
|
||
{
|
||
g_testself_ee_msg_temp = 0;
|
||
EepWrite(temp_mcu_mac.buf, EEP_FRAME_MAC_ADDR, 7, &g_testself_ee_msg_temp);
|
||
step_TestSelf =TEST_SELF_EE_WR_WT;
|
||
}
|
||
break;
|
||
}
|
||
case TEST_SELF_EE_WR_WT://等待写完成,EE掉电
|
||
{
|
||
if (TASK_IDLE == EepIfIdle())
|
||
{
|
||
g_testself_tickstart = Timer1usGetTick();//延时200ms
|
||
step_TestSelf =TEST_SELF_EE_OFF_WT;
|
||
}
|
||
break;
|
||
}
|
||
case TEST_SELF_EE_OFF_WT://等待EE掉电200ms,读EE物理地址
|
||
{
|
||
if((Timer1usGetTick() - g_testself_tickstart)>200000)//100ms
|
||
{
|
||
EepRead(EEP_FRAME_MAC_ADDR, &g_testself_ee_buf[0], 7, &g_testself_ee_msg_temp);
|
||
step_TestSelf =TEST_SELF_EE_RD_CK;
|
||
}
|
||
break;
|
||
}
|
||
|
||
case TEST_SELF_EE_RD_CK://检测EE读取是否正确
|
||
{
|
||
if (TASK_IDLE == EepIfIdle())
|
||
{
|
||
int temp_i;
|
||
for(temp_i=0; temp_i<7; temp_i++)
|
||
{
|
||
g_test_self_buf[temp_i] = temp_mcu_mac.buf[temp_i];
|
||
if(g_testself_ee_buf[temp_i] != temp_mcu_mac.buf[temp_i])
|
||
{
|
||
break;
|
||
}
|
||
}
|
||
if(temp_i == 7)
|
||
{
|
||
g_testself_result |= 0x0001;
|
||
}
|
||
g_testself_tickstart = Timer1usGetTick();
|
||
step_TestSelf =TEST_SELF_HALL_CK;
|
||
}
|
||
break;
|
||
}
|
||
case TEST_SELF_HALL_CK://检测霍尔
|
||
{
|
||
//if((KEY_GPIO->IDR & KEY_PIN) == (u32)0)
|
||
{
|
||
g_testself_result |= 0x0002;
|
||
}
|
||
if((Timer1usGetTick() - g_testself_tickstart)>100000)//100ms
|
||
{
|
||
RtccSetTimer(TIMER_RTCC_TEST_SELF, 2);
|
||
g_testself_tickstart = Timer1usGetTick();
|
||
step_TestSelf =TEST_SELF_RTCC_CK;
|
||
}
|
||
break;
|
||
}
|
||
case TEST_SELF_RTCC_CK://检测RTCC
|
||
{
|
||
if((0 == RtccCheckTimer(TIMER_RTCC_TEST_SELF))&&((Timer1usGetTick() - g_testself_tickstart)>1000000))
|
||
{
|
||
if((0 == RtccIsError()))//RTC无异常
|
||
{
|
||
g_testself_result |= 0x0004;
|
||
}
|
||
else//如果RTC异常,则再次初始化,防止单晶帧首次上电GP30没初始化
|
||
{
|
||
u8 rtcc_clk_source = RtccInit(); //再次初始化
|
||
LPTimer1Init(rtcc_clk_source);
|
||
if((0 == RtccIsError()))//RTC无异常
|
||
{
|
||
g_testself_result |= 0x0004;
|
||
}
|
||
}
|
||
}
|
||
if((Timer1usGetTick() - g_testself_tickstart)>3000000)//3s
|
||
{
|
||
step_TestSelf = TEST_SELF_IR_CK1;
|
||
}
|
||
break;
|
||
}
|
||
case TEST_SELF_IR_CK1://检测蓝牙
|
||
{
|
||
#if (MODULE_BLE_USED)
|
||
if(BleIfIdle()==TASK_IDLE)
|
||
{
|
||
if(BleGetPowerState()!=BlePowerWrong)
|
||
{
|
||
g_testself_result |= 0x0010;
|
||
}
|
||
step_TestSelf = TEST_SELF_SEND_RESULT;
|
||
}
|
||
#else
|
||
step_TestSelf = TEST_SELF_SEND_RESULT;
|
||
#endif
|
||
break;
|
||
}
|
||
case TEST_SELF_IR_CK2:
|
||
{
|
||
// if (TRUE == g_testself_adc_done)
|
||
// {
|
||
// if (ADC_OK == AdcGetStatus())
|
||
// {
|
||
// IrKey_AdcInitForUart();//ADC初始化串口使用
|
||
// IrInitApp();//打开串口
|
||
// if((g_testself_adc_result < 3000)&&((g_testself_adc_result > 2000)))
|
||
// {
|
||
// g_testself_result |= 0x0008;
|
||
// }
|
||
// step_TestSelf = TEST_SELF_SEND_RESULT;
|
||
// }
|
||
// }
|
||
break;
|
||
}
|
||
case TEST_SELF_SEND_RESULT://??GP22??
|
||
{
|
||
UNION_FLOAT_STORAGE temp;
|
||
g_test_self_buf[7]= g_testself_result&0xFF; //??????
|
||
g_test_self_buf[8]= (g_testself_result>>8)&0xFF;//??????
|
||
g_test_self_buf[9]= PowerCheckValueSys()&0xFF; //??????
|
||
g_test_self_buf[10]= ( PowerCheckValueSys()>>8)&0xFF;//??????
|
||
g_test_self_buf[11]= g_testself_adc_result&0xFF; //??????
|
||
g_test_self_buf[12]= ( g_testself_adc_result>>8)&0xFF;//??????
|
||
temp.float_datas = TempCheckValueApp();
|
||
g_test_self_buf[13]=temp.float_storage_format.data_buf[0];
|
||
g_test_self_buf[14]=temp.float_storage_format.data_buf[1];
|
||
g_test_self_buf[15]=temp.float_storage_format.data_buf[2];
|
||
g_test_self_buf[16]=temp.float_storage_format.data_buf[3];
|
||
|
||
g_testself_tickstart = Timer1usGetTick();
|
||
|
||
step_TestSelf = TEST_SELF_SEND_WAIT;
|
||
break;
|
||
}
|
||
case TEST_SELF_SEND_WAIT:
|
||
{
|
||
if((Timer1usGetTick() - g_testself_tickstart)>2000000)//2s
|
||
{
|
||
step_TestSelf =TEST_SELF_IDLE;
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
|
||
void SelfTest_Start(void)
|
||
{
|
||
if(step_TestSelf == TEST_SELF_IDLE)
|
||
{
|
||
step_TestSelf = TEST_SELF_MAC_GET;
|
||
}
|
||
}
|
||
void SelfTest_End(void)
|
||
{
|
||
step_TestSelf = TEST_SELF_IDLE;
|
||
}
|
||
|
||
u8 SelfTest_GetResult(u8 *pBuf)
|
||
{
|
||
if(step_TestSelf == TEST_SELF_SEND_WAIT)
|
||
{
|
||
u8 i=0;
|
||
for(i=0;i<17;i++)
|
||
{
|
||
*pBuf++ = g_test_self_buf[i];
|
||
}
|
||
step_TestSelf = TEST_SELF_IDLE;
|
||
return 17;
|
||
}
|
||
return 0;
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|