|
|
|
@ -49,9 +49,10 @@
|
|
|
|
|
#include "flash_log.h"
|
|
|
|
|
#include "ADC_collect.h"
|
|
|
|
|
#include "dau.h"
|
|
|
|
|
#include "wireless.h"
|
|
|
|
|
|
|
|
|
|
/* Private define ------------------------------------------------------------*/
|
|
|
|
|
#define DAU_WAVE_WAIT_MAX 5 // DAU 波形等待次数
|
|
|
|
|
#define DAU_WAVE_WAIT_MAX 3 // DAU 波形等待次数
|
|
|
|
|
|
|
|
|
|
/* 全局状态寄存器地址 -------------------------------- */
|
|
|
|
|
#define DAU_REG_ADDR_GSCR 0x0000 // 全局状态寄存器 - 软件特征寄存器
|
|
|
|
@ -87,9 +88,13 @@
|
|
|
|
|
#define DAU_GRTR_COMPLETE_Msk (0x1 << DAU_GRTR_COMPLETE_Pos) /*!< 0x0001 */
|
|
|
|
|
|
|
|
|
|
/* 全局控制寄存器地址 -------------------------------- */
|
|
|
|
|
#define DAU_REG_ADDR_GFWSR 0x0200 // 全局控制寄存器 - Flash 写选择寄存器
|
|
|
|
|
#define DAU_REG_ADDR_GSUPR 0x0202 // 全局控制寄存器 - 固件升级页寄存器
|
|
|
|
|
#define DAU_REG_ADDR_GCFTR 0x0203 // 全局控制寄存器 - 故障触发录波控制寄存器
|
|
|
|
|
#define DAU_REG_ADDR_GCRTR 0x0204 // 全局控制寄存器 - 寄存器触发录波控制寄存器
|
|
|
|
|
#define DAU_REG_ADDR_GCUR 0x0205 // 全局控制寄存器 - UTC 配置寄存器
|
|
|
|
|
#define DAU_REG_ADDR_GSUDR 0x0e00 // 全局控制寄存器 - 固件升级数据寄存器
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* 全局控制寄存器 - 故障触发录波控制寄存器 bit mask */
|
|
|
|
|
#define DAU_GCFTR_PORT_Pos (4) // 故障触发波形端口
|
|
|
|
@ -113,11 +118,9 @@
|
|
|
|
|
|
|
|
|
|
/* 通道状态寄存器地址 -------------------------------- */
|
|
|
|
|
#define DAU_REG_ADDR_PMSR 0x0300 // 通道状态寄存器 - 缺陷电流通道周波原始采样值的平均值寄存器
|
|
|
|
|
#define DAU_REG_ADDR_PPWR 0x03b0 // 通道状态寄存器 - 工频电流通道录波数据寄存器
|
|
|
|
|
#define DAU_REG_ADDR_PDWR 0x03c0 // 通道状态寄存器 - 缺陷电流通道录波数据寄存器
|
|
|
|
|
#define DAU_REG_ADDR_PFWR 0x03d0 // 通道状态寄存器 - 故障电流通道录波数据寄存器
|
|
|
|
|
#define DAU_REG_ADDR_PPWR 0x03b0 // 通道状态寄存器 - 通道录波数据寄存器
|
|
|
|
|
|
|
|
|
|
#define DAU_ID 0x0702 // DAU 软件识别码
|
|
|
|
|
#define DAU_ID 0x0702 // DAU 软件识别码
|
|
|
|
|
|
|
|
|
|
/* Private typedef -----------------------------------------------------------*/
|
|
|
|
|
/* 波形触发源 */
|
|
|
|
@ -148,6 +151,9 @@ const osThreadAttr_t dau_gps_attributes =
|
|
|
|
|
/* DAU 全局结构体 */
|
|
|
|
|
dau_ctrl_t dau_ctrl;
|
|
|
|
|
static struct tm _dau_tm;
|
|
|
|
|
int8_t _dau_spi_rw;
|
|
|
|
|
uint16_t _dau_spi_addr;
|
|
|
|
|
uint16_t _dau_spi_len;
|
|
|
|
|
|
|
|
|
|
/* Private function prototypes -----------------------------------------------*/
|
|
|
|
|
/* Internal functions --------------------------------------------------------*/
|
|
|
|
@ -172,7 +178,7 @@ int32_t _dau_reg_write(uint16_t addr, uint16_t len)
|
|
|
|
|
DBG(DBG_M_DAU_TXRX, "DAU write send(%d):\r\n", len);
|
|
|
|
|
if (dbg_stat_get(DBG_M_DAU_TXRX))
|
|
|
|
|
{
|
|
|
|
|
buf_print(pkt_tx, len > 16 ? 16 : len);
|
|
|
|
|
buf_print(pkt_tx, len > 32 ? 32 : len);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 发送数据. */
|
|
|
|
@ -243,7 +249,7 @@ int32_t _dau_reg_read(uint16_t addr, uint16_t len)
|
|
|
|
|
DBG(DBG_M_DAU_TXRX, "DAU read recv(%d):\r\n", len);
|
|
|
|
|
if (dbg_stat_get(DBG_M_DAU_TXRX))
|
|
|
|
|
{
|
|
|
|
|
buf_print(pkt_rx + 2, len > 16 ? 16 : len);
|
|
|
|
|
buf_print(pkt_rx + 2, len > 32 ? 32 : len);
|
|
|
|
|
vty_print("\r\n");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -319,6 +325,90 @@ static void _dau_data_save(void)
|
|
|
|
|
fd_write(&fd_data);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* description: DAU UTC 对时处理
|
|
|
|
|
param:
|
|
|
|
|
return: */
|
|
|
|
|
int32_t _dau_update(void)
|
|
|
|
|
{
|
|
|
|
|
uint8_t *data = (uint8_t*)&dau_ctrl.buf_dau_tx[2];
|
|
|
|
|
uint16_t *reg = (uint16_t*)&dau_ctrl.buf_dau_tx[2];
|
|
|
|
|
uint16_t cnt = 0;
|
|
|
|
|
uint16_t page_cnt = 0;
|
|
|
|
|
//uint32_t app_len = wl_ctrl.app_len;
|
|
|
|
|
uint32_t app_len = 2097378;
|
|
|
|
|
uint32_t len = 0;
|
|
|
|
|
uint32_t addr = TFTP_APP_ADDRESS;
|
|
|
|
|
int32_t rv = HAL_ERROR;
|
|
|
|
|
|
|
|
|
|
/* 初始化状态. */
|
|
|
|
|
dau_ctrl.update_rt = DAU_UPD_NONE;
|
|
|
|
|
|
|
|
|
|
/* 发送升级数据 */
|
|
|
|
|
while(1)
|
|
|
|
|
{
|
|
|
|
|
/* 组装数据报文, 报文头是大端模式 DAU_REG_ADDR_GSUDR */
|
|
|
|
|
len = app_len < 1024 ? app_len : 1024;
|
|
|
|
|
if (0 == len)
|
|
|
|
|
{
|
|
|
|
|
/* 无数据, 直接结束 */
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 读取固件数据 */
|
|
|
|
|
E_RETURN(spi_flash_read(addr, data, 1024));
|
|
|
|
|
|
|
|
|
|
/* 先发送数据报文, 0x0e00 */
|
|
|
|
|
E_RETURN(_dau_reg_write(DAU_REG_ADDR_GSUDR, 1024));
|
|
|
|
|
|
|
|
|
|
/* 再发送页报文, 0x0202 */
|
|
|
|
|
*reg = page_cnt;
|
|
|
|
|
E_RETURN(_dau_reg_write(DAU_REG_ADDR_GSUPR, 2));
|
|
|
|
|
|
|
|
|
|
/* 向 0x0200 写 1, 表示固件升级 */
|
|
|
|
|
*reg = 1;
|
|
|
|
|
E_RETURN(_dau_reg_write(DAU_REG_ADDR_GFWSR, sizeof(uint16_t)));
|
|
|
|
|
|
|
|
|
|
/* 等待 spi flash 完成, 0x0002 bit2 为高 */
|
|
|
|
|
cnt = 0;
|
|
|
|
|
while(1)
|
|
|
|
|
{
|
|
|
|
|
osDelay(500);
|
|
|
|
|
cnt++;
|
|
|
|
|
if (cnt > 3)
|
|
|
|
|
{
|
|
|
|
|
DBG(DBG_M_DAU, "DAU update timeout\r\n");
|
|
|
|
|
return HAL_TIMEOUT;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 读取 spi flash 状态 DAU_REG_ADDR_GSR */
|
|
|
|
|
E_RETURN(_dau_reg_read_global_state());
|
|
|
|
|
|
|
|
|
|
/* 0 - 空闲, 1 - 忙 */
|
|
|
|
|
if (!((dau_ctrl.reg_global.GSR & DAU_GSR_FLASH_Msk) >> DAU_GSR_FLASH_Pos))
|
|
|
|
|
{
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 结束直接返回 */
|
|
|
|
|
if (len < 1024)
|
|
|
|
|
{
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 更新参数 */
|
|
|
|
|
app_len -= len;
|
|
|
|
|
page_cnt++;
|
|
|
|
|
addr += 1024;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 向 DAU_REG_ADDR_GFWSR 写 0, 回复标志 */
|
|
|
|
|
*reg = 0;
|
|
|
|
|
E_RETURN(_dau_reg_write(DAU_REG_ADDR_GFWSR, sizeof(uint16_t)));
|
|
|
|
|
|
|
|
|
|
return HAL_OK;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* description: DAU UTC 对时处理
|
|
|
|
|
param:
|
|
|
|
|
return: */
|
|
|
|
@ -327,12 +417,14 @@ void _dau_utc(void)
|
|
|
|
|
uint32_t *utc = (uint32_t*)&dau_ctrl.buf_dau_tx[2];
|
|
|
|
|
|
|
|
|
|
/* dau 主循环大概 250ms 运行一次, 在第 3 次循环 (500 ~ 750ms) 对时, 此时 GPS 对时一定是可用的 */
|
|
|
|
|
if (500000000 < dau_ctrl.reg_global.GNR && dau_ctrl.reg_global.GNR <= 750000000
|
|
|
|
|
if (50000000 < dau_ctrl.reg_global.GNR && dau_ctrl.reg_global.GNR <= 75000000
|
|
|
|
|
&& dau_ctrl.is_utc_valid
|
|
|
|
|
&& dau_ctrl.reg_global.GUR != dau_ctrl.utc)
|
|
|
|
|
{
|
|
|
|
|
*utc = dau_ctrl.utc;
|
|
|
|
|
_dau_reg_write(DAU_REG_ADDR_GCUR, sizeof(uint32_t));
|
|
|
|
|
vty_print("Change\r\n");
|
|
|
|
|
vty_print("%d %d %d %d\r\n", dau_ctrl.reg_global.GUR, dau_ctrl.reg_global.GNR, dau_ctrl.is_utc_valid, dau_ctrl.utc);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -357,7 +449,7 @@ int32_t _dau_wave_col_start(void)
|
|
|
|
|
DBG(DBG_M_DAU, "DAU wave err\r\n", rv);
|
|
|
|
|
return HAL_TIMEOUT;
|
|
|
|
|
}
|
|
|
|
|
osDelay(100);
|
|
|
|
|
osDelay(3000);
|
|
|
|
|
|
|
|
|
|
E_RETURN(_dau_reg_read_global_state());
|
|
|
|
|
if ((dau_ctrl.reg_global.GRTR & DAU_GRTR_COMPLETE_Msk) >> DAU_GRTR_COMPLETE_Pos)
|
|
|
|
@ -366,6 +458,7 @@ int32_t _dau_wave_col_start(void)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
i++;
|
|
|
|
|
vty_print("#D5 %d\r\n", i);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return rv;
|
|
|
|
@ -397,6 +490,7 @@ int32_t _dau_wave_col_fault(void)
|
|
|
|
|
E_RETURN(_dau_reg_write(DAU_REG_ADDR_GCFTR, sizeof(uint16_t)));
|
|
|
|
|
|
|
|
|
|
/* 等待 DAU 准备故障数据 */
|
|
|
|
|
j = 0;
|
|
|
|
|
while(1)
|
|
|
|
|
{
|
|
|
|
|
if (j >= DAU_WAVE_WAIT_MAX)
|
|
|
|
@ -453,7 +547,6 @@ int32_t _dau_wave_col_fault(void)
|
|
|
|
|
return: HAL_xxx */
|
|
|
|
|
int32_t _dau_wave_col_defect(void)
|
|
|
|
|
{
|
|
|
|
|
#if 0
|
|
|
|
|
uint16_t *reg = (uint16_t*)&dau_ctrl.buf_dau_tx[2];
|
|
|
|
|
uint8_t i = 0;
|
|
|
|
|
uint8_t j = 0;
|
|
|
|
@ -468,19 +561,19 @@ int32_t _dau_wave_col_defect(void)
|
|
|
|
|
dau_ctrl.reg_defect_max[i] = dau_ctrl.reg_port_state.MAX[i];
|
|
|
|
|
if (dau_ctrl.reg_port_state.MAX[i] > dev_config.wave_threshold)
|
|
|
|
|
{
|
|
|
|
|
MONITOR_BITMAP_SET(dau_ctrl.col_flag, DAU_COL_FLAG_REG_DEFECT);
|
|
|
|
|
is_exceed = TRUE;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
/* 没有超过阈值直接返回 */
|
|
|
|
|
if (is_exceed)
|
|
|
|
|
{
|
|
|
|
|
MONITOR_BITMAP_RESET(dau_ctrl.col_flag, DAU_COL_FLAG_REG_DEFECT);
|
|
|
|
|
return rv;
|
|
|
|
|
}
|
|
|
|
|
/* 没有超过阈值并没有强制录波直接返回 */
|
|
|
|
|
//if (!is_exceed && !IS_MONITOR_BIT_SET(dau_ctrl.col_flag, DAU_COL_FLAG_WAVE_FORCE))
|
|
|
|
|
//{
|
|
|
|
|
// MONITOR_BITMAP_RESET(dau_ctrl.col_flag, DAU_COL_FLAG_REG_DEFECT);
|
|
|
|
|
// return HAL_OK;
|
|
|
|
|
//}
|
|
|
|
|
|
|
|
|
|
/* 擦除 flash */
|
|
|
|
|
addr = dau_ctrl.addr_reg;
|
|
|
|
|
vty_print("#D3 %x\r\n", addr);
|
|
|
|
|
for(i = 0; i < 2; i++)
|
|
|
|
|
{
|
|
|
|
|
E_RETURN(spi_flash_erase(addr, SPI_CMD_BLOCK64_ERASE));
|
|
|
|
@ -497,6 +590,7 @@ int32_t _dau_wave_col_defect(void)
|
|
|
|
|
E_RETURN(_dau_reg_write(DAU_REG_ADDR_GCRTR, sizeof(uint16_t)));
|
|
|
|
|
|
|
|
|
|
/* 等待 DAU 准备缺陷数据 */
|
|
|
|
|
j = 0;
|
|
|
|
|
while(1)
|
|
|
|
|
{
|
|
|
|
|
if (j >= DAU_WAVE_WAIT_MAX)
|
|
|
|
@ -504,7 +598,7 @@ int32_t _dau_wave_col_defect(void)
|
|
|
|
|
DBG(DBG_M_DAU, "DAU defect wave err\r\n", rv);
|
|
|
|
|
return HAL_TIMEOUT;
|
|
|
|
|
}
|
|
|
|
|
osDelay(10);
|
|
|
|
|
osDelay(5);
|
|
|
|
|
|
|
|
|
|
E_RETURN(_dau_reg_read_global_state());
|
|
|
|
|
if ((dau_ctrl.reg_global.GRTR & DAU_GRTR_DEFECT_WAVE_Msk) >> DAU_GRTR_DEFECT_WAVE_Pos)
|
|
|
|
@ -513,18 +607,25 @@ int32_t _dau_wave_col_defect(void)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
j++;
|
|
|
|
|
vty_print("#D6 %d\r\n", j);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for(j = 0; j < DAU_PKT_DEFECT_CNT; j++)
|
|
|
|
|
{
|
|
|
|
|
E_RETURN(_dau_reg_read(DAU_REG_ADDR_PDWR + i, DAU_PKT_DEFECT_BYTE_CNT));
|
|
|
|
|
vty_print("%d %d\r\n", i, j);
|
|
|
|
|
E_RETURN(_dau_reg_read(DAU_REG_ADDR_PPWR, DAU_PKT_DEFECT_BYTE_CNT));
|
|
|
|
|
osDelay(200);
|
|
|
|
|
E_RETURN(spi_flash_write(addr, &dau_ctrl.buf_dau_rx[2], DAU_PKT_DEFECT_BYTE_CNT));
|
|
|
|
|
addr += DAU_PKT_DEFECT_BYTE_CNT;
|
|
|
|
|
}
|
|
|
|
|
vty_print("DE%d\r\n", i);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vty_print("#D4 %x\r\n", addr);
|
|
|
|
|
MONITOR_BITMAP_SET(dau_ctrl.col_flag, DAU_COL_FLAG_REG_DEFECT);
|
|
|
|
|
return rv;
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#if 0
|
|
|
|
|
uint8_t i = 0;
|
|
|
|
|
uint8_t j = 0;
|
|
|
|
|
uint8_t is_exceed = FALSE;
|
|
|
|
@ -573,6 +674,7 @@ int32_t _dau_wave_col_defect(void)
|
|
|
|
|
vty_print("#D4 %x\r\n", addr);
|
|
|
|
|
MONITOR_BITMAP_SET(dau_ctrl.col_flag, DAU_COL_FLAG_REG_DEFECT);
|
|
|
|
|
return rv;
|
|
|
|
|
#endif
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* description: 工频波形采集
|
|
|
|
@ -580,11 +682,11 @@ int32_t _dau_wave_col_defect(void)
|
|
|
|
|
return: HAL_xxx */
|
|
|
|
|
int32_t _dau_wave_col_power(DAU_SOURCE_E source)
|
|
|
|
|
{
|
|
|
|
|
#if 0
|
|
|
|
|
uint16_t *reg = (uint16_t*)&dau_ctrl.buf_dau_tx[2];
|
|
|
|
|
int16_t *power = NULL;
|
|
|
|
|
uint8_t i = 0;
|
|
|
|
|
uint8_t j = 0;
|
|
|
|
|
int32_t rv = HAL_ERROR;
|
|
|
|
|
|
|
|
|
|
/* 读取工频数据 */
|
|
|
|
|
for(i = 0; i < DAU_PORT_POWER_CNT; i++)
|
|
|
|
@ -602,6 +704,7 @@ int32_t _dau_wave_col_power(DAU_SOURCE_E source)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 等待 DAU 准备工频数据 */
|
|
|
|
|
j = 0;
|
|
|
|
|
while(1)
|
|
|
|
|
{
|
|
|
|
|
if (j >= DAU_WAVE_WAIT_MAX)
|
|
|
|
@ -609,7 +712,7 @@ int32_t _dau_wave_col_power(DAU_SOURCE_E source)
|
|
|
|
|
DBG(DBG_M_DAU, "DAU power wave err\r\n");
|
|
|
|
|
return HAL_TIMEOUT;
|
|
|
|
|
}
|
|
|
|
|
osDelay(10);
|
|
|
|
|
osDelay(5);
|
|
|
|
|
|
|
|
|
|
E_RETURN(_dau_reg_read_global_state());
|
|
|
|
|
if (DAU_SOURCE_FAULT == source)
|
|
|
|
@ -628,21 +731,24 @@ int32_t _dau_wave_col_power(DAU_SOURCE_E source)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
j++;
|
|
|
|
|
vty_print("#D7 %d\r\n", j);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 选择存储位置, 读取数据 */
|
|
|
|
|
power = (DAU_SOURCE_FAULT == source) ? dau_ctrl.fault_power[i] : dau_ctrl.reg_power[i];
|
|
|
|
|
for(j = 0; j < DAU_PKT_POWER_CNT; j++)
|
|
|
|
|
{
|
|
|
|
|
E_RETURN(_dau_reg_read(DAU_REG_ADDR_PPWR + i, DAU_PKT_POWER_BYTE_CNT));
|
|
|
|
|
E_RETURN(_dau_reg_read(DAU_REG_ADDR_PPWR, DAU_PKT_POWER_BYTE_CNT));
|
|
|
|
|
osDelay(200);
|
|
|
|
|
memcpy(power, &dau_ctrl.buf_dau_rx[2], DAU_PKT_POWER_BYTE_CNT);
|
|
|
|
|
power += DAU_PKT_POWER_BYTE_CNT >> 1;
|
|
|
|
|
}
|
|
|
|
|
vty_print("PO%d\r\n", i);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return HAL_OK;
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#if 0
|
|
|
|
|
int16_t *power = NULL;
|
|
|
|
|
uint8_t i = 0;
|
|
|
|
|
uint8_t j = 0;
|
|
|
|
@ -661,6 +767,7 @@ int32_t _dau_wave_col_power(DAU_SOURCE_E source)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return HAL_OK;
|
|
|
|
|
#endif
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* description: DAU 工频电流计算
|
|
|
|
@ -843,14 +950,14 @@ int32_t _dau_wave_col_trigger_by_reg(void)
|
|
|
|
|
|
|
|
|
|
/* 定时开始采集 */
|
|
|
|
|
tick = HAL_GetTick();
|
|
|
|
|
if ((tick - dau_ctrl.col_time) < (dev_config.collect_interval * 600000)
|
|
|
|
|
if ((tick - dau_ctrl.col_time) < (dev_config.collect_interval * 60000)
|
|
|
|
|
&& !IS_MONITOR_BIT_SET(dau_ctrl.col_flag, DAU_COL_FLAG_WAVE_FORCE))
|
|
|
|
|
{
|
|
|
|
|
return HAL_OK;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//E_RETURN(_dau_wave_col_start());
|
|
|
|
|
E_RETURN(_dau_wave_col_defect());
|
|
|
|
|
E_RETURN(_dau_wave_col_start());
|
|
|
|
|
//E_RETURN(_dau_wave_col_defect());
|
|
|
|
|
E_RETURN(_dau_wave_col_power(DAU_SOURCE_REG));
|
|
|
|
|
_dau_power_calculate(DAU_SOURCE_REG);
|
|
|
|
|
|
|
|
|
@ -871,7 +978,6 @@ static void _dau_init(void)
|
|
|
|
|
|
|
|
|
|
dau_ctrl.spi = &hspi1;
|
|
|
|
|
|
|
|
|
|
vty_print("#D7 %x\r\n", st_data.addr_fault);
|
|
|
|
|
if (st_data.addr_fault >= WARE_FAULT_ADDRESS && st_data.addr_fault < WARE_FAULT_ADDRESS_END
|
|
|
|
|
&& 0 == (st_data.addr_fault & 0x1ffff))
|
|
|
|
|
{
|
|
|
|
@ -881,8 +987,8 @@ static void _dau_init(void)
|
|
|
|
|
{
|
|
|
|
|
dau_ctrl.addr_fault = WARE_FAULT_ADDRESS;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
vty_print("#D8 %x\r\n", st_data.addr_reg);
|
|
|
|
|
vty_print("#D7 %x %x\r\n", st_data.addr_fault, dau_ctrl.addr_fault);
|
|
|
|
|
|
|
|
|
|
if (st_data.addr_reg >= WARE_REG_ADDRESS && st_data.addr_reg < WARE_REG_ADDRESS_END
|
|
|
|
|
&& 0 == (st_data.addr_reg & 0x1ffff))
|
|
|
|
|
{
|
|
|
|
@ -892,6 +998,7 @@ static void _dau_init(void)
|
|
|
|
|
{
|
|
|
|
|
dau_ctrl.addr_reg = WARE_REG_ADDRESS;
|
|
|
|
|
}
|
|
|
|
|
vty_print("#D8 %x %x\r\n", st_data.addr_reg, dau_ctrl.addr_reg);
|
|
|
|
|
|
|
|
|
|
/* 开启第一次采集前, 默认上传完成 */
|
|
|
|
|
dau_ctrl.col_time = 600000;
|
|
|
|
@ -919,7 +1026,13 @@ static void _dau_init(void)
|
|
|
|
|
return: */
|
|
|
|
|
static void _dau_start(void *argument)
|
|
|
|
|
{
|
|
|
|
|
//int32_t rv = HAL_ERROR;
|
|
|
|
|
//uint16_t *buf = (uint16_t*)(&dau_ctrl.buf_dau_rx[2]);
|
|
|
|
|
uint16_t *buf = NULL;
|
|
|
|
|
uint32_t addr = 0;
|
|
|
|
|
uint8_t i = 0;
|
|
|
|
|
uint8_t j = 0;
|
|
|
|
|
uint16_t k = 0;
|
|
|
|
|
int32_t rv = HAL_ERROR;
|
|
|
|
|
|
|
|
|
|
/* 状态初始化 */
|
|
|
|
|
_dau_init();
|
|
|
|
@ -929,10 +1042,24 @@ static void _dau_start(void *argument)
|
|
|
|
|
osDelay(5000);
|
|
|
|
|
common_watchdog_set(COM_WDG_DAU);
|
|
|
|
|
|
|
|
|
|
//rv = _dau_reg_read_global_state();
|
|
|
|
|
//if (rv != HAL_OK)
|
|
|
|
|
/* 读取全局状态寄存器 */
|
|
|
|
|
rv = _dau_reg_read_global_state();
|
|
|
|
|
if (rv != HAL_OK)
|
|
|
|
|
{
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 处理升级 */
|
|
|
|
|
//if (dau_ctrl.update_flag)
|
|
|
|
|
//{
|
|
|
|
|
// continue;
|
|
|
|
|
// if (HAL_OK == _dau_update())
|
|
|
|
|
// {
|
|
|
|
|
// dau_ctrl.update_rt = DAU_UPD_OK;
|
|
|
|
|
// }
|
|
|
|
|
// else
|
|
|
|
|
// {
|
|
|
|
|
// dau_ctrl.update_rt = DAU_UPD_ERROR;
|
|
|
|
|
// }
|
|
|
|
|
//}
|
|
|
|
|
|
|
|
|
|
/* utc 对时处理 */
|
|
|
|
@ -943,13 +1070,90 @@ static void _dau_start(void *argument)
|
|
|
|
|
|
|
|
|
|
/* 循环工频缺陷电流采集 */
|
|
|
|
|
_dau_wave_col_trigger_by_reg();
|
|
|
|
|
|
|
|
|
|
if (1 == _dau_spi_rw)
|
|
|
|
|
{
|
|
|
|
|
_dau_spi_rw = 0;
|
|
|
|
|
_dau_reg_read(_dau_spi_addr, _dau_spi_len << 1);
|
|
|
|
|
}
|
|
|
|
|
else if(2 == _dau_spi_rw)
|
|
|
|
|
{
|
|
|
|
|
uint16_t *data = (uint16_t*)&dau_ctrl.buf_dau_tx[2];
|
|
|
|
|
*data = _dau_spi_len;
|
|
|
|
|
_dau_spi_rw = 0;
|
|
|
|
|
_dau_reg_write(_dau_spi_addr, 2);
|
|
|
|
|
}
|
|
|
|
|
common_watchdog_set(COM_WDG_DAU);
|
|
|
|
|
|
|
|
|
|
#if 0
|
|
|
|
|
addr = dau_ctrl.addr_reg;
|
|
|
|
|
for(i = 0; i < 3; i++)
|
|
|
|
|
{
|
|
|
|
|
vty_print("DEFECT %x %d\r\n", addr, i);
|
|
|
|
|
for(j = 0; j < DAU_PKT_DEFECT_CNT; j++)
|
|
|
|
|
{
|
|
|
|
|
common_watchdog_set(COM_WDG_DAU);
|
|
|
|
|
spi_flash_read(addr, &dau_ctrl.buf_dau_rx[2], 1024);
|
|
|
|
|
addr += DAU_PKT_DEFECT_BYTE_CNT;
|
|
|
|
|
for(k = 0; k < 512;)
|
|
|
|
|
{
|
|
|
|
|
vty_print("%04x ", buf[k++]);
|
|
|
|
|
if(0 == k % 32)
|
|
|
|
|
{
|
|
|
|
|
osDelay(100);
|
|
|
|
|
vty_print("\r\n");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if(k % 32 != 0)
|
|
|
|
|
{
|
|
|
|
|
osDelay(100);
|
|
|
|
|
vty_print("\r\n");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
vty_print("\r\n");
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
#if 1
|
|
|
|
|
for(i = 0; i < DAU_PORT_POWER_CNT; i++)
|
|
|
|
|
{
|
|
|
|
|
vty_print("POWER %d\r\n", i);
|
|
|
|
|
buf = (uint16_t*)dau_ctrl.reg_power[i];
|
|
|
|
|
for(j = 0; j < DAU_PKT_POWER_CNT; j++)
|
|
|
|
|
{
|
|
|
|
|
common_watchdog_set(COM_WDG_DAU);
|
|
|
|
|
for(k = 0; k < 512;)
|
|
|
|
|
{
|
|
|
|
|
vty_print("%-04x ", buf[k++]);
|
|
|
|
|
if(0 == k % 32)
|
|
|
|
|
{
|
|
|
|
|
osDelay(100);
|
|
|
|
|
vty_print("\r\n");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if(k % 32 != 0)
|
|
|
|
|
{
|
|
|
|
|
osDelay(100);
|
|
|
|
|
vty_print("\r\n");
|
|
|
|
|
}
|
|
|
|
|
buf += 512;
|
|
|
|
|
}
|
|
|
|
|
vty_print("\r\n");
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
while(1)
|
|
|
|
|
{
|
|
|
|
|
osDelay(5000);
|
|
|
|
|
common_watchdog_set(COM_WDG_DAU);
|
|
|
|
|
//vty_print("sleep\r\n");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* description: GPS 报文处理 ($GNZDA,235949.012,05,01,1980,,*4F)
|
|
|
|
|
param:
|
|
|
|
|
return: */
|
|
|
|
|
static void _dau_gps_process(void)
|
|
|
|
|
static int32_t _dau_gps_process(void)
|
|
|
|
|
{
|
|
|
|
|
char *pkt = (char*)dau_ctrl.buf_gps;
|
|
|
|
|
uint8_t n = 0;
|
|
|
|
@ -982,14 +1186,14 @@ static void _dau_gps_process(void)
|
|
|
|
|
n = sscanf(&pkt[i], "$GNZDA,%02d%02d%02d.%d,%02d,%02d,%04d", &hour, &min, &sec, &ms, &day, &mon, &year);
|
|
|
|
|
if (n != 7)
|
|
|
|
|
{
|
|
|
|
|
break;
|
|
|
|
|
return HAL_ERROR;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
DBG(DBG_M_GPS, "%d/%d/%d %d:%d:%d\r\n", year, mon, day, hour, min, sec);
|
|
|
|
|
/* 小于 2024 说明对时不成功. */
|
|
|
|
|
if (year < 2024)
|
|
|
|
|
{
|
|
|
|
|
break;
|
|
|
|
|
return HAL_ERROR;
|
|
|
|
|
}
|
|
|
|
|
_dau_tm.tm_year = year - 1900;
|
|
|
|
|
_dau_tm.tm_mon = mon - 1;
|
|
|
|
@ -1000,9 +1204,10 @@ static void _dau_gps_process(void)
|
|
|
|
|
|
|
|
|
|
dau_ctrl.utc = mktime(&_dau_tm);
|
|
|
|
|
rtc_time_set(dau_ctrl.utc);
|
|
|
|
|
dau_ctrl.is_utc_valid = TRUE;
|
|
|
|
|
break;
|
|
|
|
|
return HAL_OK;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return HAL_ERROR;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* description: GPS 初始化
|
|
|
|
@ -1025,13 +1230,16 @@ static void _dau_gps_init(void)
|
|
|
|
|
static void _dau_gps_start(void *argument)
|
|
|
|
|
{
|
|
|
|
|
uint32_t notify_value = 0xff;
|
|
|
|
|
uint32_t err_cnt = 5;
|
|
|
|
|
|
|
|
|
|
/* 状态初始化 */
|
|
|
|
|
_dau_gps_init();
|
|
|
|
|
|
|
|
|
|
for (;;)
|
|
|
|
|
{
|
|
|
|
|
common_watchdog_set(COM_WDG_GPS);
|
|
|
|
|
/* 连续 5 次失败才认为对时失败 */
|
|
|
|
|
dau_ctrl.is_utc_ok = (err_cnt < 5);
|
|
|
|
|
common_watchdog_set(COM_WDG_GPS);
|
|
|
|
|
|
|
|
|
|
/* 开启串口空闲中断收包 */
|
|
|
|
|
if (HAL_OK == HAL_UARTEx_ReceiveToIdle_DMA(dau_ctrl.uart, dau_ctrl.buf_gps, DAU_GPS_BUF_LEN))
|
|
|
|
@ -1046,22 +1254,33 @@ static void _dau_gps_start(void *argument)
|
|
|
|
|
{
|
|
|
|
|
/* 收包超时 */
|
|
|
|
|
dau_ctrl.is_utc_valid = FALSE;
|
|
|
|
|
err_cnt++;
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
dau_ctrl.is_utc_valid = FALSE;
|
|
|
|
|
DBG(DBG_M_GPS, "Len %d\r\n", dau_ctrl.len_buf_gps);
|
|
|
|
|
|
|
|
|
|
/* 命令过长. */
|
|
|
|
|
if (dau_ctrl.len_buf_gps >= DAU_GPS_BUF_LEN)
|
|
|
|
|
{
|
|
|
|
|
dau_ctrl.is_utc_valid = FALSE;
|
|
|
|
|
err_cnt++;
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 字符串结束标志 */
|
|
|
|
|
dau_ctrl.buf_gps[dau_ctrl.len_buf_gps] = 0;
|
|
|
|
|
|
|
|
|
|
_dau_gps_process();
|
|
|
|
|
if (HAL_OK == _dau_gps_process())
|
|
|
|
|
{
|
|
|
|
|
dau_ctrl.is_utc_valid = TRUE;
|
|
|
|
|
err_cnt = 0;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
dau_ctrl.is_utc_valid = FALSE;
|
|
|
|
|
err_cnt++;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -1075,6 +1294,16 @@ void dau_init(void)
|
|
|
|
|
dau_ctrl.gps_handle = osThreadNew(_dau_gps_start, NULL, &dau_gps_attributes);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* description: spi 接口测试函数
|
|
|
|
|
param:
|
|
|
|
|
return: */
|
|
|
|
|
void dau_spi_rw(int8_t rw, uint16_t addr, uint16_t len)
|
|
|
|
|
{
|
|
|
|
|
_dau_spi_rw = rw;
|
|
|
|
|
_dau_spi_addr = addr;
|
|
|
|
|
_dau_spi_len = len;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* description: dau 显示接口
|
|
|
|
|
param:
|
|
|
|
|
return: */
|
|
|
|
@ -1083,6 +1312,7 @@ void dau_show(void)
|
|
|
|
|
struct tm *day = NULL;
|
|
|
|
|
uint32_t utc = dau_ctrl.utc;
|
|
|
|
|
|
|
|
|
|
vty_print("state: %d\r\n", dau_ctrl.is_utc_ok);
|
|
|
|
|
if (dau_ctrl.is_utc_valid)
|
|
|
|
|
{
|
|
|
|
|
utc += 28800;
|
|
|
|
|