?? 10-2.asm
字號:
.def start
.def ad
.def ad_start
.def rpt,timer1
.ref ftranform
.ref sinx
tim1_ctl .equ 0x01980000 ; 定義定時器控制寄存器地址
tim1_prd .equ 0x01980004 ; 定義定時器周期寄存器地址
tim1_cnt .equ 0x01980008 ; 定義定時器重載寄存器地址
ce3ctl .equ 0x01800014 ; 定義定時ce3空間控制寄存器地址
ce1ctl .equ 0x01800004 ; 定義定時ce1空間控制寄存器地址
pcr .equ 0x018c0024 ; 定義緩沖串口的pcr寄存器地址
pcr1 .equ 0x01900024 ; 定義緩沖串口的pcr1寄存器地址
.bss reg,128,0,0 ; 在內(nèi)存中為reg變量申請128個字節(jié)
.global reg ; 定義reg變量
.sect ".boot" ; 定義名字為boot的用戶段
start:
MVK ce1ctl,b0 ; 設(shè)置ce1空間寄存器
MVKH ce1ctl,b0
MVKL 0ffffff0fh,a0
MVKH 0ffffff0fh,a0
STW a0,*b0
NOP 4
MVKL 90000400h,b0 ; 直接使用ce1空間的地址
MVKH 90000400h,b0 ; 將ce1空間地址送到b0和b1
MVKL 400h,b1
MVKH 400h,b1
MVKL 9c00h,b2
MVKH 9c00h,b2
pg:
LDB *b0++,a0 ; 設(shè)置ce1空間寄存器
NOP 4
STB a0,*b1++
NOP 3
SUB b2,4,b2
NOP 5
B ad_start ; 跳轉(zhuǎn)到ad_start開始設(shè)置ad
NOP 5
.text
ad_start:: MVC csr,b0 ; 設(shè)置全局控制寄存器
AND -2,b0,b0
MVC b0,csr ; 屏蔽所有的可屏蔽中斷
MVKL 0fff0h,b0
MVKH 0fff0h,b0
MVC b0,icr
NOP ; 清除所有的中斷標(biāo)志,避免上電時可能掛起的中斷
MVKL pcr,a10
MVKH pcr,a10 ; 設(shè)置clkr0引腳為高電平
MVKL 3a2ah,b10 ; 使用clkr0引腳復(fù)位cpldl
STW b10,*a10
NOP 8
NOP 4
MVKL ce3ctl,a0 ; 設(shè)置ce3空間控制寄存器
MVKH ce3ctl,a0
MVKL 10510222h,a1
MVKH 10510222h,a1
STW a1,*a0
NOP 4
MVKL 8020h,b1 ; 設(shè)置中斷使能寄存器
MVKH 8020h,b1
MVC ier,b0
OR b1,b0,b0
MVC b0,ier ; 使能中斷INT5和INT15
MVC ier,b0 ; 設(shè)置ier寄存器
MVK 02h,b1
OR b1,b0,b0
MVC b0,ier ; 使能所有的可屏蔽中斷
timer1_init: MVKL tim1_prd, b4 ; 設(shè)置定時器1的周期寄存器
MVKH tim1_prd, b4
MVKL 02F40h, a0
MVKL 0F40h, a0
STW a0, *b4
NOP 4 ; 定時器1設(shè)置成8000*4*clkout時鐘周期
MVKL 00000FF7Eh,a2 ; 設(shè)置定時器的控制寄存器
MVKH 00000FF7Eh,a2
MVKL tim1_ctl, b4
MVKH tim1_ctl, b4
STW a2, *b4
NOP 4 ; 關(guān)閉定時器1
cpld: ; 開始控制cpld的時鐘脈沖
MVKL sinx,b1 ; 變量sinx的首地址送到b1寄存器
MVKH sinx,b1
MVKL 0b0000004h,a1 ; 將外設(shè)CPLD的地址存放到a1寄存器
MVKH 0b0000004h,a1
MVKL 0ffh,a6
MVKH 0ffh,a6
MVKL 0Fh,b0
MVKH 0Fh,b0
ad_init: ; 初始化ad
[!b0] B ad_end
NOP 5
MVKL 04010000h,a3
MVKH 04010000h,a3
STW a3,*a1 ; 向a1端口寫數(shù)據(jù)
NOP 3
MVKL 04000000h,a3
MVKH 04000000h,a3
STW a3,*a1 ; 向a1端口寫數(shù)據(jù)
NOP 3 ; 軟件復(fù)位ad
MVKL 00200000h,a3
MVKH 00200000h,a3 ; 正常運(yùn)行,設(shè)置CR0引腳
STW a3,*a1 ; 向a1端口寫數(shù)據(jù)
NOP 3
MVKL 06300000h,a3
MVKH 06300000h,a3
STW a3,*a1 ; 向a1端口寫數(shù)據(jù)
NOP 3
SUB b0,1,b0
LDW *a1,a11 ; 從a1端口讀數(shù)據(jù)
NOP 3
MVKL 0230h,a12
MVKH 0230h,a12 ; 讀CR1引腳的狀態(tài)
LDW *a1,b11 ; 從a1端口讀數(shù)據(jù)
NOP 3
MVKL 0020h,b12
MVKH 0020h,b12 ; 讀CR0引腳的狀態(tài)
SHL a11,4,a11
SHRU a11,20,a11
CMPEQ a11,a12,a2 ; 判斷ad初始化是否成功
[!a2] B ad_init ; ad初始化未成功,重新初始化
NOP 5
SHL b11,4,b11
SHRU b11,20,b11
CMPEQ b11,b12,b2
[!b2] B ad_init
NOP 5
MVKL 04300000h,a3
MVKH 04300000h,a3
STW a3,*a1 ; 從a1端口讀數(shù)據(jù)
NOP 3 ; 正常運(yùn)行,設(shè)置CR0引腳
ad_end: NOP 4
rpt: XOR b0,b0,b0
MVC csr,b0
OR 1,b0,b0
MVC b0,csr ; 使能可屏蔽中斷
NOP 8
NOP 8
ZERO a5
ZERO a2
MVKL pcr,a10
MVKH pcr,a10 ; 設(shè)置clkr0引腳為低
MVKL 3a28h,b10 ; 使用clkr0引腳放棄對cpld的控制
STW b10,*a10
NOP 4
start_time1: MVKL 00000FFFEh,a10 ; 開始啟動定時器1
MVKH 00000FFFEh,a10 ; 計算原始數(shù)據(jù)的采樣時間
MVKL tim1_ctl, b10
MVKH tim1_ctl, b10
STW a10, *b10
NOP 4
loop: NOP
ZERO b0
[a2] ADD a5,1,a5
[a2] MVKL reg,a4
[a2] MVKH reg,a4
[a2] STW a5,*a4
[a2] B ftranform ; 跳轉(zhuǎn)到非均勻數(shù)據(jù)的傅立葉變換程序
NOP 5
NOP
B loop
NOP 5
ad: LDW *a1,a4
NOP 4
SHL a4,4,a4
SHRU a4,4,a4 ; 數(shù)據(jù)格式為二進(jìn)展原碼
SHR a4,4,a4 ; 數(shù)據(jù)格式為二進(jìn)展補(bǔ)碼
STW a4,*b1++ ; b1為變量sinx
NOP 4
SUB a6,1,a6
CMPEQ a6,0,a2
B irp
NOP 5
timer1: MVKL pcr1,a10
MVKH pcr1,a10 ; 設(shè)置dx1引腳為低電平
MVKL 3a0ah,b10 ; 輸出非均勻時間
STW b10,*a10
NOP 8
NOP 4
MVKL 3a2ah,b10 ; 設(shè)置dx1引腳為高電平
STW b10,*a10
NOP 8
NOP 4
MVKL 3a0ah,b10 ; 設(shè)置dx1引腳為低電平
STW b10,*a10
NOP 4
MVKL ad_start,b0
MVKH ad_start,b0
MVC b0,irp
B irp
NOP 5
.end
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -