📄 data_log.c
字号:
/* =====================================================================================
File name: DATA_LOG.C
Originator: newimage R&D
Description: This file contains source for initialization/run-time of DATA_LOG module
=====================================================================================
History:
-------------------------------------------------------------------------------------
05-15-2002 Release Rev 1.0
-----------------------------------------------------------------------------------*/
#include "data_log.h"
#define P_LOG_START 0x10bbcc //触发开始条件
#define P_TRIG_SOURSE 0x10bbcd //触发源编号
#define P_TRIG_PROPERTY 0x10bbce //触发源信息 1:数值触发 x:bit触发
#define P_TRIG_EDGE 0x10bbcf //触发边沿条件 1:高于电平 x:低于电平
#define P_TRIG_LEVEL 0x10bbd0 //触发电平或触发BIT
#define P_LOG_PRD 0x10bbd1 //记录间隔周期
#define P_LOG_TRIG_LENTH 0x10bbd2 //满足触发条件后记录长度
#define P_CH1 0x10BBD5 //通道1编号
#define P_CH2 0x10BBD6
#define P_CH3 0x10BBD7
#define P_CH4 0x10BBD8
#define P_CH5 0x10BBD9
#define P_CH6 0x10BBDA
#define P_LOG_ACHIVED 0x10BBE0 //完成标志
#define P_DATA_LOG_END 0x10bbe1 //结束地址
#define P_TRIG_COUNT 0x10bbe2 //达到触发后需要完成的计数指针
#define P_TRIG_STATE 0x10bbe3 //触发状态:1 开始记录等待触发 2触发完成等待结束 0记录完成等待下一次启动
#define P_TRIG_PRD_CNT 0x10BBE4 //触发周期计数
#define P_DATA_HEAD 0x10BBEA //数据记录空间的头地址
extern long DATA_LOG_MAP[];
void data_log_update(DATALOG *p)
{
long * DataPoint;
int *ptr,*ptr1,*ptr2;
//P_LOG_START
ptr=(int *)P_LOG_START;
if(*ptr==0)return; //未启动数据记录,退出程序
//开始记录标志为1,进行数据记录
ptr=(int *)P_LOG_ACHIVED;
(*ptr)=0;
ptr=(int *)P_TRIG_PRD_CNT;
(*ptr)--;
if(*ptr<=0)
{
//满足周期记录条件记录本次数据
ptr1=(int*)P_LOG_PRD;
*ptr=*ptr1;
//数据启动开始保存处理过程,同时等待达到触发条件
DataPoint=(long *)DATA_LOG_MAP;
ptr=(int*)P_CH1; //通道一的数据地址编码
ptr1=(int*)DataPoint[*ptr++]; //通道一的地址指针在FLASH中
ptr2=(int*)(P_DATA_HEAD+p->index); //取得通道一的数据指针
*ptr2++=*ptr1; //ch1 保存通道一的数据
ptr1=(int*)DataPoint[*ptr++]; ////取得通道二的数据指针
*ptr2++=*ptr1; //ch2 保存通道二的数据
ptr1=(int*)DataPoint[*ptr++];
*ptr2++=*ptr1; //ch3
ptr1=(int*)DataPoint[*ptr++];
*ptr2++=*ptr1; //ch4
ptr1=(int*)DataPoint[*ptr++];
*ptr2++=*ptr1; //ch5
ptr1=(int*)DataPoint[*ptr];
*ptr2=*ptr1; //ch6
p->index+=6;
ptr=(int*)P_DATA_LOG_END;
(*ptr)=p->index+2030; //结束地址
if(p->index >= NUMBER_SAMPLES)
{
p->index =0; //输出超出保存范围,从头开始
*ptr=2030+NUMBER_SAMPLES;
}
ptr=(int *)P_TRIG_STATE;
if(*ptr==0)
{//begin to storing
*ptr=1;//switch to waiting for trigger
}
else if(*ptr==1)
{//waiting for trigger
ptr=(int*)P_TRIG_PROPERTY;
if(*ptr==1)
{//data value trigger;
ptr=(int*)P_TRIG_EDGE;
if(*ptr==0)
{//down level trigger
ptr=(int*)P_TRIG_SOURSE;
ptr1=(int*)DataPoint[*ptr];
ptr=(int*)P_TRIG_LEVEL;
if(*ptr1<*ptr)
{//comfirm trigger condition
ptr=(int*)P_TRIG_STATE;
*ptr=2; //登
ptr=(int*)P_TRIG_COUNT;
ptr1=(int*)P_LOG_TRIG_LENTH;
*ptr=*ptr1;
}
}
else
{//up level trigger
ptr=(int*)P_TRIG_SOURSE;
ptr1=(int*)DataPoint[*ptr];
ptr=(int*)P_TRIG_LEVEL;
if(*ptr1>*ptr)
{//comfirm trigger condition
ptr=(int*)P_TRIG_STATE;
*ptr=2;
ptr=(int*)P_TRIG_COUNT;
ptr1=(int*)P_LOG_TRIG_LENTH;
*ptr=*ptr1;
}
}
}
else if(*ptr==0)
{//data bit trigger;
ptr=(int*)P_TRIG_EDGE;
if(*ptr==1)
{//up level trigger
ptr=(int*)P_TRIG_SOURSE;
ptr1=(int*)DataPoint[*ptr];
ptr=(int*)P_TRIG_LEVEL;
if(((*ptr)&(*ptr1))==(*ptr))
{//comfirm trigger condition
ptr=(int*)P_TRIG_STATE;
*ptr=2;
ptr=(int*)P_TRIG_COUNT;
ptr1=(int*)P_LOG_TRIG_LENTH;
*ptr=*ptr1;
}
}
else
{//down level trigger
ptr=(int*)P_TRIG_SOURSE;
ptr1=(int*)DataPoint[*ptr];
ptr=(int*)P_TRIG_LEVEL;
if((*ptr)^(*ptr1)==0xffff)
{//comfirm trigger condition
ptr=(int*)P_TRIG_STATE;
*ptr=2;
ptr=(int*)P_TRIG_COUNT;
ptr1=(int*)P_LOG_TRIG_LENTH;
*ptr=1000;//*ptr1;
}
}
}
else
{//auto mode
ptr=(int*)P_TRIG_STATE;
*ptr=2;
ptr=(int*)P_TRIG_COUNT;
*ptr=1000;
}
}
else if(*ptr==2)
{//waiting for end
ptr1=(int*)P_TRIG_COUNT;
(*ptr1)--;
if(*ptr1<=0)
{//data log finished
*ptr=0;
ptr=(int *)P_LOG_START;
*ptr=0;
ptr=(int *)P_LOG_ACHIVED;
*ptr=1;
}
}
else
{//exception
*ptr=0;
}
}
}
void data_log_init(DATALOG *p)
{
int *ptr;
ptr=(int *)P_LOG_START;
*ptr=0;
ptr=(int *)P_LOG_ACHIVED;
*ptr++=0;
*ptr++=0;
*ptr++=0;
*ptr++=0;
*ptr++=0;
*ptr++=0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -