📄 fpgadram.c
字号:
a=answer_fpga(0x99);
break;
case 0x9a:break;
case 0x9b:break;
case 0x9c:break;
case 0x9d:break;
case 0x9f:XBYTE[re_flagaddr]=0x87; //读取操作完成
//如果是从机,则改变阶段历时,阶段号,阶段时间
//非强制,非遥控状况下
if((re_control==0x00)&&((force_flag==0x00)||(force_flag==4))){
if((machine_flag==0x00)&&(XBYTE[start_addr+0xa002]==XBYTE[0x8009])&&(XBYTE[start_addr+0xa003]==XBYTE[0x800a])){
FarContrlLed= !FarContrlLed;
step_time=XBYTE[start_addr+0xa004];
now_step_key=XBYTE[start_addr+0xa005];
step_counter=XBYTE[start_addr+0xa006];
}
}
break;
case 0xc6://j=/*(XBYTE[address+1]-1)*/31*41; //方案 接受降级方案 写到方案32指定的空间
for(i=0;i<9;i++){
address++;
if(address>0xa7f0)address=0xa080;
} //提取有效数据
for(i=0;i<32;i++){
address++;
if(address>0xa7f0)address=0xa080;
// sch_step[i]=XBYTE[address];
}
XBYTE[re_flagaddr]=0x87; //读取操作完成
a=answer_fpga(0x96);
break;
case 0x82:XBYTE[re_flagaddr]=0x87;
while((XBYTE[0xa023]==0)&&(XBYTE[0xa024]==1)){}; //等待FGPA修改头尾
XBYTE[0xa023]=0x01; //CPU修改头尾
XBYTE[0xa024]=0X00;
data_address=(XBYTE[0XA021]<<8)+XBYTE[0XA022]+1; //首地址偏移量
data_address=(data_address&0x7ff);
address=data_address; //首地址偏移量
data_address=data_address+17; //应答数据长度14字节
if(data_address>0x7f0)data_address=data_address-0x7f0+0x80;
data_address--;
XBYTE[0XA021]=data_address>>8; //尾地址偏移量
XBYTE[0XA022]=data_address;
XBYTE[0XA023]=0X00; //CPU修改头尾结束
XBYTE[0XA024]=0X00;
tr_flagaddr=0xa030;
for(i=0;i<6;i++){
tr_flagaddr=tr_flagaddr+i*5;
if(XBYTE[tr_flagaddr]==0x87)break;
}
if(i==6){
return 1 ;
}
XBYTE[tr_flagaddr+1]=address>>8; //发送数据的首地址
XBYTE[tr_flagaddr+2]=address;
XBYTE[tr_flagaddr+3]=data_address>>8; //发送数据的尾地址
XBYTE[tr_flagaddr+4]=data_address;
address=address+0xa000;
if(address>0xa7f0)address=0xa080;
XBYTE[address]=0xc2;address++; //发送应答数据
if(address>0xa7f0)address=0xa080;
XBYTE[address]=0x10;address++; //最大输出通道数
if(address>0xa7f0)address=0xa080;
XBYTE[address]=0x20;address++;
if(address>0xa7f0)address=0xa080;
XBYTE[address]=0x20;address++;
if(address>0xa7f0)address=0xa080;
XBYTE[address]=0x20;address++;
if(address>0xa7f0)address=0xa080;
XBYTE[address]=0x20;address++;
if(address>0xa7f0)address=0xa080;
XBYTE[address]=0x18;address++;
if(address>0xa7f0)address=0xa080;
XBYTE[address]=XBYTE[0X72E2];address++; //开机时间小时
if(address>0xa7f0)address=0xa080;
XBYTE[address]=XBYTE[0X72E3];address++; //开机时间分钟
if(address>0xa7f0)address=0xa080;
XBYTE[address]=XBYTE[0X72E4];address++; //关机时间小时
if(address>0xa7f0)address=0xa080;
XBYTE[address]=XBYTE[0X72E5];address++; //关机时间分钟
if(address>0xa7f0)address=0xa080;
XBYTE[address]=XBYTE[0X72E6];address++; //关机后状态
if(address>0xa7f0)address=0xa080;
XBYTE[address]=XBYTE[0X8000];address++; //路口编号高位地址
if(address>0xa7f0)address=0xa080;
XBYTE[address]=XBYTE[0X8001];address++; //路口编号低位地址
if(address>0xa7f0)address=0xa080;
XBYTE[address]=XBYTE[0X8009];address++; //主机路口编号高位地址
if(address>0xa7f0)address=0xa080;
XBYTE[address]=XBYTE[0X800a];address++; //主机路口编号低位地址
if(address>0xa7f0)address=0xa080;
XBYTE[address]=XBYTE[0X8008];address++; //主从机标志 1主机,其它从机
XBYTE[tr_flagaddr]=0x01;
break;
case 0x83:XBYTE[re_flagaddr]=0x87;
while((XBYTE[0xa023]==0)&&(XBYTE[0xa024]==1)){}; //等待FGPA修改头尾
XBYTE[0xa023]=0x01; //CPU修改头尾
XBYTE[0xa024]=0X00;
data_address=(XBYTE[0XA021]<<8)+XBYTE[0XA022]+1;
data_address=(data_address&0x7ff);
address=data_address;
data_address=data_address+7; //应答数据长度7字节
if(data_address>0x7f0)data_address=data_address-0x7f0+0x80;
data_address--;
XBYTE[0XA021]=data_address>>8; //
XBYTE[0XA022]=data_address;
XBYTE[0XA023]=0X00; //CPU修改头尾结束
XBYTE[0XA024]=0X00;
tr_flagaddr=0xa030;
for(i=0;i<6;i++){
tr_flagaddr=tr_flagaddr+i*5;
if(XBYTE[tr_flagaddr]==0x87)break;
}
if(i==6)return 1 ;
XBYTE[tr_flagaddr+1]=address>>8; //发送数据的首地址
XBYTE[tr_flagaddr+2]=address;
XBYTE[tr_flagaddr+3]=data_address>>8; //发送数据的尾地址
XBYTE[tr_flagaddr+4]=data_address;
address=address+0xa000;
if(address>0xa7f0)address=0xa080;
XBYTE[address]=0xc3;address++;
if(address>0xa7f0)address=0xa080; //发送应答数据
XBYTE[address]=XBYTE[0XC009];address++;
if(address>0xa7f0)address=0xa080;
XBYTE[address]=XBYTE[0XC008];address++;
if(address>0xa7f0)address=0xa080;
XBYTE[address]=XBYTE[0XC007];address++;
if(address>0xa7f0)address=0xa080;
XBYTE[address]=XBYTE[0XC004];address++;
if(address>0xa7f0)address=0xa080;
XBYTE[address]=XBYTE[0XC002];address++;
if(address>0xa7f0)address=0xa080;
XBYTE[address]=XBYTE[0XC000];address++;
if(address>0xa7f0)address=0xa080;
XBYTE[address]=XBYTE[0XC006];
XBYTE[tr_flagaddr]=0x01;
break;
case 0x84:XBYTE[re_flagaddr]=0x87;a=answer_fpga(0x84);break;
case 0x85:XBYTE[re_flagaddr]=0x87;a=answer_fpga(0x85);break;
case 0x86:XBYTE[re_flagaddr]=0x87;a=answer_fpga(0x86);break;
case 0x87:XBYTE[re_flagaddr]=0x87;a=answer_fpga(0x87);break;
case 0x88:XBYTE[re_flagaddr]=0x87;a=answer_fpga(0x88);break;
case 0x89:XBYTE[re_flagaddr]=0x87;a=answer_fpga(0x89);break;
case 0x8a:XBYTE[re_flagaddr]=0x87;a=answer_fpga(0x8a);break;
case 0x8b:XBYTE[re_flagaddr]=0x87;a=answer_fpga(0x8b);break;
case 0x8c:XBYTE[re_flagaddr]=0x87;a=answer_fpga(0x8c);break;
case 0x8d:XBYTE[re_flagaddr]=0x87;a=answer_fpga(0x8d);break;
case 0x8e:XBYTE[re_flagaddr]=0x87;a=answer_fpga(0x8e);break;
default:break;
}
// return 1;
}
//address代表标志地址 address+1
deal_fpgadram() using 1
{
unsigned char i=0;
unsigned char flag=0;
extern unsigned char xdata flagg;
//iiiii=0;
for(iiiii=0;iiiii<6;iiiii++){
re_flagaddr=0XA050+iiiii*5;
flagi=XBYTE[re_flagaddr];
if((flagi==1)||(flagi==2)){//flagi>0&&flagi<5){
start_addr=XBYTE[re_flagaddr+1]; //偏移地址
start_addr=(start_addr<<8);
start_addr=start_addr+XBYTE[re_flagaddr+2];
// start_addr=start_addr+0xa000;
// start_addr=(XBYTE[re_flagaddr+1]<<8)+XBYTE[re_flagaddr+2];
//开始地址
// end_addr =(XBYTE[re_flagaddr+3]<<8)+XBYTE[re_flagaddr+4]; //结束地址
end_addr=XBYTE[re_flagaddr+3];
end_addr=end_addr<<8;
end_addr=end_addr+ XBYTE[re_flagaddr+4];
// end_addr=end_addr+0xa000;
address=start_addr+0xa000; //实际开始地址
data_address=start_addr; //偏移开始地址
flagg=XBYTE[start_addr+0xa000];
//i=fpga_dram_data(flagg); //接收fpga送来的数据
fpga_dram_data(flagg);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -