PIC單片機(jī)原理及應(yīng)用-DSPIC30F L2-CPU結(jié)構(gòu)_第1頁
PIC單片機(jī)原理及應(yīng)用-DSPIC30F L2-CPU結(jié)構(gòu)_第2頁
PIC單片機(jī)原理及應(yīng)用-DSPIC30F L2-CPU結(jié)構(gòu)_第3頁
PIC單片機(jī)原理及應(yīng)用-DSPIC30F L2-CPU結(jié)構(gòu)_第4頁
PIC單片機(jī)原理及應(yīng)用-DSPIC30F L2-CPU結(jié)構(gòu)_第5頁
已閱讀5頁,還剩35頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

dsPIC30F---結(jié)構(gòu)1dsPIC30F結(jié)構(gòu)dsPIC30F器件的每個(gè)都可劃分為以下三個(gè)部分:1.CPU內(nèi)核2.系統(tǒng)集成3.外設(shè)CPU內(nèi)核CPU內(nèi)核是器件運(yùn)行所必需的基本部分。包括:1.CPU2.數(shù)據(jù)存儲(chǔ)器3.程序存儲(chǔ)器4.DSP引擎5.中斷2

系統(tǒng)集成降低系統(tǒng)成本提高系統(tǒng)可靠性提高設(shè)計(jì)靈活性dsPIC30F系統(tǒng)集成功能主要包括:1.振蕩器2.復(fù)位4.看門狗定時(shí)器和低功耗模式5.閃存和EEPROM編程6.器件配置3.低電壓檢測(cè)3外設(shè)dsPIC30F具備許多允許器件與外界交換信息的外設(shè)。包括:1.I/O端口2.定時(shí)器3.輸入捕捉模塊4.輸出比較模塊5.正交編碼器接口(QEI)6.10位AD轉(zhuǎn)換器7.12位AD轉(zhuǎn)換器8.UART模塊9.SPITM模塊10.I2CTM模塊11.數(shù)據(jù)轉(zhuǎn)換器接口(DCI)模塊12.CAN模塊1.3.4存儲(chǔ)器技術(shù)45

一、CPU內(nèi)核

1、概述CPU內(nèi)核CPU內(nèi)核采用16位(數(shù)據(jù))改良的哈佛架構(gòu),并帶有增強(qiáng)型指令集包含對(duì)DSP的有力支持。CPU擁有24位指令字,指令字帶有長(zhǎng)度可變的操作碼字段。程序計(jì)數(shù)器(PC)為24位寬,可以尋址高達(dá)4M×24位的用戶程序存儲(chǔ)器空間。單周期指令預(yù)取機(jī)制用來幫助維持吞吐量并提供可預(yù)測(cè)的執(zhí)行。除了改變程序流的指令、雙字移動(dòng)(MOV.D)指令和表指令以外,所有指令都在單個(gè)周期內(nèi)執(zhí)行。使用DO和REPEAT指令支持無開銷的程序循環(huán)結(jié)構(gòu),這兩個(gè)指令在任何時(shí)候都可被中斷。67

2、編程模型由16個(gè)16位工作寄存器(W0至W15)、2個(gè)40位累加器(ACCA和ACCB)、狀態(tài)寄存器(SR)、數(shù)據(jù)表頁寄存器(TBLPAG)、程序空間可視性頁寄存器(PSVPAG)、DO和REPEAT寄存器DOSTART、DOEND、DCOUNT和RCOUNT)以及程序計(jì)數(shù)器(PC)組成。工作寄存器可作為數(shù)據(jù)、地址或偏移量寄存器。所有寄存器都是存儲(chǔ)器映射的。W0用作進(jìn)行文件寄存器尋址的W寄存器。影子寄存器影子寄存器用作臨時(shí)保持寄存器,事件發(fā)生時(shí)可在影子寄存器和主寄存器之間傳遞內(nèi)容。所有影子寄存器均不能直接訪問。89PUSH.S和POP.S用于執(zhí)行函數(shù)調(diào)用或中斷服務(wù)程序,W0、W1、W2、W3和SR(僅限D(zhuǎn)C、N、OV、Z和C位)是與之對(duì)應(yīng)的影子寄存器,可進(jìn)行內(nèi)容傳遞。DO指令循環(huán)開始時(shí),DOSTART、DOEND和DCOUNT寄存器的內(nèi)容壓入影子寄存器,在循環(huán)結(jié)束時(shí)其內(nèi)容從各自的影子寄存器中彈出。對(duì)工作寄存器進(jìn)行字節(jié)操作時(shí),只影響目標(biāo)寄存器的低字節(jié)(LeastSignificantByte,LSB)。10狀態(tài)寄存器內(nèi)核有一個(gè)16位狀態(tài)寄存器(SR),其最低有效字節(jié)稱為SR低字節(jié)(SRLowByte,SRL),其最高有效字節(jié)稱為SR高字節(jié)(SRHighByte,SRH)。SRL包含所有的DSPALU運(yùn)算狀態(tài)標(biāo)志位(包括Z位),以及CPU中斷優(yōu)先級(jí)狀態(tài)位IPL<2:0>和REPEAT有效狀態(tài)位RA。在異常處理期間,SRL與PC的MSB連接起來形成一個(gè)完整的字值,然后將該字值壓入堆棧。SR寄存器的高字節(jié)包含DSP加法器/減法器狀態(tài)位、DO循環(huán)有效位(DA)和半進(jìn)位(DC)狀態(tài)位。程序計(jì)數(shù)器程序計(jì)數(shù)器為23位寬,bit0始終清零;因此,PC能夠?qū)ぶ纷疃?M指令字。113、軟件堆棧指針/幀指針軟件堆棧指針W15是專用的軟件堆棧指針(StackPointer,SP),異常處理、子程序調(diào)用與返回時(shí)會(huì)自動(dòng)修改W15。W15可被任何指令所引用,引用方式與引用所有其他W寄存器相同。為了防止出現(xiàn)不對(duì)齊的堆棧訪問,W15<0>始終清零。復(fù)位時(shí)W15初始化為0x0800。在初始化過程中,用戶可以重新設(shè)定SP,使它指向數(shù)據(jù)空間內(nèi)的任何存儲(chǔ)單元。堆棧指針總是指向第一個(gè)可用的空字并從低地址到高地址填充軟件堆棧。堆棧出棧(讀)時(shí),堆棧指針先減;堆棧進(jìn)棧(寫)時(shí),堆棧指針后加,軟件堆棧幀指針W14軟件堆棧幀指針,因?yàn)橥ㄟ^使用LNK(link,連接)和ULNKunlink

,不連接)指令可以把它用作堆棧幀指針。當(dāng)不用作幀指針時(shí),W14可被指令當(dāng)作普通的工作寄存器使用。12134、CPU寄存器描述SR:CPU狀態(tài)寄存器dsPIC30F的CPU有一個(gè)16位狀態(tài)寄存器(SR),它的低字節(jié)稱為低狀態(tài)寄存器SRL,的高字節(jié)稱為SRH。SRL包含了所有的MCUALU操作狀態(tài)標(biāo)志,加上CPU中斷優(yōu)先級(jí)狀態(tài)位IPL<2:0>和REPEAT循環(huán)有效狀態(tài)位RA(SR<4>)。SRH包含DSP加法器/減法器狀態(tài)位、DO循環(huán)有效位DA(SR<9>)和輔助進(jìn)位標(biāo)志位DC(SR<8>)。141516CORCON:內(nèi)核控制寄存器CORCON寄存器包含控制DSP乘法器和DO循環(huán)硬件操作的位。還包含IPL3狀態(tài)位,它與IPL<2:0>(SR<7:5>)相連形成CPU中斷優(yōu)先級(jí)。1718TBLPAG:表頁寄存器TBLPAG寄存器用于在讀表和寫表操作過程中保存程序存儲(chǔ)器地址的高8位。表指令用于傳輸程序存儲(chǔ)空間和數(shù)據(jù)存儲(chǔ)空間之間的數(shù)據(jù)。PSVPAG:程序空間可視性頁寄存器程序空間可視性允許用戶將程序存儲(chǔ)空間的32KB區(qū)域映射到數(shù)據(jù)地址空間的高32KB。此特性允許通過在數(shù)據(jù)存儲(chǔ)器上操作的dsPIC30F指令對(duì)常數(shù)數(shù)據(jù)進(jìn)行透明訪問。PSVPAG寄存器選擇映射到數(shù)據(jù)地址空間的程序存儲(chǔ)空間的32KB區(qū)域。MODCON:模控制寄存器MODCON寄存器用于使能并配置模尋址(循環(huán)緩沖)。19XMODSRT,XMODEND:X模起始和結(jié)束地址寄存器XMODSRT和XMODEND寄存器保持X數(shù)據(jù)存儲(chǔ)地址空間中執(zhí)行模(循環(huán))緩沖的起始和結(jié)束地址。YMODSRT,YMODEND:Y模起始和結(jié)束地址寄存器YMODSRT和YMODEND寄存器保持Y數(shù)據(jù)存儲(chǔ)地址空間中執(zhí)行模(循環(huán))緩沖的起始和結(jié)束地址。XBREV:X模位反轉(zhuǎn)寄存器XBREV寄存器用于設(shè)置位反轉(zhuǎn)尋址的緩沖區(qū)大小。DISICNT:禁止中斷計(jì)數(shù)寄存器DISI指令使用DISICNT寄存器將優(yōu)先級(jí)為1-6的中斷在指定的幾個(gè)周期內(nèi)禁止。205、算術(shù)邏輯單元(ALU)dsPIC30FALU為16位寬,能進(jìn)行加、減、單位移位和邏輯運(yùn)算。除非特別指明,算術(shù)運(yùn)算一般是以2進(jìn)制補(bǔ)碼形式進(jìn)行的。根據(jù)不同的操作,ALU可能會(huì)影響SR寄存器中的進(jìn)位標(biāo)志位(C)、全零標(biāo)志位(Z)、負(fù)標(biāo)志位(N)、溢出標(biāo)志位(OV)和輔助進(jìn)位標(biāo)志位(DC)的值。在減法操作中,C和DC位分別作為借位和輔助借位位。根據(jù)所使用的指令模式,ALU可以執(zhí)行8位或16位操作。根據(jù)指令的尋址模式,ALU操作的數(shù)據(jù)可以來自W寄存器陣列或數(shù)據(jù)存儲(chǔ)器,輸出數(shù)據(jù)可以被寫入W寄存器陣列或數(shù)據(jù)存儲(chǔ)單元。dsPIC30F有兩條指令有助于混合8位和16位ALU操作。符號(hào)擴(kuò)展(SE)指令獲取W寄存器或數(shù)據(jù)存儲(chǔ)器的一個(gè)字節(jié)值并創(chuàng)建存儲(chǔ)在W寄存器中的符號(hào)擴(kuò)展字值。零擴(kuò)展(ZE)指令清零W寄存器或數(shù)據(jù)存儲(chǔ)器中字值的8MSb

并將結(jié)果放在目標(biāo)W寄存器中。216、除法支持16/16位有符號(hào)小數(shù)除法運(yùn)算,以及32/16位、16/16位有符號(hào)和無符號(hào)整數(shù)除法運(yùn)算,除法形式均為單指令迭代除法。支持以下指令和數(shù)據(jù)長(zhǎng)度:

1.DIVF——16/16有符號(hào)小數(shù)除法

2.DIV.sd——32/16有符號(hào)除法

3.DIV.ud——32/16無符號(hào)除法

4.DIV.s——16/16有符號(hào)除法

5.DIV.u——16/16無符號(hào)除法除法指令必須在一個(gè)REPEAT循環(huán)內(nèi)執(zhí)行。任何其他執(zhí)行方式(例如,一系列不連續(xù)的除法指令),將不會(huì)正常運(yùn)行,因?yàn)橹噶盍魅Q于RCOUNT。除法指令不會(huì)自動(dòng)設(shè)置RCOUNT值,于是RCOUNT必須顯式地、正確地在REPEAT指令中指定,所以,完整的除法操作需要19個(gè)周期。227、DSP引擎DSP引擎由一個(gè)高速17位x17位乘法器、一個(gè)桶形移位寄存器和一個(gè)40位加法器/減法器(兩個(gè)目標(biāo)累加器、舍入邏輯和飽和邏輯)組成。dsPIC30F器件采用單周期指令流,可以執(zhí)行DSP指令或MCU指令。許多硬件資源可以被DSP和MCU指令共用。DSP引擎還能夠執(zhí)行固有的不需要其他數(shù)據(jù)的累加器操作。這些指令是ADD、SUB和NEG。DSP引擎的功能如下:

1.小數(shù)或整數(shù)DSP乘法(IF)。

2.有符號(hào)或無符號(hào)DSP乘法(US)。

3.常規(guī)或收斂舍入(RND)。

4.ACCA自動(dòng)飽和使能/禁止(SATA)。

5.ACCB自動(dòng)飽和使能/禁止(SATB)。

6.對(duì)于寫數(shù)據(jù)存儲(chǔ)器,自動(dòng)飽和使能/禁止(SATDW)。

7.累加器飽和模式選擇(ACCSAT)。2324乘法器17x17位乘法器可以進(jìn)行有符號(hào)或無符號(hào)的運(yùn)算,其輸出經(jīng)過定標(biāo)器進(jìn)行換算后可支持1.31小數(shù)(Q31)或32位整數(shù)結(jié)果。無符號(hào)操作數(shù)經(jīng)過零擴(kuò)展后,送入乘法器輸入值的第17位。有符號(hào)操作數(shù)經(jīng)過符號(hào)擴(kuò)展,送入乘法器輸入值的第17位。17x17位乘法器/定標(biāo)器的輸出是33位值,它將被符號(hào)擴(kuò)展為40位。整型數(shù)據(jù)的固有表示形式為有符號(hào)的二進(jìn)制補(bǔ)碼值,其中MSb

定義為符號(hào)位。當(dāng)乘法器配置為小數(shù)乘法時(shí),數(shù)據(jù)表示為二進(jìn)制補(bǔ)碼小數(shù),其中MSb

定義為符號(hào)位,小數(shù)點(diǎn)暗含在符號(hào)位之后(QX格式)。暗含小數(shù)點(diǎn)的N位二進(jìn)制補(bǔ)碼小數(shù)的范圍為-1.0到(1-21-N)。對(duì)于16位小數(shù),Q15數(shù)據(jù)范圍為-1.0(0x8000)到0.999969482(0x7FFF),包括0在內(nèi),其精度為3.01518x10-5。在小數(shù)模式下,16x16乘法運(yùn)算將產(chǎn)生1.31乘積,其精度為4.65661x10-10。MUL指令可以使用字節(jié)或字長(zhǎng)度的操作數(shù)。字節(jié)操作數(shù)將產(chǎn)生16位結(jié)果,而字操作數(shù)將產(chǎn)生32位結(jié)果,結(jié)果存放在W寄存器陣列的指定寄存器中25數(shù)據(jù)累加器和加法器/減法器數(shù)據(jù)累加器包含一個(gè)40位加法器/減法器,它帶有自動(dòng)符號(hào)擴(kuò)展邏輯。它可以選擇兩個(gè)累加器(A或B)之一作為其累加前的源累加器和累加后的目標(biāo)累加器。對(duì)于ADD和LAC指令,可選擇通過桶形移位器在累加之前將要累加或裝入的數(shù)據(jù)進(jìn)行換算。加法器/減法器是一個(gè)40位加法器,一側(cè)輸入可以選擇為零,而另一側(cè)輸入可以是原數(shù)據(jù)或求補(bǔ)后的數(shù)據(jù)。對(duì)于加法,進(jìn)位/借位輸入為高電平有效,另一側(cè)輸入是原數(shù)據(jù)(沒有求補(bǔ)的);對(duì)于減法,進(jìn)位/借位輸入為低電平有效,另一側(cè)輸入是求補(bǔ)后的數(shù)據(jù)。加法器/減法器產(chǎn)生溢出狀態(tài)位SA/SB和OA/OB,這些狀態(tài)位被鎖存在狀態(tài)寄存器中并在其中得到反映。

從bit39溢出:這是災(zāi)難性溢出,會(huì)破壞累加器的符號(hào)位。

溢出到警戒位(bit32到bit39):這是可恢復(fù)的溢出。每當(dāng)警戒位彼此不完全一致時(shí),就將把這個(gè)狀態(tài)位置1。如果選取飽和模塊將控制累加器的數(shù)據(jù)飽和。飽和模塊使用加法器的結(jié)果、上述的溢出狀態(tài)位、SATA/B(CORCON<7:6>)和ACCSAT(CORCON<4>)模式控制位,來確定何時(shí)飽和、達(dá)到何值為飽和。26累加器“回寫”MAC類指令(MPY、MPY.N、ED和EDAC除外)可以選擇將累加器高位字(bit16到bit31)的舍入形式寫入數(shù)據(jù)存儲(chǔ)空間,前提是當(dāng)前指令不對(duì)該累加器進(jìn)行操作。通過X總線尋址組合的X和Y地址空間,執(zhí)行回寫操作。支持以下尋址模式:1.W13,寄存器直接尋址:非操作目標(biāo)的累加器的舍入內(nèi)容以1.15小數(shù)形式寫入W13。2.[W13]+=2,執(zhí)行后遞增的寄存器間接尋址:非操作目標(biāo)的累加器的舍入內(nèi)容以1.15小數(shù)形式寫入W13指向的地址。然后W13遞增2(對(duì)于字寫入)。27舍入邏輯舍入邏輯是一個(gè)組合模塊,在累加器寫(存儲(chǔ))過程中執(zhí)行常規(guī)的(有偏)或收斂的(無偏)舍入功能。舍入模式由CORCON寄存器中RND位的狀態(tài)決定。它會(huì)產(chǎn)生一個(gè)16位的1.15數(shù)據(jù)值,該值被送到數(shù)據(jù)空間寫飽和邏輯。如果指令不指明舍入,就會(huì)存儲(chǔ)一個(gè)截取的1.15數(shù)據(jù)值,簡(jiǎn)單地丟棄低位字。常規(guī)舍入取累加器的bit15,對(duì)它進(jìn)行零擴(kuò)展并將擴(kuò)展后的值加到ACCxH

字(累加器的bit16到bit31)。如果ACCxL

字(累加器的bit0到bit15)在0x8000和0xFFFF之間(包括0x8000),則ACCxH

遞增1。如果ACCxL

在0x0000和0x7FFF之間,則ACCxH

不變。28數(shù)據(jù)空間寫飽和除了加法器/減法器飽和,對(duì)數(shù)據(jù)空間進(jìn)行寫操作也會(huì)飽和,但不會(huì)影響源累加器的內(nèi)容。數(shù)據(jù)空間寫飽和邏輯塊接受來自舍入邏輯塊的一個(gè)16位的1.15小數(shù)值作為輸入,還接受來自源(累加器)和16位舍入加法器的溢出狀態(tài)。這些經(jīng)過組合用來選擇適當(dāng)?shù)?.15小數(shù)值作為輸出,寫入數(shù)據(jù)存儲(chǔ)空間中。如果CORCON寄存器中的SATDW位置1,將檢測(cè)(經(jīng)過舍入或截取后的)數(shù)據(jù)是否溢出,并進(jìn)行相應(yīng)的調(diào)整。如果輸入數(shù)據(jù)大于0x007FFF,則寫入存儲(chǔ)器中的數(shù)據(jù)被強(qiáng)制為最大的正1.15值,0x7FFF。如果輸入數(shù)據(jù)小于0xFF8000,則寫入存儲(chǔ)器中的數(shù)據(jù)被強(qiáng)制為最大的負(fù)1.15值,0x8000。源累加器的MSb

(bit39)用來決定被檢測(cè)的操作數(shù)的符號(hào)。如果CORCON寄存器中的SATDW位沒有置1,則輸入數(shù)據(jù)都將通過,在任何情況下都不會(huì)被修改。29桶形移位寄存器桶形移位寄存器在單個(gè)周期內(nèi)可將數(shù)據(jù)算術(shù)或邏輯右移或左移最多16位。源操作數(shù)可以是兩個(gè)DSP累加器中的任何一個(gè)或X總線(支持寄存器或存儲(chǔ)器中數(shù)據(jù)的多位移位)。移位寄存器需要一個(gè)有符號(hào)二進(jìn)制值,用來確定移位操作的幅度(位數(shù))和方向。正值將操作數(shù)右移。負(fù)值則將操作數(shù)左移。值為0則不改變操作數(shù)。桶形移位寄存器為40位寬,它為DSP移位操作提供了40位的結(jié)果,而為MCU移位操作提供16位的結(jié)果。來自X總線的數(shù)據(jù)在桶形移位寄存器中的存放方式是:右移則數(shù)據(jù)存放在bit16到bit31,左移則存放在bit0到bit15。308、指令流類型3132333435指令集指令集有兩類指令:MCU類指令和DSP類指令。這兩類指令無縫地集成到架構(gòu)中并從同一個(gè)執(zhí)行單元執(zhí)行。指令集包括很多尋址模式,指令的設(shè)置可使C編譯器的效率達(dá)到最優(yōu)。單級(jí)指令預(yù)取機(jī)制內(nèi)核不支持多級(jí)指令流水線。使用了單級(jí)指令預(yù)取機(jī)制,在指令執(zhí)行的前一個(gè)周期取指令并部分譯碼指令。除了一些特例外,大部分指令都在單個(gè)周期內(nèi)執(zhí)行。36數(shù)據(jù)空間數(shù)據(jù)空間為64KB(32K字),被分成兩塊,稱為X和Y數(shù)據(jù)存儲(chǔ)區(qū)。每個(gè)存儲(chǔ)塊有各自獨(dú)立的地址發(fā)生單元AGU。大多數(shù)指令只通過X存儲(chǔ)空間AGU進(jìn)行操作,這樣對(duì)外界而言數(shù)據(jù)空間就是單獨(dú)而統(tǒng)一的。乘-累加(Multiply-Accumulate,MAC)類雙源操作數(shù)DSP指令,通過X和Y的AGU進(jìn)行操作,這將數(shù)據(jù)地址空間分成兩個(gè)部分。X和Y數(shù)據(jù)空間邊界視具體器件而定,用戶不能改變它們。每個(gè)數(shù)據(jù)字由2個(gè)字節(jié)組成,大多數(shù)指令按字或字節(jié)對(duì)數(shù)據(jù)進(jìn)行尋。37存儲(chǔ)在程序存儲(chǔ)器中的數(shù)據(jù)有兩種訪問方法

數(shù)據(jù)存儲(chǔ)空間的高32KB可以映射到程序空間的

溫馨提示

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

評(píng)論

0/150

提交評(píng)論