?? 5-1.asm
字號:
.mmregs
.def main
.def ad50_data
spsa0 .set 38h ; 緩沖串口0子地址地址寄存器
spcd0 .set 39h ; 緩沖串口0子地址數(shù)據(jù)寄存器
dxr10 .set 23h ; 緩沖串口0數(shù)據(jù)1發(fā)送寄存器
drr10 .set 21h ; 緩沖串口0數(shù)據(jù)1接收寄存器
spcr10 .set 00h ; 設(shè)置緩沖串口0的所有寄存器的子地址
spcr20 .set 01h
rcr10 .set 02h
rcr20 .set 03h
xcr10 .set 04h
xcr20 .set 05h
srgr10 .set 06h
srgr20 .set 07h
mcr10 .set 08h
mcr20 .set 09h
rcera0 .set 0ah
rcerb0 .set 0bh
xcera0 .set 0ch
xcerb0 .set 0dh
pcr0 .set 0eh
k_iptr .set 000111000b<<07 ; 設(shè)置中斷向量表的地址,指向0x1C00
k_temp .set 1111111b
data_dp .usect "filter_vars",0
main:
STM 4000h,sp ; 設(shè)置堆棧指針
LD #0h,dp ; 設(shè)置數(shù)據(jù)頁指針
LDM pmst,a ; 改變中斷向量表首地址
AND #k_temp,a
OR #k_iptr,a
STL a,ar6
MVDM ar6,pmst
NOP
NOP
NOP
STM #0ffffh,tcr ; 關(guān)閉定時器
STM #05h,prd ; 設(shè)置定時器周期寄存器
STM #08e0h,tcr ; 設(shè)置定時器控制寄存器
SSBX intm ; 關(guān)閉中斷
SSBX sxm
ST #2491h,swwsr ; 設(shè)置外設(shè)等待時間寄存器
NOP
NOP
NOP
SSBX xf ; 設(shè)置XF引腳為高
NOP ; 等待硬件完成高電平檢測
NOP
NOP
NOP
dss_init: ; 設(shè)置DSP的緩沖串口0的所有寄存器
RSBX cpl
NOP
NOP
STM spcr10,spsa0
NOP
STM 06h,spcd0
NOP
STM spcr20,spsa0
NOP
STM 200h,spcd0
NOP
STM pcr0,spsa0
NOP
STM 0eh,spcd0
NOP
STM rcr10,spsa0
NOP
STM 40h,spcd0
NOP
STM rcr20,spsa0
NOP
STM 4h,spcd0
NOP
STM xcr10,spsa0
NOP
STM 40h,spcd0
NOP
STM xcr20,spsa0
NOP
STM 4h,spcd0
NOP
LD #64h,a
RPT #50
NOP
STM spcr10,spsa0
NOP
STM 07h,spcd0
NOP
STM spcr20,spsa0
NOP
STM 201h,spcd0 ; 打開緩沖串口0
NOP
RPT #50
NOP
aic_init: ; 初始化AD50
STM 0h,imr ; 設(shè)置中斷寄存器
ORM 10h,imr
STM 0ffffh,ifr ; 清上電復(fù)位可能影響的中斷使能
PORTW 08h,02h
NOP
NOP
NOP
CALL wait ; 延時一段時間,等待AD初始化
waitr$14$:
STM 0h,spsa0
NOP
LDM spcd0,a
NOP
NOP
NOP
AND #2h,0,a,a
BC waitr$14$,aeq ; 判斷是否可以寫數(shù)據(jù)到AD50
STM #101h,dxr10 ; 設(shè)置AD50的控制寄存器1
CALL wait
STM 0ffffh,ifr
waitr$17$:
STM 0h,spsa0
NOP
LDM spcd0,a
NOP
NOP
NOP
AND #2h,0,a,a
BC waitr$17$,aeq ; 判斷是否可以寫數(shù)據(jù)到AD50
STM #210h,dxr10 ; 設(shè)置AD50的控制寄存器2
CALL wait
STM 0ffffh,ifr
waitr$22$:
STM 0h,spsa0
NOP
LDM spcd0,a
NOP
NOP
NOP
AND #2h,0,a,a
BC waitr$22$,aeq ; 判斷是否可以寫數(shù)據(jù)到AD50
STM #430h,dxr10 ; 設(shè)置20kHz采樣頻率
STM #440h,dxr10 ; 設(shè)置15kHz采樣頻率
STM #400h,dxr10 ; 設(shè)置8kHz采樣頻率;設(shè)置AD50的控制寄存器4
CALL wait
STM 0ffffh,ifr
waitr$24$:
STM 0h,spsa0
NOP
LDM spcd0,a
NOP
NOP
NOP
AND #2h,0,a,a
BC waitr$24$,aeq ; 判斷是否可以寫數(shù)據(jù)到AD50
STM #301h,dxr10 ; 設(shè)置AD50的控制寄存器3
CALL wait
STM #1,ar0
NOP
STM 0ffffh,ifr
NOP
RSBX xf
NOP
NOP
NOP
LDM drr10,a ; 清空緩沖串口的數(shù)據(jù)接收寄存器
NOP ; 避免讀入可能復(fù)位影響的接收數(shù)據(jù)
STM 0h,imr
ORM 10h,imr ; 設(shè)置中斷標(biāo)志寄存器
NOP
NOP
RSBX intm ; 打開總中斷
wait_data: ; 主程序,空操作,等待采樣數(shù)據(jù)到來
NOP
NOP
NOP
NOP
B wait_data
NOP
NOP
NOP
wait: ; 延時子程序
RPT #8048 ; 可以通過重復(fù)指令來改變延時的時間
NOP
NOP
NOP
RET ; 延時子程序返回
NOP
NOP
NOP
ad50_data: ; AD50數(shù)據(jù)接收中斷服務(wù)程序,讀取AD的數(shù)據(jù)
LDM drr10,a ; 將緩沖串口要輸入到數(shù)據(jù)寄存器的內(nèi)容轉(zhuǎn)送到累加器a中
CALL signal_processing ; 調(diào)用信號處理子程序
NOP
NOP
NOP
RETE ; 中斷返回
NOP
NOP
STL a,dxr10 ; 數(shù)據(jù)從累加器a中輸出到AD50
NOP
NOP
signal_processing ; 語音信號處理子程序
NOP ; 在此可以加入語音信號處理
RET ; 語音信號處理子程序返回
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -