




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
輕松玩轉(zhuǎn)DSP基于TMS320F2833x目錄\h第1章TMS320F2833x的硬件架構(gòu)\h1.1系統(tǒng)結(jié)構(gòu)\h1.1.1總線系統(tǒng)\h1.1.2中央處理器單元CPU\h1.1.3數(shù)學(xué)運算單元\h1.1.4F2833x寄存器組\h1.2存儲器配置\h1.2.1片上存儲單元\h1.2.2片外存儲單元(XINTF)的應(yīng)用及注意事項\h1.3DMA控制器\h1.3.1DMA的數(shù)據(jù)傳輸\h1.3.2F2833x的DMA中斷事件及寄存器配置\h1.3.3F2833x的DMA示例\h1.4輕松玩轉(zhuǎn)硬件系統(tǒng)\h第2章片上初始化單元\h2.1時鐘及控制\h2.1.1時鐘的產(chǎn)生\h2.1.2F28335系統(tǒng)時鐘的分配\h2.1.3F28335的看門狗電路\h2.2中斷系統(tǒng)分析\h2.2.1中斷系統(tǒng)的結(jié)構(gòu)\h2.2.2可屏蔽中斷處理\h2.2.3非屏蔽中斷處理\h2.2.4外設(shè)中斷擴展模塊(PIE)的使用詳解\h2.2.5非法中斷產(chǎn)生原因及解決方案\h2.2.6中斷嵌套之我見\h2.2.7中斷應(yīng)用分析\h2.3F2833x的低功耗模式\h2.3.1低功耗的分類及應(yīng)用\h2.3.2低功耗模式程序分析\h2.4F2833x的CPU定時器\h2.4.1基礎(chǔ)結(jié)構(gòu)及原理\h2.4.2定時器的應(yīng)用設(shè)計\h2.5通用IO原理及應(yīng)用\h2.5.1GPIO功能結(jié)構(gòu)\h2.5.2GPIO的示例詳解\h2.5.3GPIO常見問題\h2.6寄存器的保護\h2.7輕松玩轉(zhuǎn)軟件系統(tǒng)\h2.7.1如何在CCS6.0下新建一個F28335的工程\h2.7.2CCS6.0導(dǎo)入工程\h2.7.3CCS浮點運算性能優(yōu)化\h2.7.4CCS及CodeGeneration常見問題\h第3章程序應(yīng)用語言\h3.1C語言編程基礎(chǔ)\h3.1.1F28335的C語言數(shù)據(jù)類型\h3.1.2幾個重要的關(guān)鍵字\h3.1.3C語言程序漸進示例\h3.1.4F28x的8位尋址\h3.2鏈接器命令文件CMD\h3.2.1存儲器映射說明及程序段放置\h3.2.2CMD常見問題\h3.3F2833x數(shù)據(jù)格式解析\h3.3.1IEEE754單精度浮點格式\h3.3.2整型數(shù)據(jù)格式\h3.3.3IQ數(shù)據(jù)格式\h3.4浮點運算的定點編程\h3.4.1定點-浮點數(shù)據(jù)的轉(zhuǎn)換\h3.4.2IQMath庫的使用\h3.4.3IQMath庫的功能說明\h第4章F2833x片上控制類外設(shè)\h4.1增強型脈寬調(diào)制模塊ePWM\h4.1.1PWM原理概述\h4.1.2時間基準子模塊及應(yīng)用\h4.1.3計數(shù)器比較子模塊及應(yīng)用\h4.1.4動作限定子模塊\h4.1.5如何產(chǎn)生對稱及非對稱信號\h4.1.6死區(qū)子模塊\h4.1.7斬波子模塊\h4.1.8觸發(fā)子模塊\h4.1.9事件觸發(fā)器子模塊\h4.2增強型捕獲模塊eCAP\h4.2.1eCAP模塊的捕獲操作模式\h4.2.2輔助脈寬調(diào)制APWM操作模式\h4.2.3eCAP模塊的寄存器\h4.2.4捕獲及APWM操作模式示例\h4.3增強型QEP模塊\h4.3.1QEP功能概述\h4.3.2eQEP模塊結(jié)構(gòu)單元\h4.3.3eQEP模塊寄存器\h4.4模數(shù)轉(zhuǎn)換器模塊ADC\h4.4.1ADC模塊構(gòu)成\h4.4.2時鐘及采樣頻率\h4.4.3ADC的4種工作模式\h4.4.4ADC模塊校準及常見問題\h4.4.5ADC寄存器\h4.4.6ADC基本應(yīng)用程序分析\h4.5輕松玩轉(zhuǎn)片上控制類外設(shè)\h4.5.1三相橋式電路的SPWM發(fā)波\h4.5.2SVPWM傳統(tǒng)發(fā)波算法\h4.5.3SVPWM簡易發(fā)波算法及CCS6的波形觀測\h4.5.4SVPWM快速發(fā)波算法\h4.5.5三電平電路的DSP實現(xiàn)\h4.5.6eQEP模塊程序分析\h4.5.7ADC的DMA數(shù)據(jù)讀取\h4.5.8控制外設(shè)綜合示例\h第5章F2833x片上通信類外設(shè)\h5.1SCI通信模塊\h5.1.1SCI工作原理及數(shù)據(jù)格式\h5.1.2多處理器通信方式\h5.1.3SCI相關(guān)寄存器\h5.2SPI通信模塊\h5.2.1SPI數(shù)據(jù)傳輸方式\h5.2.2SPI相關(guān)寄存器\h5.2.3SPI常見問題\h5.3I\h2\hC通信模塊\h5.3.1I\h2\hC總線基礎(chǔ)\h5.3.2I\h2\hC數(shù)據(jù)格式\h5.3.3I\h2\hC模塊寄存器\h5.4CAN通信模塊\h5.4.1CAN通信工作原理及數(shù)據(jù)格式\h5.4.2F2833x的CAN模塊\h5.5輕松玩轉(zhuǎn)片上通信類外設(shè)\h5.5.1SCI模塊應(yīng)用實例\h5.5.2SPI模塊應(yīng)用實例\h5.5.3CAN模塊應(yīng)用實例及常見問題\h5.5.4I\h2\hC模塊應(yīng)用實例\h第6章輕松玩轉(zhuǎn)DSP——揭開BootLoader神秘的面紗\h6.1系統(tǒng)復(fù)位源\h6.2解密DSP的程序引導(dǎo)模式\h6.2.1程序引導(dǎo)流程及代碼詳解\h6.2.2引導(dǎo)模式之——跳轉(zhuǎn)模式及函數(shù)解析\h6.2.3引導(dǎo)模式之——加載模式及關(guān)鍵代碼解析\h6.3主函數(shù)運行之前發(fā)生了什么\h6.3.1運行環(huán)境的建立\h6.3.2“_c_int00”作用及意義\h第7章輕松玩轉(zhuǎn)DSP——撥云見日,F(xiàn)LASH編程\h7.1FLASH初始化\h7.2FLASH編程基礎(chǔ)\h7.2.1FLASH編程原理及操作指南\h7.2.2常用FLASH編程方式\h7.2.3如何使用API進行自定義編程\h7.2.4輕松玩轉(zhuǎn)用戶自定義的FLASHKernel\h7.3使用FLASH應(yīng)注意什么\h7.3.1為什么DSP某些段必須加載到RAM運行\(zhòng)h7.3.2FLASH應(yīng)用的常見問題\h7.4代碼安全模塊CSM的應(yīng)用\h7.4.1加密及解鎖操作\h7.4.2CSM常見問題\h第8章輕松玩轉(zhuǎn)DSP——數(shù)字電源的數(shù)學(xué)建模及DSP設(shè)計\h8.1數(shù)學(xué)建?;痉椒╘h8.1.1基本交流小信號分析法\h8.1.2狀態(tài)空間平均法\h8.1.3電路平均法\h8.1.4開關(guān)平均法\h8.2數(shù)字化同步Buck電路的研究\h8.2.1數(shù)學(xué)建模\h8.2.2控制器設(shè)計\h8.2.3實驗結(jié)果\h第9章輕松玩轉(zhuǎn)DSP——數(shù)字鎖相環(huán)的DSP設(shè)計\h9.1數(shù)字鎖相環(huán)概述\h9.1.1鎖相環(huán)的工作原理\h9.1.2鎖相環(huán)的數(shù)學(xué)建模\h9.2基于旋轉(zhuǎn)坐標系的三相鎖相環(huán)的算法分析\h9.2.1旋轉(zhuǎn)矢量生成原理\h9.2.2三相鎖相環(huán)的軟件設(shè)計\h9.3基于自適應(yīng)陷波濾波器的算法分析\h9.3.1傳統(tǒng)PLL鎖相在并網(wǎng)型逆變器中的缺陷\h9.3.2自適應(yīng)陷波濾波器在PLL中的理論分析\h9.3.3MATLAB仿真分析\h9.3.4DSP程序設(shè)計\h9.4基于二階廣義積分器的算法分析\h9.4.1二階廣義積分器在PLL中的理論分析\h9.4.2MATLAB仿真分析\h9.4.3DSP程序設(shè)計\h第10章輕松玩轉(zhuǎn)DSP——數(shù)字濾波器的DSP應(yīng)用\h10.1有限長沖擊響應(yīng)濾波器(FIR)的DSP設(shè)計\h10.1.1FIR濾波器的理論背景\h10.1.2DSP的匯編程序設(shè)計\h10.1.3DSP的C程序設(shè)計\h10.2無限長沖擊響應(yīng)濾波器(IIR)的DSP設(shè)計\h10.2.1IIR濾波器的理論背景\h10.2.2DSP的匯編程序設(shè)計\h10.2.3DSP的C程序設(shè)計\h第11章輕松玩轉(zhuǎn)DSP——永磁同步電動機(PMSM)的數(shù)字化控制\h11.1PMSM的基本數(shù)學(xué)模型\h11.2有速度傳感器的永磁同步電動機控制系統(tǒng)設(shè)計\h11.2.1永磁同步電動機矢量控制原理\h11.2.2C程序分析\h11.3無速度傳感器的永磁同步電動機控制系統(tǒng)設(shè)計\h11.3.1基于滑模算法的無速度傳感器控制原理\h11.3.2C程序設(shè)計\h第12章輕松玩轉(zhuǎn)DSP——靜止無功發(fā)生器控制技術(shù)的研究\h12.1電網(wǎng)無功功率概述\h12.1.1無功功率的產(chǎn)生及其危害\h12.1.2無功補償?shù)淖饔肻h12.1.3無功補償?shù)念愋蚛h12.2無功電流檢測與控制策略\h12.2.1靜止無功發(fā)生器基本原理\h12.2.2瞬時無功功率理論\h12.2.3常用的幾種無功電流檢測方法\h12.2.4三相三線制SVG控制策略\h12.3基于F28335的靜止無功發(fā)生器設(shè)計\h12.3.1系統(tǒng)總體結(jié)構(gòu)\h12.3.2硬件設(shè)計\h12.3.3SVG系統(tǒng)仿真模型建立\h附錄\h附錄AGPIO功能配置\h附錄B受EALLOW保護的寄存器匯總\h附錄C浮點匯編指令第1章TMS320F2833x的硬件架構(gòu)TMS320F2833x(簡稱F2833x)硬件框圖如圖1.1所示,由如下幾部分組成:內(nèi)部及外部總線系統(tǒng)、中央處理器(CPU,簡稱為C28x)、內(nèi)部存儲器、控制外設(shè)、通信端口、直接內(nèi)存存取控制器(簡稱為DMA)、中斷管理單元、CPU核定時器及實時仿真接口。圖1.1F2833x的內(nèi)部結(jié)構(gòu)圖1.1系統(tǒng)結(jié)構(gòu)1.1.1總線系統(tǒng)F2833x配置了獨立的程序總線(ProgramBus)和數(shù)據(jù)總線(DataBus),使CPU可在單周期內(nèi)從內(nèi)存讀取2個操作數(shù),也就是人們所熟知的哈佛結(jié)構(gòu)。由于F2833x取操作數(shù)不但能從數(shù)據(jù)存儲器讀取,也要能從程序存儲器讀取,所以TI公司采用的是如圖1.2所示的改進的哈佛結(jié)構(gòu)(ModifiedHarvard-Architecture)。該結(jié)構(gòu)包含:程序總線(22位的程序地址總線PAB、32位的程序數(shù)據(jù)總線PRDB);數(shù)據(jù)讀總線(32位的數(shù)據(jù)讀地址總線DRAB、32位的數(shù)據(jù)讀數(shù)據(jù)總線DRDB);數(shù)據(jù)寫總線(32位的數(shù)據(jù)寫數(shù)據(jù)總線DWDB、32位的數(shù)據(jù)寫地址總線DWAB)。圖1.2F2833x的總線結(jié)構(gòu)除數(shù)據(jù)總線和地址總線外,F(xiàn)2833x存在第3類總線,稱為寄存器總線。該總線與CPU內(nèi)部所有的單元相連,允許在這種并行機制下進行快速的數(shù)據(jù)交互。此外,DMA控制器通過DMA總線可獨立于CPU操作F2833x某些特定的硬件單元,極大地提升CPU的數(shù)據(jù)吞吐率。細心的讀者可以發(fā)現(xiàn),在圖1.1的左側(cè)存在外設(shè)連接接口(XINTF),通過外部數(shù)據(jù)總線32位(D31~D0)和地址總線20位(A19~A0)訪問外部存儲單元。注意,這種外部訪問不是同步的,就2個32位操作數(shù)而言,內(nèi)部訪問只需要1個時鐘周期而外部訪問需要花費一倍的時間,因而在訪問外部較慢的存儲器時,無須考慮額外的等待時間。1.1.2中央處理器單元CPUF2833x具有強大的數(shù)字信號處理(DSP)能力又具有微控制器(MCU)的功能。在其誕生之前,執(zhí)行復(fù)雜控制算法的常見方法是VC33DSP負責(zé)運算,LF2407A或者F2812等定點DSP負責(zé)控制,現(xiàn)在用一片F(xiàn)2833x來實現(xiàn)還綽綽有余。F2833x存在32×32位硬件乘法器和64位處理能力的功能,使F2833x可有效處理更復(fù)雜的數(shù)值解析問題。此外,F(xiàn)2833x的CPU還支持一種叫“原子指令”的讀寫簡化機制(AtomicsRead/Modify/Write)。原子指令是小的、通用的不可中斷指令。原子指令可以更快地完成讀寫操作,并具有更小的代碼規(guī)模。而采用常規(guī)的非原子指令,占用內(nèi)存多且執(zhí)行時間長,兩種情況的比較如圖1.3所示。圖1.3非原子操作與原子操作的比較a)常規(guī)的非原子操作b)讀-修改-寫原子操作1.1.3數(shù)學(xué)運算單元F2833x的運算執(zhí)行單元如圖1.4所示。圖1.4F2833x的運算執(zhí)行單元1.F2833x的乘法器乘法器可執(zhí)行32位×32位或16位×16位乘法,以及雙16位×16位乘法。2.F2833x的ALUALU的基本功能是完成算術(shù)運算和邏輯操作。這些包括:32位加法運算;32位減法運算;布爾邏輯操作;位操作(位測試、移位和循環(huán)移位)。ALU的輸入輸出:一個操作數(shù)來自ACC輸出,另一個操作數(shù)由指令選擇,可來自輸入移位器、乘積移位器或直接來自乘法器。ALU的輸出直接送到ACC,然后可以重新作為輸入或經(jīng)過輸出移位器送到數(shù)據(jù)存儲器。3.F2833x的ACC累加器是32位,用于存儲ALU結(jié)果,它不但可分為AH(高16位)和AL(低16位),還可進一步分成4個8位的單元(AH.MSB、AH.LSB、AL.MSB和AL.LSB);在ACC中可完成移位和循環(huán)移位的位操作,以實現(xiàn)數(shù)據(jù)的定標及邏輯位的測試。4.F2833x的移位器移位器能夠快速完成移位操作。F2833x的移位操作主要用于數(shù)據(jù)的對齊和放縮,以避免發(fā)生上溢和下溢;還用于定點數(shù)與浮點數(shù)間的轉(zhuǎn)換。DSP中的移位器要求在一個周期內(nèi)完成數(shù)據(jù)移動指定的位數(shù)。32位輸入定標移位器是把來自存儲器的16位數(shù)據(jù)與32位的ALU對齊,可以對來自ACC的數(shù)據(jù)進行放縮;32位的乘積移位器可以把補碼乘法產(chǎn)生的額外符號位去除,可以通過移位防止累加器溢出,乘積移位模式由狀態(tài)寄存器ST1中的乘積移位模式位(PM)的設(shè)置決定;累加器輸出移位器用于完成數(shù)據(jù)的儲前處理。1.1.4F2833x寄存器組F2833x的寄存器組由輔助寄存器算術(shù)單元(ARAU)和一些寄存器組成。1.F2833x的ARAUF2833x設(shè)置有一個與ALU無關(guān)的算術(shù)單元ARAU,其作用是與ALU中進行的操作并行地實現(xiàn)對8個輔助寄存器(XAR0~XAR7)的算術(shù)運算,從而使8個輔助寄存器完成靈活高效的間接尋址功能,如圖1.5所示。圖1.5F2833x的ARAU結(jié)構(gòu)圖指令執(zhí)行時,當(dāng)前XARn的內(nèi)容用作訪問數(shù)據(jù)存儲器的地址,如果是從數(shù)據(jù)存儲器中讀數(shù)據(jù),ARAU就把這個地址送到數(shù)據(jù)讀地址總線(DRAB);如果是向數(shù)據(jù)存儲器中寫數(shù)據(jù),ARAU就把這個地址送到數(shù)據(jù)寫地址總線(DWAB)。ARAU能夠?qū)ARn進行加1、減1及加減某一常數(shù)等運算,以產(chǎn)生新的地址。輔助寄存器還可用作通用寄存器、暫存單元或軟件計數(shù)器。2.F2833x的CPU寄存器1)與運算器相關(guān)的寄存器。①被乘數(shù)寄存器XT(32位):XT可以分成兩個16位的寄存器T和TL。②乘積寄存器P(32位):P可以分成兩個16位的寄存器PH和PL。③累加器ACC(32位):存放大部分算數(shù)邏輯運算的結(jié)果,以32位、16位及8位的方式訪問,對累加器的操作影響狀態(tài)寄存器ST0的相關(guān)狀態(tài)位。2)輔助寄存器XAR0~XRA7(8個,32位),常用于間接尋址。3)與中斷相關(guān)的寄存器,包括中斷允許寄存器IER、中斷標志寄存器IFR和調(diào)試中斷允許寄存器DBGIER,它們的定義及功能在中斷相關(guān)章節(jié)敘述。4)狀態(tài)寄存器:ST0和ST1,它們控制DSP的工作模式并反映DSP的運行狀態(tài)。狀態(tài)寄存器ST0、ST1各位的含義分別見表1.1和表1.2。表1.1狀態(tài)寄存器ST0各位的含義表1.2狀態(tài)寄存器ST1各位的含義(續(xù))5)指針類寄存器。①程序計數(shù)器PC(22位)用來存放CPU正在操作指令的地址,復(fù)位值為0x3FFFC0。②返回PC指針寄存器RPC(22位)用于加速調(diào)用返回過程。③數(shù)據(jù)頁指針DP(16位)用于存放數(shù)據(jù)存儲器的頁號(每頁64個地址),用于直接尋址。④堆棧指針SP(16位),其生長方向為從低地址到高地址,復(fù)位值為0400H。進行32位數(shù)讀寫,并約定偶地址訪問(例:SP為0083H,32位讀從0082H開始)。6)與浮點運算相關(guān)的寄存器。①浮點結(jié)果寄存器8個:R0H~R7H。②浮點狀態(tài)寄存器STF。③重復(fù)塊寄存器RB。F2833x的CPU寄存器分布如圖1.6所示。圖1.6F2833x的CPU寄存器1.2存儲器配置F2833x具有34KW的SARAM存儲器、256KW的FLASH存儲器、1KW的OTPROM存儲器和8KW的BootROM存儲器,配置如圖1.7所示。存儲空間分成兩塊:片外存儲空間(3個XINTF區(qū))和片內(nèi)存儲空間(XINTF以外區(qū)域)。對于片內(nèi)空間,除外設(shè)幀PF0、PF1、PF2和PF3外,其余空間既可映射為數(shù)據(jù)空間,又可映射為程序空間。圖1.7F2833x的存儲器配置圖1.2.1片上存儲單元1.F2833x的SARAM存儲器F2833x在物理上提供了34KW的SARAM存儲器,分布在幾個不同的存儲區(qū)域。(1)M0和M1M0和M1均為1KW。M0地址為0x000000~0x0003FF,M1地址為0x000400~0x0007FF。M0和M1既可映射為數(shù)據(jù)空間,也可映射為程序空間。由于復(fù)位后SP的內(nèi)容為0x0400,因此M1默認作為堆棧。(2)L0~L7L0~L7每塊為4KW,它們既可映射為數(shù)據(jù)空間,也可映射為程序空間。其中L0~L3是雙映射(與F2812兼容),既映射到0x008000~0x00BFFF,又映射到0x3F8000~0x3FBFFF。L0~L3內(nèi)容受CSM(代碼安全模塊)保護;L4~L7是單映射的,映射地址為0x00C000~0x00FFFF,該區(qū)域可以DMA訪問。2.F2833x的FLASH存儲器FLASH存儲器為256KW且受CSM保護,程序燒寫到FLASH就無須借助仿真器進行調(diào)試了,此外連同密碼一同燒寫,程序的知識產(chǎn)權(quán)就得到了保證。F2833x片上地址為0x300000~0x33FFFF。FLASH存儲器通常映射為程序存儲空間,但也可以映射為數(shù)據(jù)存儲空間。FLASH又分成了8個扇區(qū),各扇區(qū)范圍見表1.3。表1.3FLASH扇區(qū)分配表需特別注意的是,A扇區(qū)尾部128個單元的特殊用途:1)0x33FF80~0x33FFF5,使用CSM時,該區(qū)域要清零。2)0x33FFF6是FLASH引導(dǎo)程序入口,即應(yīng)在0x33FFF6和0x33FFF7存儲跳轉(zhuǎn)指令。3)0x33FFF8~0x33FFFF,8個單元共128個位,存儲密碼。3.OTPROM存儲器OTP是一次性可編程存儲區(qū),即只能一次性寫入,不能被擦除,所以已經(jīng)寫過的部分是不可以被擦除和改寫的。F2833x有兩個OTP區(qū),其中一個已被TI公司用做ADC校準數(shù)據(jù)區(qū)(存放adc_cal()函數(shù)),另一區(qū)域地址為0x380400~0x3807FF,開放給用戶使用。OTP寫一次的對象是位,不是字節(jié),不是字,也不是一個區(qū),所以O(shè)TP可多次寫入,但對于一個位或一個地址,只能寫一次。4.BootROM存儲器BootROM存儲器共8KW,分成如圖1.8所示幾個區(qū)域。圖1.8F2833x的BootROM存儲器的映像5.F2833x的外設(shè)幀外設(shè)幀包含PF0、PF1、PF2和PF3,均受EALLOW保護。除CPU寄存器之外的其他寄存器,如CPU定時器、中斷向量、ePWM、eCAP等均配置在這個區(qū)域。其中外設(shè)幀PF3只包含MCBSPA寄存器,可通過DMA訪問。1.2.2片外存儲單元(XINTF)的應(yīng)用及注意事項1.片外存儲單元概述片外存儲單元指的就是XINTF,但F28335的XINTF擴展區(qū)減少到3個,分別為Zone0、Zone6和Zone7。每一個XINTF區(qū)域可以獨立配置特定的讀、寫訪問時序,每個區(qū)域還有相應(yīng)的區(qū)域片選信號,當(dāng)片選信號拉低時,即可訪問相應(yīng)區(qū)域。XINTF擴展引腳如圖1.9所示。所有的空間共享20位的外部地址總線,處理器根據(jù)被選通的Zone產(chǎn)生相應(yīng)的地址,具體如下:圖1.9XINTF擴展引腳1)Zone0分配的外部地址范圍為0x00000~0x00FFF。當(dāng)CPU訪問Zone0空間的第一個字時,地址總線產(chǎn)生0x00000;當(dāng)CPU訪問Zone0空間的最后一個字時,地址總線產(chǎn)生0x00FFF地址。需要注意的是,訪問Zone0空間時需要將Zone0的片選信號(XZCS0)拉低。2)Zone6和Zone7共享外部地址總線,地址范圍為0x00000~0xFFFFF,片選信號XZCS6為低決定Zone6被訪問,片選信號XZCS7為低決定Zone7被訪問。在C28x流水線中,操作的讀訪問在寫操作之前,因而程序是按照“先寫后讀”的順序,但實際運行可能會出現(xiàn)為“先讀后寫”的情況。為了防止順序顛倒,外設(shè)寄存器所在的存儲區(qū)域都設(shè)有相應(yīng)的硬件保護。這些區(qū)域被稱為“其后緊跟讀訪問的寫操作流水線保護”。Zone0是默認“其后緊跟讀訪問的寫操作流水線保護”的區(qū)域。對同一存儲單元進行訪問時,C28x自動保護其后緊跟讀的寫操作。但當(dāng)訪問不同存儲單元時,CPU通過插入足夠的NOP指令使得在進行讀訪問前完成寫操作。外設(shè)寄存器映射到XINTF區(qū)域時需要注意讀寫的執(zhí)行順序;當(dāng)存儲器映射到XINTF區(qū)域時,則不需要關(guān)心讀寫的執(zhí)行順序,因此區(qū)域0通常用來與外設(shè)器件相連,而不是存儲器。每個空間的訪問等待、選擇、建立及保持時間均可通過XTIMINGx寄存器進行配置。XINTF模塊用到兩個時鐘:XTIMCLK(內(nèi)部時鐘)和XCLKOUT(外部時鐘)。這兩個時鐘與CPU時鐘SYSCLKOUT的關(guān)系如圖1.10所示。圖1.10XINTF的時鐘框圖XINTF的訪問是基于XTIMCLK時鐘。配置XINTF時,用戶必須配置內(nèi)部時鐘XTIMCLK和SYSCLKOUT的比率關(guān)系(配置XINTCNF2寄存器),可將XTIMCLK時鐘頻率設(shè)置為SYSCLKOUT或SYSCLKOUT/2(默認情況)。XINTF的訪問是從外部時鐘輸出XCLKOUT的上升沿開始的,所有事件都是在相應(yīng)的XTIMCLK上升沿產(chǎn)生。配置XINTCNF2.CLKMODE位,可將XCLKOUT頻率設(shè)置為XTIMCLK或XTIMCLK/2(默認情況下,XCLKOUT等于XTIMCLK/2,或等效于SYSCLKOUT/4)。為降低系統(tǒng)干擾,用戶可將XINTCNF2寄存器的CLKOFF位寫1關(guān)閉XCLKOUT的輸出。注意:在改變XINTF配置時,應(yīng)保證沒有訪問XINTF區(qū)域,配置XINTF參數(shù)的代碼也不能從XINTF區(qū)域執(zhí)行。此外,每個區(qū)域都可以使用XREADY信號擴展外部等待狀態(tài)或不擴展。如圖1.11所示為XINTF讀寫時序圖。圖1.11XINTF讀寫時序圖XINTF可直接訪問外部存儲器映射區(qū)域。XINTF區(qū)域的讀寫時序可以分成三個階段:前導(dǎo)LEAD、有效ACTIVE和結(jié)束TRAIL。每階段等待狀態(tài)的XTIMCLK周期數(shù)可在相應(yīng)區(qū)域的XTIMING中配置,且讀訪問和寫操作的時序配置是獨立的。在前導(dǎo)階段,被訪問區(qū)域的片選信號被拉低,訪問的地址出現(xiàn)在地址總線上(XA),整個前導(dǎo)階段的時間可以在XTIMING中配置(單位為XTIMCLK周期)。默認情況下,讀、寫訪問的前導(dǎo)階段時間均被設(shè)置成最大值,即6個XTIMCLK周期。在有效階段,即對外部設(shè)備的訪問。對于讀訪問,讀選通信號XRD被拉低;對于寫操作,寫選通信號XWE0被拉低。結(jié)束階段是一段保持時間。在此階段,片選信號仍保持低電平,但讀、寫選通信號恢復(fù)為高電平,可在XTIMING中配置結(jié)束階段的時間。默認情況下,讀、寫訪問的結(jié)束階段時間被設(shè)置成最大值,即6個XTIMCLK周期。2.總線寬度每個Zone都可以獨立配置為16或32位總線寬度,總線連接如圖1.12所示。根據(jù)不同配置,XA0/XWE1信號的功能會發(fā)生相應(yīng)的變化。當(dāng)XINTFzone配置為16位操作模式時(XTIMINGx[XSIZE]=3),XA0/XWE1作為最低地址位XA0??偩€的寬度可由XTIMINGx[XSIZE]來定義,當(dāng)連續(xù)訪問兩個總線寬度不同的Zone空間時,兩個Zone的訪問之間要加入延時,這個可通過配置XBANK來實現(xiàn)。例如,給定的區(qū)域配置如下:圖1.1216位/32位數(shù)據(jù)總線寬度a)外擴16位數(shù)據(jù)b)外擴32位數(shù)據(jù)1)0區(qū)配置為16位模式(XTIMING0[XSIZE]=3)。2)6區(qū)配置為32位模式(XTIMING6[XSIZE]=1)。3)7區(qū)配置為32位模式(XTIMING7[XSIZE]=1)。若需要連續(xù)訪問Zone0和Zone6或者Zone0和Zone7,那么要在Zone0訪問過后加入至少一個空間切換延時來釋放總線,如XBANK=0,XBANK[BCYC]=1。3.常用寄存器1)XBANK寄存器,其位格式如圖1.13所示。圖1.13XBANK寄存器的位格式示例:從Zone7切換至其他的Zone,并增加額外的3個周期。2)XINTCNF2寄存器,其位格式如圖1.14所示。圖1.14XINTCNF2寄存器的位格式示例:XCLKOUT常用于檢測時鐘的調(diào)試階段。3)XTIMING0寄存器,位格式如圖1.15所示。圖1.15XTIMING0寄存器的位格式①X2TIMING:指定XRDLEAD、XRDACTIVE、XRDTRAIL、XWRLEAD、XWRACTIVE的縮放因子。0=縮放比例1∶1;1=縮放比例2∶1。②XSIZE:00~10=保留;01=32位接口(使用32位數(shù)據(jù)線);11=16位接口。③READYMODE:0=XREADY輸入為同步方式,1=XREADY輸入為異步方式。④USEREADY:0=Zone訪問時,XREADY信號被忽略;1=XREADY被用于擴展Zone。⑤XRDLEAD/XERLEAD:使用XTIMCLK來定義讀/寫數(shù)據(jù)時LEAD等待狀態(tài)周期,見表1.4。表1.4XTIMCLK定義的讀/寫數(shù)據(jù)時LEAD等待狀態(tài)周期⑥XRDACTIVE/XWRACTIVE:用XTIMCLK來定義讀/寫數(shù)據(jù)時ACTIVE等待狀態(tài)周期,見表1.5。表1.5XTIMCLK定義的讀/寫數(shù)據(jù)時ACTIVE等待狀態(tài)周期⑦XRDTRAIL/XWRTRAIL:使用XTIMCLK來定義讀/寫數(shù)據(jù)時TRAIL等待狀態(tài)周期,見表1.6。表1.6XTIMCLK定義的讀/寫數(shù)據(jù)時TRAIL等待狀態(tài)周期示例:Zone0的讀寫時鐘配置。4.示例分析配置CPU定時器0并使能定時器0中斷。中斷服務(wù)程序拷貝至外部存儲Zone7的SARAM中運行(16位數(shù)據(jù)總線)。參考代碼如下:二維碼1.11.3DMA控制器1.3.1DMA的數(shù)據(jù)傳輸1.數(shù)據(jù)交換方式DMA控制器產(chǎn)生之前,CPU經(jīng)?;ㄙM大量的帶寬來移動所要處理的數(shù)據(jù),不僅從片外存儲器到片內(nèi)存儲器,還包括從一個外設(shè)到另一個外設(shè)。DMA控制器允許在不經(jīng)CPU的干預(yù)下進行數(shù)據(jù)的交互,盡管無法準確衡量系統(tǒng)運算速度,但的確極大提升了數(shù)據(jù)的吞吐率。一個完整的DMA傳輸過程具有4個步驟。1)DMA請求:外設(shè)接口提出DMA請求。2)DMA響應(yīng):DMA控制器對DMA請求進行優(yōu)先級判別并提出總線請求。CPU執(zhí)行完當(dāng)前周期后釋放總線控制權(quán)。此時,總線應(yīng)答表示DMA已響應(yīng),由DMA控制器通知外設(shè)接口開始DMA傳輸。3)DMA傳輸:DMA控制器獲得總線控制權(quán)后,DMA控制器開始在存儲器和外設(shè)之間直接進行數(shù)據(jù)傳送(需要提供要傳輸數(shù)據(jù)的起始位置和數(shù)據(jù)長度)。這個傳送過程不需要CPU的參與。4)DMA結(jié)束:數(shù)據(jù)批量傳送完成后,DMA控制器立即釋放總線控制權(quán),并向外設(shè)接口發(fā)出結(jié)束信號。之后向CPU提出中斷請求,CPU開始檢查本次DMA傳輸?shù)臄?shù)據(jù)。最后CPU帶著本次操作的結(jié)果及狀態(tài)繼續(xù)執(zhí)行原來的程序。2.F28335中DMA特點DMA控制器以事件觸發(fā)為基礎(chǔ),需要外設(shè)中斷才能觸發(fā)DMA數(shù)據(jù)的傳輸。6個DMA通道具有6個獨立的外設(shè)中斷。DMA的觸發(fā)源、數(shù)據(jù)源和數(shù)據(jù)傳輸目的如圖1.16所示。圖1.16DMA內(nèi)部結(jié)構(gòu)其中,外設(shè)中斷觸發(fā)源有ADC模塊排序器1和ADC模塊排序器2、多通道緩沖串口A和B(McBSP-A、McBSP-B)的發(fā)送和接收、XINT1~7和XINT13、CPU定時器、ePWM1~6的ADSOCA和ADSOCB信號以及軟件強制觸發(fā)。數(shù)據(jù)源/目的地有L4~L716KBSARAM、所有XINT區(qū)域、ADC結(jié)果存儲器ADCRESULTn、McBSP-A和McBSP-B發(fā)送和接收緩沖器、ePWM1~6/HRPWM1~6的映射寄存器。1.3.2F2833x的DMA中斷事件及寄存器配置1.外設(shè)中斷事件觸發(fā)源圖1.17為外設(shè)中斷觸發(fā)源選擇結(jié)構(gòu)圖。MODE.CHx[PERINTSEL]來選擇每個DMA通道(x=1~6)的中斷觸發(fā)源,一個有效的中斷觸發(fā)事件鎖存在CONTROL.CHx[PERINTELG]中。若使能了相應(yīng)的模塊中斷和DMA通道中斷(MODE.CHx[PERINTE]和CONTROL.CHx[RUNSTS]),DMA通道將會響應(yīng)中斷事件。一旦接收到外設(shè)中斷信號,DMA會自動向中斷源發(fā)送清零信號,以保證后續(xù)中斷事件的發(fā)生。無論MODE.CHx[PERINTSEL]的值是多少,軟件均可通過CONTROL.CHx[PERINTFRC]給該通道一個強制觸發(fā)事件。同樣,也可通過CONTROL.CHx[PERINTCLR]清除一個懸掛的DMA觸發(fā)源。圖1.17外設(shè)中斷觸發(fā)源選擇結(jié)構(gòu)圖一旦通道的CONTROL.CHx[PERINTELG]置1,該位將保持懸掛狀態(tài)直到狀態(tài)機的優(yōu)先邏輯啟動該通道的數(shù)據(jù)傳送,當(dāng)數(shù)據(jù)開始傳送后該標志位清零。2.F28335中常用DMA配置函數(shù)1)DMA控制寄存器DmaRegs.DMACTRL,其位格式如圖1.18所示。圖1.18DMACTRL的位格式2)DMA優(yōu)先級控制寄存器DmaRegs.PRIORITYCTRL1,其位格式如圖1.19所示。圖1.19PRIORITYCTRL1的位格式3)通道模式選擇寄存器DmaRegs.CHx.MODE,其位格式如圖1.20所示。圖1.20CHx.MODE的位格式圖1.20CHx.MODE的位格式(續(xù))4)通道控制寄存器DmaRegs.CHx.CONTROL,其位格式如圖1.21所示。圖1.21CHx.CONTROL的位格式1.3.3F2833x的DMA示例1.F28335中DMA操作(1)DMA的3種工作模式1)Burst模式。由ADC中斷標志觸發(fā),每次ADC轉(zhuǎn)換后啟動該傳輸模式,源地址和目的地址的遷移通過計數(shù)方式實現(xiàn)。操作步驟如下。步驟1:配置源地址的首地址,即DmaRegs.CH1.SRC_BEG_ADDR_SHADOW=(Uint32)DMA_Source(DMASource=&AdcMirror.ADCRESULT0)。步驟2:配置每次數(shù)據(jù)傳輸?shù)目倲?shù),即DmaRegs.CH1.BURST_SIZE.all=bsize,如bsize=9,表示Burst傳輸10個數(shù)據(jù)。步驟3:配置下一次要發(fā)送數(shù)據(jù)的首地址和接收數(shù)據(jù)的首地址,即每傳輸1個數(shù)據(jù),源地址和目標地址的偏移量加1(DmaRegs.CH1.SRC_BURST_STEP+1,DmaRegs.CH1.DST_BURST_STEP+1),并將傳輸?shù)臄?shù)據(jù)總數(shù)減1(DmaRegs.CH1.BURST_SIZE.all-1),當(dāng)DmaRegs.CH1.BURST_SIZE.all=0時,表示本次Burst傳輸完成。2)Transfer模式。該模式有兩個功能:確定經(jīng)過多少次Transfer傳輸后執(zhí)行DMA中斷;確定下次Burst傳輸?shù)脑吹刂泛湍繕耸椎刂?。Transfer傳輸由三個寄存器管理:DmaRegs.CH1.TRANSFER_SIZE=tsize——經(jīng)過多少次Burst傳輸后執(zhí)行一次DMA中斷,如tsize=9,表示10次Burst傳輸,DMA中斷一次。DmaRegs.CH1.SRC_TRANSFER_STEP=srctstep——Burst傳輸?shù)脑吹刂吩隽?。DmaRegs.CH1.DST_TRANSFER_STEP=deststep——Burst傳輸目標地址增量。3)Wrap模式。Wrap模式可實現(xiàn)數(shù)據(jù)的循環(huán)傳輸,TI官網(wǎng)程序為相關(guān)寄存器配置及解釋如下:DmaRegs.CH1.SRC_WRAP_SIZE=srcwsize——Burst傳輸srcwsize+1次后,下次Burst傳輸?shù)脑词椎刂窞镈maRegs.CH1.SRC_ADDR_SHADOW(本輪Wrap傳輸?shù)脑词椎刂?+DmaRegs.CH1.SRC_WRAP_STEP(Wrap傳輸?shù)脑吹刂菲屏?。DmaRegs.CH1.DST_WRAP_SIZE=deswsize——Burst傳輸deswsize+1次后,下次Burst傳輸?shù)哪繕耸椎刂窞镈maRegs.CH1.DST_ADDR_SHADOW(本輪Wrap傳輸?shù)哪繕耸椎刂?+DmaRegs.CH1.DST_WRAP_STEP(Wrap傳輸?shù)哪繕说刂菲屏?。[注1]:若屏蔽Wrap傳輸,需將DmaRegs.CH1.SRC_WRAP_SIZE和DmaRegs.CH1.DST_WRAP_SIZE的設(shè)定值大于DmaRegs.CH1.TRANSFER_SIZE的設(shè)定值。[注2]:Wrap傳輸時,只要Burst傳輸?shù)拇螖?shù)達到DmaRegs.CH1.TRANSFER_SIZE,在DMA中斷開啟的情況下,DMA依舊會進入中斷。[注3]:非連續(xù)模式下,若想在某段地址內(nèi)采用覆蓋式存儲,需對源和目標首地址重新賦值,并重新令DmaRegs.CH1.CONTROL.bit.RUN=1。[注4]:連續(xù)模式下,若想在某段地址內(nèi)采用覆蓋式存儲,只需對源和目標首地址重新賦值。(2)TI例程(DSP2833x_DMA.c)提供的其他常用函數(shù)及含義1)voidDMACHxAddrConfig(volatileUint16*DMA_Dest,volatileUint16*DMA_Source)參數(shù)解析:配置DMA數(shù)據(jù)目的地址和源地址。2)voidDMACHxModeConfig(Uint16persel,Uint16perinte,Uint16oneshot,Uint16cont,Uint16synce,Uint16syncsel,Uint16ovrinte,Uint16datasize,Uint16chintmode,Uint16chinte)參數(shù)解析:配置要選擇的觸發(fā)源、觸發(fā)源使能、ONESHOT使能、連續(xù)模式使能、外設(shè)同步使能、同步對象選擇(源同步還是目標同步)、溢出中斷使能、工作方式選擇(16位還是32位)、產(chǎn)生中斷模式選擇(開始還是結(jié)束)、產(chǎn)生中斷使能。2.DMA示例分析1)本例中,將1024字節(jié)的數(shù)據(jù)從L5SARAM復(fù)制到L4SARAM(按照32位數(shù)據(jù)格式),數(shù)據(jù)傳輸由定時器0觸發(fā)。數(shù)據(jù)傳輸結(jié)束后代碼進入DINTCH1_ISR子程序。參考代碼如下:二維碼1.2其中DMA模式配置函數(shù)為voidDMACH1ModeConfig(Uint16persel,Uint16perinte,Uint16oneshot,Uint16cont,Uint16synce,Uint16syncsel,Uint16ovrinte,Uint16size,Uint16chintmode,Uint16chinte)2)本例中,將存放在外部SARAM區(qū)域7(DMABuf2)中的1024個字節(jié)數(shù)據(jù)復(fù)制到L4SARAM(DMABuf1)中,由定時器0觸發(fā)數(shù)據(jù)的傳輸。數(shù)據(jù)傳遞結(jié)束后代碼進入local_DINTCH1_ISR子程序,參考代碼如下:二維碼1.31.4輕松玩轉(zhuǎn)硬件系統(tǒng)我們所熟悉的電源、晶振和復(fù)位電路是設(shè)計最小系統(tǒng)的三要素。首先,建議讀者從TI官網(wǎng)下載《TMS320F28335,TMS320F28334,TMS320F28332,TMS320F28235,TMS320F28234,TMS320F28232,DigitalSignalControllers(DSCs)DataManual》數(shù)據(jù)手冊,需要按照數(shù)據(jù)手冊中的參數(shù)要求進行設(shè)計。例如,1.9V的內(nèi)核電壓情況下,程序在SARAM中可以最大的150MHz系統(tǒng)時鐘工作;若內(nèi)核電壓為1.8V,則系統(tǒng)工作最大時鐘為140MHz。電源芯片TPS54386PWP產(chǎn)生3.3V和1.8V雙電壓輸出。DSP涉及上電順序的問題,處理起來要花一些工夫,但TI提供了現(xiàn)成的供電解決方案,相關(guān)電路如圖1.22所示。圖1.223.3V及1.8V供電電路F28335對內(nèi)核電壓和IO口電壓的上電順序有要求(目的是確定GPIO口的狀態(tài)),但TI數(shù)據(jù)手冊對模擬電源和數(shù)字電源的上電順序沒有嚴格要求,因而數(shù)字電源和模擬電源不需要隔離電源分別供電,可用磁珠或0Ω電阻隔開,各個電源引腳都要有去耦電容,且它們的布局都要盡可能地靠近電源引腳。3.3V、1.9V的引腳上一般配備陶瓷電容和鉭電容。其中,陶瓷電容的電容值一般為0.1μF或1pF,鉭電容的電容值一般為1μF。盡管成本稍高,但是性能穩(wěn)定。鉭電容耐壓能力不夠,最好留一些裕量。當(dāng)使用內(nèi)部晶振作為時鐘源時,電路如圖1.23所示。圖1.23內(nèi)部晶振作為時鐘源電路圖當(dāng)使用外部晶振作為時鐘源時,電路圖如圖1.24所示。圖1.24外部晶振作為時鐘源電路圖a)輸入電壓為3.3Vb)輸入電壓為1.8V采用看門狗故障監(jiān)測芯片STM706SM6F構(gòu)成復(fù)位電路,如圖1.25所示;采用有源晶振構(gòu)成時鐘電路,如圖1.26所示。圖1.25看門狗復(fù)位電路圖1.2630MHz有源晶振電路JTAG接口可選用TI官網(wǎng)提供的標準電路,也可按如圖1.27所示的接口電路。圖1.27JTAG接口電路ADC模塊參考電壓電路如圖1.28所示,SCI模塊電路如圖1.29所示。圖1.28ADC模塊2.048V參考電壓電路圖1.29SCI模塊電路JTAG連接電路圖如圖1.30所示;仿真器與多個DSP連接電路圖如圖1.31所示。圖1.30JTAG連接電路圖圖1.31仿真器與多個DSP連接電路圖a)方式一b)方式二第2章片上初始化單元2.1時鐘及控制穩(wěn)定的系統(tǒng)時鐘是芯片工作的基本條件,F(xiàn)2833x的時鐘電路由片內(nèi)振蕩器和鎖相環(huán)組成。2.1.1時鐘的產(chǎn)生1.F2833x的振蕩器及鎖相環(huán)二維碼2.1OSC/PLL時鐘模塊是為DSP片內(nèi)及片上外設(shè)提供基準時鐘信號。具有兩種輸入信號:一種是無源石英晶體,價格便宜,但體積較大;另一種是有源晶振,常用30MHz(其他頻率的也有一些,但是30MHz使用最廣,可替代性好)。F2833x片內(nèi)振蕩器及鎖相環(huán)(PhaseLockedLoop,PLL)結(jié)構(gòu)如圖2.1所示。上述兩種輸入方式,F(xiàn)2833x提供了3種連接方式,具體見第1章。圖2.1片內(nèi)振蕩器及PLL模塊振蕩電路產(chǎn)生的時鐘信號OSCCLK可不經(jīng)PLL模塊而直接通過多路器,再經(jīng)分頻得到CLKIN信號送往CPU。OSCCLK也可作為PLL模塊的輸入時鐘,經(jīng)PLL模塊倍頻后通過多路器,再經(jīng)分頻得到CLKIN信號送往CPU。PLL模塊的輸出頻率受鎖相環(huán)控制寄存器PLLCR中的倍頻系數(shù)DIV(圖2.1中SysCtrlRegs.PLLCR.bit.DIV所示)和鎖相環(huán)狀態(tài)寄存器PLLSTS中的分頻系數(shù)DIVSEL(圖2.1中SysCtrlRegs.PLLSTS.bit.DIVSEL所示)影響。2.鎖相環(huán)狀態(tài)寄存器PLLSTS和鎖相環(huán)控制寄存器PLLCR(1)鎖相環(huán)狀態(tài)寄存器PLLSTS寄存器位尋址格式為SysCtrlRegs.PLLSTS.bit.DIVSEL,PLLSTS寄存器如圖2.2所示。圖2.2PLLSTS寄存器的位格式(2)鎖相環(huán)控制寄存器PLLCRPLLCR寄存器如圖2.3所示,位尋址格式為SysCtrlRegs.PLLCR.bit.DIV。圖2.3PLLCR寄存器的位格式為了得到150MHz的系統(tǒng)時鐘,一般做法是先將30MHz的晶振10倍頻,再進行2分頻。讀者可調(diào)用TI公司給出的參考函數(shù)voidInitPll(Uint16val,Uint16divsel),并在函數(shù)的形參配置適當(dāng)?shù)膮?shù):InitPll(0x0A,0x02)。其中:2.1.2F28335系統(tǒng)時鐘的分配CLKIN經(jīng)CPU后會生成系統(tǒng)時鐘SYSCLKOUT分發(fā)給各單元,如圖2.4所示。1.高速外設(shè)時鐘系統(tǒng)時鐘(SYSCLKOUT)經(jīng)高速外設(shè)時鐘預(yù)分頻寄存器HISPCP(見圖2.5),分頻后得到高速外設(shè)時鐘。高速外設(shè)時鐘只提供給ADC模塊使用。如:SysCtrlRegs.HISPCP.all=0x0001;//HSPCLK=1/2×SYSCLKOUT2.低速外設(shè)時鐘系統(tǒng)時鐘(SYSCLKOUT)經(jīng)低速外設(shè)時鐘預(yù)分頻寄存器LOSPCP(見圖2.6),分頻后得到低速外設(shè)時鐘。低速外設(shè)時鐘只提供給SCI、SPI及McBSP模塊使用。如:SysCtrlRegs.LOSPCP.all=0x0002;//LSPCLK=1/4×SYSCLKOUT3.外設(shè)時鐘控制寄存器若要使用外設(shè),必須使能該外設(shè)的時鐘。外設(shè)時鐘控制寄存器PCLKCR0、PCLKCR1和PCLKCR3的位格式如圖2.7所示。相應(yīng)位置1表示使能該外設(shè)時鐘,置0表示禁止該外設(shè)時鐘。另外,PCLKCR0[TBCLKSYNC]是PWM模塊時基同步位使能位。圖2.4系統(tǒng)時鐘SYSCLKOUT的分發(fā)圖2.5高速外設(shè)時鐘預(yù)分頻寄存器HISPCP的位格式圖2.6低速外設(shè)時鐘預(yù)分頻寄存器LOSPCP的位格式如禁用I2C-A時鐘,使能SCI-A、ePWM5時鐘,代碼為圖2.7外設(shè)時鐘控制寄存器的位格式2.1.3F28335的看門狗電路二維碼2.2程序可控時,是不需要看門狗這種機制的。但在有外界干擾發(fā)生的情況下,比如DSP的供電電壓突然波動;芯片周圍產(chǎn)生的EMI干擾(DSP運行時用手摸芯片所產(chǎn)生的靜電);不嚴格的系統(tǒng)調(diào)試方法(用仿真器運行時,使用非隔離的示波器進行調(diào)試);硬件設(shè)計的缺陷(IGBT的某一次通斷所產(chǎn)生的EMI),均會造成程序的失控。在電力電子應(yīng)用中,程序失控是極其危險的,可能發(fā)出錯誤的觸發(fā)信號,損壞IGBT等器件,甚至對使用者造成危害??撮T狗電路,即定時器電路。只要DSP上電,外部晶振開始工作(內(nèi)部PLL可不工作),它就會不停地進行計數(shù)。如果在規(guī)定的時間內(nèi)沒有對看門狗電路的計數(shù)值清0,它就會發(fā)生溢出,產(chǎn)生復(fù)位信號。用戶通常將WDCR中的bit6置1來禁止看門狗電路的工作。在調(diào)試階段這么做無可厚非,但在產(chǎn)品階段這并不是一個明智的決定。就產(chǎn)品設(shè)計角度而言,若出現(xiàn)程序跑飛或死機情況,系統(tǒng)可利用最后的保護屏障,使看門狗定時器沒有被按時清0而發(fā)生溢出,使系統(tǒng)復(fù)位。如此一來,CPU被看門狗計數(shù)器的溢出事件觸發(fā)復(fù)位后,所有PWM輸出都將變?yōu)楦咦锠顟B(tài),就能保證在程序跑飛時PWM觸發(fā)信號全部被封鎖。1.看門狗電路組成原理看門狗電路組成如圖2.8所示。圖2.8看門狗電路的組成外部晶振時鐘OSCCLK除以512后再經(jīng)預(yù)分頻寄存器(由WDCR寄存器設(shè)置)分頻后產(chǎn)生WDCLK時鐘。WDCLK作為WDCNTR計數(shù)的時基,若沒有清零信號,該計數(shù)器計滿后產(chǎn)生的溢出信號會送到脈沖發(fā)生器,產(chǎn)生復(fù)位信號。為不使計數(shù)器計滿溢出,需要不斷地在計數(shù)器未滿之前產(chǎn)生“清計數(shù)器”信號(該信號一方面可由復(fù)位信號產(chǎn)生,另一方面可由看門狗關(guān)鍵字寄存器WDKEY產(chǎn)生)。WDKEY寄存器的特點是,先寫入55H,緊接著再寫入AAH時,就會發(fā)出“清計數(shù)器”信號。寫入其他任何值及組合不但不會發(fā)出“清計數(shù)器”信號,而且還會使看門狗電路產(chǎn)生復(fù)位動作。看門狗電路復(fù)位還會由另一路“WDCHK錯誤”控制信號產(chǎn)生。WDCR控制寄存器中的檢查位WDCHK必須要寫入二進制的101,因為這3位的值要與二進制常量101進行連續(xù)比較,如果不匹配,看門狗電路就會產(chǎn)生DSP復(fù)位信號。[注1]:系統(tǒng)上電時,看門狗默認為使能狀態(tài)。對于30MHz的晶振頻率,對應(yīng)的WD計數(shù)溢出時間大約是4.37ms。為避免看門狗使系統(tǒng)過早復(fù)位,應(yīng)該在系統(tǒng)初始化時先對看門狗寄存器進行配置。[注2]:看門狗標志位(WDFLAG)可區(qū)分上電復(fù)位(WDFLAG=0)和看門狗復(fù)位(WDFLAG=1)。對該標志位需要軟件“寫1清0”。[注3]:外部晶振由于某種原因失效,則看門狗計時器停止工作。[注4]:若主程序的代碼崩潰而ISR程序還在運行,則看門狗無法有效捕獲崩潰的故障,也不會產(chǎn)生有效的DSP復(fù)位信號。一種比較有效的方法是,在main程序中寫入55H,而在ISR中寫入AAH。[注5]:由圖2.8可知,造成看門狗計數(shù)器復(fù)位的原因:①DSP系統(tǒng)上電復(fù)位;②對看門狗進行有效的“喂狗”操作。由看門狗造成DSP復(fù)位的原因:①WDCHK未寫入“101”;②對WDKEY寫入了除55H和AAH之外的關(guān)鍵字;③未能及時“喂狗”造成看門狗計數(shù)器溢出。2.看門狗電路相關(guān)寄存器(1)看門狗關(guān)鍵字寄存器WDKEY(復(fù)位后為00H)該寄存器為8位可讀可寫寄存器,對WDKEY的讀操作并不能返回關(guān)鍵字的值,而是返回WDCR的內(nèi)容。按照先寫55H,再寫AAH的順序?qū)懭腙P(guān)鍵字時,將產(chǎn)生“清計數(shù)器”信號,寫入其他任何值及組合不但不會發(fā)出“清計數(shù)器”信號,還會使看門狗電路產(chǎn)生復(fù)位動作?!拔构贰贝a如下:(2)看門狗控制寄存器WDCR寄存器位尋址格式為SysCtrlRegs.WDCR。位定義如圖2.9所示。圖2.9看門狗控制寄存器WDCR的位定義使能看門狗代碼示例如下:禁用看門狗代碼示例如下:(3)系統(tǒng)控制與狀態(tài)寄存器SCSR系統(tǒng)控制與狀態(tài)寄存器SCSR的寄存器位尋址格式為SysCtrlRegs.SCSR。位定義如圖2.10所示。圖2.10系統(tǒng)控制與狀態(tài)寄存器SCSR的位定義3.程序設(shè)計(1)設(shè)計目的編寫代碼,使LED1亮1s后每隔500ms亮滅變化。使能看門狗,觀察有喂狗和沒有喂狗時對LED1的影響。二維碼2.3分析:在有喂狗操作時,程序會正常工作;在沒有喂狗操作時,系統(tǒng)會一直復(fù)位,LED1會始終處于亮狀態(tài)。(2)延時程序設(shè)計在延時函數(shù)中加入了喂狗的代碼,讀者可觀察在屏蔽喂狗代碼和不屏蔽喂狗代碼的區(qū)別。(3)主程序設(shè)計2.2中斷系統(tǒng)分析中斷可認為是由外部或內(nèi)部單元產(chǎn)生的“同步事件”。事件產(chǎn)生后,處理器會“中斷”當(dāng)前程序轉(zhuǎn)而執(zhí)行該事件的“服務(wù)程序”?!胺?wù)程序”執(zhí)行完畢后,程序從剛才的“斷點”處接著執(zhí)行。F2833x的CPU級中斷有16個,如圖2.11所示,其中兩個稱為“不可屏蔽中斷”(Reset、NMI);剩余14個稱為“可屏蔽中斷”,也就是說,允許用戶“使能或禁止”這14個中斷。圖2.11包含的16個CPU級中斷“1”表示使能,“0”表示禁止。將用戶希望的“屏蔽字”寫入CPU的IER寄存器后,就可使能或禁止這14個可屏蔽中斷。然而對于不可屏蔽中斷,我們不能“禁止”,只能無條件地執(zhí)行。因此不可屏蔽中斷的優(yōu)先級最高,常用于安全考慮及系統(tǒng)的緊急停止。2.2.1中斷系統(tǒng)的結(jié)構(gòu)F2833x的中斷源簡單可以分為片內(nèi)中斷源和片外中斷源。片內(nèi)中斷源由片內(nèi)的軟硬件事件產(chǎn)生,比如3個CPU定時器、各個外設(shè)(如eCAP、ePWM、看門狗等)以及一些用戶自定義的中斷事件。片外中斷源一般是與DSP的引腳聯(lián)系在一起,在特定引腳上檢測到一定長度的脈沖或捕獲到電平的跳變,就會產(chǎn)生中斷標志事件,比如XINT1-7外部觸發(fā)中斷引腳、XRS引腳(產(chǎn)生復(fù)位事件)、XNMI_XINT13(不可屏蔽中斷)等。由于DSP片上外設(shè)的中斷事件種類繁多(比如一個ePWM模塊中的定時器就可以包含上溢、周期、比較等多種中斷)。為了實現(xiàn)對眾多外設(shè)中斷的有效管理,F(xiàn)28335的中斷系統(tǒng)采用了外設(shè)級、PIE級和CPU級三級管理機制,用一個簡圖來表示這些中斷源的處理方法,如圖2.12所示。圖2.12中斷源處理方法示意圖(1)外設(shè)級外設(shè)級中斷是指F28335片上各種外設(shè)產(chǎn)生的中斷。F28335片上的外設(shè)有多種,每種外設(shè)可以產(chǎn)生多種中斷。目前這些中斷包括外設(shè)中斷、看門狗與低功耗模式喚醒共享中斷、外部中斷(XINT1~XINT7)及定時器0中斷,共56個。二維碼2.4(2)PIE級PIE模塊分成INT1~INT12(共12組,每組最多支持8個外設(shè)中斷),每組占用一個CPU級中斷。例如,第1組占用INT1中斷,第2組占用INT2中斷,…,第12組占用INT12中斷(注意,定時器T1和T2的中斷及非屏蔽中斷NMI直接連到了CPU級,沒有經(jīng)PIE模塊的管理)。外設(shè)中斷分組見表2.1。(3)CPU級CPU級包括通用中斷INT1~INT14、數(shù)據(jù)標志中斷DLOGINT和實時操作系統(tǒng)中斷TOSINT,這16個中斷組成了可屏蔽中斷??善帘沃袛嗄軌蛴密浖右云帘位蚴鼓?。除可屏蔽中斷外,F(xiàn)28335還配置了非屏蔽中斷,包括硬件中斷NMI和軟件中斷。非屏蔽中斷不能用軟件進行屏蔽,發(fā)生中斷時CPU會立即響應(yīng)并轉(zhuǎn)入相應(yīng)的服務(wù)子程序。表2.1F28335外設(shè)中斷分組(續(xù))2.2.2可屏蔽中斷處理1.可屏蔽中斷工作流程圖2.13為可屏蔽中斷的流程示意圖,按從內(nèi)核到中斷源的順序更容易解釋中斷處理流程。INTM是主中斷開關(guān),此開關(guān)必須閉合才能使中斷傳播至內(nèi)核。再往外一層是中斷使能寄存器,相應(yīng)的中斷線路開關(guān)必須閉合才能使中斷通過。當(dāng)中斷發(fā)生時,中斷標志寄存器置位。內(nèi)核中斷寄存器由中斷標志寄存器、中斷使能寄存器和中斷全局掩碼位組成。注意,中斷全局掩碼位啟用時為0,禁用時為1。中斷使能寄存器通過對掩碼值執(zhí)行或運算和與運算來管理。當(dāng)某外設(shè)中斷請求通過PIE模塊發(fā)送到CPU級時,IFR中與該中斷相關(guān)的標志位INTx就會置位(如T0的周期中斷TINT0的請求到達CPU級時,IFR中的標志位INT1就會被置位)。此時CPU并不馬上進行中斷服務(wù),而是要判斷IER寄存器允許位INT1是否已經(jīng)使能,并且CPU寄存器ST1中的全局中斷屏蔽位INTM也要處于非禁止狀態(tài)(INTM為0)。如果IER中的允許位INT1被置位,并且INTM的值為0,則該中斷申請就會被CPU響應(yīng)。2.CPU級中斷相關(guān)寄存器CPU級中斷設(shè)置有中斷標志寄存器IFR、中斷使能寄存器IER和調(diào)試中斷使能寄存器DBGIER。IFR、IER和DBGIER寄存器格式類似,如圖2.14所示。圖2.13可屏蔽中斷的流程示意圖注1:特定中斷行上的有效信號觸發(fā)鎖存,將在相應(yīng)位顯示“1”注2:若單個開關(guān)或全局開關(guān)“打開”,中斷將到達內(nèi)核圖2.14IFR、IER寄存器位格式中斷標志寄存器IFR寄存器的某位為1,表示對應(yīng)的外設(shè)中斷請求產(chǎn)生,CPU確認中斷及DSP復(fù)位時,相應(yīng)的IFR清零;IER寄存器的某位為1,表示對應(yīng)的外設(shè)中斷使能;DBGIER寄存器的某位為1,表示對應(yīng)的外設(shè)中斷的調(diào)試中斷使能。常用如下方式進行寄存器的置位和清零。ST1寄存器位格式如圖2.15所示。圖2.15ST1寄存器的位格式INTM用于使能/屏蔽總中斷,且僅能通過匯編代碼來修改INTM。3.如何開啟受PIE模塊管理的可屏蔽中斷?1)設(shè)置中斷向量。例如,PieVectTable.ADCINT=&ADC_isr;(其中,ADC_isr為中斷服務(wù)程序的名稱)。2)使能PIE模塊:PieCtrlRegs.PIECTRL.bit.ENPIE=1;。3)使能PIE中對應(yīng)外設(shè)的中斷(對應(yīng)group組中的相應(yīng)位)。例如,PieCtrlRegs.PIEIER1.bit.INTx8=1;PieCtrlRegs.PIEIER1.bit.INTx6=1;。4)使能CPU的相應(yīng)中斷(INT1~INT12),IER|=M_INT1;(使能INT1,其中,M_INT1=0x0001)。5)使能CPU響應(yīng)中斷EINT。其中,EINT為asm("CLRCINTM")。2.2.3非屏蔽中斷處理非屏蔽中斷是指不能通過軟件進行禁止和使能的中斷,CPU檢測到有這類中斷請求時會立即響應(yīng),并轉(zhuǎn)去執(zhí)行相應(yīng)的中斷服務(wù)子程序。F28335的非屏蔽中斷包括軟件中斷、硬件中斷NMI、非法指令中斷ILLEGAL和硬件復(fù)位中斷。1.軟件中斷(1)INTR指令I(lǐng)NTR指令用于執(zhí)行某個特定的中斷服務(wù)程序。該指令可以避開硬件中斷機制而將程序流程直接轉(zhuǎn)向由INTR指令參數(shù)所對應(yīng)的中斷服務(wù)程序。指令的參數(shù)為INT1~INT14、DLOGINT、RTOSINT和NMI。例如:(2)TRAP指令TRAP指令用于通過中斷向量號來調(diào)用相應(yīng)的中斷服務(wù)子程序。該指令的中斷向量號的范圍是0~31。2.非法指令中斷當(dāng)F28335執(zhí)行無效的指令時,會觸發(fā)非法指令中斷。若程序跳入非法中斷,TI公司并未給出具體的解決方案。建議讀者在該中斷服務(wù)程序使能看門狗加入死循環(huán),從而觸發(fā)軟件復(fù)位。3.硬件NMI中斷NMI中斷與XINT13共用引腳。若使用非屏蔽中斷,需要將控制寄存器XNMICR的D0=1。但D0=1,表明NMI和INT13都可能發(fā)生,具體的配置見表2.2。表2.2NMI和INT13中斷配置表Timestamp表示時間戳。對于外部中斷,可以利用16位的計數(shù)器記錄中斷發(fā)生的時刻,該計數(shù)器在中斷發(fā)生時和系統(tǒng)復(fù)位時清零。4.硬件復(fù)位中斷硬件復(fù)位是F28335中優(yōu)先級最高的中斷。硬件復(fù)位發(fā)生后,CPU會轉(zhuǎn)到0x3FFFC0地址去取復(fù)位向量,執(zhí)行引導(dǎo)程序。2.2.4外設(shè)中斷擴展模塊(PIE)的使用詳解1.PIE模塊的結(jié)構(gòu)F2833x設(shè)置了一個專門對外設(shè)中斷進行分組管理的PIE模塊,F(xiàn)2833x所構(gòu)成的三級中斷結(jié)構(gòu)如圖2.16所示。外設(shè)中斷一共分為12組,每組支持8個中斷,因此F2833x共支持96個中斷。若只討論PIE的工作流程,則將圖2.16可提煉成圖2.17的形式。圖2.16F2833x所構(gòu)成的三級中斷結(jié)構(gòu)示意圖PIE模塊的每組都有一個中斷標志寄存器PIEIFRx(x=1,2,…,12)和中斷使能寄存器PIEIERx。每個寄存器的低8位對應(yīng)8個外設(shè)中斷(高8位保留)。此外,設(shè)有一個中斷響應(yīng)寄存器PIEACK,它的低12位(bit11~bit0)分別對應(yīng)INT1~INT12。如TINT0中斷響應(yīng)時,PIEACK寄存器的bit0(即ACK1,對應(yīng)INT1組)就會被置位(封鎖本組的其他中斷),并且一直保持到應(yīng)用程序清除這個位。在CPU響應(yīng)TINT0過程中,ACK1一直為1,這時如果PIE1組內(nèi)發(fā)生其他的外設(shè)中斷,則暫時不會被PIE送給CPU,必須等到ACK1被清0。ACK1被清0后,若該中斷請求還存在,那么PIE模塊就會將新的中斷請求送至CPU。所以,每個外設(shè)中斷響應(yīng)后,一定要對PIEACK的相關(guān)位進行“寫1清0”,否則同組內(nèi)的其他中斷都不會被響應(yīng)。PIE寄存器的使用方法如下:圖2.17PIE的工作流程圖2.中斷向量和中斷向量表CPU中斷向量是22位,它是中斷服務(wù)程序的入口地址。F2833x支持32個CPU中斷向量(包括復(fù)位向量)。每個CPU中斷向量占2個連續(xù)的存儲器單元。低地址保存中斷向量的低16位,高地址保存中斷向量的高6位。當(dāng)中斷被確定后,22位(高10位忽略)的中斷向量會被取出并送往PC。32個CPU中斷向量占據(jù)了64個連續(xù)的存儲單元,形成了CPU中斷向量表。CPU中斷向量見表2.3。表2.3F28335的CPU中斷向量和優(yōu)先級(續(xù))向量表的映射由以下幾個模式控制位/信號進行控制:1)VMAP,狀態(tài)寄存器ST1的bit3。VMAP的復(fù)位值默認為1。該位可以由SETCVMAP指令進行置1,由CLRCVMAP指令清0。2)M0M1MAP,狀態(tài)寄存器ST1的bit11,復(fù)位值默認為1。該位可以由SETCM0M1MAP指令進行置1,由CLRCM0M1MAP指令清0。3)ENPIE,PIECTRL寄存器的bit0,復(fù)位值默認為0,即PIE處于禁止狀態(tài)??梢詫IECTRL寄存器(地址000CE0H)進行修改。CPU中斷向量表可以映射到存儲空間的4個不同位置,見表2.4。表2.4中斷向量表映射配置表注:M1和M0向量表保留用于TI公司的產(chǎn)品測試。系統(tǒng)上電復(fù)位時ENPIE=0;VMAP=1;M0M1MAP=1;OBJMODE=0;AMODE=0,因此復(fù)位向量總是取自BROM向量表(實際上該區(qū)僅用到復(fù)位向量)。PIE模塊用于外設(shè)的中斷管理,復(fù)位后用戶需完成PIE中斷向量表的初始化。當(dāng)VMAP=0,ENPIE=1時PIE中斷向量映射如圖2.18所示。地址0x000D40~0x000DFF用于PIE的空間擴展,每一個中斷向量(PIEINT1.1~PIEINT12.8)的地址均為32位。使能PIE后的中斷向量見表2.5。上電復(fù)位時,PIE中斷向量表沒有任何內(nèi)容,程序初始化時需要對它進行修改。讀者可將TI提供的DSP2833x_PieVect.c文件加到自己的工程中進行調(diào)用。PIE使能后,TRAP#1取INT1.1向量,TRAP#2取INT1.2向量……。綜上,DSP復(fù)位后直至開始運行主函數(shù)的示意圖如圖2.19所示。圖2.18BROM向量表(復(fù)位時默認的中斷向量表)表2.5使能PIE(ENPIE=1)后的中斷向量指向圖2.19DSP復(fù)位后直至開始運行主函數(shù)的示意圖2.2.5非法中斷產(chǎn)生原因及解決方案問題1:造成非法中斷的原因?答:造成程序進入非法中斷的情況大致如下:1)操作碼被解碼為0x0000,該操作碼對應(yīng)于ITRAP0指令。2)操作碼被解碼為0xFFFF,該操作碼對應(yīng)于ITRAP1指令。3)試圖使用@SP尋址32位操作。4)將尋址模式AMODE=1,同時PAGE0=1。問題2:如何調(diào)試ITRAP,如何避免進入ITRAP?答:1)ITRAP通常是堆棧溢出或緩沖區(qū)溢出的跡象。要快速查看是否為堆??臻g不足,可以使用已知的數(shù)值填充該區(qū)域,然后運行應(yīng)用程序,查看區(qū)域地址長度。2)確保程序代碼沒有過于接近內(nèi)存塊的結(jié)尾(一般為無效內(nèi)存)。這在器件勘誤中進行了說明。3)ISR中插入返回指令。在返回指令上設(shè)置斷點,然后一步步查看代碼的來源。4)程序進入非法中斷時,寄存器(包括返回地址)會自動入棧。通過查看堆棧上的返回地址值,就可找出ITRAP發(fā)生的位置。問題3:進入ITRAP后如何退出?答:大部分讀者會將DSP下電重啟。實際上還有另一種解決方案:非法中斷服務(wù)程序中寫一個死循環(huán),并使能看門狗,但不喂狗,從而觸發(fā)DSP復(fù)位。程序如下:2.2.6中斷嵌套之我見我們通常所說的PIE中斷優(yōu)先級指的是當(dāng)幾個中斷同時發(fā)出請求時,CPU先響應(yīng)高優(yōu)先級別的中斷,處理完該中斷服務(wù)函數(shù)之后,再響應(yīng)低優(yōu)先級的中斷。當(dāng)然,如果在這個期間,等待的中斷有新的中斷事件出現(xiàn)時,該中斷事件就會丟失。按正常的程序設(shè)置,進入中斷服務(wù)函數(shù)之后,CPU會關(guān)掉全局中斷使能,所以高優(yōu)先級的中斷打斷不了低優(yōu)先級別的中斷。但是C2000也是支持中斷嵌套的,即高優(yōu)先級別的中斷能夠打斷低優(yōu)先級別的中斷。也就是說,當(dāng)CPU在執(zhí)行SCIB中斷服務(wù)函數(shù)時,可以被EPWM中斷來打斷,實現(xiàn)中斷嵌套。本節(jié)介紹如何通過簡單更改中斷服務(wù)程序(ISR)代碼來實現(xiàn)中斷嵌套。在此之前,讀者需熟悉C28x的PIE模塊原理及中斷控制寄存器(IER、IFR、INTM)的常用操作。1.硬件優(yōu)先級中斷由C28x硬件自動設(shè)置優(yōu)先級。所有中斷的優(yōu)先級可以在系統(tǒng)控制指南中找到。對應(yīng)于CPUINT1的組1具有最高優(yōu)先級。每個組中有8個中斷,INTx.1是最高優(yōu)先級,INTx.8是最低優(yōu)先級。2.PIE的組織形式PIE塊將中斷按照從高到低的邏輯順序進行組織。C28x系統(tǒng)的中斷可分類如下(按從高到低的順序排列):(1)非周期性的快速響應(yīng)中斷這類中斷可在任何時間發(fā)生,且當(dāng)它們發(fā)生時必須盡可能快地得到響應(yīng)。這類中斷分配給PIE組1和PIE組2中的前幾個位置。這個位置給予它們在PIE組內(nèi)的最高優(yōu)先級。此外,組1復(fù)用到CPU中斷INT1。CPUINT1具有最高的硬件優(yōu)先級。PIE組2復(fù)用到CPU第二高的硬件優(yōu)先級的INT2。(2)周期性的快速響應(yīng)中斷這些中斷會周期性發(fā)生,并且當(dāng)它們發(fā)生時,必須盡可能快地被響應(yīng)以減少延遲,A-D轉(zhuǎn)換就是一個很好的例子。這樣的中斷被分配給PIE表中的組1。(3)周期性中斷這些中斷同樣會周期性發(fā)生,但必須在下一個中斷之前得到服務(wù)。PWM中斷就是一個例子。這些中斷被映射到組2~組5,這些組被復(fù)用到CPUINT3~INT5(ePWM、eCAP和eQEP)。(4)周期性的帶緩沖中斷這些中斷在周期性事件中發(fā)生,但是被緩沖。當(dāng)緩沖器滿標志位置1或清空標志位置1時,處理器才會執(zhí)行這樣的中斷服務(wù)程序。所有串行端口(SCI/SPI/I2C/CAN)都具有FIFO或多個郵箱,以便CPU有足夠的時間響應(yīng)事件,而不必擔(dān)心丟失數(shù)據(jù)。這些中斷映射到INT6、INT8和INT9。3.C28x中斷響應(yīng)——無嵌套方式(默認)表2.6顯示了處理中斷時所采取的步驟。表2.6中斷處理的步驟(續(xù))注.1.表中的硬件、軟件的含義如下:硬件:由芯片本身執(zhí)行。軟件不需要任何操作。軟件:通過軟件執(zhí)行。使用編譯器時,這些步驟由編譯器處理。2.當(dāng)某個中斷服務(wù)程序開始時,其他中斷自動禁止。步驟1~3受硬件保護。步驟4通過設(shè)置INTM和DBGM位來禁止中斷,防止CPU在進行中斷服務(wù)程序期間處理新的中斷。INTM和DBGM將保持置1,除非軟件重新允許中斷或CPU從中斷服務(wù)程序返回。4.全局及組的優(yōu)先級在中斷服務(wù)程序的開始處或在關(guān)鍵代碼完成后重新啟用中斷。全局優(yōu)先級使用IERx,組內(nèi)優(yōu)先級使用PIEIERx。對PIEIERx寄存器進行操作需注意:PIEIER寄存器的修改只能在本組內(nèi)的ISR進行。例如,PIEIER1只能在組1的ISR中修改,同樣PIEIER2應(yīng)該只在組2的ISR中修改。此外,這種修改應(yīng)在PIEACK置位時完成,因此在進行修改時,不會有中斷發(fā)送到CPU。若違反此規(guī)則,則可觸發(fā)錯誤的INTx.1中斷。5.中斷優(yōu)先級在什么情況下有意義?1)兩個中斷同時發(fā)生,優(yōu)先級高的中斷優(yōu)先被響應(yīng)。2)兩個中斷按時間先后順序發(fā)生,但是此時已經(jīng)有中斷正在執(zhí)行,也就是說它們都需要排隊。當(dāng)正在執(zhí)行的中斷完成后,優(yōu)先級高的中斷優(yōu)先被響應(yīng)。3)使能中斷嵌套后,高優(yōu)先級的中斷可以打斷正在執(zhí)行的低優(yōu)先級的中斷。4)默認情況下,F(xiàn)28335不支持中斷嵌套。也就是說,即便一個中斷的優(yōu)先級比另一個高,默認情況下,也不會出現(xiàn)低優(yōu)先級中斷正在執(zhí)行時,被高優(yōu)先級打斷的情況。6.中斷嵌套軟件操作方法硬件上并未直接支持中斷嵌套,但軟件可以實現(xiàn),具體操作步驟如下。步驟1:設(shè)置全局中斷優(yōu)先級,即修改IER寄存器以允許處理更高優(yōu)先級的CPU中斷(注意:此時IER已保存在堆棧中)。步驟2:設(shè)置PIE組中斷優(yōu)先級,即修改相應(yīng)的PIEIERx寄存器以允許具有較高優(yōu)先級的組中斷得到服務(wù)。步驟3:使能中斷,先將PIEACK應(yīng)答位寫1清0,再等待最少一個機器周期,最后將INTM位清0(asm“CLRCINTM”)。步驟4:運行中斷服務(wù)程序。步驟5:禁止總中斷,即INTM位置1(asm“SETCINTM”)。步驟6:PIEIERx恢復(fù)。步驟7:中斷返回。例程分析:7.使用掩碼來管理優(yōu)先級TI提供了一種使用掩碼來管理全局
溫馨提示
- 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)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度珠寶店員工離職通知及交接流程合同
- 二零二五年度綠色辦公文員崗位勞動合同
- 二零二五年度酒店客房協(xié)議價及旅游團隊優(yōu)惠合同
- 二零二五年度辣椒種植基地病蟲害生物防治合同
- 2025年度游戲角色設(shè)計著作權(quán)許可與衍生品開發(fā)合同
- 國際氣體管道運輸企業(yè)ESG實踐與創(chuàng)新戰(zhàn)略研究報告
- 二零二五年度道路改造項目工地臨時用工協(xié)議
- 二零二五年度高科技園區(qū)整體開發(fā)權(quán)轉(zhuǎn)讓協(xié)議
- 2025年度校園食堂食品安全教育與監(jiān)督承包協(xié)議
- 二零二五年度教培機構(gòu)教師教學(xué)管理能力聘用合同
- 道路照明設(shè)施維護技術(shù)規(guī)程DB50-T 233-2020
- 爾雅家園的治理:環(huán)境科學(xué)概論考試答案
- 城市軌道交通乘客服務(wù)課件(完整版)
- 四川建設(shè)工程系統(tǒng)用戶滿意度測評實施辦法
- 山田家的氣象報告--完整版PPT課件
- 煤礦2021年重大安全風(fēng)險分析預(yù)判防控報告全文
- 粱昆淼第四版數(shù)學(xué)物理方法第10章
- 急診腦卒中病人分診流程圖4.8
- 球閥使用說明書
- 對外漢語—春節(jié)學(xué)習(xí)教案
- 畢業(yè)設(shè)計(論文)800×800錘式破碎機
評論
0/150
提交評論