?? 3-1.asm
字號:
.mmregs
.def jump
.def start
k_sample_num .set 256 ;設置保存采樣數據的點數
out_data .usect "out_vars", k_sample_num
;數據輸出位置,大小為k_sample_num
;用來保存一批數據來查看采樣是否正確
;也可以供需要分批處理數據的程序調用程序中
;可以用ar0~ar7來指定數據的首地址
in_data .usect "in_vars",1
d_cr0_send .usect "cr_send",1
d_cr1_send .usect "cr_send",1
;定義2個狀態字
;此狀態字就是需要開始寫入TLV1571的初始值
d_temp .usect "temp",1 ;存放臨時數據
k_cr0_send .set 0080h ;初始化兩個狀態字的值
k_cr1_send .set 0100h
;重新映射中斷向量的變量
k_iptr .set 000111000b<<07 ;point 1C00H 新的向量區
;iptr是DSP內部PMST寄存器的高9bit
;用來指定中斷向量表的位置,復位時全為1
;為了調試此程序,iptr將重新映射到地址1D00處
k_temp .set 1111111b
;定義一個常數,用于以后與pmst的與操作
;保持pmst的低6bit不變
d_pmst .usect "pmst",1
.sect "prog"
start:
ldm pmst,a ;取出PMST的值,放入累加器a
;改變pmst的高9bit,再放入pmst
and #k_temp,a
or #k_iptr,a
stl a,ar2
mvdm ar2,pmst
stm #0001h,imr ;開中斷0
nop
nop
stm #0002h,ifr ;通過寫IFR,取消所有已經掛起的中斷
nop
rsbx intm ;狀態寄存器ST0的INTM位,允許中斷
nop
stm #d_temp,ar2
stm #d_cr0_send,ar1
st #k_cr0_send,*ar1+
st #k_cr1_send,*ar1
stm #d_cr0_send,ar1
ld #k_sample_num,a ;k_sample_num用來計數
stm #out_data,ar5
portr 01h,*ar2 ;讀其他端口,使ADC的CS為高
nop
nop
nop
portw *ar1+,02h ;填AD轉換器的寄存器cr1
rpt #8
nop
portw *ar1,02h ;填AD轉換器的寄存器cr1
portr 01h, *ar2 ;讀其他端口,使ADC的CS為高
rpt #10
nop
nop ;此時,寫好狀態字,AD開始采樣
;等待中斷, 使用累加器a做計數器
;當寫完k_sample_num個數據后
wait: nop ;重置累加器a,并使ar5指向out_data的開始地址
nop
bc wait,aneq
nop
stm #out_data,ar5
ld #k_sample_num,a
b wait
nop
;中斷服務程序,用以讀轉換信號,放入out_data區
jump: sub #1h,a ;計數
rsbx xf ;發出讀信號,AD收到后開始下一次采樣
rpt #5
nop ;等待幾個周期,便于示波器查看波形
portr 00h,*ar5
;讀AD轉換數據,寫在RAM的out_data數據段
rpt #5
nop
ssbx xf ;使讀信號無效
nop
portr 01h,*ar2 ;讀其他端口,使ADC的CS為高
nop
nop
portw *ar5+,03h ;從DA輸出
rete ;中斷返回
.end
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -