⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 data_log.c

📁 基于TMS320F2812的电动机控制源码(使用C语言)
💻 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 + -