版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第第5 5章章 串行通信接口串行通信接口SCISCI主要內(nèi)容主要內(nèi)容v5.1 5.1 異步串行通信的通用基礎(chǔ)知識異步串行通信的通用基礎(chǔ)知識v5.2 AW605.2 AW60的的SCISCI模塊的編程結(jié)構(gòu)模塊的編程結(jié)構(gòu)v5.3 AW605.3 AW60的的SCISCI構(gòu)件設(shè)計與測試構(gòu)件設(shè)計與測試v5.4 AW605.4 AW60的中斷源與第一個帶有中斷的編程的中斷源與第一個帶有中斷的編程實例實例5.1 異步串行通信的通用基礎(chǔ)知識異步串行通信的通用基礎(chǔ)知識5.1.1 5.1.1 串行通信的基本概念串行通信的基本概念 異步串行通信的格式異步串行通信的格式 SCI(standardSCI(standa
2、rd non-return-zero mark/space data non-return-zero mark/space data format)format) “ “標準不歸零傳號標準不歸零傳號/ /空號數(shù)據(jù)格式空號數(shù)據(jù)格式”通常采用通常采用NRZNRZ數(shù)據(jù)格式數(shù)據(jù)格式. .“不歸零不歸零”的最初含義是:用正、負電平表示的最初含義是:用正、負電平表示二進制值,不使用零電平。二進制值,不使用零電平。“mark/space”mark/space”即即“傳號傳號/ /空空號號”分別是表示兩種狀態(tài)的物理名稱,邏輯名稱記為分別是表示兩種狀態(tài)的物理名稱,邏輯名稱記為“1/0”1/0”。下圖給出了。下圖
3、給出了8 8位數(shù)據(jù)、無校驗情況的傳送格式位數(shù)據(jù)、無校驗情況的傳送格式 串行通信數(shù)據(jù)格式串行通信數(shù)據(jù)格式 串行通信的波特率串行通信的波特率 波特率單位是位波特率單位是位/ /秒,記為秒,記為bpsbps。通常情況下,波特率的單位。通常情況下,波特率的單位可以省略。通常使用的波特率有可以省略。通常使用的波特率有300300、600600、900900、12001200、18001800、24002400、48004800、96009600、1920019200、3840038400、5760057600、115200115200、128000128000等等 奇偶校驗奇偶校驗 字符奇偶校驗檢查(字
4、符奇偶校驗檢查(character parity checkingcharacter parity checking)稱為垂直)稱為垂直冗余檢查(冗余檢查( vertical redundancy checkingvertical redundancy checking,VRCVRC),它是每個),它是每個字符增加一個額外位使字符中字符增加一個額外位使字符中“1”1”的個數(shù)為奇數(shù)或偶數(shù)。的個數(shù)為奇數(shù)或偶數(shù)。 奇校驗:如果字符數(shù)據(jù)位中奇校驗:如果字符數(shù)據(jù)位中“1”1”的數(shù)目是偶數(shù),校驗位應(yīng)為的數(shù)目是偶數(shù),校驗位應(yīng)為“1”1”,如果,如果“1”1”的數(shù)目是奇數(shù),校驗位應(yīng)為的數(shù)目是奇數(shù),校驗位應(yīng)為“
5、0”0”。 偶校驗:如果字符數(shù)據(jù)位中偶校驗:如果字符數(shù)據(jù)位中“1”1”的數(shù)目是偶數(shù),則校驗位應(yīng)的數(shù)目是偶數(shù),則校驗位應(yīng)為為“0”0”,如果是奇數(shù)則為,如果是奇數(shù)則為“1”1” 串行通信的傳輸方式串行通信的傳輸方式 單工(單工(SimplexSimplex):數(shù)據(jù)傳送是單向的,一端為發(fā)送端,另一):數(shù)據(jù)傳送是單向的,一端為發(fā)送端,另一端為接收端。這種傳輸方式中,除了地線之外,只要一根數(shù)據(jù)線端為接收端。這種傳輸方式中,除了地線之外,只要一根數(shù)據(jù)線就可以了。有線廣播就是單工的就可以了。有線廣播就是單工的 全雙工(全雙工(Full-duplexFull-duplex):數(shù)據(jù)傳送是雙向的,且可以同時接)
6、:數(shù)據(jù)傳送是雙向的,且可以同時接收與發(fā)送數(shù)據(jù)。這種傳輸方式中,除了地線之外,需要兩根數(shù)據(jù)收與發(fā)送數(shù)據(jù)。這種傳輸方式中,除了地線之外,需要兩根數(shù)據(jù)線,站在任何一端的角度看,一根為發(fā)送線,另一根為接收線。線,站在任何一端的角度看,一根為發(fā)送線,另一根為接收線。一般情況下,一般情況下,MCUMCU的異步串行通信接口均是全雙工的的異步串行通信接口均是全雙工的 半雙工(半雙工(Half-duplexHalf-duplex):數(shù)據(jù)傳送也是雙向的,但是在這種):數(shù)據(jù)傳送也是雙向的,但是在這種傳輸方式中,除了地線之外,一般只有一根數(shù)據(jù)線。任何一個時傳輸方式中,除了地線之外,一般只有一根數(shù)據(jù)線。任何一個時刻,只
7、能由一方發(fā)送數(shù)據(jù),另一方接收數(shù)據(jù),不能同時收發(fā)。在刻,只能由一方發(fā)送數(shù)據(jù),另一方接收數(shù)據(jù),不能同時收發(fā)。在freescalefreescale的的HCS08HCS08系列系列MCUMCU中,監(jiān)控模式的通信就采用這種方式中,監(jiān)控模式的通信就采用這種方式5.1.2 RS-232RS-232總線標準總線標準 MCU MCU引腳一般輸入引腳一般輸入/ /輸出使用輸出使用TTLTTL電平,而電平,而TTLTTL電平的電平的“1”1”和和“0”0”的特征電壓分別為的特征電壓分別為2.4V2.4V和和0.4V0.4V,適用于板內(nèi)數(shù)據(jù)傳輸。,適用于板內(nèi)數(shù)據(jù)傳輸。為了使信號傳輸?shù)酶h,美國電子工業(yè)協(xié)會為了使信號
8、傳輸?shù)酶h,美國電子工業(yè)協(xié)會EIA(ElectronicEIA(Electronic Industry Association)Industry Association)制訂了串行物理接口標準制訂了串行物理接口標準RS-232CRS-232C。RS-232CRS-232C采用負邏輯,采用負邏輯,-3V-3V-15V-15V為邏輯為邏輯“1”1”,+3V+3V+15V+15V為邏為邏輯輯“0”0”。RS-232CRS-232C最大的傳輸距離是最大的傳輸距離是30m30m,通信速率一般低于,通信速率一般低于20Kbps20Kbps。 RS-232 RS-232接口,簡稱接口,簡稱“串口串口”,它主
9、要用于連接具有同,它主要用于連接具有同樣接口的室內(nèi)設(shè)備。目前幾乎所有計算機上的串行口都是樣接口的室內(nèi)設(shè)備。目前幾乎所有計算機上的串行口都是9 9芯接芯接口。下面給出了口。下面給出了9 9芯串行接口的排列位置,相應(yīng)引腳含義見下表。芯串行接口的排列位置,相應(yīng)引腳含義見下表。上圖為上圖為9 9芯串行接口排列芯串行接口排列引腳號引腳號功能功能引腳號引腳號功能功能1 1接收線信號檢測接收線信號檢測( (載波檢載波檢測測DCD)DCD)6 6數(shù)據(jù)通信設(shè)備準備就數(shù)據(jù)通信設(shè)備準備就緒緒(DSR)(DSR)2 2接收數(shù)據(jù)線接收數(shù)據(jù)線(RXD)(RXD)7 7請求發(fā)送請求發(fā)送(RTS)(RTS)3 3發(fā)送數(shù)據(jù)線發(fā)
10、送數(shù)據(jù)線(TXD)(TXD)8 8允許發(fā)送允許發(fā)送(CTS)(CTS)4 4數(shù)據(jù)終端準備就緒數(shù)據(jù)終端準備就緒(DTR)(DTR)9 9振鈴指示振鈴指示5 5信號地信號地(SG)(SG)9 9芯串行接口引腳含義表芯串行接口引腳含義表5.1.3 TTL5.1.3 TTL電平到電平到RS-232RS-232電平轉(zhuǎn)換電路電平轉(zhuǎn)換電路 具有具有SCISCI接口的接口的MCUMCU,一般具有發(fā)送引腳,一般具有發(fā)送引腳( (TxDTxD) )與接收引腳與接收引腳( (RxDRxD) ),不同公司或不同系列的,不同公司或不同系列的MCUMCU,使用的引腳縮寫名可能不,使用的引腳縮寫名可能不一致,但含義相同。一
11、致,但含義相同。SCISCI的外圍硬件電路,主要目的是將的外圍硬件電路,主要目的是將MCUMCU的的發(fā)送引腳發(fā)送引腳TxDTxD與接收引腳與接收引腳RxDRxD的的TTLTTL電平,通過電平,通過RS-232RS-232電平轉(zhuǎn)換電平轉(zhuǎn)換芯片轉(zhuǎn)換為芯片轉(zhuǎn)換為RS-232RS-232電平。下圖給出一個基本電平。下圖給出一個基本SCISCI電平轉(zhuǎn)換電路電平轉(zhuǎn)換電路及芯片及芯片MAX232MAX232引腳圖引腳圖MAX232MAX232引腳引腳 串行通信接口電平轉(zhuǎn)換電路串行通信接口電平轉(zhuǎn)換電路uMAX232MAX232芯片進行電平轉(zhuǎn)換基本原理是:芯片進行電平轉(zhuǎn)換基本原理是:l發(fā)送過程:發(fā)送過程:MCU
12、MCU的的TXDTXD(TTLTTL電平)經(jīng)過電平)經(jīng)過MAX232MAX232的的1111腳腳(T1IN)(T1IN)送到送到MAX232MAX232內(nèi)部,在內(nèi)部內(nèi)部,在內(nèi)部TTLTTL電平被電平被“提升提升”為為232232電平,通過電平,通過1414腳腳(T1OUT)(T1OUT)發(fā)送出去發(fā)送出去l接收過程:外部接收過程:外部232232電平經(jīng)過電平經(jīng)過MAX232MAX232的的1313腳(腳(R1INR1IN)進入)進入到到MAX232MAX232的內(nèi)部,在內(nèi)部的內(nèi)部,在內(nèi)部232232電平被電平被“降低降低”為為TTLTTL電平,電平,經(jīng)過經(jīng)過1212腳(腳(R1OUTR1OUT)
13、送到)送到MCUMCU的的RXDRXD,進入,進入MCUMCU內(nèi)內(nèi)組別組別TTLTTL電平引腳電平引腳方向方向典型接口典型接口232232電平引腳電平引腳方向方向典型接口典型接口1 11111(T1INT1IN)1212(R1OUTR1OUT)輸入輸入輸出輸出接接MCUMCU的的TXDTXD接接MCUMCU的的RXDRXD13131414輸入輸入輸出輸出接到接到9 9芯接口的芯接口的2 2腳腳RXDRXD接到接到9 9芯接口的芯接口的3 3腳腳TXDTXD2 21010(T2INT2IN)9 9(R2OUTR2OUT)輸入輸入輸出輸出接接MCUMCU的的TXDTXD接接MCUMCU的的RXDR
14、XD8 87 7輸入輸入輸出輸出接到接到9 9芯接口的芯接口的2 2腳腳RXDRXD接到接到9 9芯接口的芯接口的3 3腳腳TXDTXDMAX232MAX232芯片輸入輸出引腳分類與基本接法芯片輸入輸出引腳分類與基本接法5.1.4 5.1.4 串行通信編程模型串行通信編程模型 從基本原理角度看,串行通信接口從基本原理角度看,串行通信接口SCISCI的主要功能是:接收的主要功能是:接收時,把外部的單線輸入的數(shù)據(jù)變成一個字節(jié)的并行數(shù)據(jù)送入時,把外部的單線輸入的數(shù)據(jù)變成一個字節(jié)的并行數(shù)據(jù)送入MCUMCU內(nèi)部;發(fā)送時,把需要發(fā)送的一個字節(jié)的并行數(shù)據(jù)轉(zhuǎn)換為單線內(nèi)部;發(fā)送時,把需要發(fā)送的一個字節(jié)的并行數(shù)據(jù)
15、轉(zhuǎn)換為單線輸出輸出接受引腳接受引腳RxD 發(fā)送引腳發(fā)送引腳TxD發(fā)送移位寄存發(fā)送移位寄存器器接受移位寄存器接受移位寄存器SCISCI數(shù)據(jù)寄存器數(shù)據(jù)寄存器MCUMCU內(nèi)部總線內(nèi)部總線SCI控制寄控制寄存器存器SCISCI狀態(tài)狀態(tài)寄存器寄存器SCI波特率波特率寄存器寄存器Slide 11概況 MC9S08AW60系列包含兩個獨立的串行通信接口(SCI,Serial Communication Interface)模塊,分別和端口E、端口C的管腳復(fù)用。每個SCI模塊特性 具有的獨立的可編程波特率生成器 支持低于115.2kbaud的多種標準波特率 采用雙緩沖結(jié)構(gòu) 接收器和發(fā)送器還具有硬件奇偶校驗、接
16、收喚醒和雙緩沖。 可編程的8位或9位字符長度??蛇x的13位暫停符。支持多種中斷驅(qū)動或輪詢操作 SCI還具有多種工作模式:8位和9位數(shù)據(jù)模式、Stop模式、回路模式和單線模式等5.2 5.2 AW60AW60的的SCISCI模塊的編程結(jié)構(gòu)模塊的編程結(jié)構(gòu)v內(nèi)部結(jié)構(gòu)內(nèi)部結(jié)構(gòu)波特率生成器Slide 12SCI波特率=BUSCLK/(SBR12:0 x16)其中,SBR12:0由SCI波特率寄存器SCIxBDH/L設(shè)定5.2 5.2 AW60AW60的的SCISCI模塊的編程結(jié)構(gòu)模塊的編程結(jié)構(gòu)v內(nèi)部結(jié)構(gòu) 發(fā)送器Slide 13通過設(shè)置SCIxC2中的TE位為1來允許發(fā)送器; 通過寫SCI數(shù)據(jù)寄存器SCI
17、xD可以把數(shù)據(jù)存儲到發(fā)送數(shù)據(jù)緩沖器中。5.2 5.2 AW60AW60的的SCISCI模塊的編程結(jié)構(gòu)模塊的編程結(jié)構(gòu)v內(nèi)部結(jié)構(gòu)內(nèi)部結(jié)構(gòu)接收器Slide 14通過設(shè)置SCIxC2中的RE位為1來允許接收器; RDRF接收數(shù)據(jù)滿標志。5.2 5.2 AW60AW60的的SCISCI模塊的編程結(jié)構(gòu)模塊的編程結(jié)構(gòu)5.2 AW60AW60的的SCISCI模塊的編程結(jié)構(gòu)模塊的編程結(jié)構(gòu) 從程序員角度看,涉及從程序員角度看,涉及SCISCI的有的有8 8個個8 8位寄存器,其中位寄存器,其中2 2個波特個波特率寄存器,率寄存器,1 1個數(shù)據(jù)寄存器,個數(shù)據(jù)寄存器,3 3個控制寄存器,個控制寄存器,2 2個狀態(tài)寄存
18、器,個狀態(tài)寄存器,只要理解和掌握這只要理解和掌握這8 8個寄存器的用法,就可以進行個寄存器的用法,就可以進行SCISCI編程編程寄存器寄存器名稱名稱縮寫縮寫地址地址訪問訪問權(quán)限權(quán)限基本功基本功能能波特率寄存器SCI1BDH(SCI2BDH)0 x0038(0 x0040)讀/寫設(shè)置波特率SCI1BDL(SCI2BDL)0 x0039(0 x0041)數(shù)據(jù)寄存器SCI1D(SCI2D)0 x003F(0 x0047)收發(fā)數(shù)據(jù)控制寄存器SCI1C1(SCI2C1)0 x003A(0 x0042)讀/寫設(shè)置傳輸格式,中斷使能SCI1C2(SCI2C2)0 x003B(0 x0043)SCI1C3(S
19、CI2C3)0 x003E(0 x0046)讀/寫狀態(tài)寄存器SCI1S1(SCI2S1)0 x003C(0 x0044) 只讀中斷標志,發(fā)送與接收狀態(tài)SCI1S2(SCI2S2)0 x003D(0 x0045)AW60AW60的的SCISCI模塊寄存器簡況模塊寄存器簡況 SCISCI波特率計算公式與波特率計算公式與SCISCI波特率寄存器波特率寄存器l SCISCI波特率波特率= f= fBUSCLKBUSCLK/(16/(16BR)BR),其中,其中f fBUSCLKBUSCLK為內(nèi)部總線頻率為內(nèi)部總線頻率 SCISCI數(shù)據(jù)寄存器數(shù)據(jù)寄存器 SCISCI控制寄存器控制寄存器l SCI SCI
20、 控制寄存器控制寄存器1 1(SCIxC1SCIxC1)l SCI SCI 控制寄存器控制寄存器2 2(SCIxC2SCIxC2)l SCI SCI 控制寄存器控制寄存器3 3(SCIxC3SCIxC3) SCISCI狀態(tài)寄存器狀態(tài)寄存器l SCISCI狀態(tài)寄存器狀態(tài)寄存器1 1(SCIxS1SCIxS1)l SCISCI狀態(tài)寄存器狀態(tài)寄存器2 2(SCIxS2SCIxS2)SCI波特率寄存器(SCIxBDH,SCIxBDL) Slide 179.3 9.3 內(nèi)部寄存器內(nèi)部寄存器SCI控制寄存器1(SCIxC1) Slide 189.3 9.3 內(nèi)部寄存器內(nèi)部寄存器SCI控制寄存器1(SCIx
21、C1) Slide 199.3 9.3 內(nèi)部寄存器內(nèi)部寄存器SCI控制寄存器2(SCIxC2) Slide 209.3 9.3 內(nèi)部寄存器內(nèi)部寄存器SCI控制寄存器2(SCIxC2) Slide 219.3 9.3 內(nèi)部寄存器內(nèi)部寄存器SCI控制寄存器3(SCIxC3) Slide 229.3 9.3 內(nèi)部寄存器內(nèi)部寄存器SCI控制寄存器3(SCIxC3) Slide 239.3 9.3 內(nèi)部寄存器內(nèi)部寄存器SCI狀態(tài)寄存器1(SCIxS1) Slide 249.3 9.3 內(nèi)部寄存器內(nèi)部寄存器SCI狀態(tài)寄存器1(SCIxS1) Slide 259.3 9.3 內(nèi)部寄存器內(nèi)部寄存器SCI狀態(tài)寄
22、存器2(SCIxS2) Slide 269.3 9.3 內(nèi)部寄存器內(nèi)部寄存器SCI數(shù)據(jù)寄存器(SCIxD)此寄存器實際上是兩個獨立的寄存器:SCI接收數(shù)據(jù)寄存器和SCI發(fā)送數(shù)據(jù)寄存器。讀操作返回只讀型接收緩沖器中的內(nèi)容,而寫操作把數(shù)據(jù)寫入只寫型發(fā)送數(shù)據(jù)緩沖器中。對此寄存器的讀寫操作還和SCI狀態(tài)標志位的自動清零機制相關(guān)聯(lián)。 Slide 279.3 9.3 內(nèi)部寄存器內(nèi)部寄存器9.4 SCI9.4 SCI應(yīng)用舉例應(yīng)用舉例vSCISCI使用設(shè)置使用設(shè)置 根據(jù)通信雙方的波特率,設(shè)定SCI波特率寄存器SCIxBD中分頻因子。需要先寫SCIxBDH,再寫SCIxBDL。 更新SCI控制寄存器1(SCIx
23、C1),設(shè)定環(huán)路模式、8位還是9位數(shù)據(jù)位、是否允許硬件奇偶校驗等,如無特別需求,可取其缺省值而不做設(shè)定。 更新SCI控制寄存器2(SCIxC2)來允許發(fā)送、接收,以及是否允許發(fā)送中斷和接收中斷等。 如需要,更新SCI控制寄存器3(SCIxC3),再對發(fā)送數(shù)據(jù)是否取反、是否允許錯誤中斷等進行設(shè)定。Slide 289.4 SCI9.4 SCI應(yīng)用舉例應(yīng)用舉例vSCISCI使用設(shè)置使用設(shè)置 允許SCI發(fā)送之后,通過讀SCI狀態(tài)寄存器1(SCIxS1)判斷其中的TDRE位是否為1來判斷發(fā)送數(shù)據(jù)寄存器是否為空,當發(fā)送數(shù)據(jù)寄存器為空時,可以寫發(fā)送數(shù)據(jù)到發(fā)送數(shù)據(jù)寄存器SCIxD。 寫發(fā)送數(shù)據(jù)到SCIxD之后
24、,通過查詢或中斷方式判斷SCIxS1中的發(fā)送完成標志位TC是否為1來判斷當前數(shù)據(jù)是否發(fā)送完成,當前字符發(fā)送完成后,可以回到上一步繼續(xù)下一個數(shù)據(jù)的發(fā)送。 允許SCI接收之后,通過查詢或中斷方式判斷SCIxS1中的接收數(shù)據(jù)寄存器滿標志位RDRF是否為1來判斷是否接收到了新數(shù)據(jù),當接收到新數(shù)據(jù)時,讀寄存器SCIxD來保存新數(shù)據(jù),之后還要通過清零RDRF的操作清零RDRF標志位。Slide 295.3 AW60AW60的的SCISCI構(gòu)件設(shè)計與測試構(gòu)件設(shè)計與測試5.3.1 SCI5.3.1 SCI構(gòu)件設(shè)計概述構(gòu)件設(shè)計概述 以以SCISCI的初始化、接收和發(fā)送三種基本操作為例,來說明實現(xiàn)構(gòu)件的初始化、接
25、收和發(fā)送三種基本操作為例,來說明實現(xiàn)構(gòu)件化的全過程化的全過程 實現(xiàn)構(gòu)件化編程的實現(xiàn)構(gòu)件化編程的SCISCI軟件模塊應(yīng)當具有以下幾個特點:軟件模塊應(yīng)當具有以下幾個特點:lSCISCI模塊是最底層的構(gòu)件,它主要向上提供三種服務(wù),分模塊是最底層的構(gòu)件,它主要向上提供三種服務(wù),分別是別是SCISCI模塊的初始化、接收單個字節(jié)和發(fā)送單個字節(jié),模塊的初始化、接收單個字節(jié)和發(fā)送單個字節(jié),向下則直接訪問模塊寄存器,實現(xiàn)對硬件的直接操作。另向下則直接訪問模塊寄存器,實現(xiàn)對硬件的直接操作。另外,從現(xiàn)實使用角度出發(fā),它還需要封裝接收外,從現(xiàn)實使用角度出發(fā),它還需要封裝接收N N個字節(jié)和個字節(jié)和發(fā)送發(fā)送N N個字節(jié)的
26、子功能函數(shù)個字節(jié)的子功能函數(shù)lSCISCI模塊在軟件上對應(yīng)模塊在軟件上對應(yīng)1 1個個SCI.cSCI.c程序源代碼文件和程序源代碼文件和1 1個個SCI.hSCI.h頭文件,當需要對它進行移植時,大多數(shù)情況下只頭文件,當需要對它進行移植時,大多數(shù)情況下只需簡單拷貝這兩個文件即可,無需對源代碼文件和頭文件需簡單拷貝這兩個文件即可,無需對源代碼文件和頭文件進行修改,只有當實施不同芯片之間的移植時,才需要修進行修改,只有當實施不同芯片之間的移植時,才需要修改頭文件中與硬件相關(guān)的宏定義改頭文件中與硬件相關(guān)的宏定義l上層構(gòu)件或軟件在使用該構(gòu)件時,嚴格禁止通過全局變量上層構(gòu)件或軟件在使用該構(gòu)件時,嚴格禁止
27、通過全局變量來傳遞參數(shù),所有的數(shù)據(jù)傳遞都直接通過函數(shù)的形式參數(shù)來傳遞參數(shù),所有的數(shù)據(jù)傳遞都直接通過函數(shù)的形式參數(shù)來接收來接收 SCISCI初始化:初始化:lvoid SCIInit(uint8 SCINo, uint8 sysclk, uint16 baud) 通過其中一個串口發(fā)送一個字節(jié):通過其中一個串口發(fā)送一個字節(jié):lvoid SCISend1(uint8 SCINo, uint8 ch) 通過其中一個串口接收單個字節(jié):通過其中一個串口接收單個字節(jié):luint8 SCIRe1(uint8 SCINo, uint8 *p) 通過其中一個串口發(fā)送通過其中一個串口發(fā)送N N個字節(jié):個字節(jié):lvo
28、id SCISendN(uint8 SCINo, uint8 n, uint8 ch) 通過其中一個串口接收通過其中一個串口接收N N個字節(jié):個字節(jié):luint8 SCIReN(uint8 SCINo, uint8 n, uint8 ch)5.3.2 SCI5.3.2 SCI構(gòu)件的頭文件構(gòu)件的頭文件SCI.hSCI.h頭文件頭文件SCI.hSCI.h中的內(nèi)容可分為兩個主要的部分,中的內(nèi)容可分為兩個主要的部分,它們分別是它們分別是5 5個函數(shù)原型的聲明和外設(shè)模塊寄存器相個函數(shù)原型的聲明和外設(shè)模塊寄存器相關(guān)信息的定義。前者給出了本關(guān)信息的定義。前者給出了本SCISCI構(gòu)件對上層構(gòu)件或構(gòu)件對上層構(gòu)件
29、或軟件所提供的接口函數(shù),而后者則指明了本軟件所提供的接口函數(shù),而后者則指明了本“元構(gòu)元構(gòu)件件”與具體硬件相關(guān)的信息與具體硬件相關(guān)的信息5.3.3 SCI5.3.3 SCI構(gòu)件的構(gòu)件的C C語言源程序文件語言源程序文件SCI.cSCI.cSCISCI構(gòu)件的初始化功能函數(shù):構(gòu)件的初始化功能函數(shù):SCIInitSCIInitSCISCI構(gòu)件單字節(jié)發(fā)送功能函數(shù):構(gòu)件單字節(jié)發(fā)送功能函數(shù):SCISend1SCISend1SCISCI構(gòu)件的單字節(jié)接收功能函數(shù):構(gòu)件的單字節(jié)接收功能函數(shù):SCIRe1SCIRe1SCISCI構(gòu)件的多字節(jié)發(fā)送功能函數(shù):構(gòu)件的多字節(jié)發(fā)送功能函數(shù):SCISendNSCISendNSC
30、ISCI構(gòu)件的多字節(jié)接收功能函數(shù):構(gòu)件的多字節(jié)接收功能函數(shù):SCIReNSCIReNSCISCI構(gòu)件的字符串接收功能函數(shù):構(gòu)件的字符串接收功能函數(shù):SCISendStringSCISendString5.3.4 SCI5.3.4 SCI構(gòu)件的測試工程構(gòu)件的測試工程 SCI1SCI1模塊首先向模塊首先向PCPC機發(fā)送字符串,然后等待接收機發(fā)送字符串,然后等待接收PCPC機從串機從串口發(fā)送來的數(shù)據(jù),若成功接收到口發(fā)送來的數(shù)據(jù),若成功接收到1 1個數(shù)據(jù),則立即將該數(shù)據(jù)個數(shù)據(jù),則立即將該數(shù)據(jù)回發(fā)給回發(fā)給PCPC機,隨后繼續(xù)等待接收機,隨后繼續(xù)等待接收1 1個數(shù)據(jù)并回發(fā),如此循環(huán)個數(shù)據(jù)并回發(fā),如此循環(huán)串
31、口調(diào)試工具軟件界面串口調(diào)試工具軟件界面串行通信收發(fā)測試軟件界面串行通信收發(fā)測試軟件界面5.4 AW605.4 AW60的中斷源與第一個帶有中斷的編程實例的中斷源與第一個帶有中斷的編程實例5.4.1 5.4.1 中斷處理的相關(guān)基本概念中斷處理的相關(guān)基本概念 中斷與異常的含義中斷與異常的含義 異常是異常是CPUCPU強行從正常的程序執(zhí)行切換到由強行從正常的程序執(zhí)行切換到由某些內(nèi)部或外部條某些內(nèi)部或外部條 件所要求的處理任務(wù)件所要求的處理任務(wù)上,這些任務(wù)是上,這些任務(wù)是優(yōu)于優(yōu)于CPUCPU正在執(zhí)行任務(wù)正在執(zhí)行任務(wù)的。的。 外部條件:外設(shè)、硬件斷點請求、訪問錯誤和復(fù)位等;外部條件:外設(shè)、硬件斷點請求、
32、訪問錯誤和復(fù)位等; 內(nèi)部條件:指令不對界錯誤、違反特權(quán)級和跟蹤內(nèi)部條件:指令不對界錯誤、違反特權(quán)級和跟蹤 通常將硬件復(fù)位視作一種具有最高優(yōu)先級的異常;通常將硬件復(fù)位視作一種具有最高優(yōu)先級的異常; 來自來自CPUCPU外圍設(shè)備的強行任務(wù)切換請求外圍設(shè)備的強行任務(wù)切換請求謂之謂之中斷中斷 中斷服務(wù)例程中斷服務(wù)例程ISRISR ISR(InterruptISR(Interrupt Service Routine): Service Routine):即中斷服務(wù)子程序即中斷服務(wù)子程序5.4 AW605.4 AW60的中斷源與第一個帶有中斷的編程實例的中斷源與第一個帶有中斷的編程實例5.4.1 5.4.
33、1 中斷處理的相關(guān)基本概念中斷處理的相關(guān)基本概念 中斷源與中斷向量表中斷源與中斷向量表 中斷源:引起中斷源:引起CPUCPU產(chǎn)生中斷的外部器件;產(chǎn)生中斷的外部器件; 中斷向量表:通常中斷向量表:通常CPUCPU有多個中斷源,每個中斷源對應(yīng)有多個中斷源,每個中斷源對應(yīng) 一個一個ISR,ISR,將這些將這些ISRISR的開始地址的開始地址( (中斷向量地址中斷向量地址) )放在放在 一段連續(xù)的存儲區(qū)域內(nèi),此存儲區(qū)稱之中斷向量表一段連續(xù)的存儲區(qū)域內(nèi),此存儲區(qū)稱之中斷向量表 中斷向量表實際是一個指針數(shù)組,內(nèi)容是中斷向量表實際是一個指針數(shù)組,內(nèi)容是ISRISR的地址的地址 中斷優(yōu)先級中斷優(yōu)先級5.4 A
34、W605.4 AW60的中斷源與第一個帶有中斷的編程實例的中斷源與第一個帶有中斷的編程實例5.4.1 5.4.1 中斷處理的相關(guān)基本概念中斷處理的相關(guān)基本概念 可屏蔽中斷與不可屏蔽中斷可屏蔽中斷與不可屏蔽中斷 根據(jù)中斷是否可以通過程序設(shè)置為響應(yīng)與否。根據(jù)中斷是否可以通過程序設(shè)置為響應(yīng)與否。 中斷處理的一般過程中斷處理的一般過程 1 1、保存現(xiàn)場、保存現(xiàn)場:CPU:CPU內(nèi)部寄存器的內(nèi)容保存堆棧中;內(nèi)部寄存器的內(nèi)容保存堆棧中; 2 2、獲取向量號并獲得中斷向量地址;、獲取向量號并獲得中斷向量地址; 3 3、根據(jù)中斷向量地址訪問向量表,從向量表中取得、根據(jù)中斷向量地址訪問向量表,從向量表中取得IS
35、RISR的首地的首地 址,裝入址,裝入PC;PC; 4 4、執(zhí)行、執(zhí)行ISRISR; 5 5、中斷返回:從堆棧中恢復(fù)、中斷返回:從堆棧中恢復(fù)CPUCPU內(nèi)部寄存器的內(nèi)容。內(nèi)部寄存器的內(nèi)容。5.4.2 S08CPU5.4.2 S08CPU的中斷實現(xiàn)過程的中斷實現(xiàn)過程 堆棧的使用堆棧的使用 響應(yīng)中斷時響應(yīng)中斷時CPUCPU自動保存自動保存PCPC、 X X、A A、CCRCCR至堆棧中至堆棧中 S08CPUS08CPU的中斷過程的詳細說明的中斷過程的詳細說明 中斷的關(guān)閉與開啟方法中斷的關(guān)閉與開啟方法 中斷的處理過程一般為:中斷的處理過程一般為: 關(guān)中斷、保護現(xiàn)場、關(guān)中斷、保護現(xiàn)場、 執(zhí)行中斷服務(wù)程
36、序、執(zhí)行中斷服務(wù)程序、 恢復(fù)現(xiàn)場、開中斷等恢復(fù)現(xiàn)場、開中斷等中斷過程中斷過程CPUCPU中寄存器進出棧情況中寄存器進出棧情況5.4.2 S08CPU5.4.2 S08CPU的中斷實現(xiàn)過程的中斷實現(xiàn)過程 S08CPUS08CPU的中斷過程的詳細說明的中斷過程的詳細說明當CPU接收到一個有效的中斷請求之后,先執(zhí)行完當前正在執(zhí)行的指令,然后按照下面順序自動響應(yīng)中斷: 保存CPU寄存器到堆棧中,注意對H寄存器的保護; 設(shè)置CCR中的I位為1,屏蔽將來的中斷; 讀取正在請求中的優(yōu)先級最高的中斷源的中斷向量,從相應(yīng)的中斷向量地址取出中斷向量送到PC; 執(zhí)行ISR,直至執(zhí)行RTI返回,依次從堆棧中恢復(fù)CPU
37、寄存器的內(nèi)容,返回原來的斷點處繼續(xù)執(zhí)行 若允許中斷嵌套,則在ISR中可用CLI指令開中 5.4.3 AW605.4.3 AW60的中斷源與中斷向量表的中斷源與中斷向量表 AW60 AW60有有2626個中斷源,按優(yōu)先級從高到低的順序分別是:個中斷源,按優(yōu)先級從高到低的順序分別是:復(fù)位中斷(復(fù)位中斷(1 1個)、個)、SWISWI指令中斷(指令中斷(1 1個)、個)、 引腳中斷(引腳中斷(1 1個)、個)、低電壓檢測中斷(低電壓檢測中斷(1 1個)、個)、ICGICG中斷(中斷(1 1個)、定時器中斷(個)、定時器中斷(1010個)、個)、SPISPI中斷(中斷(1 1個)、個)、SCISCI中
38、斷(中斷(6 6個)、鍵盤輸入中斷(個)、鍵盤輸入中斷(1 1個)、個)、ADCADC轉(zhuǎn)換完成中斷(轉(zhuǎn)換完成中斷(1 1個)、個)、I2CI2C中斷(中斷(1 1個)和實時中個)和實時中斷(斷(1 1個)。個)。2626個中斷源只有個中斷源只有1818個中斷向量,有的是幾個中斷個中斷向量,有的是幾個中斷源使用同一個中斷向量源使用同一個中斷向量Slide 415.4.3 AW605.4.3 AW60的中斷源與中斷向量表的中斷源與中斷向量表5.4.4 AW605.4.4 AW60的中斷編程方法的中斷編程方法 CWCW環(huán)境下使用環(huán)境下使用AW60AW60芯片中斷的步驟是:芯片中斷的步驟是:l 在在m
39、ain.cmain.c中,依照中,依照“關(guān)總中斷關(guān)總中斷開模塊中斷開模塊中斷開總中斷開總中斷”的順的順序打開模塊中斷;序打開模塊中斷;l 在在isr.cisr.c文件中,編寫中斷服務(wù)程序,修改中斷向量表文件中,編寫中斷服務(wù)程序,修改中斷向量表 為了方便代碼移植,在為了方便代碼移植,在Includes.hIncludes.h文件中做了如下定義:文件中做了如下定義:l #define #define EnableInterruptsEnableInterrupts() () asm(CLIasm(CLI) /) /開放總中斷開放總中斷l(xiāng) #define #define DisableInterru
40、ptsDisableInterrupts() () asm(SEIasm(SEI) /) /禁止總中斷禁止總中斷 AW60AW60的中斷編程的可概括為下述的中斷編程的可概括為下述3 3個步驟:個步驟:l 新建(或者復(fù)制)一個新建(或者復(fù)制)一個isr.cisr.c文件,并加入工程中文件,并加入工程中l(wèi) 定義中斷向量表(復(fù)制定義中斷向量表(復(fù)制isr.cisr.c的應(yīng)修改中斷向量表)的應(yīng)修改中斷向量表)l 定義定義ISRISR并在中斷向量表中填入相應(yīng)并在中斷向量表中填入相應(yīng)ISRISR的名稱的名稱5.4.5 AW605.4.5 AW60的中斷編程示例的中斷編程示例 以以SCI1SCI1接收中斷為
41、例,實現(xiàn)以下功能:主程序每隔接收中斷為例,實現(xiàn)以下功能:主程序每隔1 1秒秒讓讓SCI1SCI1模塊向模塊向PCPC機發(fā)送用于握手的字符串機發(fā)送用于握手的字符串“Hello! “Hello! World!”World!”;同時,串口等待接收從;同時,串口等待接收從PCPC機發(fā)來的數(shù)據(jù),一旦接機發(fā)來的數(shù)據(jù),一旦接到數(shù)據(jù),馬上將該數(shù)據(jù)回發(fā)給到數(shù)據(jù),馬上將該數(shù)據(jù)回發(fā)給PCPC機。串口接收程序使用中斷機。串口接收程序使用中斷來實現(xiàn),中斷處理程序執(zhí)行完畢后,又回到主程序,繼續(xù)每來實現(xiàn),中斷處理程序執(zhí)行完畢后,又回到主程序,繼續(xù)每隔隔1 1秒鐘向秒鐘向PCPC機發(fā)送一遍機發(fā)送一遍“Hello! World
42、!”“Hello! World!”4.4 4.4 外部引腳中斷外部引腳中斷( (IRQIRQ) )v中斷優(yōu)先中斷優(yōu)先4.4 4.4 外部引腳中斷外部引腳中斷( (IRQIRQ) )vIRQIRQ外部引腳中斷外部引腳中斷 出現(xiàn)正/負脈沖 發(fā)生IRQ中斷vIRQIRQ內(nèi)部結(jié)構(gòu)內(nèi)部結(jié)構(gòu) IRQ中斷由外部中斷狀態(tài)和控制寄存器IRQSC管理: IRQPE位允許/禁止IRQ管腳功能:1=允許;0禁止 IRQEDG位選定邊沿極性 0下降沿或下降沿和低電平觸發(fā) 1上降沿或上升沿和高電平觸發(fā)Slide 463.6 3.6 外部管腳中斷外部管腳中斷(IRQ)(IRQ)vIRQIRQ內(nèi)部結(jié)構(gòu)內(nèi)部結(jié)構(gòu) IRQ中斷由外
43、部中斷狀態(tài)和控制寄存器IRQSC管理: IRQMOD設(shè)定檢測模式 0僅僅在下降沿或上升沿產(chǎn)生IRQ事件 1在下降沿和低點平或者在上升沿和高電平產(chǎn)生IRQ事件 IRQIE允許/禁止IRQ中斷:1=允許;0禁止Slide 473.6 3.6 外部管腳中斷外部管腳中斷(IRQ)(IRQ)vIRQIRQ內(nèi)部結(jié)構(gòu)內(nèi)部結(jié)構(gòu) IRQ中斷由外部中斷狀態(tài)和控制寄存器IRQSC管理: IRQF 只讀標志位,指示是否有IRQ事件發(fā)生:0無;1有 IRQACK 只寫位,向IRQACK位寫1以清IRQF位為0,寫0既無意義也無效果,讀總返回0。Slide 483.6 3.6 外部管腳中斷外部管腳中斷(IRQ)(IRQ)
44、vIRQIRQ寄存器寄存器 Slide 493.6 3.6 外部管腳中斷外部管腳中斷(IRQ)(IRQ)4.4 4.4 外部引腳中斷外部引腳中斷( (IRQIRQ) )vIRQIRQ內(nèi)部結(jié)構(gòu)內(nèi)部結(jié)構(gòu)允許允許/禁止禁止IRQ引腳功能引腳功能1允許,允許,0禁止禁止選定邊緣極性選定邊緣極性1上升沿或高電平,上升沿或高電平,0下降沿或低電平下降沿或低電平設(shè)定檢測模式設(shè)定檢測模式1下降沿和低或上升沿和高下降沿和低或上升沿和高0僅在下降沿或上升沿僅在下降沿或上升沿允許允許/禁止禁止IRQ1允許,允許,0禁止禁止只寫位,寫只寫位,寫1清清IRQF為為0,寫,寫0無意義無意義只讀標志,指示是否只讀標志,指示
45、是否IRQ事件發(fā)生事件發(fā)生4.4 4.4 外部引腳中斷外部引腳中斷( (IRQIRQ) )v應(yīng)用舉例一應(yīng)用舉例一 當觸發(fā)IRQ引腳時,點亮或熄滅一個LED并使BEEPER關(guān)閉或/發(fā)出聲音 采用下降沿觸發(fā)代碼分析代碼分析#include /* for EnableInterrupts macro */#include derivative.h /* include peripheral declarations */觸發(fā)引腳觸發(fā)引腳IRQ,點亮或熄滅,點亮或熄滅D5/=/函數(shù)名函數(shù)名:Init_IRQ /功能功能:初始化外部中斷引腳初始化外部中斷引腳 /=void Init_IRQ(void)I
46、RQSC_IRQMOD=0; /0:邊沿方式邊沿方式;1:電平方式電平方式IRQSC_IRQIE=1; /0:中斷使能;:中斷使能;1:禁止中斷:禁止中斷IRQSC_IRQPE=1; /1:中斷引腳使能;:中斷引腳使能;0:普通:普通IOIRQSC_IRQEDG=0; /下降沿或低電平信號有效下降沿或低電平信號有效void main(void)Init_IRQ(); EnableInterrupts; /* enable interrupts */ /* include your code here */ PTDDD_PTDDD5=1; PTBDD=0 xFF; for(;) _RESET_W
47、ATCHDOG(); /* feeds the dog */ /* loop forever */ /* please make sure that you never leave main */Interrupt 2 void IRQ_ISR(void) if(IRQSC & 0 x08)=0 x08) IRQSC_IRQACK=1;/清除外部中斷標志位清除外部中斷標志位PTDD_PTDD5=PTDD_PTDD5;/點亮或熄滅點亮或熄滅D5 PTBD_PTBD6= PTBD_PTBD6 4.4 4.4 外部引腳中斷外部引腳中斷( (IRQIRQ) )v應(yīng)用舉例二應(yīng)用舉例二 主程序為流水燈 當
48、觸發(fā)IRQ引腳時,使BEEPER發(fā)出3m時間的聲音 采用下降沿觸發(fā)#include /* for EnableInterrupts macro */#include derivative.h /* include peripheral declarations */void DelayMS(uint x)uint t;while(x-) for(t=0;t300;t+);void Init_IRQ(void)IRQSC_IRQMOD=0;/0:邊沿方式邊沿方式;1:電平方式電平方式IRQSC_IRQIE=1;/0:中斷使能;:中斷使能;1:禁止中斷:禁止中斷IRQSC_IRQPE=1;/1:中斷引腳使能;:中斷引腳使能;0:普通:普通IOIRQSC_IRQEDG=0;/下降沿或低電平信號有效下降
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024至2030年中國木制護板書架行業(yè)投資前景及策略咨詢研究報告
- 2024至2030年中國方孔輕型臺虎鉗數(shù)據(jù)監(jiān)測研究報告
- 2024至2030年膀胱檢查鏡項目投資價值分析報告
- 2024至2030年洗手盅墊碟項目投資價值分析報告
- 2024至2030年烏蘇里貂項目投資價值分析報告
- 哈爾濱租賃合同范本
- 飛灰合同范本
- 駐校教官服務(wù)合同范本
- 美國與中國天然氣合同范本
- 年度光學(xué)儀器、零件及附件競爭策略分析報告
- 睡眠呼吸暫停低通氣綜合癥ppt課件
- 《中風(fēng)的中醫(yī)治療》PPT課件.ppt
- 防火門窗施工方案
- “雙師教學(xué)”在初中數(shù)學(xué)課堂中的應(yīng)用
- 戰(zhàn)略合作簽約儀式教育PPT課程課件
- 土方填筑碾壓試驗報告
- 老舊小區(qū)排水部分雨污水改造監(jiān)理細則
- 2022年地殼運動與變化教案與學(xué)案
- 《建筑起重吊裝工程安全技術(shù)規(guī)程》JGJ276
- 市政道路水穩(wěn)層項目施工合同
- 睿丁英語小紅帽和大灰狼的故事
評論
0/150
提交評論