第六節,ZYNQ的UART

2021-09-18 01:47:45 字數 2553 閱讀 9170

zynquart

zynq的串列埠模組是乙個全雙工的非同步接收和傳送器,支援寬範圍廣的軟體可程式設計模組,支援程式設計配置波特率和資料格式,同時提供自動的奇偶校驗和錯誤檢測方案,此外,還為apu提供了接收和傳送fifo。

zynq有兩個uart器件,具有以下特性:

可程式設計波特率傳送器;

64個位元組接收和傳送fifo;

資料位6,7或者8個位元位;

奇,偶,空格,標記或者沒有校驗;

1,1.5或者2個停止位;

支援校驗,幀和超限錯誤檢測;

支援自動回應,本地環路和遠端環路通道模式;

支援產生中斷;

在emio上,可以使用數據機控制訊號cts,rts,dsr,dtr,ri和dcd;

其結構框如圖1所示:

圖1 uart的結構體系

apb介面:

通過apb介面,ps可以對uart控制器內部暫存器進行讀寫操作;

tx fifo

tx fifo用於儲存來自apb介面的寫資料,直到傳送器模組將其取出並送到傳送移位暫存器中,tx fifo通過滿和空標誌來控制流量,此外,還可以設定tx fifo的觸發等級;

rx fifo:

rx fifo用於儲存來自接收移位暫存器的資料,rx fifo的滿空標誌用於接收資料流量控制,此外,還可以設定rx fifo的觸發等級;

傳送器:

傳送器取出傳送fifo中的資料,並將其載入到傳送移位暫存器中,將並行資料序列化處理;

接收器:

uart連續取樣ua_rxd訊號,當檢測到低的電平變化時,表示接收資料的開始;

控制和狀態模組:

控制暫存器用於使能,禁止和發布軟體復位給接收器和傳送器模組,還可以配置接收超時和傳送斷開等特性;模式暫存器通過波特率生成器選擇時鐘,它也負責選擇傳送和所接收資料的位的長度,奇偶校驗位和停止位,還可以選擇uart的工作模式,包含自動回應,本地環路以及遠端環路等;

中斷控制:

通過通道中斷狀態暫存器和通道狀態暫存器,以及中斷控制模組檢測來自其他uart模組的事件;通過使用中斷使能暫存器和中斷禁止暫存器,使能或禁用中斷,中斷使能或者禁用的狀態反映在中斷遮蔽暫存器當中;

波特率發生器:

圖2給出了波特率發生器的原理,圖中cd是波特率發生器的乙個位域,用於生成取樣率時鐘band_sample。

圖2 波特率傳送器

波特率最後生成主要包括以下3個步驟:

uart的時鐘選擇,可以直接是uart ref clock,也可以通過旁路進行8分頻,該設定在uart.mode_reg0[0]中進行;

對uart時鐘進行分頻,產生band_sample的頻率計算公式如下:

baud_sample = sel_clk/cd

對baud_sample進行再次分頻,產生rx和tx波特率,該步驟是通過設定bdiv值完成,也就是對uart.baud_rate_divider_reg0[7:0]進行設定,波特率計算公式如下:

baud_rate = sel_clk/(cd*(bdiv + 1))

uart ref clock,cd和bdiv的值決定了uart的波特率,如果uart_ref_clk=50mhz,uart_ref_clk/8=6.25mhz。圖3表示典型的波特率對應的cd和ebdiv值;

圖3 cd和ebdiv對應波特率

例項內容:配置好zynq的uart中斷,實現中斷服務函式,在接收中斷中將接收到的資料通過uart傳送出來;

配置uart的步驟如下:

通過uart的外設id找到對應的外設資訊;

配置uart的的gic中斷;

配置uart的中斷觸發方式(接收或者傳送中斷);

設定uart的fifo觸發等級;

使能uart外設;

配置uart的gic中斷步驟如下:

連線到硬體,把對應中斷對映到gic中斷請求上;

將uart中斷對映到定時器中斷的中斷服務函式上;

使能gic中斷;

使能中斷向量表和中斷向量表的對映;

程式原始碼:

//uart的gic初始化

void init_gic_uart(void)

//uart初始化

void init_uart(void)

//uart中斷服務函式

void uartintrhandler(void *callbackref)

}//  printf("thistimereceivedcount=%d\r\n",receivedcount);

xuartps_writereg(instanceprt->config.baseaddress,xuartps_isr_offset,isrstatus);

}

第六節 Node陣列

var arr new array var arr array var arr array 1,2,3,4 var arr var arr 1,2,3 instanceof 操作符 array.isarray 方法 1.將物件的鍵值轉換為陣列 object.keys 2.string型別轉換為陣列 ...

第六節 雙鏈表

結構特點 template struct dnode 設指標p指向雙鏈表中某一結點,則有下式成立 p llink rlink p p rlink llink 建立空雙鏈表 first rlink null first llink null last first 插入操作 q rlink p rlin...

C 學習 第六節

什麼是型別 type 型別在c 中的作用 c 語言的型別系統 變數 物件與記憶體 型別 type 資料型別 性質相同的值得集合 記憶體 內部儲存單元,計算機執行程式的空間 外存 擴充套件儲存器,硬碟 賦值用 判斷用 dynamic 動態字元定義,弱型別的使用方法,c 是強型別程式語言 1 資料型別表...