?? scopead.asm
字號:
;-----------------------------------------------------------
; 重慶大學DSP實驗室
; 函數名:
; void scope(scope_struct *p, int DAC_data_A, int DAC_data_D)
; 函數功能:
; 本函數將函數參數(Q11格式)轉換
; 至D/A芯片MAX5741的量程范圍內,以Q0格式
; 表示,同時遵從MAX5741的通信規約。當程序
; 運行時,用戶可以調用本子程序對數據進行
; 轉換,再通過SPI模塊將結果送至MAX5741芯片
; 進行DA轉換,然后通過示波器在MAX5741的輸出口
; 觀察該程序變量的變化波形,方便程序的調試。
; 轉換公式:
; 設待轉換程序變量的數值為U,D/A的最大
; 輸入數字量為Umax(對于MAX5741,Umax=3FFh),
; 則轉換公式為:
; Uout=Umax/2+U*Umax/2
; 入口條件:
; scope_struct *p ;pointer which point to the return structure
; int DAC_data_A ;Qx, data which will be sent to DAC A channel
; int DAC_DATA_D ;Qx, Data which will be sent to DAC D channel
; 出口條件:
; typedef struct
; { int Qvalue; //Qx value of the parameters,
; //Q16:00h, Q15:01h, Q14:02h, Q13:03h, Q12:04h, Q11:05h, Q10:06h
; //Note this parameter must be in range of 0=<Qvalue<=6
; int scopeA; //data of A channel
; int scopeD; //data of D channel
; int scope_para; //which two parameters will be sent out
; //refer to the main program
; }scope_struct;
; 請用戶在主程序中聲明以下外部函數:
; void scope(scope_struct *p, int DAC_data_A, int DAC_data_D);
; 2002.6.20
;-----------------------------------------------------------
.def _scope
scope_frame .set 1h
Qvalue_min .set 0h
Qvalue_max .set 6h
_scope:
POPD *+
SAR AR0,*+
SAR AR1,*
LAR AR0,*
LAR AR2,*+,AR0 ;STACK:DAC_dataD/DAC_dataA/ *p/address/AR0/AR1/Y
;ARP:AR0, AR1:Y, AR0:AR1
SETC SXM
SPLK #1ffh,* ;STACK:DAC_dataD/DAC_dataA/ *p/address/AR0/0x1FF/Y
;ARP:AR0, AR1:Y, AR0:0x7FF
LT *,AR2 ;TREG: 0x1FF
;ARP:AR2
SBRK #3
LAR AR3,*- ;AR3:Qvalue, AR2:dac_dataA
MPY *-,AR3 ;ARP:AR3
;AR0:0x1FF, AR2:DAC_dataD
LACC * ;Qvalue-->ACC
BCND scope7,GEQ
SPLK #Qvalue_min,* ;if Qvalue<0, then Qvalue=Qvlaue_min
B scope8
scope7 SUB #Qvalue_max
BCND scope8,LT
SPLK #Qvalue_max,* ;if Qvalue>Qvalue_max, then Qvalue=Qvalue_max
scope8 LACC *+,AR0
ADD #scopetable
TBLR *
LACC *,AR3
BACC ;ARP:AR3, AR0:x, AR2:DAC_dataD, AR3:scopeD
Qvalue16:
LACC #3ffh,15
APAC ;Umax/2+U*Umax/2
SACH *+,2,AR2 ;Q16, and left shift 2 bit
MPY *,AR3 ;DAC_dataD*0x1ff
LACC #3FFh,15
APAC ;Umax/2+U*Umax/2
SACH *,2 ;ARP:AR3, AR2:DAC_dataD, AR3:scopeD
B scopeend
Qvalue15:
LACC #1FFh,15
APAC
SACH *+,3,AR2
MPY *,AR3
LACC #1FFh,15
APAC
SACH *,3
B scopeend
Qvalue14:
LACC #1FFh,14
APAC
SACH *+,4,AR2
MPY *,AR3
LACC #1FFh,14
APAC
SACH *,4
B scopeend
Qvalue13:
LACC #1FFh,13
APAC
SACH *+,5,AR2
MPY *,AR3
LACC #1FFh,13
APAC
SACH *,5
B scopeend
Qvalue12:
LACC #1FFh,12
APAC
SACH *+,6,AR2
MPY *,AR3
LACC #1FFh,12
APAC
SACH *,6
B scopeend
Qvalue11:
LACC #1FFh,11
APAC
SACH *+,7,AR2
MPY *,AR3
LACC #1FFh,11
APAC
SACH *,7
B scopeend
Qvalue10:
LACC #1FFh,10
APAC
SFL
SACH *+,7,AR2
MPY *,AR3
LACC #1FFh,10
APAC
SFL
SACH *,7
scopeend:
LACC *
AND #0FFCh
OR #3000h ;D channel selection
SACL *-
LACC *
AND #0FFCh ;A channel selection
SACL *,AR1
SBRK #(scope_frame+1)
LAR AR0,*-
PSHD *
RET
scopetable:
scope0 .word Qvalue16 ;Q16
scope1 .word Qvalue15 ;Q15
scope2 .word Qvalue14 ;Q14
scope3 .word Qvalue13 ;Q13
scope4 .word Qvalue12 ;Q12
scope5 .word Qvalue11 ;Q11
scope6 .word Qvalue10 ;Q10
.end
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -