亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? spi_control_sm.vhd

?? SPI.zip
?? VHD
?? 第 1 頁 / 共 2 頁
字號:

    case spi_state is
    
        --********************* IDLE State *****************
        when IDLE =>
            if start = '1' and xmit_empty = '0' then
                next_spi_state <= ASSERT_SSN1;
            end if;

        --********************* ASSERT_SSN1 State *****************
        when ASSERT_SSN1 =>
            -- this state asserts SS_N and waits for first edge of SCK_INT
            -- SS_N must be asserted ~1 SCK before SCK is output from chip

            if sck_int_re = '1' then
                next_spi_state <= ASSERT_SSN2;
            end if;
            
         --********************* ASSERT_SSN2 State *****************
        when ASSERT_SSN2 =>
            -- this state asserts SS_N and waits for next edge of SCK_INT
            -- SS_N must be asserted ~1 SCK before SCK is output from chip

            if sck_int_fe = '1' then
                next_spi_state <= UNMASK_SCK;
            end if;
            
       --********************* UNMASK_SCK State *****************
        when UNMASK_SCK =>
            bit_cnt_rst <= not(RESET_ACTIVE); -- release bit counter from reset
            bit_cnt_en <= '1';  -- enable bit counter
            clk1_mask <= '1';   -- unmask sck_1
            xmit_load <= '1';   -- load SPI shift register
        
            if sck_int_re = '1' then
                -- first rising edge of CPHA=1 clock with SS_N asserted
                -- transition to XFER_BIT state and unmask CPHA=0 clk
                next_spi_state <= XFER_BIT;
            end if;

        --********************* XFER_BIT State *****************
        when XFER_BIT =>
            clk0_mask <= '1';   -- unmask CPHA=0 clock
            clk1_mask <= '1';   -- unmask CPHA=1 clock
            bit_cnt_en <= '1';  -- enable bit counter
            bit_cnt_rst <= not(RESET_ACTIVE); -- release bit counter from reset
            
            xmit_shift <= '1';  -- enable shifting of SPI shift registers
            
            if bit_cnt = EIGHT  then
                -- all 8 bits have transferred
                next_spi_state <= ASSERT_DONE;
            end if;

        --********************* ASSERT_DONE State *****************
        when ASSERT_DONE =>
            -- this state asserts done to the uC so that new data
            -- can be written into the transmit register or data
            -- can be read from the receive register
            done <= '1';
            clk0_mask <= '1';
            clk1_mask <= '1';
            xmit_shift <= '1';
            if sck_int_fe = '1' then
                next_spi_state <= CHK_START;
            end if;
            
        --********************* CHK_START State *****************
        when CHK_START =>
            clk0_mask <= '1';
            clk1_mask <= '1';
            done <= '1';
            bit_cnt_en <= '1';
            bit_cnt_rst <= not(RESET_ACTIVE); -- release bit counter from reset
            if cpha = '0' then
                -- when CPHA = 0, have to negate slave select and then
                -- re-assert it. Need to wait for last SCK pulse to complete
                -- and mask SCK before negating SS_N. 
                if (sck_re = '1' and cpol = '1') or (sck_fe = '1' and cpol = '0') then
                    clk0_mask <= '0';
                    clk1_mask <= '0';
                    next_spi_state <= MASK_SCK;
                end if;
            elsif start = '1' and xmit_empty = '0' then 
                -- CPHA=1 and have more data to transfer, go back to 
                -- UNMASK_CK state
                clk1_mask <= '1';
            xmit_load <= '1';   -- load SPI shift register
                next_spi_state <= UNMASK_SCK;
            else 
                -- CPHA=1 and no more data to transfer
                -- wait for last SCKs and then mask SCK
                if (sck_re = '1' and cpol = '1') or (sck_fe = '1' and cpol = '0') then
                    clk0_mask <= '0';
                    clk1_mask <= '0';
                    next_spi_state <= MASK_SCK;
                end if;
                clk0_mask <= '0';
                clk1_mask <= '1';
            end if;
            
        --********************* MASK_SCK State *****************
        when MASK_SCK =>
            done <= '1';
            -- wait for next internal SCK edge 
            -- to help provide SS_N hold time
            if sck_int_fe <= '1' then
                next_spi_state <= HOLD_SSN1;
            end if;
            
        --********************* HOLD_SSN1 State *****************
        when HOLD_SSN1 =>
            -- This state waits for another SCK edge
            -- to provide SS_N hold time
            if  sck_int_fe = '1' then
                next_spi_state <= HOLD_SSN2;
            end if;
            
        --********************* HOLD_SSN2 State *****************
        when HOLD_SSN2 =>
            -- This state waits for another SCK edge
            -- to provide SS_N hold time
            if  sck_int_fe = '1' then
                next_spi_state <= NEGATE_SSN;
            end if;

        --********************* NEGATE_SSN State *****************
        when NEGATE_SSN =>
            -- SS_N should negate for an entire SCK
            -- This state waits for an SCK edge
            if sck_int_fe = '1' then
                next_spi_state <= IDLE;
            end if;
    
        --********************* Default State *****************
        when others =>
                next_spi_state <= IDLE;
    end case;
end process;


-- assert slave select when spi_state machine is in any state but IDLE or NEGATE_SSN
ss_n_int <= '1' when (spi_state = IDLE or spi_state = NEGATE_SSN) else '0';

--xmit_load <= '1' when (spi_state = UNMASK_SCK) else '0';


--************************** Register Full/Empty flags *******************************
-- When data is loaded into the SPI transmit shift register from SPITR, the XMIT_EMPTY
-- flag is set, indicating to the uC that new data can be written into SPITR. Note that
-- the SPI transmit shift register is clocked from SCK, therefore, this flag is clocked
-- from SCK.
mt_flag_process: process (sck_int, xmit_empty_reset, reset)
begin
    if xmit_empty_reset = RESET_ACTIVE or reset = RESET_ACTIVE then
        xmit_empty <= '0';
    elsif sck_int'event and sck_int = '1' then
        if xmit_empty_reset = RESET_ACTIVE then
            -- reset empty flag because uC has written data to SPITR
            xmit_empty <= '0';
        elsif xmit_load = '1' then
            -- set empty flag because SPITR data has been loaded into 
            -- SPI transmit shift register
            xmit_empty <= '1';
        end if;
    end if;
end process;



-- When data is loaded into SPIRR, the RCV_FULL flag is set, indicating to the uC that
-- new data from the SPI bus has been received.
full_flag_process: process (reset, clk)
begin
    if reset = RESET_ACTIVE then
        rcv_full <= '0';
    elsif clk'event and clk = '1' then
        if rcv_full_reset = RESET_ACTIVE then
            -- reset the full flag because the spirr has been read
            rcv_full <= '0';
        elsif rcv_load = '1' then
            -- set the full flag because data has been loaded in spirr
            rcv_full <= '1';
        end if;
    end if;
end process;

--************************** Slave Selects *******************************
-- The internal slave select signal generated by the SPI Control state machine 
-- is masked by the uC slave select register. The SS_N outputs are clocked on the
-- falling edge of the system clock. 
ss_n_process: process ( reset, clk)
variable i : integer;

begin
    if reset = RESET_ACTIVE then
        ss_n_out <= (others => '1');
    elsif clk'event and clk = '0' then
        for i in 0 to 7 loop
            if ss_n_int = '0' and ss_mask_reg (i) = '1' then
                ss_n_out(i) <= '0';  -- assert corresponding slave select
            else
                ss_n_out(i) <= '1';
            end if;
        end loop;
    end if;
end process;
    
-- Slave selects are 3-stated if SS_IN_INT is asserted  
ss_n <= ss_n_out when ss_in_int = '1'
    else (others => 'Z');

end DEFINITION;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品久久久久久久99蜜桃| 色先锋资源久久综合| 亚洲国产精品视频| 亚洲欧美日韩国产手机在线| 国产精品久久久久影院色老大| 欧美国产激情一区二区三区蜜月| 国产网红主播福利一区二区| 国产欧美一二三区| 国产精品美女久久久久av爽李琼| 久久久精品综合| 亚洲日本丝袜连裤袜办公室| 亚洲综合激情小说| 天天操天天综合网| 国模少妇一区二区三区| 国产成人av一区二区| 色综合久久88色综合天天6| 欧美午夜精品免费| 日韩精品一区二区三区蜜臀 | 欧美一区二区三区精品| 日韩一区二区免费视频| 久久久夜色精品亚洲| 日韩一区有码在线| 日本成人在线一区| 成人免费看黄yyy456| 欧美日韩国产综合草草| 国产亚洲精品7777| 亚洲444eee在线观看| 国产成人午夜电影网| 欧美性视频一区二区三区| 精品国产91洋老外米糕| 亚洲欧美偷拍另类a∨色屁股| 日韩精品电影在线观看| 国产凹凸在线观看一区二区| 色www精品视频在线观看| 欧美一级专区免费大片| 亚洲免费观看高清在线观看| 美女视频网站久久| 91蜜桃视频在线| 久久免费国产精品| 日韩精彩视频在线观看| 暴力调教一区二区三区| 日韩精品一区二区三区视频在线观看 | 92精品国产成人观看免费 | 亚洲欧洲日韩综合一区二区| 亚洲一区二区三区四区在线观看 | 久久精品久久精品| 欧美性猛交xxxxxx富婆| 国产午夜亚洲精品羞羞网站| 亚洲成a人片综合在线| 99在线精品一区二区三区| 91精品国产福利| 亚洲电影欧美电影有声小说| 不卡av免费在线观看| 26uuu精品一区二区在线观看| 亚洲va国产天堂va久久en| 97久久超碰国产精品电影| 日本一区二区三级电影在线观看| 视频精品一区二区| 欧美中文字幕一区二区三区亚洲| 国产女主播在线一区二区| 久久精品国产一区二区| 制服丝袜成人动漫| 天天操天天色综合| 欧美午夜精品一区二区蜜桃| 亚洲综合久久久| 欧洲一区在线电影| 亚洲精品国久久99热| 91视频观看免费| 中文字幕视频一区二区三区久| 国产成人亚洲综合a∨猫咪| 久久蜜桃av一区二区天堂| 久久成人麻豆午夜电影| 日韩一区二区免费在线电影| 麻豆一区二区三| 亚洲精品在线免费观看视频| 麻豆国产一区二区| 精品国产一区久久| 国产成人午夜精品影院观看视频| 久久青草国产手机看片福利盒子 | 欧美性视频一区二区三区| 一区二区三区四区不卡在线| 在线免费观看视频一区| 夜夜嗨av一区二区三区网页| 色婷婷精品大在线视频| 一区二区三区四区激情| 337p亚洲精品色噜噜噜| 九色综合国产一区二区三区| 国产午夜精品在线观看| 本田岬高潮一区二区三区| 伊人夜夜躁av伊人久久| 欧美精品日韩一本| 激情偷乱视频一区二区三区| 国产精品久久久久久久第一福利| 色综合天天综合色综合av| 午夜精品久久久久久久久| 日韩欧美一区二区视频| 成人污污视频在线观看| 玉米视频成人免费看| 日韩一级黄色片| 国产成人免费在线视频| 综合久久国产九一剧情麻豆| 欧美日韩成人在线| 国产一区视频在线看| 亚洲久草在线视频| 日韩午夜激情免费电影| 成人av电影在线| 日韩电影在线观看一区| 久久精品人人做人人爽人人| 色综合久久综合网欧美综合网| 亚洲福利一区二区三区| 欧美国产视频在线| 这里只有精品电影| 91碰在线视频| 精品在线亚洲视频| 一片黄亚洲嫩模| 久久综合九色综合97_久久久| 色综合久久久久综合体| 国产一区二区三区在线观看免费| 亚洲精品视频在线观看网站| 日韩限制级电影在线观看| 色综合色狠狠天天综合色| 国产经典欧美精品| 久久精品99久久久| 亚洲成人黄色影院| 亚洲你懂的在线视频| 国产欧美日韩麻豆91| 日韩精品一区二区三区四区| 欧美亚洲综合久久| 不卡一区中文字幕| 国产米奇在线777精品观看| 日韩精品成人一区二区三区| 亚洲精品综合在线| 国产精品久久福利| 久久综合久久综合亚洲| 欧美一区二区三区视频免费播放| 欧洲另类一二三四区| 91在线观看地址| 99久久久精品| 99re在线精品| 99精品黄色片免费大全| 波多野结衣亚洲| 成人免费视频播放| 国产高清亚洲一区| 精品一区二区三区的国产在线播放| 亚洲综合视频在线| 亚洲一区二区精品久久av| 亚洲精品免费在线| 亚洲欧美日韩一区| 亚洲一区二区三区四区在线观看 | 欧美国产日韩一二三区| 欧美在线一区二区三区| 中文字幕亚洲一区二区av在线| 久久久影视传媒| 精品国产一区二区亚洲人成毛片| 欧美成人欧美edvon| 欧美成人aa大片| 精品国偷自产国产一区| 欧美激情一区二区在线| 国产精品传媒在线| 亚洲精品视频免费观看| 亚洲国产综合人成综合网站| 亚洲福利一区二区三区| 捆绑紧缚一区二区三区视频 | 国产精华液一区二区三区| 粉嫩一区二区三区在线看| 97精品视频在线观看自产线路二| 色中色一区二区| 欧美美女一区二区| 日韩一区二区免费电影| 26uuu国产电影一区二区| 国产精品午夜在线| 亚洲综合视频网| 久久国产三级精品| 国产成人精品免费| 欧美日韩一区三区四区| 欧美一区二区免费观在线| 久久天天做天天爱综合色| 国产精品女主播在线观看| 亚洲国产日日夜夜| 国产一区不卡视频| 欧美唯美清纯偷拍| 精品国产sm最大网站免费看| 亚洲色图另类专区| 美洲天堂一区二卡三卡四卡视频 | 麻豆久久久久久| 99re这里都是精品| 精品精品国产高清一毛片一天堂| 国产精品国产三级国产aⅴ中文| 亚洲国产日韩在线一区模特| 经典三级一区二区| 欧美性猛片xxxx免费看久爱| www日韩大片| 亚洲成人第一页| av一区二区久久| 欧美一级国产精品| 樱桃视频在线观看一区| 国产美女视频一区| 欧美日韩国产另类一区| 亚洲视频在线观看三级| 国内精品久久久久影院色|