|
|||||||||||
| 技術交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術 | 電源技術 | 測控之家 | EMC技術 | ARM技術 | EDA技術 | PCB技術 | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術 | 新手園地 | 單 片 機 | DSP技術 | MCU技術 | IC 設計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
請教一個單片機讀寫FPGA的問題 |
| 作者:2_1_I_C 欄目:EDA技術 |
小弟剛剛接觸FPGA, 在書上看到一個單片機讀寫FPGA的程序,單片機和FPGA的程序都有,但就是沒有結(jié)果,請各位幫我看看是那兒的問題。 FPGA接八個按鍵、八個二極管,單片機讀FPGA的按鍵狀態(tài),然后將數(shù)據(jù)寫到FPGA的二極管。 FPGA的程序 `define key_addr 16'hff00 `define led_addr 16'hff01 `define no_rw 2'h0 `define key_rw 2'h1 `define led_rw 2'h2 MODULE wr(MCU_data,MCU_addr,keyin,led,WR,RD,ALE,int); input[7:0] MCU_addr; inout[7:0] MCU_data; input[7:0] keyin; OUTPUT[7:0] led; OUTPUT int; input WR,RD,ALE; reg[1:0] addr_sel; reg[7:0] led_reg; reg[7:0] MCU_data_reg; reg[7:0] key_status; reg int_reg; always@(negedge ALE) begin if({MCU_addr,MCU_data}==`key_addr) addr_sel=`key_rw; else if({MCU_addr,MCU_data}==`led_addr) addr_sel=`led_rw; else addr_sel=`no_rw; end always@(keyin) begin if(keyin==key_status) int_reg=1; else int_reg=0; end always@(negedge WR) begin if(addr_sel==`led_rw) led_reg=MCU_data; end always@(negedge RD) begin if(addr_sel==`led_rw) MCU_data_reg=led_reg; else if(addr_sel==`key_rw) begin MCU_data_reg=keyin; key_status=keyin; end end assign led=led_reg; assign int=int_reg; assign MCU_data=((RD==1'b1)||(addr_sel==`no_rw)) ? 8'hzz : MCU_data_reg ; endMODULE 單片機的程序 #include #define KEY_WR 0xff00 #define LED_WR 0xff01 unsigned CHAR led_buf; void getkey(unsigned CHAR keyin) { SWITCH(keyin) { case 0xfe: led_buf=0xfe; break; case 0xfd: led_buf=0xfc; break; case 0xfb: led_buf=0xf8; break; case 0xf7: led_buf=0xf0; break; case 0xef: led_buf=0xe0; break; case 0xdf: led_buf=0xc0; break; case 0xbf: led_buf=0x80; break; case 0x7f: led_buf=0x00; break; default : break; } } void wr_cpld(unsigned int ADDR,unsigned CHAR DAT) { *((unsigned CHAR xdata *)ADDR)=DAT; } unsigned CHAR rd_cpld(unsigned CHAR ADDR) { return *((unsigned CHAR xdata*) ADDR); } main() { unsigned CHAR key_buf,buffer; key_buf=0xff; led_buf=0xff; while(1) { buffer=rd_cpld(KEY_WR); if(!(key_buf==buffer)&&(buffer!=0xff)) { key_buf=buffer; getkey(key_buf); wr_cpld(LED_WR,led_buf); } } } 結(jié)果是FPGA的二極管什么都沒顯示 |
| 2樓: | >>參與討論 |
| 作者: 2_1_I_C 于 2005/8/21 16:45:00 發(fā)布:
沒人回復,自己回了. 我等! |
|
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |