<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 實(shí)現單片機與FPGA的雙向并口通信

實(shí)現單片機與FPGA的雙向并口通信

作者: 時(shí)間:2016-11-26 來(lái)源:網(wǎng)絡(luò ) 收藏

那么下面我們開(kāi)始講解一下相應的程序語(yǔ)言吧。我用的單片機芯片是加強型的51單片機C8051F020,它都外擴了一些功能,如AD、DA、溫度傳感器,但是核心還是沒(méi)有改變的。要與FPGA進(jìn)行通信,我用Quartus II的VHDL語(yǔ)言進(jìn)行編程。也就是說(shuō),單片機與FPGA都要進(jìn)行相應的端口設置。

先講解一下FPGA方面的編程,如圖5,這是在Quartus II界面里的圖形

其中端口含義如下:in_num[15..0]——代表要從FPGA向單片機傳輸的數據總線(xiàn)

out_num[15..0]——代表要從單片機傳送給FPGA的數據總線(xiàn),它與in_num[15..0]在直
接與其它的端口(軟件界面里面)直接與其它端口連接

Mcu[15..0]——代表硬件上要與單片機連接的端口。

clk---則是時(shí)鐘信號,

en--使能信號,當它為高的時(shí)候,則單片機向FPGA傳輸數據,否則傳輸方向相反。

對應的VHDL放言如下:

library ieee;
use ieee.std_logic_1164.all;

entity interface2 is
port(Mcu:inout std_logic_vector(15 downto 0);

in_num:in std_logic_vector(15 downto 0);

out_Num:out std_logic_vector(15 downto 0);

clk:in std_logic;
en:in std_logic);
end interface2;

architecture rtl of interface2 is
signal a,b:std_logic_vector(15 downto 0);
begin
common: process(clk)
begin
if(clkevent and clk=1)then
a<=in_num;
out_num<=b;
end if;
end process;

Wri_Read:process(en,Mcu)
begin
if(en=1)then

Mcu<=(others=>Z);--

b<=Mcu;
else
Mcu<=a;--當en=0的時(shí)候,就作為輸出端口
end if;
end process;
end rtl;

這里有幾個(gè)注意點(diǎn):一、首先最好只用一個(gè)雙向口,也就是我這里的Mcu[15..0],另外一個(gè)“雙向口”則等效成一個(gè)輸入口與一個(gè)輸出口,也就是這里in_num[15..0]與out_num[15..0].否則會(huì )有麻煩的。 因為如果不這么做,那么在Quartus里面與這個(gè)雙向口相連的端口必須都要設成雙向口,這樣的話(huà),嘿嘿...

二、與那個(gè)Mcu[15..0]相聯(lián)系的端口必須是雙向口的,具體圖解如下。

最后,進(jìn)行單片機方面的設置了,其中最重要的就是端口初始化了。如下:

//這個(gè)是FPGA要求的,當從FPGA里讀取數據時(shí)所要滿(mǎn)足的條件
//眾所周知,在雙向口的設置中,對于端口的輸入與輸出的設置是最重要的
//輸入時(shí)一定要記得把雙向口的輸出設置為高阻狀態(tài),在單片機中要記得設置為漏極開(kāi)路
//當輸出要記得把單片機設置為推挽輸出,否則設置為漏極開(kāi)路的話(huà)是達不到效果 的
voidReadData(void)
{
en=0;//這部分要與fpga聯(lián)合起來(lái)設置P1MDOUT=0x00;//此時(shí)單片機設置為漏極開(kāi)路,在對端口寫(xiě)1時(shí)才能呈現高阻狀態(tài)
P74OUT=0x00;//這里我用的單片機是用P1口與P4口用來(lái)傳輸數據的
P1=0xff;//對應端口寫(xiě)1,設置成高阻狀態(tài)
P4=0xff;//對應端口寫(xiě)1,設置成高阻狀態(tài)
}

//這個(gè)也是FPGA要求的,當往FPGA里寫(xiě)入數據時(shí)所要滿(mǎn)足的條件
voidWriteData(void)
{
en=1;//當en=1時(shí),我要向fpga里面寫(xiě)數據了,
P1MDOUT=0xff;//寫(xiě)數據的時(shí)候,別忘記把對應的端口改成用推挽方式
P74OUT=0x03;//不用的引腳設成漏極開(kāi)路的狀態(tài).當輸出的方式時(shí)才把它設為推挽輸出
}

好了,到現在為止,我已經(jīng)把我知道都寫(xiě)在這里了。如果認為我這篇文章對你有幫助的話(huà),還請多多支持?;刭N是一種美德。


上一頁(yè) 1 2 下一頁(yè)

關(guān)鍵詞: 單片機FPGA雙向并口通

評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>