?? 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 + -