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

📄 9311db.h

📁 详细介绍了arm7-at91r40008,的开发全过程
💻 H
字号:
/*------------------------------------------------------------------*/
/*模块名称:9311db.h                                            	*/
/*模块功能:9311的数据库(及类型)的头文件							*/
/*编写日期:2004年8月                                         		*/
/*编写者:  dingding												*/
/*------------------------------------------------------------------*/

#ifndef DF9311DB_H
#define DF9311DB_H


/*------------------------------------------------------------------*/
/*--------------------------系统常量定义----------------------------*/
/*------------------------------------------------------------------*/
#define DEFSYSDELAY		5		//(5*0.5s)

#define DEFYCNUM		13		//一回路遥测个数
#define DEFBINUM		8		//硬件遥信个数
#define OTHERSOFTBINUM	0		//虚拟遥信个数
#define FASOFTBINUM		16		//一回路故障检测虚拟遥信个数
#define DEFYKNUM		3		//遥控个数

#define PORTNUM			2		//设备规约通讯串口总数

/*------------------------------------------------------------------*/
/*--------------------------中断常量定义----------------------------*/
/*------------------------------------------------------------------*/
#define 	INTWATCHDOG					1
#define 	FIQ_INTERRUPT_LEVEL			2
#define 	SOFT_INTERRUPT_LEVEL    	3
#define		USART0_INTERRUPT_LEVEL		6
#define		USART1_INTERRUPT_LEVEL		7
#define		TIMER0_INTERRUPT_LEVEL		5
#define		TIMER2_INTERRUPT_LEVEL		4

/*------------------------------------------------------------------*/
/*----------------------------任务ID定义----------------------------*/
/*------------------------------------------------------------------*/
#define		ROOTID		0
//采用任务优先级
#define		HID			20
#define		YXID		21
#define 	YCID		22
#define 	FAID		23
#define		USART1ID	24
#define 	USART2ID	25
#define 	RUNID		26


/*------------------------------------------------------------------*/
/*--------------------------数据库常量定义--------------------------*/
/*------------------------------------------------------------------*/
//数据类型
//DOT:表示单个操作
#define	YCDOTDATA	0x01	//单个遥测数据操作标志
#define YCDATA		0x02	//全遥测数据操作标志
#define YXDOTDATA	0x03
#define YXDATA		0x04
#define SOEDATA		0x05
#define COSDATA		0x06
#define DDDATA		0x07
#define FENTERBOOT	0x08	//进入二次引导程序
#define	FRESET		0x09	//重启动清NVRAM标志
#define	SYSTIME		0x0A
#define	ABSTIME		0x0B
#define	BIDATA		0x0C
#define INFODATA	0x0D
//录波-连续排列
#define LBDATAUA	0x15
#define LBDATAUC	0x16
#define LBDATAIA	0x17
#define LBDATAIB	0x18
#define LBDATAIC	0x19
#define LBDATAIO	0x1A
#define LBINFO		0x1B

#define YCFULLVAULE	0x0E
#define FDRLOC		0x0F

#define BORESQ		0x10	//遥控请求
#define BORESP		0x11	//遥控响应


//各存储地址
#define	BASE_NUM	128

//#define NVRAM_BASE	(0x02000000)
//固定分配区
#define	FLAGLIMIT	(BASE_NUM * 2)	//分配0x100个标志存储位置
#define NVRAMBASEADDR	(volatile INT8U *)(NVRAM_BASE)
#define FENTERBOOTADDR	(volatile INT8U *)(NVRAM_BASE + 0x00)
#define	FRESETADDR	(volatile INT8U *)(NVRAM_BASE + 0x10)
#define	ABSTIMEADDR	(volatile INT8U *)(NVRAM_BASE + 0x20)
#define	BIVALADDR	(volatile INT8U *)(NVRAM_BASE + 0x30)
#define FDRLOCADDR	(volatile INT8U *)(NVRAM_BASE + 0x40)

#define SYSINFOLIMIT	BASE_NUM
#define	SYSINFOADDR	(volatile INT8U *)(NVRAM_BASE + 0x100)

#define	LBLIMIT			3
#define LBINFOSIZE		0x20
#define LBSize			10			//每块十个周期存储
#define	LBBLOCK			0x280		//(2*32*10)	//Ua,Uc,Ia,Ib,Ic,Io(0xF00)
#define LBFDBLOCK		0xF00
#define LB2LIMIT		0xA00		//1S(2*32*50*1 - 0x280)//(0x3C00)

#define LBMANAGADDR	(volatile INT8U *)(NVRAM_BASE + 0x2000)
#define LBMANAG2ADDR	(volatile INT8U *)(NVRAM_BASE + 0x2010)
#define LBINFOADDR	(volatile INT8U *)(NVRAM_BASE + 0x2020)
#define	LBADDR		(volatile INT8U *)(NVRAM_BASE + 0x2100)
#define LBADDR2		(volatile INT8U *)(NVRAM_BASE + 0x8000)	//手动录波区(0x4000)

//动态分配区
#define	OTHERADDR	(volatile INT8U *)(NVRAM_BASE + 0xC000)		//128K(80K)
#define OTHERADDR2	(volatile INT8U *)(NVRAM_BASE + 0x3000)		//32K(20K)

#define	SOELIMIT	BASE_NUM
#define	COSLIMIT	BASE_NUM


/*------------------------------------------------------------------*/
/*--------------------------数据库事件标志--------------------------*/
/*------------------------------------------------------------------*/
//占用事件标志的高八位,低八位将交有上层任务使用
#define FCOS		0x0100	//变化遥信
#define FSOE		0x0200	//变化SOE
#define FBOOP		0x0400	//遥控操作
#define FYCRDY		0x0800	//遥测信息

//其他标志
#define TIME100MS	0x1000	//100MS扫描标志
#define FTXAVAIL	0x2000	//数据发送有效
#define FTXNEXT		0x4000	//续发请求标志 

/*------------------------------------------------------------------*/
/*----------------------------时间结构------------------------------*/
/*------------------------------------------------------------------*/
#define	DNPTIME			0x10
#define IEC101TIME		0x11
#define IEC101EXTTIME	0x12


__packed struct X1226Time_t{
	INT8U	Second;
	INT8U	Minute;
	INT8U	Hour;
	INT8U	Day;
	INT8U	Month;
	INT8U	Year;
	INT8U	Week;
	INT8U	YearH;	
};

__packed struct AbsTime_t{
	INT32U	Minute;
	INT16U	Msecond;
};

__packed struct CP24Time_t{
	INT8U	Minute;
	INT16U	Msecond;
};

__packed struct SysTime_t{
	INT16U	Year;
	INT8U	Month;
	INT8U	Day;
	INT8U	Hour;
	INT8U	Minute;
	INT8U	Second;
	INT16U	MSecond;
};

__packed struct DnpTime_t{		//DNP时间结构
	INT8U	Times[6];
};

__packed struct IEC101Time_t{
	INT16U	MSecond;	
	INT8U	Minute;	
	INT8U	Hour;	
	INT8U	Day;
	INT8U	Month;	
	INT8U	Year;
};






/*------------------------------------------------------------------*/
/*--------------------YX/SOE/COS常量、结构定义----------------------*/
/*------------------------------------------------------------------*/
//YX值
#define	YX_H		0x81
#define	YX_F		0x01


__packed struct COS_t{		//COS量
	INT16U	No;
	INT8U	Status;
};
__packed struct SOE_t{		//SOE量
	INT16U	No;
	INT8U	Status;
	struct AbsTime_t Time;
};

struct DBMSGCheck{		//数据库上发信息开辟的临时结构
	INT16U	Num;
	INT16U	DevID[8];	//受数据库最大关联个数限制
};
	


