版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
DSP復習資料
2009精華版信息073榮譽出品1DSP復習資料
2009精華版信息073榮譽出品11.TI公司的DSP芯片TI公司常用的DSP芯片可以歸納為三大系列:(1)TMS320C2000系列,稱為DSP控制器,集成了flash存儲器、高速A/D轉(zhuǎn)換器以及可靠的CAN模塊及數(shù)字馬達控制的外圍模塊,適用于三相電動機、變頻器等高速實時工控產(chǎn)品等需要數(shù)字化的控制領域。(2)TMS320C5000系列,這是16位定點DSP。主要用于通信領域,如IP電話機和IP電話網(wǎng)關、數(shù)字式助聽器、便攜式聲音/數(shù)據(jù)/視頻產(chǎn)品、調(diào)制解調(diào)器、手機和移動電話基站、語音服務器、數(shù)字無線電、小型辦公室和家庭辦公室的語音和數(shù)據(jù)系統(tǒng)。第一章一、主要的DSP芯片種類21.TI公司的DSP芯片第一章2(3)TMS320C6000系列DSP
采用新的超長指令字結構設計芯片。其中2000年以后推出的C64x,在時鐘頻率為1.1GHz時,可達到8800MIPS以上,即每秒執(zhí)行90億條指令。其主要應用領域為:1)數(shù)字通信完成FFT、信道和噪聲估計、信道糾錯、干擾估計和檢測等。2)圖像處理完成圖像壓縮、圖像傳輸、模式及光學特性識別、加密/解密、圖像增強等。3(3)TMS320C6000系列DSP采用新的超長指令字1.DSP芯片的運算速度
MAC時間:一次乘法和一次加法的時間。大部分DSP芯片可在一個指令周期內(nèi)完成一次乘法和一次加法操作。FFT執(zhí)行時間:運行一個N點FFT程序所需時間。由于FFT運算在數(shù)字信號處理中很有代表性,因此FFT運算時間常作為衡量DSP芯片運算能力的一個指標。MIPS:每秒執(zhí)行百萬條指令。MOPS:每秒執(zhí)行百萬次操作。MFLOPS:每秒執(zhí)行百萬次浮點操作。BOPS:每秒執(zhí)行十億次操作。二、選擇芯片考慮的因素41.DSP芯片的運算速度二、選擇芯片考慮的因素4三、系統(tǒng)調(diào)試和評價工具:
TMS320有一系列系統(tǒng)調(diào)試工具用于代替或協(xié)助目標系統(tǒng)進行軟件評價和開發(fā)?,F(xiàn)有的產(chǎn)品有:DSK初學者開發(fā)套件(DSPStarterKit)EVM軟件評估模塊(EvaluationModule)XDS510硬件仿真器(ExtendDevelopmentSupportEmulators)。TI公司還提供集成開發(fā)工具CCS(CodeComposerStudio),CCS可從網(wǎng)上下載,可進行軟、硬件仿真和系統(tǒng)分析,受到廣泛應用。5三、系統(tǒng)調(diào)試和評價工具:TMS320有一系列系統(tǒng)調(diào)試工具在通用的微處理器中,乘法指令是由一系列加法來實現(xiàn)的,故需許多個指令周期來完成DSP具有專用的硬件乘法器,乘法可在一個指令周期內(nèi)完成第二章一、專用的硬件乘法器6在通用的微處理器中,乘法指令是由一系列加法來實現(xiàn)的,故需許多1)多總線結構2)40位算術邏輯單元(ALU)3)17×17位并行硬件乘法器4)比較、選擇和存儲單元(CSSU)5)指數(shù)編碼器6)兩個地址發(fā)生器71)多總線結構77)數(shù)據(jù)總線(具有總線保持特性)8)總線尋址空間(C548最大可尋址擴展程序空間為8M×16位)9)三種存儲器空間(程序、數(shù)據(jù)、IO)10)單指令循環(huán)和塊循環(huán)11)區(qū)分的存儲塊移動指令12)32位長操作數(shù)指令13)可編程等待狀態(tài)發(fā)生器和可編程的存儲單元轉(zhuǎn)換
87)數(shù)據(jù)總線(具有總線保持特性)814)鎖相環(huán)(PLL)發(fā)生器15)多通道緩沖串口(McBSP)16)直接存儲器訪問(DMA)控制器17)主機接口(HPI)18)定時器19)多種節(jié)電模式20)JTAG接口21)低電壓工作914)鎖相環(huán)(PLL)發(fā)生器9二、C54x芯片的CPU結構1、40位算術邏輯運算單元(ALU)2、2個40位累加器A和B3、移位-16~30位的桶形移位寄存器4、乘法器/加法器單元5、比較和選擇及存儲單元(CSSU)6、指數(shù)編碼器7、CPU狀態(tài)和控制寄存器包括10二、C54x芯片的CPU結構1、40位算術邏輯運算單元(AL11111累加器A和B作用
結構與位置A和B的異同
加載與存儲中的移位
AG保護位39~
32AH高階位31~
16AL低階位15~
0要點89DO頁存儲器121累加器A和B作用AG保護位39~32AH高階位31~累加器A和B都可以配置成乘法器/加法器或ALU的目的寄存器。在執(zhí)行MIN和MAX指令或者并行指令LD||MAC時都要用到它們,這時,一個累加器加載數(shù)據(jù),另一個完成運算。保護位用作計算時的數(shù)據(jù)位余量,以防止諸如自相關那樣的迭代運算時溢出。累加器A和B的差別僅在于累加器A的31~16位可以用作乘法器的一個輸入。13累加器A和B都可以配置成乘法器/加法器或13在存儲前,有時需要對累加器的內(nèi)容進行移位操作。右移時,AG和BG中的各數(shù)據(jù)分別移至AH和BH;左移時,AL和BL中的各數(shù)據(jù)分別移至AH和BH,低位添0。存儲器映像寄存器:指用0頁數(shù)據(jù)存儲器來當作寄存器用,而不用專門設計制作寄存器,從而可簡化設計,并增加數(shù)據(jù)存儲器的使用靈活性。14在存儲前,有時需要對累加器的內(nèi)容進行移142乘法器/加法器
17X17乘法40位加法檢零飽和取整152乘法器/加法器17X17乘法40位加法檢零飽和取整15
為了使修正系數(shù)的量化誤差最小,要進行舍入處理。C54X的CPU中是一個17×17位的硬件乘法器,它與一個40位的專用加法器相連。因此,乘法器可以在一個時鐘周期內(nèi)完成一次乘法累加(MAC)運算。16為了使修正系數(shù)的量化誤差最小,要163CPU狀態(tài)和控制寄存器
3個狀態(tài)寄存器
功能
位置各bit的作用要點671DO頁存儲器173CPU狀態(tài)和控制寄存器3個狀態(tài)寄存器要671DO頁存ARP15~
13TC12C11OVA10OVB9DP8~
0(1)狀態(tài)寄存器0(ST0)
(2)狀態(tài)寄存器1(ST1)
BRAF15CPL14XF13HM12INTM11010OVM9SXM8C167FRCT6CMPT5ASM4~
0(3)處理器工作方式狀態(tài)寄存器(PMST)
IPTR15~
7MP/MC6OVLY5AVIS4DROM3CLKOFF2SMUL1SST018ARP15~13TC12C11OVA10OVB9DP8~第三節(jié)內(nèi)部總線結構不同總線作用與區(qū)別4組8條程序總線(PB)數(shù)據(jù)總線(CB、DB和EB)
地址總線(PAB、CAB、DAB和EAB)在片雙向總線
19第三節(jié)內(nèi)部總線結構不同總線作用與區(qū)別4組8條19程序總線PB
傳送取自程序存儲器的指令代碼和立即操作數(shù)。數(shù)據(jù)總線CB、DB和EB這3條數(shù)據(jù)總線將內(nèi)部各單元(如CPU、數(shù)據(jù)地址生成電路、程序地址產(chǎn)生邏輯、在片外圍電路以及數(shù)據(jù)存儲器)連接在一起,其中CB和DB傳送讀自數(shù)據(jù)存儲器的操作數(shù),EB傳送寫到存儲器的數(shù)據(jù)。*為什么要用2條數(shù)據(jù)線(CB、DB)讀數(shù)?20程序總線PB傳送取自程序存儲器的指令代碼和立即操作數(shù)。20C54x利用兩個輔助寄存器算術運算單元(ARAU0和ARAU1),在每個時鐘周期內(nèi)可以產(chǎn)生兩個數(shù)據(jù)存儲器的地址。同時,PB能夠?qū)⒋娣旁诔绦蚩臻g(如系數(shù)表)中的操作數(shù),傳送到乘法器和加法器,以便執(zhí)行乘法/累加操作。此種功能,連同雙操作數(shù)的特性,可以支持在一個周期內(nèi)執(zhí)行3操作數(shù)指令。21C54x利用兩個輔助寄存器算術運算單元21另外,實際上C54x還有一條在片雙向總線,用于尋址在片外圍電路。這條總線通過CPU接口中的總線交換器連到DB和EB。利用這個總線讀/寫,需要2個或2個以上的周期。*什么是在片雙向總線?VC5402采用CMOS制造工藝,共有144個引腳。引腳按功能分為電源引腳、時鐘引腳、控制引腳、地址引腳、數(shù)據(jù)引腳、外部中斷引腳、通信端口引腳、通用I/O引腳等部分。22另外,實際上C54x還有一條在片雙向總VC5402采用第四節(jié)C54x芯片的存儲器結構
哈佛結構馮?諾依結構特點與區(qū)別程序/數(shù)據(jù)存儲器CPU23第四節(jié)C54x芯片的存儲器結構哈佛結構馮?諾依哈佛結構改善的哈佛結構特點與區(qū)別程序存儲器CPU數(shù)據(jù)存儲器對存儲器空間分配的不同考慮24哈佛結構特點程序存儲器CPU數(shù)據(jù)存儲器對存儲器空間分配的不哈佛結構存儲空間分配
64K字程序存儲空間
64K字數(shù)據(jù)存儲空間空間構架DARAMSARAMROM64K字的I/O空間并行性及RAM雙尋址片內(nèi)/片外存儲器特點25哈佛結構存儲空間分配64K字程序存儲空間
64K字數(shù)據(jù)存儲
C54x結構上的并行性以及在RAM的雙尋址能力,使它能夠在任何一個給定的機器周期內(nèi)同時執(zhí)行4次存儲器操作:1次取值、讀2個操作數(shù)和寫1個操作數(shù)。
與片外的存儲器相比,片內(nèi)存儲器具有不需插入等待狀態(tài)、成本和功耗低等優(yōu)點。當然,片外存儲器有尋址較大存儲空間的能力,這是片內(nèi)存儲器無法比擬的。26C54x結構上的并行性以及在RAM的雙26存儲器空間的劃分與交叉
DARAMSARAMROM片內(nèi)存儲器類型空間交叉的條件MP/MC位OVLY位DROM位使能禁止程序數(shù)據(jù)片內(nèi)存儲器空間27存儲器空間的劃分與交叉DARAM片內(nèi)存儲器空間MP/MC位MP/MC=0,則片內(nèi)ROM安排為程序空間MP/MC=1,則片內(nèi)ROM不安排為程序空間。OVLY=1,則片內(nèi)RAM安排為程序和數(shù)據(jù)空間OVLY=0,則片內(nèi)RAM只安排為數(shù)據(jù)存儲空間DROM=1,則部分片內(nèi)ROM安排為數(shù)據(jù)空間DROM=0,則片內(nèi)ROM不安排成數(shù)據(jù)空間
28MP/MC=0,則片內(nèi)ROM安排為程序空間28程序存儲器:執(zhí)行的指令和指令執(zhí)行中所
用的系數(shù)表。數(shù)據(jù)存儲器:指令所要用的數(shù)據(jù)。I/O存儲空間與存儲器映像外圍設備相連接,也可以作為附加的數(shù)據(jù)存儲空間使用。29程序存儲器:執(zhí)行的指令和指令執(zhí)行中所29C54X的外部程序存儲器可尋址64K字的存儲空間。它們的片內(nèi)ROM、DARAM、SARAM,都可以通過軟件映像到程序空間。如果程序地址生成器(PAGEN)發(fā)出的地址處在片內(nèi)程序存儲器地址范圍外,處理器就能自動地對外部尋址。30C54X的外部程序存儲器可尋址64K字的存30當處理器復位時,復位和中斷向量都映像到程序空間的FF80h。復位后,這些向量可以被重新映像到程序空間中任何一個128字頁的開頭。這就很容易將中斷向量表從引導ROM中移出來,然后再根據(jù)存儲器分配圖進行安排。片內(nèi)ROM中(F800h~FFFFh)這2K字是由TI公司定義的。其余的片內(nèi)ROM可以把用戶的程序代碼編寫進去。31當處理器復位時,復位和中斷向量都映像31數(shù)據(jù)存儲器
數(shù)據(jù)存儲器類型RAM(SARAM)RAM(DARAM)片內(nèi)ROM(軟件映像)片內(nèi)/片外數(shù)據(jù)存儲器的識別32數(shù)據(jù)存儲器數(shù)據(jù)存儲器類型RAM(SARAM)片內(nèi)/片外數(shù)據(jù)存儲器映像CPU寄存器(0000h~001Fh)外圍電路寄存器(0020h~005Fh)32字暫存器(0060h~007Fh)896字DARAM(0080h~03FFh)其中,外圍電路寄存器用于對外圍電路的控制和存放數(shù)據(jù),對它們尋址,需要2個機器周期。33存儲器映像CPU寄存器(0000h~001Fh)33*在數(shù)據(jù)存儲空間的第0頁被安排成CPU和片內(nèi)外設的存儲器映像寄存器。這樣可以簡化對它們的訪問,并為保存和恢復用于內(nèi)容切換的寄存器,以及在累計器和其它寄存器之間傳遞信息提供了方便。如在尋址存儲器映像CPU寄存器時,不需要插入等待周期。34*在數(shù)據(jù)存儲空間的第0頁被安排成CPU和片內(nèi)外設輔助寄存器(AR0~AR7):這8個16位的輔助寄存器可以由算術邏輯單元(ALU)訪問,也可以由輔助寄存器算術單元(ARAU)進行修改。它們主要的功能是產(chǎn)生16位的數(shù)據(jù)地址,也可以同來作為通用寄存器和計數(shù)器。TMS320C54x除了程序和數(shù)據(jù)存儲器空間外,還有一個I/O存儲器空間。I/O是一個64KB的地址空間(0000H~FFFFH),都在片外??梢杂脙蓷l指令(輸入指令PORTR和輸出指令PORTW)對I/O空間尋址。35輔助寄存器(AR0~AR7):這8個16位的輔TMS3
所有TMS320C54xDSP只有兩個通用I/O,即BIO和XF。為了訪問更多的通用I/O,可以對主機通信并行接口和串行接口進行配置,以用作通用I/O。另外還可以擴展外部I/O,外部I/O必須使用緩沖或鎖存電路,配合外部I/O讀寫控制構成外部I/O的控制電路。36所有TMS320C54xDSP只有兩個通用I/O,第五節(jié)在片外圍電路不同子系列器件差別通用I/O引腳XF和BIO定時器時鐘發(fā)生器主機接口軟件可編程等待狀態(tài)發(fā)生器可編程分區(qū)開關串行口37第五節(jié)在片外圍電路不同通用I/O引腳XF和BIO37C54x在片外圍電路有一組控制寄存器和數(shù)據(jù)寄存器,它們與CPU寄存器一樣,也映像到數(shù)據(jù)存儲器0頁(20h~5Fh)。外圍電路的工作,受這些存儲器映像寄存器控制,它們也可以用來傳送數(shù)據(jù)。在尋址存儲器映像外圍電路寄存器時,需要占用2個機器周期。38C54x在片外圍電路有一組控制寄存器38通用I/O引腳
XFSSBXXF
RSBXXF特點發(fā)信號收信號XC2,BIOXF可以用來向外部器件發(fā)信號BIO用來監(jiān)控外圍設備。在時間要求苛刻的循環(huán)中,不允許受干擾,此時可以根據(jù)BIO引腳的狀態(tài)(即外圍設備的狀態(tài))決定分支轉(zhuǎn)移的去向,以替代中斷。如果BIO引腳為低電平(條件滿足),則執(zhí)行后面的1條雙字或2條單字指令;否則,執(zhí)行2條NOP指令。39通用I/O引腳XFSSBXXF特點發(fā)信號收信號定時中斷的周期計算
定時中斷周期=CLKOUT×(TDDR+1)×(PRD+1)定時器輸出信號定時器如何節(jié)電TOUTTINT
40定時中斷的周期計算定時器輸出信號定時器如何節(jié)電TOUT401)將中斷標志寄存器IFR中的TINT位置1,清除尚未處理完的定時器中斷。2)將中斷屏蔽寄存器IMR中的TINT位置1,開放定時中斷。3)將ST1中的INTM位清0,從整體上開放中斷。開放定時中斷
(假定INTM=1)復位時:TIM和PRD(時間常數(shù))都置成最大值FFFFh;定時器的分頻系數(shù)(TCR的TDDR位)清0,定時器開始工作。411)將中斷標志寄存器IFR中的TINT位置1,清除尚未處理完編程舉例
STM#0000h,SWWSR;不插等待周期;(軟件等待狀態(tài)寄存器置0)STM#0010h,TCR;TSS=1(TCR第5位TSS置1)STM#0100h,PRD;加載定時器周期寄存器(PRD);定時中斷周期=CLKOUT×(TDDR+1)×(PRD+1)STM#0C20h,TCR;定時分頻系數(shù)TDDR初始化為0
;TSS=0,啟動定時器工作;TRB=1,當TIM減到0后重新加載PRD
;Soft=1,F(xiàn)ree=1定時器遇到斷點后繼續(xù)運行STM#0008h,IFR;清除尚未處理完的定時中斷STM#0008h,IMR;開放定時中斷RSBXINTM;開放中斷(狀態(tài)寄存器ST1的INTM位復位)…42編程舉例STM#0000h,SWWSR;不插等待周期1時鐘發(fā)生器
作用
組成兩種參考時鐘輸入方式內(nèi)部振蕩電路晶體振蕩電路431時鐘發(fā)生器作用兩種參考時鐘輸入方式內(nèi)部振蕩電路晶體振蕩時鐘發(fā)生器為C54x提供時鐘信號。時鐘發(fā)生器由內(nèi)部振蕩器和鎖相環(huán)(PLL)電路兩部分組成。時鐘發(fā)生器要求有一個參考時鐘輸入方法一:利用DSP芯片內(nèi)部提供的晶振電路方法二:將外部時鐘源直接輸入X244時鐘發(fā)生器為C54x提供時鐘信號。44C54x內(nèi)部的PLL兼有倍頻和信號提純的功能,用高穩(wěn)定的參考振蕩器鎖定,可以提供高穩(wěn)定的頻率源。所以,C54x的外部頻率源的頻率可以比CPU的機器周期CLKOUT的速率低,這樣就能降低因高速開關時鐘所造成的高頻噪聲。C54x的PLL有兩種形式:1、硬件配置的PLL2、軟件可編程PLL45C54x內(nèi)部的PLL兼有倍頻和信號提純的功452復位電路
功能簡單的復位電路有監(jiān)視功能的復位電路462復位電路功能簡單的復位電路有監(jiān)視功能在DSP上電后,系統(tǒng)的晶體振蕩器往往需要幾百毫秒的穩(wěn)定期,一般為100~200ms。為此,應在DSP的復位引腳RS上加一復位信號。為了使芯片初始化正常,一般RS至少持續(xù)3個CLKOUT周期為低電平。
HPI(Host-PortInterface--HPI),C54x的HPI是一個8位的并行口,用來與主設備或主處理器接口。外部主機是HPI的主控者,它可以通過HPI直接訪問CPU的存儲空間,包括存儲器映像寄存器。HPI存取的接口是由一套存儲器來實現(xiàn)的。47在DSP上電后,系統(tǒng)的晶體振蕩器往往需
3
串行口
標準同步串行口(SP)緩沖同步串行口(BSP)多路緩沖串口(McBSP)時分多路串行口(TDM)
當緩沖串行口和時分多路串行口工作在標準方式時,它們的功能與標準串行口相同
串行口分類483串行口標準同步串行口(SP)當緩沖串行口和時分多路多通道帶緩沖串行口McBSP特點:雙倍的發(fā)送緩沖和三倍的接收緩沖數(shù)據(jù)存儲器,允許連續(xù)的數(shù)據(jù)流;獨立的接收、發(fā)送幀和時鐘信號;可直接與工業(yè)標準的編碼器、其它串行A/D、D/A器件連接。具有外部移位時鐘發(fā)生器及內(nèi)部頻率可編程移位時鐘;可直接利用多種串行協(xié)議接口通信。發(fā)送和接收通道數(shù)最多可以達到128路。49多通道帶緩沖串行口McBSP特點:雙倍的發(fā)送緩沖和三倍的接收4外部總線操作的優(yōu)先級別
單周期內(nèi)對片內(nèi)存儲器可完成從程序存儲器取1條指令、從數(shù)據(jù)存儲器讀2個操作數(shù),共3個操作。(切記:是CPU有四組、8條總線)但由于只有一條外部總線,故只能有1個操作。在遇到一個機器周期內(nèi),CPU尋址外部存儲器兩次,一次取指,一次取操作數(shù)時,數(shù)據(jù)尋址比程序存儲器取指具有較高的優(yōu)先權。單周期內(nèi)對片內(nèi)存儲器操作與片外存儲器操作的區(qū)別504外部總線操作的優(yōu)先級別單周期內(nèi)對片內(nèi)存儲器可完成從程序存外部數(shù)據(jù)準備輸入信號(READY)與片內(nèi)軟件可編程等待狀態(tài)發(fā)生器一道,可以使處理器與各種速度的存儲器以及I/O設備接口。當與慢速器件通信時,CPU處于等待狀態(tài),直到慢速器件完成了它的操作并發(fā)出READY信號后才繼續(xù)運行。51外部數(shù)據(jù)準備輸入信號(READY)與片內(nèi)軟515外設接口的速度配合1).對接口器件的速度要求
外部存儲器存取時間應小于60%的機器周期,否則需通過軟件或硬件插入等待狀態(tài)。
在采用低速器件時,需要用軟件或硬件為DSP插入等待狀態(tài)來協(xié)調(diào)。對于型號為TMS320C54x-40的DSP芯片,其尾數(shù)4表CPU運行的最高頻率為40MHz,由于大多數(shù)指令都是單周期指令,所以這種DSP的運行速率也就40MIPS,即每秒執(zhí)行4000萬條指令,這時它的機器周期為25ns。如果不插入等待狀態(tài),就要求外部器件的存取時間小于15ns。525外設接口的速度配合1).對接口器件的速度要求插入等待狀態(tài)數(shù)與外部器件的存取時間的關系
外部器件的存取時間ta/ns插入等待狀態(tài)數(shù)ta≤15015<ta≤40140<ta≤65265<ta≤90390<ta≤1154115<ta≤1405對于型號為TMS320C54x-40的DSP芯片
53插入等待狀態(tài)數(shù)與外部器件的存取時間的關系外部器件的存取時間軟件可編程等待狀態(tài)發(fā)生器可以將外部總線周期延長多達7個機器周期,這樣一來,C54x就能很方便地與外部慢速器件相接口。如果外部器件要求插入7個以上的等待周期,則可以利用硬件READY線來接口。軟件等待狀態(tài)寄存器(SWWSR),在數(shù)據(jù)空間的地址為0028h。程序空間和數(shù)據(jù)空間都被分成兩個32K的字塊,I/O空間由一個64K字塊組成。54軟件可編程等待狀態(tài)發(fā)生器可以將外部總54用STM指令進行修改SWWSR:STM#349B,SWWSR;SWWSR=0011010010011011
如圖進行連接,復位SWWSR=7FFFh,所有的程序、數(shù)據(jù)和I/O空間都被插入7個等待狀態(tài)。工作過程利用SWWSR,可以通過軟件為以上5個存儲空間分別插入0~7個軟件等待狀態(tài),例如:為程序空間和I/O空間插入3個等待狀態(tài),為數(shù)據(jù)空間插入2個等待狀態(tài)55用STM指令進行修改SWWSR:工作過程利用SWWSR,可以6利用軟件等待實現(xiàn)
接口的速度配合例2-1試為TMS320C54x-40作如下外設配置:程序存儲器EPROM8K×16位,ta=70ns數(shù)據(jù)存儲器SRAM8K×16位,ta=12nsA/D和D/A變換器16位,轉(zhuǎn)換時間=120ns畫出系統(tǒng)的接口連線圖。566利用軟件等待實現(xiàn)
接口的速度配合例2-1試為TMS32系統(tǒng)接口連線圖57系統(tǒng)接口連線圖57本例中C54x的機器周期為25ns(40MIPS),若外部器件的存取時間小于15ns,可以不插入等待狀態(tài)。因此例中的數(shù)據(jù)存儲器可以不插入等待狀態(tài),但程序存儲器和A/D、D/A外部設備應分別插入3個(75ns)和5個(125ns)等待狀態(tài)。此時軟件等待狀態(tài)寄存器SWWSR應配置為:0101000000011000STM#5018,SWWSR58本例中C54x的機器周期為25ns(40MIPS),若外部器使C54x進入一已知狀態(tài)至少保持5個時鐘周期的低電平復位后為高電平如果MP/
=0,則處理器從片內(nèi)ROM開始執(zhí)行程序,否則,它將從片外程序存儲器開始執(zhí)行程序。7復位與省電一、復位和IDLE3省電工作方式1.復位操作
59使C54x進入一已知狀態(tài)7復位與省電一、復位和IDLE3省電復位操作(RS)是一個不可屏蔽的中斷,它可以在任何時候使C54x進入一已知狀態(tài)。正常操作是上電后RS應至少保持5個時鐘周期的低電平。復位后RS為高電平,處理器從FF80h處取指,并開始執(zhí)行程序。60復位操作(RS)是一個不可屏蔽的中斷,它608中斷向量地址計算舉例(1)復位后的初始地址計算1)取IPTR的值(中斷向量指針,9位)2)查表得到中斷向量序號(5位)3)將十六進制的中斷向量序號左移2位4)將1)與3)相加,得到中斷向量地址618中斷向量地址計算舉例(1)復位后的初始地址計算61IPTR=111111111(1FFh)+K=0000000
1111
1111
1000
0000
FF80h故硬件復位后的開始地址為0FF80h。IPTR=000000001+K=0000000
0000
0000
1000
0000
0080h此時中斷向量被移到從0080h單元開始處(INTR0中斷)。62IPTR=111111111(1FFh)IP(2)外部中斷響應的時間響應的時間=采樣時間+查詢時間=1+2≥3個完整的機器周期外部中斷的時間基本上在3~8個機器周期之間。(3)外部中斷觸發(fā)方式電平觸發(fā)邊沿觸發(fā)
63(2)外部中斷響應的時間響應的時間=采樣時間+查詢時間(3第三章
堆棧尋址
1堆棧:當發(fā)生中斷或子程序調(diào)用時,用來自動保存PC內(nèi)容以及保護現(xiàn)場或傳送參數(shù)。
’C54x的堆棧是向低地址生長,并由16位堆棧指針SP管理。SP總是指向棧頂。
堆棧尋址:利用SP指針,按照先進后出的原則進行尋址。
當進棧操作時,SP先減小,然后數(shù)據(jù)進入堆棧;
當出棧操作時,數(shù)據(jù)先出棧,然后SP增加。
64第三章1堆棧:當發(fā)生中斷或子程序調(diào)用時,
2程序地址的生成程序地址生成器(PAGEN)構成程序計數(shù)器(PC)重復計數(shù)器(RC)塊重復計數(shù)器(BRC)塊重復起始地址寄存器(RSA)塊重復結束地址寄存器(REA)核心16位程序計數(shù)器(PC)內(nèi)中保存某個內(nèi)部或外部程序存儲器的地址。地址內(nèi)容為:
1.即將取指的某條指令
2.某個16位立即操作數(shù)
3.系數(shù)表在程序存儲器中的地址65程序地址生成器(PAGEN)程序計數(shù)器(PC)核心16位程序663分支轉(zhuǎn)移操作通過分支轉(zhuǎn)移指令改寫PC,可以改變程序的流向。而子程序調(diào)用指令則通過將一個返回地址壓入堆棧,執(zhí)行返回時恢復原地址??蓤?zhí)行:1.分支轉(zhuǎn)移2.循環(huán)控制3.子程序操作功能方法66663分支轉(zhuǎn)移操作通過分支轉(zhuǎn)移指令改寫PC,可以改變程序例3-3
編寫計算的主要程序部分。
.bssx,4;為X建立4個單元,;放置X1、X2、X3、X4
.bssy,1;為Y建立1個單元,放置Y
STM#x,AR1;將X1的地址傳給AR1
STM#3,AR2;將循環(huán)次數(shù)3傳給AR2
LD#0,A;對A清零loop:ADD*AR1+,A;對X1、X2、X3、X4循環(huán)累;加,結果放A中
BANZloop,*AR2-;檢查循環(huán)是否應結束
STLA,y;將累加結果存入Y中67例3-3編寫計算的主要程序部分。67例3-5利用單條指令的重復操作對數(shù)組x[5]={0,0,0,0,0}進行初始化。.bssx,5;為數(shù)組x分配5個存儲單元STM#x,AR1;將x的首地址賦給AR1LD#0,A;對A清零RPT#4;設置重復執(zhí)行下條指令5次STLA,*AR1+;對x[5]各單元清零或者.bssx,5STM#x,AR1RPTZA,#4;對A清零并設置重復執(zhí)行下條指令5次STLA,*AR1+68例3-5利用單條指令的重復操作對數(shù)組x[5]={0,0,1堆棧的使用方法
當程序調(diào)用中斷服務程序或子程序時,需要將程序計數(shù)器PC的值和一些重要的寄存器值進行壓棧保護,以便程序返回時能從間斷處繼續(xù)執(zhí)行。
’C54x提供一個用16位堆棧指針SP尋址的軟件堆棧。當向堆棧中壓入數(shù)據(jù)時,堆棧是從高地址向低地址方向填入,堆棧指針SP先減1,然后將數(shù)據(jù)壓入堆棧。當從堆棧中彈出數(shù)據(jù)時。數(shù)據(jù)先從堆棧中彈出,然后堆棧指針SP加1。
匯編語言程序設計691堆棧的使用方法當程序調(diào)用中斷服務程序或子程序時[例1]如果程序中要用到堆棧,必修先進行設置,方法如下:size .set 100 stack .usect “STK”,size STM #stack+size,SP上述語句是在RAM空間開辟一個堆棧區(qū)。前兩句是數(shù)據(jù)RAM中自定義一個名為STK的保留空間,共100個單元。第3句是將這個保留空間的高地址(#stack+size)賦給SP,作為堆棧底。自定義未初始化段STK究竟定位在數(shù)據(jù)RAM中的什么位置,應當在鏈接器命令文件中規(guī)定。設置好堆棧之后,就可以使用堆棧了,例如:CALL pmad ;(SP)-1SP,(PC)+2TOS ;pmadPCRET ;(TOS)PC,(SP)+1SP
70[例1]如果程序中要用到堆棧,必修先進行設置,方法如設置好堆2加、減法和乘數(shù)運算[例1]計算z=x+y-w LD @x,A ADD @y,A SUB @w,A STL A,@z [例2]計算y=mx+b LD @m,T MPY @x,A ADD @b,A STL A,@y[例3]計算y=x1*a1+x2*a2 LD @x1,T MPY @a1,B LD @x2,T MPY @a2,B STL B,@y STH B,@y+1712加、減法和乘數(shù)運算[例1]計算z=x+y-w[例3]計算[例4]在y=x1*a1+x2*a2+x3*a3+x4*a4 STM #a,AR1 STM #x,AR2 STM #2,AR3 LD *AR1+,T MPY *AR2+,Aloop LD *AR1+,T MPY *AR2+,B MAX A BANZ loop,*AR3-72[例4]在y=x1*a1+x2*a2+x3*a3+x4*a43、數(shù)據(jù)塊傳送
程序存儲器數(shù)據(jù)存儲器重復執(zhí)行MVPD指令,實現(xiàn)程序存儲器至數(shù)據(jù)存儲器的數(shù)據(jù)傳送,在系統(tǒng)初始化過程中是很有用的。這樣,就可以將數(shù)據(jù)表格與文本一道駐留在程序存儲器中,復位后將數(shù)據(jù)表格傳送到數(shù)據(jù)存儲器,從而不需要配置數(shù)據(jù)ROM,使系統(tǒng)的成本降低。[例1]數(shù)組x[5]={1,2,3,4,5}初始化
.data TBL: .word 1,2,3,4,5 .sect “.vectors” B START .bss x,5 .text START: STM #x,AR5 RPT #4 MVPD TBL,*AR5+733、數(shù)據(jù)塊傳送
程序存儲器數(shù)據(jù)存儲器重復執(zhí)數(shù)據(jù)存儲器數(shù)據(jù)存儲器在數(shù)字信號處理(如FFT)時,經(jīng)常需要將數(shù)據(jù)存儲器中的一批數(shù)據(jù)傳送到數(shù)據(jù)存儲器的另一個地址空間[例2]編寫一段程序?qū)?shù)據(jù)存儲器中的數(shù)組x[20]復制到數(shù)組y[20] .bss x,20 .bss y,20 … STM #x,AR2 STM #y,AR3 RPT #19 MVDD *AR2+,*AR3+74數(shù)據(jù)存儲器數(shù)據(jù)存儲器在數(shù)字信號處理(如FF4、雙操作數(shù)乘法[例1]編寫求解y=a1*x1+a2*x2+…+a19*x19+a20*x20 STM #x,AR2 STM #a,AR3 RPTZ A,#19 MAC *AR2+,*AR3+,A STH A,@y STL A,@y+1754、雙操作數(shù)乘法[例1]編寫求解y=a1*x1+a2*x2+【例5.21】計算y=a1*x1+a2*x2+a3*x3+a4*x4
,并存放累加器A中。
程序:*********************************************example.asm*********************************************
.title“example.asm”.mmregsstack.usect“STACK”,10h.bssa,4.bssx,4.bssy,1.defstart.data
table:.word1,2,3,4.word8,6,4,2.text;為堆棧指定空間;為變量分配9個字的空間;變量初始化76【例5.21】計算y=a1*x1+a2*x2+a3
start:STM#0,SWWSRSTM#STACK+10h,SPSTM#a,AR1RPT#7MVPDtable,*AR1+
CALLSUMend:Bend
SUM:STM#a,AR3STM#x,AR4RPTZA,#3MAC*AR3+,*AR4+,ASTLA,@yRET
;插入0個等待狀態(tài)
;設置堆棧指針
;AR1指向a
;移動8個數(shù)據(jù)
;從程序存儲器到數(shù)據(jù)存儲器
;調(diào)用SUM子程序;子程序執(zhí)行
77start:STM#0,SWWSR;插第四節(jié)指令系統(tǒng)概述TMS320C54x是TMS320系列中的一種定點數(shù)字信號處理器,它的指令系統(tǒng)分助記符形式和代數(shù)式形式兩種。共有指令129條,由于操作數(shù)的尋址方式不同,派生至205條。78第四節(jié)指令系統(tǒng)概述TMS320C54x是TMS320系列1.可同時讀入2或3個操作數(shù);2.支持雙精度運算的32位長操作數(shù)指令;3.可進行單條指令重復和塊指令重復操作;4.有塊存儲器傳送指令和并行操作(如并行存儲和加載、并行存儲和加/減法、并行存儲和乘法、并行加載和乘法)指令;5.設有條件存儲指令及延遲操作指令、有從中斷快速返回指令;6.有為特殊用途設計的指令(如支持FIR濾波、最小均方算法LSM、多項式計算以及浮點運算);7.有為省電安排的空轉(zhuǎn)指令。
TMS320C54x指令系統(tǒng)的主要特點791.可同時讀入2或3個操作數(shù);TMS320C54x指令系統(tǒng)基礎完整程序編寫實例初學者編寫的第一個程序通常是控制XF引腳的變化,然后用示波器測量XF腳波形或觀察與相接的LED。這個程序也常常用來測試一下DSP能否正常工作。例1.最簡單的程序:控制XF引腳周期性變化
實驗目的:通過簡單的程序了解DSP程序的結構,熟悉CCS開發(fā)環(huán)境。*************************************************************最簡單的程序:TestXF1.asm*循環(huán)對XF位置1和清0,用示波器可以在XF腳檢測到電*平高低周期性變化*常用于檢測DSP是否工作。************************************************************80基礎完整程序編寫實例初學者編寫的第一個程序通常是控制XF引腳 .mmregs
;預定義的寄存器
.def
CodeStart
;定義程序入口標記
.text
;程序區(qū)CodeStart:
;程序入口
SSBX
XF
;XF置1
RPT
#999
;重復執(zhí)行1000次空指
;令產(chǎn)生延時
NOP
RSBX
XF
;XF清0
RPT
#999
;重復執(zhí)行1000次空指
;令產(chǎn)生延時
NOP
B
CodeStart
;跳轉(zhuǎn)到程序開頭循環(huán)
;執(zhí)行
.end
81 .mmregs
;預定義的NOP指令執(zhí)行時間為一個時鐘周期,設DSP工作頻率是50MHz,可以估算出XF引腳電平的變化頻率約為:50M/2000=25kHz在沒有示波器的情況下,就要將程序1稍作改進,增加延時,用一個延時子程序?qū)F腳電平變化頻率降到肉眼可分辨的程度,就可以用LED來顯示電平的變化,程序如下:例2子程序調(diào)用實驗目的:學習子程序的調(diào)用**************************************************************TestXF2.asm*對TestXF1.asm稍作改進,用延時子程序設置*較長的延時*可以用試驗板上的LED看到XF引腳電平的變化*************************************************************82NOP指令執(zhí)行時間為一個時鐘周期,設DSP工作頻率是50MH .mmregs
;預定義的寄存器
.def
CodeStart
;定義程序入口標記
.text
;程序區(qū)CodeStart:
;程序入口
SSBX
XF
;XF置1
CALL
Delay
;調(diào)用延時程序
RSBX
XF
;XF清0
CALL
Delay
;調(diào)用延時程序
B
CodeStart
;跳轉(zhuǎn)到程序開頭循環(huán)執(zhí)行83 .mmregs
;預定義的寄***************************************************************延時子程序:Delay*用兩級減一計數(shù)器來延時。調(diào)整AR1和AR2的大小LED*閃爍的頻率不同**************************************************************Delay:
STM
#999,AR1
;循環(huán)次數(shù)1000LOOP1:
STM
#4999,AR2
;循環(huán)次數(shù)5000LOOP2:
BANZ
LOOP2,*AR2- ;如果AR2不等;于0,AR2減1,跳轉(zhuǎn)到LOOP2
BANZ
LOOP1,*AR1- ;如果AR1不等;于0,AR1減1,跳轉(zhuǎn)到LOOP1
RET
.end84******************************注意這種延時方法并不精確,需要精確定時必須用定時器。按此法延時的近似公式為:
4*(AR2+1)*(AR1+1)*時鐘周期當DSP工作在50MHz(時鐘周期20ns),AR1=999,
AR2=4999時,延時約為400ms,則LED閃爍的周期為800ms,頻率1.25Hz85注意這種延時方法并不精確,需要精確定時必須851鏈接配置文件一個完整的DSP程序至少包含三個部分:程序代碼、中斷向量表、鏈接配置文件(*.cmd)。這里介紹一下鏈接配置文件文件,對本次實驗影響不大的中斷向量表將在后文介紹。連接配置文件的確定了程序鏈接成最終可執(zhí)行代碼時的選項,其中有很多條目,實現(xiàn)不同方面的選項,其中最常用的也是必須的有兩條:1).存貯器的分配2).標明程序入口。以本次實驗為例,下面的簡單的鏈接配置文件就夠用了:861鏈接配置文件86/*TestXF.cmd*/-eCodeStart
/*程序入口,必須在程序中定義相應的標號*/
MEMORY
{
page0:PRAM:org=0100hlen=0F00h
/*定義程序存貯區(qū),起始0100H,長度0F00H*/
}
SECTIONS {
.text:>PRAMpage0
/*將.text段映射到page0的param區(qū)*/
}87/*TestXF.cmd*/87
由于每個程序都需要一個鏈接配置文件,可以編寫一個滿足通常需要的鏈接配置文件。作為本手冊通用的鏈接配置文件如下,可以滿足本書大部分程序的需要。在未特別指明的情況下使用這個通用的鏈接配置文件:88由于每個程序都需要一個鏈接配置文件,可以編寫一/*5402.cmd*/-e
CodeStart
/*程序入口,必須在程序中定義相應的標號*/-m
map.map
/*生成存儲器映射報告文件*/MEMORY
{
PAGE0:
VECT:
org=0080h
len=0080h
/*中斷向量表*/
PARAM:org=100h
len=0F00h
/*代碼區(qū)*/
PAGE1:
DARAM:org=1000h
len=1000h
/*數(shù)據(jù)區(qū)*/ }SECTIONS
{
.text
:>PARAM
PAGE0
/*代碼段*/
.vectors
:>VECT
PAGE0
/*中斷向量表*/
STACK
:>DARAM
PAGE1
/*堆棧*/
.bss
:>DARAM
PAGE1
/*未命名段*/
.data
:>DARAM
PAGE1
/*數(shù)據(jù)段*/
}89/*5402.cmd*/892中斷向量表
中斷向量表是DSP程序的重要組成部分,當有中斷發(fā)生并且處于允許狀態(tài)時,程序指針跳轉(zhuǎn)到中斷向量表中對應的中斷地址。由于中斷服務程序一般較長,通常中斷向量表存放的是一個跳轉(zhuǎn)指令,指向?qū)嶋H的中斷服務程序。下面是5402中斷向量表的一個范例,可以作為模板,使用時稍作修改就行:
902中斷向量表
中斷向量表是DSP程序的重要組成******************************************************5402Vectors.asm/*完整的5402中斷向量表示例*/*5402共有30個中斷向量,每個向量占4個字的空間。
*使用向量一般用一條跳轉(zhuǎn)指令轉(zhuǎn)到相應中斷服務子程序,其余空位用NOP填充未使用的向量直接用RETE返回,是為了防止意外進入未用中斷。
91******************************.sect".vectors" ;開始命名段.vecotrs.globalCodeStart ;引用程序入口的全局符號定義
;…引用其它中斷程序入口的全局符號定義.align0x80 ;中斷向量表必須對齊128字的頁邊界RESET:BCodeStart ;Reset中斷向量,跳轉(zhuǎn)到程序入口
NOP ;用NOP填充表中其余空字
NOP ;B指令占了兩個字,所以要填兩個NOP
NMI: RETE ;不可屏蔽中斷
NOP
NOP
NOP92.sect".vectors" ;開始命名段.v1匯編語言程序的編輯、匯編和鏈接過程第四章DSP軟件開發(fā)過程931匯編語言程序的編輯、匯編和鏈接過程第四章DSP軟件開例4-1
編寫計算y=a1*x1+a2*x2+a3*x3+a4*x4的匯編源程序**********************************example.asmy=a1*x1+a2*x2+a3*x3+a4*x4**********************************.title“example.asm”;為匯編源程序取名
.mmregs;定義存儲器映象寄存器STACK.usect“STACK”,10h;分配10個單元的堆??臻g
.bssa,4;為系數(shù)a分配4個單元的空間
.bssx,4;為變量x分配4個單元的空間
.bssy,1;為結果y分配1個單元的空間
.def_c_int00;定義標號_c_int00
.data;定義數(shù)據(jù)代碼段table:.word1,2,3,4;在標號table開始的8個單元中
.word8,6,4,2;為這8個單元賦初值94例4-1編寫計算y=a1*x1+a2*x2+a3*x3+.text;定義文本代碼段_c_int00:STM#0,SWWSR;軟件等待狀態(tài)寄存器置0,不設等待
STM#STACK+10h,SP;設置堆棧指針初值
STM#a,AR1;AR1指向a的地址
RPT#7;從程序存儲器向數(shù)據(jù)存儲器
MVPDtable,*AR1+;重復傳送8個數(shù)據(jù)
CALLSUM;調(diào)用SUM實現(xiàn)乘法累加和的子程序end:Bend;循環(huán)等待SUM:STM#a,AR3;將系數(shù)a的地址賦給AR3STM#x,AR4;將變量x的地址賦給AR3RPTZA,#3;將A清0,并重復執(zhí)行下條指令4次
MAC*AR3+,*AR4+,A;執(zhí)行乘法并累加,結果放在A中
STLA,@y;將A的低字內(nèi)容送結果單元yRET;結束子程序
.end;結束全部程序95.text2.匯編器對段的處理用于定義段的匯編命令.bss未初始化段.usect未初始化自定義段.text已初始化程序正文段.data已初始化程序數(shù)據(jù)段.sect已初始化自定義段如果匯編語言程序中一個段命令都沒有用,那么匯編器把程序中的內(nèi)容都匯編到.text段。注意962.匯編器對段的處理用于定義段的匯編命令.bss未初(1)未初始化段未初始化段由.bss和.usect命令建立
位置為變量保留存儲器空間作用通常將它們定位到RAM區(qū)
使用方法
.bss符號,字數(shù)符號.usect“段名”,字數(shù)對應于保留的存儲空間第一個字的變量名稱
程序員為自定義未初始化段起的名字
97(1)未初始化段未初始化段由.bss和.usect命令建立(2)已初始化段已初始化段是由.text、.data的.sect命令建立位置包含有可執(zhí)行代碼或初始化數(shù)據(jù)
作用通常將它們定位到EPROM區(qū)
使用方法.text[段起點].data[段起點].sect“段名”[,段起點]段程序計數(shù)器(SPC)定義的一個起始值。
程序員為自定義未初始化段起的名字
98(2)已初始化段已初始化段是由.text、.data的.s(3)子段位置子段結構,可以使存儲器分配圖更加緊密。
可單獨分配空間或在基段位置之后
使用方法基段名:子段名
.sect“.text:_func”
子段也有兩種:用.sect命令建立的是已初始化段,而用.usect命令建立的段是未初始化段。
作用99(3)子段位置子段結構,可以使存儲器分配圖更加緊密??蓡?/p>
3目標文件的鏈接
鏈接器主要功能根據(jù)鏈接命令或鏈接命令文件(.cmd文件),將一個或多個COFF目標文件鏈接起來,生成存儲器映象文件(.map)和可執(zhí)行的輸出文件(.out)(COFF目標模塊)
1003目標文件的鏈接鏈接器根據(jù)鏈接命令或鏈接命令文件(.在連接過程中,連接器將各個目標文件合并起來,將各個文件的各個段配置到目標系統(tǒng)的存儲器中;對各個符號和段進行重定位,并給它們指定一個最終的地址;解決輸入文件之間未定義的外部引用。101在連接過程中,連接器將各個目標文件合并起來,將各個文件的各個
鏈接器將輸入段組合成一個可執(zhí)行的目標模塊102鏈接器將輸入段組合成一個可執(zhí)行的目標模塊102例4-6鏈接器命令文件舉例。a.objb.obj
/*輸入文件名*/-oprog.out/*選項*/-mprog.map/*選項*/MEMORY/*MEMORY命令*/{PAGE0:ROM:origin=1000h,length=0100hPAGE1:RAM:origin=0100h,length=0100h}SECTIONS/*SECTIONS命令*/{
.text:>ROM
.data:>ROM
.bss:>RAM}如果鏈接器認定一個文件為目標文件,就對它鏈接;否則就假定它是一個命令文件,并從中讀出命令和進行處理。
103例4-6鏈接器命令文件舉例。如果鏈接器認定一個文件為目標(1)輸入文件名,就是要鏈接的目標文件和文檔庫文件,或者是其它的命令文件。如果要調(diào)用另一個命令文件作為輸入文件,此句一定要放在本命令文件的最后,因為鏈接器不能從新調(diào)用的命令文件返回。(2)鏈接器選項。這些選項既可以用在鏈接器命令行,也可以編在命令文件中。(3)MEMORY和SECTIONS都是鏈接器命令。如果鏈接命令文件中沒有MEMORY和SECTIONS命令(默認情況),則鏈接器就從地址0080h一個段接著一個段進行配置。(4)注釋的內(nèi)容應當用/*和*/符號括起來。
注意104(1)輸入文件名,就是要鏈接的目標文件和文檔庫文件,或者是其4.多個文件的鏈接
例4-8編寫復位向量文件vextors.asm。************************Resetvectorforexample.asm************************.title“vectors.asm”.ref_c_int00.sect“.vectors”B_c_int00.end引用example.asm中.def_c_int00定義的標號編寫example.asm見例4-1。
1054.多個文件的鏈接例4-8編寫復位向量文件vextor假設目標存儲器的配置如下:程序存儲器:EPROME000h~FFFFh(片外)數(shù)據(jù)存儲器:SPRAM0060h~007Fh(片內(nèi))DARAM0080h~017Fh(片內(nèi))例4-9根據(jù)例4-1和例4-8編寫鏈接器命令文件example.cmd。vectors.objexample.obj-oexample.out-mexample.map-e_c_int00/*軟件仿真器的入口地址*/生成一個映象文件example.map生成可執(zhí)行的輸出文件example.out匯編生成目標文件example.obj和vectors.obj106假設目標存儲器的配置如下:生成一個映象文件example.mMWMORY{PAGE0:EPROM:org=0E000h,len=100hVECS:org=0FF80h,len=04hPAGE1:SPRAM:org=0060h,len=20hDARAM:org=0080h,len=100h}SECTIONS{.text:>EPROMPAGE0.data:>EPROMPAGE0.bss:>SPRAMPAGE1STACK:>DARAMPAGE1.vectors:>VECSPAGE0}107MWMORY107鏈接后生成一個可執(zhí)行的輸出文件example.out和映象文件
example.map。映象文件中給出了存儲器的配置情況、程序文本段、數(shù)據(jù)段、堆棧段、向量段在存儲器中的定位表,以及全局符號在存儲器中的位置??蓤?zhí)行輸出文件example.out裝入目標系統(tǒng)后就可以運行了。系統(tǒng)復位后,PC首先指向00FF80h,這是復位向量地址。在這個地址上,有一條B_c_int00指令,程序馬上跳轉(zhuǎn)到_c_int00語句標號,從程序起始地址0e000h開始執(zhí)行主程序。
108鏈接后生成一個可執(zhí)行的輸出文件example.out和映象文5中斷函數(shù)
C函數(shù)可以直接處理中斷。但是在用C語言編寫中斷程序時,應注意以下幾點:
(1)中斷的使能和屏蔽由程序員自己來設置。這一點可以通過內(nèi)嵌匯編語句來控制中斷的使能和屏蔽,即通過內(nèi)嵌匯編語句來設置中斷屏蔽寄存器IMR及INTM,也可通過調(diào)用匯編程序函數(shù)來實現(xiàn)。
(2)中斷程序不能有入口參數(shù),即使聲明,也會被忽略。
(3)中斷子程序即使被普通的C程序調(diào)用,也是無效的,因為所有的寄存器都已經(jīng)被保護了。1095中斷函數(shù)109(4)將一個程序與某個中斷進行關聯(lián)時,必須在相應的中斷矢量處放置一條跳轉(zhuǎn)指令。采用.sect匯編指令可以建立這樣一個跳轉(zhuǎn)指令表以實現(xiàn)該功能。
(5)在匯編語言中,必須在中斷程序名前加上一個下劃線_。
(6)用C語言編寫的中斷程序必須用關鍵字interrupt說明。
(7)中斷程序用到的所有寄存器,包括狀態(tài)寄存器都必須保護。
(8)如果中斷程序中調(diào)用了其他的程序,則所有的寄存器都必須保護。110(4)將一個程序與某個中斷進行關聯(lián)時,必須C語言程序編寫過程步驟:(1)編輯器編輯C程序readdata.c;(2)編譯程序?qū)程序編譯
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026遼寧沈陽理工大學招聘高層次人才94人備考題庫(第一批)及答案詳解(考點梳理)
- 2026年農(nóng)村污水生態(tài)處理模式解析
- 2026浙江溫州市洞頭人才發(fā)展有限公司招聘1人備考題庫(食堂工作人員)及參考答案詳解一套
- 2026福建海峽人才網(wǎng)絡資訊有限公司前端開發(fā)人員招聘1人備考題庫(含答案詳解)
- 2026福建漳州市詔安縣機關事業(yè)單位社會保險中心招募見習人員2人備考題庫有完整答案詳解
- 礦業(yè)開發(fā)經(jīng)理年終總結(3篇)
- 空調(diào)維修年終總結范文(3篇)
- 職業(yè)健康促進的經(jīng)濟學評價
- 職業(yè)健康與心理健康的協(xié)同管理路徑
- 遂寧四川遂寧射洪市部分衛(wèi)生事業(yè)單位招聘農(nóng)村訂單定向醫(yī)學畢業(yè)生4人筆試歷年參考題庫附帶答案詳解
- 2026福建廈門市高崎出入境邊防檢查站招聘警務輔助人員30人備考題庫及完整答案詳解
- 2026西藏自治區(qū)教育考試院招聘非編工作人員11人筆試備考試題及答案解析
- 2026年度黑龍江省生態(tài)環(huán)境廳所屬事業(yè)單位公開招聘工作人員57人備考題庫及一套答案詳解
- 炎癥因子風暴與神經(jīng)遞質(zhì)紊亂的干細胞干預策略
- 2026年1月浙江省高考(首考)英語試題(含答案)+聽力音頻+聽力材料
- 中國大型SUV市場數(shù)據(jù)洞察報告-
- 太陽能路燈施工組織設計
- 2025年農(nóng)村會計考試試題題庫及答案
- 檢驗科電解質(zhì)教學課件
- 浙江省杭州市西湖區(qū)杭州學軍中學2025-2026學年物理高二上期末質(zhì)量跟蹤監(jiān)視試題含解析
- 房建工程施工工藝流程
評論
0/150
提交評論