《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > 基于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網站原創,未經授權禁止轉載。
主站蜘蛛池模板: 久久精品无码午夜福利理论片 | 影音先锋女人aa鲁色资源| 久久精品国产精品亚洲艾| 欧美午夜精品久久久久免费视 | 一级毛片免费的| 日产乱码卡一卡2卡3视频| 久热综合在线亚洲精品| 欧美人猛交日本人xxx| 亚洲熟妇无码AV不卡在线播放| 男男动漫全程肉无删减彩漫| 午夜精品乱人伦小说区| 色多多免费视频观看区一区| 国产凌凌漆国语| 91九色视频无限观看免费| 国产精品亚洲精品日韩已方| 91欧美在线视频| 天堂网www中文在线| 一区二区在线免费视频| 成人国产精品999视频| 中文字幕永久视频| 无码人妻精品一区二区三区9厂| 久久久综合久久| 日本精品一区二区三区在线视频一 | 日本人强jizzjizz老| 久久国产精品萌白酱免费| 日韩伦理电影在线免费观看| 久久躁狠狠躁夜夜av| 旧里番6080在线观看| 亚洲AV无码乱码麻豆精品国产| 欧美一区二区影院| 亚洲丰满熟女一区二区v| 3d动漫h在线观看| 国产自产在线视频一区| 99久久久国产精品免费牛牛 | 一个人免费观看www视频| 性一交一乱一伦一| 三级精品视频在线播放| 成人毛片全部免费观看| 中文字幕一区二区三区精华液| 成年免费视频黄网站在线观看 | 波多野结衣动态图|