/*------------------------------------------------------------------*/
/*-------------------------遥控操作结构定义-------------------------*/
/*------------------------------------------------------------------*/
//遥控操作信息(DBINFO.Num)
#define BOSELECT		0x01		//遥控预置
#define BOOPERATE		0x02		//遥控执行
#define BOOPFAIL		0x04		//遥控失败,返回结果时使用

//遥控操作代码BOCode.Control
#define BODEL			0x20		//1:撤销;0:执行
#define BOCLOSE			0x40		//合闸操作
#define BOOPEN			0x80		//分闸操作,均为0时不区分,均为1时非法

//返回状态BOCode.Status
#define BORCOK			0x00		//请求已接受
#define BORCOVERTIME	0x01		//请求未被接受,原因:操作信息在选择操作超时后收到
#define BORCNOSELECT	0x02		//没有选择操作
#define	BORCERROR		0x03		//请求未被接受,原因:请求的格式有错误
#define BORCNONSUPPORT	0x04		//控制操作不为该点所支持
#define BORCOPERATING	0x05		//该点正在被操作
#define BORCBSPERROR	0x06		//控制硬件有问题

struct BOCode{		//遥控控制块
	INT8U	Control;
	INT8U	Status;
};

//数据库遥控点的记录(DBBOOPInfo.Flag)
#define BOOPSELECT		0x0001		//遥控预置
#define BOOPOPERATE		0x0002		//遥控执行
#define BOOPDEL			0x0004		//撤销

#define BOOPERROR		0x0008		//失败

//数据库遥控通知消息结构
struct DBBOOPInfo{
	INT16U	SuperID;
	INT16U	SID;	
	INT16U	DevID;
	INT16U	ID;
	INT16U	Status;
	INT16U	Flag;
};

#define DBBOOPINFOMAX		10		//最大十个存储

struct DBBOOPInfos{
	INT16U	Cur;
	INT16U	Max;
	struct DBBOOPInfo Info[DBBOOPINFOMAX];		
};


/*------------------------------------------------------------------*/
/*------------------------其它常量、结构定义------------------------*/
/*------------------------------------------------------------------*/
#define RESET_CLR		0xAA	//冷启动
#define RESET_RETAIN	0x55	//热启动
#define RESET_DD		0xFF	//不操作

__packed struct SysInfo_t{	//系统信息
	INT16U	AppID;
	INT8U	err[60];
};

#define LBUSE			0x01
#define LBNEXT			0x02

__packed struct LBInfo_t{		//录波
	INT16U	Flag;		//低字节已使用!表示存在哪些录波文件。
	INT16U	FDIndex;
	INT32U	Start;
	INT32U	Length;
	struct AbsTime_t Time;
};




/*------------------------------------------------------------------*/
/*----------------------------数据库结构----------------------------*/
/*------------------------------------------------------------------*/
struct DBInfo{		//数据库操作信息
	INT16U	DevID;
	INT16U	Type;
	INT16U	Start;		//起始地址
	INT16U	Num;
	INT16U	SuperID;	//仅对第二种逻辑库使用,不存在时等于DevID
};

#define STARTTYPE	0x8000	//相对起始地址标志

//读取数据库结构
struct SOE_Data{
	INT8U	CurPos;
	struct SOE_t Soe;
};
struct COS_Data{
	INT8U	CurPos;
	struct COS_t Cos;
};
struct SYS_INFO_Data{
	INT8U	CurPos;
	struct SysInfo_t SysInfo;
};

/*
struct SOE_Data{
	INT8U	CurPos;
	struct SOE_t Soe[BASE_NUM];
};
struct COS_Data{
	INT8U	CurPos;
	struct COS_t Cos[BASE_NUM];
};
struct SYS_INFO_Data{
	INT8U	CurPos;
	struct SysInfo_t SysInfo[BASE_NUM];
};
struct LB_Data{
	INT16U	wp;
	INT16U	rp;
	struct LB_t LbData[LBLIMIT]; //录波数据
	INT16U	para[3];
	INT16U	reserved[3];    //保留备用
};*/
	

