📄 tsystem.c
字号:
//
// File name =TSYSTEM.CPP
//设计 何风涛
#include "class.h"
#include "classext.h"
void InitCanBus(int CanPort)
{
//DCL CAN_BAUD0(9) BYTE PUB CST(0BFH,0B1H,98H,89H,84H,81H,80H,80H,80H);
//DCL CAN_BAUD1(9) BYTE PUB CST(07FH,02FH,2FH,7FH,7FH,7FH,7FH,2FH,25H);
// 0--- (1+8+16)*(63+1)*0.1us = 160.00us = 6.25K BP
// 1--- (1+3+16)*(49+1)*0.1us = 100.00us = 10K BP
// 2--- (1+3+16)*(24+1)*0.1us = 50.00us = 20K BP
// 3--- (1+8+16)*( 9+1)*0.1us = 25.00us = 40K BP
// 4--- (1+8+16)*( 4+1)*0.1us = 12.50us = 80K BP
// 5--- (1+8+16)*( 1+1)*0.1us = 5.00us = 200K BP
// 6--- (1+8+16)*( 0+1)*0.1us = 2.50us = 400K BP
// 7--- (1+3+16)*( 0+1)*0.1us = 2.00us = 500K BP
// 8--- (1+3+ 6)*( 0+1)*0.1us = 1.00us = 1000K BP
// CAN_BP:缺省为二分频方式:T_OSC=2/20M=0.1us
// T_SCL=(BRP+1)*T_OSC;
// T_SYNCSEG=1*T_SCL;
// T_TSEG1=(TSEG1+1)*T_SCL;
// T_TSEG2=(TSEG2+1)*T_SCL;
// T_BIT=T_SYNCSEG+T_TSEG1+T_TSEG2;
switch(CanPort)
{
case 0x00:disable();
setbit(&p1_reg,5); /* P1.5作为输入口必须先置 1 */
clrbit(&p1_dir,5); /* P1.5=outport */
clrbit(&p1_mode,5); /* P1.5=I/O */
setbit(&p1_reg, 5); /* P1.5作为输入口必须先置 1 */
setbit(&p1_dir, 5); /* P1.5=inport */
setbit(&p1_mode,5); /* P1.5=EPA5 */
t1control=COUNT_ENABLE|COUNT_UP|CLOCK_INTERNAL|DIVIDE_BY_1;
epa5_con=0;
epa5_con=CAPTURE|DOWN_EDGE|USE_TIMER1;
int_mask=int_mask | EPA5_INT_BIT;
epa_mask=epa_mask | EPA5_EPAMASK_BIT;
CAN0_CTL=RESET_REQUEST; /* 01 */
CAN0_CTL=RESET_REQUEST; /* 01 */
CAN0_AMR=0xFF;
CAN0_ACR=0x03; /* 节点号 */
CAN0_CDR=0x04;//FCLK/10
//000: Fclk/2
//001: Fclk/4
//010: Fclk/6
//011: Fclk/8
//100: Fclk/10
//101: Fclk/12
//110: Fclk/14
//111: Fclk
switch(comset[0].speed)
{
case 10://6.25K
CAN0_BTR0=0xBF; /* cell's baud rate */
CAN0_BTR1=0x7F;
break;
case 11://10K
CAN0_BTR0=0xB1; /* cell's baud rate */
CAN0_BTR1=0x2F;
break;
case 12://20K
CAN0_BTR0=0x98; /* cell's baud rate */
CAN0_BTR1=0x2F;
break;
case 13://40K
CAN0_BTR0=0x89; /* cell's baud rate */
CAN0_BTR1=0x7F;
break;
case 14://80K
CAN0_BTR0=0x84; /* cell's baud rate */
CAN0_BTR1=0x7F;
break;
case 15://200K
CAN0_BTR0=0x81; /* cell's baud rate */
CAN0_BTR1=0x7F;
break;
case 16://400K
CAN0_BTR0=0x80; /* cell's baud rate */
CAN0_BTR1=0x7F;
break;
case 17://800K
CAN0_BTR0=0x80; /* cell's baud rate */
CAN0_BTR1=0x2F;
break;
case 18://1000K
CAN0_BTR0=0x80; /* cell's baud rate */
CAN0_BTR1=0x25;
break;
default://200K
CAN0_BTR0=0x81; /* cell's baud rate */
CAN0_BTR1=0x7F;
break;
}
CAN0_OCR=CAN_OUT_CTRL; /* * 0FAH */
CAN0_CTL=RESET_NULL;
CAN0_CTL=CAN_CTRL_RIE;
CAN0_CMD=RCAN_RELEASE;
break;
case 0x01:disable();
setbit(&p1_reg, 6); /* P1.6作为输入口必须先置 1 */
clrbit(&p1_dir, 6); /* P1.6=outport */
clrbit(&p1_mode,6); /* P1.6=I/O */
setbit(&p1_reg, 6); /* P1.6作为输入口必须先置 1 */
setbit(&p1_dir, 6); /* P1.6=inport */
setbit(&p1_mode,6); /* P1.6=EPA6 */
t1control=COUNT_ENABLE|COUNT_UP|CLOCK_INTERNAL|DIVIDE_BY_1;
epa6_con=0;
epa6_con=CAPTURE|DOWN_EDGE|USE_TIMER1;
int_mask=int_mask | EPA6_INT_BIT;
epa_mask=epa_mask | EPA6_EPAMASK_BIT;
CAN1_CTL=RESET_REQUEST; /* 01 */
CAN1_CTL=RESET_REQUEST; /* 01 */
CAN1_AMR=0xFF;
CAN1_ACR=0x03; /* 节点号 */
CAN1_CDR=0x04;//FCLK/10
//000: Fclk/2
//001: Fclk/4
//010: Fclk/6
//011: Fclk/8
//100: Fclk/10
//101: Fclk/12
//110: Fclk/14
//111: Fclk
switch(comset[1].speed)
{
case 10://6.25K
CAN1_BTR0=0xBF; /* cell's baud rate */
CAN1_BTR1=0x7F;
break;
case 11://10K
CAN1_BTR0=0xB1; /* cell's baud rate */
CAN1_BTR1=0x2F;
break;
case 12://20K
CAN1_BTR0=0x98; /* cell's baud rate */
CAN1_BTR1=0x2F;
break;
case 13://40K
CAN1_BTR0=0x89; /* cell's baud rate */
CAN1_BTR1=0x7F;
break;
case 14://80K
CAN1_BTR0=0x84; /* cell's baud rate */
CAN1_BTR1=0x7F;
break;
case 15://200K
CAN1_BTR0=0x81; /* cell's baud rate */
CAN1_BTR1=0x7F;
break;
case 16://400K
CAN1_BTR0=0x80; /* cell's baud rate */
CAN1_BTR1=0x7F;
break;
case 17://800K
CAN1_BTR0=0x80; /* cell's baud rate */
CAN1_BTR1=0x2F;
break;
case 18://1000K
CAN1_BTR0=0x80; /* cell's baud rate */
CAN1_BTR1=0x25;
break;
default://200K
CAN1_BTR0=0x81; /* cell's baud rate */
CAN1_BTR1=0x7F;
break;
}
CAN1_OCR=CAN_OUT_CTRL; /* * 0FAH */
CAN1_CTL=RESET_NULL;
CAN1_CTL=CAN_CTRL_RIE;
break;
default:break;
}
}
void InitAD7865(void)
{
/* 625*20(M)=0x30D4 625*20=12500 */
int i;
outport(ADFREQ_COEF, 6250);
outport(AD7874_CMD, 0x0F);
disable();
DataBusOut(BSQ_BOARD_1_573, 0x00);
DataBusOut(BSQ_BOARD_2_573, 0x00);
DataBusOut(BSQ_BOARD_3_573, 0x00);
DataBusOut(BSQ_BOARD_4_573, 0x00);
DataBusOut(BSQ_BOARD_5_573, 0x00);
DataBusOut(BSQ_BOARD_6_573, 0x00);
DataBusOut(BSQ_BOARD_7_573, 0x00);
DataBusOut(BSQ_BOARD_8_573, 0x00);
pVar->freqdivsum=3125;/* 200ns *3125=625us */
Init_EPA0_Freq(3125);
Pass=0;
Yc_Sample=0;
//-----初始化采样链表--------------------------------------------------------------------------------------------
headSampleTable=&SampleTable[0];
nextSampleTable=headSampleTable;
memset(headSampleTable,0,sizeof(struct SampleTableStruct)*MAXSAMPLECOUNT);
pVar->headADBUF=ADBUF0;
pVar->ADBUF[0] =ADBUF0;
pVar->ADBUF[1] =ADBUF1;
pVar->ADBUF[2] =ADBUF2;
pVar->ADBUF[3] =ADBUF3;
pVar->ADBUF[4] =ADBUF4;
pVar->ADBUF[5] =ADBUF5;
pVar->ADBUF[6] =ADBUF6;
pVar->ADBUF[7] =ADBUF7;
pVar->ADBUF[8] =ADBUF8;
pVar->ADBUF[9] =ADBUF9;
pVar->ADBUF[10]=ADBUF10;
pVar->ADBUF[11]=ADBUF11;
pVar->ADBUF[12]=ADBUF12;
pVar->ADBUF[13]=ADBUF13;
pVar->ADBUF[14]=ADBUF14;
pVar->ADBUF[15]=ADBUF15;
}
void InitSampleCycle(int cycle)
{
SampleTable[cycle].Board1_Addr[0]=Board1_Addr[cycle];
SampleTable[cycle].Board1_Data[0]=Board1_Data[cycle];
SampleTable[cycle].Board2_Addr[0]=Board2_Addr[cycle];
SampleTable[cycle].Board2_Data[0]=Board2_Data[cycle];
SampleTable[cycle].Flag=0;
SampleTable[cycle].SLimit=SLimit[cycle];
SampleTable[cycle].BSQ[0] =Bsq0[cycle];
SampleTable[cycle].BSQ[1] =Bsq1[cycle];
SampleTable[cycle].BSQ[2] =Bsq2[cycle];
SampleTable[cycle].BSQ[3] =Bsq3[cycle];
SampleTable[cycle].FreqFlag=FreqFlag[cycle];
}
void InitSampleTable(void)
{
unsigned int i,j,k,it;
unsigned char u1,u2,u3,i1,i2,i3,ub;
for(i=1;i<MAXSAMPLECOUNT;i++)
{
nextSampleTable->Link=&SampleTable[i];
nextSampleTable=nextSampleTable->Link;
}
nextSampleTable->Link=NULL;
pVar->SampleCycle=0; /* 采样周期 */
j=mrnum;
if(j>7) j=7; //模入板个数
switch(j)
{
case 0x01:
case 0x02:for(i=0;i<4;i++)
{
InitSampleCycle(i);
pVar->SampleCycle++; /* 采样周期 */
}
break;
case 0x03:for(i=0;i<8;i++)
{
InitSampleCycle(i);
pVar->SampleCycle++; /* 采样周期 */
}
break;
case 0x04:for(i=0;i<12;i++)
{
InitSampleCycle(i);
pVar->SampleCycle++; /* 采样周期 */
}
break;
case 0x05:for(i=0;i<16;i++)
{
InitSampleCycle(i);
pVar->SampleCycle++; /* 采样周期 */
}
break;
case 0x06:for(i=0;i<20;i++)
{
InitSampleCycle(i);
pVar->SampleCycle++; /* 采样周期 */
}
break;
case 0x07:for(i=0;i<24;i++)
{
InitSampleCycle(i);
pVar->SampleCycle++; /* 采样周期 */
}
break;
default: pVar->SampleCycle=0; /* 采样周期 */
break;
}
j=0;
pVar->lnsum=0;
for(i=0;i<MAXLINENUM;i++)
{
it=0;
for(j=0;j<6;j++)
{
if(LineSetdata[i][j]!=0) it=1;
}
if(it!=0)
{
SampleTable[pVar->SampleCycle].LineNo=pVar->lnsum;
pVar->lnsum++;
u1=LineSetdata[i][0]; /* U1 第 1 节拍 */
if(u1>56) u1=0;
SampleTable[pVar->SampleCycle].BSQ[0]=u1;/* U1 */
SampleTable[pVar->SampleCycle].Board1_Addr[0]=BsqAddr[u1];
SampleTable[pVar->SampleCycle].Board1_Data[0]=BsqData[u1];
i1=LineSetdata[i][1]; /* I1 第 1 节拍 */
if(i1>56) i1=0;
SampleTable[pVar->SampleCycle].BSQ[1]=i1; /* I1 */
SampleTable[pVar->SampleCycle].Board2_Addr[0]=BsqAddr[i1];
SampleTable[pVar->SampleCycle].Board2_Data[0]=BsqData[i1];
u2=LineSetdata[i][2]; /* U2 第 2 节拍 */
if(u2>56) u2=0;
SampleTable[pVar->SampleCycle].BSQ[2]=u2;
SampleTable[pVar->SampleCycle].Board1_Addr[1]=BsqAddr[u2];
SampleTable[pVar->SampleCycle].Board1_Data[1]=BsqData[u2];
i2=LineSetdata[i][3]; /* I2 第 2 节拍 */
if(i2>56) i2=0;
SampleTable[pVar->SampleCycle].BSQ[3]=i2;
SampleTable[pVar->SampleCycle].Board1_Addr[1]=BsqAddr[i2];
SampleTable[pVar->SampleCycle].Board1_Data[1]=BsqData[i2];
u3=LineSetdata[i][4]; /* U3 第 3 节拍 */
if(u3>56) u3=0;
SampleTable[pVar->SampleCycle].BSQ[4] =u3;/* U3 */
SampleTable[pVar->SampleCycle].Board1_Addr[2]=BsqAddr[u3];
SampleTable[pVar->SampleCycle].Board1_Data[2]=BsqData[u3];
i3=LineSetdata[i][5]; /* I3 第 3 节拍 */
if(i3>56) i3=0;
SampleTable[pVar->SampleCycle].BSQ[5]=i3;/* I3 */
SampleTable[pVar->SampleCycle].Board2_Addr[2]=BsqAddr[i3];
SampleTable[pVar->SampleCycle].Board2_Data[2]=BsqData[i3];
if((u3!=0)||(i3!=0))
{//三表法
}else
{//二表法
}
if(LINETYPE[i]!=0)
{//U=U+I
SampleTable[pVar->SampleCycle].Flag=2;//二表法 一周波采样
}else
{//P=U*I
SampleTable[pVar->SampleCycle].Flag=1;//二表法 一周波采样 计算功率
}
SampleTable[pVar->SampleCycle].SLimit=32*4+4;
pVar->SampleCycle++;
}else break;
}
if(pVar->SampleCycle!=0) /* 采样周期 */
{
SampleTable[pVar->SampleCycle].Link=NULL;
SampleTable[pVar->SampleCycle-1].Link=NULL;
headSampleTable=&SampleTable[0];
nextSampleTable=headSampleTable;
SetFirstChan(headSampleTable);//电子开关切换到下一条线路
}else
{
SampleTable[pVar->SampleCycle].Link=NULL;
headSampleTable=NULL;
nextSampleTable=headSampleTable;
}
MaxLine=pVar->lnsum;
}
unsigned char InitAllVar(void)
{
union WTEMP_ST wtmp;
disable();
disable_pts();
wsr = 0; // Use SFR without suffix
// for(WORK=0;WORK<10;WORK++)
// {
// for(WTMP=0;WTMP<10000;WTMP++)
// {//WAIT PLD
// rst_wdog();
// }
// }
outportb(PIO_A_CMD, 0x00); /* input 数据总线 */
outportb(PIO_B_CMD, 0xFF); /* output 地址总线 */
outportb(PIO_B_DAT, 0xFF); /* 清地址总线 */
outportb(PIO_A_CMD, 0xFF); /* output 数据总线 */
outportb(PIO_C_CMD, 0xFF); /* output */
outportb(PIO_D_CMD, 0xFF); /* output */
outportb(PTC_A_CMD, 0xFF); /* output */
outportb(PTC_B_CMD, 0xFF); /* output */
outportb(KEYCONTROL, 0xFF); /* output */
outportb(KEYDATA, 0xff); /* 1 */
outportb(KEYCONTROL, 0x00); /* input */
DataBusOut(DY_BOARD_1_573, 0x55);
InitYk();
pVar=(struct AllVarStruct FARDATA *)malloc(sizeof(struct AllVarStruct));
if(pVar==NULL) return(FALSE);
memset(pVar, 0,sizeof(struct AllVarStruct));
// memset(LNLIB,0,sizeof(struct LNTYPE)*MAXLINENUM);
pVar->ycnum=32;
pVar->dcnum=mrnum*8;
pVar->jcnum=mrnum*8;
pVar->maxyxnum=48;
pVar->maxymnum=48;
// pVar->maxywnum=48;
// pVar->maxyknum=32;
pVar->action=NOUSE;
pVar->MenuMode=FACE_MENU;
// pVar->displayline=12;// 12 条 线 路
pVar->Lcd_BG_Count=30000;
pVar->LcdBCount=64;
wtmp.B.Low=Byte_Read(0);
wtmp.B.High=Byte_Read(1);
pVar->ResetSum=wtmp.Word;
return(TRUE);
}
void CreateTask(void)
{
CreateATask(DisplayTaskNo,10,NULL,Display,0xff,0xff);//创建Display 任务 每隔190毫秒 执行一次
SetTimer(DisplayTaskNo,100);
CreateATask(XmScanTaskNo, 10,NULL,XmScan,0xff,0xff); //创建SCANKR 任务
SetTimer(XmScanTaskNo,10);
CreateATask(YcCalcTaskNo, 10,NULL,YcCalc,0xff,0xff); //创建YcCalc 任务
SetTimer(YcCalcTaskNo,100);
CreateATask(YkTaskNo, 10,NULL,YkTask,0xff,0xff); //创建YkTask 任务
SetTimer(YkTaskNo,0);
CreateATask(DbaseTaskNo,10,NULL,DbaseTask,0xff,0xff);//创建DbaseTask 任务
SetTimer(DbaseTaskNo,20);
CreateATask(ComDeviceTaskNo,10,NULL,COM_Device_Task,0xff,0xff);
SetTimer(ComDeviceTaskNo,1);
}
void InitSysPara(void) // 初始化系统参数
{
int i=0,j=0,k;
register unsigned char ch;
unsigned int addr,data;
unsigned char chh;
disable();
wsr = 0; // Use SFR without suffix
int_pending=0;
int_pend1=0;
int_mask1=0;
int_mask=0x00;
epa_mask=0;
epa_mask1=0;
ptssel=0;
epa6_con=0;
epa0_con=0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -