多緩沖串口中文資料_第1頁(yè)
多緩沖串口中文資料_第2頁(yè)
多緩沖串口中文資料_第3頁(yè)
多緩沖串口中文資料_第4頁(yè)
多緩沖串口中文資料_第5頁(yè)
已閱讀5頁(yè),還剩23頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、1 引言在世界上眾多的DSP廠(chǎng)商中,德州儀器公司的DSP始終占據(jù)較大的市場(chǎng)份額。目前得到廣泛應(yīng)用的TI三大DSP處理器系列是TMS320C2000、TMS320C5000和TMS320C6000。每個(gè)系列都有繁多的品種,新的產(chǎn)品層出不窮,更新的速度也非??欤腔旧厦總€(gè)系列的DSP都有多緩沖串口這一片內(nèi)外設(shè),利用該外設(shè)DSP可以與其他DSP、編碼器等其他串口器件進(jìn)行高速的數(shù)據(jù)通信。多緩沖串口的典型應(yīng)用是它與串口的A/D、D/A芯片連接在一起,實(shí)現(xiàn)高速的數(shù)字音頻采集和傳輸。目前,市面上有很多介紹DSP技術(shù)的書(shū),但是書(shū)中有關(guān)多緩沖串口這部分內(nèi)容的介紹較少,而且多數(shù)是直接翻譯TI公司多緩沖串口用戶(hù)

2、使用手冊(cè),這樣當(dāng)初學(xué)者剛接觸多緩沖串口時(shí),入門(mén)較難。針對(duì)這個(gè)問(wèn)題,本文綜合多個(gè)系列的TI公司DSP的多緩沖串口使用手冊(cè),再根據(jù)自己的理解,從整體到局部,從簡(jiǎn)單到復(fù)雜,先詳細(xì)地介紹了多緩沖串口進(jìn)行通信的原理,以及如何配置和控制通信過(guò)程等,再比較了各種系列DSP多緩沖串口的區(qū)別和聯(lián)系,最后通過(guò)兩個(gè)小例子,讓讀者對(duì)多緩沖串口具體的使用有了個(gè)直觀(guān)的理解,實(shí)驗(yàn)結(jié)果的分析對(duì)加深多緩沖串口運(yùn)行機(jī)制的理解應(yīng)該很有幫助。2 C28x系列DSP的多緩沖串口介紹2.1 通信過(guò)程簡(jiǎn)介多緩沖串口(Multichannel Buffered Serial Port),簡(jiǎn)寫(xiě)為McBSP。它的通信是靠6個(gè)引腳完成的,發(fā)送引腳

3、MDX、接收引腳MDR、發(fā)送時(shí)鐘信號(hào)引腳MCLKX、接收時(shí)鐘信號(hào)引腳MCLKR、發(fā)送幀同步引腳MFSX和接收幀同步引腳MFSR。后面為了簡(jiǎn)單起見(jiàn),發(fā)送引腳MDX簡(jiǎn)寫(xiě)為“DX引腳”省掉了“M”,其他三個(gè)引腳同理。如圖1所示,McBSP與其他器件進(jìn)行通信時(shí),如果字長(zhǎng)為16位或者更小(字長(zhǎng)為8,12,16),每個(gè)數(shù)據(jù)傳輸階段只需一個(gè)16位的寄存器就足夠了,DRR2、RBR2、RSR2、DXR2和XSR2不使用。在這種情況下發(fā)送數(shù)據(jù)時(shí),CPU或者DMA控制器往DXR1寄存器寫(xiě)數(shù)據(jù),如果XSR1寄存器沒(méi)有要發(fā)送的數(shù)據(jù),那么DXR1中的數(shù)據(jù)傳給XSR1,若XSR1中還有要發(fā)送的數(shù)據(jù)(上次DXR1傳給它的值

4、還沒(méi)有完全從DX引腳移出),那么DXR1等待上次的值的最后一位從DX引腳移出時(shí)才將數(shù)據(jù)傳給XSR1,如果選擇了壓縮擴(kuò)展模式(使用虛線(xiàn)框中的Compand Logic,壓縮擴(kuò)展主要是針對(duì)率或者A率來(lái)說(shuō)的),那么Compand Logic會(huì)將16位的數(shù)據(jù)壓縮成合適的8位的數(shù)據(jù)格式,然后才將數(shù)據(jù)傳給XSR1。圖1 McBSP模塊圖接收數(shù)據(jù)時(shí),數(shù)據(jù)從DR引腳一位一位的移入到RSR1,當(dāng)接收完一個(gè)完整的字時(shí),RSR1中的值傳給RBR1(前提是上次RSR1傳給RBR1的值已經(jīng)被RBR1傳給DRR1),接著RBR1的值傳給DRR1(前提是上次RBR1傳給DRR1的值已經(jīng)被CPU或者DMA控制器讀取了),再接

5、著CPU或者DMA控制器讀取DRR1的值,如果選擇了壓縮擴(kuò)展模式(使用虛線(xiàn)框中的Expand Logic),那么Expand Logic會(huì)將接收到的8位字長(zhǎng)的數(shù)據(jù)(必須是8位)擴(kuò)展成16位的數(shù)據(jù)之后才傳給DRR1;在RBR1中的數(shù)據(jù)傳給DRR1之前可以選擇是否進(jìn)行壓縮擴(kuò)展處理,或者選擇是否進(jìn)行符號(hào)擴(kuò)展和對(duì)齊的操作,符號(hào)擴(kuò)展和對(duì)齊的操作由RJUST位(bit13-14在SPCR1中)控制,如表1所示,當(dāng)使用壓縮擴(kuò)展處理時(shí)該位被忽略。如果字長(zhǎng)大于16(字長(zhǎng)為20,24,32)的話(huà),那么DRR2、RBR2、RSR2、DXR2和XSR2就必須用來(lái)存放大于16位那部分的值了,數(shù)據(jù)的發(fā)送和接收和字長(zhǎng)小于1

6、6位的情況類(lèi)似,只是在發(fā)送數(shù)據(jù)時(shí)CPU或DMA控制器必須先寫(xiě)DXR2然后再寫(xiě)DXR1,接收數(shù)據(jù)時(shí)CPU或DMA控制器必須先讀DDR2然后再度DDR1。RJUST位對(duì)齊擴(kuò)展DDR2的值DDR1的值00b右高位0填充0000h0ABCh01b右高位符號(hào)擴(kuò)展FFFFhFABCh10b左低位0填充0000hABC0h11b保留保留保留保留表1 RJUST位控制12位的值A(chǔ)BCh調(diào)整表有關(guān)壓縮擴(kuò)展模式的介紹:a.壓縮擴(kuò)展模塊可以將數(shù)據(jù)按率格式或A率格式進(jìn)行壓縮擴(kuò)展,率和A率都將數(shù)據(jù)編碼成8位進(jìn)行傳輸,因此多緩沖串口寄存器中RWDLEN1位、RWDLEN2位、XWDLEN1位和XWDLEN2位必須為0,指

7、示字長(zhǎng)是8位;b.在接收時(shí),8位壓縮過(guò)的數(shù)據(jù)被擴(kuò)展成16位左對(duì)齊的形式存放在DRR1中,RJUST位被忽略;在發(fā)送時(shí),采用率格式壓縮, 14位的數(shù)據(jù)必須左對(duì)齊后位于DXR1中,剩余兩位用0填充,采用A率格式壓縮,13位的數(shù)據(jù)必須左對(duì)齊后位于DXR1中,剩余三位用0填充,如圖2所示。圖2 壓縮后的數(shù)據(jù)格式c.壓縮和擴(kuò)展由RCOMPAND位(bit3-4在RCR2中)和XCOMPAND位(bit3-4在XCR2中)控制,如表2和3所示;RCOMPAND位對(duì)應(yīng)的控制00b沒(méi)有壓縮擴(kuò)展,字長(zhǎng)任意,高位先接收01b沒(méi)有壓縮擴(kuò)展,字長(zhǎng)必須為8,低位先接收10b采用率壓擴(kuò),字長(zhǎng)必須是8,高位先接收11b采用

8、A率壓擴(kuò),字長(zhǎng)必須是8,高位先接收表2 數(shù)據(jù)接收壓擴(kuò)模式表XCOMPAND位對(duì)應(yīng)的控制00b沒(méi)有壓縮擴(kuò)展,字長(zhǎng)任意,高位先發(fā)送01b沒(méi)有壓縮擴(kuò)展,字長(zhǎng)必須為8,低位先發(fā)送10b采用率壓擴(kuò),字長(zhǎng)必須是8,高位先發(fā)送11b采用A率壓擴(kuò),字長(zhǎng)必須是8,高位先發(fā)送表3 數(shù)據(jù)發(fā)送壓擴(kuò)模式表d.壓縮擴(kuò)展模塊還可以用于壓擴(kuò)內(nèi)部數(shù)據(jù),如線(xiàn)性格式的數(shù)據(jù)與率或A率格式的數(shù)據(jù)相互轉(zhuǎn)化。2.2 時(shí)鐘和幀數(shù)據(jù)McBSP總在內(nèi)部CLKX的上升沿一位一位的從DX引腳發(fā)送數(shù)據(jù),總在內(nèi)部CLKR的下降沿一位一位的從DR引腳采樣接收數(shù)據(jù);內(nèi)部CLKX可以由CLKX引腳提供,也可以來(lái)自McBSP的內(nèi)部;內(nèi)部CLKR可以由CLKR引

9、腳提供,也可以來(lái)自McBSP內(nèi)部;默認(rèn)的數(shù)據(jù)傳輸是高位先傳輸。如圖3所示。圖3 簡(jiǎn)單的時(shí)鐘信號(hào)控制波形圖在移位寄存器(RSR或XSR)和數(shù)據(jù)引腳(DR或DX)之間以一個(gè)組的形式進(jìn)行傳遞的幾位就構(gòu)成了一個(gè)串行字(Serial Word),簡(jiǎn)稱(chēng)為字,RSR裝滿(mǎn)一個(gè)完整的字后才把數(shù)據(jù)傳給RBR,XSR移出完一個(gè)完整的字后才會(huì)接受DXR傳遞過(guò)來(lái)的數(shù)據(jù)。一個(gè)字在多通道選擇模式中也可以理解為一個(gè)通道。如圖3中B7-B0就是一個(gè)字,是一個(gè)8位的字。字長(zhǎng)可以是8,12,16,20,24或者32,對(duì)于接收端字長(zhǎng)由RWDLEN1位(bit5-bit7在RCR1寄存器中)和RWDLEN2位(bit5-bit7在RC

10、R2寄存器中)決定,對(duì)于發(fā)送端由XWDLEN1位(bit5-bit7在XCR1寄存器中)和XWDLEN2位(bit5-bit7在XCR2寄存器中)決定。一個(gè)或者多個(gè)字一組就構(gòu)成了一個(gè)幀(Frame)。一個(gè)幀里的所有字是連續(xù)傳輸?shù)?,但幀與幀之間在傳輸時(shí)可以有暫停(暫停可以理解為發(fā)送端發(fā)送的全是0,接收端接收的也全是0,相當(dāng)于是不工作了)。如圖3是一個(gè)字長(zhǎng)為8的字構(gòu)成一個(gè)圖4 復(fù)雜的時(shí)鐘信號(hào)控制波形圖幀長(zhǎng)為一的幀,如圖4是四個(gè)字長(zhǎng)為8的字構(gòu)成一個(gè)幀長(zhǎng)為四的幀。每一個(gè)幀相位中可以包含1-128個(gè)字,對(duì)于接收端由RFRLEN1位(bit8-bit14在RCR1寄存器)和RFRLEN2位(bit8-bi

11、t14在RCR2寄存器)決定,對(duì)于發(fā)送端由XFRLEN1位(bit8-bit14在XCR1寄存器)和XFRLEN2位(bit8-bit14在XCR2寄存器)決定。Bit14-bit8的值為0-5時(shí)對(duì)應(yīng)的字長(zhǎng)分別為8-32。幀相位(Frame Phase)可以分為單相位和雙相位,如圖3,圖4都是一個(gè)單相位的幀,圖5是一個(gè)雙相位的幀,第一個(gè)相位由兩個(gè)字長(zhǎng)為12的字組成,緊接著的第二個(gè)相位由三個(gè)字長(zhǎng)為8的字組成,幀長(zhǎng)是5,具體幀是單相位還是雙相位由控制發(fā)送端的XPHASE位(bit15在XCR2寄存器中)和控制接收端的RPHASE位(bit15在RCR2寄存器中)決定。圖5 雙相位幀圖幀同步(Fra

12、me Synchronization)用于決定下一個(gè)幀是否要發(fā)送或接收。內(nèi)部幀同步信號(hào)(內(nèi)部FSX或內(nèi)部FSR)由低電平向高電平跳變預(yù)示著下一個(gè)幀的開(kāi)始,但是并不一定跳變一發(fā)生下一個(gè)幀就立刻傳輸,可以有一定的延遲,該延遲由控制接收端的RDATDLY位(bit0和bit1在RCR2寄存器中)和控制發(fā)送端的XDATDLY位(bit0和bit1在XCR2寄存器中)決定,如圖3顯示的是延遲一個(gè)內(nèi)部CLK(R/X)周期。內(nèi)部FSX控制發(fā)送時(shí)的幀同步,可以由FSX引腳提供,也可以來(lái)自McBSP的內(nèi)部,內(nèi)部FSR控制接收時(shí)的幀同步,可以由FSR引腳提供,也可以來(lái)自McBSP的內(nèi)部。2.3 采樣率發(fā)生器(Sa

13、mple Rate Generator)每一個(gè)McBSP都有一個(gè)采樣率發(fā)生器(SRG)可編程產(chǎn)生并輸出內(nèi)部數(shù)據(jù)時(shí)鐘信號(hào)(CLKG)和內(nèi)部幀同步信號(hào)(FSG),上面提到的“內(nèi)部CLKX、內(nèi)部CLKR可以來(lái)自McBSP的內(nèi)部”指的就是內(nèi)部數(shù)據(jù)時(shí)鐘信號(hào)(CLKG),上面提到的“內(nèi)部FSX、內(nèi)部FSR可以來(lái)自McBSP的內(nèi)部”指的就是內(nèi)部幀同步信號(hào)(FSG)。由此可以歸納在一般模式下內(nèi)部控制信號(hào)的來(lái)源情況,如表4和表5所示。采樣率發(fā)生器的輸入時(shí)鐘CLKSRG可以由三種方式提供,如表6所示,表中兩個(gè)控制位都為0的情況是保留的。接收器的內(nèi)部接收時(shí)鐘(內(nèi)部CLKR)發(fā)送器的內(nèi)部發(fā)送時(shí)鐘(內(nèi)部CLKX)CLK

14、RM位=0由MCLKR引腳輸入CLKXM位=0由MCLKX引腳輸入CLKRM位=1內(nèi)部CLKR為CLKG 并由MCLKR引腳輸出以反映其變化CLKXM位=1內(nèi)部CLKX為CLKG 并由MCLKX引腳輸出以反映其變化注: CLKRM位和CLKXM位在PCR寄存器(bit8和bit9)中。表4 內(nèi)部接收和發(fā)送時(shí)鐘來(lái)源表接收器的內(nèi)部幀同步(內(nèi)部FSR)發(fā)送器的內(nèi)部幀同步(內(nèi)部FSX)FSRM位=0由MFSR引腳輸入FSXM位=0由MFSX引腳輸入FSRM位=1內(nèi)部FSR為FSG 并根據(jù)GSYNC位判斷是否MFSR引腳輸出FSXM位=1FSGM位=1內(nèi)部FSX為FSG 并由MFSX引腳輸出以反映其變化

15、FSXM位=1FSGM位=0當(dāng)DXR中的值傳給XSR時(shí)產(chǎn)生發(fā)送幀同步信號(hào)并由MFSX引腳輸出反映其變化注: FSRM位和FSXM位在PCR寄存器(bit10和bit11)中,GSYNC位在SRGR2寄存器(bit15)中,F(xiàn)SGM位在SRGR2寄存器(bit12)中。表5 內(nèi)部接收和發(fā)送幀同步信號(hào)來(lái)源表SCLKME位CLKSM位CLKSRG的來(lái)源00保留01由LSPCLK提供(在芯片內(nèi)部來(lái)自CPU)10由MCLKR引腳提供11由MCLKX引腳提供注: SCLKME位在PCR(bit7)中,CLKSM位在SRGR2(bit13)中。表6 采樣率發(fā)生器輸入時(shí)鐘來(lái)源表在表4、表5和表6中MFSX引腳

16、、MFSR引腳、MCLKX引腳和MCLKR引腳都可以作為時(shí)鐘的輸入引腳或者作為時(shí)鐘的輸出引腳以反映內(nèi)部信號(hào)的變化,無(wú)論是輸入還是輸出,在輸入的信號(hào)提供給內(nèi)部信號(hào)之前和內(nèi)部信號(hào)從引腳輸出之前,它們的極性是可以反轉(zhuǎn)變化的,例如原來(lái)是上升沿的可以變化為下降沿,極性的變化由對(duì)應(yīng)的FSXP位、FSRP位、CLKXP位和CLKRP位(它們依次位于PCR寄存器的bit3-bit0)控制,這些極性控制位為1時(shí)極性反轉(zhuǎn)變化。DX引腳和DR引腳有對(duì)應(yīng)的狀態(tài)位DXSTAT和DRSTAT,分別位于PCR的bit5和bit4。圖6 采樣率發(fā)生器的模塊圖在圖6中也能清楚的看出CLKSRG的來(lái)源情況,CLKSRG除以(CL

17、KGDV+1)后就得到了CLKG,CLKGDV是CLKGDV位(bit7-bit0在SRGR1中)的值;CLKSRG除以(CLKGDV+1)后得到的信號(hào)一路為CLKG,另一路經(jīng)過(guò)FPER和FWID分頻后得到FSG,由FSG提供的兩個(gè)幀同步脈沖之間的間隔(兩個(gè)幀的開(kāi)始之間的間隔)是(FPER+1)個(gè)CLKG周期,F(xiàn)PER是FPER位(bit11-bit0在SRGR2中)的值,由FSG提供的幀同步脈沖的寬度是(FWID+1)個(gè)CLKG周期,F(xiàn)WID是FWID位(bit15-bit8在SRGR1中)的值。圖7 CLKG與外部信號(hào)同步和FSG的產(chǎn)生圖當(dāng)選擇一個(gè)外部時(shí)鐘(由CLKX引腳或CLKR引腳輸入

18、)作為采樣率發(fā)生器的輸入時(shí)鐘時(shí),GSYNC位和FSR引腳可以用來(lái)控制采樣率發(fā)生器的輸出時(shí)鐘CLKG同步于外部時(shí)鐘和FSG脈沖的產(chǎn)生,GSYNC位=1時(shí)FSR引腳輸入信號(hào)(CLKRP位=0)的低電平向高電平的跳變將觸發(fā)CLKG同步于外部時(shí)鐘和FSG脈沖的產(chǎn)生,真正的同步發(fā)生在CLKX引腳輸入信號(hào)的上升沿(CLKXP位=0)或CLKR引腳輸入信號(hào)的下降沿(CLKRP位=0);同步后的CLKG信號(hào)總是從高電平開(kāi)始;很明顯FPER位被忽略了,因?yàn)镕SG的產(chǎn)生由FSR引腳輸入信號(hào)決定;在GSYNC位=1時(shí),為使發(fā)送端同步與接收端,個(gè)人建議選擇四個(gè)內(nèi)部控制信號(hào)均來(lái)自采樣率發(fā)生器的輸出信號(hào);如圖7所示,第一

19、行和第二行是CLKX或CLKR引腳的輸入時(shí)鐘,第一行為CLKX引腳的輸入時(shí)鐘且CLKXP=1或者CLKR引腳的輸入時(shí)鐘且CLKRP=0的情況,第二行為CLKX引腳的輸入時(shí)鐘且CLKXP=0或者CLKR引腳的輸入時(shí)鐘且CLKRP=1的情況,在圖中由于外部的FSR引腳輸入的信號(hào)發(fā)生了有效的跳變,緊接著同步發(fā)生(帶有上下箭頭的那條虛豎線(xiàn)),需要同步的CLKG被同步,同時(shí)產(chǎn)生FSG信號(hào)。2.4 McBSP的各種模式簡(jiǎn)介上面內(nèi)容均是針對(duì)McBSP一般模式下的應(yīng)用而敘述的。此外多緩沖串口還可用于數(shù)字回送模式、時(shí)鐘停止模式和多通道選擇模式等。在數(shù)字回送模式下(Digital loopback mode),內(nèi)

20、部接收信號(hào)由內(nèi)部發(fā)送信號(hào)直接提供。該模式主要用于單個(gè)DSP多緩沖串口的測(cè)試,由DLB位(bit15在SPCR1寄存器中)為1來(lái)選擇該模式,此時(shí)DR在芯片內(nèi)部直接連接到DX,內(nèi)部CLKR直接連接到內(nèi)部CLKX,內(nèi)部FSR連直接接到內(nèi)部FSX。McBSP可用于時(shí)鐘停止模式(Clock Stop Mode),該模式兼容SPI協(xié)議,SPI協(xié)議是一個(gè)主從式的配置包含一個(gè)主控器件和一個(gè)或多個(gè)從控器件。在時(shí)鐘停止模式中,每個(gè)數(shù)據(jù)傳輸結(jié)束時(shí)鐘就會(huì)停止,在每個(gè)數(shù)據(jù)傳輸?shù)拈_(kāi)始,時(shí)鐘可以選擇立即開(kāi)始(CLKSTP=10b)或者半個(gè)周期延遲后再開(kāi)始(CLKSTP=11b),CLKSTP為00b或01b該模式將會(huì)被禁用

21、,CLKSTP為SPCR1的bit12-11位。McBSP還可以用于多通道選擇模式(multichannel selection mode),該模式下McBSP使用時(shí)分復(fù)用(TDM)數(shù)據(jù)流和其他McBSP或串口器件通信。每個(gè)McBSP端口支持128個(gè)接收通道和128個(gè)發(fā)送通道,每個(gè)通道可等同于一個(gè)字。2.5 McBSP數(shù)據(jù)通信可能產(chǎn)生的錯(cuò)誤總共有五種錯(cuò)誤類(lèi)型:接收器超載,發(fā)送數(shù)據(jù)的覆蓋,發(fā)送器的空載,意外的接收幀同步脈沖和意外的發(fā)送幀同步脈沖。接收器超載:DRR中的數(shù)據(jù)沒(méi)有被讀取,RBR也有要傳遞的數(shù)據(jù),并且RSR也裝滿(mǎn)了一個(gè)完整的字,此時(shí)將發(fā)生接收器超載錯(cuò)誤,RFULL位(bit2在SPCR

22、1中)為1以顯示該錯(cuò)誤發(fā)生了;只要DRR1中的數(shù)據(jù)沒(méi)有被讀取并且DR引腳還在接收數(shù)據(jù),那么RSR中的值就會(huì)不斷的被覆蓋;CPU或DMA控制器讀取DRR1或者發(fā)送器復(fù)位(RRST=0)或者整個(gè)DSP芯片復(fù)位將使RFULL位清零,若要重新啟動(dòng)發(fā)送器需要下一個(gè)幀同步脈沖的到來(lái)。如圖8所示由于一直沒(méi)有讀取DRR1,在接收完字C時(shí)發(fā)生錯(cuò)誤,RSR中的字C將會(huì)被字D覆蓋,若還不讀取DRR1,字D可能還會(huì)被新的字覆蓋。圖8 接收器超載示意圖發(fā)送數(shù)據(jù)的覆蓋:DXR中的數(shù)據(jù)還沒(méi)有傳遞給XSR,但是CPU或者DMA控制器又向DXR中寫(xiě)入數(shù)據(jù),先前DXR中的值將被覆蓋,此時(shí)錯(cuò)誤發(fā)生,該錯(cuò)誤沒(méi)有標(biāo)志位。發(fā)送器的空載:

23、與發(fā)送數(shù)據(jù)的覆蓋錯(cuò)誤相反,DXR已經(jīng)把數(shù)據(jù)遞給XSR,XSR也已經(jīng)把傳遞過(guò)來(lái)的數(shù)據(jù)都從DX引腳移出去了,CPU或者DMA控制器還沒(méi)有向DXR中寫(xiě)入數(shù)據(jù),錯(cuò)誤發(fā)生,XEMPT位(bit2在SPCR2中)為0以顯示該錯(cuò)誤發(fā)生了,此外發(fā)生器在復(fù)位狀態(tài)(由XRST=0或DSP復(fù)位產(chǎn)生)時(shí)XEMPT位也為0;向DXR1中寫(xiě)入新的字,該新的字被DXR1傳給XSR1時(shí),XEMPT位被置為1。如圖9所示,當(dāng)字B被發(fā)送后,在下一個(gè)幀同步脈沖到來(lái)前,DXR1沒(méi)有裝入新的字,因此字B又發(fā)送了一次。圖9 發(fā)送器的空載示意圖意外的接收幀同步脈沖:RFIG位(bit2在RCR2中)為0,當(dāng)前幀中的位還沒(méi)有全部接收完,但是

24、卻出現(xiàn)了一個(gè)新的接收幀同步脈沖,這個(gè)脈沖稱(chēng)為意外的接收幀同步脈沖,RSYNCERR位(bit3在SPCR1中)為1以顯示該錯(cuò)誤發(fā)生了,錯(cuò)誤發(fā)生時(shí)還可以選擇是否發(fā)出中斷以通知CPU;若要將RSYNCERR位清零,只能將接收器復(fù)位或者將該位寫(xiě)0;RFIG=1時(shí)接收器忽略幀同步,以避免該錯(cuò)誤。圖10 意外的接收幀同步脈沖示意圖如圖10所示,在字B還沒(méi)有完全接收時(shí),出現(xiàn)了意外的幀同步脈沖,字B被拋棄接收器開(kāi)始接收字C,同時(shí)RSYNCERR被置為1。意外的發(fā)送幀同步脈沖:XFIG位(bit2在XCR2中)為0,當(dāng)前幀中的位還沒(méi)有全部發(fā)送完,但是卻出現(xiàn)了一個(gè)新的發(fā)送幀同步脈沖,這個(gè)脈沖稱(chēng)為意外的發(fā)送幀同步

25、脈沖,XSYNCERR位(bit3在SPCR2中)為1以顯示該錯(cuò)誤發(fā)生了,錯(cuò)誤發(fā)生時(shí)還可以選擇是否發(fā)出中斷以通知CPU;若要將XSYNCERR位清零,只能將發(fā)送器復(fù)位或者將該位寫(xiě)0;XFIG=1時(shí)發(fā)送器忽略幀同步,以避免該錯(cuò)誤。如圖11所示,在字B還沒(méi)有完全發(fā)送時(shí),出現(xiàn)了意外的幀同步脈沖,由于沒(méi)有新的值傳給XSR1,字B被重新從B7開(kāi)始傳輸,同時(shí)XSYNCERR被置為了1。圖11 意外的發(fā)送幀同步脈沖示意圖2.6 數(shù)據(jù)傳輸?shù)目刂坪椭袛?當(dāng)RBR1向DRR1傳送數(shù)據(jù)時(shí),RRDY位(bit1在SPCR1中)被置為1指示DRR中的數(shù)據(jù)可以被CPU或DMA控制器讀取了,讀取后該位自動(dòng)清零;在RINTE

26、NA位(bit2在MFFINT中)為1的情況下,如果RINTM位(bit5-4在SPCR1中)的值為00,那么RRDY從0變到1會(huì)向CPU發(fā)出中斷請(qǐng)求,RINTM=01時(shí)幀的結(jié)束或塊的結(jié)束會(huì)產(chǎn)生中斷(用于多通道選擇模式),RINTM=10時(shí)一個(gè)新的接收幀同步脈沖產(chǎn)生中斷,RINTM=11時(shí)意外的接收幀同步(RSYNCERR=1)產(chǎn)生中斷。當(dāng)DXR1向XSR1傳送數(shù)據(jù)時(shí),XRDY位(bit1在SPCR2中)被置為1指示CPU或DMA控制器可以向DXR寫(xiě)入數(shù)據(jù)了,寫(xiě)入后該位自動(dòng)清零;在XINTENA位(bit0在MFFINT中)為1的情況下,如果XINTM位(bit4-5在SPCR2中)的值為00

27、,那么XRDY從0變到1會(huì)向CPU發(fā)出中斷請(qǐng)求,XINTM=01時(shí)幀的結(jié)束或塊的結(jié)束會(huì)產(chǎn)生中斷(用于多通道選擇模式),XINTM=10時(shí)一個(gè)新的發(fā)送幀同步脈沖產(chǎn)生中斷,XINTM=11時(shí)意外的發(fā)送幀同步(XSYNCERR=1)產(chǎn)生中斷。幀同步邏輯、采樣率發(fā)生器、發(fā)送器和接收器都有自己對(duì)應(yīng)的復(fù)位位,分別是FSRT(bit7在SPCR2)、GRST(bit6在SPCR2)、RRST(bit0在SPCR1)和XRST(bit0在SPCR2),為清零時(shí)復(fù)位。2.7 McBSP初始化過(guò)程串口的初始化過(guò)程主要是:a.使幀同步邏輯、采樣率發(fā)生器、接收器和發(fā)送器處于復(fù)位狀態(tài)(FSRT=GRST=RRST=XR

28、ST=0);b.當(dāng)串口處于復(fù)位狀態(tài)時(shí),配置控制寄存器(不是數(shù)據(jù)寄存器)使處于期望的接收或發(fā)送狀態(tài);c.至少等待2個(gè)時(shí)鐘周期,以保證內(nèi)部的同步;d.設(shè)置GRST=1使采樣率發(fā)生器工作;e. 至少等待2個(gè)時(shí)鐘周期,以保證內(nèi)部的同步;f.設(shè)置RRST=XRST=1使串口開(kāi)始工作,在設(shè)置這些位的時(shí)候要保證不要修改SPCR1和SPCR2中其他位的值;g.如果用到內(nèi)部的幀同步邏輯,那么將FSRT 設(shè)置成1;在大部分情況下,只有當(dāng)發(fā)送器工作后(XRST=1),CPU或者DMA控制寄存器才向數(shù)據(jù)發(fā)送寄存器DXR寫(xiě)入值。初始化過(guò)程參考示例程序。表7 McBSP的寄存器一覽表初始化完成后,最簡(jiǎn)單的操作是:要發(fā)送數(shù)

29、據(jù)時(shí)先判斷XRDY位是否為1,若是1那么往DXR寫(xiě)入要發(fā)送的數(shù)據(jù);要接收數(shù)據(jù)時(shí)先判斷RRDY位是否為1,若是1那么CPU讀取DRR的值就行了,這種操作可以不用理會(huì)中斷的處理,該方式稱(chēng)為查詢(xún)方式。當(dāng)然也可以采用中斷驅(qū)動(dòng)的方式來(lái)進(jìn)行發(fā)送和接收。這兩種方式的應(yīng)用參考示例程序部分。以下是配置接收器或發(fā)送器時(shí)的一些具體任務(wù),每個(gè)任務(wù)需要修改對(duì)應(yīng)的一個(gè)或多個(gè)McBSP的寄存器的位,表7列出了各個(gè)寄存器的地址。全局行為配置:l 將接收或發(fā)送引腳設(shè)置成McBSP外設(shè)功能;l 使能或禁用數(shù)字回送模式;l 使能或禁用時(shí)鐘停止模式;l 使能或禁用多通道選擇模式;數(shù)據(jù)行為配置:l 為每個(gè)接收或發(fā)送幀配置單個(gè)或雙相位;

30、l 設(shè)置接收或發(fā)送數(shù)據(jù)的字長(zhǎng);l 設(shè)置接收或發(fā)送幀的長(zhǎng)度;l 使能或禁用幀同步忽略功能;l 設(shè)置接收或發(fā)送壓擴(kuò)模式;l 設(shè)置數(shù)據(jù)接收或發(fā)送延時(shí);l 設(shè)置數(shù)據(jù)接收的符號(hào)擴(kuò)展和對(duì)齊模式及發(fā)送的DXENA模式;l 設(shè)置接收或發(fā)送的中斷模式;幀同步行為配置:l 設(shè)置接收或發(fā)送幀同步模式;l 設(shè)置接收或發(fā)送幀同步極性;l 設(shè)置SRG的幀同步周期和脈沖寬度;時(shí)鐘行為配置:l 設(shè)置接收或發(fā)送時(shí)鐘模式;l 時(shí)鐘接收或發(fā)送時(shí)鐘極性;l 設(shè)置SRG時(shí)鐘分頻值;l 設(shè)置SRG時(shí)鐘同步模式;l 設(shè)置SRG時(shí)鐘模式(選擇一個(gè)輸入時(shí)鐘);l 設(shè)置SRG輸入時(shí)鐘的極性;2.8 McBSP的主要特性l 全雙工通信方式;l 通

31、過(guò)雙緩沖發(fā)送和三緩沖接收實(shí)現(xiàn)連續(xù)數(shù)據(jù)流的通信;l 發(fā)送和接收具有獨(dú)立的時(shí)鐘和幀結(jié)構(gòu);l 具有向CPU或DMA控制器發(fā)送中斷的功能;l 128個(gè)發(fā)送和接收通道;l 多通道選擇模式可以允許或阻止每個(gè)通道的傳輸;l 支持與工業(yè)標(biāo)準(zhǔn)的編解碼器、模擬接口芯片(AICs)及其他串行接口的A/D和D/A設(shè)備的直接連接;l 支持外部時(shí)鐘信號(hào)和幀同步信號(hào)的產(chǎn)生;l 一個(gè)可編程的采樣率發(fā)生器,可用于內(nèi)部產(chǎn)生和控制時(shí)鐘信號(hào)和幀同步信號(hào);l 時(shí)鐘信號(hào)和幀同步脈沖的極性可編程;l 可直接連接的接口:T1/E1幀調(diào)節(jié)器、IOM-2兼容設(shè)備、AC97兼容設(shè)備、I2S兼容設(shè)備和SPI設(shè)備;l 可選擇的字長(zhǎng):8、12、16、2

32、0、24和32位;l A率和u率的壓縮擴(kuò)展;l 可選擇發(fā)送或接收8位數(shù)據(jù)時(shí)低字節(jié)先開(kāi)始;l 各種狀態(tài)位以標(biāo)示數(shù)據(jù)傳輸;l ABIS模式不支持;(有些C28X系列DSP支持該模式如F2812);3 C54X系列DSP的多緩沖串口如圖12所示為C54X系列片內(nèi)外設(shè)McBSP的結(jié)構(gòu)框圖,從圖中可以看出C54X系列的多緩沖串口和C28X系列的差別不大,主要的差別是:1.C54X系列多了一個(gè)CLKS引腳,該引腳是采樣率發(fā)生器的外部輸入時(shí)鐘,它也有對(duì)應(yīng)的極性控制位CLKSP(bit14在SRGR2中)和引腳狀態(tài)位CLKS_ STAT(bit6在PCR寄存器中),C28X系列中對(duì)應(yīng)的位都是保留,如圖13所示

33、,C28X系列的多緩沖串口采樣率發(fā)生器的外部輸入時(shí)鐘由CLKR引腳或CLKX引腳提供,而C54X系列的采樣率發(fā)生器的外部輸入時(shí)鐘只能是CLKS引腳,因此PCR寄存器中bit7位SCLKME是保留的,僅用SRGR2寄存器中的bit13位CLKSM就能決定輸入時(shí)鐘了。上段所講的關(guān)于C54X系列和C28X系列的差別是根據(jù)TI手冊(cè)中有關(guān)McBSP部分的介紹而來(lái)的,實(shí)際上,幾乎所有的C54X系列DSP芯片的引腳中都找不到CLKS引腳,如5402、5409和5416等等,TI網(wǎng)站對(duì)于這個(gè)問(wèn)題給出的解釋是“為了減少引腳數(shù)或有時(shí)為了維持以前器件的封裝CLKS引腳經(jīng)常給去掉了”。換句話(huà)說(shuō)就是該差別其實(shí)是不存在的

34、。圖12 C54X系列McBSP的結(jié)構(gòu)框圖圖13 C54X系列McBSP的采樣率發(fā)生器模塊圖2.如表8所示,C54X系列多緩沖串口寄存器的地址也和C28X系列的不太一樣,它們好多含有子地址(Sub-Address)并且十六進(jìn)制地址(Hex Address)一樣,有一個(gè)子地址寄存器存放該子地址,因此在設(shè)置某個(gè)寄存器的值時(shí),先修改子地址寄存器的值為該寄存器的子地址值,例如設(shè)置McBSP1的寄存器SPCR2為0x0000時(shí),那么就應(yīng)該:*(0x0048)=0x0001;*(0x0049)=0x0000。表8 C54X系列多緩沖串口部分寄存器表3.能直接連接McBSP的兼容器件也不一樣,C54X系列的

35、多了MVIP轉(zhuǎn)換兼容器件和ST-BUS兼容器件,而在C28X系列中卻沒(méi)有提到;C54X系列中的5410支持ABIS模式。4. C54X系列的McBSP的引腳可以用作通用I/O口,控制位分別XIOEN和RIOEN分別位于PCR寄存器的bit13和bit12,而C28X系列控制McBSP的引腳為通用I/O口,有專(zhuān)門(mén)的通用I/O口控制寄存器,這些寄存器不僅控制McBSP的引腳還控制其他片內(nèi)外設(shè)的引腳為通用I/O口,因此對(duì)應(yīng)的PCR寄存器中的位保留不用。4 C55X系列DSP的多緩沖串口C55X系列DSP的多緩沖串口幾乎和C28X系列完全一樣,大部分C55X 系列也是多了一個(gè)CLKS引腳,該引腳是采樣

36、率發(fā)生器的外部輸入時(shí)鐘(這種輸入時(shí)鐘方式的選擇對(duì)占用了C28X系列中保留的那種輸入時(shí)鐘的選擇方式),它也有對(duì)應(yīng)的極性控制位CLKSP,引腳狀態(tài)位CLKS_ STAT,這些位也都位于PCR寄存器相應(yīng)的位置。CLKR引腳或CLKX引腳也可作為采樣率發(fā)生器的外部輸入時(shí)鐘(C54X不可以)。如圖14所示。注:1.圖示中CLKXP位和CLKRP位在VC5501和VC5502中不影響CLKSRG的極性。2. 在VC5503、VC5507、VC5509和 VC5510中McBSP internal input clock是CPU時(shí)鐘,但是在在VC5501和VC5502中它是低速的外設(shè)時(shí)鐘。3.CLKS引腳和

37、對(duì)應(yīng)極性控制CLKSP位并不是所有的C55中都有。4. 在VC5501和VC5502中clock synchronization不支持。圖14 C55X多緩沖串口的采樣率發(fā)生器模塊圖此外在引腳控制寄存器PCR中C55X系列多了幾個(gè)用于控制的位,如VC5503、VC5507、VC5509和 VC5510中的IDLEEN位(bit14),XIOEN和RIOEN。這些位用于控制C55X系列的McBSP的引腳為通用I/O口和使McBSP停止并進(jìn)入低功耗狀態(tài)(IDLEEN位),C28X系列的PCR中對(duì)應(yīng)的為保留位,因?yàn)樗袑?zhuān)用的控制片內(nèi)外設(shè)為通用I/O口和使片內(nèi)外設(shè)時(shí)鐘停止的寄存器。5 C64X系列DS

38、P的多緩沖串口C64X系列DSP的多緩沖串口的采樣率發(fā)生器和C55X的一樣,輸入時(shí)鐘可以有四種:CLKS引腳、CLKR引腳、CLKX引腳及來(lái)自CPU的時(shí)鐘。如圖15所示,C64X系列與前面幾種DSP還有一個(gè)最大的區(qū)別就是它的寄存器都是32位的,并且它們的地址是偏移地址,它們的基地址是0x01D0 0000,前面幾種是16位的(不過(guò)基本上都是成對(duì)出現(xiàn)的,如DRR2和DRR1),但是對(duì)應(yīng)寄存器中的位幾乎還是一樣的,可以這樣理解:兩個(gè)16位的寄存器合在一塊構(gòu)成了一個(gè)32位的,例如C28X系列有兩個(gè)XCR寄存器,XCR2構(gòu)成C64X系列32位的寄存器XCR的高16位,XCR1構(gòu)成低16位,對(duì)應(yīng)像C28

39、X系列的PCR這樣只有單個(gè)的寄存器,構(gòu)成C64X系列32位的寄存器時(shí)高16是保留無(wú)定義的。(1)RBR、RSR和XSR不能通過(guò)CPU或DMA控制器直接訪(fǎng)問(wèn)(2) CPU或DMA控制器只能讀不能寫(xiě)該寄存器(3)DRR和DXR可以通過(guò)CPU或DMA控制器訪(fǎng)問(wèn)圖15 C642X系列多緩沖串口寄存器表綜合上面四大部分的分析可知,C28X系列、C54X系列、C55X系列和C64X系列的McBSP的基本結(jié)構(gòu)和功能是完全一樣的,差別只是在某些很小的方面,這些方面是由于不同系列的DSP本身特性的差別而引起的,在使用時(shí)應(yīng)注意這些細(xì)微的差別。6 示例程序本文通過(guò)對(duì)TMS320VC5416進(jìn)行編程,分別通過(guò)查詢(xún)方式

40、和中斷驅(qū)動(dòng)方式,實(shí)現(xiàn)了單個(gè)多緩沖串口(McBSP0)的通信測(cè)試。1、查詢(xún)方式程序代碼如下:(1).命令文件-l rts.lib-stack 3000HMEMORYPAGE 0:PROG:origin=0x1000,length=0x6000 VECT:origin=0x80,length=0x80PAGE 1:DATA:origin=8000H,length=2000HUSERDATA:origin=0A000H,length=04000HSECTIONS.vectors VECT PAGE 0.text PROG PAGE 0.cinit PROG PAGE 0.switch PROG PA

41、GE 0.bss DATA PAGE 1.const DATA PAGE 1.system DATA PAGE 1.stack USERDATA PAGE 1(2).源文件#define IMR *(volatile unsigned int *)(0x0000)#define IFR *(volatile unsigned int *)(0x0001)#define SWWSR *(volatile unsigned int *)(0x0028)#define BSCR *(volatile unsigned int *)(0x0029)#define SWCR *(volatile uns

42、igned int *)(0x002b)#define CLKMD *(volatile unsigned int *)(0x0058)#define PMST *(volatile unsigned int *)(0x001D)#define DRR20 *(volatile unsigned int *)(0x0020)#define DRR10 *(volatile unsigned int *)(0x0021)#define DXR20 *(volatile unsigned int *)(0x0022)#define DXR10 *(volatile unsigned int *)(

43、0x0023)#define SPSA0 *(volatile unsigned int *)(0x0038)#define SPSD0 *(volatile unsigned int *)(0x0039)/SPSD0包括SPCR1、SPCR2、RCR1、RCR2、XCR1、XCR2、SRGR1/SRGR2、MCR1、MCR2、RCERA、RCERB、XCERA、XCERB和PCR,它們的16位地址/都是0x0039,它們的子地址依次是0x0000-0x000E unsigned int send_data; unsigned int first_receive9=11,22,33,44,55

44、,66,77,88,99; unsigned int receive_data; unsigned int i=0;/延時(shí)函數(shù)/void waitloop( unsigned long loopval ) while( loopval ) loopval-; /McBSP初始化函數(shù)/void McBSP0_init_DLB() asm( SSBX INTM);/關(guān)閉所有可屏蔽中斷/使幀同步邏輯、采樣率發(fā)生器、接收器和發(fā)送器處于復(fù)位狀態(tài)SPSA0=0x0000;SPSD0=0x0000;/SPCR1=0x0000SPSA0=0x0001;SPSD0=0x0000;/SPCR2=0x0000/當(dāng)串

45、口處于復(fù)位狀態(tài)時(shí),配置控制寄存器使處于期望的接收或發(fā)送狀態(tài)SPSA0=0x0000;SPSD0|=0x8000;/SPCR1=0x8000,使能DLB /SPCR2保持為0x0000SPSA0=0x0002;/RCR1SPSD0|=0x0000;/每個(gè)接收幀長(zhǎng)度為1,字長(zhǎng)為8SPSA0=0x0003;/RCR2SPSD0|=0x0002;/單相位,接收數(shù)據(jù)延時(shí)2bitSPSA0=0x0004;/XCR1SPSD0|=0x0000;/每個(gè)發(fā)送幀長(zhǎng)度為1,字長(zhǎng)為8SPSA0=0x0005;/XCR2SPSD0|=0x0002;/單相位,發(fā)送數(shù)據(jù)延時(shí)2bitSPSA0=0x0006;/SRGR1SP

46、SD0|=0x001F;/FSG脈沖寬1CLKG周期,CLKG=CLKSRG/32SPSA0=0x0007;/SRGR2SPSD0|=0x301F;/CLKSRG=CPU clock,幀周期是32個(gè)CLKG /多通道選擇模式的寄存器不用/SPSA0=0x000E;/PCR,發(fā)送幀同步和發(fā)送時(shí)鐘由內(nèi)部SRG提供SPSD0|=0x0A00;/接收幀同步和接收時(shí)鐘由發(fā)送器提供/至少等待2個(gè)時(shí)鐘周期,以保證內(nèi)部的同步waitloop(0x0100);/設(shè)置GRST=1使采樣率發(fā)生器工作SPSA0=0x0001;SPSD0|=0x0040;/GRST=1/至少等待2個(gè)時(shí)鐘周期,以保證內(nèi)部的同步waitl

47、oop(0x0100);/設(shè)置RRST=XRST=1使串口開(kāi)始工作SPSA0=0x0001;SPSD0|=0x0001;/XRST=1SPSA0=0x0000;SPSD0|=0x0001;/RRST=1/若要用內(nèi)部的幀同步邏輯,那么將FSRT設(shè)置成1SPSA0=0x0001;SPSD0|=0x0080;/FRST=1asm( RSBX INTM);/開(kāi)放所有可屏蔽中斷/void main() asm( SSBX INTM);SWWSR=0x4838;SWCR=0x01;BSCR=0x8006;CLKMD=0xF7F8;/硬件連接中,一個(gè)11.2896MHz的時(shí)鐘信號(hào)直接連接到X2/CLKIN引

48、腳,X1引腳懸空;/由上面各位的值可知DSP內(nèi)部時(shí)鐘信號(hào)CLKOUT=11.2896MHz*0.25=Hz。waitloop(0x0400);/這個(gè)地方延時(shí)的目的主要是等待時(shí)鐘穩(wěn)定后再執(zhí)行有用的代碼PMST=0x00E8;/PMST:IPTR=0x01,當(dāng)有中斷時(shí)指向程序空間0x80開(kāi)始的地址區(qū)域;/MP/MC=0,OVLY=0,DROM=1,配置DARAM的0000-7FFF程序空間,8000-FFFF數(shù)據(jù)空間。 IMR=0x0000;IFR=0xFFFF;McBSP0_init_DLB();/McBSP初始化asm( RSBX INTM);send_data=1; while(1) /SP

49、SA0=0x0001;/while(SPSD0&0x0002)=0) ;DXR10=(send_data&0x00FF);send_data+;send_data&=0x00FF;SPSA0=0x0000;while(SPSD0&0x0002)=0) ;receive_data=DRR10;if(i9) first_receivei=receive_data;i+;receive_data&=0x00FF; 程序運(yùn)行結(jié)果:在CCS3.3集成開(kāi)發(fā)環(huán)境中將上面兩個(gè)文件編譯、鏈接并下載到DSP后,點(diǎn)擊“run”,運(yùn)行一會(huì)后點(diǎn)擊“halt”,程序一般都會(huì)在“while(SPSD0&0x0002)=0)

50、 ;”這行暫停,此時(shí)查看數(shù)組first_receive、send_data和receive_data的值如圖16所示,發(fā)送的值由1開(kāi)始,每次增加1,最先接收到的前9個(gè)數(shù)是1-9,發(fā)送的數(shù)據(jù)跟接收的數(shù)據(jù)剛好相差2,這正好符合程序運(yùn)行到暫停處時(shí)應(yīng)出現(xiàn)的差值,這些均說(shuō)明正確接收了。圖16 查詢(xún)方式實(shí)驗(yàn)結(jié)果圖需要說(shuō)明的是在多緩沖串口初始化完成后應(yīng)盡快往DXR寫(xiě)入要發(fā)送的數(shù)據(jù),否則在幀同步到來(lái)要發(fā)送數(shù)據(jù)時(shí)還沒(méi)有寫(xiě)入要發(fā)送的數(shù)據(jù),那么最先接收到的前9個(gè)數(shù)的第一個(gè)數(shù)很有可能是0,并且發(fā)送的數(shù)據(jù)跟接收的數(shù)據(jù)相差就是3了,在“McBSP0_init_DLB();”語(yǔ)句后加一個(gè)延時(shí)函數(shù)就極可能出現(xiàn)這種情況;另外本

51、程序中發(fā)送的幀長(zhǎng)度是1,如果大于1的話(huà),最先接收到的第一個(gè)數(shù)和第二個(gè)數(shù)都是1,說(shuō)明發(fā)生了發(fā)送器空載的錯(cuò)誤,這是因?yàn)榘l(fā)送完第一個(gè)數(shù)1時(shí),接收端也接收完第一個(gè)數(shù)1了,由于幀長(zhǎng)大于1,所以緊接著要向DXR再寫(xiě)入第二個(gè)數(shù)2,但此時(shí)CPU在執(zhí)行讀取DRR的值以及后面語(yǔ)句的操作,沒(méi)有向DXR再寫(xiě)數(shù)據(jù),發(fā)送器又將1發(fā)送一次,發(fā)送的數(shù)據(jù)跟接收的數(shù)據(jù)相差也是3。2、中斷驅(qū)動(dòng)方式程序代碼如下:(1).命令文件和查詢(xún)方式的命令文件一樣,這里就不再列出。(2).源文件源文件包括兩個(gè),一個(gè)是主函數(shù)文件,另一個(gè)是中斷向量表文件。a.主函數(shù)文件McBSP0_interrupt.c:#define IMR *(volatil

52、e unsigned int *)(0x0000)#define IFR *(volatile unsigned int *)(0x0001)#define SWWSR *(volatile unsigned int *)(0x0028)#define BSCR *(volatile unsigned int *)(0x0029)#define SWCR *(volatile unsigned int *)(0x002b)#define CLKMD *(volatile unsigned int *)(0x0058)#define PMST *(volatile unsigned int *)

53、(0x001D)#define DRR20 *(volatile unsigned int *)(0x0020)#define DRR10 *(volatile unsigned int *)(0x0021)#define DXR20 *(volatile unsigned int *)(0x0022)#define DXR10 *(volatile unsigned int *)(0x0023)#define SPSA0 *(volatile unsigned int *)(0x0038)#define SPSD0 *(volatile unsigned int *)(0x0039) unsigned long send_data; unsigned long first_receive9=11,22,33,

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論