190 likes | 484 Views
串列埠通訊實驗. 實驗目的 掌握 ARM 的串列埠工作原理 學習編程實現 S3C2410X 的 UART 通訊. 串列通訊傳輸格式. UART 腳位. 要完成基本的通信功能,實際上只需要 RXD , TXD , GND 即可. 腳位電氣特性. 但由於 RS-232-C 標準所定義的高,低電壓信號與 S3C210X 系統的 LVTTL 電路定義的高,低電壓信號完全不同 LVTTL 標準邏輯“ 1” 對應 2V~3.3V 電壓 標準邏輯“ 0” 對應 0V~0.4V 電壓 而 RS-232-C 標準採用負邏輯方式 標準邏輯“ 1” 對應 -5V~-15V 電壓
E N D
串列埠通訊實驗 實驗目的 掌握ARM的串列埠工作原理 學習編程實現S3C2410X的UART通訊
UART腳位 要完成基本的通信功能,實際上只需要RXD,TXD,GND即可
腳位電氣特性 • 但由於RS-232-C標準所定義的高,低電壓信號與S3C210X系統的LVTTL電路定義的高,低電壓信號完全不同 • LVTTL • 標準邏輯“1”對應2V~3.3V電壓 • 標準邏輯“0”對應0V~0.4V電壓 • 而RS-232-C標準採用負邏輯方式 • 標準邏輯“1”對應-5V~-15V電壓 • 標準邏輯“0”對應+5V~+15V。 • 顯然,兩者間要進行通信,必須經過電壓的轉換,轉換晶片採用的MAX232。
UART電路 • 每個UART電路包含 • 串列傳輸速率發生器,接收器,發送器和控制單元。 • 串列傳輸速率發生器 • 以MCLK為時鐘源。 • 發送器和接收器包含 • 16位元組FIFO暫存器和移位暫存器,當發送資料的時候,資料先寫到FIFO然後複製到發送移位暫存器,然後從資料輸出埠(TxDn)依次被移位輸出。 • 被接收的資料也同樣從接收埠(RxDn)移位輸入到移位暫存器,然後複製到FIFO中。
UART資料發送 • 資料發送封包的格式是可編程的,它包含一個開始位,5到8個資料位元,一個可選的奇偶位和一個或兩個停止位元,這些可以通過線性控制器UCONn)來設置。 • 發送器也能夠產生發送中止條件。中止條件迫使串列埠輸出保持在邏輯0狀態,這種狀態保持一個傳輸封包的時間長度。 • 通常在一封包傳輸資料完整地傳輸完之後,在通過這個全0狀態將中止信號發送給對方。中止信號發送之後,傳送資料連續放到FIFO中(在不使用FIFO模式下,將被放到輸出保持暫存器)。
UART資料接收 • 與資料發送一樣,資料接收的封包也是可以編程的,它包含一個開始位,5到8個資料, • 一個可選的奇偶位和一位或兩位停止位元,它們都是通過線性控制器(ULCONn)來設置的。 • 接收器能夠檢測溢出錯誤,奇偶校驗錯誤,封包錯誤和中止狀況,每種情況下都將會將一個錯誤標誌位元。
串列傳輸速率發生器 • 每個UART的串列傳輸速率發生器為傳輸提供了串列移位元時鐘。 • 串列傳輸速率產生器的時鐘源可以C、從S3C2410X的內部系統時鐘或UCLK中來選擇。 • 串列傳輸速率由時鐘源(PCLK或UCLK)16分頻和UART串列傳輸速率除數暫存器(UBRDIVn)指定的16位除數決定。 • UBRDIVn的值可以按照下式確定: UBRDIVn=(int)(PCLK/(bps*16))-1 除數的範圍為1到(216-1)。
串列傳輸速率 • 如果串列傳輸速率為115200bps且PCLK或UCLK為40MHz,則UBRDIVn為: UBRDIVn =(int)(40000000)(115200*16))-1 = (int)(21.7)-1 = 21-1 = 20
串列埠初始化 • /* 設置串列埠的FIFO屬性,並清除FIFO中的內容 */ • rUFCON0=0xf7; • /* 關閉流控功能 */ • rUMCON0=0x0; • /* 設置8位元資料位元、1位元停止位、無奇偶校驗串列埠模式 */ • rULCON0=0x3; • /* 設置收發的中斷模式為電壓觸發,關閉超時功能 */ • rUCON0=0x345; • /* 設置串列傳輸速率,pclk為CPU主頻,baud為串列傳輸速率 */ • rUBRDIV0=( (int)(pclk/16./baud + 0.5) -1 );
接受資料 • 接受資料,相關程式如下: • /* 等待接收緩衝清空.*/ • while(!(rUTRSTAT0 & 0x1)); • /* 將資料寫到資料埠 */ • Data = rURXH0;
發送資料 • /* 等待發送緩衝區空 */ • while(!(rUTRSTAT0 & 0x2)) • /* 發送資料 */ • rURXH0 = data
主函數Main 從串列埠接收字串,然後通過超級終端回顯