《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > 基于FPGA和單片機的串行通信接口設計
基于FPGA和單片機的串行通信接口設計
維庫
摘要: 單片機部分先對FPGA發送過來的文件頭進行確認,正確就接收文件,否則放棄接收的數據。根據FPGA發送模塊的協議,對串口控制寄存器SCON和波特率控制寄存器PCON的設置即可實現。
關鍵詞: 51單片機 FPGA 單片機
Abstract:
Key words :

 摘要:本文針對由FPGA
FPGA

  現場可編程邏輯門陣列(FPGA, Field Programmable Gate Array),是一個含有可編輯元件的半導體設備,可供使用者現場程式化的邏輯門陣列元件。FPGA是在PAL、GAL、CPLD等可編輯器件的基礎上進一步發展的產物。 [全文]

構成的高速數據采集系統數據處理能力弱的問題,提出FPGA與單片機
單片機
  單片機是單片微型計算機(Single-Chip Microcomputer)的簡稱,是一種將中央處理器CPU隨機存儲器RAM、只讀存儲器ROM、多種I/O口和中斷系統、定時器/計時器等功能(可能還包括顯示驅動電路、脈寬調制電路、模擬多路轉換器、A/D轉換器等電路)采用超大規模集成電路技術集成到一塊硅片上構成的微型計算機系統。 [全文]

實現數據串行通信的解決方案。在通信過程中完全遵守RS232協議,具有較強的通用性和推廣價值。

  1 前言

  現場可編程邏輯器件(FPGA)在高速采集系統中的應用越來越廣,由于FPGA對采集到的數據的處理能力比較差,故需要將其采集到的數據送到其他CPU
CPU

  CPU也稱為中央處理器,是電子計算機的主要設備之一。其功能主要是解釋計算機指令以及處理計算機軟件中的數據。所謂的計算機的可編程性主要是指對CPU的編程。CPU是計算機中的核心配件,只有火柴盒那么大,幾十張紙那么厚,但它卻是一臺計算機的運算核心和控制核心。計算機中所有操作都由CPU負責讀取指令,對指令譯碼并執行指令的核心部件。CPU、內部存儲器和輸入/輸出設備是電子計算機的三大核心部件。 [全文]

系統來實現數據的處理功能,這就使FPGA系統與其他CPU系統之間的數據通信提到日程上,得到人們的急切關注。本文介紹利用VHDL語言實現 FPGA與單片機的串口
串口
  串口是計算機上一種非常通用的設備通信協議,大多數計算機包含兩個基于RS232的串口。串口同時也是儀器儀表設備的通信協議,并可用于獲取遠程采集設備的數據。 [全文]

異步通信電路。

  整個設計采用模塊化的設計思想,可分為四個模塊:FPGA數據發送模塊,FPGA波特率發生控制模塊,FPGA總體接口模塊以及單片機數據接收模塊
接收模塊

  接收模塊的工作電壓為5伏,靜態電流4毫安,它為超再生接收電路,接收靈敏度為-105dbm,接收天線最好為25~30厘米的導線,最好能豎立起來。接收模塊本身不帶解碼集成電路,因此接收電路僅是一種組件,只有應用在具體電路中進行二次開發才能發揮應有的作用,這種設計有很多優點,它可以和各種解碼電路或者單片機配合,設計電路靈活方便。 [全文]

。本文著重對FPGA數據發送模塊實現進行說明。

  2  FPGA數據發送模塊的設計

  根據RS232 異步串行通信來的幀格式,在FPGA發送模塊中采用的每一幀格式為:1位開始位+8位數據位+1位奇校驗位+1位停止位,波特率為2400。本系統設計的是將一個16位的數據封裝成高位幀和低位幀兩個幀進行發送,先發送低位幀,再發送高位幀,在傳輸數據時,加上文件頭和數據長度,文件頭用555555來表示,只有單片機收到555555時,才將下面傳輸的數據長度和數據位進行接收,并進行奇校驗位的檢驗,正確就對收到的數據進行存儲處理功能,數據長度可以根據需要任意改變。由設置的波特率可以算出分頻系數,具體算法為分頻系數X=CLK/(BOUND*2)。可由此式算出所需的任意波特率。下面是實現上述功能的VHDL源程序。
Library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity atel2_bin is
port( txclk: in std_logic;                      --2400Hz的波特率時鐘
      reset: in std_logic;                      --復位信號
        din: in std_logic_vector(15 downto 0);  --發送的數據
      start: in std_logic;                      --允許傳輸信號
       sout: out std_logic                      --串行輸出端口
          );
