|
|
|
@ -592,57 +592,6 @@ int32_t _dau_wave_col_defect(void)
|
|
|
|
|
vty_print("#D reg end addr %x\r\n", addr);
|
|
|
|
|
MONITOR_BITMAP_SET(dau_ctrl.col_flag, DAU_COL_FLAG_REG_DEFECT);
|
|
|
|
|
return rv;
|
|
|
|
|
|
|
|
|
|
#if 0
|
|
|
|
|
uint8_t i = 0;
|
|
|
|
|
uint8_t j = 0;
|
|
|
|
|
uint8_t is_exceed = FALSE;
|
|
|
|
|
uint32_t addr = 0;
|
|
|
|
|
int32_t rv = HAL_ERROR;
|
|
|
|
|
|
|
|
|
|
/* 比较缺陷波形是否超过阈值 */
|
|
|
|
|
//E_RETURN(_dau_reg_read_port_state());
|
|
|
|
|
for(i = 0; i < DAU_PORT_DEFECT_CNT; i++)
|
|
|
|
|
{
|
|
|
|
|
dau_ctrl.reg_defect_max[i] = 100 +i;
|
|
|
|
|
if (dau_ctrl.reg_defect_max[i] > dev_config.wave_threshold)
|
|
|
|
|
{
|
|
|
|
|
is_exceed = TRUE;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
/* 没有超过阈值并没有强制录波直接返回 */
|
|
|
|
|
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));
|
|
|
|
|
addr += SPI_FLASH_BLOCK64_SIZE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 数据地址应该是被擦除过的地址 (当前地址向前偏移 128k). */
|
|
|
|
|
addr = dau_ctrl.addr_reg;
|
|
|
|
|
/* 读取缺陷数据 */
|
|
|
|
|
for(i = 0; i < DAU_PORT_DEFECT_CNT; i++)
|
|
|
|
|
{
|
|
|
|
|
memset(&dau_ctrl.buf_dau_rx[2], i, DAU_PKT_FAULT_BYTE_CNT);
|
|
|
|
|
for(j = 0; j < DAU_PKT_DEFECT_CNT; j++)
|
|
|
|
|
{
|
|
|
|
|
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("#D4 %x\r\n", addr);
|
|
|
|
|
MONITOR_BITMAP_SET(dau_ctrl.col_flag, DAU_COL_FLAG_REG_DEFECT);
|
|
|
|
|
return rv;
|
|
|
|
|
#endif
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* description: 工频波形采集
|
|
|
|
@ -1063,10 +1012,6 @@ static void _dau_init(void)
|
|
|
|
|
HAL_GPIO_WritePin(DAU_RST_GPIO_Port, DAU_RST_Pin, GPIO_PIN_SET);
|
|
|
|
|
HAL_GPIO_WritePin(POWER_DAU_GPIO_Port, POWER_DAU_Pin, GPIO_PIN_SET);
|
|
|
|
|
osDelay(2000);
|
|
|
|
|
//common_watchdog_set(COM_WDG_DAU);
|
|
|
|
|
//osDelay(10000);
|
|
|
|
|
//common_watchdog_set(COM_WDG_DAU);
|
|
|
|
|
//osDelay(10000);
|
|
|
|
|
|
|
|
|
|
/* 读取 FPGA 版本信息 */
|
|
|
|
|
if (HAL_OK == _dau_reg_read_global_state())
|
|
|
|
@ -1203,6 +1148,25 @@ int32_t _dau_adj_reg_write_port(uint32_t port)
|
|
|
|
|
return rv;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* description: 缺陷波形采集
|
|
|
|
|
param:
|
|
|
|
|
return: HAL_xxx */
|
|
|
|
|
int32_t _dau_adj_wave_col_defect(void)
|
|
|
|
|
{
|
|
|
|
|
uint8_t i = 0;
|
|
|
|
|
int32_t rv = HAL_ERROR;
|
|
|
|
|
|
|
|
|
|
/* 比较缺陷波形是否超过阈值 */
|
|
|
|
|
E_RETURN(_dau_reg_read_port_state());
|
|
|
|
|
for(i = 0; i < DAU_PORT_DEFECT_CNT; i++)
|
|
|
|
|
{
|
|
|
|
|
dau_ctrl.reg_defect_max[i] = abs(dau_ctrl.reg_port_state.DMAX[i]);
|
|
|
|
|
}
|
|
|
|
|
/* 直接返回 */
|
|
|
|
|
MONITOR_BITMAP_RESET(dau_ctrl.col_flag, DAU_COL_FLAG_REG_DEFECT);
|
|
|
|
|
return HAL_OK;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* description: 寄存器触发波形采集
|
|
|
|
|
param:
|
|
|
|
|
return: HAL_xxx */
|
|
|
|
@ -1211,73 +1175,12 @@ int32_t _dau_adj_wave_col_trigger_by_reg(void)
|
|
|
|
|
int32_t rv = HAL_ERROR;
|
|
|
|
|
|
|
|
|
|
E_RETURN(_dau_wave_col_start());
|
|
|
|
|
E_RETURN(_dau_adj_wave_col_defect());
|
|
|
|
|
E_RETURN(_dau_wave_col_power(DAU_SOURCE_REG));
|
|
|
|
|
|
|
|
|
|
#if 0
|
|
|
|
|
uint16_t *buf = (uint16_t*)(&dau_ctrl.buf_dau_rx[2]);
|
|
|
|
|
uint32_t addr = dau_ctrl.addr_reg;
|
|
|
|
|
uint8_t i = 0;
|
|
|
|
|
uint8_t j = 0;
|
|
|
|
|
uint16_t k = 0;
|
|
|
|
|
//for(i = 0; i < DAU_PORT_DEFECT_CNT; i++)
|
|
|
|
|
for(i = 0; i < 1; i++)
|
|
|
|
|
{
|
|
|
|
|
common_watchdog_set(COM_WDG_DAU);
|
|
|
|
|
vty_print("DEFECT %x %d\r\n", addr, i);
|
|
|
|
|
for(j = 0; j < DAU_PKT_DEFECT_CNT; j++)
|
|
|
|
|
{
|
|
|
|
|
spi_flash_read(addr, &dau_ctrl.buf_dau_rx[2], 1024);
|
|
|
|
|
addr += DAU_PKT_DEFECT_BYTE_CNT;
|
|
|
|
|
for(k = 0; k < 512;)
|
|
|
|
|
{
|
|
|
|
|
common_watchdog_set(COM_WDG_DAU);
|
|
|
|
|
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
|
|
|
|
|
uint16_t *buf = (uint16_t*)(&dau_ctrl.buf_dau_rx[2]);
|
|
|
|
|
uint8_t i = 0;
|
|
|
|
|
uint8_t j = 0;
|
|
|
|
|
uint16_t k = 0;
|
|
|
|
|
//for(i = 5; i < DAU_PORT_POWER_CNT; i++)
|
|
|
|
|
for(i = 5; i < 6; i++)
|
|
|
|
|
{
|
|
|
|
|
common_watchdog_set(COM_WDG_DAU);
|
|
|
|
|
vty_print("POWER %d\r\n", i);
|
|
|
|
|
buf = (uint16_t*)dau_ctrl.reg_power[i];
|
|
|
|
|
for(j = 0; j < DAU_PKT_POWER_CNT; j++)
|
|
|
|
|
{
|
|
|
|
|
for(k = 0; k < 512;)
|
|
|
|
|
{
|
|
|
|
|
vty_print("%-04x ", buf[k++]);
|
|
|
|
|
if(0 == (j*512+k ) % 40)
|
|
|
|
|
{
|
|
|
|
|
osDelay(100);
|
|
|
|
|
vty_print("\r\n");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
buf += 512;
|
|
|
|
|
}
|
|
|
|
|
vty_print("\r\n");
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
return rv;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* description: DAU 校准任务循环
|
|
|
|
|
param:
|
|
|
|
|
return: */
|
|
|
|
@ -1335,6 +1238,7 @@ static void _dau_adj_start(void *argument)
|
|
|
|
|
_dau_reg_write_port(i);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 重启 FPGA 触发故障采集 */
|
|
|
|
|
HAL_GPIO_WritePin(POWER_DAU_GPIO_Port, POWER_DAU_Pin, GPIO_PIN_RESET);
|
|
|
|
|
HAL_GPIO_WritePin(DAU_RST_GPIO_Port, DAU_RST_Pin, GPIO_PIN_RESET);
|
|
|
|
|
osDelay(1000);
|
|
|
|
@ -1343,8 +1247,7 @@ static void _dau_adj_start(void *argument)
|
|
|
|
|
osDelay(2000);
|
|
|
|
|
|
|
|
|
|
/* 触发阈值 */
|
|
|
|
|
//*temp = 0x2800;
|
|
|
|
|
*temp = 0x0;
|
|
|
|
|
*temp = 0x2800;
|
|
|
|
|
_dau_reg_write(DAU_REG_ADDR_GCFTTR, sizeof(uint16_t));
|
|
|
|
|
/* 开启 */
|
|
|
|
|
osDelay(500);
|
|
|
|
@ -1377,6 +1280,146 @@ static void _dau_adj_start(void *argument)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* description: 故障触发波形采集
|
|
|
|
|
param:
|
|
|
|
|
return: HAL_xxx */
|
|
|
|
|
int32_t _dau_continue_wave_col_trigger_by_fault(void)
|
|
|
|
|
{
|
|
|
|
|
int32_t rv = HAL_ERROR;
|
|
|
|
|
|
|
|
|
|
/* 没有触发直接退出 */
|
|
|
|
|
if (!((dau_ctrl.reg_global.GFTR & DAU_GFTR_FAULT_Msk) >> DAU_GFTR_FAULT_Pos))
|
|
|
|
|
{
|
|
|
|
|
return HAL_OK;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 采集波形 */
|
|
|
|
|
E_RETURN(_dau_wave_col_fault());
|
|
|
|
|
E_RETURN(_dau_wave_col_power(DAU_SOURCE_FAULT));
|
|
|
|
|
_dau_power_calculate(DAU_SOURCE_FAULT);
|
|
|
|
|
#if 0
|
|
|
|
|
uint16_t *buf = (uint16_t*)(&dau_ctrl.buf_dau_rx[2]);
|
|
|
|
|
uint8_t i = 0;
|
|
|
|
|
uint8_t j = 0;
|
|
|
|
|
uint16_t k = 0;
|
|
|
|
|
uint32_t addr = dau_ctrl.addr_fault;
|
|
|
|
|
|
|
|
|
|
for(i = 0; i < 1; i++)
|
|
|
|
|
{
|
|
|
|
|
common_watchdog_set(COM_WDG_DAU);
|
|
|
|
|
vty_print("FAULT %x %d\r\n", addr, i);
|
|
|
|
|
for(j = 0; j < DAU_PKT_FAULT_CNT; j++)
|
|
|
|
|
//for(j = 0; j < 1; j++)
|
|
|
|
|
{
|
|
|
|
|
spi_flash_read(addr, &dau_ctrl.buf_dau_rx[2], 1024);
|
|
|
|
|
addr += DAU_PKT_FAULT_BYTE_CNT;
|
|
|
|
|
for(k = 0; k < 512;)
|
|
|
|
|
{
|
|
|
|
|
common_watchdog_set(COM_WDG_DAU);
|
|
|
|
|
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 0
|
|
|
|
|
uint16_t *buf = NULL;
|
|
|
|
|
uint8_t i = 0;
|
|
|
|
|
uint8_t j = 0;
|
|
|
|
|
uint16_t k = 0;
|
|
|
|
|
|
|
|
|
|
for(i = 0; i < DAU_PORT_POWER_CNT; i++)
|
|
|
|
|
{
|
|
|
|
|
common_watchdog_set(COM_WDG_DAU);
|
|
|
|
|
vty_print("POWER %d\r\n", i);
|
|
|
|
|
buf = (uint16_t*)dau_ctrl.fault_power[i];
|
|
|
|
|
for(j = 0; j < DAU_PKT_POWER_CNT; j++)
|
|
|
|
|
{
|
|
|
|
|
for(k = 0; k < 512;)
|
|
|
|
|
{
|
|
|
|
|
vty_print("%-04x ", buf[k++]);
|
|
|
|
|
if(0 == (j*512+k ) % 40)
|
|
|
|
|
{
|
|
|
|
|
osDelay(100);
|
|
|
|
|
vty_print("\r\n");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
buf += 512;
|
|
|
|
|
}
|
|
|
|
|
vty_print("\r\n");
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
return HAL_OK;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* description: DAU 主任务循环
|
|
|
|
|
param:
|
|
|
|
|
return: */
|
|
|
|
|
static void _dau_continue_start(void *argument)
|
|
|
|
|
{
|
|
|
|
|
int32_t rv = HAL_ERROR;
|
|
|
|
|
|
|
|
|
|
/* 状态初始化 */
|
|
|
|
|
_dau_init();
|
|
|
|
|
vty_print("DAU start...\r\n");
|
|
|
|
|
|
|
|
|
|
for (;;)
|
|
|
|
|
{
|
|
|
|
|
common_watchdog_set(COM_WDG_DAU);
|
|
|
|
|
osDelay(4250);
|
|
|
|
|
|
|
|
|
|
/* 读取全局状态寄存器 */
|
|
|
|
|
rv = _dau_reg_read_global_state();
|
|
|
|
|
if (rv != HAL_OK)
|
|
|
|
|
{
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* utc 对时处理 */
|
|
|
|
|
_dau_utc();
|
|
|
|
|
|
|
|
|
|
/* 故障电流采集 */
|
|
|
|
|
_dau_continue_wave_col_trigger_by_fault();
|
|
|
|
|
|
|
|
|
|
/* 循环工频缺陷电流采集 */
|
|
|
|
|
_dau_adj_wave_col_trigger_by_reg();
|
|
|
|
|
_dau_power_calculate(DAU_SOURCE_REG);
|
|
|
|
|
|
|
|
|
|
/* 处理升级 */
|
|
|
|
|
if (dau_ctrl.update_flag)
|
|
|
|
|
{
|
|
|
|
|
flash_log_write(FLASH_LOG_TYPE_NOTIFY, "FPGA update start!\r\n");
|
|
|
|
|
dau_ctrl.update_flag = FALSE;
|
|
|
|
|
if (HAL_OK == _dau_update())
|
|
|
|
|
{
|
|
|
|
|
dau_ctrl.update_rt = DAU_UPD_OK;
|
|
|
|
|
dau_ctrl.update_rt_dbg = DAU_UPD_OK;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
dau_ctrl.update_rt = DAU_UPD_ERROR;
|
|
|
|
|
dau_ctrl.update_rt_dbg = DAU_UPD_ERROR;
|
|
|
|
|
}
|
|
|
|
|
flash_log_write(FLASH_LOG_TYPE_NOTIFY, "FPGA update %s!\r\n", dau_ctrl.update_rt == 1 ? "OK" : "ERROR");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (IS_MONITOR_BIT_SET(dau_ctrl.reg_flag, DAU_REG_PORT_WRITE))
|
|
|
|
|
{
|
|
|
|
|
MONITOR_BITMAP_RESET(dau_ctrl.reg_flag, DAU_REG_PORT_WRITE);
|
|
|
|
|
_dau_reg_write_port(dau_ctrl.reg_data);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* description: GPS 报文处理 ($GNZDA,235949.012,05,01,1980,,*4F)
|
|
|
|
|
param:
|
|
|
|
@ -1518,20 +1561,22 @@ static void _dau_gps_start(void *argument)
|
|
|
|
|
return: */
|
|
|
|
|
void dau_init(void)
|
|
|
|
|
{
|
|
|
|
|
dau_ctrl.dau_handle = osThreadNew(_dau_start, NULL, &dau_attributes);
|
|
|
|
|
dau_ctrl.gps_handle = osThreadNew(_dau_gps_start, NULL, &dau_gps_attributes);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* description: DAU 采集校准任务初始化
|
|
|
|
|
param:
|
|
|
|
|
return: */
|
|
|
|
|
void dau_adj_init(void)
|
|
|
|
|
{
|
|
|
|
|
if (IS_MONITOR_BIT_SET(dev_config.flag, DEV_FLAG_ADJ))
|
|
|
|
|
{
|
|
|
|
|
dau_ctrl.dau_handle = osThreadNew(_dau_adj_start, NULL, &dau_adj_attributes);
|
|
|
|
|
}
|
|
|
|
|
else if(IS_MONITOR_BIT_SET(dev_config.flag, DEV_FLAG_FACTORY))
|
|
|
|
|
{
|
|
|
|
|
dau_ctrl.dau_handle = osThreadNew(_dau_continue_start, NULL, &dau_adj_attributes);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
/* 初始化 DAU 任务. */
|
|
|
|
|
dau_ctrl.dau_handle = osThreadNew(_dau_start, NULL, &dau_attributes);
|
|
|
|
|
}
|
|
|
|
|
dau_ctrl.gps_handle = osThreadNew(_dau_gps_start, NULL, &dau_gps_attributes);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* description: spi 接口测试函数
|
|
|
|
|
param:
|
|
|
|
|
return: */
|
|
|
|
|