




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1DSP匯編語(yǔ)言程序的編寫(1) 匯編語(yǔ)言源程序以.asm為其擴(kuò)展名。(2) 匯編語(yǔ)言源程序的每一行都可以由4個(gè)部分組成,句法如下: 標(biāo)號(hào) : 助記符 操作數(shù) ;注釋其中可用空格或TAB鍵隔開(kāi)標(biāo)號(hào)供本程序的其他部分或其他程序調(diào)用。標(biāo)號(hào)是任選項(xiàng),標(biāo)號(hào)后面可以加也可以不加冒號(hào)“:”。標(biāo)號(hào)必須從第一列寫起,標(biāo)號(hào)最多可達(dá)到32個(gè)字符(AZ ,az ,09 ,_ ,以及$),但第1個(gè)字符不能以數(shù)字開(kāi)頭。引用標(biāo)號(hào)時(shí),標(biāo)號(hào)的大小寫必須一致。標(biāo)號(hào)的值就是SP
2、C(段程序計(jì)數(shù)器)的值。如果不用標(biāo)號(hào),則第一個(gè)字符必須為空格、分號(hào)或星號(hào)(*)。助記符助記符指令、匯編指令、宏指令和宏調(diào)用。作為助記符指令,一般用大寫;匯編命令和宏指令,以英文句號(hào)“.”開(kāi)始,且為小寫。匯編命令可以形成常數(shù)和變量,當(dāng)用它控制匯編和連接過(guò)程時(shí),可以不占用存儲(chǔ)空間。指令和匯編命令都不能寫在第1列。操作數(shù)指令中的操作數(shù)或匯編命令中定義的內(nèi)容。操作數(shù)之間必須用逗號(hào)“,”分開(kāi)。有的指令操作無(wú)操作數(shù),如NOP、RESET。注釋注釋從分號(hào)“;”開(kāi)始,可以放在指令或匯編命令的后面,也可以放在單獨(dú)的一行或數(shù)行。注釋是任選項(xiàng)。如果注釋從第1列開(kāi)始,也可以用“*”表示注釋。(3)
3、0; 常用的匯編命令如表所示。匯編命令作用舉例.title緊隨其后的是匯編語(yǔ)言程序正文.title “example.asm”.end結(jié)束匯編命令放在匯編語(yǔ)言程序的最后.text緊隨其后的是匯編語(yǔ)言程序正文經(jīng)匯編后,緊隨.text后的是可執(zhí)行程序代碼.data緊隨其后的是已初始化數(shù)據(jù)有兩種數(shù)據(jù)形式:.int和.用來(lái)設(shè)置一個(gè)或多個(gè)16位無(wú)符號(hào)整型量常數(shù).word.word 用來(lái)設(shè)置一個(gè)或多個(gè)16位符號(hào)整型量常數(shù)table: .word 1,2,3,4.word 6,8,4,2表示在程序存儲(chǔ)器標(biāo)號(hào)為table開(kāi)始的8個(gè)單元中存
4、放初始化數(shù)據(jù)1,2,3,4,6,8,4,2.bss.bss為未初始化變量保留存儲(chǔ)空間.bss x,4 表示在數(shù)據(jù)存儲(chǔ)器中空出4個(gè)存儲(chǔ)單元存放變量x1,x2,x3和x4.sect建立包含代碼和數(shù)據(jù)的自定義段.sect “vectors”定義向量表,緊隨其后的是復(fù)位向量和中斷向量,名為vectors.usect為未初始化變量保留存儲(chǔ)空間的自定義段STACK .usect “STACK”,10h 在數(shù)據(jù)存儲(chǔ)器中留出16個(gè)單元作為堆棧區(qū),名為STACK (4) 匯編語(yǔ)言程序中的數(shù)據(jù)形式如表所示形式舉例二進(jìn)制1110001
5、b或1111001B八進(jìn)制226q或572Q十進(jìn)制1234或1234或1234(缺省型)十六進(jìn)制0A40h或0A40H或0xA40浮點(diǎn)數(shù)1.654e23(僅C語(yǔ)言程序中能用,匯編程序中不能用)字符D字符串“this is a string” 2 程序21 程序一編程目的:了解DSP的輸入和輸出方法程序功能:求乘積之和y=a1*x1+a2*x2+a3*x3+a4*x4.title"mpy_add.asm".mmregs;將存
6、儲(chǔ)映像寄存器導(dǎo)入列表STACK.usect"STACK",10h;給堆棧段分配空間.bssa,4;將9個(gè)字空間分配給各個(gè)變量.bssx,4.bssy,1PA0.set0;將端口PA0全部置0.defstart;定義標(biāo)號(hào)start.data;定義數(shù)據(jù)代碼段table:.word4,4,4,4.word4,4,4,4.text ;定義文本代碼段start:STM#0,SWWSR;將等待寄存器設(shè)為0,表示不等待STM#STACK+10h,SP ;設(shè)堆棧指針STM#a,AR1 ;將AR1指向變量a的地址RPT #7;從程序存儲(chǔ)空間轉(zhuǎn)移71個(gè)值到數(shù)據(jù)儲(chǔ)存空間MVPDtable,*AR
7、1+CALLSUM;調(diào)用SUM子程序end:Bend ;循環(huán)等待SUM:STM#a,AR3;將AR3指向變量a的地址STM#x,AR4;將AR4指向變量x的地址RPTZA,#3;將A清0,并重復(fù)執(zhí)行下一條指令31次MAC*AR3+,*AR4+,ASTL A,y;將寄存器A中的低16位存入y地址空間PORTWy,PA0;將y地址中的值輸出到輸出口RET;子程序返回.end;程序結(jié)束 等待位的設(shè)置:C54x片內(nèi)有一部件軟件可編程等待狀態(tài)發(fā)生器,控制著外部總線的工作。軟件可編程等待狀態(tài)發(fā)生器可將外部總線周期延長(zhǎng)多達(dá)7個(gè)周期,這樣一來(lái),C54x就能很方便的與外部慢速器件相接口。如果外部器件要
8、求插入7個(gè)以上的等待周期,則可以利用硬件READY先來(lái)接口。當(dāng)所有的外部尋址都配置在0等待狀態(tài)時(shí),加到等待狀態(tài)發(fā)生器的時(shí)鐘被關(guān)斷;來(lái)自內(nèi)部時(shí)鐘的這些通道被切斷后,可以降低處理器的功耗。軟件可編程等待狀態(tài)發(fā)生器的工作由16位的軟件等待狀態(tài)寄存器(SWWSR)的控制,它是存儲(chǔ)器映象寄存器,在數(shù)據(jù)空間的地址為0028h。將程序空間和數(shù)據(jù)空間都分成兩個(gè)32K 字塊,I/O空間由一個(gè)64K字塊組成。這5個(gè)字塊空間在SWWSR中都相應(yīng)的有一個(gè)3位字段,用來(lái)定義各個(gè)空間插入等待狀態(tài)的數(shù)目: 151412119865320保留/XPA(僅C548,C549)I/O空間(64K)數(shù)據(jù)空間 (高32K)
9、數(shù)據(jù)空間 (低32位)程序空間 (高32位)程序空間 (低32位)RR/WR/WR/WR/WR/W上述SWWSR的各個(gè)3位字段規(guī)定的插入等待狀態(tài)的最小數(shù)為0(不插入等待周期),最大數(shù)為7(111b)。22程序二編程目的:熟悉DSP匯編程序設(shè)計(jì)技巧,完善輸出功能程序功能:實(shí)現(xiàn)一8位LED燈由左到右循環(huán)閃爍 .title"bubble.asm" .mmregs;將存儲(chǔ)映像寄存器導(dǎo)入列表STACK.usect"STACK",5h;給堆棧段分配空間.bssy,1 .defstart .dataPA0.set 0.textstart:STM#7000,
10、SWWSR;設(shè)等待位 STM #2,AR3;將輔助寄存器AR3設(shè)為2 (乘2,實(shí)現(xiàn)左移)STM#6,AR1;將輔助寄存器AR1設(shè)為6 (左移7次)STM#3,AR2;將輔助寄存器AR2設(shè)為3 (循環(huán)執(zhí)行4次) LDAR3,T;將T(乘法寄存器)設(shè)為2loop1: LD#1,A ;A寄存器值為1STLA,y;y1PORTWy,PA0;輸出y地址內(nèi)的值到輸出口 STM#10000,AR4;將輔助寄存器AR4設(shè)為10000loop3:RPT#10000;重復(fù)執(zhí)行下一指令100001次NOP;等待 BANZloop3,*AR4-;循環(huán)AR4值100001次loop2:MPYy,A;將y×T,
11、其值存入A寄存器STLA,y;將A的值存入y地址中PORTWy,PA0;輸出y地址值到輸出口STM#10000,AR5;將輔助寄存器AR5設(shè)為10000loop4:RPT#10000;實(shí)現(xiàn)第8個(gè)燈跳轉(zhuǎn)到第1個(gè)燈時(shí)的時(shí)間延遲NOPBANZloop4,*AR5-BANZloop2,*AR1-BANZloop1,*AR2-end:Bend.end數(shù)據(jù)尋址方式:C54x共有7種數(shù)據(jù)尋址方式,如表所示:尋址方式用途舉例指令含義立即尋址主要用于初始化LD 10,A將立即數(shù)10傳送至累加器A絕對(duì)尋址利用16位地址尋址存儲(chǔ)單元STL A,*(y)將累加器A的低16位存放到變量y所在的存儲(chǔ)單元中累加器尋址把累加
12、器的內(nèi)容作為地址READYA x按累加器A作為地址讀程序存儲(chǔ)器,并存入變量x所在的數(shù)據(jù)存儲(chǔ)器單元直接尋址利用數(shù)據(jù)頁(yè)指針和堆棧指針尋址LD x,A(DP+x的低7位地址)>A間接尋址利用輔助寄存器作為地址指針LD *AR1,A(AR1) >A存儲(chǔ)器映象寄存器尋址快速尋址存儲(chǔ)器映象寄存器LDM ST1,B(ST1)>B堆棧尋址壓入/彈出數(shù)據(jù)存儲(chǔ)器和MMR(存儲(chǔ)器映象寄存器)PSHM AG(SP)1>SP,(AG)>TOS C54x尋址存儲(chǔ)器有兩種基本的數(shù)據(jù)形式:16位數(shù)和32位數(shù)。大多數(shù)指令能夠?qū)ぶ?6位數(shù),但是,只有雙精度和長(zhǎng)字指令才能尋址32位數(shù)。在32
13、位尋址時(shí),先處理高有效字,然后處理低有效字。如果尋址的第1個(gè)字處在偶地址,那么第2 個(gè)字就處在下一個(gè)(較高的)地址;如果第1個(gè)字處在奇地址,那么第2個(gè)字就處在前一個(gè)(較低的)地址。 循環(huán)操作:BANZ在程序設(shè)計(jì)時(shí),經(jīng)常需要重復(fù)執(zhí)行某一段程序。利用BANZ(當(dāng)輔助寄存器部位0時(shí)轉(zhuǎn)移)指令執(zhí)行循環(huán)技術(shù)和操作是十分方便的。如果要重復(fù)執(zhí)行n次,則重復(fù)指令中應(yīng)規(guī)定計(jì)數(shù)值為n1次。 重復(fù)操作:C54x有3條重復(fù)操作指令:RPT(重復(fù)下條指令)、RPTZ(累加器清0并重復(fù)下條指令)以及RPTB(塊重復(fù)指令)。重復(fù)指令RPT或 RPTZ允許重復(fù)執(zhí)行緊隨其后的那一條指令。如果要重復(fù)執(zhí)行n次,
14、則重復(fù)指令中應(yīng)規(guī)定計(jì)數(shù)值為n1次。 23 程序三編程目的:實(shí)現(xiàn)DSP分時(shí)輸入與輸出功能程序功能:先從一個(gè)I/O口讀入一數(shù)據(jù)并將其存入某地址,再?gòu)脑摰刂穼?shù)據(jù)輸出到另一個(gè)I/O口 .title "dspio.asm" .mmregsPA0.set0 PA1.set1STACK.usect"STACK",10h .bssy,1 .textstart:PORTRPA1,y ;從I/O口讀入數(shù)據(jù)并儲(chǔ)存到y(tǒng)所在的地址 LDy,A ;將y中的數(shù)據(jù)寫入累加器A中(便于觀察y中數(shù)值的變化情況) PORTWy,PA0 ;將y所在地址中的數(shù)據(jù)輸出到I/
15、O口end:Bend.end 2.4 程序四編程目的:實(shí)現(xiàn)DSP循環(huán)輸入與輸出功能程序功能:令DSP反復(fù)執(zhí)行從輸入裝置讀取數(shù)據(jù),并將數(shù)據(jù)存入某一地址,再?gòu)脑摰刂穼?shù)據(jù)輸出到輸出設(shè)備 .title "dspio2.asm" .mmregsPA0.set0 PA1.set1STACK.usect"STACK",10h .bssy,1 .textstart:STM#4000,AR1;AR1作循環(huán)計(jì)數(shù)器LOOP1:PORTRPA1,y ;循環(huán)讀寫LDy,APORTWy,PA0 BANZLOOP1,*AR1end:Bend.end
16、;2.5 程序五編程目的:應(yīng)用DSP實(shí)現(xiàn)對(duì)壓水堆大破口事故(LOCA)進(jìn)行事故后果判斷編程背景:當(dāng)始發(fā)事件大LOCA發(fā)生時(shí),需要下列功能響應(yīng)以消除或緩解事故:(1) 停堆(RS),中止核裂變過(guò)程;(2) 安全殼噴淋系統(tǒng)動(dòng)作,以降低安全殼壓力(COI);(3) 向堆芯注入應(yīng)急冷卻水(ECI),以冷卻堆芯;(4)
17、安全殼再循環(huán)冷卻(COR),由循環(huán)噴淋水導(dǎo)出安全殼內(nèi)熱量,控制安全殼的溫度核壓力;(5) 堆芯再循環(huán)冷卻(ECR),進(jìn)行堆芯再循環(huán)冷卻階段。 功能事件樹(shù)圖如下圖所示 破口 PB堆次臨界RS安全殼降壓COI堆芯應(yīng)急冷卻ECI完全殼降壓COR堆芯再循環(huán)冷卻ECR序列號(hào)堆芯是否熔化 程序功能:反復(fù)從輸入口讀取數(shù)據(jù)(不同位分別代表執(zhí)行不同的功能響應(yīng)),經(jīng)DSP處理后將判斷結(jié)果輸出到輸出口,通過(guò)指示燈(不同的燈代表不同事故結(jié)果)顯示出來(lái) .title "LOCA.asm" .mmr
18、egsPA0.set0 PA1.set1STACK.usect"STACK",10h .bssy,1 .bssx,1 .defstart .datatable:.word0,128,0,128,0,32,0,32,0,128,0 ;事故分析列表 .word128,0,32,0,32,0,0,0,0,0 .word4,0,4,0,0,0,0,0,4,0 .word4,0,0,0,0,0,0,0,0,0 .word0,0,0,0,0,0,0,0,0,0 .word0,0,2,0,2,0,0,0,0,0 .word2,0,2,0,0,0,0,0,0,0 .word0,0,0,0,0,0,0,0,0,0 .word0,0,0,0,0,0,0,0,0,0 .word0,0,0,0,0,0,0,0,0,0 .word16,0,16,0,0,0,0,0,16,0 .word16,0,0,0,0,0,1,0,1,0 .word0,0,0,0,1,0,1,0,0,0 .wo
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 培訓(xùn)基地實(shí)訓(xùn)合作協(xié)議
- 乒乓球館裝修工程管理費(fèi)
- 飼料運(yùn)輸安全責(zé)任書(shū)
- 零售業(yè)態(tài)會(huì)員管理與營(yíng)銷實(shí)踐作業(yè)指導(dǎo)書(shū)
- 綠色環(huán)保技術(shù)應(yīng)用方案
- 汽車制造工藝指南
- 業(yè)務(wù)開(kāi)展進(jìn)展報(bào)告表
- 美術(shù)培訓(xùn)中心裝修延期協(xié)議
- 消防安全專項(xiàng)檢查方案
- 生態(tài)農(nóng)業(yè)種植項(xiàng)目
- pp纖維濾布生產(chǎn)工藝
- 《小升初家長(zhǎng)會(huì)》課件
- 制藥無(wú)菌灌裝操作規(guī)程
- (完整版)年產(chǎn)30萬(wàn)噸甲醇工藝設(shè)計(jì)畢業(yè)設(shè)計(jì)
- 農(nóng)田春耕安全生產(chǎn)培訓(xùn)
- 2023工程量增加補(bǔ)充協(xié)議正規(guī)版
- DN1000供水管搶修施工方案
- A4紙筆記本橫格線條打印模板
- 【大班戶外體育游戲活動(dòng)的問(wèn)題及對(duì)策研究S幼兒園為例7000字(論文)】
- 工程安全生產(chǎn)竣工評(píng)定表
- Vue.js前端開(kāi)發(fā)實(shí)戰(zhàn)(第2版)全套完整教學(xué)課件
評(píng)論
0/150
提交評(píng)論