end atel2_bin;
architecture behav of atel2_bin is
signal thr,len: std_logic_vector(15 downto 0);
signal txcnt_r: std_logic_vector(2 downto 0);
signal sout1: std_logic;
signal cou: integer:=0;
signal oddb:std_logic;
type s is(start1,start2,shift1,shift2,odd1,odd2,stop1,stop2);
signal state:s:=start1;  
begin
  process(txclk)     
    begin
      if rising_edge(txclk) then
           if cou<3 then thr<="0000000001010101";       --發送的文件頭
            elsif cou=3 then
            thr<="0000000000000010";                --發送的文件長度
            elsif (cou>3 and state=stop2) then thr<=din;--發送的數據
            end if;  
      end if;
  end procESS;
  process(reset,txclk)
  variable tsr,tsr1,oddb1,oddb2: std_logic_vector(7 downto 0);
   begin
         if reset='1' then
            txcnt_r<=(others=>'0');
                 sout1<='1';
                    state<=start1;                    
                       cou<=0;
         elsif txclk'event and txclk='1' then                 
         case state is
         when start1=>
              if start='1' then            
                 if cou=3 then
                    len<=thr;
                 end if;
                 tsr:=thr(7 downto 0);
     oddb1:=thr(7 downto 0); 
                 sout1<='0'; --起始位 
                 txcnt_r<=(others=>'0');   
                 state<=shift1;
              else
                 state<=start1;
              end if;
         when shift1=>
              oddb<=oddb1(7) xor oddb1(6) xor oddb1(5) xor oddb1(4) xor oddb1(3) xor oddb1(2) xor oddb1(1) xor oddb1(0);
              sout1<=tsr(0); --數據位
              tsr(6 downto 0):=tsr(7 downto 1);
              tsr(7):='0';
              txcnt_r<=txcnt_r+1;
              if (txcnt_r=7) then
                 state<=odd1;cou<=cou+1;
              end if;
         when odd1=>         --奇校驗位
              if ddb='1' then
                 sout1<='0';state<=stop1;
              else
                 sout1<='1';state<=stop1;
              end if;
         when stop1=>
              sout1<='1';    --停止位
              if cou<4 then
                 state<=start1;
              else
                 state<=start2;                             
              end if;
         when start2=>
              tsr1:=thr(15 downto 8);
     oddb2:=thr(15 downto 8); 
              sout1<='0';    --起始位  
              txcnt_r<=(others=>'0'); 
              state<=shift2;
         when shift2=>
              oddb<=oddb2(7) xor oddb2(6) xor oddb2(5) xor oddb2(4) xor oddb2(3) xor oddb2(2) xor oddb2(1) xor oddb2(0);
              sout1<=tsr1(0);--數據位
              tsr1(6 downto 0):=tsr1(7 downto 1);
              tsr1(7):='0';
              txcnt_r<=txcnt_r+1; 
              if (txcnt_r=7) then
                 state<=odd2;               
              end if;
         when odd2=>       --奇校驗位
 if ddb='1' then
                 sout1<='0';state<=stop2;
              else
                 sout1<='1';state<=stop2;
              end if; 
         when stop2=>  
              sout1<='1';    --停止位    
              if len="0000000000000000" then
                 state<=stop2;                 
              else
                 state<=start1;               
                 len<=len-1;
              end if;                        
         end case;
         end if;                
   end process; 
  sout<=sout1;
end behav;


  其中各信號的說明已在程序中標明了。波形仿真圖如圖2所示。

  圖2  FPGA數據發送時序仿真圖

  圖中Din寫入值為3355H,波特率為2400Hz,Start信號始終置邏輯1,即隨時都能發送數據。Reset信號邏輯1時復位,邏輯0時電路開始工作。THR是數據寄存器,文件頭、數據長度以及數據位都先寄存到THR中,Len是數據長度,TSR是低8位數據幀寄存器,TSR1是高8位數據幀寄存器。數據長度Len定為02H,發送時先發送低8位55H,后發送高8位33H,一共發送兩遍。發送的數據格式說明:當發送55H時,其二進制為01010101,則發送的數據的二進制數為00101010111(1位開始位+8位數據位+1位奇校驗位+1位停止位)。

  單片機部分先對FPGA發送過來的文件頭進行確認,正確就接收文件,否則放棄接收的數據。根據FPGA發送模塊的協議,對串口控制寄存器SCON和波特率控制寄存器PCON的設置即可實現。

此內容為AET網站原創,未經授權禁止轉載。
主站蜘蛛池模板: 欧美中文字幕在线| 老头天天吃我奶躁我的视频| 好叼操这里只有精品| 么公的又大又深又硬又爽视频| wwwxxx日本| 浪荡秘书伺候办公室h| 国产精品网址在线观看你懂的 | 国产福利vr专区精品| yin荡护士揉捏乱p办公室视频| 日本黄色免费观看| 亚洲国产精品尤物yw在线观看| 精品国产一区二区三区久久狼| 国产在线jyzzjyzz免费麻豆| 7777久久亚洲中文字幕| 影音先锋女人aa鲁色资源| 久久精品中文字幕久久| 欧美日本国产VA高清CABAL| 免费人成黄页在线观看视频国产| 韩国理伦片在线观看手机版| 成人欧美在线视频| 五月综合色婷婷| 欧美牲交a欧美牲交aⅴ免费下载| 别急慢慢来在线观看| 阿娇囗交全套高清视频| 国产精品喷水在线观看| a级毛片免费全部播放| 成人看免费一级毛片| 久久天天躁狠狠躁夜夜网站| 欧美怡红院免费全部视频| 伊人久久精品亚洲午夜| 美女羞羞喷液视频免费| 国产视频中文字幕| 中国一级特黄aa毛片大片| 日韩成人一区ftp在线播放| 亚洲国产高清美女在线观看| 男人插女人视频软件| 四虎www免费人成| 非洲黑人最猛性xxxx_欧美| 国产精品jvid在线观看| 95在线观看精品视频| 好男人在线社区www|