/*------------------------------------------------------------------*/
/*--------------------------数据库函数声明--------------------------*/
/*------------------------------------------------------------------*/
BOOL DBWrite(INT8U *pData, struct DBInfo *pInfo);
BOOL DBRead(INT8U *pData, struct DBInfo *pInfo);
void DBOperate(INT8U *pData, struct DBInfo *pInfo);
void ErrorInfo(INT16U AppID, const char *Msg);
BOOL DBClear(struct DBInfo *pInfo);
INT8U DBCheck(struct DBInfo *pInfo);

BOOL DBCreate(void);
BOOL DBInit(void);
BOOL NVRAMInit(void);
BOOL DBReadSOE(INT8U *pData, struct DBInfo *pInfo);
BOOL DBReadCOS(INT8U *pData, struct DBInfo *pInfo);
void DBReadLB(INT8U *pData, struct DBInfo *pInfo);
void DBWriteDD(INT8U *pData, struct DBInfo *pInfo);
void DBWriteSOE(INT8U *pData, struct DBInfo *pInfo);
void DBWriteYC(INT8U *pData, struct DBInfo *pInfo);
void DBWriteYCDOT(INT8U *pData, struct DBInfo *pInfo);
void DBWriteYX(INT8U *pData, struct DBInfo *pInfo);
void DBWriteYXDOT(INT8U *pData, struct DBInfo *pInfo);
void DBWriteLB(INT8U *pData, struct DBInfo *pInfo);
INT32U* SetDBAddr(INT16U Type, INT16U Num);
INT32U* GetDBAddr(INT16U DevID, INT16U Type, BOOL Primary);
void DBOpBORESQ(struct BOCode *pCode, struct DBInfo *pInfo);
void DBOpBORESP(struct BOCode *pCode, struct DBInfo *pInfo);
INT16U GetPortofDB(INT16U DevID);
void DBMsgSend(struct DBMSGCheck *Msg, INT16U Flag);
/*------------------------------------------------------------------*/
/*--------------------------时钟函数声明----------------------------*/
/*------------------------------------------------------------------*/
void GetX1226Time(void);
void GetTime(void *Time, INT8U Format);
void SetTime(void *Time, INT8U Format);
INT32U TimeSysToAbs(struct SysTime_t *pSys);
void TimeAbsToSys(INT32U tt, struct SysTime_t *pSys);
void TimeChange(void* DTime, INT8U DFormat, void* STime, INT8U SFormat);
void TimeChangeAbs(void* DTime, INT8U DFormat, void* STime);
void TimeChangeToAbs(void* DTime, void* STime, INT8U SFormat);
void TimeChangeToSYS(void* DTime, void* STime, INT8U SFormat);

void KillProg(INT8U Clear, INT8U Boot, BOOL Flag);
/*------------------------------------------------------------------*/
/*--------------------------中断函数声明----------------------------*/
/*------------------------------------------------------------------*/
void sw_asm_irq_handler(void);
void fiq_asm_handler(void);
void timer_init(void);
void Pio_init(void);
void watchdog_init(void);
void OSTickISR(void);
void timer0_asm_irq_handler(void);
void timer1_asm_irq_handler(void);
void timer2_asm_irq_handler(void);
void time10mscall(void *ptmr,void *callback_arg);
void time100mscall(void *ptmr,void *callback_arg);
void time1scall(void *ptmr,void *callback_arg);

/*------------------------------------------------------------------*/
/*----------------------主程序专用函数声明--------------------------*/
/*------------------------------------------------------------------*/
//虚拟数据
#ifndef BOOT_PROG
#define DBVMANAGE	0x10
INT32U DBVCreate(INT32U Length);
BOOL DBVWrite(INT8U* pData, INT32U Addr, INT32U Offset, INT32U Length);
INT32U DBVRead(INT8U* pData, INT32U Addr, INT32U Offset, INT32U Length);
#endif

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -