《第8章串列埠通讯与LED点矩阵.ppt》由会员分享,可在线阅读,更多相关《第8章串列埠通讯与LED点矩阵.ppt(89页珍藏版)》请在三一办公上搜索。
1、第8章 串列埠通訊與LED點矩陣,大綱,8.1 串列通訊的傳輸格式和電氣特性8.2 S3C2440的UART控制器8.3 S3C2440的UART相關暫存器8.4 UART串列通訊應用程式設計8.5 測試步驟8.6 8x8 LED點矩陣8.7 8X8LED點矩陣程式設計8.8 實驗步驟,大綱,8.1 串列通訊的傳輸格式和電氣特性8.2 S3C2440的UART控制器8.3 S3C2440的UART相關暫存器8.4 UART串列通訊應用程式設計8.5 測試步驟8.6 8x8 LED點矩陣8.7 8X8LED點矩陣程式設計8.8 實驗步驟,在前一章,我們已經介紹如何運用S3C2440的基本週邊GP
2、IO埠來設計與應用輸出的顯示方式。一般若是要輸出顯示較複雜的訊息,就無法只透過幾顆LED來顯示。因此,我們可以透過串列埠通訊的功能,將資料顯示在PC主機的超級終端機上。在本章中,將會讀者介紹串列通訊埠的基本概念,S3C2440A相關的UART資源以及LED點矩陣應用程式的設計。,8.1 串列通訊的傳輸格式和電氣特性,8.1 串列通訊的傳輸格式和電氣特性,在串列傳輸連接裡,所謂的傳送器,或是驅動器等的裝置或是設備會在每個固定時刻以序列方式來傳輸一個位元。在串列連結與傳輸中,還需一個額外信號,就是時脈或是參考時序來控制傳輸資料。因此衍生了兩種的串列資料格式:同步傳輸非同步傳輸其中差異在於當傳送器與
3、接收器要送出與接收一個位元時,如何使用時脈來決定。從這兩種傳輸格式中,若是為了延長傳輸距離的,最好是採用非同步傳輸的格式。,8.1 串列通訊的傳輸格式和電氣特性,同步傳輸所有裝置使用一個共同時脈,其可由其中一個裝置或是透過外部訊號源所產生。所有傳輸位元能與這時脈同步。在時脈轉變(上升或下降)後所定義的時間內,每一個所傳輸的位元皆是有效的。接收器要讀取每一個進來的位元資料時,可以使用時脈的轉變來加以決定。例:接收器能夠在時脈的上升或是下降邊緣,或是透過偵測邏輯高準位與低準位來拴鎖住傳輸進來的位元資料。,8.1 串列通訊的傳輸格式和電氣特性,非同步傳輸其不需要時脈引線。因為在每一條引線的終端皆會提
4、供自己的時脈。當然,每一個終端必須同意所設定時脈頻率,而且所有的時脈必須在相當小的誤差範圍內。在每一個所傳輸的位元組中,包含了:用來同步時脈的開始位元資料位元一個或更多的停止位元其主要通知整個傳輸的字元組已經結束了。,8.1.1基本通訊概念,一般來說,微處理機與週邊的通訊可區分為:串列式通訊(Serial)以位元(bit)方式傳送資料,它具有低故障率、低成本的優點,但傳輸速率較慢。串列埠比並列埠稍微困難。在許多情形下,任何連接至串列埠的裝置來說,有時還需將串列傳輸資料轉換成並列埠後,才可使用。這部分功能可透過UART元件來實現。並列式通訊(parallel)以位元組(byte)或字元組(wor
5、d)方式來傳送資料,它具有高速率傳輸的優點,但是相對的成本高,故障率亦較高。,8.1.1基本通訊概念,不管是串列傳輸或並列傳輸,均包含下列三種方式:單向傳輸(Simplex):資料只能一個方向傳遞。任何時間都不能改變其資料傳輸方向。半雙工傳輸(Half duplex):同一時間內只能單向傳遞資料,不同時間裡,其資料傳輸的方向可以改變。全雙工傳輸(Full duplex):資料於任何時間均可以以輸入及輸出來傳遞。,8.1.1基本通訊概念,一般微處理機通訊的傳輸速率,通常以每秒能夠傳送的位元數來計算(BPS,Bits Per Second),又稱之為鮑率(Baud Rate)。典型串列傳輸的鮑率有
6、50、300、600、2400、4800、9600、19200、38400、57600以及115200等。,8.1.2RS-232C規格的介紹,RS-232(Recommended Standard-232)是由電子工業協會(Electronic Industries Association,EIA)在1969年所制定的非同步傳輸(asynchronous transmission)標準介面。目前也成為個人電腦上的標準通訊介面之一。而在IBM-PC 上,透過其所連接的串列介面卡,可連接至4個 RS-232 介面。這種介面稱之為序列埠或是串列埠。由於 RS-232 是由 EIA 所定義的,所以也
7、常稱為 EIA-232。目前相關的規格已訂定至第四個版本,RS-232D。而其中,“RS”表示為推薦的標準(recommend standard)。,8.1.2RS-232C規格的介紹,目前看到的RS-232C則是表示一連串的意義232 表示一個代碼C 則代表所公佈的規格版本,也是目前所常見的版本。串列通信介面標準經過使用和發展,目前已有幾種,但都在RS-232標準基礎下,再經過修訂所提出的。目前皆以RS-232C規格為架構來討論或設計的。在這通訊規範中,適合於資料傳輸速率在020,000 bps範圍內。因為這標準對於串列通信介面的相關定義與規格,有明確規定,因此通信設備廠商大都會生產與RS-
8、232C規格相容的通信設備。因此,目前也漸成為一種標準,並廣泛地被加以採用。,8.1.2.1電氣特性,RS-232C電氣特性,表8.1RS-232C的基本規格表,8.1.2.1電氣特性,EIA-RS-232C對電器特性、邏輯電位與各種信號線功能都作了相關規定。EIA的準位與TTL準位完全不一樣的。在TXD和RXD傳輸線上的準位規格:邏輯1(Mark,標記)=3V15V。邏輯0(Space,空格)=+3+15V。在RTS,CTS,DSR,DTR與DCD等的控制線上的準位規格:信號有效(接通,ON狀態,正電壓)=+3V+15V。信號無效(斷開,OFF狀態,負電壓)=3V15V。,8.1.2.1電氣
9、特性,RS-232C對於資料定義來說:邏輯“1”(標記)的電位是低於-3V邏輯“0”(空格)的電位則是高於+3V。對於控制信號來說:接通狀態(ON)為信號有效的電位是高於+3V斷開狀態(OFF)為信號無效的電位是低於-3V。換言之,當傳輸電位的絕對值大於3V時,電路可以有效地檢查出來。若是介於3+3V之間及低於15V或高於+15V的電壓都是表示無意義的。因此,實際工作時,必須保證電位是位於(315)V範圍之間。,8.1.2.1電氣特性,EIA-RS-232C電壓的定義標準是用正負電壓來表示邏輯狀態與我們常用的TTL,數位邏輯電路以高低電位來表示邏輯狀態的規定是不一樣的。因此,若要為了將電腦介面
10、或終端的TTL器件連接上,必須在EIA-RS-232C與TTL電路之間進行電位和邏輯關係的轉換。,8.1.2.2連接器的機械特性,由於RS-232並未定義連接器的相關物理特性,因此,就出現了DB-25,DB-9與Alt A等各種類型的連接器,且其接腳的定義也各不相同。上敘之連接器的設計與製造一定是針對某種特定的應用場合所提出來的解決方案。而早期的PC XT機型是採用DB-25型連接器,但目前已經逐漸被淘汰。而新一代的電腦則均以9-Pin的接頭接出所有的RS-232通訊埠。以下,如圖8.1所示,列出了RS-232連接器的接腳圖。,8.1.2.2連接器的機械特性,圖8.1、RS-232連接器的腳位
11、編號與順序,8.1.2.2連接器的機械特性,其中,常用的是下列的三條引線:傳送資料(TXD,Transmitted data):通過TXD將串列資料傳送出去。接收資料(RXD,Received data):通過RXD接收線接收串列資料。接地線:有兩根線SG與PG信號接地線與保護接地信號線。一般都採用SG。,8.1.3RS-232資料格式,稍前有提及過,基本上非同步傳輸是用於不具連續性的資料傳送上,且傳送與接收的雙端設備處理的速度在不一致的情形下,才會普遍地被採用。但是當傳送端送出資料後,接收端在資料傳輸過程中,在沒有維持規律時脈的情形時,是要如何知道資料何時被傳送與接收。因此,必須在資料的前後
12、加上幾個位元,使得接收端能正確地接收到資料。而在資料前面所加的位元稱之為開始位元(Start Bit),在資料前後面所加的位元稱之為結束位元(Stop Bit)。此外,還需在結束位元前,再加上檢查位元(Parity Bit),以作為錯誤偵測之用,來確保所接收的資料正確無誤的。總歸來說,完整的非同步傳輸的資料格式包含了4個部份:開始位元、資料位元、檢查位元與停止位元。,8.1.3RS-232資料格式,RS-232傳輸線上,若是當閒置時,則表示位於MARK(標記)狀態(邏輯準位為1)。RS-232傳輸線上,傳輸的過程是以開始位元(邏輯準位為0)所啟始的。對每一個位元,每一次依序傳送至這個傳輸線上。
13、RS-232資料傳輸由LSB(最低的位元)最先傳送出去。最後,停止位元則是被增添至這信號上的,以用來組成出這個傳送的資料格式。,8.1.3RS-232資料格式,圖8.2所示的波形圖為UART(Un i v e r s a l As y n c h r o n o u s Re c e i v e r/Transmitter,通用非同步接收器/傳送器)的信號格式。RS-232邏輯準位使用+3+25V來表示“空格”(邏輯0),以及 3 25V來表示“標記”(邏輯1)。但是任何位於這些範圍中的電壓(+3 3V)則是沒有定義的。而這個信號可以透過“RS-232準位轉換器”來加以實現。這即是如下圖8.2
14、所示的波形,同樣地也是呈現在我們電腦上的RS-232週邊埠上。,8.1.3RS-232資料格式,在RS-232週邊埠上的其他訊號線其實就較類似並列線。這些引線(RTS,CTS,DCD,DSR,DTR,RTS與RI)也是以RS-232邏輯準位來相互通訊的。再來對以下四種位元狀態,列出各個位元的意義,以及其使用方式:開始位元資料位元同位元停止位元,8.1.3RS-232資料格式,圖8.2、RS-232邏輯波形圖,8.1.3RS-232資料格式,開始位元這個位元是用來通知接收端有資料即將送達,準備開始接收送來的資料。通常這個位元以邏輯0準位,負電壓來表示,且僅有一個位元。資料位元一般資料位元,包含了
15、7與8個位元兩種格式。一般的文字符號只需0127就可表示。所以使用7個位元的格式。而特殊符號則需以128255之間的數字來表示。因此,需使用8個位元的格式。,8.1.3RS-232資料格式,同位元這個位元是用來偵測傳輸的結果是否正確無誤,這是最簡單的資料傳輸的錯誤偵測方法。但須注意檢查位元本身只是旗標而已,並無法將錯誤更正。基本上,常用的同位元有4種型式:偶同位元:將資料位元與同位元中是1的位元的數目加起來需為偶數數目。換言之,這同位元能被設定或是清除,來使得資料位元加上同位元是具有偶數個1。奇同位元:將資料位元與同位元中是1的位元的數目加起來需為奇數數目。換言之,這同位元能被設定或是清除,來
16、使得資料位元加上同位元是具有奇數個1。,8.1.3RS-232資料格式,同位元這個位元是用來偵測傳輸的結果是否正確無誤,這是最簡單的資料傳輸的錯誤偵測方法。但須注意檢查位元本身只是旗標而已,並無法將錯誤更正。基本上,常用的同位元有4種型式:標記同位元:表示同位元永遠為1。空格同位元:表示同位元永遠為0。前兩種方式,在傳輸時彼此需先確定好傳輸格式,且接收的那一端就會檢查所接收到的資料。如果發了生並非是所預期的數值時,那麼傳送端就會產生的錯誤訊息。而後者兩種的檢查可視為最簡單的檢查方式。,8.1.3RS-232資料格式,停止位元這個位元是用來標示資料傳送的結束位置,是一個邏輯1準位。基本上,這個位
17、元常使用一個位元。此外,還有1.5與2-bit。非同步傳輸可能根據這些字元來使用需多的命令格式。其中,最常見的是8-N-1。這個格式代表著每一個所傳輸的資料位元是以1個開始位元,8-bit資料位元(LSB為第一個傳輸的bit-0)以及透過1個停止位元來表示傳輸結束。此外,N(NO)代表整個傳輸的過程沒有使用檢查位元。,8.1.3RS-232資料格式,資料傳輸的過程中,難免會發生錯誤的情形,其中大致歸納了:檢查錯誤(Parity Error)框錯誤(Framing Error)接收超收錯誤(Overflow Error)接收超取錯誤(Overrun Error)一般基本的通訊功能至少須包含下列三
18、項:設定資料的傳輸協定。讀取字元。傳送字元。,8.1.3RS-232資料格式,傳輸雙方的位元傳輸率(bit rate)指的是傳輸或是接收每單位時間內每秒的位元數目,在此以bps(bits per second)來表示。鮑率值則是每秒可能的事件或是資料轉換的數目。通常位元傳輸率與鮑率,這兩個數值是一樣的,這是因為在許多的通訊連結下,每一個轉換間隔表示了一個新的位元。對於透過電話線,高速的Modem可以使用相移或是其他的技術在每個資料週期解出多個位元出來,如此,鮑率值就會遠低於位元傳輸率(bit rate)。,8.1.4UART與RS-232的信號準位轉換,在PC主機上的RS-232介面的電氣準位
19、是以12V代表邏輯“1”,+12V代表邏輯“0”。這稱之為EIA準位。因此,UART若要與PC主機上的RS-232介面相互傳輸時,就必須將UART的TTL信號準位轉換成RS-232信號準位,才能互相連接。與PC主機連結時,需使用RS-232準位轉換的專用IC-ICL232(HARRAS或是Intersil公司),不僅最為方便,且相容的IC類型相當地多。ICL232 IC的內部提供了一組將+5V電源轉換成10V的DC-DC電源轉換電路,因此外部只需提供+5V電源,即可將TTL準位轉成RS-232C準位。圖8.3顯示了其接腳及內部方塊圖。,8.1.4UART與RS-232的信號準位轉換,圖8.3、
20、ICL2332的接腳及功能方塊圖(引用自HARRAS),大綱,8.1 串列通訊的傳輸格式和電氣特性8.2 S3C2440的UART控制器8.3 S3C2440的UART相關暫存器8.4 UART串列通訊應用程式設計8.5 測試步驟8.6 8x8 LED點矩陣8.7 8X8LED點矩陣程式設計8.8 實驗步驟,8.2 S3C2440的UART控制器,S3C2440A的UART(通用非同步串列埠)提供三個獨立的非同步串列I/O埠,每個都可以在中斷和DMA兩種模式下進行支援最高串列傳輸速率115.2 Kbps每個UART通道包含2個16-bit FIFO分別提供給接收和傳送如圖8.4所列,為UART
21、硬體方塊圖。,8.2 S3C2440的UART控制器,圖8.4、UART硬體方塊圖,8.2 S3C2440的UART控制器,S3C2440A的UART可以進行以下參數的設置:可程式設定的串列傳輸速率紅外收/發模式1或2個停止位元5位元、6位元、7位元或8位元資料寬度和奇偶位元校驗。串列傳輸速率傳送器以MCLK為時脈源。傳送器和接收器包含16位元組FIFO暫存器和移位暫存器當傳送資料的時候,資料先寫到FIFO然後複製到傳送移位暫存器,然後從資料輸出埠(TXDn)依次被移位輸出。被接收的資料也同樣從接收埠(RXDn)移位輸入到移位暫存器,然後複製到FIFO中。,8.2 S3C2440的UART控制
22、器,在FIFO模式中,緩衝暫存器的所有64個位元組都可作為FIFO暫存器使用,但是,在非FIFO模式中,僅有一個位元組的緩衝暫存器可作為保持暫存器使用。每個UART包含串列傳輸速率產生器、接收器、傳送器和控制單元,且以n為變數標示。例如,RXD0與TXD0表示第一組UART,以此類推。,8.2.1 UART應用方式,資料傳送操作資料傳送封包的格式是可程式化的,其包含一個開始位元,5到8個資料位元,一個可選擇的奇偶位元和一個或兩個停止位元。這些可以通過線性控制器UCONn)來設定。傳送器能夠產生傳送中止條件。中止條件會迫使串列埠輸出保持在邏輯0狀態,這種狀態保持一個傳輸封包的時間長度。通常在一封
23、包傳輸資料完整地傳輸完之後,在透過這個全0狀態將中止信號傳送給對方。中止信號傳送之後,傳送資料連續放到FIFO中(在不使用FIFO模式下,將被放到輸出保持暫存器)。,8.2.1 UART應用方式,資料接收操作與資料傳送一樣,資料接收的封包也是可程式化的,其包含一個開始位元,5到8個資料位元,一個可選擇的奇偶位元和一個位元或兩個停止位元。它們也都是透過線性控制器(ULCONn)來設定的。接收器能夠檢測溢出錯誤,奇偶校驗錯誤,封包錯誤和中止狀況,每種情況下都將會將一個錯誤旗標位元。,8.2.1 UART應用方式,資料接收與接收緩衝暫存器當串列傳輸執行時,所要傳輸出去或是接收進來的的資料需要放置到特
24、定的暫存器中。針對傳送的部分可以使用UART傳送緩衝區暫存器(保存暫存器&FIFO 暫存器)(UTXHn),針對接收的部分則可以使用UART接收緩衝區暫存器(保存暫存器&FIFO 暫存器)(URXHn)。,8.2.1 UART應用方式,資料接收與接收過程的狀態偵測當串列傳輸執行時,傳輸或是接收的過程需要去判斷是否可以傳送或著是可以去接收。因此,可以使用UART TX/RX狀態暫存器(UTRSTATn)的bit-02來判斷是否可以傳送或是接收資料。,8.2.2 串列傳輸速率產生器,每個UART的串列傳輸速率發生器為傳輸提供了串列移動位元時脈。串列傳輸速率產生器的時脈可以是從S3C2410X的內部
25、系統時脈或UCLK中來選擇。串列傳輸速率由時脈(PCLK或UCLK)16除頻和UART串列傳輸速率除數暫存器(UBRDIVn)指定的16-bit除數決定。UBRDIVn的值可以按照下式確定:UBRDIVn=(int)(PCLK/(鮑率*16)-1除數的範圍為1到(216-1)。例如,如果串列傳輸速率為115,200 bps,且PCLK或UCLK為40MHz的話,則UBRDIVn數值為:UBRDIVn=(int)(40000000)(115200*16)-1=(int)(21.7)-1=21-1=20,大綱,8.1 串列通訊的傳輸格式和電氣特性8.2 S3C2440的UART控制器8.3 S3C
26、2440的UART相關暫存器8.4 UART串列通訊應用程式設計8.5 測試步驟8.6 8x8 LED點矩陣8.7 8X8LED點矩陣程式設計8.8 實驗步驟,8.3 S3C2440的UART相關暫存器,在FIFO模式中,緩衝暫存器的所有64個位元組都可作為FIFO暫存器使用在非FIFO模式中,僅有一個位元組的緩衝暫存器可作為保持暫存器使用。每個UART包含串列傳輸速率產生器、接收器、傳送器和控制單元,且以n為變數標示。例如,RXD0與TXD0表示第一組UART,以此類推。,8.3 S3C2440的UART相關暫存器,若要實現S3C2440串列埠的通訊功能,我們就必須瞭解相關暫存器的設定與應用
27、方式。UART線控制暫存器(ULCONn)線控制暫存器,主要用來規定傳輸封包的格式。在UART硬體區塊中,包含了ULCON0,ULCON1與ULCON2等三個UART線控制暫存器。UART控制暫存器(UCONn)在UART硬體區塊中,包含了UCON0,UCON1與UCON2等三個UART控制暫存器。,8.3 S3C2440的UART相關暫存器,UART FIFO控制暫存器(UFCONn)在UART硬體區塊中,包含了UFCON0,UFCON1與UFCON2等三個UART FIFO控制暫存器。UART MODEM控制暫存器(UMCONn)在UART硬體區塊中,包含了UMCON0與 UMCON1等兩
28、個UART MODEM控制暫。UART接收緩衝區暫存器(保存暫存器&FIFO 暫存器)(URXHn)在UART硬體區塊中,包含了URXH0,URXH1與URXH2等三個UART接收緩衝區暫存器。,8.3 S3C2440的UART相關暫存器,UART 鮑率除數暫存器(UBRDIV)在UART硬體區塊中,包含了UBRDIV0,UBRDIV1與and UBRDIV2等三個UART 鮑率除數暫存器。UART傳送緩衝區暫存器(保存暫存器&FIFO 暫存器)(UTXHn)在UART硬體區塊中,包含了UTXH0,UTXH1與UTXH2等三個UART傳送緩衝區暫存,大綱,8.1 串列通訊的傳輸格式和電氣特性8
29、.2 S3C2440的UART控制器8.3 S3C2440的UART相關暫存器8.4 UART串列通訊應用程式設計8.5 測試步驟8.6 8x8 LED點矩陣8.7 8X8LED點矩陣程式設計8.8 實驗步驟,8.4 UART串列通訊應用程式設計,在UART硬體區塊中,包含了UTRSTAT0,UTRSTAT1與 UTRSTAT2等三個UART TX/RX狀態暫存器。UART 鮑率除數暫存器(UBRDIV)在UART硬體區塊中,包含了UBRDIV0,UBRDIV1與and UBRDIV2等三個UART 鮑率除數暫存器。UART傳送緩衝區暫存器(保存暫存器&FIFO 暫存器)(UTXHn)在UAR
30、T硬體區塊中,包含了UTXH0,UTXH1與UTXH2等三個UART傳送緩衝區暫存,8.4 UART串列通訊應用程式設計,圖8.5、UART專案視窗圖,8.4 UART串列通訊應用程式設計,檔案的內容與功能如下:2440addr.h:將S3C2440特殊功能暫存器的所有位址定義在此檔案中。2440lib.h:將S3C2440lib.c檔案中的副程式宣告定義在此檔案中。2440slib.h:關於S3C2440系統初始化的副程式宣告定義在此檔案中,特別是MMU的設定。def.h:定義縮寫與簡化的程式中,關於資料大小,記憶體大小等基本的格式。option.h:定義DMA-2440XP開發平台上的一些
31、時脈、記憶體配置與LCD設定等與硬體配置相關連的設定。UART,LED,計時器,PWM等週邊的應用整合在此檔案,8.4 UART串列通訊應用程式設計,Main.c:主函式2440init.s:初始化設定S3C2440的一些配置與設定。相較前一章的Init.s初始化檔案,此檔案還做更深入的初始化設定。2440lib.c:針對IO埠,UART,LED,計時器,PWM等週邊的應用整合在此檔案中,方便呼叫使用。其中,包含了上一章所提及的Port_Init()副函式。稍後,再進一步介紹跟UART操作有關的副函式。2440slib.s:初始化設定S3C2440的MMU Cache/TLB等功能。,8.4
32、UART串列通訊應用程式設計,主函數Main功能說明:從串列埠接收字串,然後經過超級終端機顯示。在本程式設計中,我們採用串列埠1(UART1)。相關程式範例,如下所列:,void Main(void)int data;Port_Init();/初始化串列埠Uart_Init(0,115200);/設定時脈與鮑率Uart_Select(1);/選擇串列埠1Uart_Printf(test uart n);Uart_Printf(Please input some letter or numberrn);while(1)while(rUTRSTAT1,8.4 UART串列通訊應用程式設計,整個程式
33、的功能為UART來回的測試。S3C2440會透過UART偵測是否接收緩衝暫存器已有資料(判斷rUTRSTAT1-bit0)。若有的話,則抓取並放置在rURXH1暫存器中。緊接著,再將此資料放置在rUTXH1中,當判斷資料已可以傳送時(判斷rUTRSTAT1-bit1),再傳送回至PC。,8.4 UART串列通訊應用程式設計,Uart_Init()副函式功能說明:初始串列埠。相關程式範例,如下所列:void Uart_Init(int pclk,int baud)int i;if(pclk=0)pclk=PCLK;rUFCON0=0 x0;/UART 通道0 FIFO控制暫存器,除能FIFO r
34、UFCON1=0 x0;/UART 通道1 FIFO控制暫存器,除能FIFO rUFCON2=0 x0;/UART 通道2 FIFO控制暫存器,除能FIFO rUMCON0=0 x0;/UART 通道 0 MODEM控制暫存器,除能AFC rUMCON1=0 x0;/UART 通道 1 MODEM控制暫存器,除能AFC/=UART0相關暫存器設定=,8.4 UART串列通訊應用程式設計,rULCON0=0 x3;/UART線控制暫存器:Normal,No parity,1 stop,8 bits(8,N,1)rUCON0=0 x245;rUBRDIV0=(int)(pclk/16./baud+
35、0.5)-1);/UART鮑率除頻暫存器0,計算鮑率/=UART1相關暫存器設定=rULCON1=0 x3;rUCON1=0 x245;rUBRDIV1=(int)(pclk/16./baud+0.5)-1);/=UART2相關暫存器設定=rULCON2=0 x3;rUCON2=0 x245;rUBRDIV2=(int)(pclk/16./baud+0.5)-1);for(i=0;i100;i+);,8.4 UART串列通訊應用程式設計,Uart_Printf()副函式功能說明:將資料列印在DNW應用程式或是超級終端機上。相關程式範例,如下所列:void Uart_Printf(char*fm
36、t,.)va_list ap;char string256;va_start(ap,fmt);vsprintf(string,fmt,ap);Uart_SendString(string);/將字串列印在DNW應用程式或是超級終端機上 va_end(ap);void Uart_SendString(char*pt)while(*pt)Uart_SendByte(*pt+);,8.4 UART串列通訊應用程式設計,8.4 UART串列通訊應用程式設計,void Uart_SendByte(int data)if(whichUart=0)if(data=n)/如果是換行n ASC II碼 whil
37、e(!(rUTRSTAT0/其他的UART1與UART2 程式碼一樣,大綱,8.1 串列通訊的傳輸格式和電氣特性8.2 S3C2440的UART控制器8.3 S3C2440的UART相關暫存器8.4 UART串列通訊應用程式設計8.5 測試步驟8.6 8x8 LED點矩陣8.7 8X8LED點矩陣程式設計8.8 實驗步驟,為了測試本實驗的結果,我們需按照下列的步驟依序執行:兩條纜線連接:首先,用串列纜線將PC主機的COM1與開發平台的UART1連起來,再用USB纜線(A接頭-B接頭)將PC主機的USB埠與開發平台的USB裝置介面連起來,最後插上12V電源。開啟專案編譯:雖然在範例光碟片中,已經
38、包含了完整的程式範例-UART,但建議讀者還是重新開啟新的專案,並產生一個bin燒錄檔。,8.5 測試步驟,下載並執行:該步驟操作過程與上一章的6.3.2.1小節的執行完整的測試程式的步驟是類似的。觀察實驗結果是否與程式內容相符。實驗結果應該是在超級終端機上UART傳送燈不停的輪流點亮。若無法按照程式執行,檢查相關纜線是否正確連接,再完成此章的實驗練習。上面是關於該實驗髓涉及到的部分函式,完整的專案程式請參考附贈光碟目錄的ADSCH8UART檔案夾。,8.5 測試步驟,大綱,8.1 串列通訊的傳輸格式和電氣特性8.2 S3C2440的UART控制器8.3 S3C2440的UART相關暫存器8.
39、4 UART串列通訊應用程式設計8.5 測試步驟8.6 8x8 LED點矩陣8.7 8X8LED點矩陣程式設計8.8 實驗步驟,8.6 8x8 LED點矩陣,稍前的章節中,我們已應用LED即發光二極體作為是嵌入式系統的輸出設備。應用GPIO來連接單顆LED作為報警之顯示,故障指示或提示信號等。而由於LED是一個半導體設備,當電流通過它的時候,可以產生可見光。LED的發光強度與通過的電流強度成正比。此外,LED發光的顏色可以是紅,黃,綠或者藍色。因此,透過88點矩陣LED(由64個LED組成8行8列)即可實現多樣豐富的顯示。再者。利用這種LED 排成點矩陣型式即可構成大面積的顯示幕,用來顯示複雜
40、的字型或圖案,且點陣字幕亮度效果會比LCD具優勢,因而,廣泛用在顯示看板。,8.6 8x8 LED點矩陣,8.6.1 8x8 LED點矩陣原理利用總共64顆LED排成點矩陣型式,建構成大面積的顯示幕即可用來顯示複雜的字型或圖案,如圖8.6所示。,圖8.6、8x8 LED點矩陣外觀圖,8.6 8x8 LED點矩陣,8x8 LED點矩陣內部電路實體圖則如圖8.7所示。,圖8.7、8x8 LED點矩陣電路實體圖,8.6.2 8x8 LED點矩陣控制方式,將8個行接點(C1C8)與8個列接點(R1R8),規劃成8條資料線與8條掃描線。每次資料線送出1行編碼資料(1 Bytes),並使用掃描線,選擇其中
41、一行輸出,經短暫的延遲時間,送出下一行編碼資料,8行輪流顯示,利用眼睛視覺暫留效應,看到整個編碼圖形的顯示。,8.6.2 8x8 LED點矩陣控制方式,如圖8.8所示,為送出一組位元組(11011111b)顯示的圖式的示意圖。,圖8.8、8x8LED點矩陣控制示意圖,8.6.2 8x8 LED點矩陣控制方式,而其控制方式,如下所列:掃描輸出:由於點矩陣字幕需要多點輸出(8x8共需64個LED),因此需採用掃描輸出方式(程式),解碼出擴充接點(電路),以節省輸出埠的數量。輸出方式:共陽型與共陰型(輸出準位剛好相反)顯示圖案/字型編碼:單色字幕機,每個LED需要一個位元的資料。若以8x8點矩陣來說
42、,每列8個點則需要一個位元組資料,共計八列需要8 Bytes資料。因此,在程式中需設定陣列資料。,8.6.2 8x8 LED點矩陣控制方式,LED點矩陣驅動電路可分成列驅動電路與行驅動電路兩個部份,以列陽行陰點矩陣為例。其驅動電路方塊圖如圖8.9所示。列驅動電路提供電流,行驅動電路主要作沈入(Sink)電流以控制LED的亮與暗。行驅動電路一般使用能沈入較大電流的IC如2803、2003、74245與7407等,或是個別使用電晶體。當列的信號為低電位(0)時,PNP型電晶體導通提供電流,相對地,該列的LED亮與暗則由行驅動電路決定。而當列的信號為高電位(1)時PNP型電晶體截止切斷電流、相對該列
43、的LED全部皆暗。,8.6.2 8x8 LED點矩陣控制方式,圖8.9、列陽行陰的點矩陣驅動方塊圖,8.6.2 8x8 LED點矩陣控制方式,由於GPIO數目有限,因此,透過32-bit資料匯流排與位址匯流排的解碼即可使用32條的引線。在此,我們僅使用data0:15,並透過HC574栓鎖器來栓鎖與控制,並切成兩個部分。其中,data7:0是作為列驅動電路的控制,data15:8則是作為行驅動電路的控制,作為資料線以傳送字型碼。如圖8.10為相關的電路圖。此外,若是雙色的8x8 LED點矩陣來說,則需另外再提供一個行驅動的8-bit資料引線。而透過列共陽極,其行共陰極的8x8 LED點矩陣的架
44、構,我們需外部連接其推動的電晶體。如圖8.12所示,為8x8 LED點矩陣的共陽極的列驅動電路。,8.6.2 8x8 LED點矩陣控制方式,圖8.10、8x8 LED點矩陣控制電路示意圖,8.6.2 8x8 LED點矩陣控制方式,圖8.11、8x8 LED點矩陣的共陽極的列驅動電路,8.6.2 8x8 LED點矩陣控制方式,此外,如圖8.13所示,則為8x8 LED點矩陣的共陰極的行驅動電路。,圖8.12、8x8 LED點矩陣的共陰極的行驅動電路。,大綱,8.1 串列通訊的傳輸格式和電氣特性8.2 S3C2440的UART控制器8.3 S3C2440的UART相關暫存器8.4 UART串列通訊
45、應用程式設計8.5 測試步驟8.6 8x8 LED點矩陣8.7 8X8LED點矩陣程式設計8.8 實驗步驟,8.7 8X8LED點矩陣程式設計,以下,列出所需的各個相關的函數,並加以說明,88 LED點矩陣的位址。有別於前面兩個範例-LED與UART串列通訊,88 LED點矩陣電路是需透過CPLD來作解碼的動作,才可驅動88 LED點矩陣電路的資料工作。#defineLED8X8_Address*(volatile U16*)(0 x08001000)/nGCS1而其解碼的程式是燒錄在CPLD中。其中,關於8X8 LED點矩陣的控制邏輯程式是如下所列:assign LED8X8_CLK=!(!
46、nWE)如圖8.13所示的74HC574的邏輯電路圖。,8.7 8X8LED點矩陣程式設計,圖8.13、74HC574邏輯電路圖,8.7 8X8LED點矩陣程式設計,由上圖可見,CP(即為LED8X8_CLK)為時脈輸入。當OE為低電位,CP處於上升邊緣時,Q0-8 的資料就會更新,即Q0-8=D0-8。而當OE為低電位時,CP的時脈信號由nGCS1(晶片組選擇)和nWE(寫入致能)來決定。因此,運算元資料線BUF_DATA(015),參考下圖8.14:,8.7 8X8LED點矩陣程式設計,圖8.14、LED 8X8電路解碼位址,8.7 8X8LED點矩陣程式設計,在對0 x0800_0000
47、 到0 x1000_0000的位址,寫入資料時,S3C2440會產生晶片選擇擇信號,然後CPLD控制邏輯即產生8X8 LED點矩陣的時脈,驅動74HC574工作,並實現對8x8 LED點矩陣的控制。如圖8.15,為8x8 LED點矩陣的專案視窗圖。,圖8.15、8x8 LED點矩陣專案視窗圖,8.7 8X8LED點矩陣程式設計,88 LED點矩陣顯示函數void LED8X8_Display(U16*LED8X8,U32 d)參數說明:LED8X8:特定的顯示陣列指標 d:顯示維持的次數功能說明:顯示一個特定的陣列中的資料相關程式範例,如下所列:void LED8X8_Display(U16*
48、LED8X8,U32 d)U16 m;while(d-)for(m=0;m 8;m+)/行掃瞄 列資料 LED8X8_Address=(1(8+m),8.7 8X8LED點矩陣程式設計,實驗程式Test_LED88(void)功能說明:三組動態的8x8 LED矩陣顯示相關程式範例,如下所列:void Test_LED8X8(void)printf(S3C2440 8X8 LED test,press ESC key to exit!n);while(Uart_GetKey()!=ESC_KEY)LED8X8_Display(LED8X8_Disp1,30);LED8X8_Display(LED
49、8X8_Disp2,30);LED8X8_Display(LED8X8_Disp3,30);LED8X8_Address=0 xffff;/關閉LED點矩陣的顯示,8.7 8X8LED點矩陣程式設計,Main主函式相關程式範例,如下所列:void Main(void)PortInit();/S3C2440的GPIO初始化Uart_Select(1);/選擇串列1Uart_Init(0,115200);/串列傳輸速率115200Uart_Printf(test LED8X8 n);Test_LED8X8();上面是關於該實驗髓涉及到的部分函式,完整的專案程式請參考附贈光碟目錄的ADSCH88x8
50、LED檔案夾。,大綱,8.1 串列通訊的傳輸格式和電氣特性8.2 S3C2440的UART控制器8.3 S3C2440的UART相關暫存器8.4 UART串列通訊應用程式設計8.5 測試步驟8.6 8x8 LED點矩陣8.7 8X8LED點矩陣程式設計8.8 實驗步驟,8.8 實驗步驟,為了測試本實驗的結果,我們需按照下列的步驟依序執行:兩條纜線連接:首先,用串列纜線將PC主機的COM1與開發平台的UART1連起來,再用USB纜線(A接頭-B接頭)將PC主機的USB埠與開發平台的USB裝置介面連起來,最後插上12V電源。開啟專案編譯:雖然在範例光碟片中,已經包含了完整的程式範例-LED8x8,