#include <stdio.h>
#include <c6x.h>
#include "csl.h"
#include "csl_timer.h"
#include "csl_dat.h"
#include "BoardInit.h"
#include "math.h"
#include "Xieyi.h"
/***************************/
#define REFWIDTH 256 //参考图行数
#define REFHEIGHT 256 //参考图列数
/********************************************************************/
#pragma DATA_SECTION(pData,".inData") //pData中存放FPGA接收来的数据
#pragma DATA_SECTION(pData,4);
short pData[16];
short pREFMAP[REFWIDTH*REFHEIGHT]; //存放参考图
/*******************************************************************/
#pragma DATA_SECTION(GDONE,".outData") //得到FPGA输入的惯导1数据
#pragma DATA_ALIGN(GDONE,4) //四字节对齐方式
short GDONE[3]; //一帧惯导1口数据的有效字节存储区
/********************************************************************/
#pragma DATA_SECTION(JCY,".outData")
#pragma DATA_ALIGN(JCY,4)
short JCY[5]; //一帧计程仪数据的有效字节存储区
/********************************************************************/
#pragma DATA_SECTION(GDTWO,".outData")
#pragma DATA_ALIGN(GDTWO,4)
char GDTWO[13]; //一帧惯导2口数据的有效字节存储区
/*******************************************************************/
#pragma DATA_SECTION(REFMAP,".outData")
#pragma DATA_ALIGN(REFMAP,4)
short REFMAP[REFWIDTH*REFHEIGHT] //备用接口用来传输参考图
/******************************************************************/
int Interrupt_figure=0; //中断程序发生标志字
volatile Uint32 DataCopyOver;
volatile Uint32 Data_receive_over =1; //数据接收完标志
GUANDAOONE pGuandao1; //惯导1数据结构体
GUANDAOTWO pGuandao2; //惯导2 数据结构体
JICHENGYI pJChenYI; //计程仪结构体
/******************************************************************/
void DataIn();
main()
{
BoardInit(); //6713板初始化
int i;
if(pData[0]=='A1')&&(pData[1]=='A2')
{
for(i=0;i<3;i++)
{
GDONE[i]=pData[i+2]; //将去帧头后的惯导数据存入GDONE
}
pGuandao1.fupswingAngle=GDONE[0]; //航向角结构体
pGuandao1.fYawingAngle =GDONE[1]; //纵摇角结构体
pGuandao1.horizangle =GDONE[2]; //横摇角结构体
}
else
{
if(pData[0]=='A3')&&(pData[1]=='A4') //可以判断出计程仪的帧头
{
for(i=0;i<5;i++)
{
JCY[i]=pData[i+2];
}
pJChenYI.longtitude =JCY[0];
pJChenYI.latitude =JCY[1];
pJChenYI.EastVelocity =JCY[2];
pJChenYI.NorthVelocity =JCY[3];
pJChenYI.UpDownVelocity=JCY[4];
}
}
else
if(pData[0]=='$')&&(pData[1]=='V')&&(pData[2]=='D')&&(pData[3]='V')&&(pData[4]=='B')&&(pData[5]=='W')
{
for(i=0;i<13;i++)
{
GDTWO[i]=pData[i+6];
}
pGuandao2.fscupVelocity=GDTWO[0];
pGuandao2.fschVelocity =GDTWO[1];
pGuandao2.fhadupVelocity=GDTWO[3];
pGuandao2.fhadhVelocity =GDTWO[4];
pGuandao2.fWaterfrontHeight=GDTWO[5];
pGuandao2.fWaterbackHeight=GDTWO[6];
pGuandao2.fWaterleftHeight=GDTWO[7];
pGuandao2.fWaterrightHeight=GDTWO[8];
pGuandao2.fWateraverageHeight=GDTWO[9];
}
}
void DataIn()
{
while(Data_receive_over) //查询FPGA传送过来的数据是否接受完毕
;
}
//在中断服务程序5中接收FPGA传来的数据
interrupt void Baojie_ISR()
{
if(Interrupt_figure==1)
{
DataCopyOver = DAT_copy((Uint32 *)0xA0000000,pData, 200);
DAT_wait(DataCopyOver);
Data_receive_over = 0;
}
else
{
DataCopyOver= DAT_copy(Uint32 *)0xA0000000,(Uint32 *)0x80090000,200);
DAT_wait(DataCopyOver);
Data_receive_over =0;
}
评论6