如圖4-3所示,程序的啟動(dòng)流程為:
1. 啟動(dòng)傳輸時(shí)序:
當(dāng)SCK 時(shí)鐘高電平時(shí)DATA 翻轉(zhuǎn)為低電平,緊接著SCK 變?yōu)榈碗娖剑S后是在SCK 時(shí)鐘高電平時(shí)DATA 翻轉(zhuǎn)為高電平。
2.測(cè)量時(shí)序及數(shù)據(jù)讀取時(shí)序:發(fā)布一組測(cè)量命令后,控制器要等待測(cè)量結(jié)束。這個(gè)過(guò)程需要大約55ms,對(duì)應(yīng)12bit 測(cè)量。SHTxx 通過(guò)下拉DATA 至低電平并進(jìn)入空閑模式,表示測(cè)量的結(jié)束??刂破髟谠俅斡|發(fā)SCK 時(shí)鐘前,必須等待這個(gè)“數(shù)據(jù)備妥”信號(hào)來(lái)讀出數(shù)據(jù)。檢測(cè)數(shù)據(jù)可以先被存儲(chǔ),這樣控制器可以繼續(xù)執(zhí)行其它任務(wù)在需要時(shí)再讀出數(shù)據(jù)。
4.2.2 接口模塊編程實(shí)現(xiàn)
A.接口定義:?jiǎn)蜗虻?SCK,COMMAND 的 STD_LOGI C 定義,以及 DATA 串行雙向接口的定義,其中 COMMAND 為 8 位命令位(00 0 地址位+5 位命令位)
B.由于流程為順序時(shí)序則將整個(gè)流程用 PROCESS.
C. DATA 三態(tài)門(mén)用于數(shù)據(jù)的讀取。DATA 在SCK 時(shí)鐘下降沿之后改變狀態(tài),并僅在SCK 時(shí)鐘上升沿有效。數(shù)據(jù)傳輸期間,在SCK 時(shí)鐘高電平時(shí),DATA必須保持穩(wěn)定。為避免信號(hào)沖突,微處理器應(yīng)驅(qū)動(dòng)DATA 在低電平。即:
data1 《= (others =》 ‘0’);
IF(sck‘event AND sck=’1‘)THEN
data1 《= d; --Data三態(tài)門(mén)
END IF;
D. 啟動(dòng)傳輸:當(dāng)SCK 時(shí)鐘高電平時(shí)DATA 翻轉(zhuǎn)為低電平,緊接著SCK 變?yōu)榈?span style="text-indent: 2em; font-size: 12px;">電平,隨后是在SCK 時(shí)鐘高電平時(shí)DATA 翻轉(zhuǎn)為高電平。即:
WAIT UNTIL sck=’1‘;
data1 《= NOT d;
WAIT UNTIL sck=’0‘
data1 《= d;
E.測(cè)量時(shí)序:
c 《= ’command‘;
WAIT ON sck UNTIL (sck’event AND sck = ‘1’) FOR 55 ms; --測(cè)量數(shù)據(jù)
F.數(shù)據(jù)傳輸:
IF(c=‘00000011’)
a《=data; --數(shù)據(jù)傳輸
ELSIF(c=‘00000101’)
b《=data;
END IF;
G.數(shù)據(jù)存儲(chǔ):該程序是用于傳感器對(duì)測(cè)量完妥的數(shù)據(jù)進(jìn)行暫時(shí)的存儲(chǔ),以備控制器完成其他任務(wù)或進(jìn)程后,對(duì)數(shù)據(jù)的完整接收。
entity Dataout is
Port ( sck : in STD_LOGIC;
rst : in STD_LOGIC;
serialin : in STD_LOGIC;
parallelout : out STD_LOGIC_vector(7 downto 0));
end Dataout;
architecture a of Dataout is
signal para : std_logic_vector(7 downto 0);
begi n
process (sck)
variable i : integer range 0 to 7;
begin
if rst=‘1’ then i:=0;
elsif rising_edge(sck) then
if i《7 then
para 《= para(6 downto 0) & serialin;
i:=i+1;
else
parallelout《=para;
i:=i+1;
end if;
else null;
end if;
end process;
end;
4.3 調(diào)試結(jié)果
A.SHT2x 程序進(jìn)行調(diào)試后出現(xiàn)以下 3 個(gè)問(wèn)題:
ERROR:HDLParsers:164 - “D:/!?。。。。。。。。。。。。。。。。。。。。。。。。。。。。。?!1/sht2x.vhd” Line 57.
unexpected IDENTIFIER, expecting SEMICOLON
parse error,
ERROR:HDLParsers:1015
statement unsupported.
“D:/?。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。?!1/sht2x.vhd”
Li ne
61.
Wait
for
ERROR:HDLParsers:164 - “D:/!?。。。。。。。。。。。。。。。。。。。。。。。。。。。。。?!1/sht2x.vhd” Line 63.
unexpected TICK
parse error,
主要是有關(guān)數(shù)據(jù)類(lèi)型的問(wèn)題;
B.Dataout 程序經(jīng)調(diào)試后運(yùn)行成功。
評(píng)論