本應用筆記介紹了達拉斯半導體DS89C430和DS89C450超高速微控制器的全新串行端口特性。增加時鐘倍頻器允許用戶選擇原始頻率四分之一的晶體,以產生相同的波特率并降低EMI。
概述
與每個指令周期至少需要8051個時鐘的原始12架構相比,超高速微控制器具有先進的8051內核架構,能夠在短短一個時鐘周期內執行指令。為了補充高性能內核,標準8051片上外設中集成了新的硬件功能。其中兩個新功能,時鐘乘法器和可選的高速時鐘到定時器,可以直接影響串行端口的波特率生成。本文檔的目的是解釋這兩個新功能與串行端口波特率生成之間的交互。
串行端口模式
DS89C430串行端口提供四種基本工作模式。模式 0 允許使用源自系統時鐘的波特時鐘對 8 位數據進行半雙工同步通信。模式 1 允許 8 位數據與源自定時器 1 或定時器 2 的波特時鐘進行全雙工異步通信。模式 3 與模式 1 的不同之處在于支持 9 位數據傳輸和接收。模式2同樣提供9位數據通信,但其波特時鐘直接來自振蕩器頻率。為了支持模式 1、2 和 3 異步通信,起始位始終位于數據之前,停止位始終位于數據之后。每種串行端口模式的完整詳細信息可在超高速微控制器用戶指南中找到。
時鐘乘法器
超高速微控制器集成了片上時鐘倍頻器,可在降低外部晶體時鐘頻率的情況下提供更高的性能。乘法器可以配置為生成雙倍 (2X) 或四倍 (4X) 的內部系統時鐘,由 2X/4X 特殊功能寄存器位 (PMR.3) 控制。請注意,由此產生的2倍或4倍乘法系統時鐘仍不能超過數據手冊中規定的最大工作頻率。有關乘法器的完整詳細信息,請參閱超高速微控制器用戶指南。
一旦時鐘乘法器輸出被選為內部系統時鐘(CD1:0 = 00b),從系統時鐘派生的某些串行端口波特率時鐘(不再等于外部振蕩器頻率)將發生變化。圖 1 突出顯示了使用 2X 或 4X 乘法系統時鐘時可能受影響的串行端口時鐘。串行模式 0 波特率始終不同,串行模式 2 波特率永遠不會不同,串行模式 1、3 波特率可能不同,具體取決于所使用的定時器和/或定時器輸入時鐘選擇。如圖1所示,表1表示哪些串行端口模式受時鐘乘法器的影響。附錄 A 包含使用 2X 或 4X 時鐘乘法器模式時執行波特率計算的詳細公式。
圖1.串行端口時鐘受時鐘乘法器輸出選擇的影響 (CD1:0 = 00b)。
串口模式 | 波特時鐘源 |
波特時鐘取決于 內部系統時鐘(時鐘 倍頻器選擇) |
模式 0 (同步 - 8 位) |
系統時鐘/4 系統時鐘/12 |
是的 |
模式 1 (異步 - 10 位) |
定時器 1 定時器 2 |
是1 否2 |
模式 2 (異步 - 11 位) |
振蕩器時鐘/32 振蕩器時鐘/64 |
不 |
模式 3 (異步 - 11 位) |
定時器 1 定時器 2 |
是1 否2 |
1 僅當啟用 4 分頻或 1 分頻定時器 1 輸入時鐘時(T1M = 1 或 T1MH = 1)。為了與原始 8051 兼容,默認定時器 1 輸入時鐘 (T1MH, T1M = 00b) 固定為振蕩器時鐘除以 12。 2 僅適用于串行端口 0 上的波特率生成。 |
優點:更快的波特率,更低的EMI
使用時鐘乘法器時,應用優勢可能很大。一個原始頻率四分之一的外部晶體時鐘可用于產生與以前相同的串行模式 0 和(定時器 1 生成)模式 1、3 波特率,但 EMI 大大降低。或者,當內部乘以 2 倍或 4 倍時,相同的外部晶體現在可以生成高達四倍的波特率!
高速輸入時鐘至定時器
為了使片上定時器對應用最有用,每個定時器都應能夠以相當于最小指令周期的速率跟蹤時間。對于以 8051 個振蕩器時鐘執行指令的原始 12 架構,定時器以振蕩器頻率除以 12 速率計時。當達拉斯半導體公司推出其高速微控制器時,該微控制器縮短了四個振蕩器時鐘的機器周期,為每個定時器提供了一個可選擇的振蕩器頻率除以4個輸入時鐘控制。當高速微控制器系列中添加時鐘乘法器功能時,可選擇的4分頻被修改為系統時鐘的函數,而不是振蕩器時鐘。現在,超高速微控制器具有單時鐘周期指令執行功能。同樣,每個片上定時器都進行了升級,集成了可選系統時鐘除以1個輸入。
CKMOD (0h) SFR 中包含的 T1MH、T2MH 和 T96MH 位分別使系統時鐘除以 1 個輸入到定時器 0、定時器 1 和定時器 2。啟用定時器的高速系統時鐘輸入 (TxMH = 1) 將自動覆蓋系統時鐘除以 4 個輸入 (TxM = 1) 設置。新的系統時鐘除以 1 個定時器輸入,如系統時鐘除以 4 個輸入,在使用定時器1時會影響波特率的產生。圖2突出顯示了可能受選擇定時器1高速時鐘輸入影響的串行端口時鐘。
圖2.串行端口時鐘受高速定時器1輸入(T1MH = 1)選擇的影響。
優點:波特率更快,波特率分辨率更高
相對于串行端口操作,除以1個輸入時鐘功能可轉化為兩個用戶優勢。首先,在系統時鐘頻率相同的情況下,使用定時器1時,現在可以為串行模式3和1生成四倍的波特率。其次,時鐘定時器1的速度更快,可實現更高的波特率分辨率,從而可能減少與應用已使用的波特率相關的誤差,或者使新的波特率在應用使用的可接受誤差范圍內。
例如,假設用戶當前有一個以 20MHz 系統時鐘頻率運行的達拉斯高速微控制器應用程序。該應用程序使用其中一個串行端口與PC進行RS232通信,并要求兩者之間的波特率不匹配<3%。如果使用定時器1(在8位自動重新加載模式下)生成波特率,下面的表2給出了Dallas高速微控制器與新型超高速微控制器的“良好”波特率樣本。不可接受的波特率(不匹配> 3%)已用灰色陰影顯示。表3對25MHz的系統時鐘頻率進行了相同的“良好”波特率比較。可以清楚地看到,啟用高速定時器1輸入時鐘可提供更精細的波特率分辨率。附錄 A 包含利用定時器1 (T1MH = 1) 的系統時鐘輸入時執行波特率計算的詳細公式。
電腦 UART (8250/16450) | 高速微控制器(T1M = 1 的定時器 1 用于波特率生成,SMOD_x = 1) | 超高速微控制器(T1MH = 1 的定時器 1 用于波特率生成,SMOD_x = 1) | ||||
重新加載 | 波特率 | 波特率 (TH1) | % 誤差 | 波特率 (TH1) | 錯誤 | |
1 | 115200 | 104166 (FD) | -9.6 | 113636 (F5) | -1.4 | |
2 | 57600 | 62500 (FB) | 8.5 | 56818 (EA) | -1.4 | |
3 | 38400 | 39062 (F8) | 1.7 | 37879 (DF) | -1.4 | |
4 | 28800 | 28409 (F5) | -1.4 | 29070 (D5) | 0.9 | |
5 | 23040 | 22321 (F2) | -3.1 | 23148 (加利福尼亞州) | 0.5 | |
6 | 19200 | 19531 (F0) | 1.7 | 19231 (BF) | 0.2 | |
7 | 16457 | 16447 (ED) | -0.1 | 16447 (B4) | -0.1 | |
8 | 14400 | 14204 (EA) | -1.4 | 14368 (A9) | -0.2 | |
9 | 12800 | 13020 (E8) | 1.7 | 12755 (9E) | -0.4 | |
10 | 11520 | 11574 (E5) | 0.5 | 11574 (94) | 0.5 | |
11 | 10472 | 10417 (E2) | -0.5 | 10417 (88) | -0.5 | |
12 | 9600 | 9469 (DF) | -1.4 | 9615 (7E) | 0.2 |
電腦 UART (8250/16450) |
高速 微控制器 (T1M = 1 的定時器 1 用于波特 率生成,SMOD_x = 1) |
超高速 微控制器 (T1MH = 1 的定時器 1 用于波特 率生成,SMOD_x = 1) |
|||
重新加載 | 波特率 | 波特率 (TH1) | % 誤差 | 波特率 (TH1) | 錯誤 |
1 | 115200 | 130208 (FD) | 13.0 | 111607 (F2) | -3.1 |
2 | 57600 | 55803 (F9) | -3.1 | 57870 (E5) | 0.4 |
3 | 38400 | 39062 (F6) | 1.7 | 38110 (D7) | -0.8 |
4 | 28800 | 27901 (F2) | -3.1 | 28935 (加利福尼亞州) | 0.5 |
5 | 23040 | 22978 (EF) | -0.3 | 22978年(公元前) | -0.3 |
6 | 19200 | 19531 (歐共體) | 1.7 | 19290 (AF) | 0.5 |
7 | 16457 | 16276 (E8) | -1.1 | 16447 (A1) | -0.1 |
8 | 14400 | 14467 (E5) | 0.5 | 14335 (93) | -0.5 |
9 | 12800 | 12600 (E1) | -1.6 | 12807 (86) | 0.1 |
10 | 11520 | 11489 (德語) | -0.3 | 11489 (78) | -0.3 |
11 | 10472 | 10557 (分貝) | 0.8 | 10487 (6B) | 0.1 |
12 | 9600 | 9527 (D7) | -0.8 | 9586(5D) | -0.1 |
應用示例 #1
SPI 模式 (1,1) 接口,使用同步串行模式 0
雖然可以通過“位敲擊”端口引腳與SPI?器件接口,但使用同步串行模式0可減少軟件開銷并實現更快的通信速度。同步串行工作模式在 TXD 引腳上提供移位時鐘,并在移位時鐘 (TXD) 的每個上升沿處在 RXD 引腳上寫入/讀取串行數據。由于 TXD 處于高電平狀態,因此同步串行模式與 CPOL = 1、CPHA = 1 SPI 模式緊密對齊。由于同步串行模式不需要每個位的 3 樣本多數投票方案(如異步串行模式),因此它能夠比任何其他串行模式更快地實現波特率。下圖顯示了DS89C430微控制器與SPI模式(1,1)兼容EEPROM器件之間的接口。
圖3.SPI兼容外設的串行端口接口示例。
串行端口 0 首先置于模式 0,并配置為產生系統時鐘除以 4 波特時鐘。根據所連接的SPI外設的時序限制,可能需要選擇降低的系統時鐘或系統時鐘除以12波特時鐘。在外部,TXD引腳(P3.1)提供串行時鐘并連接到EEPROM的SCK輸入。RXD 引腳 (P3.0) 通過連接到 EEPROM 的 SI 輸入和 SO 輸出來處理所有 SPI 數據事務。使用共享 SI/SO 配置的能力將取決于連接的 SPI 外設的 I/O 時序。第三個微控制器端口引腳未鏈接到片上串行端口硬件,用作SPI外設芯片選擇輸入。在本例中,端口引腳P3.2將連接到EEPROM/CS輸入,并由軟件手動置位和取消置位。由于串行端口首先通信LSB,而SPI外設希望首先通信MSB,因此在大多數情況下使用查找表進行字節轉換。
已經創建了兩個例程,XRAM_store 和 XRAM_recall,并且完全按照它們的名字簡單地執行。XRAM_store例程將內部1kB SRAM的電流內容寫入指定的1kB范圍的EEPROM,而XRAM_recall將指定的1kB范圍的EEPROM讀取到DS89C430片內SRAM中。此代碼僅用作示例,可輕松調整為訪問微控制器或EEPROM存儲器的不同地址范圍,以較小或較大的塊。
應用示例 #2
異步串行端口模式以與普遍接受的RS-232協議兼容的格式發送和接收數據。超高速微控制器以其最大系統時鐘頻率(33MHz)運行時,并使用系統時鐘定時器輸入(T1MH = 1),可以實現超過2Mbaud的異步波特率。(超高速微控制器包含一個表格,顯示每種串行模式的最特率)。遺憾的是,為了符合RS-232標準的物理要求,RS-232發送器必須提供±5V的最小輸出電壓擺幅,但不能超過30V/μs的壓擺率。這些限制通常將RS-232兼容通信限制在較慢的波特率和較短的線路長度下。但是,當需要更高的傳輸速率時,與RS-232標準相關的限制不應妨礙異步串行模式的使用。首先,RS-232“兼容”(不兼容)收發器,能夠進行MegaBaud?操作,目前可從Maxim/Dallas獲得。其次,多個微控制器和/或其他異步串行設備之間的點對點連接允許創建能夠以更快的波特率進行通信的用戶定義網絡。此外,還有物理層協議(例如RS-422和RS-485)支持更遠距離的高速異步串行通信。
圖4.使用硬件串行端口接口的RS-485網絡示例。
上圖顯示了(485)個DS3C89微控制器之間的RS-430網絡接口。異步串行模式使用 TXD 引腳進行傳輸,使用 RXD 引腳進行接收。這些引腳直接連接到RS-485收發器的DI(數據輸入)和RO(接收輸出)引腳。第三個微控制器端口引腳P1.4連接到DE(數據使能)和/RE(接收使能),并將用作半雙工收發器的方向控制。網絡使用主/從架構(1個主站,2個從站),其中每個從設備都有自己唯一的地址,在總線上傳輸之前必須首先由主設備尋址。所有器件均以 22.1184MHz 系統時鐘頻率運行,并使用定時器 1 產生 1.38M 波特率。生成此波特率所需的設置可在圖后的表4中找到。
系統時鐘(兆赫) | 外部晶體或時鐘頻率 (MHz) | 時鐘乘法器模式2 | 計時器 1 重新加載值 | ||||
FB | 足球俱樂部 | FD | 鐵 | FF | |||
7.3728 | 7.3728 | - | 92,160 | 115,200 | 153,600 | 230,400 | 460,800 |
10.0000 | 10.0000 | - | 125,000 | 156,250 | 208,333 | 312,250 | 625,000 |
11.0592 | 11.0592 | - | 138,240 | 172,800 | 230,400 | 345,600 | 691,200 |
14.7456 | 7.3728 | 2 倍 | 184,320 | 230,400 | 307,200 | 460,800 | 921,600 |
16.0000 | 16.0000 | - | 200,000 | 250,000 | 333,333 | 500,000 | 1,000,000 |
18.4320 | 18.4320 | - | 230,400 | 288,000 | 384,000 | 576,000 | 1,152,000 |
20.0000 | 10.0000 | 2 倍 | 250,000 | 312,250 | 416,667 | 625,000 | 1,250,000 |
22.1184 | 11.0592 | 2 倍 | 276,480 | 345,600 | 460,800 | 691,200 | 1,382,4001 |
25.0000 | 25.0000 | - | 312,500 | 390,625 | 520,833 | 781,250 | 1,562,500 |
29.4912 | 7.3728 | 4 倍 | 368,640 | 460,800 | 614,400 | 921,600 | 1,843,200 |
32.0000 | 16.0000 | 2 倍 | 400,000 | 500,000 | 666,667 | 1,000,000 | 2,000,000 |
33.0000 | 33.0000 | - | 412,500 | 515,625 | 687,500 | 1,031,250 | 2,062,500 |
1 應用示例 #2 中使用的波特率。 2 時鐘乘法器用于說明,不需要生成這些系統時鐘頻率。 |
代碼示例:主代碼
主器件初始化為發送器,并驅動其收發器的DE(/RE引腳)至邏輯高電平。發送從地址后,主機將收發器置于接收模式。從機接收到兩個數據字節后,主機將收發器返回到其發送模式。如果在一定時間內未從尋址從站接收到兩個數據字節,則主站使用 13 位定時器0 超時。在對另一個從站尋址之前,主站將從地址和接收的數據字節(或指示未收到響應)發送到串行端口0。
審核編輯:郭婷
-
微控制器
+關注
關注
48文章
7552瀏覽量
151423 -
振蕩器
+關注
關注
28文章
3832瀏覽量
139088 -
定時器
+關注
關注
23文章
3248瀏覽量
114800
發布評論請先 登錄
相關推薦
評論