?? ly3.asm
字號:
.title "A"
.bss GPR0,1 ;通用目的寄存器
.copy "240XAVECTOR.H" ;拷貝中斷向量頭文件
.include "240XA.H"
.def _c_int0
DP_CAN .set 0E2H
DP_CAN2 .set 0E4H
.sect ".PVECS" ;定義子向量段
PVECTORS B PHANTOM ;保留向量地址偏移量0000H
B PHANTOM ;保留向量地址偏移量0001H
B PHANTOM ;保留向量地址偏移量0002H
B PHANTOM ;保留向量地址偏移量0003H
B PHANTOM ;保留向量地址偏移量0004H
B PHANTOM ;保留向量地址偏移量0005H
B SCI_RX_ISR ;保留向量地址偏移量0006H SCI接收中斷
B PHANTOM ;保留向量地址偏移量0007H
B PHANTOM ;保留向量地址偏移量0041H
.data
COEF .word 0A3EH,0H,0999H,01460H,01CD0H,02000H
.word 01CD0H,01460H,0999H,0H,0A3EH
SIN .word 0000H,0F4H,0553H,05AFH,0386H,0432H,04BEH,0526H,044AH
.word 0581H,0573H,0541H,04EFH,0480H,03F9H ,0363H,02C3H,03A8H
.word 0484H,054FH,03CAH,0699H,070EH,075DH,0784H,0783H,05C8H
.word 0709H,0698H,0609H,0562H, 04AAH,03E8H,04AAH,0562H,0609H
.word 0698H,0709H,05C8H,0783H,0784H,075DH,070EH,0699H,03CAH
.word 054FH,0484H,03A8H,02C3H ,0263H,03F9H,0480H,04EFH,0541H
.word 0573H,0581H,044AH,0526H,04BEH,0432H,0386H,05AFH,0553H
.word 0F4H
SIC: .word 03FFh,03FEh,03FBh,03F4h,03ECh,03E1h,03D3h,03C4h
.word 03B2h,039Dh,0387h,036Eh,0353h,0336h,0317h,02F6h
.word 02D4h,02AFh,0289h,0261h,0238h,020Eh,01E2h,01B5h
.word 0187h,0158h,0129h,00F8h,00C7h,0096h,0064h,0032h
.word 00h,0FFCEh,0FF9Ch,0FF6Ah,0FF39h,0FF08h,0fED7h,0FEA8h
.word 0FE79h,0FE4Bh,0FE1Eh,0FDF2h,0FDC8h,0FD9Fh,0FD77h,0FD51h
.word 0FD2Ch,0FD0Ah,0FCE9h,0FCCAh,0FCADh,0FC92h,0FC79h,0FC63h
.word 0FC4Eh,0FC3Ch,0FC2dh,0FC1Fh,0FC14h,0FC0Ch,0FC05h,0FC02h
.word 0FC00h,0FC02h,0FC05h,0FC0Ch,0FC14h,0FC1Fh,0FC2Dh,0FC3Ch
.word 0FC4Eh,0FC63h,0FC79h,0FC92h,0FCADh,0FCCAh,0FCE9h,0FD0Ah
.word 0FD2Ch,0FD51h,0FD77h,0FD9Fh,0FDC8h,0FDF2h,0FE1Eh,0FE4BH
.word 0FE79h,0FEA8h,0FED7h,0FF08h,0FF39h,0FF6Ah,0FF9Ch,0FFCEh
.text
_c_int0:
LDP #0H
SETC INTM ; 禁止中斷
SETC CNF
CLRC SXM
SPLK #0000H,IMR ; 屏蔽所有CPU中斷
LACC IFR ; 讀中斷標志
SACL IFR ; 清所有的中斷標志
LDP #00E0H ; 設置DP=E0H,則地址為7000H~707FH
SPLK #006FH,WDCR ; 使能看門狗
SPLK #0080H,SCSR1 ; 使能ADC模塊時鐘
KICK_DOG
SPLK #0H,60H ;設置等待狀態發生器:
OUT 60H,WSGR ;程序區,0-7 等待狀態
ADC
* 初始化 ADC 寄存器:
LDP #00E1H ;設置DP=E1H,則地址為7080H~70FFH
SPLK #4000H,ADCCTRL1 ;復位ADC模塊
NOP
SPLK #3000H,ADCCTRL1 ;設置ADC控制寄存器,定義為級聯模式,排
;序器為SEQ,工作模式為啟動/停止。
SPLK #0,MAXCONV ;設定一次自動轉換為16個通道(最大值)
* 設定轉換順序:
SPLK #03210H,CHSELSEQ1 ;轉換通道 0,1,2,3
SPLK #07654H,CHSELSEQ2 ;轉換通道4,5,6,7
SPLK #0BA98H,CHSELSEQ3 ;轉換通道8,9,10,11
SPLK #0FEDCH,CHSELSEQ4 ;轉換通道12,13,14,15
SPLK #04000H,ADCCTRL2 ;復位排序器使排序器指針指向CONV00
SPLK #02000H,ADCCTRL2 ;啟動轉換
LOOP: LAR AR4,RESULT0
B ADC
B LOOP
CALL LMS
CALL FFT
;************自適應濾波**********************
LMS:
N .set 10 ;存放系數的起始地址
WN .set 0220H
DPTRO .set 2000H ;輸出起始地址
ONE .set 08100H
U .set 08102H ;存放收斂因子U的地址
EN .set 08104H
DN .set 08106H ;存放理想信號的地址
YN .set 08108H ;當前輸出的地址
I .set 127
.sect ".VECTORS"
.bss BUFF, N
.bss TEMP, 1
.text
_C_INT1:
LDP #00E0H
SPLK #006FH,WDCR ;關看門狗
LDP #04H
LAR AR0,#WN
MAR *,AR0
RPT #10
BLDD #COEF,*+ ;把系數置入以220H開始的單元中
LAR AR0,#WN
LDP #6
LAR AR1,#BUFF ;AR1指向緩沖區
MAR * ,AR1
ZAC
RPT #10
SACL *+ ;緩沖器清零
LDP #04H
LAR AR2,#300H
RPT #63
BLDD #SIN,*+ ;SIN值依次放入DPTRI輸入起始地址
RPT #63
BLDD #SIN,*+
LAR AR2,#300H
LAR AR3,#DPTRO
SPLK #0147H,U ;(U)=0.01
SPLK #01H,ONE
SPLK #0999H,DN ;置入理想信號
LAR AR6,#I
DONE:
MAR *,AR2
LACL *+
LDP #6
SACL BUFF ;采樣信號放入緩沖器
CALL FIR
MAR *,AR3
SACH *+,1 ;輸出信號
LDP #04H
SACH YN,1
LACL DN
SUB YN ;(ACC)=(DN)-(YN)
SACL EN
LT EN
MPY U
ZAC
APAC ;計算的(ACC)=U*E(N)
ADD ONE,15
SACH EN ;修正(EN)=U*E(N)
LAR AR0,#WN
LDP #06H
LAR AR1,#BUFF+N
LDP #04H
LT EN
LAR AR5,#10
MAR *,AR1
MPY *,AR0 ;U*E(N)*X(N-10)
ALTER:
LACC *,0,AR1
MPYA *-,AR0 ;(ACC)=W(I)+U*E(N)*X(N-I)
SACL *+,0,AR5
BANZ ALTER,*-,AR0
MAR *,AR6
BANZ DONE,*- ;改變系數W(N)
FIR:
LAR AR1,#BUFF+N
MPY #0H ;PREG清零
ZAC ;累加器清零
LAR AR4, #10
SUM:
MAR *,AR1
LT *-,AR0
MPY *+,AR4
BANZ SUM,*-
APAC
RET
;***********************FFT************************************
FFT:
I0 .EQU 98
J .EQU 99 ;循環計數器
L .EQU 101
M .EQU 102
B .EQU 103
TTTB .EQU 104
R1 .EQU 105
R2 .EQU 106
I1 .EQU 107
I2 .EQU 108
I128 .EQU 109
I512 .EQU 110
I768 .EQU 111
I800 .EQU 112
S1 .EQU 114
XT .equ 115
C1 .EQU 116
YT .equ 117
T .EQU 118
TABLE .EQU 2000h ;128個樣值存放單元的首址
.text
START: LALK 128
SACL I128
LALK 512
SACL I512
LALK 768
SACL I768
LALK 800
SACL I800
REAL: LRLK AR0,64
LRLK AR1,512
LRLK AR2,127
LAR AR3,#TABLE
REPR: LARP AR3
LACC *+,0,AR1
SACL *BR0+
LARP AR2
BANZ REPR
LACK 0
LRLK AR1,640
LRLK AR2,127
REPI: LARP AR1
SACL *+
LARP AR2
BANZ REPI
W: LRLK AR1,768
LRLK AR2,95
LAR AR3,#SIC
LL: LARP AR3
LACC *+,0,AR1
SACL *+
LARP AR2
BANZ LL
LACK 0
SACL B
LOOP1: LAC B
ADDK 1
SACL B
LARK AR0,7
LAR AR1,B
LARP AR1
CMPR 2
BBNZ GLP
LAR AR7,B
LARP AR7
LACK 1
SACL TTTB
B1: LT TTTB
MPYK #2
PAC
SACL TTTB
BANZ B1
LAC TTTB
CLRC C
ROR
SACL TTTB
CLRC C
ROR
SACL L
LACK 7
SUB B
SACL T
LAR AR7,T
LACK 1
SACL M
B2: LT M
MPYK #2
PAC
SACL M
BANZ B2
LAC M
CLRC C
ROR
SACL M
LACK 0
SACL I0
LOOP2: LARK AR0,127
LAR AR7,I0
LARP AR7
CMPR 2
BBNZ LOOP1
LACK 0
SACL J
LOOP3: LAC L
SUBK 1
SACL T
LAR AR0,T
LAR AR7,J
LARP AR7
CMPR 2
BBNZ INCRI
B MAIN
INCRI: LAC I0
ADD TTTB
SACL I0
B LOOP2
MAIN: SPM 0
SOVM
SSXM
LARP AR5
LAC I0
ADD J
ADD I512
SACL T
LAR AR5,T
LAC *
SACL R1
LAC T
ADD I128
SACL T
LAR AR5,T
LAC *
SACL I1
LAC T
SUB I128
ADD L
SACL T
LAR AR5,T
LAC *
SACL R2
LAC T
ADD I128
SACL T
LAR AR5,T
LAC *
SACL I2
LARP AR5
LT J
MPY M
PAC
ADD I768
SACL T
LAR AR5,T
LAC *
SACL C1
LAC T
ADDK 32
SACL T
LAR AR5,T
LAC *
SACL S1
LARP AR5
LAC I0
ADD J
ADD I512
SACL T
LAR AR5,T
LT R2
MPY C1
PAC
LT I2
MPY S1
SPAC
SACH XT,6
LACC R1
ADD XT
ROR
SACL * ;
LAC T
ADD I128
SACL T
LAR AR5,T
LT R2
MPY S1
PAC
LT I2
MPY C1
APAC
SACH YT,6
LACC I1
ADD YT
ROR
SACL *
LAC T
SUB I128
ADD L
SACL T
LAR AR5,T
LACC R1
SUB XT
ROR
SACL *
LAC T
ADD I128
SACL T
LAR AR5,T
LACC I1
SUB YT
ROR
SACL *
LAC J
ADDK I0
SACL J
B LOOP3
GLP: LRLK AR1,127
LRLK AR2,512
LRLK AR3,640
LRLK AR4,896
PS: ZAC
MPYK 0
LARP AR2
SQRA *+,AR3
SQRA *+,AR4
APAC
SACH *+
LARP AR1
BANZ PS
WAIT:
B WAIT
RET
;*********************CAN郵箱***************************
;CAN寄存器配置
SPLK #1000H,CANMCR ;改變配置寄存器
W_CCE
BIT CANGSR,#0BH ;等待改變配置使能,檢測GSR的CCE位
BCND W_CCE,NTC ;CCE=1允許對配置寄存器進行配置
SPLK #0027H,CANBCR2 ;波特率預定標
SPLK #001AH,CANBCR1 ;采樣點設置
SPLK #0000H,CANMCR ;改變配置寄存器
W_NCCE
BIT CANGSR,#0BH ;等待禁止改變配置寄存器
BCND W_NCCE,TC
;在寫之前配置CAN
SPLK #0040H,CANMDER ;D5~D0為0,禁止任何信箱
SPLK #0103H,CANMCR ;CDR位(D8)為1,改變數據區請求
;寫CAN郵箱
LDP #DP_CAN2
SPLK #0FFFFH,CANMSGID0H
SPLK #0FFFEH,CANMSGID0L
SPLK #0008H,CANMSGCTRL0
SPLK #2447H,CANMSGID3H ;設置郵箱3的標識符
SPLK #0FFFFH,CANMSGID3L
SPLK #08H,CANMSGCTRL3 ;RTR=0,DCL=8
SPLK #01H, CANMBX3A ;郵箱3信息初始化,設置初始值
SPLK #05H, CANMBX3B
SPLK #0AH, CANMBX3C
SPLK #0EH, CANMBX3D
;寫之后設置參數
LDP #DP_CAN
SPLK #04C0H,CANMCR ;CDR位(D8)為0,正常工作模式
SPLK #004CH,CANMDER ;使能郵箱3
SPLK #0F7FFH, CANIMR ;使能中斷
SPLK #0FFFFH,CANIFR
;CAN發送報文
LDP #0E1H
LACL RESULT0
LDP #0E4H
SACL CANMBX3A ;把要發送的數據放入郵箱3
LDP #0E0H
SPLK #0020H,CANTCR ;啟動發送
W_TA BIT CANTCR,2 ;等待MBX3的傳送確認
BCND W_TA,NTC
SPLK #2000H,CANTCR ;復位發送確認位TA
B LOOP
RET
;中斷程序
GISR1: ;優先級INT1中斷人口
LDP #0E0H
LACC PIVR,1 ;讀取外設中斷向量寄存器(PIVR),并左移一位
ADD #PVECTORS ;加上外設中斷人口地址
BACC ;跳到相應的中斷服務子程序
SCI_RX_ISR:
LDP #4H ;設置頁面
SPLK #1H, SCI_FLAG ;清發送軟件標志位
CLRC INTM ;中斷清0
RET
;假中斷程序
PHANTOM
KICK_DOG ;復位看門狗
RET
GISR2: RET
GISR3: RET
GISR4: RET
GISR5: RET
GISR6: RET
;PHANTOM: RET
.END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -