音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費注冊 首頁 | 行業(yè)黑名單 | 幫助
維庫電子市場網(wǎng)
技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng)
驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機 | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe

我編些得程序,請大家看看問題出在哪了?

作者:zhx0919 欄目:嵌入式系統(tǒng)
我編些得程序,請大家看看問題出在哪了?
端口說明:d是并行輸入的數(shù)據(jù),要把它轉(zhuǎn)成串行輸出,cs_read是spi口的一個片選信號,clk是spi的時鐘,當cs_write有效(d的值為一計數(shù)器的輸出,當cs_write高時計數(shù),此時d的值在不停的變化,當cs_write為低時停止計數(shù))時把數(shù)據(jù)d存入寄存器,以便后面用來串行輸出,cs_state(也是spi口的一片選)是狀態(tài)判斷,q是串行數(shù)據(jù)輸出;


程序要實現(xiàn)的功能:其實時個并轉(zhuǎn)串的功能,當cs_state有效時,q輸出一固定值(可任意定義,如:當計數(shù)器正在計數(shù)時輸出0xaaaa,當計數(shù)完成時輸出0x5555),當cs_read有效時把計數(shù)的值以串行的方式輸出;

和arm的程序連調(diào)調(diào)后的現(xiàn)象(單步執(zhí)行):當不判斷cs_state時,即不用判斷計數(shù)器是否計數(shù)完成(因為計數(shù)器計數(shù)的時間非常短,單步執(zhí)行能夠保證其計數(shù)完成),串行輸出的數(shù)據(jù)是正確的,當加上狀態(tài)判斷之后就不行了,請各位高手給看看問題出在哪了,在下在此謝謝各位高手了!

LIBRARY ieee;
USE ieee.std_logic_1164.all;


--  Entity Declaration

ENTITY series IS
    -- {{ALTERA_IO_BEGIN}} DO NOT REMOVE THIS LINE!
    PORT
    (
        
        d:in std_logic_vector(15 downto 0);
        cs_read : IN STD_LOGIC;
        clk : IN STD_LOGIC;
        cs_write : IN STD_LOGIC;
        cs1_state:in std_logic;
        q : OUT STD_LOGIC
        
    );
    -- {{ALTERA_IO_END}} DO NOT REMOVE THIS LINE!
    
END series;


--  Architecture Body

ARCHITECTURE series_architecture OF series IS
--存放計數(shù)值的寄存器;
signal reg16:std_logic_vector(15 downto 0);
--返回的狀態(tài),其數(shù)值可以自定義;
signal reg_state:std_logic_vector(15 downto 0);



BEGIN     
p3:PROCESS(clk,cs_read,cs_write,cs1_state)
     begin
       --正在計數(shù),此時d的值在不停變化;
       if(cs_write='1') then
--把d的值存入reg16;
           reg16<=d;  
           reg_state<="1010101010101010";
             
           q<='Z';
       elsif(clk'event and clk='0')  then
          if(cs1_state='0')  then  --cs1  --采集完成,可以發(fā)讀數(shù)據(jù)的指令了;
            q<=reg_state(15);
            reg_state(15 downto 1)<=reg_state(14 downto 0);
               
          elsif(cs_read='0') then  --cs6
           q<=reg16(15);
           reg16(15)<=reg16(14);
           reg16(14)<=reg16(13);
           reg16(13)<=reg16(12);
           reg16(12)<=reg16(11);
           reg16(11)<=reg16(10);
           reg16(10)<=reg16(9);
           reg16(9)<=reg16(8);
           reg16(8)<=reg16(7);
           reg16(7)<=reg16(6);
           reg16(6)<=reg16(5);
           reg16(5)<=reg16(4);
           reg16(4)<=reg16(3);
           reg16(3)<=reg16(2);
           reg16(2)<=reg16(1);
           reg16(1)<=reg16(0);
           --reg16(0)<='1';
             --q<=reg16(15);
         else
          q<='Z';
    
     end if;
    end if;

end PROCESS p3;

          
END series_architecture;


2樓: >>參與討論
alin_99
kkk
具體原因 不知道

3樓: >>參與討論
zhx0919
知道了,上面的程序是完全正確的
知道了,上面的程序是完全正確的,大家以后可以參考的,但是我剛開始不是這樣編的,不成功,請大家?guī)涂纯丛?
原來的程序中
if(cs1_state='0')  then  --cs1  --采集完成,可以發(fā)讀數(shù)據(jù)的指令了;
            q<=reg_state(15);
            reg_state(15 downto 1)<=reg_state(14 downto 0);
               
          elsif(cs_read='0') then  --cs6
不是這樣寫的,是這樣的:
if(cs1_state='0')  then  --cs1  --采集完成,可以發(fā)讀數(shù)據(jù)的指令了;
            q<='0';
            
               
          elsif(cs_read='0') then  --cs6


我以為spck就決定了我串行輸出的數(shù)據(jù)是16的,結(jié)果不是這樣的,就改成第一種了,成功了!!!
           
           

參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
精華貼:yaffs閱讀理解
TF卡或Micro sd卡的引腳定義
一個關(guān)于Au1200的開發(fā)群里面有些有用資料,歡迎加入22431460
Cirrus功能強大的ARM處理器EP9302,EP9307,EP9312,EP9315
哪家的PXA270開發(fā)板參考價值比較好?
免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號